{"version":3,"file":"7548.345f5d9c8906599b.js","mappings":"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","names":["i0","ctx_r0","userList","titleTranslateKey","UserListCarouselComponent","_UserListCarouselComponent","itemIds","this","users","map","u","userId","id","loading","length","nextToken","constructor","modalController","route","router","projects","currentUserId","showTitle","itemType","ITEM_TYPE","Users","avatarFallback","DEFAULT_USER_AVATAR_TERTIARY","onClickItem","event","item","navigate","COMMUNITY_ROUTE","console","warn","viewUserProfileModal","_this","_asyncToGenerator","create","component","ProjectMemberModalComponent","componentProps","viewOnly","cssClass","present","i1","i2","selectors","inputs","standalone","features","decls","vars","consts","template","rf","ctx","UserListCarouselComponent_fs_list_title_0_Template","$event","_c0","NgIf","ListTitleComponent","FsCarouselComponent","TranslatePipe","styles","members$","CommunityPage_ng_template_9_div_2_p_8_Template","isLoggedIn$","CommunityPage_ng_template_9_ion_spinner_1_Template","CommunityPage_ng_template_9_div_2_Template","PAGE","CommunityPage","_CommunityPage","userService","navCtrl","store","select","selectAllMembers","pipe","filter","members","onDestroy$","Subject","ngOnInit","setTimeout","ionViewWillEnter","url","takeUntil","subscribe","aUrl","path","handleAnchor","anchor","scrollToId","log","paramMap","params","get","queryParamMap","ionViewWillLeave","next","complete","scrollToItem","el","document","getElementById","offsetTop","content","scrollToPoint","scrollToTop","openPage","name","navigateForward","openRootPage","navigateRoot","i3","i4","viewQuery","IonContent","CommunityPage_div_4_Template","CommunityPage_ng_template_6_Template","CommunityPage_div_8_Template","CommunityPage_ng_template_9_Template","notLoggedInTpl_r2","noUserTpl_r3","IonHeader","TopNavbarComponent","ProjectMemberComponent","IonSpinner","AsyncPipe"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/project-members/shared/components/user-list-carousel/user-list-carousel.component.html","./src/app/project-members/shared/components/user-list-carousel/user-list-carousel.component.ts","./src/app/pages/community/community.page.html","./src/app/pages/community/community.page.ts"],"sourcesContent":["<fs-list-title *ngIf=\"showTitle\" \n icon=\"people-outline\" \n [list]=\"userList\" class=\"user-carousel__title dark no-top-margin left-margin\"\n>{{ titleTranslateKey | translate }}</fs-list-title>\n<!-- style=\"display:block;margin-right:80px;\" -->\n<fs-carousel\n [items]=\"users\"\n [itemType]=\"\"\n [canLoadMore]=\"false\"\n [isLoadingMore]=\"false\"\n [itemType]=\"itemType\"\n [currentUsername]=\"currentUserId\"\n [heading]=\"''\"\n [options]=\"{}\"\n [isProjectMember]=\"true\"\n class=\"user-carousel dark\"\n (itemClick)=\"onClickItem($event)\"\n></fs-carousel>\n<!-- \n (itemClick)=\"onClickItem($event)\"\n (loadMore)=\"loadMore.emit($event)\"\n (newItemClick)=\"addNewStackButtonClick()\" \n-->\n","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ModalController } from '@ionic/angular/standalone';\nimport { COMMUNITY_ROUTE } from '@app/app.routes';\nimport { DiscoverCardClick, ITEM_TYPE } from '@app/shared/models/layout.model';\nimport { List } from '@app/shared/models/list.model';\nimport { User, DEFAULT_USER_AVATAR_TERTIARY } from '@app/shared/models/user.model';\nimport { ListTitleComponent } from '@app/shared/components/ui/list-title/list-title.component';\nimport { FsCarouselComponent } from '@app/shared/components/fs-carousel/fs-carousel.component';\nimport { ProjectMemberModalComponent } from '@app/project-members/project-member-modal/project-member-modal.component';\n\n@Component({\n selector: 'fs-user-list-carousel',\n templateUrl: './user-list-carousel.component.html',\n styleUrls: ['./user-list-carousel.component.scss'],\n standalone: true,\n imports: [NgIf, ListTitleComponent, FsCarouselComponent, TranslatePipe],\n})\nexport class UserListCarouselComponent {\n @Input() users: Partial<User>[] = [];\n @Input() projects = [];\n @Input() currentUserId = '';\n @Input() showTitle = true;\n @Input() titleTranslateKey = 'COMMON.FILMSTACKERS';\n\n public itemType = ITEM_TYPE.Users;\n avatarFallback = DEFAULT_USER_AVATAR_TERTIARY;\n\n get userList(): List {\n const itemIds = (this.users || []).map((u) => u.userId);\n return {\n id: 'user-title-list',\n itemIds,\n loading: itemIds.length < 1,\n nextToken: '',\n };\n }\n\n constructor(private modalController: ModalController, private route: ActivatedRoute, private router: Router) {}\n\n onClickItem(event: DiscoverCardClick) {\n // console.log(`onClickItem`, event);\n if ((event.item as User).userId) {\n this.router.navigate([`/${COMMUNITY_ROUTE}/${(event.item as User).userId}`]);\n } else {\n console.warn('No UserId in event?', event);\n }\n }\n\n /** UNUSED, for ref */\n async viewUserProfileModal(userId: string) {\n const modal = await this.modalController.create({\n component: ProjectMemberModalComponent,\n componentProps: {\n userId,\n viewOnly: false,\n },\n cssClass: 'modal-lg',\n });\n return await modal.present();\n }\n}\n","<ion-header>\n <app-top-navbar [title]=\"'COMMON.COMMUNITY' | translate\">\n <!-- SLOT: anything added here will go below the ion-navbar -->\n </app-top-navbar>\n</ion-header>\n\n<ion-content class=\"light\">\n <!-- community slider -->\n <div *ngIf=\"isLoggedIn$ | async; else notLoggedInTpl\" class=\"community-carousel-wrap\">\n <fs-user-list-carousel\n [users]=\"members$ | async\"\n [currentUserId]=\"userId\"\n ></fs-user-list-carousel>\n </div>\n\n <ng-template #notLoggedInTpl>\n <div class=\"ion-padding ion-margin-top ion-text-center\">\n Please login to interact with the Community.\n </div>\n </ng-template>\n\n <div *ngIf=\"userId && !loading else noUserTpl\" class=\"member-wrap\">\n <fs-project-member\n [userId]=\"userId\"\n [showRecentStacks]=\"true\"\n ></fs-project-member>\n </div>\n\n <ng-template #noUserTpl>\n <div class=\"no-user-wrap ion-text-center ion-padding\">\n <ion-spinner *ngIf=\"loading\"></ion-spinner>\n <div *ngIf=\"!loading\" class=\"diet-limit-width\">\n <h1>{{ 'MEMBERS.ABOUT_COMMUNITY' | translate }}</h1>\n <h3>{{ 'MEMBERS.ABOUT_COMMUNITY_DISCLAIMER' | translate }}</h3>\n <br>\n <p *ngIf=\"isLoggedIn$ | async\">{{ 'MEMBERS.NO_MEMBER_SELECTED' | translate }}</p>\n </div>\n </div>\n </ng-template>\n\n <!-- undesired UI\n <div class=\"btm-btn-wrap ion-padding ion-margin-top\">\n <ion-button color=\"primary\" fill=\"clear\" size=\"medium\" (click)=\"openPage('/stack/discover')\">\n {{ 'COMMON.DISCOVER' | translate }}\n </ion-button>\n <ion-button color=\"primary\" fill=\"clear\" size=\"medium\" (click)=\"openPage('/stack/studio')\">\n {{ 'COMMON.MY_STUDIO' | translate }}\n </ion-button>\n </div> -->\n\n <div class=\"tab-bottom-spacer\"></div>\n</ion-content>\n","/** @format */\n\nimport { Component, OnInit, ViewChild } from '@angular/core';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { NavController, IonContent, IonHeader, IonSpinner } from '@ionic/angular/standalone';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { State } from '@store/reducers';\nimport { selectAllMembers } from '@store/selectors/members.selectors';\nimport { UserService } from '@app/core/services/user.service';\nimport { User } from '@app/shared/models/user.model';\nimport { TopNavbarComponent } from '@app/shared/components/top-navbar/top-navbar.component';\nimport { ProjectMemberComponent } from '@app/project-members/project-member/project-member.component';\nimport { UserListCarouselComponent } from '@app/project-members/shared/components/user-list-carousel/user-list-carousel.component';\n\nconst PAGE = '[CommunityPage]';\n\n@Component({\n selector: 'app-community',\n templateUrl: './community.page.html',\n styleUrls: ['./community.page.scss'],\n standalone: true,\n imports: [\n IonHeader,\n TopNavbarComponent,\n IonContent,\n NgIf,\n UserListCarouselComponent,\n ProjectMemberComponent,\n IonSpinner,\n AsyncPipe,\n TranslatePipe,\n ],\n})\nexport class CommunityPage implements OnInit {\n @ViewChild(IonContent) content: IonContent;\n\n // not just users of my projects, let's show all we know of...\n // this.store.select(selectMembersOfMyProjects);\n members$: Observable<User[]> = this.store.select(selectAllMembers).pipe(filter((members) => members?.length > 0));\n\n userId: string;\n loading = true;\n\n isLoggedIn$ = this.userService.isLoggedIn$;\n\n private onDestroy$ = new Subject<void>();\n\n constructor(\n // private mailerApi: MailerApiService,\n // private formBuilder: UntypedFormBuilder,\n private userService: UserService,\n private navCtrl: NavController,\n private route: ActivatedRoute,\n private store: Store<State>\n ) {}\n\n ngOnInit() {\n // watching userId in ionViewWillEnter...\n // this.userId = this.route.snapshot.paramMap.get('id');\n setTimeout(() => {\n this.loading = false;\n }, 1000);\n }\n\n /**\n * fired when entering a page, before it becomes the active one.\n * Use it for tasks you want to do every time you enter in the view\n * (setting event listeners, updating a table, etc.).\n */\n ionViewWillEnter() {\n // console.log(`${PAGE} ionViewWillEnter - check for params..`, { route: this.route });\n\n // changed to a catch-all route so we don't reload\n this.route.url.pipe(takeUntil(this.onDestroy$)).subscribe((aUrl) => {\n if (aUrl?.length > 0 && aUrl[0]?.path?.length > 0) {\n this.userId = aUrl[0].path;\n }\n });\n\n const handleAnchor = (anchor: string) => {\n switch (anchor) {\n case 'feedback': {\n this.scrollToId('feedback_form');\n break;\n }\n default: {\n console.log(`${PAGE} unhandled section: ${anchor}`);\n }\n }\n };\n\n // route params:\n this.route.paramMap.pipe(takeUntil(this.onDestroy$)).subscribe((params) => {\n if (params.get('userId')) {\n this.userId = params.get('userId');\n console.log(`${PAGE} params:`, this.userId);\n }\n if (params.get('section')) {\n handleAnchor(params.get('section'));\n }\n });\n // query params?\n this.route.queryParamMap.pipe(takeUntil(this.onDestroy$)).subscribe((params) => {\n if (params.get('userId')) {\n this.userId = params.get('userId');\n console.log(`${PAGE} queryParams:`, this.userId);\n }\n if (params.get('section')) {\n handleAnchor(params.get('section'));\n }\n });\n }\n\n ionViewWillLeave() {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n scrollToId(id) {\n // console.log(`${PAGE} scrollToId`, id);\n this.scrollToItem(id);\n }\n\n scrollToItem(id: string) {\n const el = document.getElementById(id);\n if (el && el.offsetTop) {\n // console.log(`${PAGE} el.offsetTop`, el.offsetTop);\n this.content.scrollToPoint(0, el.offsetTop, 1100); //(x, y, duration);\n } else {\n console.log(`${PAGE} scrollToItem NO EL?`, el);\n }\n }\n\n scrollToTop() {\n this.content.scrollToTop();\n }\n\n /*\n NAV \n */\n openPage(name: string) {\n // push to the nav stack and get a back button\n this.navCtrl.navigateForward(`/${name}`);\n }\n openRootPage(name: string) {\n // Reset the content nav to have just this page\n // we wouldn't want the back button to show in this scenario\n this.navCtrl.navigateRoot(`/${name}`);\n }\n}\n"],"x_google_ignoreList":[]}