{"version":3,"file":"7283.8d04afd5e879a784.js","mappings":"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","names":["i0","$event","_r1","ctx_r1","onClickItem","addNewProjectButtonClick","items","heading","itemTypes","Projects","layout","options","_r3","ProjectListComponent","_ProjectListComponent","constructor","navCtrl","toaster","translate","this","newProjectClick","EventEmitter","ITEM_TYPE","layoutTypes","LAYOUT_TYPE","searchFields","STACK_SEARCH_FIELDS","event","navWatchProject","emit","project","item","id","navigateForward","PROJECT_DETAIL_ROUTE","present","instant","i1","i2","i3","selectors","inputs","outputs","standalone","features","decls","vars","consts","template","rf","ctx","ProjectListComponent_ng_container_1_Template","ProjectListComponent_ng_container_2_Template","ProjectListComponent_ng_container_3_Template","type","Carousel","Grid","NgSwitch","NgSwitchCase","FsCarouselComponent","FsGridComponent","NgSwitchDefault","styles","changeDetection","ctx_r0","views","_r2","allowClickLike","onClickLike","isLiked","showHighlight","likes","IconListComponent_ion_col_5_span_5_Template","stacks","moreStacks","projects","members","DEBUG_LOGS","environment","production","PAGE","IconListComponent","_IconListComponent","events","showMembers","Utils","tryStopPropagation","inc","itemType","console","log","IconListComponent_ion_col_3_Template","IconListComponent_ion_col_4_Template","IconListComponent_ion_col_5_Template","IconListComponent_ion_col_6_Template","IconListComponent_ion_col_7_Template","NgIf","TranslatePipe","IonGrid","IonRow","IonCol","IonIcon","location","editProfile","UserProfileComponent_ion_row_10_div_2_Template","bio","isCurrentUser","UserProfileComponent","_UserProfileComponent","userService","numProjects","numStacks","numClipsWatched","numVotes","defaultUsername","canEditProfile","onDestroy$","Subject","ngOnInit","userId$","pipe","takeUntil","subscribe","currentUserId","userId","ngOnDestroy","next","complete","getAttributes","username","avatarUrl","UserProfileComponent_div_9_Template","UserProfileComponent_ion_row_10_Template","EditableAvatarComponent","IonButton","ctx_r2","navLogin","StudioPage_ng_template_6_ng_template_0_div_1_Template","StudioPage_ng_template_6_ng_template_0_ng_template_2_Template","loading","doneLoading_r4","_r6","createProject","_r7","openCapture","_r5","fabClick","StudioPage_ng_template_6_fs_tab_fab_container_2_ion_chip_6_Template","expandDraftDrawer","StudioPage_ng_template_6_fs_tab_fab_container_2_ion_chip_11_Template","canCreateProject","isWidgetActive","_r10","createProjectEvent","eventProjects_r11","length","_c3","layoutType","_c4","StudioPage_ng_template_6_div_4_div_16_ng_container_8_div_1_Template","_r9","StudioPage_ng_template_6_div_4_div_16_ng_container_8_Template","projects_r12","_c2","projectsWithEvents$","_r13","_r14","onSearchStacks","listRecent_r16","_r15","ngIf","loadMoreStacks","tmp_9_0","stackListRecent","items$","_c5","nextToken","label","StudioPage_ng_template_6_div_4_div_27_div_1_Template","StudioPage_ng_template_6_div_4_div_27_ng_container_3_Template","tmp_7_0","list$","listPrivate_r18","_r17","stackListPrivate","_c6","_r19","onSearchClips","onFilterClips","isClipsListShowing","_c7","_r21","clipListList_r22","loadMoreClips","_r23","StudioPage_ng_template_6_div_4_ion_accordion_group_35_ng_container_16_div_3_Template","StudioPage_ng_template_6_div_4_ion_accordion_group_35_ng_container_16_div_4_Template","clipList","itemIds","tmp_13_0","_r20","clipsAccordionChange","StudioPage_ng_template_6_div_4_ion_accordion_group_35_ng_container_16_Template","StudioPage_ng_template_6_div_4_div_36_div_3_Template","_r24","captureSuccess","drawerSelectedProjectId","captureClipEvent","_r8","StudioPage_ng_template_6_div_4_div_16_Template","StudioPage_ng_template_6_div_4_ng_template_25_Template","StudioPage_ng_template_6_div_4_div_27_Template","StudioPage_ng_template_6_div_4_ng_container_30_Template","StudioPage_ng_template_6_div_4_div_33_Template","StudioPage_ng_template_6_div_4_ion_accordion_group_35_Template","StudioPage_ng_template_6_div_4_div_36_Template","enableBilling","username$","avatarUrl$","bio$","location$","numClipsWatched$","tmp_14_0","noProjectYet_r25","showPrivateStacksCarouselIfNone","tmp_26_0","tmp_27_0","StudioPage_ng_template_6_ng_template_0_Template","StudioPage_ng_template_6_fs_tab_fab_container_2_Template","StudioPage_ng_template_6_div_4_Template","loggedIn$","notAuthed_r26","LIST_ID_STACKS_RECENT","LIST_ID_STACKS_PRIVATE","LIST_ID_CLIPS","StudioPage","_StudioPage","routerLinkEditStack","drawerSelectedStackId","projectService","modalCtrl","configService","analyticsService","store","router","canInviteCrew","subscriptionVm$","select","selectSubscriptionStatus","title","isLoggedIn$","email$","identityId$","projects$","selectMyProjects","topRightIndicator","INDICATOR_PROP","Role","ENABLE_BILLING","isProjectAdmin","showWatchLater","ENABLE_FEATURE_WATCH_LATER","drawerHandleActions","selectedItemSuccess$","BehaviorSubject","topDrawerExpand$","i","topDrawerClose$","_incExpandEvent","_incCloseEvent","didCreateClipList","searchText","currentFilter","FilterEntityTypes","Recent","selectMyProjectsActiveEvent","filter","p","withLatestFrom","map","canEdit","appConfig","then","config","setTimeout","ngAfterViewInit","showTutorial","_a","getCurrentNavigation","extras","state","tutorial","warn","distinctUntilChanged","selectList","selectStackListItems","shareReplay","dispatch","stackActions","listId","filters","q","isPrivate","Private","combineLatest","a","b","Array","isArray","checkIsAdminMultiple","ionViewWillLeave","closeTabFab","detail","value","selectClipListItems","clipActions","list","tryPreventDefault","STUDIO_SETTINGS_ROUTE","search","setFilter","Unused","_this","_asyncToGenerator","navigate","SIGNUP_RETURN_URL_EVENTS","queryParams","returnUrl","url","_this2","projectCreateModal","create","component","ProjectFormComponent","componentProps","onDidDismiss","res","data","detailRoute","eventType","ProjectEventType","Event","Weddings","SIGNUP_RETURN_URL_WEDDINGS","navigateRoot","LOGIN_PAGE","addMember","_this3","modal","AddMemberModalComponent","isStudio","cssClass","openAddMemberDialog","ToasterPosition","Bottom","createFilmstack","EDIT_ROUTE","selectCanCapture","take","canCapture","SIGNUP_RETURN_URL_PRO","tabFab","activated","openTabFab","close","draftDrawerSelected","projectId","stackId","delayedCloseDrawer","captureDevice","draftDrawerNewItem","draftDrawerExpanded","showCreateForm","closeDraftDrawer","path","delay","clearTimeout","_closeDrawerTimeout","presentCaptureModal","_this4","CaptureClipModalComponent","showProjectSelect","isCaptureAllowed$","isAllowed","find","triggerCapture","triggerTimeout","i4","i5","i6","i7","i8","i9","viewQuery","StudioPage_ng_template_6_Template","wrapper_r27","_c1","NgTemplateOutlet","TopNavbarComponent","TabFabContainerComponent","ListTitleComponent","FilterableToolbarComponent","ClipListComponent","CaptureClipButtonComponent","StackListComponent","CollabDraftsComponent","DraftStacksCarouselComponent","CarouselGuidesComponent","SubscriptionMiniStatusEditComponent","ProjectMemberListComponent","FooterComponent","IonHeader","IonContent","IonSpinner","IonFab","IonFabButton","IonFabList","IonChip","IonLabel","IonButtons","IonAccordionGroup","IonAccordion","IonItem","AsyncPipe"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/projects/project-list/project-list.component.html","./src/app/projects/project-list/project-list.component.ts","./src/app/shared/components/icon-list/icon-list.component.html","./src/app/shared/components/icon-list/icon-list.component.ts","./src/app/studio/shared/components/user-profile/user-profile.component.html","./src/app/studio/shared/components/user-profile/user-profile.component.ts","./src/app/studio/studio.page.html","./src/app/studio/studio.page.ts"],"sourcesContent":["<section [ngSwitch]=\"layout.type\">\n  <ng-container *ngSwitchCase=\"layoutTypes.Carousel\">\n    <fs-carousel\n      [items]=\"items\"\n      [heading]=\"heading\"\n      [canLoadMore]=\"false\"\n      [isLoadingMore]=\"false\"\n      [itemType]=\"itemTypes.Projects\"\n      [options]=\"layout.options\"\n      (itemClick)=\"onClickItem($event)\"\n      (newItemClick)=\"addNewProjectButtonClick()\"\n    ></fs-carousel>\n  </ng-container>\n  <ng-container *ngSwitchCase=\"layoutTypes.Grid\">\n    <fs-grid\n      [items]=\"items\"\n      [heading]=\"heading\"\n      [itemType]=\"itemTypes.Projects\"\n      [options]=\"layout.options\"\n      (itemClick)=\"onClickItem($event)\"\n    ></fs-grid>\n  </ng-container>\n  <ng-container *ngSwitchDefault>\n    Unknown Layout...\n  </ng-container>\n</section>\n","/** @format */\n\nimport { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\nimport { NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NavController } from '@ionic/angular/standalone';\nimport { ToasterService } from '@app/core/services/toaster.service';\nimport { DiscoverCardClick } from '@app/shared/models/layout.model';\nimport { LAYOUT_TYPE, LAYOUT_SETTINGS } from '@app/shared/models/layout.model';\nimport { ITEM_TYPE } from '@app/shared/models/layout.model';\nimport { STACK_SEARCH_FIELDS } from '@app/shared/models/stack.model';\nimport { FsCarouselComponent } from '@app/shared/components/fs-carousel/fs-carousel.component';\nimport { FsGridComponent } from '@app/shared/components/fs-grid/fs-grid.component';\nimport { Project } from '@app/projects/shared/project.model';\nimport { PROJECT_DETAIL_ROUTE } from '@app/app.routes';\n\n@Component({\n  selector: 'app-project-list',\n  templateUrl: './project-list.component.html',\n  styleUrls: ['./project-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgSwitch, NgSwitchCase, FsCarouselComponent, FsGridComponent, NgSwitchDefault],\n})\nexport class ProjectListComponent {\n  @Input() items: Project[];\n  @Input() heading: string;\n  @Input() layout: LAYOUT_SETTINGS;\n  @Output() newProjectClick = new EventEmitter<void>();\n\n  public itemTypes = ITEM_TYPE;\n  public layoutTypes = LAYOUT_TYPE;\n  public searchFields = STACK_SEARCH_FIELDS;\n\n  constructor(private navCtrl: NavController, private toaster: ToasterService, private translate: TranslateService) {}\n\n  onClickItem(event: DiscoverCardClick) {\n    this.navWatchProject(event);\n  }\n\n  addNewProjectButtonClick() {\n    this.newProjectClick.emit();\n  }\n\n  navWatchProject(event: DiscoverCardClick) {\n    const project: Project = event && event.item && (event.item as Project).id ? (event.item as Project) : null;\n    if (project) {\n      this.navCtrl.navigateForward([`/${PROJECT_DETAIL_ROUTE}`, project.id]);\n    } else {\n      this.toaster.present(this.translate.instant('ERRORS.OPENING_PROJECT'));\n    }\n  }\n}\n","<div class=\"stats icon-set\">\n    <ion-grid class=\"ion-no-padding\">\n      <ion-row class=\"ion-justify-content-start\">\n        <ion-col *ngIf=\"views >= 0\" title=\"{{ 'STUDIO.CLIPS_WATCHED' | translate }}\">\n          <ion-icon name=\"play-sharp\"></ion-icon>\n          <div>{{ views }}</div>\n        </ion-col>\n        <ion-col *ngIf=\"likes >= 0\" title=\"{{ 'STUDIO.STACKS_LIKED' | translate }}\">\n          <ion-icon [name]=\"isLiked ? 'heart' : 'heart-outline'\" \n                    [class.is-clickable]=\"allowClickLike\" \n                    [class.is-liked]=\"isLiked && showHighlight\" \n                    (click)=\"allowClickLike && onClickLike($event)\"></ion-icon>\n          <div>{{ likes }}</div>\n        </ion-col>\n        <ion-col *ngIf=\"stacks >= 0\" title=\"{{ 'STUDIO.STACKS_CREATED' | translate }}\">\n          <ion-icon name=\"layers-outline\"></ion-icon>\n          <div>{{ stacks }}<span *ngIf=\"moreStacks\">+</span></div>\n        </ion-col>\n        <ion-col *ngIf=\"projects && projects >= 0\" title=\"{{ 'COMMON.PROJECTS' | translate }}\">\n          <ion-icon name=\"albums-outline\"></ion-icon>\n          <div>{{ projects }}</div>\n        </ion-col>\n        <ion-col *ngIf=\"showMembers\" title=\"{{ 'COMMON.MEMBERS' | translate }}\">\n          <ion-icon name=\"person\"></ion-icon>\n          <div>{{ members }}</div>\n        </ion-col>\n      </ion-row>\n    </ion-grid>\n  </div>","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IonCol, IonGrid, IonIcon, IonRow } from '@ionic/angular/standalone';\nimport { VoteOptions } from '@app/core/services/analytics/analytics.service';\nimport { EventsService } from '@app/core/services/events.service';\nimport { Clip } from '@app/shared/models/clip.model';\nimport { Stack } from '@app/shared/models/stack.model';\nimport { User } from '@app/shared/models/user.model';\nimport { Utils } from '@app/shared/utils';\nimport { Project } from '@app/projects/shared/project.model';\nimport { environment } from 'src/environments/environment';\n\nconst DEBUG_LOGS = !environment.production;\nconst PAGE = '[IconList]';\n\n@Component({\n  selector: 'app-icon-list',\n  templateUrl: './icon-list.component.html',\n  styleUrls: ['./icon-list.component.scss'],\n  standalone: true,\n  imports: [NgIf, TranslatePipe, IonGrid, IonRow, IonCol, IonIcon],\n})\nexport class IconListComponent {\n  @Input() views: number = 0; // icons can be hidden by sending -1 (less than zero)\n  @Input() likes: number = 0;\n  @Input() stacks: number = 0;\n  @Input() members: number = 0;\n  @Input() projects: number = 0;\n  @Input() showMembers: boolean = true; // allow to hide Members for non-projects\n  @Input() allowClickLike: boolean = true; // allow to hide Members for non-projects\n  @Input() isLiked: boolean = false; // is this an already liked item?\n  @Input() showHighlight: boolean = true; // show the active color of the icon (heart, when is-liked)\n  @Input() item: Stack | Clip | Project | User; // the item this is referencing\n  @Input() itemType: string; // the item type this is referencing\n  /** handle more stacks to load (+) */\n  @Input() moreStacks: boolean = false;\n\n  constructor(private events: EventsService) {}\n\n  onClickLike(event) {\n    Utils.tryStopPropagation(event);\n\n    const inc = this.isLiked ? -1 : 1; // if it was liked, remove that like, else add 1\n\n    // this will not be needed once input props are being updated...\n    this.likes = this.likes + inc;\n\n    switch (this.itemType) {\n      case 'project':\n      case 'projects':\n      case 'clip':\n      case 'clips':\n      case 'stack':\n      case 'stacks':\n        const vote: VoteOptions = {\n          itemType: this.itemType,\n          item: this.item,\n          inc,\n        };\n        DEBUG_LOGS && console.log(`${PAGE} onClickLike '${this.itemType}' TODO: handle vote:`, vote);\n        break;\n      case 'user':\n      case 'users':\n      default:\n        DEBUG_LOGS && console.log(`${PAGE} onClickLike UNHANDLED itemType='${this.itemType}' item:`, this.item);\n    }\n\n    this.isLiked = !this.isLiked;\n  }\n}\n","<!-- @format -->\n\n<ion-grid>\n  <ion-row class=\"ion-align-items-center\">\n    <ion-col class=\"ion-padding\">\n      <div class=\"float-right\">\n        <app-editable-avatar [userId]=\"userId\" [avatarUrl]=\"avatarUrl\" [canEditAvatar]=\"false\"></app-editable-avatar>\n      </div>\n    </ion-col>\n    <ion-col class=\"ion-padding\">\n      <div class=\"username\">\n        {{ username || userId || defaultUsername }}\n      </div>\n\n      <app-icon-list\n        class=\"dk-grey\"\n        [itemType]=\"'user'\"\n        [allowClickLike]=\"false\"\n        [showHighlight]=\"false\"\n        [isLiked]=\"true\"\n        [views]=\"numClipsWatched\"\n        [likes]=\"numVotes\"\n        [stacks]=\"numStacks\"\n        [moreStacks]=\"moreStacks\"\n        [projects]=\"numProjects\"\n      ></app-icon-list>\n\n      <div *ngIf=\"location\" class=\"location\"><span>Location:</span> {{ location }}</div>\n    </ion-col>\n  </ion-row>\n  <ion-row *ngIf=\"bio || isCurrentUser\">\n    <ion-col class=\"bio ion-text-center\">\n      <div *ngIf=\"!bio && isCurrentUser\">\n        <ion-button color=\"medium\" fill=\"clear\" size=\"small\" (click)=\"editProfile.emit()\">\n          {{ 'STUDIO.ADD_BIO' | translate }}\n        </ion-button>\n      </div>\n      {{ bio }}\n    </ion-col>\n  </ion-row>\n</ion-grid>\n","/** @format */\n\nimport { Component, OnInit, Input, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IonGrid, IonRow, IonCol, IonButton } from '@ionic/angular/standalone';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { UserService } from '@app/core/services/user.service';\nimport { IconListComponent } from '@app/shared/components/icon-list/icon-list.component';\nimport { EditableAvatarComponent } from '../editable-avatar/editable-avatar.component';\n\n/** @todo\n * Will need to be refactored when used for Public User Info (intention)\n * see below commect for details of handling @Input() of userId and then userService.getPublicUserInfo() to populate\n */\n\nconst DEBUG_LOGS = false;\n\nconst PAGE = '[UserProfile]';\n\nconst ANONYMOUS = 'Anonymous';\n\n@Component({\n  selector: 'app-user-profile',\n  templateUrl: './user-profile.component.html',\n  styleUrls: ['./user-profile.component.scss'],\n  standalone: true,\n  imports: [NgIf, TranslatePipe, EditableAvatarComponent, IconListComponent, IonGrid, IonRow, IonCol, IonButton],\n})\nexport class UserProfileComponent implements OnInit, OnDestroy {\n  @Input() userId: string;\n  /**\n   * @todo take @Input() of userId then projectMemberService.getPublicUserInfo() to populate\n   * username\n   * avatarUrl (from userId)\n   * Bio\n   * stats (icon-list)\n   * numClipsWatched\n   * likes or numVotes\n   * numProjects\n   * numStacks\n   *\n   * May decide to check ngOnChanges(changes: SimpleChanges)\n   * to determine if we got what we needed, or if we need to query\n   */\n  @Input() username: string;\n  @Input() avatarUrl: string;\n  @Input() numProjects: number = 0;\n  @Input() numStacks: number = 0;\n  /** handle more stacks to load (+) */\n  @Input() moreStacks: boolean = false;\n  @Input() numClipsWatched: number = 0;\n  @Input() numVotes: number = -1;\n\n  @Input() bio: string = '';\n  @Input() location: string = '';\n\n  @Output() editProfile = new EventEmitter<void>();\n\n  public isCurrentUser: boolean = false;\n  public defaultUsername = ANONYMOUS;\n  public canEditProfile: boolean = false;\n\n  private onDestroy$ = new Subject<void>();\n\n  constructor(private userService: UserService) {}\n\n  ngOnInit() {\n    this.userService.userId$.pipe(takeUntil(this.onDestroy$)).subscribe((currentUserId) => {\n      this.isCurrentUser = currentUserId && this.userId && this.userId === currentUserId;\n      DEBUG_LOGS &&\n        console.log(`${PAGE} userService.userId:`, {\n          isCurrentUser: this.isCurrentUser,\n          currentUserId,\n          userId: this.userId,\n        });\n    });\n  }\n\n  ngOnDestroy() {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  getAttributes() {\n    // instead, get the UserData from table by UserID\n    DEBUG_LOGS && console.log(`${PAGE} TODO: get UserData`);\n  }\n}\n","<!-- @format -->\n\n<ion-header>\n  <app-top-navbar \n    [title]=\"title\" \n    [drawerEnabled]=\"true\"\n    [drawerHandleActions]=\"drawerHandleActions\"\n    [drawerExpandEvent]=\"topDrawerExpand$ | async\"\n    [drawerCloseEvent]=\"topDrawerClose$ | async\"\n    [drawerSelectedItemSuccess]=\"selectedItemSuccess$ | async\"\n    (drawerSelected)=\"draftDrawerSelected($event)\"\n    (drawerNewItem)=\"draftDrawerNewItem($event)\"\n    (drawerExpand)=\"draftDrawerExpanded($event)\"\n  ></app-top-navbar>\n</ion-header>\n\n<ion-content forceOverflow=\"false\" class=\"dark\">\n  <ng-template #wrapper [ngTemplateOutlet]=\"wrapper\" \n    let-projects=\"projects\" [ngTemplateOutletContext]=\"{ projects: projects$ | async }\">\n    <!-- wrapper template to share single instance of projects$ -->\n  \n    <ng-template #notAuthed>\n      <div class=\"ion-padding ion-text-center\" style=\"margin-bottom: 40vh\">\n        <div *ngIf=\"loading else doneLoading\"><ion-spinner></ion-spinner> {{ 'COMMON.LOADING' | translate }}</div>\n        <ng-template #doneLoading>\n          <p class=\"ion-text-center\">{{ 'STUDIO.SECURE_MESSAGE' | translate }}</p>\n          <ion-button (click)=\"navLogin()\">{{ 'COMMON.LOGIN' | translate }}</ion-button>\n        </ng-template>\n      </div>\n    </ng-template>\n  \n    <fs-tab-fab-container *ngIf=\"loggedIn$ | async\">\n      <ion-fab class=\"tab-fab\" #tabFabStudio>\n        <ion-fab-button (click)=\"fabClick($event)\">\n          <ion-icon name=\"add\"></ion-icon>\n        </ion-fab-button>\n        <ion-fab-list side=\"top\">\n          <!-- <ion-chip outline=\"true\" (click)=\"editProfile()\">\n            <ion-label>{{ 'STUDIO.FAB.EDIT' | translate }}</ion-label>\n          </ion-chip> -->\n          <!-- <ion-chip *ngIf=\"isProjectAdmin && !isWidgetActive\" outline=\"true\" (click)=\"addMember()\">\n            <ion-label>{{ 'STUDIO.FAB.ADD_MEMBER' | translate }}</ion-label>\n          </ion-chip> -->\n          <ion-chip *ngIf=\"canCreateProject\" outline=\"true\" (click)=\"createProject()\">\n            <ion-label>{{ 'STUDIO.FAB.CREATE_PROJECT' | translate }}</ion-label>\n          </ion-chip>\n          <ion-chip outline=\"true\" (click)=\"expandDraftDrawer()\">\n            <ion-label>{{ 'STUDIO.FAB.CREATE_FILMSTACK' | translate }}</ion-label>\n          </ion-chip>\n          <ion-chip *ngIf=\"!isWidgetActive\" outline=\"true\" (click)=\"openCapture()\">\n            <ion-label>{{ 'STUDIO.FAB.CAPTURE_CLIP' | translate }}</ion-label>\n          </ion-chip>\n        </ion-fab-list>\n      </ion-fab>\n    </fs-tab-fab-container>\n  \n    <div *ngIf=\"loggedIn$ | async; else notAuthed\">\n      <div>\n        <div class=\"container\">\n          <div class=\"user-info\">\n            <ion-buttons>\n              <fs-subscription-mini-status-edit\n                style=\"margin-right:-6px\"\n                color=\"medium\"\n                [showPlan]=\"enableBilling\"\n                (click)=\"editProfile()\"\n              ></fs-subscription-mini-status-edit>\n              <!-- <ion-button fill=\"outline\" color=\"medium\" (click)=\"editProfile()\">\n                <ion-icon slot=\"icon-only\" name=\"settings-outline\"></ion-icon>\n              </ion-button> -->\n            </ion-buttons>\n            <div class=\"user-profile\">\n              <app-user-profile\n                [userId]=\"userId$ | async\"\n                [username]=\"username$ | async\"\n                [avatarUrl]=\"avatarUrl$ | async\"\n                [bio]=\"bio$ | async\"\n                [location]=\"location$ | async\"\n                [numClipsWatched]=\"numClipsWatched$ | async\"\n                [numStacks]=\"(stackListRecent?.list$ | async)?.itemIds?.length || 0\"\n                [moreStacks]=\"(stackListRecent?.list$ | async)?.nextToken?.length > 0\"\n                [numProjects]=\"projects?.length || 0\"\n                (editProfile)=\"editProfile()\"\n              ></app-user-profile>\n            </div>\n          </div>\n        </div>\n  \n        <div *ngIf=\"!isWidgetActive\" class=\"container\">\n\n          <fs-list-title icon=\"folder-outline\" [small]=\"projects?.length || 0\"\n            >{{ 'COMMON.PROJECTS' | translate }}\n          </fs-list-title>\n          \n          <h3 class=\"subtitle-margin-right\">{{ 'STUDIO.PROJECTS.SUBHEADER' | translate }}</h3>\n          <app-project-list\n            [class.no-items]=\"projects?.length < 1\"\n            [layout]=\"{\n              type: layoutType.Carousel,\n              options: {\n                hasAddNewItemButton: true\n              }\n            }\"\n            [items]=\"projects\"\n            (newProjectClick)=\"createProject()\"\n          ></app-project-list>\n\n          <ng-container *ngIf=\"projectsWithEvents$ | async as eventProjects\">\n            <div *ngIf=\"eventProjects?.length > 0\" class=\"project-events\">\n              <h3>{{ 'PROJECT.ACTIVE_EVENTS_COLLAB' | translate }} <small>{{eventProjects.length}}</small></h3>\n              <app-project-list\n                [layout]=\"{\n                  type: layoutType.Carousel,\n                  options: {\n                    hasAddNewItemButton: false,\n                    hasNewItemButtonAtEnd: true,\n                    isEvent: true,\n                  }\n                }\"\n                [items]=\"eventProjects\"\n                (newProjectClick)=\"createProjectEvent($event)\"\n              ></app-project-list>\n            </div>\n          </ng-container>\n        </div>\n  \n        <div class=\"container\">\n          <fs-list-title icon=\"layers-outline\" [list]=\"stackListRecent?.list$ | async\"\n            >{{ 'COMMON.FILMSTACKS' | translate }}</fs-list-title\n          >\n          <h3>{{ 'STUDIO.FILMSTACKS.SUBHEADER' | translate }}</h3>\n          <!-- Remove create a stack draft for new users until there is at least one project MVP-1301  -->\n          <ng-template #noProjectYet>\n            <div class=\"no-projects-yet\">\n              {{ 'COMMON.FIRST_STEP' | translate }}: \n              <ion-button fill=\"clear\" (click)=\"createProject()\">\n                {{ 'PROJECT.CREATE' | translate }}\n              </ion-button>\n            </div>\n          </ng-template>\n\n          <div *ngIf=\"projects?.length > 0; else noProjectYet\">\n\n            <div *ngIf=\"(stackListRecent?.items$ | async)?.length > 0\" class=\"search-toolbar\">\n              <app-filterable-toolbar\n                [searchPlaceholder]=\"'STACK.ACTIONS.FIND' | translate\"\n                (onSearch)=\"onSearchStacks($event)\"\n              ></app-filterable-toolbar>\n            </div>\n            <ng-container *ngIf=\"stackListRecent?.list$ | async as listRecent\">\n              <app-stack-list \n                [class.no-items]=\"(stackListRecent?.items$ | async)?.length < 1\"\n                [layout]=\"{\n                  type: layoutType.Carousel,\n                  options: {\n                    hasAddNewItemButton: true,\n                    showAvatar: false\n                  }\n                }\"\n                [items]=\"stackListRecent?.items$ | async\"\n                [canLoadMore]=\"!!listRecent.nextToken\"\n                [isLoading]=\"listRecent.loading\"\n                [heading]=\"stackListRecent.label\"\n                (loadMore)=\"loadMoreStacks(listRecent)\"\n                (newStackClick)=\"expandDraftDrawer()\"\n              ></app-stack-list>\n            </ng-container>\n          </div>\n\n          <fs-collab-drafts\n            [showListIfEmpty]=\"false\"\n            [showAvatar]=\"false\"\n          ></fs-collab-drafts>\n  \n          <fs-draft-stacks \n            [showListIfEmpty]=\"false\" \n            [showAvatar]=\"false\"\n          ></fs-draft-stacks>\n  \n          <ng-container\n            *ngIf=\"(showPrivateStacksCarouselIfNone || (stackListPrivate?.items$ | async)?.length > 0) && stackListPrivate?.list$ | async as listPrivate\"\n          >\n            <h3>{{ 'STUDIO.PRIVATE_STACKS.HEADING' | translate }}</h3>\n            <app-stack-list \n              [class.no-items]=\"(stackListPrivate?.items$ | async)?.length < 1\"\n              [layout]=\"{\n                type: layoutType.Carousel,\n                options: {\n                  showAvatar: false\n                }\n              }\"\n              [items]=\"stackListPrivate?.items$ | async\"\n              [canLoadMore]=\"!!listPrivate.nextToken\"\n              [isLoading]=\"listPrivate.loading\"\n              [heading]=\"stackListPrivate.label\"\n              (loadMore)=\"loadMoreStacks(listPrivate)\"\n            ></app-stack-list>\n          </ng-container>\n        </div>\n  \n        <!-- moved to crew section MVP-1223\n        <div class=\"container\">\n          <fs-carousel-guides></fs-carousel-guides>\n        </div> -->\n  \n        <!-- \n          clicking in items causes search input to be selected\n          https://github.com/ionic-team/ionic-framework/issues/21982#issuecomment-734999212\n        -->\n        <div *ngIf=\"(clipList?.items$ | async)?.length > 0\" [class.isShowing]=\"isClipsListShowing\" class=\"accordion-search-toolbar\">\n          <!-- hid this 2022-07-05 to delay dealing with \n            https://github.com/ionic-team/ionic-framework/issues/21982 -->\n          <app-filterable-toolbar \n            [options]=\"['Recent', 'Not Used', 'Mine']\" \n            [selectedOption]=\"'Recent'\"\n            [searchPlaceholder]=\"'Find Clips'\" \n            (onSearch)=\"onSearchClips($event)\" \n            (onOption)=\"onFilterClips($event)\"\n          ></app-filterable-toolbar>\n        </div>\n        <ion-accordion-group *ngIf=\"!isWidgetActive && projects?.length > 0\" class=\"ion-padding-bottom container\" (ionChange)=\"clipsAccordionChange($event)\">\n          <ion-accordion>\n            <div slot=\"header\">\n              <ion-item class=\"accordion-main-header no-padding-start studio-list\" lines=\"none\">\n                <ion-label color=\"primary\" class=\"ion-text-wrap\">\n                  <fs-list-title icon=\"film\" [list]=\"clipList?.list$ | async\">{{ 'COMMON.CLIPS' | translate }}</fs-list-title>\n                  <!-- <h3 class=\"clips-subtitle\">{{ 'STUDIO.CLIPS.SUBHEADER' | translate }}</h3> -->\n                </ion-label>\n                <ion-button fill=\"clear\" slot=\"end\">\n                  {{ 'COMMON.SHOW_HIDE' | translate }}\n                </ion-button>\n              </ion-item>\n              <!-- <div [class.isShowing]=\"isClipsListShowing\" class=\"accordion-search-toolbar\">\n                <app-filterable-toolbar\n                  [options]=\"['Recent', 'Not Used']\"\n                  [selectedOption]=\"'Recent'\"\n                  [searchPlaceholder]=\"'Find Clips'\"\n                  (onSearch)=\"onSearchClips($event)\"\n                  (onOption)=\"onFilterClips($event)\"\n                ></app-filterable-toolbar>\n              </div> -->\n            </div>\n        \n            <div slot=\"content\">\n              <h3>{{ 'STUDIO.CLIPS.SUBHEADER' | translate }}</h3>\n              <!-- re-implement as part of MVP-699 -->\n              <!-- [value]=\"(clipFilters$ | async)?.q\" -->\n  \n              <!-- hid this 2022-07-05 to delay dealing with \n              https://github.com/ionic-team/ionic-framework/issues/21982 -->\n              <!-- <div hidden class=\"search-toolbar\">\n                <app-filterable-toolbar\n                  [options]=\"['Recent', 'Not Used']\"\n                  [selectedOption]=\"'Recent'\"\n                  [searchPlaceholder]=\"'Find Clips'\"\n                  (onSearch)=\"onSearchClips($event)\"\n                  (onOption)=\"onFilterClips($event)\"\n                ></app-filterable-toolbar>\n              </div> -->\n      \n              <ng-container *ngIf=\"clipList?.list$ | async as clipListList\">\n                <app-clip-list\n                  [layout]=\"{\n                    type: layoutType.Grid,\n                    options: {\n                      showAvatar: false\n                    }\n                  }\"\n                  [items]=\"clipList?.items$ | async\"\n                  [isLoading]=\"clipListList.loading\"\n                ></app-clip-list>\n  \n                <div\n                  *ngIf=\"clipListList?.itemIds?.length > 0 && clipListList?.nextToken\"\n                  class=\"clips-loadmore ion-text-center\"\n                >\n                  <ion-button (click)=\"loadMoreClips(clipListList, $event)\" [disabled]=\"clipListList.loading\">\n                    {{ 'COMMON.MORE' | translate }}\n                  </ion-button>\n                </div>\n\n                <div *ngIf=\"(clipList?.items$ | async)?.length < 1\" class=\"ion-text-center ion-padding ion-margin-bottom\">\n                  <ion-button (click)=\"openCapture()\">\n                    {{ 'CLIP.ADD_CLIPS' | translate }}\n                  </ion-button>\n                </div>\n              </ng-container>\n            </div>\n          </ion-accordion>\n        </ion-accordion-group>\n  \n        <div *ngIf=\"!isWidgetActive\" class=\"project-member-section\">\n          <div class=\"container\">\n            <fs-carousel-guides></fs-carousel-guides>\n            \n            <div *ngIf=\"projects?.length > 0\">\n              <fs-list-title icon=\"people\">{{ 'STUDIO.FILM_CREW.HEADER' | translate }}</fs-list-title>\n              <h3>{{ 'STUDIO.FILM_CREW.SUBHEADER' | translate }}</h3>\n              <fs-project-member-list\n                [showTitle]=\"false\"\n                [showApply]=\"false\"\n                [isStudio]=\"true\"\n                [projects]=\"projects\" \n                [canEdit]=\"false\"\n              ></fs-project-member-list>\n            </div>\n          </div>\n\n          <app-capture-clip-button\n            [projectId]=\"drawerSelectedProjectId\"\n            [startUpload]=\"captureClipEvent\"\n            (uploadSuccess)=\"captureSuccess($event)\"\n          ></app-capture-clip-button>\n        </div>\n      </div>\n    </div>\n  </ng-template>\n\n  <app-footer></app-footer>\n</ion-content>\n","/** @format */\n\nimport { Component, OnInit, OnDestroy, AfterViewInit, ViewChild } from '@angular/core';\nimport { NgTemplateOutlet, NgIf, AsyncPipe } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\nimport {\n  NavController,\n  ModalController,\n  IonFab,\n  IonHeader,\n  IonContent,\n  IonSpinner,\n  IonButton,\n  IonFabButton,\n  IonIcon,\n  IonFabList,\n  IonChip,\n  IonLabel,\n  IonButtons,\n  IonAccordionGroup,\n  IonAccordion,\n  IonItem,\n} from '@ionic/angular/standalone';\nimport { Observable, combineLatest, Subject, BehaviorSubject } from 'rxjs';\nimport { filter, map, take, takeUntil, distinctUntilChanged, shareReplay, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { State } from '@store/reducers';\nimport * as stackActions from '@store/actions/stacks.actions';\nimport * as clipActions from '@store/actions/clips.actions';\nimport { setFilter } from '@store/actions/viewstate.actions';\nimport { List, selectList, selectStackListItems, selectClipListItems } from '@store/selectors/lists.selectors';\nimport { FilterEntity, FilterEntityTypes } from '@store/selectors/viewstate.selectors';\nimport { selectMyProjects, selectMyProjectsActiveEvent } from '@store/selectors/projects.selectors';\nimport {\n  SubscriptionViewModel,\n  selectCanCapture,\n  selectSubscriptionStatus,\n} from '@app/billing/store/billing.selectors';\n\nimport { ENABLE_BILLING, ENABLE_FEATURE_WATCH_LATER } from '@app/app.config';\nimport { AnalyticsService } from '@app/core/services/analytics/analytics.service';\nimport { ConfigService } from '@app/core/config/config.service';\nimport { UserService } from '@app/core/services/user.service';\nimport { ToasterPosition, ToasterService } from '@app/core/services/toaster.service';\nimport { FooterComponent } from '@app/shared/components/footer/footer.component';\nimport { FilterableToolbarComponent } from '@app/shared/components/filterable-toolbar/filterable-toolbar.component';\nimport { ListTitleComponent } from '@app/shared/components/ui/list-title/list-title.component';\nimport { TabFabContainerComponent } from '@app/shared/components/tab-fab-container/tab-fab-container.component';\nimport { ClipList, ProjectList, StackList } from '@app/shared/models/list.model';\nimport { LAYOUT_TYPE, INDICATOR_PROP } from '@app/shared/models/layout.model';\nimport { Stack } from '@app/shared/models/stack.model';\nimport { TopNavbarComponent } from '@app/shared/components/top-navbar/top-navbar.component';\nimport { Utils } from '@app/shared/utils';\nimport { CaptureClipModalComponent } from '@app/clips/shared/components/capture-clip-modal/capture-clip-modal.component';\nimport { ClipListComponent } from '@app/clips/shared/components/clip-list/clip-list.component';\nimport { CaptureClipButtonComponent } from '@app/clips/shared/components/capture-clip-button/capture-clip-button.component';\nimport { StackListComponent } from '@app/stacks/shared/components/stack-list/stack-list.component';\nimport { CollabDraftsComponent } from '@app/stacks/carousels/collab-drafts/collab-drafts.component';\nimport { DraftStacksCarouselComponent } from '@app/stacks/carousels/draft-stacks/draft-stacks.component';\nimport { CarouselGuidesComponent } from '@app/stacks/carousels/carousel-guides/carousel-guides.component';\nimport { ProjectListComponent } from '@app/projects/project-list/project-list.component';\nimport { ProjectFormComponent } from '@app/projects/project-form/project-form.component';\nimport { Project, ProjectEventType } from '@app/projects/shared/project.model';\nimport { ProjectService } from '@app/projects/shared/services/project.service';\nimport { AddMemberModalComponent } from '@app/project-members/add-member-modal/add-member-modal.component';\nimport { ProjectMemberListComponent } from '@app/project-members/project-member-list/project-member-list.component';\nimport { SubscriptionMiniStatusEditComponent } from '@app/billing/shared/components/subscription-mini-status-edit/subscription-mini-status-edit.component';\nimport {\n  SIGNUP_RETURN_URL_EVENTS,\n  SIGNUP_RETURN_URL_PRO,\n  SIGNUP_RETURN_URL_WEDDINGS,\n} from '@app/onboarding/shared/onboarding.model';\nimport { UserProfileComponent } from '@app/studio/shared/components/user-profile/user-profile.component';\nimport { EDIT_ROUTE, LOGIN_PAGE, PROJECT_DETAIL_ROUTE, STUDIO_SETTINGS_ROUTE } from '@app/app.routes';\n\nconst DEBUG_LOGS = false;\nconst PAGE = '[StudioPage]';\n\n// const LIST_ID_STACKS_FEATURED = 'studio_mystacks_featured';\nconst LIST_ID_STACKS_RECENT = 'studio_mystacks_recent';\nconst LIST_ID_STACKS_PRIVATE = 'studio_mystacks_private';\nconst LIST_ID_CLIPS = 'studio_myclips';\n// const LIST_ID_PROJECTS = 'studio_myprojects';\n\n/**\n * @todo: controls to manage your information and protect your privacy and security (from Privacy Policy)\n */\n// @canEnterIfAuthenticated\n@Component({\n  selector: 'app-studio',\n  templateUrl: './studio.page.html',\n  styleUrls: ['./studio.page.scss'],\n  standalone: true,\n  imports: [\n    NgIf,\n    NgTemplateOutlet,\n    TopNavbarComponent,\n    TabFabContainerComponent,\n    UserProfileComponent,\n    ListTitleComponent,\n    FilterableToolbarComponent,\n    ClipListComponent,\n    CaptureClipButtonComponent,\n    StackListComponent,\n    CollabDraftsComponent,\n    DraftStacksCarouselComponent,\n    CarouselGuidesComponent,\n    SubscriptionMiniStatusEditComponent,\n    ProjectListComponent,\n    ProjectMemberListComponent,\n    FooterComponent,\n    IonHeader,\n    IonContent,\n    IonSpinner,\n    IonButton,\n    IonFab,\n    IonFabButton,\n    IonIcon,\n    IonFabList,\n    IonChip,\n    IonLabel,\n    IonButtons,\n    IonAccordionGroup,\n    IonAccordion,\n    IonItem,\n    AsyncPipe,\n    TranslatePipe,\n  ],\n})\nexport class StudioPage implements OnInit, OnDestroy, AfterViewInit {\n  /**\n   * Disabling this as the UI gets too complicated with multiple users on multiple projects\n   * Can be revisited later (2021-08-11)\n   */\n  canInviteCrew = false;\n  showPrivateStacksCarouselIfNone = false;\n\n  subscriptionVm$: Observable<SubscriptionViewModel> = this.store.select(selectSubscriptionStatus);\n  projectsWithEvents$: Observable<(Project & { canEdit: boolean })[]>;\n\n  title: string = 'My Studio';\n  loading = true;\n\n  loggedIn$: Observable<boolean> = this.userService.isLoggedIn$;\n  userId$: Observable<string> = this.userService.userId$;\n  username$: Observable<string> = this.userService.username$;\n  avatarUrl$: Observable<string> = this.userService.avatarUrl$;\n  email$: Observable<string> = this.userService.email$;\n  identityId$: Observable<string> = this.userService.identityId$;\n  bio$: Observable<string> = this.userService.bio$;\n  location$: Observable<string> = this.userService.location$;\n  numClipsWatched$: Observable<number> = this.userService.numClipsWatched$;\n  /**\n   * MY Projects\n   * @todo convert this to a list?\n   */\n  projects$: Observable<Project[]> = this.store.select(selectMyProjects);\n\n  layoutType = LAYOUT_TYPE;\n  topRightIndicator = INDICATOR_PROP.Role;\n\n  // showingClips = true;\n  isWidgetActive = false;\n  canCreateProject = false;\n  enableBilling = ENABLE_BILLING;\n\n  /** @todo featured in Studio not implemented yet, but should be */\n  // stackListFeatured: StackList;\n  stackListRecent: StackList;\n  stackListPrivate: StackList;\n  // stackDraftList: ItemList; // moved to stack-drafts.component\n  projectList: ProjectList;\n  clipList: ClipList;\n  isClipsListShowing = false;\n  // clipFilters$: Observable<any>;\n\n  @ViewChild('tabFabStudio') tabFab: IonFab;\n\n  /*\n    @todo verify what of the below can be deprecated...\n  */\n  // stacks$: Observable<Stack[]>;\n  // stacksList$: Observable<List>;\n\n  // clips$: Observable<Clip[]>;\n  // clipsNextToken = '';\n\n  /**\n   * @todo this logic is not correct - we need to check in the projectCrew component, foreach\n   */\n  isProjectAdmin = false;\n\n  showWatchLater: boolean = ENABLE_FEATURE_WATCH_LATER;\n  /** This flags the drawer to not take actions on the item clicks, so we handle in this component */\n  drawerHandleActions = true;\n  selectedItemSuccess$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  topDrawerExpand$: BehaviorSubject<{ i: number; showCreateForm?: boolean }> = new BehaviorSubject({ i: 0 });\n  topDrawerClose$: BehaviorSubject<number> = new BehaviorSubject(0);\n\n  captureClipEvent: boolean;\n\n  get routerLinkEditStack() {\n    return (\n      '/stack/edit/' +\n      (this.drawerSelectedProjectId && this.drawerSelectedStackId\n        ? `${this.drawerSelectedProjectId}/${this.drawerSelectedStackId}`\n        : '')\n    );\n  }\n  drawerSelectedProjectId: string;\n  private drawerSelectedStackId: string;\n\n  private _incExpandEvent = 0;\n  private _incCloseEvent = 0;\n  private _closeDrawerTimeout;\n  private triggerTimeout;\n\n  /**\n   * deprecated but works\n   * Reducing the template calls to stacks$ | async reduces the number of subscriptions\n   * but forces us to create this additional code to hold the info we want\n   */\n  // private _numStacks$: BehaviorSubject<string> = new BehaviorSubject('0');\n  // get numStacks$(): Observable<string> {\n  //   return this._numStacks$.asObservable();\n  // }\n  /**\n   * deprecated not needed, we are using fs-list-title Input for numClips logic..\n   * pipe the items to numClips, just trying to reduce async subscribers in template, and ease of list subscribers...\n   */\n  // private _numClips$: BehaviorSubject<number> = new BehaviorSubject(0);\n  // get numClips$(): Observable<number> {\n  //   return this._numClips$.asObservable();\n  // }\n  // private _moreClips$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  // get moreClips$(): Observable<boolean> {\n  //   return this._moreClips$.asObservable();\n  // }\n\n  // private didCreateList = false;\n  private didCreateClipList = false;\n  private userId: string;\n  private searchText: string = '';\n  private currentFilter: FilterEntityTypes = FilterEntityTypes.Recent;\n  // private numClipsLimit: number = 20;\n\n  private onDestroy$ = new Subject<void>();\n\n  /**\n   * @todo can this be removed with filteredList?\n   * yes, clever solution tho?\n   * USAGE:\n   *   // this.clips$ = this.clipsSubject$.pipe(\n   *   //   scan<Clip[]>((acc, value) => acc.concat(value), []), // append all new loadMoreClips on each Subject.next()\n   *   // );\n   */\n  //  private clipsSubject$: BehaviorSubject<Clip[]> = new BehaviorSubject([]);\n\n  constructor(\n    private userService: UserService,\n    private projectService: ProjectService,\n    private translate: TranslateService,\n    private modalCtrl: ModalController,\n    private navCtrl: NavController,\n    private configService: ConfigService,\n    private analyticsService: AnalyticsService,\n    private store: Store<State>,\n    private toaster: ToasterService,\n    private router: Router\n  ) {}\n\n  ngOnInit() {\n    this.projectsWithEvents$ = this.store\n      .select(selectMyProjectsActiveEvent)\n      .pipe(filter((p) => typeof p !== 'undefined'))\n      .pipe(\n        withLatestFrom(this.userService.userId$),\n        map(([projects, userId]) =>\n          projects.map((project) => ({\n            ...project,\n            canEdit: this.projectService.isProjectAdmin(project, userId),\n          }))\n        )\n      );\n\n    // /**\n    //  * @deprecated MVP-1123 only cares that there's a userId..\n    //  * secure addProject so only specific groups or !production can capture\n    //  * Kickstarter, WeddingPilot\n    //  */\n    // combineLatest([\n    //   this.userId$,\n    //   this.userService.userIsGlobalAdmin$.pipe(distinctUntilChanged()),\n    //   this.userService.userIsDeveloper$.pipe(distinctUntilChanged()),\n    //   this.userService.userGroupIncludesKickstarter$.pipe(distinctUntilChanged()),\n    //   this.userService.userGroupIncludesWeddingPilot$.pipe(distinctUntilChanged())\n    // ]).pipe(\n    //   takeUntil(this.onDestroy$)\n    // ).subscribe(([ userId, isAdmin, isDeveloper, isKickstarter, isWeddingPilot ]) => {\n    //   // MVP-1123 allow any auth'd user to create a project\n    //   this.canCreateProject = userId && userId.length > 0;\n    //   //  || !!isWeddingPilot\n    //   // this.canCreateProject = !environment.production || !!isAdmin || !!isDeveloper || !!isKickstarter;\n    // });\n\n    this.configService.appConfig.then((config) => {\n      this.isWidgetActive = !!config.isWidgetActive;\n      if (config.isWidgetActive) {\n        /**\n         * @todo stop the queries for projects and clips, filter stacks for only this projectId\n         */\n      }\n    });\n\n    /**\n     * select the Clip filter from the store, for the Clip filterable SearchBar\n     * @note this doesn't seem necessary, we don't need it on reload\n     */\n    // this.clipFilters$ = this.store.pipe(select(selectFilter(), { id: LIST_ID_CLIPS }));\n\n    if (this.showWatchLater) {\n      //TODO: create the feature!\n    }\n\n    setTimeout(() => {\n      this.loading = false;\n    }, 1200);\n  }\n\n  ngOnDestroy() {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  ngAfterViewInit() {\n    // state.tutorial - definition of something to alert the user to\n    const showTutorial = this.router.getCurrentNavigation().extras.state?.tutorial;\n    if (showTutorial) {\n      console.warn('navstate.showTutorial: ' + showTutorial);\n    }\n\n    // here we should open the subscribers\n\n    this.userId$\n      .pipe(\n        takeUntil(this.onDestroy$),\n        distinctUntilChanged(),\n        filter((userId) => userId && userId.length > 0)\n      )\n      .subscribe((userId) => {\n        this.userId = userId;\n        DEBUG_LOGS && console.log(`${PAGE} userId:`, userId); // MVP-1123\n        this.canCreateProject = userId && userId.length > 0;\n\n        // any time the userId changes, we should re-create the lists..\n        // if (!this.didCreateList) {\n        //   this.didCreateList = true;\n        DEBUG_LOGS && console.log(`${PAGE} creating lists...`);\n\n        // my recent stacks\n        this.stackListRecent = {\n          id: LIST_ID_STACKS_RECENT,\n          label: this.translate.instant('COMMON.RECENT'),\n          /** MVP-970 ngrx deprecated selectorWithProps */\n          list$: this.store.select(selectList(LIST_ID_STACKS_RECENT)),\n          items$: this.store.select(selectStackListItems(LIST_ID_STACKS_RECENT)).pipe(shareReplay(1)),\n          // ,\n          //   // no longer needed, done in api now (filter out Drafts)\n          //   // .pipe(map(items => items.filter(item => item && item.dtePublished)))\n          //   map(items => {\n          //     console.log(items); // here we are called\n          //     return items\n          //   })\n          // ),\n        };\n\n        // load MY RECENT STACKS\n        this.store.dispatch(\n          stackActions.loadFilteredStacks({\n            listId: LIST_ID_STACKS_RECENT,\n            filters: {\n              // : FilterEntity\n              type: FilterEntityTypes.Recent,\n              id: LIST_ID_STACKS_RECENT,\n              q: null,\n              userId,\n              isPrivate: false, // exclude the private stacks, default false\n            },\n          })\n        );\n\n        // build my private stacks list\n        this.stackListPrivate = {\n          id: LIST_ID_STACKS_PRIVATE,\n          label: this.translate.instant('STUDIO.PRIVATE_STACKS.LABEL'),\n          /** .pipe(shareReplay(1)) */\n          list$: this.store.select(selectList(LIST_ID_STACKS_PRIVATE)),\n          items$: this.store.select(selectStackListItems(LIST_ID_STACKS_PRIVATE)),\n        };\n        this.store.dispatch(\n          stackActions.loadFilteredStacks({\n            listId: LIST_ID_STACKS_PRIVATE,\n            filters: {\n              // : FilterEntity\n              type: FilterEntityTypes.Private,\n              id: LIST_ID_STACKS_PRIVATE,\n              q: null,\n              userId,\n              isPrivate: true, // only the private stacks\n            },\n          })\n        );\n        // my draft stacks - now in app-stack-drafts component\n\n        // clips list loaded when accordion expands for the first time\n        // } // end createList\n      }); // end userId$.subscribe\n\n    // this.projects$ = this.projectService.getMyProjects(); // this.store.select(selectMyProjects)\n\n    /**\n     * @todo this logic is not ideal - we need to check in the projectCrew component, foreach\n     */\n    combineLatest([this.userId$, this.projects$.pipe(distinctUntilChanged((a, b) => a && b && a.length === b.length))])\n      .pipe(takeUntil(this.onDestroy$))\n      .subscribe(([userId, projects]) => {\n        if (userId && Array.isArray(projects) && projects.length > 0) {\n          this.isProjectAdmin = this.projectService.checkIsAdminMultiple(userId, projects);\n          // this.projects = projects;\n        }\n      });\n  }\n\n  ionViewWillLeave() {\n    // reset any lingering topnav-drawer playlist actions\n    this.store.dispatch(stackActions.resetAddToStackPlaylist());\n    this.closeTabFab();\n  }\n\n  /** if event.detail.value then it was opened */\n  clipsAccordionChange(event) {\n    this.isClipsListShowing = event && event.detail && event.detail.value;\n    if (!this.didCreateClipList && this.isClipsListShowing) {\n      this.didCreateClipList = true;\n      this.clipList = {\n        id: LIST_ID_CLIPS,\n        label: this.translate.instant('COMMON.RECENT'),\n        /** MVP-970 ngrx deprecated selectorWithProps */\n        list$: this.store.select(selectList(LIST_ID_CLIPS)),\n        items$: this.store.select(selectClipListItems(LIST_ID_CLIPS)),\n      };\n\n      // load MY CLIPS\n      this.store.dispatch(\n        clipActions.loadFilteredClips({\n          listId: LIST_ID_CLIPS,\n          filters: {\n            // : FilterEntity\n            type: FilterEntityTypes.Recent,\n            id: LIST_ID_CLIPS,\n            q: null,\n            userId: this.userId,\n          },\n        })\n      );\n    }\n  }\n\n  loadMoreStacks(list: List) {\n    // console.log('loadMoreStacks:', list);\n    this.store.dispatch(\n      stackActions.loadMoreFilteredStacks({\n        listId: list.id,\n        filters: list.filters,\n        nextToken: list.nextToken,\n      })\n    );\n  }\n\n  loadMoreClips(list: List, event) {\n    Utils.tryPreventDefault(event);\n    Utils.tryStopPropagation(event);\n    // console.log('loadMoreClips:', list);\n    this.store.dispatch(\n      clipActions.loadMoreFilteredClips({\n        listId: list.id,\n        filters: list.filters,\n        nextToken: list.nextToken,\n      })\n    );\n  }\n\n  /**\n   * Toggle the Edit Profile UI & update the URL\n   */\n  editProfile() {\n    this.navCtrl.navigateForward(`/${STUDIO_SETTINGS_ROUTE}`);\n  }\n\n  /**\n   * filterable-toolbar search event\n   */\n  onSearchClips(value) {\n    DEBUG_LOGS && console.log(`${PAGE} onSearchClips: ${value}`);\n    this.analyticsService.search(`[studio_clips]:${value}`);\n    this.searchText = value || '';\n    const filters: FilterEntity = {\n      id: LIST_ID_CLIPS,\n      q: this.searchText,\n      userId: this.userId,\n      type: this.currentFilter,\n    };\n    // set filter so the list gets reset\n    this.store.dispatch(setFilter({ filter: filters }));\n\n    this.store.dispatch(\n      clipActions.loadFilteredClips({\n        listId: LIST_ID_CLIPS,\n        filters,\n      })\n    );\n  }\n\n  /**\n   * filterable-toolbar option changed event\n   * filters = ['Recent', 'Not Used']\n   */\n  onFilterClips(value) {\n    switch (value) {\n      case 'Not Used': {\n        DEBUG_LOGS && console.log(`${PAGE} onFilterClips... ${value}`);\n        this.currentFilter = FilterEntityTypes.Unused;\n        break;\n      }\n      case 'Recent':\n      default: {\n        DEBUG_LOGS && console.log(`${PAGE} onFilterClips Reset to recent: ${value}`);\n        this.currentFilter = FilterEntityTypes.Recent;\n      }\n    }\n    const filters = {\n      id: LIST_ID_CLIPS,\n      q: this.searchText,\n      userId: this.userId,\n      type: this.currentFilter,\n    };\n    // set filter so the list gets reset\n    this.store.dispatch(setFilter({ filter: filters }));\n    this.store.dispatch(\n      clipActions.loadFilteredClips({\n        listId: LIST_ID_CLIPS,\n        filters,\n      })\n    );\n  }\n\n  /**\n   * filterable-toolbar search event\n   */\n  onSearchStacks(value) {\n    DEBUG_LOGS && console.log(`${PAGE} onSearchStacks: ${value}`);\n    this.analyticsService.search(`[studio_stacks]:${value}`);\n\n    const filters: FilterEntity = {\n      id: LIST_ID_STACKS_RECENT,\n      q: value,\n      userId: this.userId,\n      type: FilterEntityTypes.Recent,\n    };\n    // set filter so the list gets reset\n    this.store.dispatch(setFilter({ filter: filters }));\n\n    this.store.dispatch(\n      stackActions.loadFilteredStacks({\n        listId: LIST_ID_STACKS_RECENT,\n        filters,\n      })\n    );\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  async createProjectEvent(event) {\n    this.router.navigate([SIGNUP_RETURN_URL_EVENTS], { queryParams: { returnUrl: this.router.url } });\n  }\n\n  async createProject() {\n    const projectCreateModal = await this.modalCtrl.create({\n      component: ProjectFormComponent,\n      componentProps: {\n        userId: this.userId,\n      },\n    });\n    projectCreateModal.present();\n    projectCreateModal.onDidDismiss().then((res) => {\n      if (res?.data?.project?.id?.length > 0) {\n        const project = res.data.project;\n        const detailRoute = `/${PROJECT_DETAIL_ROUTE}/${project.id}`;\n        switch (project.eventType) {\n          // let's sign up if event or Wedding!\n          case ProjectEventType.Event:\n            this.navCtrl.navigateForward(`/${SIGNUP_RETURN_URL_EVENTS}/${project.id}`, {\n              state: { returnUrl: detailRoute },\n            });\n            break;\n          case ProjectEventType.Weddings:\n            this.navCtrl.navigateForward(`/${SIGNUP_RETURN_URL_WEDDINGS}/${project.id}`, {\n              state: { returnUrl: detailRoute },\n            });\n            break;\n          default:\n            this.navCtrl.navigateForward(detailRoute);\n        }\n      } else {\n        console.warn('Missing Project Id?', res);\n        this.toaster.present(this.translate.instant('ERRORS.GENERIC_OOPS'));\n      }\n    });\n  }\n\n  navLogin() {\n    this.navCtrl.navigateRoot(`/${LOGIN_PAGE}`);\n  }\n\n  async addMember() {\n    if (this.canInviteCrew) {\n      const modal = await this.modalCtrl.create({\n        component: AddMemberModalComponent,\n        componentProps: {\n          isStudio: true,\n        },\n        cssClass: 'crew-member-modal fullheight-modal',\n      });\n      await modal.present();\n\n      const { data } = await modal.onDidDismiss();\n      if (data?.openAddMemberDialog) {\n        this.addMember();\n      }\n    } else {\n      this.toaster.present(\n        `When on a Project page, if you have permissions, click the FAB and select \"Add Crew\"`,\n        ToasterPosition.Bottom,\n        4800\n      );\n    }\n  }\n\n  createFilmstack() {\n    this.navCtrl.navigateForward(`/${EDIT_ROUTE}`);\n  }\n\n  /**\n   * check if subscribed, else forward to signup\n   */\n  openCapture() {\n    this.store\n      .select(selectCanCapture)\n      .pipe(take(1))\n      .subscribe((canCapture) => {\n        if (canCapture) {\n          // open topnavDrawer to select the Draft, then await the onSelected event\n          this.drawerHandleActions = false;\n          this.expandDraftDrawer();\n        } else {\n          this.navCtrl.navigateForward(SIGNUP_RETURN_URL_PRO, { state: { returnUrl: this.router.url } });\n        }\n      });\n  }\n\n  /**\n   * FAB Click appears to come just before the element changes its value\n   * fab is open if it is not currently activated\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  fabClick(event) {\n    const isFabOpen = !this.tabFab.activated; // !this.isFabOpen;\n    if (!isFabOpen) {\n      this.drawerHandleActions = true;\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  openTabFab(event) {\n    if (this.tabFab) {\n      this.tabFab.activated = true;\n    }\n  }\n  closeTabFab() {\n    this.tabFab?.close();\n    this.drawerHandleActions = true;\n  }\n\n  /**\n   * Handle drawer actions\n   * drawerHandleActions\n   */\n  draftDrawerSelected(event: Partial<Stack> = {}) {\n    if (!this.drawerHandleActions) {\n      const { projectId, stackId } = event;\n      // console.log(`Studio draft selected`, event);\n      this.selectedItemSuccess$.next(true);\n      if (projectId && stackId) {\n        this.drawerSelectedProjectId = projectId;\n        this.drawerSelectedStackId = stackId;\n        this.store.dispatch(stackActions.selectIdEdit({ projectId, stackId }));\n      }\n      this.delayedCloseDrawer();\n      this.captureDevice(projectId);\n    }\n  }\n  draftDrawerNewItem(event: Partial<Stack> = {}) {\n    if (!this.drawerHandleActions) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const { projectId, stackId, title } = event;\n      // console.log(`Studio draft new item`, { event, projectId });\n      this.selectedItemSuccess$.next(true);\n      if (projectId && stackId) {\n        this.drawerSelectedProjectId = projectId;\n        this.drawerSelectedStackId = stackId;\n        this.store.dispatch(stackActions.selectIdEdit({ projectId, stackId }));\n      }\n      this.delayedCloseDrawer();\n      this.captureDevice(projectId);\n    }\n  }\n  draftDrawerExpanded(event) {\n    // console.log(`Studio draft drawer expanded (${event})`);\n    if (!event) {\n      // closed, close fab?\n      this.closeTabFab();\n      // this.closeDraftDrawer();\n    }\n  }\n\n  expandDraftDrawer(showCreateForm = false) {\n    this.topDrawerExpand$.next({ i: ++this._incExpandEvent, showCreateForm });\n  }\n  closeDraftDrawer() {\n    this.topDrawerClose$.next(++this._incCloseEvent);\n  }\n\n  delayedCloseDrawer(path = '', delay = 600) {\n    clearTimeout(this._closeDrawerTimeout);\n    this._closeDrawerTimeout = setTimeout(() => {\n      this.closeDraftDrawer();\n      this.selectedItemSuccess$.next(false);\n      this.closeTabFab();\n      if (path) {\n        this.navCtrl.navigateForward(path);\n      }\n    }, delay);\n  }\n\n  /**\n   * modal with capture-instructions\n   */\n  async presentCaptureModal(projectId) {\n    const modal = await this.modalCtrl.create({\n      component: CaptureClipModalComponent,\n      componentProps: {\n        projectId,\n        showProjectSelect: true,\n      },\n    });\n\n    await modal.present();\n\n    const { data } = await modal.onDidDismiss();\n    console.log(`CaptureClipModal dismiss:`, { data });\n    this.closeTabFab();\n  }\n\n  /**\n   * clipUpload button success\n   * the navigation will selectIdEdit\n   */\n  captureSuccess(event) {\n    console.log(`captureSuccess numSuccess:`, { event, routerLinkEditStack: this.routerLinkEditStack });\n    this.navCtrl.navigateForward(this.routerLinkEditStack);\n  }\n\n  /**\n   * check if there's a projectId and it's one of mine, then do it directly, else modal..\n   * this is different than stack-edit and project-detail since there's many projects, requires drawer\n   */\n  captureDevice(projectId) {\n    this.userService.isCaptureAllowed$.pipe(take(1)).subscribe(({ isAllowed, projects }) => {\n      DEBUG_LOGS && console.log('captureDevice selectCanCapture', { isAllowed, projects });\n      if (isAllowed && projectId) {\n        const exists = projects.find((p) => p && p.id === projectId);\n        if (exists) {\n          // captureDevice projectId exists, open Filestack directly\n          this.triggerCapture();\n        } else {\n          this.presentCaptureModal(projectId);\n        }\n      } else {\n        // modal with capture-instructions, select projectId\n        this.presentCaptureModal(projectId);\n      }\n      this.closeTabFab();\n    });\n  }\n\n  /**\n   * We need to reset the trigger event..\n   */\n  private triggerCapture() {\n    this.captureClipEvent = true;\n    clearTimeout(this.triggerTimeout);\n    this.triggerTimeout = setTimeout(() => {\n      this.captureClipEvent = false;\n    }, 300);\n  }\n\n  /*\n   * Watch Later Feature Reminders:\n   * *  playAllWatchLater() => Play: Watch Later Playlist\n   */\n}\n"],"x_google_ignoreList":[]}