{"version":3,"file":"9118.6941c95b185ac04d.js","mappings":"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","names":["i0","ctx_r1","getPriceMonthly","getPriceYearly","planItem","plan","description","tmp_6_0","meta","translatePath","undefined","PlanItemComponent_ng_container_0_ng_container_4_div_2_Template","PlanItemComponent_ng_container_0_ng_container_4_div_3_Template","PlanItemComponent_ng_container_0_ng_container_4_div_4_Template","PlanItemComponent_ng_container_0_ng_container_4_p_5_Template","PlanItemComponent_ng_container_0_ng_container_4_ng_template_6_Template","_r1","navSignup","emit","signupPath","PlanItemComponent_ng_container_0_ng_container_4_div_12_Template","defaultPlanDescription_r3","isProPlan","isActivePro","signupTranslatePath","PlanItemComponent_ng_container_0_ng_container_4_Template","tmp_3_0","enableBilling","billingDisabled_r4","PlanItemComponent","_PlanItemComponent","constructor","this","EventEmitter","ENABLE_BILLING","_a","planId","ChargebeePlanId","Pro","_e","_d","_c","_b","prices","find","p","periodUnit","price","toString","Teams","Weddings","SIGNUP_RETURN_URL_PRO","SIGNUP_RETURN_URL_EVENTS","SIGNUP_RETURN_URL_WEDDINGS","selectors","inputs","outputs","standalone","features","decls","vars","consts","template","rf","ctx","PlanItemComponent_ng_container_0_Template","PlanItemComponent_ng_template_1_Template","PlanItemComponent_ng_template_3_Template","id","loadingContent_r5","NgIf","TranslatePipe","IonButton","IonSpinner","styles","$event","_r2","ctx_r2","proPlan","_r4","weddingsPlan","_r5","teamsPlan","PlansModalComponent","_PlansModalComponent","vm","OnboardingTypes","onboardingService","store","router","subscriptionVm$","select","selectSubscriptionStatus","minutes$","selectMinutes","isPro$","selectIsPro","minutesEnabled","ENABLE_BILLING_MINUTES","onDestroy$","Subject","ngOnInit","combineLatest","selectPlans","getUserSubscriptionState","pipe","takeUntil","subscribe","plans","subscriptionLevel","subscriptionStatus","SubscriptionStatus","Active","SubscriptionLevel","length","getPlanFromOnboardingType","getMetaForRoute","console","warn","log","error","ngOnDestroy","next","complete","route","navigateByUrl","modal","dismiss","i1","i2","i3","viewQuery","BaseModalComponent","PlansModalComponent_fs_plan_item_10_Template","PlansModalComponent_fs_plan_item_11_Template","PlansModalComponent_fs_plan_item_12_Template","modal_r6","ButtonComponent","IonIcon","OnboardingService","_OnboardingService","publishService","translate","routeOnboardingType$","events","filter","event","NavigationEnd","map","_","firstChild","mergeMap","data","ROUTE_DATA_PROP","shareReplay","routeOnboardingMeta$","routeId","getTranslatePath","actionUrl","backgroundUrl","backgroundPosition","None","createCollabStacksForWedding","userId","username","projectId","_this","_asyncToGenerator","input","credits","privacy","STACK_PRIVACY","PUBLIC","playlist","isCollaborative","title","instant","poster","receptionStack","createStackDraft","factory","ɵfac","providedIn"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/billing/shared/components/plan-item/plan-item.component.html","./src/app/billing/shared/components/plan-item/plan-item.component.ts","./src/app/billing/shared/components/plans-modal/plans-modal.component.html","./src/app/billing/shared/components/plans-modal/plans-modal.component.ts","./src/app/onboarding/shared/services/onboarding.service.ts"],"sourcesContent":["<ng-container *ngIf=\"planItem?.plan?.id else loadingContent\">\n <h2 class=\"ion-text-center\">\n {{ (planItem?.meta?.translatePath ?? '') + 'SIGNUP_TITLE' | translate }}\n </h2>\n <ng-container *ngIf=\"enableBilling else billingDisabled\">\n <!-- <h1>\n <ng-container *ngIf=\"planItem?.tiers?.length > 0 else defaultBillingTitle\">\n {{ (planItem?.meta?.translatePath ?? '') + 'SIGNUP_SUBTITLE_TIERED' | translate }}\n </ng-container>\n <ng-template #defaultBillingTitle>\n {{ (planItem?.meta?.translatePath ?? '') + 'SIGNUP_SUBTITLE' | translate }}\n </ng-template>\n </h1> -->\n <div class=\"cost\">\n <div *ngIf=\"getPriceMonthly\" class=\"monthly\">\n <sup>$</sup>{{getPriceMonthly}}<sup>/{{ 'COMMON.MONTH_ABBR' | translate }}</sup>\n </div>\n <div *ngIf=\"getPriceMonthly && getPriceYearly\" class=\"or\">{{ 'COMMON.OR' | translate }}</div>\n <div *ngIf=\"getPriceYearly\" class=\"monthly\">\n <sup>$</sup>{{getPriceYearly}}<sup>/{{ 'COMMON.YEAR_ABBR' | translate }}</sup>\n </div>\n </div>\n <p *ngIf=\"planItem?.plan?.description else defaultPlanDescription\">\n {{ planItem?.plan.description }}\n </p>\n <ng-template #defaultPlanDescription>\n <p>\n {{ (planItem?.meta?.translatePath ?? '') + 'SIGNUP_BODY_1' | translate }}\n </p>\n </ng-template>\n\n <div class=\"actions ion-text-center\">\n <!-- <ion-button *ngIf=\"(isPro$ | async) !== true\" fill=\"outline\" (click)=\"navSignup(proSignupRoute)\"> -->\n <ion-button fill=\"outline\" [disabled]=\"isProPlan && isActivePro\" (click)=\"navSignup.emit(signupPath)\">\n {{ signupTranslatePath | translate }}\n </ion-button>\n <div *ngIf=\"isProPlan && isActivePro\" class=\"bold orange\">\n {{ 'BILLING.ALREADY_PRO' | translate }}\n </div>\n </div>\n </ng-container>\n</ng-container>\n\n<ng-template #loadingContent>\n <div class=\"ion-text-center\">\n <ion-spinner></ion-spinner> {{ 'COMMON.LOADING' | translate }}\n </div>\n</ng-template>\n\n<ng-template #billingDisabled>\n <div class=\"ion-text-center\">\n Sorry, Billing is Disabled.\n </div>\n</ng-template>\n","/** @format */\n\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IonButton, IonSpinner } from '@ionic/angular/standalone';\nimport { ENABLE_BILLING } from '@app/app.config';\nimport { ChargebeePlanId } from '@app/billing/shared/billing.model';\nimport {\n PlanItem,\n SIGNUP_RETURN_URL_EVENTS,\n SIGNUP_RETURN_URL_PRO,\n SIGNUP_RETURN_URL_WEDDINGS,\n} from '@app/onboarding/shared/onboarding.model';\n\n@Component({\n selector: 'fs-plan-item',\n templateUrl: './plan-item.component.html',\n styleUrls: ['./plan-item.component.scss'],\n standalone: true,\n imports: [NgIf, TranslatePipe, IonButton, IonSpinner],\n})\nexport class PlanItemComponent {\n @Input() planItem: PlanItem;\n @Input() isActivePro = false;\n\n @Output() navSignup = new EventEmitter<string>();\n\n enableBilling = ENABLE_BILLING;\n\n get isProPlan(): boolean {\n return this.planItem?.planId === ChargebeePlanId.Pro;\n }\n\n get getPriceMonthly(): string {\n return this.planItem?.plan?.prices?.find((p) => p?.periodUnit === 'month')?.price?.toString();\n }\n get getPriceYearly(): string {\n return this.planItem?.plan?.prices?.find((p) => p?.periodUnit === 'year')?.price?.toString();\n }\n\n get signupTranslatePath(): string {\n switch (this.planItem?.planId) {\n case ChargebeePlanId.Pro:\n return 'AUTH.PLANS.SIGN_UP_PRO';\n case ChargebeePlanId.Teams:\n return 'AUTH.PLANS.SIGN_UP_EVENT';\n case ChargebeePlanId.Weddings:\n return 'AUTH.PLANS.SIGN_UP_WEDDING';\n }\n }\n get signupPath(): string {\n switch (this.planItem?.planId) {\n case ChargebeePlanId.Pro:\n return SIGNUP_RETURN_URL_PRO;\n case ChargebeePlanId.Teams:\n return SIGNUP_RETURN_URL_EVENTS;\n case ChargebeePlanId.Weddings:\n return SIGNUP_RETURN_URL_WEDDINGS;\n }\n }\n}\n","<fs-base-modal #modal mode=\"light\">\n <div class=\"plans container\" style=\"height: 100%;\">\n <h1>{{ 'ONBOARDING.SIGNUP_SUBTITLE' | translate }}</h1>\n <p>{{ 'ONBOARDING.COMMON.PLANS_DESC' | translate }}</p>\n\n <div class=\"plans__list ion-padding-top\">\n <fs-plan-item *ngIf=\"proPlan\" [planItem]=\"proPlan\" [isActivePro]=\"isActivePro\" (navSignup)=\"navSignup($event)\" [class.is-pro]=\"isActivePro\" class=\"plans__item plans__item__pro\"></fs-plan-item>\n <fs-plan-item *ngIf=\"weddingsPlan\" [planItem]=\"weddingsPlan\" (navSignup)=\"navSignup($event)\" class=\"plans__item featured\"></fs-plan-item>\n <fs-plan-item *ngIf=\"teamsPlan\" [planItem]=\"teamsPlan\" (navSignup)=\"navSignup($event)\" class=\"plans__item\"></fs-plan-item>\n </div>\n \n <p class=\"ion-text-wrap ion-padding-bottom ion-margin-bottom\" style=\"line-height: 3em;\">\n <ion-button class=\"btn-link-inline with-icon ion-text-wrap\" fill=\"clear\" href=\"https://filmstacker.com/plans-pricing\" target=\"_filmstacker\">\n {{ 'AUTH.PLANS.LEARN_MORE' | translate }}\n <ion-icon slot=\"end\" name=\"open-outline\"></ion-icon>\n </ion-button>\n <span class=\"float-right\">\n <fs-button buttonStyle=\"clear\" (click)=\"modal.dismiss()\">{{ 'COMMON.CANCEL' | translate }}</fs-button>\n </span>\n </p> \n </div>\n</fs-base-modal>\n","/** @format */\n\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, Subject, combineLatest, takeUntil } from 'rxjs';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport { Store } from '@ngrx/store';\nimport {\n selectMinutes,\n selectSubscriptionStatus,\n SubscriptionViewModel,\n selectIsPro,\n selectPlans,\n} from '@app/billing/store/billing.selectors';\nimport { getUserSubscriptionState } from '@store/selectors/user.selectors';\nimport { ChargebeePlanId, SubscriptionLevel, SubscriptionStatus } from '@app/billing/shared/billing.model';\nimport { OnboardingTypes, PlanItem, getPlanFromOnboardingType } from '@app/onboarding/shared/onboarding.model';\nimport { OnboardingService } from '@app/onboarding/shared/services/onboarding.service';\nimport { BaseModalComponent } from '@app/shared/components/ui/modal/base-modal.component';\nimport { ButtonComponent } from '@app/shared/components/ui/buttons/button/button.component';\nimport { PlanItemComponent } from '../plan-item/plan-item.component';\nimport { ENABLE_BILLING_MINUTES } from '@app/app.config';\n\n@Component({\n selector: 'fs-plans-modal',\n templateUrl: './plans-modal.component.html',\n styleUrls: ['./plans-modal.component.scss'],\n standalone: true,\n imports: [NgIf, TranslatePipe, BaseModalComponent, PlanItemComponent, ButtonComponent, IonButton, IonIcon],\n})\nexport class PlansModalComponent implements OnInit, OnDestroy {\n /** @todo HostedPage - move to environment */\n // @Input() userId = '';\n // @Input() planId: ChargebeePlanId = ChargebeePlanId.Pro;\n // @Input() priceId = '';\n // @Input() referralCode = '';\n // @Input() projectId = '';\n // @Input() projectTitle = '';\n // @Input() eventDate = '';\n // @Input() successRedirectPath = getSuccessPath('' as any);\n\n subscriptionVm$: Observable<SubscriptionViewModel> = this.store.select(selectSubscriptionStatus);\n minutes$: Observable<number> = this.store.select(selectMinutes);\n isPro$: Observable<boolean> = this.store.select(selectIsPro);\n\n minutesEnabled = ENABLE_BILLING_MINUTES;\n // enableBilling = ENABLE_BILLING;\n\n @ViewChild('modal', { static: false, read: BaseModalComponent })\n modal: BaseModalComponent;\n\n isActivePro = false;\n\n get proPlan(): PlanItem | undefined {\n return this.vm[OnboardingTypes.Pro];\n }\n get teamsPlan(): PlanItem | undefined {\n return this.vm[OnboardingTypes.Teams];\n }\n get weddingsPlan(): PlanItem | undefined {\n return this.vm[OnboardingTypes.Weddings];\n }\n private vm: { [id: string]: PlanItem | undefined } = {};\n\n private onDestroy$ = new Subject<void>();\n\n constructor(\n // private chargebeeService: ChargebeeService,\n // private billingService: BillingService,\n private onboardingService: OnboardingService,\n private store: Store,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n // billingService.loadPlans happens in app.component.initializeApp\n\n combineLatest([\n // this.onboardingService.routeOnboardingMeta$,\n this.store.select(selectPlans),\n this.store.select(getUserSubscriptionState),\n ])\n .pipe(takeUntil(this.onDestroy$))\n .subscribe(\n ([\n // { routeId, translatePath = '', actionUrl = '', backgroundUrl = '', backgroundPosition = '' },\n /* eslint-disable @typescript-eslint/no-unused-vars */\n { plans, addons },\n { userId, subscriptionId, subscriptionLevel, subscriptionStatus, subscriptionMinutes },\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ]) => {\n // if (!routeId) return; // not the current route or metadata not available\n // this.routeId = routeId;\n // this.translatePath = translatePath;\n // this.actionUrl = actionUrl + 'signup';// this component, used in login-form onsuccess\n // this.backgroundUrl = backgroundUrl;\n // this.backgroundPosition = backgroundPosition;\n\n try {\n // this.metaPlanOptions = [];\n if (subscriptionStatus === SubscriptionStatus.Active) {\n // we have an active sub - do we highlight what you are?\n this.isActivePro = subscriptionLevel === SubscriptionLevel.Pro;\n }\n // plans\n if (plans?.length > 0) {\n // const { planId, plan, isProPlan, tiers } = getPlanFromOnboardingType(routeId, plans);\n // this component with set order of Pro, Weddings, Events\n for (const plan of plans) {\n switch (plan?.id) {\n case ChargebeePlanId.Pro:\n this.vm[OnboardingTypes.Pro] = {\n ...getPlanFromOnboardingType(OnboardingTypes.Pro, plans),\n meta: this.onboardingService.getMetaForRoute(OnboardingTypes.Pro),\n };\n break;\n case ChargebeePlanId.Teams:\n this.vm[OnboardingTypes.Teams] = {\n ...getPlanFromOnboardingType(OnboardingTypes.Teams, plans),\n meta: this.onboardingService.getMetaForRoute(OnboardingTypes.Teams),\n };\n break;\n case ChargebeePlanId.Weddings:\n this.vm[OnboardingTypes.Weddings] = {\n ...getPlanFromOnboardingType(OnboardingTypes.Weddings, plans),\n meta: this.onboardingService.getMetaForRoute(OnboardingTypes.Weddings),\n };\n break;\n default:\n console.warn('unknown plan id?', plan);\n }\n }\n console.log(this.vm);\n } else {\n // no plans? reset, loading?\n }\n } catch (error) {\n console.warn(error);\n }\n }\n );\n }\n\n ngOnDestroy() {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n navSignup(route) {\n this.router.navigateByUrl(route);\n this.modal.dismiss();\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"],"x_google_ignoreList":[]}