Some checks failed
Deploy Web Apps / deploy (push) Successful in 5m52s
Build Android APK / build-android-apk (push) Failing after 23m15s
Queue Release Build / prepare (push) Successful in 1m42s
Queue Release Build / build-linux (push) Failing after 9m33s
Queue Release Build / build-windows (push) Successful in 26m5s
Queue Release Build / finalize (push) Has been skipped
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
/* eslint-disable @typescript-eslint/member-ordering */
|
|
import {
|
|
Component,
|
|
computed,
|
|
inject,
|
|
signal
|
|
} from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
import { FormsModule } from '@angular/forms';
|
|
import { RouterLink } from '@angular/router';
|
|
import { Store } from '@ngrx/store';
|
|
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
import {
|
|
lucideArrowLeft,
|
|
lucideSearch,
|
|
lucideUsers
|
|
} from '@ng-icons/lucide';
|
|
|
|
import { AppI18nService, APP_TRANSLATE_IMPORTS } from '../../../../core/i18n';
|
|
import { UserSearchListComponent } from '../user-search-list/user-search-list.component';
|
|
import { selectAllUsers } from '../../../../store/users/users.selectors';
|
|
import { selectSavedRooms } from '../../../../store/rooms/rooms.selectors';
|
|
|
|
/**
|
|
* Dedicated people-discovery page. Wraps {@link UserSearchListComponent} with a search
|
|
* field and an onboarding empty state for accounts that have not joined any servers yet.
|
|
* On mobile the global app-shell servers rail stays visible beside this page.
|
|
*/
|
|
@Component({
|
|
selector: 'app-find-people',
|
|
standalone: true,
|
|
imports: [
|
|
CommonModule,
|
|
FormsModule,
|
|
RouterLink,
|
|
NgIcon,
|
|
UserSearchListComponent,
|
|
...APP_TRANSLATE_IMPORTS
|
|
],
|
|
viewProviders: [provideIcons({ lucideArrowLeft, lucideSearch, lucideUsers })],
|
|
templateUrl: './find-people.component.html',
|
|
host: {
|
|
class: 'block h-full min-h-0 min-w-0 w-full overflow-hidden'
|
|
}
|
|
})
|
|
export class FindPeopleComponent {
|
|
private store = inject(Store);
|
|
searchQuery = signal('');
|
|
private users = this.store.selectSignal(selectAllUsers);
|
|
private savedRooms = this.store.selectSignal(selectSavedRooms);
|
|
|
|
/** True when the account has any people to surface (known users or server members). */
|
|
hasDiscoverablePeople = computed(() => {
|
|
if (this.users().length > 0) {
|
|
return true;
|
|
}
|
|
|
|
return this.savedRooms().some((room) => (room.members?.length ?? 0) > 0);
|
|
});
|
|
|
|
onSearchChange(query: string): void {
|
|
this.searchQuery.set(query);
|
|
}
|
|
}
|