{"version":3,"file":"5440.0f4669a0709bd477.js","mappings":"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","names":["i0","ctx_r1","translatePath","OnboardingAcceptComponent_ng_template_2_p_0_Template","OnboardingAcceptComponent_ng_template_2_p_1_Template","_r1","acceptInvite","isTokenExpired","tokenId","project","title","OnboardingAcceptComponent_div_12_ng_template_1_Template","ActionButtonsRef_r3","inviteMessage","OnboardingAcceptComponent_ng_container_24_ng_template_1_Template","_r4","signUp","returnUrl","OnboardingAcceptComponent","_OnboardingAcceptComponent","constructor","onboardingService","toaster","tokensService","projectService","userService","router","route","this","TRANSLATE_ROOT","actionUrl","backgroundPosition","DEFAULT_BACKGROUND_POSITION","isLoggedIn$","defaultBackgroundUrl","DEFAULT_BACKGROUND_URL","token$","onDestroy$","Subject","ngOnInit","projectId","snapshot","paramMap","get","inviteId","data","invite","_a","length","setTokenId","PROJECT_DETAIL_ROUTE","updateProjectDetails","routeOnboardingMeta$","pipe","takeUntil","subscribe","routeId","backgroundUrl","environment","production","console","log","filter","Boolean","token","id","payload","payloadReturnUrl","message","thisProjectId","getReturnUrl","success","navigate","interval","take","ngOnDestroy","next","complete","getProjectPreview","proj","hero","error","undefined","applyTokenToCurrentUser","toLowerCase","SIGNUP_PAGE","state","queryParams","TOKEN_QUERY_PARAM","i1","i2","i3","i4","i5","i6","selectors","standalone","features","decls","vars","consts","template","rf","ctx","OnboardingAcceptComponent_ng_template_2_Template","OnboardingAcceptComponent_h3_11_Template","OnboardingAcceptComponent_div_12_Template","OnboardingAcceptComponent_h3_15_Template","OnboardingAcceptComponent_ng_container_24_Template","OnboardingAcceptComponent_ng_template_26_Template","notLoggedIn_r5","IonHeader","TopNavbarComponent","NgIf","IonButton","IonContent","NgTemplateOutlet","LoginFormComponent","ButtonComponent","RouterLink","FooterComponent","AsyncPipe","TranslatePipe","styles","OnboardingService","_OnboardingService","publishService","translate","routeOnboardingType$","events","event","NavigationEnd","map","_","firstChild","mergeMap","ROUTE_DATA_PROP","shareReplay","getMetaForRoute","getTranslatePath","OnboardingTypes","Weddings","Teams","None","createCollabStacksForWedding","userId","username","_this","_asyncToGenerator","warn","input","credits","privacy","STACK_PRIVACY","PUBLIC","playlist","isCollaborative","instant","poster","receptionStack","createStackDraft","factory","ɵfac","providedIn","_FooterComponent","theme","copyrightYear","Date","getFullYear","inputs","FooterComponent_ng_container_4_Template","FooterComponent_ng_container_5_Template","NgSwitch","NgSwitchCase","NgSwitchDefault"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/onboarding/onboarding-accept/onboarding-accept.component.html","./src/app/onboarding/onboarding-accept/onboarding-accept.component.ts","./src/app/onboarding/shared/services/onboarding.service.ts","./src/app/shared/components/footer/footer.component.html","./src/app/shared/components/footer/footer.component.ts"],"sourcesContent":["<ion-header>\n  <app-top-navbar title=\"\" theme=\"light\" class=\"light\">\n    <!-- SLOT: anything added here will go below the ion-navbar -->\n  </app-top-navbar>\n</ion-header>\n\n<!-- \n  acceptInvite()\n\n  \"ACCEPT_TITLE\": \"Join Wedding Project\",\n  \"ACCEPT_BODY_1\": \"Joining this project will allow you to capture video clips and help tell shared stories by arranging content into Filmstacks.\",\n  \"ACCEPT_BODY_2\": \"Once you've accepted the invite, we'll take you on tour on how to use Filmstacker.\",\n  \"ACCEPT_ACTION\": \"Accept Invite\",\n  \"ACCEPT_SUCCESS\": \"Successfully joined the project.\",\n -->\n<ng-template #ActionButtonsRef>\n  <p *ngIf=\"isTokenExpired\" class=\"bold\">{{ 'ONBOARDING.COMMON.INVITE.EXPIRED' | translate }}</p>\n  <p *ngIf=\"!isTokenExpired && !tokenId\" class=\"bold\">{{ translatePath + 'ACCEPT_NO_TOKEN' | translate }}</p>\n  <ion-button [disabled]=\"!tokenId || isTokenExpired\" (click)=\"acceptInvite()\">\n    {{ translatePath + 'ACCEPT_ACTION' | translate }} \n  </ion-button>\n  <!-- <ion-button *ngIf=\"project?.id\" [routerLink]=\"['stack/discover/project/', project.id]\">\n    {{ translatePath + 'ACCEPT_ACTION_2' | translate }} \n  </ion-button> -->\n</ng-template>\n\n<ion-content class=\"light\">\n  <div class=\"content-background d-flex ion-padding\"\n      [style.background-image]=\"'url(' + backgroundUrl + ')'\"\n      [style.background-position]=\"backgroundPosition\">\n    <div class=\"container ion-padding\">\n      <div class=\"content-wrap ion-padding\">\n        <h1>\n          {{ translatePath + 'ACCEPT_TITLE' | translate }}\n        </h1>\n        <h3 *ngIf=\"project\" class=\"constrained bold\">\n          {{ project.title }} \n          <!-- <div>\n            {{ project.description }} \n          </div> -->\n        </h3>\n        <div *ngIf=\"(isLoggedIn$ | async) === true\" class=\"action-buttons ion-margin-top\">\n          <ng-template [ngTemplateOutlet]=\"ActionButtonsRef\"></ng-template>\n        </div>\n      </div>\n    </div>\n  </div>\n  <section class=\"how-it-works light\">\n    <h3 *ngIf=\"inviteMessage\">{{ inviteMessage }}</h3>\n    <!-- <p *ngIf=\"inviteMessage\">{{ inviteMessage }}</p> -->\n\n    <ul class=\"ion-padding-bottom\">\n      <li>{{ translatePath + 'ACCEPT_BODY_1' | translate }} </li>\n      <li>{{ translatePath + 'ACCEPT_BODY_2' | translate }} </li>\n    </ul>\n\n    <div class=\"action-buttons ion-text-center ion-padding-top\">\n      <ng-container *ngIf=\"(isLoggedIn$ | async) === true; else notLoggedIn\">\n        <ng-template [ngTemplateOutlet]=\"ActionButtonsRef\"></ng-template>\n      </ng-container>\n      <ng-template #notLoggedIn>\n        <div class=\"container skinny-limit-width\">\n          <h2>{{ 'AUTH.TOPNAV_HAS_ACCOUNT' | translate }}</h2>\n          <fs-login-form [routeOnSuccess]=\"returnUrl\"></fs-login-form>\n        </div>\n        <div class=\"container ion-padding-top\">\n          <h2>{{ 'AUTH.TOPNAV_NO_ACCOUNT' | translate }}</h2>\n          <fs-button buttonStyle=\"outline\" (click)=\"signUp()\">\n            {{ 'AUTH.SIGNUP.ACTION' | translate }} \n          </fs-button> \n        </div>\n      </ng-template>\n\n      <fs-button [routerLink]=\"returnUrl\" buttonStyle=\"clear\">Go To Project</fs-button>\n    </div>\n    <!-- <app-onboarding-how-it-works [routeId]=\"routeId\"></app-onboarding-how-it-works> -->\n  </section>\n\n  <!-- <app-onboarding-section-get-started [routeId]=\"routeId\" [actionUrl]=\"actionUrl\"></app-onboarding-section-get-started> -->\n\n  <div class=\"ion-margin-top\">\n    <app-footer theme=\"light\"></app-footer>\n  </div>\n</ion-content>\n","/** @format */\n\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { NgIf, NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IonHeader, IonButton, IonContent } from '@ionic/angular/standalone';\nimport { interval, Observable, Subject } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\nimport { PROJECT_DETAIL_ROUTE, SIGNUP_PAGE } from '@app/app.routes';\nimport { ToasterService } from '@app/core/services/toaster.service';\nimport { UserService } from '@app/core/services/user.service';\nimport { ButtonComponent } from '@app/shared/components/ui/buttons/button/button.component';\nimport { FooterComponent } from '@app/shared/components/footer/footer.component';\nimport { LoginFormComponent } from '@app/shared/components/login/login-form.component';\nimport { TopNavbarComponent } from '@app/shared/components/top-navbar/top-navbar.component';\nimport { Project } from '@app/projects/shared/project.model';\nimport { ProjectService } from '@app/projects/shared/services/project.service';\nimport { getReturnUrl, isTokenExpired, Token, TOKEN_QUERY_PARAM } from '@app/tokens/shared/tokens.model';\nimport { TokensService } from '@app/tokens/shared/services/tokens.service';\nimport { TRANSLATE_ROOT, DEFAULT_BACKGROUND_URL, DEFAULT_BACKGROUND_POSITION } from '../shared/onboarding.model';\nimport { OnboardingService } from '../shared/services/onboarding.service';\nimport { environment } from 'src/environments/environment';\n\n@Component({\n  selector: 'app-onboarding-accept',\n  templateUrl: './onboarding-accept.component.html',\n  styleUrls: ['./onboarding-accept.component.scss'],\n  standalone: true,\n  imports: [\n    IonHeader,\n    TopNavbarComponent,\n    NgIf,\n    IonButton,\n    IonContent,\n    NgTemplateOutlet,\n    LoginFormComponent,\n    ButtonComponent,\n    RouterLink,\n    FooterComponent,\n    AsyncPipe,\n    TranslatePipe,\n  ],\n})\nexport class OnboardingAcceptComponent implements OnInit, OnDestroy {\n  translatePath = TRANSLATE_ROOT;\n  actionUrl = '/signup';\n  routeId: string;\n  backgroundUrl: string; // wait for this to get set to avoid flicker (MVP-1046) // = DEFAULT_BACKGROUND_URL;\n  backgroundPosition = DEFAULT_BACKGROUND_POSITION;\n\n  projectId: string;\n  project: Project;\n  inviteId: string;\n  inviteMessage = '';\n  returnUrl = '';\n  tokenId: string;\n  isTokenExpired = true;\n\n  isLoggedIn$ = this.userService.isLoggedIn$;\n\n  private defaultBackgroundUrl = DEFAULT_BACKGROUND_URL;\n  private token$: Observable<Token> = this.tokensService.token$;\n  private onDestroy$ = new Subject<void>();\n\n  constructor(\n    private onboardingService: OnboardingService,\n    private toaster: ToasterService,\n    private tokensService: TokensService,\n    private projectService: ProjectService,\n    private userService: UserService,\n    private router: Router,\n    private route: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    this.projectId = this.route.snapshot.paramMap.get('projectId');\n    this.inviteId = this.route.snapshot.data['invite'] || this.route.snapshot.paramMap.get('inviteId');\n    if (this.inviteId?.length > 0) {\n      this.tokensService.setTokenId(this.inviteId);\n    }\n\n    if (this.projectId) {\n      const addInvite = this.inviteId ? `/${this.inviteId}` : '';\n      this.returnUrl = `/${PROJECT_DETAIL_ROUTE}/${this.projectId}${addInvite}`;\n      this.updateProjectDetails(this.projectId);\n    } else {\n      this.returnUrl = 'studio';\n    }\n\n    // here we're setting the default backgroundUrl based on route metadata, in case the project DNE MVP-1046\n    this.onboardingService.routeOnboardingMeta$\n      .pipe(takeUntil(this.onDestroy$))\n      .subscribe(\n        ({\n          routeId,\n          translatePath = '',\n          actionUrl = '',\n          backgroundUrl = DEFAULT_BACKGROUND_URL,\n          backgroundPosition = DEFAULT_BACKGROUND_POSITION,\n        }) => {\n          !environment.production &&\n            console.log(`[OnboardingMeta]`, { routeId, translatePath, actionUrl, backgroundUrl, backgroundPosition });\n          this.routeId = routeId;\n          this.translatePath = translatePath;\n          // this.actionUrl = actionUrl;\n          this.defaultBackgroundUrl = backgroundUrl;\n          if (this.backgroundUrl === this.defaultBackgroundUrl) {\n            // fix: MVP-1046 do not flicker the default wedding graphic, await the project to load\n            // this.backgroundUrl = backgroundUrl;\n            this.backgroundPosition = backgroundPosition;\n          }\n        }\n      );\n\n    // get the token data\n    this.token$.pipe(takeUntil(this.onDestroy$), filter(Boolean)).subscribe((token: Token) => {\n      const {\n        id,\n        projectId,\n        returnUrl,\n        // projectRole,\n        // eventType = '',\n        payload: { returnUrl: payloadReturnUrl = '', message = '' } = {},\n      } = token;\n\n      this.tokenId = id;\n      this.isTokenExpired = isTokenExpired(token);\n\n      !environment.production && console.log(`[Onboarding] projectId:`, { projectId, thisProjectId: this.projectId });\n      if (projectId && projectId !== this.projectId) {\n        this.updateProjectDetails(projectId);\n      }\n      this.inviteMessage = message;\n      if (returnUrl) {\n        this.returnUrl = returnUrl;\n      } else if (payloadReturnUrl) {\n        this.returnUrl = payloadReturnUrl;\n      } else if (projectId || this.projectId) {\n        this.returnUrl = getReturnUrl(projectId || this.projectId);\n      } else {\n        this.returnUrl = '/studio';\n      }\n      console.log(`[Accept] token:`, { token, returnUrl: this.returnUrl });\n      if (token && token.success) {\n        this.router.navigate([this.returnUrl]);\n      }\n    });\n\n    // finally, let's wait a few seconds and update it if the token and/or project did not load\n    // fix: MVP-1046 do not flicker the default wedding graphic, await the project to load\n    interval(2000)\n      .pipe(take(1))\n      .subscribe(() => {\n        if (!this.backgroundUrl) {\n          this.backgroundUrl = this.defaultBackgroundUrl;\n        }\n      });\n  }\n\n  ngOnDestroy() {\n    this.onDestroy$.next();\n    this.onDestroy$.complete();\n  }\n\n  /** per token or route, when projectId != this.projectId */\n  updateProjectDetails(projectId) {\n    try {\n      this.projectService\n        .getProjectPreview(projectId)\n        .pipe(take(1))\n        .subscribe((proj) => {\n          !environment.production && console.log(`[Onboarding] project:`, proj);\n          this.project = proj;\n          this.backgroundUrl = proj && proj.hero ? proj.hero : this.defaultBackgroundUrl;\n          // todo: should the project config hold this info?\n          this.backgroundPosition = DEFAULT_BACKGROUND_POSITION;\n        });\n    } catch (error) {\n      console.error(`[Onboarding] error updating project details:`, error);\n      this.project = undefined;\n      this.backgroundUrl = this.defaultBackgroundUrl;\n    }\n  }\n\n  /** per template, isLoggedIn$ == true */\n  acceptInvite() {\n    if (this.tokenId) {\n      this.tokensService.applyTokenToCurrentUser({ tokenId: this.tokenId });\n    }\n  }\n\n  signUp() {\n    const returnUrl = this.returnUrl;\n    const routeId = this.routeId ? this.routeId.toLowerCase() : '';\n    this.router.navigate([`/${SIGNUP_PAGE}`, routeId], {\n      state: { returnUrl },\n      queryParams: { returnUrl, [TOKEN_QUERY_PARAM]: this.tokenId },\n    });\n  }\n}\n","/** @format */\n\nimport { Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { filter, map, mergeMap, shareReplay } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { OnboardingTypes, OnboardingMeta, getTranslatePath, ROUTE_DATA_PROP } from '../onboarding.model';\nimport { STACK_PRIVACY, Stack, StackDraftPublishInput } from '@app/shared/models/stack.model';\nimport { PublishStackService } from '@app/core/services/publish-stack.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class OnboardingService {\n  /**\n   * use with takeUntil(this.onDestroy$),\n   * @todo consider where this should live\n   */\n  routeOnboardingType$: Observable<OnboardingTypes> = this.router.events.pipe(\n    filter((event) => event instanceof NavigationEnd),\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    map((_) => this.route),\n    map((route) => {\n      while (route.firstChild) {\n        route = route.firstChild;\n      }\n      return route;\n    }),\n    mergeMap((route) => route.data),\n    map((data) => data[ROUTE_DATA_PROP]),\n    shareReplay(1)\n  );\n\n  /**\n   * use with takeUntil(this.onDestroy$),\n   */\n  routeOnboardingMeta$: Observable<OnboardingMeta> = this.routeOnboardingType$.pipe(\n    map((routeId: OnboardingTypes) => this.getMetaForRoute(routeId)),\n    shareReplay(1)\n  );\n\n  constructor(\n    private publishService: PublishStackService,\n    private translate: TranslateService,\n    private router: Router,\n    private route: ActivatedRoute\n  ) {}\n\n  getMetaForRoute(routeId: string): OnboardingMeta {\n    const translatePath = getTranslatePath(routeId);\n    switch (routeId) {\n      case OnboardingTypes.Weddings:\n        return {\n          routeId,\n          translatePath,\n          actionUrl: `/events/weddings/`,\n          backgroundUrl: '/assets/images/events/weddings-bride@2.jpg',\n          backgroundPosition: 'bottom right',\n        };\n      case OnboardingTypes.Teams:\n        return {\n          routeId,\n          translatePath,\n          actionUrl: `/events/`,\n          backgroundUrl: '/assets/images/events/crowd-filming@2.jpg',\n          backgroundPosition: 'center',\n        };\n      case OnboardingTypes.Pro:\n      case OnboardingTypes.Projects:\n      case OnboardingTypes.None:\n      default:\n        return {\n          routeId: (routeId as OnboardingTypes) || OnboardingTypes.None,\n          translatePath,\n          actionUrl: `/pro/`,\n          backgroundUrl: '/assets/images/events/crowd-filming@2.jpg',\n          backgroundPosition: 'center',\n          // this.sideBlocks = this.buildSideBlocks('');\n        };\n    }\n  }\n\n  /**\n   * On successful signup, create 2 collab drafts for Guests [MVP-1367]\n   * The owner should be the person who just signed up\n   * 1: Reception\n   *    poster: https://app.filmstacker.com/assets/images/events/weddings-jump@1.jpg\n   * 2: Ceremony (created second so it shows up first?)\n   *    poster: https://app.filmstacker.com/assets/images/events/weddings-hands@1.jpg\n   */\n  async createCollabStacksForWedding({ userId, username, projectId }): Promise<Array<Stack>> {\n    console.warn('create the collab stacks!', { userId, username, projectId });\n    try {\n      const input: StackDraftPublishInput = {\n        userId,\n        credits: username,\n        projectId,\n        privacy: STACK_PRIVACY.PUBLIC,\n        playlist: [],\n        isCollaborative: 1,\n        title: this.translate.instant('ONBOARDING.COMMON.STACK_TITLE_RECEPTION'),\n        poster: 'https://app.filmstacker.com/assets/images/events/weddings-jump@1.jpg',\n      };\n      const receptionStack = await this.publishService.createStackDraft(input);\n      // ok, now the Ceremony\n      input.title = this.translate.instant('ONBOARDING.COMMON.STACK_TITLE_CEREMONY');\n      input.poster = 'https://app.filmstacker.com/assets/images/events/weddings-hands@1.jpg';\n      const ceremonyStack = await this.publishService.createStackDraft(input);\n      return [receptionStack, ceremonyStack];\n    } catch (error) {\n      console.error(error);\n      throw error;\n    }\n  }\n}\n","<!-- @format -->\n\n<footer>\n  <div class=\"footer container\">\n    <div class=\"footer__side footer__side--left\">\n      <div [ngSwitch]=\"theme\">\n        <ng-container *ngSwitchCase=\"'light'\">\n          <!-- if light theme, use blue logo -->\n          <img class=\"logo\" src=\"/assets/images/logos/Filmstacker-logo-teal.png\" alt=\"Filmstacker\" />\n        </ng-container>\n        <ng-container *ngSwitchDefault>\n          <img class=\"logo\" src=\"/assets/images/filmstacker-logo.png\" alt=\"Filmstacker\" />\n        </ng-container>\n      </div>\n    </div>\n    <div class=\"footer__side\">\n      <div class=\"footer__side__item\">\n        <a routerLink=\"/about\">{{ 'COMMON.ABOUT' | translate }}</a>\n      </div>\n      <!-- <div class=\"footer__side__item\">\n        <a routerLink=\"/support\">{{ 'COMMON.SUPPORT' | translate }}</a>\n      </div> -->\n      <div class=\"footer__side__item\">\n        <a routerLink=\"/community-rules\">{{ 'COMMON.COMMUNITY_GUIDELINES' | translate }}</a>\n      </div>\n      <div class=\"footer__side__item\">\n        <a routerLink=\"/privacy\">{{ 'POLICIES.PRIVACY_POLICY' | translate }}</a>\n      </div>\n      <div class=\"footer__side__item\">\n        <a routerLink=\"/terms\">{{ 'POLICIES.TERMS_USE' | translate }}</a>\n      </div>\n      <div class=\"footer__side__item\">&copy;{{ copyrightYear }} Filmstacker Inc. {{ 'POLICIES.RIGHTS_RESERVED' | translate }}.</div>\n    </div>\n  </div>\n  <div class=\"tab-bottom-spacer\"></div>\n</footer>\n","/** @format */\n\nimport { Component, Input } from '@angular/core';\nimport { NgSwitch, NgSwitchCase, NgSwitchDefault } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-footer',\n  templateUrl: './footer.component.html',\n  styleUrls: ['./footer.component.scss'],\n  standalone: true,\n  imports: [NgSwitch, NgSwitchCase, NgSwitchDefault, RouterLink, TranslatePipe],\n})\nexport class FooterComponent {\n  /** manages which logo */\n  @Input() theme: 'light' | 'dark' = 'dark';\n\n  copyrightYear = new Date().getFullYear();\n}\n"],"x_google_ignoreList":[]}