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