{"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":[]}