@posiwise/user-module 0.0.139 → 0.0.140

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-user-module.mjs","sources":["../../../../libs/user-module/src/lib/account/account.component.ts","../../../../libs/user-module/src/lib/account/account.component.html","../../../../libs/user-module/src/lib/account/account-details/account-details.component.ts","../../../../libs/user-module/src/lib/account/account-details/account-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/add-subscription/add-subscription.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/add-subscription/add-subscription.component.html","../../../../libs/user-module/src/lib/account/subscriptions/saved-card-details/saved-card-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/saved-card-details/saved-card-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/subscription-credential/subscription-credential.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/subscription-credential/subscription-credential.component.html","../../../../libs/user-module/src/lib/account/subscriptions/update-payment-details/update-payment-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/update-payment-details/update-payment-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/upgrade-subscription/upgrade-subscription.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/upgrade-subscription/upgrade-subscription.component.html","../../../../libs/user-module/src/lib/account/subscriptions/user-subscription-details/user-subscription-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/user-subscription-details/user-subscription-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/user-subscriptions-list/user-subscriptions-list.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/user-subscriptions-list/user-subscriptions-list.component.html","../../../../libs/user-module/src/lib/account/user-invoice/user-invoice.component.ts","../../../../libs/user-module/src/lib/account/user-invoice/user-invoice.component.html","../../../../libs/user-module/src/lib/settings-tabs/communication-tab/communication-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/communication-tab/communication-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/others-tab/others-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/others-tab/others-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/security-tab/security-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/security-tab/security-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/settings-tabs.component.ts","../../../../libs/user-module/src/lib/settings-tabs/settings-tabs.component.html","../../../../libs/user-module/src/lib/support/support.component.ts","../../../../libs/user-module/src/lib/support/support.component.html","../../../../libs/user-module/src/lib/support/support-details/support-details.component.ts","../../../../libs/user-module/src/lib/support/support-details/support-details.component.html","../../../../libs/user-module/src/lib/user-profile/edit-portfolios/edit-portfolios.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-portfolios/edit-portfolios.component.html","../../../../libs/user-module/src/lib/user-profile/edit-project-modal/edit-project-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-project-modal/edit-project-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-qualifications-modal/edit-qualifications-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-qualifications-modal/edit-qualifications-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-recommendation-modal/edit-recommendation-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-recommendation-modal/edit-recommendation-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-skills-modal/edit-skills-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-skills-modal/edit-skills-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-social-links/edit-social-links.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-social-links/edit-social-links.component.html","../../../../libs/user-module/src/lib/user-profile/edit-user-profile-modal/edit-user-profile-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-user-profile-modal/edit-user-profile-modal.component.html","../../../../libs/user-module/src/lib/user-profile/user-about/user-about.component.ts","../../../../libs/user-module/src/lib/user-profile/user-about/user-about.component.html","../../../../libs/user-module/src/lib/user-profile/user-portfolios/user-portfolios.component.ts","../../../../libs/user-module/src/lib/user-profile/user-portfolios/user-portfolios.component.html","../../../../libs/user-module/src/lib/user-profile/user-projects/user-projects.component.ts","../../../../libs/user-module/src/lib/user-profile/user-projects/user-projects.component.html","../../../../libs/user-module/src/lib/user-profile/user-profile-page.component.ts","../../../../libs/user-module/src/lib/user-profile/user-profile-page.component.html","../../../../libs/user-module/src/lib/user-module.module.ts","../../../../libs/user-module/src/posiwise-user-module.ts"],"sourcesContent":["import { Component, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MenuItem } from 'primeng/api';\n\n@Component({\n selector: 'pw-user-account',\n templateUrl: './account.component.html',\n\n standalone: false\n})\nexport class AccountComponent {\n @ViewChild('menuItems', { static: true }) menu: MenuItem[];\n\n items: MenuItem[];\n\n activeItem: MenuItem;\n\n path: string;\n\n constructor(private readonly router: Router) {\n this.items = [\n {\n id: 'account',\n label: 'Account',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/account/details']\n },\n {\n id: 'subscription',\n label: 'Subscriptions',\n icon: 'fa fa-fw fa-file-invoice',\n routerLink: ['/account/subscriptions']\n },\n {\n id: 'invoice',\n label: 'Invoices',\n icon: 'fa fa-fw fa-tag',\n routerLink: ['/account/invoice']\n }\n ];\n this.activeItem =\n this.items[\n this.items.findIndex(\n record => record.routerLink[0] === this.router.url.split('?')[0]\n )\n ];\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n }\n}\n","<pw-tabs [items]=\"items\"></pw-tabs>\n","import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgxGpAutocompleteDirective } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, GeoService, ProfileService } from '@posiwise/common-services';\nimport { AppUser, Country, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { map, Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport { NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-account-details',\n templateUrl: './account-details.component.html',\n styleUrls: ['./account-details.component.scss'],\n\n standalone: false\n})\nexport class AccountDetailsComponent extends AppBaseComponent implements OnInit {\n @ViewChild('ngxPlaces') placesRef: NgxGpAutocompleteDirective;\n @ViewChild('password', { static: false }) passwordRef: ElementRef;\n\n emailForm: UntypedFormGroup;\n passwordForm: UntypedFormGroup;\n profileForm: UntypedFormGroup;\n\n image = 'assets/img/icons/male.png';\n\n countries$: Observable<Country[]>;\n\n states: Country[] = [];\n\n validatedEmail: string;\n\n toggleEmail: boolean;\n togglePassword: boolean;\n toggleNickName: boolean;\n\n passwordVerified = false;\n isCurrentPasswordValid = true;\n\n selectedState;\n\n user: User;\n\n slug: string;\n\n isLoaded = false;\n passwordBusyButton = false;\n slugBusyButton = false;\n emailBusyButton = false;\n validatePasswordBusyButton = false;\n profileBusyButton = false;\n\n showApiToken = false;\n showApiClientId = false;\n refreshingTokens = false;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly modalService: NgbModal,\n private readonly authService: AuthService,\n private readonly geoService: GeoService,\n private readonly profileService: ProfileService,\n injector: Injector\n ) {\n super(injector);\n this.getForms();\n }\n\n ngOnInit() {\n this.getUserProfile();\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n }\n\n handleAddressChange(_event) {\n this.profileForm.patchValue({\n latitude: _event.geometry.location.lat(),\n longitude: _event.geometry.location.lng(),\n location: _event.formatted_address\n });\n }\n\n private getUserProfile() {\n this.userService\n .getUserInfo()\n .subscribe(user => {\n if (user) {\n this.user = user;\n this.slug = user.slug;\n if (user?.user_avatar?.length) {\n this.image = user?.user_avatar[2]?.url;\n }\n let dobObject: NgbDateStruct;\n if (user.dob) {\n dobObject = {\n day: Number(user.dob.substring(8, 10)),\n month: Number(user.dob.substring(5, 7)),\n year: Number(user.dob.substring(0, 4))\n };\n }\n\n this.getRegion(user.country);\n\n // Map api_keys if present\n if (user && user.api_keys) {\n if (user.api_keys.api_user_token && !user.api_user_token) {\n this.user.api_user_token = user.api_keys.api_user_token;\n }\n if (user.api_keys.api_user_id && !user.api_user_id) {\n this.user.api_user_id = user.api_keys.api_user_id;\n }\n if (user.api_keys.api_hits !== undefined && user.api_hits === undefined) {\n this.user.api_hits = user.api_keys.api_hits;\n }\n if (\n user.api_keys.api_hits_max !== undefined &&\n user.api_hits_max === undefined\n ) {\n this.user.api_hits_max = user.api_keys.api_hits_max;\n }\n }\n\n this.profileForm.patchValue(this.user);\n this.profileForm.patchValue({ dob: dobObject });\n this.validatedEmail = this.user.email;\n }\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /**\n * Updates Email Address\n * this needs to be separate and requires the email to be validated from email before it's actually changed\n */\n onEmailFormSubmit() {\n this.emailBusyButton = true;\n const data = this.emailForm.value;\n data.confirmation_path = 'confirm-email';\n\n if (data && this.passwordVerified) {\n this.userService\n .updateEmail(data)\n .subscribe(() => {\n this.emailForm.reset();\n this.passwordVerified = false;\n this.toast.success(`A verification email has been sent to ${data.email}`, '', {\n positionClass: 'toast-top-center',\n timeOut: 100000\n });\n })\n .add(() => {\n this.emailBusyButton = false;\n });\n }\n }\n\n validatePassword() {\n this.validatePasswordBusyButton = true;\n const password = this.passwordRef.nativeElement.value;\n if (password) {\n this.userService\n .checkPassword({ password })\n .subscribe(data => {\n if (data?.status === StatusCodes.OK) {\n this.passwordVerified = true;\n } else {\n this.toast.error(data.error.message);\n this.passwordRef.nativeElement.value = '';\n }\n })\n .add(() => {\n this.validatePasswordBusyButton = false;\n });\n }\n }\n\n handleImageError(event: Event, fallbackPath): void {\n HelperService.handleImageFallbackPath(event, fallbackPath);\n }\n\n checkValidity() {\n const password = this.passwordRef.nativeElement.value;\n if (password.length > 5) {\n this.isCurrentPasswordValid = false;\n } else {\n this.isCurrentPasswordValid = true;\n }\n }\n\n onPasswordFormSubmit() {\n if (this.passwordForm.valid) {\n this.passwordBusyButton = true;\n const data = {\n password: this.passwordForm.value['newPassword'],\n password_confirmation: this.passwordForm.value['confirmPassword'],\n old_password: this.passwordForm.value['currentPassword']\n };\n this.userService\n .updatePassword(data)\n .subscribe(response => {\n if (response.status_code === 200) {\n this.toast.success(response.message, '', {\n positionClass: 'toast-top-center'\n });\n this.onTogglePassword();\n } else {\n this.toast.error(response.error.message);\n }\n this.passwordForm.reset();\n })\n .add(() => {\n this.passwordBusyButton = false;\n });\n }\n }\n\n @ValidateForm('profileForm')\n onProfileFormSubmit() {\n this.profileBusyButton = true;\n const data = { ...this.profileForm.value };\n data.dob = HelperService.dateFormat(this.profileForm.get('dob')?.value);\n if (data.location === '') {\n data.location = null;\n }\n Object.entries(data).forEach(([key, val]) => {\n if (val === '' || val === null) {\n delete data[key];\n }\n });\n this.profileService\n .updateUserProfile(data)\n .subscribe(() => {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n })\n .add(() => {\n this.profileBusyButton = false;\n });\n }\n\n onAvatarSave() {\n const data = {\n avatar: this.profileForm.get('avatar')?.value\n };\n this.profileService.updateUserProfile(data).subscribe(() => {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onUpdateSlug() {\n this.slugBusyButton = true;\n this.userService\n .updateSlug(this.slug)\n .subscribe(response => {\n this.toggleNickName = false;\n if (response?.status === StatusCodes.OK) {\n this.getUserProfile();\n } else {\n this.toast.error('User.Account.UserNameError');\n }\n })\n .add(() => {\n this.slugBusyButton = false;\n });\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.userService.addAvatar(file).subscribe(res => {\n this.image = res?.user_avatar[2]?.url;\n this.modalService.dismissAll();\n });\n }\n\n sendMailToResetPassword() {\n this.authService.forgotPassword(this.user.email, 'reset-password').subscribe(() => {\n this.toast.success(this.translation.translate('User.Account.Message.CheckEmail'));\n });\n }\n\n getRegion(countryId: number | string) {\n if (countryId) {\n this.geoService.getRegions(countryId).subscribe(response => {\n this.states = [{ code: 0, name: 'Select State' }, ...response];\n });\n }\n }\n\n private getForms() {\n this.emailForm = this.fb.group({\n email: ['', [Validators.required, Validators.email]]\n });\n\n this.passwordForm = this.fb.group(\n {\n currentPassword: ['', [Validators.required]],\n newPassword: ['', [Validators.required, Validators.minLength(8)]],\n confirmPassword: ['', [Validators.required, Validators.minLength(8)]]\n },\n {\n validators: this.passwordMatcher\n }\n );\n\n this.profileForm = AppUser.getForm(new AppUser({}));\n }\n\n private passwordMatcher(ac: AbstractControl): null {\n const password = ac.get('newPassword').value;\n const confirmPassword = ac.get('confirmPassword').value;\n if (password !== confirmPassword) {\n ac.get('confirmPassword').setErrors({ MatchPassword: true });\n }\n\n return null;\n }\n\n dataURLtoBlob(dataUrl: string) {\n const arr = dataUrl.split(',');\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n onToggleEmail() {\n this.emailForm.reset();\n this.passwordVerified = false;\n this.toggleEmail = false;\n }\n\n onTogglePassword() {\n this.passwordForm.reset();\n this.togglePassword = false;\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n shouldUserChangeEmail() {\n if (this.user.has_password) {\n this.toggleEmail = !this.toggleEmail;\n } else {\n swal.fire({\n text: `You don't have password, please reset your password first and then try changing email`,\n icon: 'warning'\n });\n }\n }\n\n toggleApiTokenVisibility() {\n this.showApiToken = !this.showApiToken;\n }\n\n toggleApiClientIdVisibility() {\n this.showApiClientId = !this.showApiClientId;\n }\n\n refreshApiTokens() {\n swal.fire({\n title: 'Are you sure?',\n text: this.translation.translate('User.Subscriptions.APICredentials.RefreshWarning'),\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#d33',\n cancelButtonColor: '#3085d6',\n confirmButtonText: 'Yes, refresh tokens!'\n }).then(result => {\n if (result.isConfirmed) {\n this.performTokenRefresh();\n }\n });\n }\n\n private performTokenRefresh() {\n this.refreshingTokens = true;\n this.userService\n .refreshUserApiTokens()\n .subscribe({\n next: response => {\n if (response && response.api_keys) {\n if (!this.user.api_keys) {\n this.user.api_keys = {};\n }\n if (response.api_keys.api_user_token) {\n this.user.api_keys.api_user_token = response.api_keys.api_user_token;\n }\n if (response.api_keys.api_user_id) {\n this.user.api_keys.api_user_id = response.api_keys.api_user_id;\n }\n if (response.api_keys.api_hits !== undefined) {\n this.user.api_keys.api_hits = response.api_keys.api_hits;\n }\n if (response.api_keys.api_hits_max !== undefined) {\n this.user.api_keys.api_hits_max = response.api_keys.api_hits_max;\n }\n }\n\n this.showApiToken = false;\n this.showApiClientId = false;\n this.getUserProfile();\n }\n })\n .add(() => {\n this.refreshingTokens = false;\n });\n }\n}\n","<div class=\"w-100 text-center\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row d-flex flex-row\">\n <div class=\"col-md-8 order-md-first order-sm-last\">\n <section id=\"email-section\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-8 col-lg-8\">\n <h2>{{ 'User.Account.RegisteredEmail' | transloco }}</h2>\n <!-- Email Form -->\n <section id=\"email-form\">\n <form [formGroup]=\"emailForm\"\n (ngSubmit)=\"onEmailFormSubmit()\">\n <!-- Email Address -->\n <div class=\"mt-0\">\n <label class=\"me-3\" id=\"account-primary-email-label\">{{ 'User.Account.PrimaryEmail' | transloco }}:\n </label>\n <strong>{{ validatedEmail }}</strong>\n <div class=\"mt-1\">\n <ng-container *ngIf=\"!toggleEmail\">\n <a class=\"btn btn-raised btn-outline-primary\"\n aria-label=\"Navigate to Target\"\n (click)=\"shouldUserChangeEmail()\">\n {{ 'User.Account.ChangeEmail' | transloco }}</a>\n </ng-container>\n <ng-container *ngIf=\"toggleEmail\">\n <div class=\"row\">\n <div class=\"clearfix\"></div>\n <div class=\"col-12 mb-3\">\n <input type=\"password\"\n class=\"form-control\"\n id=\"account-email-current-password\"\n name=\"currentPassword\"\n #password\n *ngIf=\"!passwordVerified\"\n placeholder=\"Current Password\"\n autocomplete=\"current-password\"\n (keyup)=\"checkValidity()\" />\n <input type=\"text\"\n class=\"form-control\"\n id=\"account-new-email\"\n name=\"newEmail\"\n *ngIf=\"passwordVerified\"\n placeholder=\"New Email\"\n autocomplete=\"email\"\n formControlName=\"email\" />\n </div>\n <div class=\"col-12\">\n <a *ngIf=\"toggleEmail\"\n class=\"btn btn-raised btn-outline-default my-2 me-2\"\n aria-label=\"Navigate to Target\"\n (click)=\"onToggleEmail()\">{{ 'Button.Cancel' | transloco }}</a>\n <button class=\"btn btn-raised btn-primary\"\n type=\"submit\"\n [buttonBusy]=\"validatePasswordBusyButton\"\n (click)=\"validatePassword()\"\n *ngIf=\"!passwordVerified\"\n [disabled]=\"isCurrentPasswordValid\">\n {{ 'User.Account.Validate' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-raised btn-primary\"\n [buttonBusy]=\"emailBusyButton\"\n *ngIf=\"passwordVerified\">\n {{\n 'User.Account.SendVerification' | transloco\n }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <section id=\"slug\"\n class=\"mb-2 mt-3\">\n <div>\n <label class=\"me-3\" id=\"account-nickname-label\">{{ 'User.Account.NickName' | transloco }}:\n </label>\n <strong>{{ slug }}</strong>\n <div>\n <ng-container *ngIf=\"!toggleNickName\">\n <a class=\"btn btn-raised btn-outline-primary me-2\"\n aria-label=\"Navigate to Target\"\n (click)=\"toggleNickName = true\">\n {{ 'User.Account.ChangeNickname' | transloco }}</a>\n </ng-container>\n <ng-container *ngIf=\"toggleNickName\">\n <div class=\"mb-3\">\n <input type=\"text\"\n id=\"account-nickname\"\n name=\"nickname\"\n class=\"form-control slug-input\"\n aria-labelledby=\"account-nickname-label\"\n [(ngModel)]=\"slug\"\n [ngModelOptions]=\"{ standalone: true }\" />\n </div>\n <div>\n <button type=\"button\"\n class=\"btn btn-raised btn-outline-default\"\n (click)=\"toggleNickName = false\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-raised btn-primary ms-2\"\n [buttonBusy]=\"slugBusyButton\"\n [disabled]=\"slug?.length < 2\"\n (click)=\"onUpdateSlug()\">\n {{ 'User.Account.UpdateNickname' | transloco }}\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n </section>\n </form>\n </section>\n </div>\n </div>\n <section id=\"password-change\"\n class=\"mt-1\">\n <form [formGroup]=\"passwordForm\"\n (ngSubmit)=\"onPasswordFormSubmit()\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-8 col-lg-8 mt-4\">\n <h2>{{ 'User.Account.ChangePassword' | transloco }}</h2>\n </div>\n <ng-container *ngIf=\"!user?.has_password\">\n <div class=\"text-danger mx-3 my-2\">\n <div>\n You don't have a password set, click on\n <em>{{ 'User.Account.ChangePassword' | transloco }}</em>.\n </div>\n <div>{{ 'User.Profile.PictureMessage' | transloco }}</div>\n </div>\n </ng-container>\n <div class=\"col-sm-12 col-md-8 col-lg-8\"\n *ngIf=\"user?.has_password\">\n <ng-container *ngIf=\"togglePassword\">\n <div class=\"mb-3\">\n <label for=\"account-current-password\">{{ 'User.Account.CurrentPassword' | transloco }}</label>\n <input type=\"password\"\n id=\"account-current-password\"\n class=\"form-control\"\n formControlName=\"currentPassword\"\n autocomplete=\"current-password\" name=\"input_currentPassword_4\"/>\n <small class=\"form-text text-muted danger\"\n *ngIf=\"\n !passwordForm.get('currentPassword').valid &&\n (passwordForm.get('currentPassword').dirty ||\n passwordForm.get('currentPassword').touched)\n \">\n {{ 'User.Account.Required' | transloco }}\n </small>\n </div>\n <div class=\"mb-3\">\n <label for=\"account-new-password\">{{ 'User.Account.NewPassword' | transloco }}</label>\n <input type=\"password\"\n id=\"account-new-password\"\n class=\"form-control\"\n formControlName=\"newPassword\"\n autocomplete=\"new-password\" name=\"input_newPassword_5\"/>\n <small class=\"form-text text-muted danger\"\n *ngIf=\"\n !passwordForm.get('newPassword').valid &&\n (passwordForm.get('newPassword').dirty ||\n passwordForm.get('newPassword').touched)\n \">{{ 'User.Account.Validation.StrongPassword' | transloco }}\n </small>\n </div>\n <div class=\"mb-3\">\n <label for=\"account-confirm-password\">{{\n 'User.Account.ConfirmPassword' | transloco\n }}</label>\n <input type=\"password\"\n id=\"account-confirm-password\"\n class=\"form-control\"\n formControlName=\"confirmPassword\"\n autocomplete=\"new-password\" name=\"input_confirmPassword_6\"/>\n <div class=\"text-danger\"\n *ngIf=\"\n passwordForm.get('confirmPassword').touched &&\n passwordForm.get('confirmPassword').errors\n ?.MatchPassword\n \">\n {{ 'User.Account.Validation.PasswordsMatch' | transloco }}\n </div>\n </div>\n <div class=\"mb-3\">\n <a class=\"btn btn-raised btn-outline-default\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n *ngIf=\"togglePassword\"\n (click)=\"onTogglePassword()\">\n {{ 'Button.Cancel' | transloco }}</a>\n <button class=\"btn btn-raised btn-primary ms-2\"\n [buttonBusy]=\"passwordBusyButton\"\n [disabled]=\"!passwordForm.valid\">\n {{ 'User.Account.UpdatePassword' | transloco }}\n </button>\n </div>\n </ng-container>\n <div>\n <a class=\"btn btn-raised btn-outline-primary\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n *ngIf=\"!togglePassword\"\n (click)=\"togglePassword = !togglePassword\">\n {{ 'User.Account.ChangePassword' | transloco }}</a>\n </div>\n </div>\n <div class=\"col-sm-12 col-md-8 col-lg-8\"\n *ngIf=\"!user?.has_password\">\n <a class=\"btn btn-raised btn-primary me-2\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n (click)=\"sendMailToResetPassword()\">\n {{ 'User.Account.ChangePassword' | transloco }}</a>\n </div>\n </div>\n </form>\n </section>\n <ng-container *ngIf=\"user?.api_keys?.api_hits_max > 0\">\n <section id=\"api-credentials\"\n class=\"mt-4\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h3>{{ 'User.Subscriptions.APICredentials.Title' | transloco }}</h3>\n <p>\n {{ 'User.Subscriptions.APICredentials.Description' | transloco }}\n </p>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"account-api-token\">{{ 'User.Subscriptions.APICredentials.AccessToken' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"account-api-token\"\n name=\"api_token\"\n class=\"form-control\"\n [value]=\"showApiToken ? user?.api_keys?.api_user_token || ('User.Subscriptions.APICredentials.NoTokenAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiTokenVisibility()\">\n {{ showApiToken ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"account-api-client-id\">{{ 'User.Subscriptions.APICredentials.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"account-api-client-id\"\n name=\"api_client_id\"\n class=\"form-control\"\n [value]=\"showApiClientId ? user?.api_keys?.api_user_id || ('User.Subscriptions.APICredentials.NoClientIdAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiClientIdVisibility()\">\n {{ showApiClientId ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-3\">\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\"\n class=\"btn btn-warning\"\n (click)=\"refreshApiTokens()\"\n [disabled]=\"refreshingTokens\">\n <i class=\"fas fa-sync-alt me-2\" [class.fa-spin]=\"refreshingTokens\"></i>\n {{ refreshingTokens ? ('User.Subscriptions.APICredentials.Refreshing' | transloco) : ('User.Subscriptions.APICredentials.RefreshTokens' | transloco) }}\n </button>\n\n <div class=\"d-flex align-items-center gap-2\">\n <ng-container *ngIf=\"user?.api_keys?.api_hits !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHits' | transloco }}:</span>\n <span class=\"fw-bold\">{{ user.api_keys.api_hits | number }}</span>\n </ng-container>\n\n <ng-container *ngIf=\"user?.api_keys?.api_hits_max !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHitsMax' | transloco }}:</span>\n <span class=\"fw-bold\">{{ user.api_keys.api_hits_max | number }}</span>\n </ng-container>\n\n <!-- Show utilization percentage when both values exist -->\n <ng-container *ngIf=\"user?.api_keys?.api_hits !== null && user?.api_keys?.api_hits_max !== null && user?.api_keys?.api_hits_max > 0\">\n <span class=\"text-muted ms-2\">(</span>\n <span class=\"fw-bold\" [ngClass]=\"{\n 'text-success': (user.api_keys.api_hits / user.api_keys.api_hits_max) <= 0.8,\n 'text-warning': (user.api_keys.api_hits / user.api_keys.api_hits_max) > 0.8 && (user.api_keys.api_hits / user.api_keys.api_hits_max) <= 0.9,\n 'text-danger': (user.api_keys.api_hits / user.api_keys.api_hits_max) > 0.9\n }\">\n {{ (user.api_keys.api_hits / user.api_keys.api_hits_max * 100) | number:'1.0-0' }}% consumed\n </span>\n <span class=\"text-muted\">)</span>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </section>\n </ng-container>\n </section>\n </div>\n <!-- Avatar -->\n <div class=\"mt-4 mt-sm-0 col-md-4 text-center order-md-last order-sm-first\">\n <h2>{{ 'User.Profile.Avatar' | transloco }}</h2>\n <div class=\"text-center mt-1\">\n <div class=\"image-container\">\n <img [src]=\"image\"\n width=\"150\"\n height=\"150\"\n class=\"image rounded-circle\"\n alt=\"User Male\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\" />\n <div class=\"overlay\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">{{ 'User.Profile.Change' | transloco }}</div>\n </div>\n </div>\n <h4 class=\"mt-2\">{{ user?.first_name }} {{ user?.last_name }}</h4>\n <a aria-label=\"Navigate to Target\"\n class=\"d-inline-block mb-2\"\n (click)=\"openModal(content)\">\n {{ 'User.Profile.EditAvatar' | transloco }}</a>\n <br />\n </div>\n </div>\n</div>\n<br />\n<section id=\"user-profile\"\n class=\"mt-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <form [formGroup]=\"profileForm\"\n (ngSubmit)=\"onProfileFormSubmit()\">\n <h2>{{ 'User.Profile.UserProfile' | transloco }}</h2>\n <div class=\"row mt-3\">\n <div class=\"col-sm-12 col-md-6 col-lg-6\">\n <pw-input-container label=\"First Name\"\n name=\"first_name\"\n controlId=\"account-first_name\"\n errorMsg=\"Please enter first Name\">\n <input type=\"text\"\n id=\"account-first_name\"\n class=\"form-control\"\n formControlName=\"first_name\"\n autocomplete=\"given-name\" name=\"input_first_name_9\"/>\n </pw-input-container>\n <pw-input-container label=\"Preferred name\"\n name=\"preferred_name\"\n controlId=\"account-preferred_name\"\n errorMsg=\"Please enter preferred Name\">\n <input type=\"text\"\n id=\"account-preferred_name\"\n class=\"form-control\"\n formControlName=\"preferred_name\"\n autocomplete=\"username\" name=\"input_preferred_name_10\"/>\n </pw-input-container>\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container label=\"Country\"\n name=\"country\"\n controlId=\"account-country\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please select a country\">\n <p-select\n [attr.aria-labelledby]=\"'account-country-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country\"\n (onChange)=\"getRegion($event.value)\"\n placeholder=\"{{ 'User.Profile.SelectCountry' | transloco }}\">\n </p-select>\n </pw-input-container>\n </ng-container>\n <pw-input-container label=\"Province\"\n name=\"province\"\n controlId=\"account-province\"\n errorMsg=\"Please enter province\">\n <input type=\"text\"\n id=\"account-province\"\n class=\"form-control\"\n formControlName=\"province\"\n autocomplete=\"postal-code\" name=\"input_province_11\"/>\n </pw-input-container>\n <pw-input-container label=\"Website Url\"\n name=\"website_url\"\n controlId=\"account-website_url\"\n errorMsg=\"Please enter Website\">\n <input type=\"text\"\n id=\"account-website_url\"\n class=\"form-control\"\n formControlName=\"website_url\"\n autocomplete=\"url\" name=\"input_website_url_12\"/>\n </pw-input-container>\n </div>\n <div class=\"col-sm-12 col-md-6 col-lg-6\">\n <pw-input-container label=\"Last Name\"\n name=\"last_name\"\n controlId=\"account-last_name\"\n errorMsg=\"Please enter last Name\">\n <input type=\"text\"\n id=\"account-last_name\"\n class=\"form-control\"\n formControlName=\"last_name\"\n autocomplete=\"family-name\" name=\"input_last_name_13\"/>\n </pw-input-container>\n <pw-input-container label=\"Date of Birth\"\n name=\"dob\"\n controlId=\"account-dob\"\n errorMsg=\"Please enter date of birth\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"account-dob\"\n name=\"dob\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2018 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n type=\"button\"\n id=\"account-dob-trigger\"\n aria-label=\"Open date picker for date of birth\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n <pw-input-container label=\"State\"\n name=\"state\"\n controlId=\"account-state\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please select a state\">\n <p-select\n [attr.aria-labelledby]=\"'account-state-label'\"\n [options]=\"states\"\n [(ngModel)]=\"selectedState\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"state\"\n [placeholder]=\"'User.Profile.SelectState' | transloco\">\n </p-select>\n\n </pw-input-container>\n <!-- Location -->\n <pw-input-container label=\"Location\"\n name=\"location\"\n controlId=\"account-location\"\n [useAriaLabelledbyOnly]=\"true\">\n <input ngx-gp-autocomplete\n id=\"account-location\"\n name=\"location\"\n class=\"form-control\"\n [attr.aria-labelledby]=\"'account-location-label'\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n <pw-input-container label=\"Phone Number\"\n name=\"phone_number\"\n controlId=\"account-phone_number\"\n errorMsg=\"Please enter phone number\">\n <input type=\"text\"\n id=\"account-phone_number\"\n class=\"form-control\"\n formControlName=\"phone_number\"\n autocomplete=\"tel\" name=\"input_phone_number_16\"/>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end\">\n <div class=\"mb-3\">\n <button class=\"btn btn-raised btn-primary\" [buttonBusy]=\"profileBusyButton\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</section>\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ 'User.Profile.ProfilePicture' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProductService } from '@posiwise/common-services';\nimport { Product, PRODUCT_CATEGORY, Subscription, User } from '@posiwise/common-utilities';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\n\n@Component({\n selector: 'pw-add-subscription',\n templateUrl: './add-subscription.component.html',\n styleUrls: ['./add-subscription.component.scss'],\n\n standalone: false\n})\nexport class AddSubscriptionComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private readonly singleProducts = [];\n\n private readonly enterpriseProducts = [];\n\n form: UntypedFormGroup;\n\n busy: boolean;\n isLoaded: boolean;\n selectedProduct: boolean;\n isPurchaseAttempted: boolean;\n userLoggedIn: boolean;\n\n availableProducts: Product[] = [];\n products: Product[];\n\n user: User;\n\n unitError: string;\n\n category = PRODUCT_CATEGORY;\n\n units = 1;\n\n subscribedPermissionKeys = [];\n\n currentSubscription: Subscription;\n\n subscriptionId: number;\n\n constructor(\n private readonly productService: ProductService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.subscriptionId = Number(this.route.snapshot.queryParamMap.get('subscription_id'));\n this.getProducts();\n }\n\n private getProducts() {\n // Gets All the products\n this.productService\n .getProductList({}, this.subscriptionId, { only_relevant: true })\n .subscribe((response: Subscription) => {\n this.products = response.products || [];\n if (this.products?.length) {\n this.products = this.products.filter(x => x.active);\n }\n\n this.isLoaded = true;\n this.userStore().subscribe(user => {\n this.user = user;\n if (this.user) {\n const subs: Subscription[] = cloneDeep(this.user.subscriptions);\n subs.forEach(subscription => {\n subscription.products.forEach(product => {\n const prod = this.products.find(x => x.id === product.id);\n if (prod) {\n prod['is_subscribed'] = true;\n prod['purchased_units'] = product?.purchased_units;\n }\n });\n });\n\n this.subscribedPermissionKeys = Array.from(\n new Set(\n this.user.subscriptions\n .flatMap(x => x.products)\n .map(product => product.permission_key)\n )\n );\n\n // show category only if we have products\n const prodPermissionKeys = this.products.map(p => p.permission_key);\n this.subscribedPermissionKeys = this.subscribedPermissionKeys.filter(x =>\n prodPermissionKeys.includes(x)\n );\n\n // Filtering the product with the existing permission_key\n this.availableProducts = sortBy(\n this.getSingleCategoryProducts(),\n 'is_subscribed'\n );\n }\n });\n });\n }\n\n private getSingleCategoryProducts(category = this.subscribedPermissionKeys[0]) {\n return this.products.filter(x => category === x.permission_key);\n }\n\n onChangeCategory(category) {\n this.availableProducts = this.getSingleCategoryProducts(category);\n this.availableProducts = sortBy(this.availableProducts, 'is_subscribed');\n }\n\n onSelection(product) {\n this.router.navigate([\n `account/subscriptions/upgrade/${this.subscriptionId}/${product.id}`\n ]);\n }\n\n trackByProduct(_index: number, item: Product) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div *ngIf=\"isLoaded && !selectedProduct\"\n class=\"mt-4\">\n <a aria-label=\"Navigate to Target\"\n [routerLink]=\"['/account/subscriptions']\"\n class=\"previous float-start\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n\n <div class=\"d-flex flex-wrap justify-content-center\">\n <div class=\"toggle\"\n *ngFor=\"let item of subscribedPermissionKeys; let i = index\">\n <input type=\"radio\"\n name=\"sizeBy\"\n value=\"option{{ i + 1 }}\"\n id=\"option{{ i + 1 }}\"\n (change)=\"onChangeCategory(item)\"\n [checked]=\"i === 0\" />\n <label for=\"option{{ i + 1 }}\">{{ item }}</label>\n </div>\n </div>\n\n <ul class=\"row animated fadeIn d-flex\">\n <li *ngFor=\"let product of availableProducts; trackBy: trackByProduct\"\n class=\"col-sm-12 col-md-6 col-xl-4 my-3 mt-sm-2\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h4 class=\"text-bold-500 primary mb-3\">{{ product.name }}</h4>\n <ng-template [ngIf]=\"product.price_per_unit\"\n [ngIfElse]=\"freeProductRef\">\n <h5 *ngIf=\"product?.purchased_units\"\n class=\"my-3 branding-color-1\">\n Currently {{ product.currency | currencySymbol\n }}{{\n (\n (product.purchased_units * product.price_per_unit) /\n 100\n ) | number:'1.2-2'\n }}&nbsp;/&nbsp;{{ product.billing_frequency }}\n </h5>\n <h5 class=\"my-3\">\n Min\n {{product.min_units &gt; 1 ? (product.min_units + ' Seats'): (product.min_units + ' Seat')}}\n - {{ product.currency | currencySymbol\n }}{{\n ((product.min_units * product.price_per_unit) / 100) | number:'1.2-2'\n }}&nbsp;/&nbsp;{{ product.billing_frequency }}\n </h5>\n <h5 class=\"d-inline-block text-bold-600 mb-2\">\n {{ product.currency | currencySymbol\n }}{{ (product.price_per_unit / 100) | number:'1.2-2' }}&nbsp;/&nbsp;{{\n product.billing_frequency\n }}&nbsp;/&nbsp;seat\n </h5>\n </ng-template>\n <ng-template #freeProductRef>\n <div class=\"d-inline-block text-bold-600 mb-2\">Free</div>\n </ng-template>\n <p class=\"mb-2\"\n [innerHTML]=\"product?.description\"></p>\n </div>\n <div class=\"card-footer px-3\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onSelection(product)\"\n *ngIf=\"\n !product.is_subscribed &&\n !product.trial_subscription &&\n product.stripe_plan_id\n \"\n class=\"card-btn btn btn-raised me-1 btn-primary btn-sm\">\n {{ 'User.Subscriptions.Subscribe' | transloco }}\n </a>\n\n <div class=\"mt-3\"\n *ngIf=\"\n !product.is_subscribed &&\n product.trial_subscription &&\n product.stripe_plan_id\n \">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onSelection(product)\"\n class=\"card-btn btn btn-raised me-1 btn-primary btn-sm\">\n {{ 'Button.Upgrade' | transloco }}\n </a>\n <span class=\"badge bg-secondary position-absolute trial-badge\">{{ 'User.Subscriptions.Trial' | transloco }}\n </span>\n </div>\n\n <span *ngIf=\"\n product.is_subscribed &&\n !product.trial_subscription &&\n !product.is_deleted\n \"\n class=\"card-btn badge bg-default text-white\">\n {{ 'User.Subscriptions.Subscribed' | transloco }}\n </span>\n\n <span *ngIf=\"\n product.is_subscribed &&\n product.trial_subscription &&\n product.price_per_unit === 0 &&\n !product.is_deleted &&\n !product.stripe_plan_id\n \"\n class=\"card-btn badge bg-default text-white\">\n Free\n </span>\n\n <span *ngIf=\"product.is_deleted\"\n class=\"card-btn badge bg-default text-white\">\n {{ 'User.Subscriptions.UnsubscribedButActive' | transloco }}\n </span>\n </div>\n </div>\n </div>\n </li>\n </ul>\n <div class=\"row\">\n <div class=\"col-12\">\n <pw-no-data [withImage]=\"true\" message=\"No products available under this category.\"\n *ngIf=\"availableProducts && availableProducts.length === 0\">\n </pw-no-data>\n </div>\n </div>\n</div>\n","/**\n * @summary Shows the saved credit card details of the user\n * @author anikets43\n *\n * Created at : 2020-02-08 16:56:18\n * Last modified : 2020-02-08 17:06:29\n */\n\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pw-saved-card-details',\n templateUrl: './saved-card-details.component.html',\n styleUrls: ['./saved-card-details.component.scss'],\n\n standalone: false\n})\nexport class SavedCardDetailsComponent {\n /**\n * Credit Card details like brand, exp_month, exp_year, card_number\n */\n @Input() data: {\n brand?: string;\n exp_month?: string;\n exp_year?: string;\n card_number?: string;\n };\n\n /**\n * boolean: change payment option\n */\n @Input() isChangePayment: boolean;\n\n @Input() showNewCard: boolean;\n\n /**\n * Emitter: on payment change request\n */\n @Output() changeEvent: EventEmitter<boolean> = new EventEmitter();\n\n OnPaymentChange(value) {\n this.changeEvent.emit(value);\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\"\n *ngIf=\"!showNewCard\">\n <h4 class=\"title\">Saved Card</h4>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Type:</div>\n <div class=\"summary-right\">{{ data?.brand }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Expiry:</div>\n <div class=\"summary-right\">{{ data.exp_month }} / {{ data.exp_year }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Card Number:</div>\n <div class=\"summary-right\">{{ data?.card_number }}</div>\n </div>\n </div>\n\n <div class=\"col-12 mt-3\"\n *ngIf=\"!showNewCard\">\n <button type=\"button\"\n class=\"btn btn-outline-primary btn-sm\"\n aria-label=\"Change Payment Option\"\n (click)=\"OnPaymentChange(true)\">\n Change Payment Option\n </button>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { SubscriptionService } from '@posiwise/common-services';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\n\nimport { forkJoin, from, Observable } from 'rxjs';\nimport { distinct } from 'rxjs/operators';\n\nimport { CredentialData } from '../../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-subscription-credential',\n templateUrl: './subscription-credential.component.html',\n styleUrls: ['./subscription-credential.component.scss'],\n\n standalone: false\n})\nexport class SubscriptionCredentialComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private credentialToEdit;\n\n @ViewChild('passwordValidationModalForRevealCredential', { static: false })\n passwordValidationModalForRevealCredential: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForEditCredential', { static: false })\n passwordValidationModalForEditCredential: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForAddCredential', { static: false })\n passwordValidationModalForAddCredential: PasswordValidationComponent;\n\n form: UntypedFormGroup;\n\n data = [];\n\n subscriptionId: number;\n totalRecords: number;\n\n allSubscriptionCredentials: CredentialData[];\n availableCredentials: CredentialData[] = [];\n credentialsSelect: CredentialData[];\n updatedCredential: CredentialData;\n uniqueCredential = [];\n\n isEdit = false;\n submitted = false;\n buttonBusy = false;\n isLoaded = false;\n\n credentials = [];\n\n showForm = false;\n\n credentialSaved: string;\n credentialName: string;\n\n credentialToReveal;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly subscriptionService: SubscriptionService,\n injector: Injector\n ) {\n super(injector);\n this.form = this.fb.group({\n credentials: this.fb.array([])\n });\n }\n\n ngOnInit() {\n this.route.params.subscribe(params => {\n this.subscriptionId = params['subscriptionId'];\n if (this.subscriptionId) {\n this.getAllCredentials();\n }\n });\n }\n\n get credentialsGroup() {\n return this.form.get('credentials') as UntypedFormArray;\n }\n\n /** Function to get all credentials */\n private getAllCredentials() {\n this.allSubscriptionCredentials = [];\n this.subscriptionService\n .getAllSubscriptionCredentials(this.subscriptionId)\n .subscribe(response => {\n this.allSubscriptionCredentials = response.subscription_credentials;\n this.totalRecords = response.object_count;\n this.getAllAvailableCredentials();\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /** Function to get available Credentials */\n private getAllAvailableCredentials() {\n this.credentials = [];\n this.uniqueCredential = [];\n this.subscriptionService.getAllCredentials().subscribe(response => {\n this.availableCredentials = response.credentials;\n from(this.availableCredentials)\n .pipe(distinct(c => c.name))\n .subscribe(res => {\n this.uniqueCredential.push(res);\n });\n this.uniqueCredential.forEach(credential => {\n const subscriptionCredentialGroup = { credential_name: '', credentials: [] };\n this.allSubscriptionCredentials.forEach(subscriptionCredential => {\n if (credential.name === subscriptionCredential.name) {\n subscriptionCredentialGroup['credentials'].push(subscriptionCredential);\n }\n });\n if (subscriptionCredentialGroup['credentials'].length > 0) {\n subscriptionCredentialGroup['credential_name'] = credential.name;\n this.credentials.push(subscriptionCredentialGroup);\n }\n });\n });\n }\n\n /** Function to get credential on select */\n selectedOption(event) {\n this.credentialsGroup.clear();\n const credentialName = this.isEdit ? event : event.value;\n this.credentialsSelect = this.availableCredentials.filter(x => x.name === credentialName);\n this.credentialsSelect.forEach(adminCredential => {\n const subscriptionCredential = this.allSubscriptionCredentials.find(\n credential => credential?.credential_id === adminCredential?.id\n );\n adminCredential.value = subscriptionCredential?.value;\n adminCredential.subscription_credential_id = subscriptionCredential?.id;\n adminCredential.credential_id = subscriptionCredential?.credential_id;\n this.credentialsGroup.push(\n this.fb.group({\n subscription_id: [0, [Validators.required]],\n credential_id: [adminCredential?.id],\n field: [adminCredential?.field],\n description: [adminCredential?.description],\n value: [\n adminCredential?.value,\n adminCredential?.is_required ? [Validators.required] : []\n ],\n id: [subscriptionCredential?.id]\n })\n );\n });\n }\n\n /** Function to post credentials */\n saveCredentials() {\n this.submitted = true;\n this.buttonBusy = true;\n const subscription$: Observable<Subscription>[] = [];\n const isValid = this.form.value.credentials.every(\n (_x, i) => this.credentialsGroup.controls[i].valid === true\n );\n if (isValid) {\n this.form.value.credentials.forEach(credential => {\n if (credential?.value) {\n const data = {\n subscription_id: this.subscriptionId,\n credential_id: credential.credential_id,\n value: credential.value\n };\n const sub$ = credential?.id\n ? this.subscriptionService.editSubscriptionCredential(credential.id, data)\n : this.subscriptionService.postSubscriptionCredential(data);\n\n subscription$.push(sub$);\n }\n });\n\n forkJoin(subscription$)\n .subscribe(response => {\n if (response?.length) {\n this.toast.success(\n this.translation.translate(\n 'User.Subscriptions.SubscriptionCredentials.UpdateMessage'\n )\n );\n } else {\n this.toast.error(`Something went wrong while saving credentials`);\n }\n })\n .add(() => {\n this.submitted = false;\n this.buttonBusy = false;\n });\n } else {\n this.buttonBusy = false;\n }\n }\n\n revealCredentials(credential) {\n this.credentialToReveal = credential.credential_name;\n this.passwordValidationModalForRevealCredential.open();\n }\n\n hideCredentials() {\n this.credentialName = '';\n }\n\n showCredentials() {\n this.credentialName = this.credentialToReveal;\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n onCancel() {\n this.getAllCredentials();\n this.submitted = false;\n this.form.reset();\n this.showForm = false;\n this.isEdit = false;\n this.credentialsSelect = [];\n this.data = [];\n this.credentialSaved = '';\n }\n\n // password popup for add credential\n openCredentialsForAdd() {\n this.passwordValidationModalForAddCredential.open();\n }\n\n // password popup for edit credential\n openCredentialsForEdit(credential) {\n this.credentialToEdit = credential;\n this.passwordValidationModalForEditCredential.open();\n }\n\n editCredentials() {\n this.showForm = true;\n this.isEdit = true;\n this.selectedOption(this.credentialToEdit);\n }\n\n showEditForm() {\n this.data = [];\n this.isEdit = false;\n this.showForm = true;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\"\n *ngIf=\"showForm\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ data.length ? 'Edit' : 'Create new' }} Credential</span>\n </h3>\n </div>\n</div>\n<ng-container *ngIf=\"showForm\">\n <div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form>\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-4\"\n *ngIf=\"!isEdit && showForm\">\n <div class=\"mb-3\">\n <label id=\"subscription-credential-select-label\">Credential <span class=\"text-danger required-icon\">*</span> </label>\n <p-select\n [attr.aria-labelledby]=\"'subscription-credential-select-label'\"\n [options]=\"uniqueCredential\"\n [placeholder]=\"'Select credential'\"\n optionLabel=\"name\"\n optionValue=\"name\"\n (onChange)=\"selectedOption($event)\">\n </p-select>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\"\n *ngIf=\"credentialsSelect?.length\">\n <div class=\"card pb-2 pt-2 overflow-visible\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <form [formGroup]=\"form\"\n novalidate\n (ngSubmit)=\"saveCredentials()\">\n <div formArrayName=\"credentials\">\n <div *ngFor=\"\n let credential of credentialsGroup.controls;\n let i = index\n \">\n <div [formGroupName]=\"i\">\n <div class=\"mb-3\">\n <pw-input-container label=\"{{\n credential.get('field').value\n }}\"\n [class.info-circle]=\"\n credential.get('description').value\n \"\n name=\"value\"\n errorMsg=\"Please enter value\">\n <span *ngIf=\"\n credential.get('description')\n .value\n \"\n class=\"tooltiptext gradient-custom-branding\">{{\n credential.get('description')\n .value\n }}</span>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"value\"\n [ngClass]=\"{\n 'is-invalid':\n submitted &&\n credential.get('value')\n .invalid\n }\" id=\"input_value_1\" name=\"input_value_1\"/>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end mt-3\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Back' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!showForm\">\n <div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-3\">Credentials</h2>\n </div>\n <div class=\"col-12 col-md-12 text-end\">\n <button class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openCredentialsForAdd()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add Credential' }}\n </button>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row my-4\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3 credential-cards\"\n *ngFor=\"let credential of credentials\">\n <div class=\"card\">\n <h2 class=\"credential-field mt-3\">{{ credential.credential_name }}</h2>\n <div class=\"card-content\"\n *ngFor=\"let subscriptionCredential of credential.credentials\">\n <div class=\"card-header\">\n <div>\n <strong class=\"d-block\">{{ subscriptionCredential.field }}:</strong>\n <input class=\"credential-value\"\n [type]=\"\n credentialName === credential.credential_name\n ? 'text'\n : 'password'\n \"\n readonly\n #input\n [value]=\"subscriptionCredential?.value\" id=\"input_text_5520\" name=\"input_text_5520\" />\n </div>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <button class=\"btn btn-outline-primary me-2\"\n *ngIf=\"credentialName !== credential.credential_name\"\n (click)=\"revealCredentials(credential)\">\n {{\n 'User.Subscriptions.SubscriptionCredentials.RevealCredential'\n | transloco\n }}\n </button>\n <button class=\"btn btn-outline-primary me-2\"\n *ngIf=\"credentialName === credential.credential_name\"\n (click)=\"hideCredentials()\">\n {{\n 'User.Subscriptions.SubscriptionCredentials.HideCredential'\n | transloco\n }}\n </button>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Credential\"\n (click)=\"openCredentialsForEdit(credential.credential_name)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"allSubscriptionCredentials?.length === 0 && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'User.Subscriptions.SubscriptionCredentials.NoDataMessage' | transloco\">\n </pw-no-data>\n </div>\n</ng-container>\n<!-- password validation modal for reveal Credential -->\n<pw-password-validation #passwordValidationModalForRevealCredential\n (successEvent)=\"showCredentials()\">\n</pw-password-validation>\n<!-- password validation modal for Edit Credential -->\n<pw-password-validation #passwordValidationModalForEditCredential\n (successEvent)=\"editCredentials()\">\n</pw-password-validation>\n<!-- password validation modal for Add Credential -->\n<pw-password-validation #passwordValidationModalForAddCredential\n (successEvent)=\"showEditForm()\">\n</pw-password-validation>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport {\n ProductService,\n ScriptLoaderService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { forkJoin } from 'rxjs';\n\nimport { CardDetails, StripeCardResponse } from '../../../shared/interface/user-module.interface';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare let Stripe: {\n setPublishableKey(key: string): void;\n card: {\n createToken(\n card: CardDetails,\n callback: (status: number, response: StripeCardResponse) => void\n ): void;\n };\n};\n\n@Component({\n selector: 'pw-update-payment-details',\n templateUrl: './update-payment-details.component.html',\n styleUrls: ['./update-payment-details.component.scss'],\n\n standalone: false\n})\nexport class UpdatePaymentDetailsComponent extends AppBaseComponent implements OnInit {\n form: UntypedFormGroup;\n\n years = [];\n months = [];\n\n busy: boolean;\n isChangePayment: boolean;\n\n cardDetails: CardDetails[];\n\n loading = true;\n\n errorMessage: string;\n stripePublishKey: string;\n errorMsg: string;\n\n subscriptionId: number;\n productId: number;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly scriptLoader: ScriptLoaderService,\n private readonly productService: ProductService,\n private readonly subscriptionService: SubscriptionService,\n injector: Injector\n ) {\n super(injector);\n\n this.route.params.subscribe(response => {\n this.subscriptionId = Number(response['subscriptionId']);\n this.productId = Number(response['productId']);\n this.getCardDetails();\n });\n\n this.form = this.fb.group({\n card_number: ['', Validators.required],\n cvc: ['', Validators.required],\n exp_month: ['', Validators.required],\n exp_year: ['', Validators.required]\n });\n }\n\n ngOnInit() {\n this.scriptLoader.loadScript('head', 'https://js.stripe.com/v2/', true);\n this.years = HelperService.getYears();\n this.months = HelperService.getMonths();\n }\n\n private getCardDetails() {\n forkJoin({\n cardDetails: this.subscriptionService.getCardDetails(this.subscriptionId),\n product: this.productService.getProductById(this.productId)\n })\n .subscribe(response => {\n this.stripePublishKey = response.product.stripe_publishable_key;\n if (response.cardDetails.status === StatusCodes.OK) {\n this.cardDetails = response.cardDetails.data || null;\n }\n })\n .add(() => {\n this.loading = false;\n });\n }\n\n onUpdatePaymentDetailsCancel() {\n this.router.navigate(['/account/subscriptions']);\n }\n\n @ValidateForm('form')\n onSave() {\n this.busy = true;\n this.errorMsg = '';\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n Stripe.setPublishableKey(this.stripePublishKey);\n\n Stripe.card.createToken(cardDetails, (status, res) => {\n if (status !== 200) {\n this.toast.error(res?.error?.message);\n this.busy = false;\n } else {\n this.subscriptionService\n .updateCardDetails(this.form.value, this.subscriptionId)\n .subscribe({\n next: response => {\n if (response.error) {\n const err = response.error.errors[0].message;\n this.toast.error(err);\n } else if (response.status === StatusCodes.CREATED) {\n this.toast.success(response.message);\n }\n this.cancel();\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n });\n }\n\n cancel() {\n this.router.navigate(['/account/subscriptions']);\n }\n\n onChange(value) {\n this.isChangePayment = value;\n }\n}\n","<div class=\"container-fluid\">\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-lg-12 ps-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous float-start\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h4 class=\"form-section my-3\">\n <i class=\"ft-edit\" aria-hidden=\"true\"></i>\n Update Card Details\n </h4>\n </div>\n <div class=\"col-12 col-lg-6 mt-3 payment-left p-3 card\">\n <div class=\"card-body\">\n <div class=\"alert alert-danger\"\n *ngIf=\"errorMsg\">{{ errorMsg }}</div>\n <ng-template [ngIf]=\"!isChangePayment && cardDetails\">\n <pw-saved-card-details [data]=\"cardDetails\"\n (changeEvent)=\"onChange($event)\">\n </pw-saved-card-details>\n </ng-template>\n\n <ng-template [ngIf]=\"loading\">\n <div class=\"text-center\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"(!cardDetails && !loading) || isChangePayment\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <h4 class=\"title\">New card?</h4>\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"mb-3\">\n <label for=\"update-payment-card_number\">Card Number</label>\n <input type=\"text\"\n id=\"update-payment-card_number\"\n class=\"form-control\"\n formControlName=\"card_number\"\n placeholder=\"Card Number\"\n name=\"card_number\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('card_number').touched &&\n form.get('card_number').errors?.required\n \">\n <span> Please enter card number. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label for=\"update-payment-cvc\">CVC</label>\n <input type=\"text\"\n id=\"update-payment-cvc\"\n class=\"form-control\"\n formControlName=\"cvc\"\n placeholder=\"CVC\"\n name=\"cvc\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('cvc').touched &&\n form.get('cvc').errors?.required\n \">\n <span> Please enter cvc number. </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"update-payment-exp_month-label\">Exp. Month</label>\n <p-select\n [attr.aria-labelledby]=\"'update-payment-exp_month-label'\"\n [options]=\"months\"\n [appendTo]=\"'body'\"\n formControlName=\"exp_month\"\n [placeholder]=\"'Exp. Month'\"\n optionValue=\"value\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_month').touched &&\n form.get('exp_month').errors?.required\n \">\n <span> Please enter expiry month. </span>\n </div>\n </div>\n </div>\n\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"update-payment-exp_year-label\">Exp. Year</label>\n <p-select\n [attr.aria-labelledby]=\"'update-payment-exp_year-label'\"\n [options]=\"years\"\n formControlName=\"exp_year\"\n [placeholder]=\"'Exp. Year'\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_year')?.touched &&\n form.get('exp_year')?.errors?.['required']\n \">\n <span> Please enter expiry year. </span>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 text-center mt-4\">\n <img src=\"/assets/img/icons/powered_by_stripe_v2.png\"\n class=\"payment-provider\"\n alt=\"\" />\n </div>\n\n <div class=\"col-12 mt-4 text-end\">\n <button type=\"button\"\n (click)=\"cancel()\"\n class=\"btn btn-outline-default me-2\">\n Cancel\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [buttonBusy]=\"busy\">\n Submit\n </button>\n </div>\n </div>\n </form>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport {\n FormHelperService,\n ProductService,\n ScriptLoaderService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { Product, Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\nimport { CardDetails } from '../../../shared/interface/user-module.interface';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare let Stripe;\n\n@Component({\n selector: 'pw-upgrade-subscription',\n templateUrl: './upgrade-subscription.component.html',\n styleUrls: ['./upgrade-subscription.component.scss'],\n\n standalone: false\n})\nexport class UpgradeSubscriptionComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('passwordValidationModal', { static: true })\n passwordValidationModal: PasswordValidationComponent;\n\n form: UntypedFormGroup;\n\n product: Product;\n subscription: Subscription;\n user: User;\n cardDetails: CardDetails;\n\n units: number;\n subscriptionId: number;\n productId: number;\n\n unitError: string;\n password: string;\n stripePublishKey: string;\n\n busy: boolean;\n isPurchaseAttempted: boolean;\n\n months = [];\n years = [];\n\n showNewCard: boolean;\n passwordModalVisible: boolean;\n\n errorMsg;\n\n get totalAmount() {\n if (this.product) {\n const units = Number(this.form.get('units').value);\n // eslint-disable-next-line no-restricted-globals\n if (!Number.isNaN(units)) {\n return (units * this.product.price_per_unit) / 100;\n }\n }\n\n return 0;\n }\n\n constructor(\n injector: Injector,\n private readonly productService: ProductService,\n private readonly fb: UntypedFormBuilder,\n private readonly modalService: NgbModal,\n private readonly subscriptionService: SubscriptionService,\n private readonly store: Store<AppState>,\n private readonly scriptLoader: ScriptLoaderService\n ) {\n super(injector);\n this.form = this.fb.group({\n card_number: ['', Validators.required],\n units: [],\n cvc: ['', Validators.required],\n exp_month: ['', Validators.required],\n exp_year: ['', Validators.required]\n });\n }\n\n ngOnInit(): void {\n this.scriptLoader.loadScript('head', 'https://js.stripe.com/v2/', true);\n this.years = HelperService.getYears();\n this.months = HelperService.getMonths();\n\n this.userStore().subscribe(user => {\n this.user = user;\n });\n\n this.route.params.subscribe(response => {\n this.subscriptionId = +response['subscriptionId'];\n this.productId = +response['productId'];\n this.getSubscriptionDetails();\n this.getCardDetails(this.subscriptionId);\n });\n }\n\n getSubscriptionDetails() {\n this.subscriptionService\n .getById(this.subscriptionId)\n .subscribe(response => {\n this.subscription = response;\n const product = this.subscription.products.find(x => x.id === this.productId);\n this.form.patchValue({\n units: product?.purchased_units\n });\n\n this.units = this.form.get('units').value;\n })\n .add(() => {\n this.getProductDetails();\n });\n }\n\n getProductDetails() {\n this.productService.getProductById(this.productId).subscribe(response => {\n this.product = response;\n this.stripePublishKey = response?.stripe_publishable_key;\n if (response?.stripe_publishable_key) {\n Stripe.setPublishableKey(response.stripe_publishable_key);\n }\n const prodUnits =\n this.units > this.product.min_units ? this.units : this.product.min_units || 1;\n\n this.form.patchValue({\n units: prodUnits\n });\n\n this.units = this.form.get('units').value;\n });\n }\n\n onMaxReached(event) {\n if (event) {\n this.unitError = `Maximum is ${this.units}`;\n }\n }\n\n onMinReached(event) {\n if (event) {\n this.unitError = `Minimum is ${this.subscription.min_units || this.product.min_units}`;\n }\n }\n\n onUnitChange(event) {\n this.units = event;\n this.form.patchValue({\n units: event\n });\n this.unitError = '';\n }\n\n onValidatePassword(isSuccess: boolean) {\n if (isSuccess) {\n this.onPurchaseSubmit();\n this.password = null;\n this.modalService.dismissAll();\n }\n }\n\n private postCreateToken(cardToken) {\n const data = {\n stripe_token: cardToken,\n product_id: this.product.id,\n units: this.form.get('units').value || 1,\n subscription_id: this.subscriptionId\n };\n this.userService\n .addNewSubscriptionUsingStripe(data)\n .subscribe({\n next: () => {\n this.toast.success(\n this.translation.translate('User.Subscriptions.SubscriptionPurchased')\n );\n this.router.navigate(['/account/subscriptions']);\n this.modalService.dismissAll();\n },\n error: () => {\n this.busy = false;\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n\n attemptPurchase() {\n if (this.user.has_password) {\n this.passwordValidationModal.open();\n } else {\n this.noPasswordModal();\n }\n }\n\n private onPurchaseSubmit() {\n this.busy = true;\n this.passwordModalVisible = true;\n if (this.subscription.stripe_customer_id) {\n if (this.showNewCard) {\n this.updateCardDetails();\n } else {\n this.enrollUserToSubscription();\n }\n } else if (this.form.valid) {\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n // Get publishable key from product get id\n Stripe.card.createToken(\n cardDetails,\n (status, response) => {\n if (status === StatusCodes.OK) {\n const cardToken = response.id;\n this.postCreateToken(cardToken);\n } else {\n this.toast.error(response?.error?.message, '', { disableTimeOut: true });\n this.busy = false;\n this.isPurchaseAttempted = false;\n }\n },\n () => {\n this.busy = false;\n this.isPurchaseAttempted = false;\n this.modalService.dismissAll();\n }\n );\n }\n }\n\n private enrollUserToSubscription() {\n const data = {\n product_id: this.product.id,\n units: this.form.get('units').value,\n subscription_id: this.subscriptionId\n };\n\n this.subscriptionService.postSubscription(data).subscribe({\n next: response => {\n this.store.dispatch(new GetUser());\n if (response.id) {\n this.router.navigate(['/account/subscriptions']);\n this.toast.success(\n this.translation.translate('User.Subscriptions.SubscriptionPurchased')\n );\n this.isPurchaseAttempted = false;\n this.modalService.dismissAll();\n this.back();\n }\n },\n error: () => {\n this.busy = false;\n this.isPurchaseAttempted = false;\n },\n complete: () => {\n this.busy = !this.busy;\n }\n });\n }\n\n private noPasswordModal() {\n swal.fire({\n title: 'Set Password',\n html: `<div>Please set a password before changing the subscription in the account section.</div>\n <br />\n <strong><a href=\"/account/details\">Click here to reset</a></strong>`,\n confirmButtonText: 'OK'\n });\n }\n\n private getCardDetails(subscriptionId: number) {\n this.subscriptionService.getCardDetails(subscriptionId).subscribe(data => {\n this.cardDetails = data.data || null;\n this.form.patchValue({\n units: this.units,\n card_number: this.cardDetails?.card_number,\n cvc: this.cardDetails?.cvc,\n exp_month: this.cardDetails?.exp_month || '',\n exp_year: this.cardDetails?.exp_year || ''\n });\n });\n }\n\n onDiscardToggle() {\n this.form.markAllAsTouched();\n FormHelperService.markFormAsPristine(this.form);\n }\n\n @ValidateForm('form')\n updateCardDetails() {\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n Stripe.setPublishableKey(this.stripePublishKey);\n\n Stripe.card.createToken(cardDetails, (status, res) => {\n if (status !== 200) {\n this.toast.error(res.error.message);\n } else {\n this.subscriptionService\n .updateCardDetails(this.form.value, this.subscriptionId)\n .subscribe({\n next: response => {\n if (response.error) {\n const err = response.error.errors[0].message;\n this.toast.error(err);\n } else if (response.status === StatusCodes.CREATED) {\n this.enrollUserToSubscription();\n this.toast.success(response.message);\n }\n },\n error: error => {\n this.errorMsg = HelperService.getErrorMessage(error);\n this.toast.error(this.errorMsg);\n }\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<h4 class=\"form-section m-3\">\n <i class=\"ft-check-circle\" aria-hidden=\"true\"></i> {{ 'Button.Payment' | transloco }}\n</h4>\n<div class=\"card-block\">\n <!-- Show Payment Page when there is user.has_stripe_account===false -->\n <ng-container>\n <form class=\"form\"\n (ngSubmit)=\"attemptPurchase()\"\n [formGroup]=\"form\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-body p-3 payment-left card pb-0\">\n <div class=\"card-body\">\n <div class=\"row\"\n *ngIf=\"product?.max_units > 1\">\n <div class=\"col-12\">\n <div class=\"mb-3\">\n <h4 class=\"title\">\n {{ 'User.Subscriptions.LicensesRequired' | transloco }}\n </h4>\n <div class=\"row btns-row\">\n <div class=\"col-md-4 col-8\">\n <pw-number-picker name=\"number-picker\"\n [(value)]=\"units\"\n [min]=\"subscription.min_units || product.min_units\"\n [max]=\"product.max_units\"\n step=\"1\"\n postfix=\"Units\"\n placeholder=\"Total Licenses\"\n [inputReadOnly]=\"false\"\n size=\"small\"\n pickStartAfter=\"500\"\n pickTimer=\"100\"\n [arrowKeys]=\"true\"\n (minReached)=\"onMinReached($event)\"\n (maxReached)=\"onMaxReached($event)\"\n (valueChange)=\"onUnitChange($event)\">\n </pw-number-picker>\n </div>\n </div>\n <div class=\"text-center\">\n <small class=\"form-text text-muted danger\">\n {{ unitError }}\n </small>\n </div>\n </div>\n <p>\n If you proceed, your credit card will be charged\n <strong>{{ product.currency }}\n {{ totalAmount | number:'1.2-2' }}</strong>\n </p>\n </div>\n </div>\n <!-- Shows Saved Card: Shows when user has card details and not trying to update the card details -->\n <ng-template [ngIf]=\"cardDetails\">\n <pw-saved-card-details [data]=\"cardDetails\"\n (changeEvent)=\"showNewCard = $event\"\n [showNewCard]=\"showNewCard\">\n </pw-saved-card-details>\n </ng-template>\n <!-- Add New Payment Starts, opens up when user doesn't have stripe account or tries to change the\n card details -->\n <ng-template [ngIf]=\"(user && !cardDetails) || (cardDetails && showNewCard)\">\n <h4 class=\"title\">\n {{ 'User.Subscriptions.NewCard' | transloco }}?\n </h4>\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"mb-3\">\n <label for=\"upgrade-subscription-card_number\">{{\n 'User.Subscriptions.CardNumber' | transloco\n }}</label>\n <input type=\"text\"\n id=\"upgrade-subscription-card_number\"\n class=\"form-control\"\n formControlName=\"card_number\"\n placeholder=\"Card Number\"\n name=\"card_number\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('card_number').touched &&\n form.get('card_number').errors?.required\n \">\n <span> Please enter card number. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label for=\"upgrade-subscription-cvc\">{{\n 'User.Subscriptions.CVC' | transloco\n }}</label>\n <input type=\"text\"\n id=\"upgrade-subscription-cvc\"\n class=\"form-control\"\n formControlName=\"cvc\"\n placeholder=\"CVC\"\n name=\"cvc\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('cvc').touched &&\n form.get('cvc').errors?.required\n \">\n <span> Please enter cvc. </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"upgrade-subscription-exp_month-label\">Exp. Month</label>\n <p-select\n [attr.aria-labelledby]=\"'upgrade-subscription-exp_month-label'\"\n [options]=\"months\"\n formControlName=\"exp_month\"\n [placeholder]=\"'Exp. Month'\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_month').touched &&\n form.get('exp_month').errors?.required\n \">\n <span> Please enter expiry month. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"upgrade-subscription-exp_year-label\">Exp. Year</label>\n <p-select\n [attr.aria-labelledby]=\"'upgrade-subscription-exp_year-label'\"\n [options]=\"years\"\n formControlName=\"exp_year\"\n [placeholder]=\"'Exp. Year'\"\n [appendTo]=\"'body'\"\n optionValue=\"value\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_year').touched &&\n form.get('exp_year').errors?.required\n \">\n <span> Please enter expiry year. </span>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-2\"\n *ngIf=\"cardDetails\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"showNewCard = false; onDiscardToggle()\">Disregard and pay with current registered card</a>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n <!-- Purchase Summary -->\n <div class=\"col-md-6\"\n *ngIf=\"product\">\n <div class=\"purchase-summary card p-3 payment-right\">\n <div class=\"card-body\">\n <h4 class=\"title\">{{ 'Label.PurchaseSummary' | transloco }}</h4>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Plan' | transloco }}:</div>\n <div class=\"summary-right\">{{ product.name }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Price' | transloco }}:</div>\n <div class=\"summary-right\">\n {{ product.currency }}\n {{ (product.price_per_unit / 100) | number:'1.2-2' }}\n </div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Seats' | transloco }}:</div>\n <div class=\"summary-right\">{{ form.get('units').value }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Total' | transloco }}:</div>\n <div class=\"summary-right\">\n {{ product.currency }} {{ totalAmount | number:'1.2-2' }}\n </div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">\n {{ 'Label.Recurrency' | transloco }}:\n </div>\n <div class=\"summary-right\">{{ product.billing_frequency }}</div>\n </div>\n </div>\n <div class=\"text-center\">\n <hr />\n <p>\n By subscribing you acknowledge and accept our terms of service and\n privacy policy\n </p>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-center mt-3\">\n <img src=\"/assets/img/icons/powered_by_stripe_v2.png\"\n class=\"payment-provider\"\n alt=\"\" />\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"form-actions text-end\">\n <button type=\"button\"\n class=\"btn btn-raised btn-outline-default me-1\"\n [disabled]=\"isPurchaseAttempted\"\n routerLink=\"/account/subscriptions\">\n <i class=\"ft-x\" aria-hidden=\"true\"></i>{{ 'Button.Back' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-raised btn-primary\"\n [disabled]=\"isPurchaseAttempted\"\n [buttonBusy]=\"busy\">\n <i class=\"ft-check\" aria-hidden=\"true\"></i>\n {{ 'Button.Purchase' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </ng-container>\n</div>\n\n<pw-password-validation #passwordValidationModal\n (successEvent)=\"onValidatePassword($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>\n If you proceed, your credit card will be charged\n <strong *ngIf=\"totalAmount\">{{ product.currency }} {{ totalAmount | number:'1.2-2' }}</strong>\n </p>\n </div>\n </div>\n</pw-password-validation>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport {\n AbstractControl,\n UntypedFormBuilder,\n UntypedFormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport { GeoService, SubscriptionService, ValidationService } from '@posiwise/common-services';\nimport { Country, Product, Subscription, User } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { map, Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\n@Component({\n templateUrl: './user-subscription-details.component.html',\n styleUrls: ['./user-subscription-details.component.scss'],\n\n standalone: false\n})\nexport class UserSubscriptionDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n @ViewChild('modal', { static: true }) modal: PasswordValidationComponent;\n\n allowUpdate: boolean;\n hasUnitChanged: boolean;\n\n busyButton = false;\n\n form: UntypedFormGroup;\n\n unitError: string;\n\n subscription: Subscription;\n\n units = 1;\n\n countries$: Observable<Country[]>;\n\n squaredLogo: string;\n fullLogo: string;\n slug: string;\n\n userId: number;\n subscriptionId: number;\n\n user: User;\n\n showApiToken = false;\n showApiClientId = false;\n refreshingTokens = false;\n\n totalAmount() {\n const allProductsPrice = this.subscription.products.map(x => x.price_per_unit * this.units);\n\n return allProductsPrice.reduce((a: number, b: number) => a + b, 0) / 100;\n }\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly geoService: GeoService,\n private readonly modalService: NgbModal,\n private readonly subscriptionService: SubscriptionService,\n private readonly store: Store<AppState>,\n injector: Injector\n ) {\n super(injector);\n this.form = this.getForm();\n this.route.params.subscribe(params => {\n this.subscriptionId = +params['subscriptionId'];\n this.fetchData();\n });\n }\n\n ngOnInit() {\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n this.userStore().subscribe(user => {\n if (user) {\n this.slug = user.slug;\n this.user = user;\n this.userId = user.id;\n }\n });\n }\n\n private fetchData() {\n this.subscriptionService.getById(this.subscriptionId).subscribe(response => {\n this.subscription = response;\n this.fullLogo = this.subscription?.full_logo.url;\n this.squaredLogo = this.subscription?.squared_logo?.url;\n this.form.patchValue(this.subscription);\n this.units = this.subscription?.products[0]?.purchased_units;\n this.form.patchValue({\n units: this.units\n });\n });\n }\n\n private getForm() {\n return this.fb.group({\n organisation: ['', [Validators.required]],\n contact_name: ['', [Validators.required]],\n contact_email: ['', [Validators.required, Validators.email]],\n contact_tel: [''],\n tax_id: [''],\n invoice_recipient_emails: ['', [this.commaSeparatedEmailsValidator()]],\n address: ['', [Validators.required]],\n country_code: ['', [Validators.required]],\n facebook_handle: [''],\n twitter_handle: [''],\n linkedin_handle: [''],\n reddit_handle: [''],\n company_url: [''],\n enforce_2fa: [false]\n });\n }\n\n private commaSeparatedEmailsValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Allow empty values\n }\n\n const value = control.value as string;\n\n // Check if there are spaces around commas (comma-space or space-comma patterns)\n if (value.includes(',') && (value.includes(', ') || value.includes(' ,'))) {\n return { invalidFormat: true };\n }\n\n // Check if any email part contains spaces (after splitting by comma)\n const emailParts = value.split(',');\n if (emailParts.some((part: string) => part.trim() !== part || part.includes(' '))) {\n return { invalidFormat: true };\n }\n\n // Validate each email\n const emails = emailParts.map((email: string) => email.trim());\n for (const email of emails) {\n if (email && !ValidationService.email(email)) {\n return { invalidEmail: true };\n }\n }\n\n return null;\n };\n }\n\n /** *\n * Update seats for all the products of subscription\n */\n updateUnits() {\n if (this.subscription.products[0].trial_subscription) {\n return;\n }\n this.modal.open();\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onImgError(event: Event, fallbackSrc: string): void {\n const img = event.target as HTMLImageElement | null;\n if (!img) return;\n if (img.src && img.src.endsWith(fallbackSrc)) return;\n img.src = fallbackSrc;\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.subscriptionService.addFullLogo(this.subscriptionId, file).subscribe(res => {\n this.modalService.dismissAll();\n this.fullLogo = res?.full_logo?.url;\n });\n }\n\n uploadSquaredLogo(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.subscriptionService.addSquaredLogo(this.subscriptionId, file).subscribe(res => {\n this.modalService.dismissAll();\n this.squaredLogo = res?.squared_logo?.url;\n });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n dataURLtoBlob(dataUrl) {\n const arr = dataUrl.split(',');\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n @ValidateForm('form')\n onSaveDetails() {\n this.busyButton = true;\n const formValue = { ...this.form.value };\n\n // Process invoice_recipient_emails: remove spaces from comma-separated emails\n if (formValue.invoice_recipient_emails) {\n formValue.invoice_recipient_emails = formValue.invoice_recipient_emails\n .split(',')\n .map((email: string) => email.trim())\n .join(',');\n }\n\n this.subscriptionService\n .updateSubscription(Number(this.subscriptionId), formValue)\n .subscribe(() => {\n this.toast.success('Subscription details updated.');\n this.store.dispatch(new GetUser());\n this.back();\n })\n .add(() => {\n this.busyButton = false;\n });\n }\n\n onPasswordValidation(_event) {\n this.subscriptionService\n .updateSubscriptionUnit(this.subscription.id, this.units)\n .subscribe(response => {\n if (response.status === StatusCodes.OK) {\n this.toast.success('Unit quantity updated.');\n } else {\n this.toast.error('Something went wrong!');\n }\n });\n }\n\n onMaxReached(event) {\n if (event) {\n this.unitError = `Maximum is ${this.units}`;\n }\n }\n\n onMinReached(event) {\n if (event) {\n this.unitError = `Minimum is ${this.units}`;\n }\n }\n\n onUnitChange(event) {\n this.allowUpdate = true;\n this.hasUnitChanged = true;\n this.units = event;\n this.unitError = '';\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('address').setValue(event.formatted_address);\n }\n\n toggleApiTokenVisibility() {\n this.showApiToken = !this.showApiToken;\n }\n\n toggleApiClientIdVisibility() {\n this.showApiClientId = !this.showApiClientId;\n }\n\n refreshApiTokens() {\n swal.fire({\n title: 'Are you sure?',\n text: 'This will expire the current tokens.',\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#d33',\n cancelButtonColor: '#3085d6',\n confirmButtonText: 'Yes, refresh tokens!'\n }).then(result => {\n if (result.isConfirmed) {\n this.performTokenRefresh();\n }\n });\n }\n\n private performTokenRefresh() {\n this.refreshingTokens = true;\n this.subscriptionService\n .refreshApiTokens(this.subscriptionId)\n .subscribe({\n next: response => {\n if (response && response.api_access_token) {\n this.subscription.api_access_token = response.api_access_token;\n }\n if (response && response.api_client_id) {\n this.subscription.api_client_id = response.api_client_id;\n }\n\n this.showApiToken = false;\n this.showApiClientId = false;\n this.fetchData();\n }\n })\n .add(() => {\n this.refreshingTokens = false;\n });\n }\n\n trackByProduct(_index: number, item: Product) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.allowUpdate = false;\n }\n}\n","<!-- edit Subscription details page -->\n<div class=\"row\">\n <div class=\"col-12\">\n <h3 class=\"my-3\">{{ subscription?.organisation || subscription?.contact_name }}</h3>\n </div>\n</div>\n\n<div class=\"row\"\n *ngIf=\"subscription\">\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">Full Logo\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.FullLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"fullLogo\"\n alt=\"full logo\"\n width=\"100%\"\n class=\"image full-logo\"\n height=\"100%\"\n role=\"presentation\"\n (error)=\"onImgError($event, 'assets/img/icons/dummy-logo.jpg')\" />\n <div class=\"overlay mt-2\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">\n <a aria-label=\"Navigate to Target\">{{ 'User.Profile.Change' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">Squared Logo\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.SquaredLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"squaredLogo\"\n alt=\"Squared Presentation\"\n width=\"150\"\n class=\"squared_logo\"\n [height]=\"'150'\"\n role=\"presentation\"\n (error)=\"onImgError($event, 'assets/img/icons/dummy-icon.jpg')\" />\n <div class=\"overlay mt-2\"\n (keydown.enter)=\"openModal(squaredLogoContent)\"\n (click)=\"openModal(squaredLogoContent)\">\n <div class=\"overlay-text\">\n <a aria-label=\"Navigate to Target\">{{ 'User.Profile.Change' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"row\">\n <div class=\"col-12\">\n <small *ngIf=\"subscription?.trial_subscription && subscription?.calculated_price\"\n class=\"text-danger\">Upgrade to be able to update your purchased seats</small>\n </div>\n</div>\n<div class=\"row btns-row align-items-center\">\n <div class=\"col-md-3 col-8\"\n *ngIf=\"subscription\">\n <label for=\"user-subscription-seats\" class=\"visually-hidden\">{{ 'User.Subscriptions.Tooltip.Seats' | transloco }}</label>\n <pw-number-picker [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Seats'|transloco\"\n inputId=\"user-subscription-seats\"\n name=\"number-picker\"\n [(value)]=\"units\"\n [min]=\"subscription?.min_units||subscription?.products[0].min_units\"\n [max]=\"subscription?.products[0].max_units\"\n step=\"1\"\n postfix=\"seats\"\n placeholder=\"Total Licences\"\n [inputReadOnly]=\"subscription?.products[0].trial_subscription\"\n [showUpButton]=\"!subscription?.products[0].trial_subscription\"\n [showDownButton]=\"!subscription?.products[0].trial_subscription\"\n size=\"small\"\n pickStartAfter=\"500\"\n pickTimer=\"100\"\n [arrowKeys]=\"true\"\n (minReached)=\"onMinReached($event)\"\n (maxReached)=\"onMaxReached($event)\"\n (valueChange)=\"onUnitChange($event)\">\n </pw-number-picker>\n </div>\n\n <div class=\"col-md-3 col-4 p-1\"\n *ngIf=\"subscription\">\n\n <ng-template [ngIf]=\"!subscription?.products[0].trial_subscription && allowUpdate\"\n [ngIfElse]=\"nonPaidRef\">\n <button class=\"btn btn-primary\"\n (click)=\"updateUnits()\">\n {{ 'User.Subscriptions.UpdateUnits' | transloco }}\n </button>\n </ng-template>\n <ng-template #nonPaidRef>\n <div>\n <small class=\"danger\"\n *ngIf=\"subscription?.products[0].trial_subscription\">Update seats is available only to paid subscriptions</small>\n </div>\n </ng-template>\n </div>\n\n <div class=\"col-12 col-md-6\"\n *ngIf=\"hasUnitChanged\">\n <table class=\"table table-borderless table-sm\"\n aria-describedby=\"Product details\">\n <thead>\n <tr>\n <th scope=\"true\">Product</th>\n <th scope=\"true\">Price per seat <span>({{subscription?.products[0]?.currency|currencySymbol}})</span></th>\n <th scope=\"true\">Seats</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let product of subscription.products; trackBy: trackByProduct\">\n <td>{{ product.name }}</td>\n <td>{{ product.price_per_unit / 100 }}</td>\n <td>{{ units }}</td>\n </tr>\n </tbody>\n </table>\n <p>\n If you proceed, the new cost for your subscription will be\n <strong>{{ totalAmount()| currency: subscription?.products[0]?.currency:'symbol-narrow'}}</strong>\n </p>\n </div>\n</div>\n<form [formGroup]=\"form\"\n (ngSubmit)=\"onSaveDetails()\"\n class=\"row mt-4\"\n *ngIf=\"subscription\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.ContactName' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Name\"\n name=\"contact_name\"\n controlId=\"user-subscription-contact_name\"\n errorMsg=\"Please enter Contact Name\">\n <input type=\"text\"\n id=\"user-subscription-contact_name\"\n class=\"form-control\"\n formControlName=\"contact_name\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.ContactEmail' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Email\"\n name=\"contact_email\"\n controlId=\"user-subscription-contact_email\"\n errorMsg=\"Please enter Contact Email\">\n <input type=\"text\"\n id=\"user-subscription-contact_email\"\n class=\"form-control\"\n formControlName=\"contact_email\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Organization' | transloco\"\n class=\"col-md-6\"\n label=\"Organisation\"\n name=\"organisation\"\n controlId=\"user-subscription-organisation\"\n errorMsg=\"Please enter organisation\">\n <input type=\"text\"\n id=\"user-subscription-organisation\"\n class=\"form-control\"\n formControlName=\"organisation\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Phone' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Tel\"\n name=\"contact_tel\"\n controlId=\"user-subscription-contact_tel\"\n errorMsg=\"Please enter Contact Telephone Number\">\n <input type=\"text\"\n id=\"user-subscription-contact_tel\"\n class=\"form-control\"\n formControlName=\"contact_tel\" />\n </pw-input-container>\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Country' | transloco\"\n class=\"col-md-6\"\n label=\"Country\"\n name=\"country_code\"\n controlId=\"user-subscription-country_code\"\n [useAriaLabelledbyOnly]=\"true\"\n [isLeftTooltip]=\"true\"\n errorMsg=\"Please select a country\">\n <p-select\n [attr.aria-labelledby]=\"'user-subscription-country_code-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country_code\"\n placeholder=\"Select Country\">\n </p-select>\n </pw-input-container>\n </ng-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Address' | transloco\"\n class=\"col-md-6\"\n label=\"Address\"\n name=\"address\"\n controlId=\"user-subscription-address\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please enter address\">\n <input ngx-gp-autocomplete\n id=\"user-subscription-address\"\n name=\"address\"\n class=\"form-control\"\n [attr.aria-labelledby]=\"'user-subscription-address-label'\"\n #places=\"ngx-places\"\n formControlName=\"address\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.VatNumber' | transloco\"\n class=\"col-md-6\"\n label=\"GST/VAT Number\"\n name=\"tax_id\"\n controlId=\"user-subscription-tax_id\"\n errorMsg=\"Please enter GST/VAT Number\">\n <input type=\"text\"\n id=\"user-subscription-tax_id\"\n class=\"form-control\"\n formControlName=\"tax_id\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.CompanyUrl' | transloco\"\n class=\"col-md-6\"\n label=\"Company URL\"\n name=\"company_url\"\n controlId=\"user-subscription-company_url\"\n errorMsg=\"Please enter company url\">\n <input type=\"text\"\n id=\"user-subscription-company_url\"\n class=\"form-control\"\n formControlName=\"company_url\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.InvoiceRecipientEmails' | transloco\"\n class=\"col-md-6\"\n label=\"Invoice Recipient Emails\"\n name=\"invoice_recipient_emails\"\n controlId=\"user-subscription-invoice_recipient_emails\"\n errorMsg=\"Please enter valid email addresses separated by commas\">\n <input type=\"text\"\n id=\"user-subscription-invoice_recipient_emails\"\n class=\"form-control\"\n formControlName=\"invoice_recipient_emails\"\n placeholder=\"email1@example.com,email2@example.com\" />\n </pw-input-container>\n\n <ng-container *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <div class=\"col-12\">\n <h3>Social Media</h3>\n <p>\n Any of the social media handles that you set here will appear in the footer of emails going out to your child subscriptions.\n </p>\n </div>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.FacebookHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Facebook handle\"\n name=\"facebook_handle\"\n controlId=\"user-subscription-facebook_handle\"\n errorMsg=\"Please enter facebook id\">\n <input type=\"text\"\n id=\"user-subscription-facebook_handle\"\n class=\"form-control\"\n formControlName=\"facebook_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.TwitterHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Twitter handle\"\n name=\"twitter_handle\"\n controlId=\"user-subscription-twitter_handle\"\n errorMsg=\"Please enter twitter id\">\n <input type=\"text\"\n id=\"user-subscription-twitter_handle\"\n class=\"form-control\"\n formControlName=\"twitter_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.LinkedinHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Linkedin handle\"\n name=\"linkedin_handle\"\n controlId=\"user-subscription-linkedin_handle\"\n errorMsg=\"Please enter linkedin id\">\n <input type=\"text\"\n id=\"user-subscription-linkedin_handle\"\n class=\"form-control\"\n formControlName=\"linkedin_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.RedditHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Reddit handle\"\n name=\"reddit_handle\"\n controlId=\"user-subscription-reddit_handle\"\n errorMsg=\"Please enter reddit id\">\n <input type=\"text\"\n id=\"user-subscription-reddit_handle\"\n class=\"form-control\"\n formControlName=\"reddit_handle\" />\n </pw-input-container>\n </ng-container>\n\n <ng-container *ngIf=\"subscription?.api_hits_max > 0\">\n <div class=\"col-12\">\n <h3>{{ 'User.Subscriptions.APICredentials.Title' | transloco }}</h3>\n <p>\n Manage your {{appConfig?.company?.name}} API credentials. These tokens are used to authenticate API requests.\n </p>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"user-subscription-api-token\">{{ 'User.Subscriptions.APICredentials.AccessToken' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"user-subscription-api-token\"\n name=\"api_token\"\n class=\"form-control\"\n [value]=\"showApiToken ? subscription?.api_access_token || ('User.Subscriptions.APICredentials.NoTokenAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiTokenVisibility()\">\n {{ showApiToken ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"user-subscription-api-client-id\">{{ 'User.Subscriptions.APICredentials.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"user-subscription-api-client-id\"\n name=\"api_client_id\"\n class=\"form-control\"\n [value]=\"showApiClientId ? subscription?.api_client_id || ('User.Subscriptions.APICredentials.NoClientIdAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiClientIdVisibility()\">\n {{ showApiClientId ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-3\">\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\"\n class=\"btn btn-warning\"\n (click)=\"refreshApiTokens()\"\n [disabled]=\"refreshingTokens\">\n <i class=\"fas fa-sync-alt me-2\" [class.fa-spin]=\"refreshingTokens\"></i>\n {{ refreshingTokens ? ('User.Subscriptions.APICredentials.Refreshing' | transloco) : ('User.Subscriptions.APICredentials.RefreshTokens' | transloco) }}\n </button>\n\n <div class=\"d-flex align-items-center gap-2\">\n <ng-container *ngIf=\"subscription?.api_hits !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHits' | transloco }}:</span>\n <span class=\"fw-bold\">{{ subscription.api_hits | number }}</span>\n </ng-container>\n\n <ng-container *ngIf=\"subscription?.api_hits_max !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHitsMax' | transloco }}:</span>\n <span class=\"fw-bold\">{{ subscription.api_hits_max | number }}</span>\n </ng-container>\n\n <!-- Show utilization percentage when both values exist -->\n <ng-container *ngIf=\"subscription?.api_hits !== null || subscription?.api_hits_max !== null\">\n <span class=\"text-muted ms-2\">(</span>\n <span class=\"fw-bold\" [ngClass]=\"{\n 'text-success': (subscription.api_hits / subscription.api_hits_max) <= 0.8,\n 'text-warning': (subscription.api_hits / subscription.api_hits_max) > 0.8 && (subscription.api_hits / subscription.api_hits_max) <= 0.9,\n 'text-danger': (subscription.api_hits / subscription.api_hits_max) > 0.9\n }\">\n {{ (subscription.api_hits / subscription.api_hits_max * 100) | number:'1.0-0' }}% consumed\n </span>\n <span class=\"text-muted\">)</span>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"col-12 mt-5\">\n <h3>Security</h3>\n <p>\n While we'll add more security options in the future, please start by enforcing 2FA for all your subscription members.\n </p>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container label=\"Enforce 2FA\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Enforce2fa' | transloco\"\n name=\"enforce_2fa\"\n controlId=\"user-subscription-enforce_2fa\"\n [useAriaLabelledbyOnly]=\"true\">\n <ui-switch formControlName=\"enforce_2fa\"\n name=\"enforce_2fa\"\n [attr.aria-labelledby]=\"'user-subscription-enforce_2fa-label'\"> </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n routerLink=\"/account/subscriptions\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button name=\"submit\"\n type=\"submit\"\n [buttonBusy]=\"busyButton\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n</form>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.FullLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"onImageSelection($event)\"\n aspectRatio=\"fullLogo\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<ng-template #squaredLogoContent\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.SquaredLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"uploadSquaredLogo($event)\"\n aspectRatio=\"auto\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<pw-password-validation #modal\n (successEvent)=\"onPasswordValidation($event)\"> </pw-password-validation>\n","/*\n * @Author: anikets43\n * @description: shows all the subscribed user products\n * Account => Subscription\n */\n\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { HttpParams } from '@angular/common/http';\nimport { Component, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport { PermissionService, SubscriptionService } from '@posiwise/common-services';\nimport { Product, Subscription, User } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\n\nimport sortBy from 'lodash/sortBy';\nimport { MenuItem } from 'primeng/api';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\nimport { CurrentItem } from '../../../shared/interface/user-module.interface';\nimport { AddSubscriptionComponent } from '../add-subscription/add-subscription.component';\n\n@Component({\n selector: 'pw-user-subscriptions-list',\n templateUrl: './user-subscriptions-list.component.html',\n styleUrls: ['./user-subscriptions-list.component.scss'],\n\n standalone: false\n})\nexport class UserSubscriptionListComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('menuItems', { static: false })\n menu: MenuItem[];\n\n @ViewChild(AddSubscriptionComponent, { static: false })\n changeSubscriptionRef: AddSubscriptionComponent;\n\n @ViewChild('passwordValidationModalForAccountDelete', { static: false })\n passwordValidationModalForAccountDelete: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForKey', { static: false })\n passwordValidationModalForKey: PasswordValidationComponent;\n\n @ViewChild('passwordValidationForUnsubscribe', { static: false })\n passwordValidationForUnsubscribe: PasswordValidationComponent;\n\n @ViewChild('cancelSubscriptionModal', { static: false })\n cancelSubscriptionModal: TemplateRef<unknown>;\n\n showApiKey = true;\n\n password: string;\n productName: string;\n\n subscribedSubscriptions = [];\n\n activeItem: MenuItem;\n\n isAddNew: boolean;\n\n user: User;\n\n isUpdatePayment: false;\n\n selectedSubscription: { id: number; productId: number };\n\n editing: boolean;\n\n isLoaded = false;\n\n reasonToCancel = '';\n\n currentItem: CurrentItem;\n\n showTos = false;\n\n objectKeys = Object.keys;\n\n items: MenuItem[] = [\n { id: 'profile', label: 'Profile', icon: 'fa fa-fw fa-user-cog' },\n { id: 'subscription', label: 'Subscription', icon: 'fa fa-fw fa-book' },\n { id: 'invoice', label: 'Invoice', icon: 'fa fa-file-invoice-dollar' }\n ];\n\n productId: number;\n\n constructor(\n private readonly subscriptionService: SubscriptionService,\n private readonly adminService: AdminService,\n private readonly modalService: NgbModal,\n private readonly store: Store<AppState>,\n private readonly clipboard: Clipboard,\n injector: Injector\n ) {\n super(injector);\n this.getSubscribedProduct = this.getSubscribedProduct.bind(this);\n }\n\n ngOnInit() {\n this.route.queryParams.subscribe(params => {\n this.isAddNew = params['isNew'];\n this.getSubscribedProduct();\n this.selectedSubscription = null;\n });\n\n [this.activeItem] = this.items;\n }\n\n onClipboardCopy(accessCode: string) {\n this.clipboard.copy(accessCode);\n this.toast.success('Access Key copied to the clipboard');\n }\n\n attemptUnsubscribe(item, productId: number) {\n this.selectedSubscription = item;\n this.selectedSubscription.productId = productId;\n if (this.user.has_password) {\n this.passwordValidationForUnsubscribe.open();\n } else {\n this.noPasswordModal();\n }\n }\n\n openCancelSubscriptionModal() {\n this.modalService.open(this.cancelSubscriptionModal, {\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n private getSubscribedProduct() {\n this.userStore().subscribe(user => {\n this.user = user;\n if (user) {\n this.userService.getUserSubscriptions(user.id).subscribe(response => {\n this.subscribedSubscriptions = sortBy(response.subscriptions, 'deleted');\n response?.expired_subscriptions.forEach(subscription => {\n this.subscribedSubscriptions.push(subscription);\n });\n this.subscribedSubscriptions.forEach(subscription => {\n subscription.products.forEach((product: Product) => {\n product.masked = product.api_access_token\n ? '*************************'\n : null;\n });\n });\n this.isLoaded = true;\n });\n }\n });\n }\n\n updateApiKey(item) {\n this.subscriptionService.updateSubscriptionAPIKey(item.id).subscribe(response => {\n item.api_access_token = response;\n this.toast.success(this.translation.translate('User.Subscriptions.UpdatedKey'));\n this.getSubscribedProduct();\n });\n }\n\n showKey(item) {\n this.currentItem = item;\n this.passwordValidationModalForKey.open();\n this.showApiKey = false;\n }\n\n displayApiKey() {\n this.showApiKey = true;\n this.currentItem.masked = this.currentItem?.api_access_token;\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n if (this.activeItem.id === 'subscription') {\n this.getSubscribedProduct();\n }\n }\n\n onUnsubscribe(item, reasonToCancel: string) {\n const httpParams = new HttpParams().set('product_id', item.productId);\n const requestOptions = {\n params: httpParams,\n body: {\n reason_to_cancel: reasonToCancel\n }\n };\n this.subscriptionService.deleteSubscription(item.id, requestOptions).subscribe(() => {\n this.store.dispatch(new GetUser());\n this.modalService.dismissAll();\n this.getSubscribedProduct();\n this.selectedSubscription = null;\n this.reasonToCancel = '';\n });\n }\n\n onValidatePassword(isSuccess: boolean) {\n if (isSuccess) {\n // Password validation component already closes its modal\n // Use setTimeout to ensure modal is fully closed before opening the next one\n setTimeout(() => {\n this.openCancelSubscriptionModal();\n }, 100);\n }\n }\n\n onConfirmCancel() {\n if (!this.reasonToCancel || this.reasonToCancel.trim() === '') {\n this.toast.error(\n this.translation.translate('User.Subscriptions.Validation.ReasonRequired')\n );\n return;\n }\n this.onUnsubscribe(this.selectedSubscription, this.reasonToCancel);\n }\n\n discardEdit() {\n this.editing = false;\n this.selectedSubscription = null;\n }\n\n onSaveDetails() {\n this.toast.success(this.translation.translate('User.Subscriptions.UpdatedMessage'));\n this.editing = false;\n }\n\n onUpdatePaymentDetailsCancel() {\n this.router.navigate(['.'], { relativeTo: this.route, queryParams: {} });\n }\n\n attemptUpgrade(subscription: Subscription, product: Product) {\n if (this.user.has_password) {\n this.router.navigate([\n `account/subscriptions/upgrade/${subscription.id}/${product.id}`\n ]);\n } else {\n this.noPasswordModal();\n }\n }\n\n private noPasswordModal() {\n swal.fire({\n title: 'Set Password',\n text: `Please set a password before changing the subscription in the account section.`,\n confirmButtonText: 'OK'\n });\n }\n\n showModalForAccountDeletion() {\n swal.fire({\n title: 'Delete',\n html: `Are you sure you want to delete?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.passwordValidationModalForAccountDelete.open();\n }\n });\n }\n\n deleteUser(_event) {\n const subscriptionId = PermissionService.selectedSubscription.id;\n this.adminService.deleteUser(this.user.id, subscriptionId).subscribe(() => {\n this.router.navigate(['logout']);\n });\n }\n\n showPrivacyAndTos(product: Product) {\n this.productId = product.id;\n this.productName = product.name;\n this.showTos = true;\n }\n\n onCancel() {\n this.showTos = false;\n }\n\n trackBySubscription(_index: number, item: { id: number }) {\n return item.id;\n }\n\n trackByProduct(_index: number, item: { id: number }) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<ng-container *ngIf=\"!showTos\">\n <!-- Subscriptions Tab Content -->\n <div class=\"row\"\n *ngIf=\"!editing && !isAddNew\">\n <div class=\"col-12\">\n <h2>Your Subscriptions</h2>\n <p class=\"float-start\">You'll find in this section the summary of your subscriptions.</p>\n <div class=\"text-end\">\n <!-- Delete Account -->\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-danger px-3 mt-2 me-2 me-sm-2\"\n (click)=\"showModalForAccountDeletion()\"\n [pTooltip]=\"'User.Account.Tooltip.DeleteAccount' | transloco\"\n tooltipPosition=\"bottom\">\n {{ 'User.Account.DeleteAccount' | transloco }}\n </button>\n </div>\n </div>\n </div>\n <!-- Subscribed Product Cards -->\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"row\"\n *ngIf=\"\n !editing && !isAddNew && !isUpdatePayment && isLoaded && subscribedSubscriptions.length\n \">\n <div class=\"col-12 col-md-6 my-4\"\n *ngFor=\"let subscription of subscribedSubscriptions; trackBy: trackBySubscription\">\n <div class=\"subscription-details mb-4\">\n <div class=\"float-start\">\n <div>\n <strong>Organisation:</strong>\n {{\n subscription.organisation\n ? subscription.organisation\n : subscription.contact_name\n }}\n </div>\n <div>\n <strong>{{ 'User.Subscriptions.TotalPriceExclTax' | transloco }}:</strong>\n <ng-template [ngIf]=\"subscription.calculated_price\"\n [ngIfElse]=\"freeProductRef\">\n {{\n subscription.calculated_price / 100\n | currency: subscription.products[0]?.currency:'symbol-narrow'\n }}\n {{ subscription.products[0].trial_subscription ? '(After Trial)' : '' }}\n </ng-template>\n <ng-template #freeProductRef> Free </ng-template>\n </div>\n <div>\n <strong>{{ 'User.Subscriptions.TotalPurchasedSeats' | transloco }}:</strong>\n {{ subscription.purchased_units }}\n </div>\n <div>\n <div>\n <strong>{{ 'User.Subscriptions.SeatsInUse' | transloco }}:</strong>\n {{ subscription.units_in_use || 1 }}\n </div>\n </div>\n </div>\n\n <!-- Products list -->\n <div *ngFor=\"\n let product of subscription.products;\n let first = first;\n trackBy: trackByProduct\n \">\n <ng-container *ngIf=\"first\">\n <!-- Edit -->\n <div *ngIf=\"\n !product.deleted &&\n (subscription.is_subscription_owner ||\n subscription.is_subscription_admin) &&\n !product.dependency_products?.length\n \"\n class=\"float-end m-2 m-sm-2\">\n <a class=\"btn btn-outline-primary btn-sm mx-1\"\n aria-label=\"Navigate to Target\"\n [routerLink]=\"['../subscriptions', subscription.id]\">\n {{ 'Button.Edit' | transloco }}\n </a>\n <button [routerLink]=\"['../subscriptions', subscription.id, 'credential']\"\n *ngIf=\"\n !product.expired &&\n !product.deleted &&\n !product.trial_subscription\n \"\n class=\"btn btn-dark btn-sm float-end mx-1\">\n {{ 'User.Subscriptions.Credentials' | transloco }}\n </button>\n <!-- Update Card Details -->\n <a class=\"btn btn-sm btn-outline-primary mx-1 me-sm-2\"\n *ngIf=\"!isUpdatePayment && subscription.stripe_customer_id\"\n [routerLink]=\"[\n '../subscriptions',\n subscription.id,\n 'product',\n product.id,\n 'update-payment'\n ]\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n {{ 'User.Subscriptions.UpdateCardDetails' | transloco }}</a>\n </div>\n <!-- Add New Subscription -->\n <div class=\"float-end m-2 m-sm-2\"\n *ngIf=\"\n !product.deleted &&\n (subscription.is_subscription_owner ||\n subscription.is_subscription_admin) &&\n !product.dependency_products?.length\n \">\n <button class=\"btn btn-sm btn-primary\"\n [routerLink]=\"'/account/subscriptions/add-new'\"\n [queryParams]=\"{ subscription_id: subscription.id }\"\n [pTooltip]=\"\n 'User.Subscriptions.Tooltip.ManageAllProducts' | transloco\n \"\n tooltipPosition=\"bottom\">\n <i class=\"fa fa-plus-circle\"></i>\n {{ 'User.Subscriptions.SeeAllProducts' | transloco }}\n </button>\n </div>\n </ng-container>\n <div class=\"card subscription-products-cards\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <div>\n <h4 class=\"mb-3 text-bold-500 primary\">{{ product?.name }}</h4>\n <!-- Frequency -->\n <div>\n <div>\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.Frequency' | transloco\n }}:</strong>\n {{ product?.billing_frequency | uppercase }}\n </div>\n </div>\n <!-- Expiration -->\n <div [ngClass]=\"{ 'text-danger': product.expired }\">\n <strong class=\"d-inline-block w-50\">{{\n product.expired ? 'Expired' : 'Expiry Date'\n }}:</strong>\n {{ product.expires_at | dateFormat }}\n </div>\n <!-- Estimated Price -->\n <div [ngClass]=\"{ 'text-danger': product.expired }\">\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.PriceExclTax' | transloco\n }}:</strong>\n {{ product.currency }}\n {{ (product.calculated_price / 100) | number:'1.2-2' }}\n </div>\n <!-- API Key -->\n <ng-template [ngIf]=\"\n (product.stripe_plan_id && product.max_hits > 0) ||\n product.max_hits_trial > 0\n \">\n <div class=\"d-inline\">\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.ApiKey' | transloco\n }}:</strong>\n <code class=\"d-inline me-2\">{{ product.masked }}</code>\n </div>\n <div class=\"float-end\">\n <!-- Show Access Key -->\n <button class=\"btn\"\n ngbTooltip=\"Show Access Key\"\n (click)=\"showKey(product)\">\n <i class=\"fas fa-eye\" aria-hidden=\"true\"></i>\n </button>\n <!-- Copy To Clipboard -->\n <button class=\"btn\"\n ngbTooltip=\"Copy Key\">\n <i\n class=\"fal fa-copy\"\n aria-hidden=\"true\"\n (click)=\"\n onClipboardCopy(product.api_access_token)\n \"\n (keydown.enter)=\"onClipboardCopy(product.api_access_token)\"\n ></i>\n </button>\n <!-- Update API Key -->\n <button class=\"btn\"\n ngbTooltip=\"Change Key\"\n *ngIf=\"!product.expired && !product.deleted\"\n (click)=\"updateApiKey(product)\">\n <i class=\"fal fa-sync-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-start\">\n <div *ngIf=\"product.deleted && !product.expired\">\n <i class=\"fa fa-info-circle me-2\" aria-hidden=\"true\"></i>{{ 'User.Subscriptions.OutdatedMessage' | transloco }}\n </div>\n <div>\n <span *ngIf=\"product.deleted\"\n class=\"badge bg-danger me-2\">Deleted</span>\n <span class=\"badge bg-warning me-2\"\n *ngIf=\"\n product.trial_subscription &&\n product.calculated_price\n \">\n Trial</span>\n <span class=\"badge bg-grey me-2\"\n *ngIf=\"product?.pause_collection && objectKeys(product?.pause_collection)?.length\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.PausedCollection'|transloco\"\n tooltipPosition=\"top\">\n Paused collection\n </span>\n <span class=\"badge bg-success me-2\"\n *ngIf=\"!product.calculated_price\">\n Free\n </span>\n </div>\n </div>\n <ng-template [ngIf]=\"\n subscription.is_subscription_owner ||\n subscription.is_subscription_admin\n \">\n <!-- Unsubscribe -->\n <button class=\"btn btn-outline-danger btn-sm float-end me-2\"\n *ngIf=\"\n subscription?.stripe_customer_id&&\n !product?.deleted &&\n !product?.trial_subscription\n \"\n (click)=\"attemptUnsubscribe(subscription, product.id)\">\n {{ 'User.Subscriptions.Unsubscribe' | transloco }}\n </button>\n <button class=\"badge bg-dark me-2 float-end\"\n *ngIf=\"product?.product_privacy_service_id\"\n (click)=\"showPrivacyAndTos(product)\">\n {{\n 'User.Subscriptions.PrivacyAndTermsOfService'\n | transloco\n }}\n </button>\n\n <ng-template [ngIf]=\"product.stripe_plan_id && product.active\">\n <!-- Upgrade -->\n <button class=\"btn btn-primary btn-sm me-2 float-end\"\n *ngIf=\"product.trial_subscription && !product.deleted\"\n (click)=\"attemptUpgrade(subscription, product)\">\n {{ 'Button.Upgrade' | transloco }}\n </button>\n <!-- Subscribe -->\n <button class=\"btn btn-primary btn-sm float-start\"\n *ngIf=\"subscription.expired && product.stripe_plan_id\"\n [routerLink]=\"'/account/subscriptions/add-new'\">\n {{ 'User.Subscriptions.Subscribe' | transloco }}\n </button>\n </ng-template>\n </ng-template>\n <div *ngIf=\"!product?.deleted && !subscription.is_subscription_owner\">\n <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i> Invited to\n use this product\n <span *ngIf=\"subscription.is_subscription_admin\"\n class=\"fw-bold\">as an admin</span>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"subscription.products.length === 0\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <p class=\"text-center\">\n No product available for this subscription\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-12\"\n *ngIf=\"!editing && !isAddNew && !isUpdatePayment\">\n <pw-no-data [withImage]=\"true\" message=\"You don't have any subscription.\"\n *ngIf=\"subscribedSubscriptions.length === 0\">\n </pw-no-data>\n </div>\n </div>\n </div>\n </div>\n\n <!--\n Add New Subscription\n -->\n <!-- <ng-template [ngIf]=\"isAddNew && !isUpdatePayment\">\n <pw-subscription-details></pw-subscription-details>\n </ng-template> -->\n <!--\n Validate Password For Account Delete\n -->\n <pw-password-validation #passwordValidationModalForAccountDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n </pw-password-validation>\n <!--\n Validate Password For Display Key\n -->\n <pw-password-validation #passwordValidationModalForKey\n (successEvent)=\"displayApiKey()\">\n </pw-password-validation>\n <!--\n Validate Password For Unsubscribe\n -->\n <pw-password-validation #passwordValidationForUnsubscribe\n (successEvent)=\"onValidatePassword($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n </pw-password-validation>\n <!--\n Cancel Subscription Modal\n -->\n <ng-template #cancelSubscriptionModal let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'User.Subscriptions.CancelSubscription.Title' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss(); reasonToCancel = '';\">\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{ 'User.Subscriptions.CancelSubscription.Message' | transloco }}</p>\n <div class=\"mb-3\">\n <label for=\"reasonToCancel\" class=\"form-label\">\n {{ 'User.Subscriptions.CancelSubscription.ReasonLabel' | transloco }} <span class=\"text-danger\">*</span>\n </label>\n <textarea\n id=\"reasonToCancel\"\n class=\"form-control\"\n rows=\"4\"\n [(ngModel)]=\"reasonToCancel\"\n [ngClass]=\"{'is-invalid': reasonToCancel && reasonToCancel.trim() === ''}\"\n placeholder=\"{{ 'User.Subscriptions.CancelSubscription.ReasonPlaceholder' | transloco }}\"></textarea>\n <div class=\"invalid-feedback\" *ngIf=\"reasonToCancel && reasonToCancel.trim() === ''\">\n {{ 'User.Subscriptions.Validation.ReasonRequired' | transloco }}\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.dismiss(); reasonToCancel = '';\">\n {{ 'User.Subscriptions.CancelSubscription.KeepItForNow' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-danger\"\n [disabled]=\"!reasonToCancel || reasonToCancel.trim() === ''\"\n (click)=\"onConfirmCancel(); modal.close()\">\n {{ 'User.Subscriptions.CancelSubscription.ConfirmButton' | transloco }}\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"showTos\">\n <pw-privacy-and-tos [productId]=\"productId\"></pw-privacy-and-tos>\n</ng-container>\n\n<router-outlet></router-outlet>\n","import { Component, Injector, OnDestroy } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging, POLL_TIMEOUT } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { LazyLoadEvent } from 'primeng/api';\nimport { interval, Subscription } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\n\n@Component({\n selector: 'pw-user-invoice',\n templateUrl: './user-invoice.component.html',\n styleUrls: ['./user-invoice.component.scss'],\n\n standalone: false\n})\nexport class UserInvoiceComponent extends AppBaseComponent implements OnDestroy {\n invoices = [];\n buttonBusy = false;\n userId: number;\n totalRecordsUnFiltered = 0;\n\n searchText = '';\n subscription: Subscription;\n intervalTimer = interval(POLL_TIMEOUT * 60 * 1000);\n isLoaded = false;\n page = 0;\n totalRecords = 0;\n\n invoiceFrequency = ['week', 'month', 'year'];\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.fetchInvoices({\n page: this.page,\n page_size: this.PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private fetchInvoices(paging: Paging) {\n this.isLoaded = false;\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user.id;\n this.userService.getUserInvoices(paging, user.id).subscribe(response => {\n this.isLoaded = true;\n this.invoices = response.invoices;\n this.totalRecords = response.object_count;\n this.totalRecordsUnFiltered = response.unfiltered_count;\n this.pollForInvoices();\n });\n }\n });\n }\n\n private pollForInvoices() {\n this.subscription = this.intervalTimer\n .pipe(mergeMap(() => this.userService.getUserInvoices({}, this.userId)))\n .subscribe(data => {\n this.invoices = data.invoices;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Your Invoices</h2>\n </div>\n</div>\n\n<div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n</div>\n<div class=\"row primeng-datatable-container mt-0\" [class.custom-disable-wrapper]=\"buttonBusy\" [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"col-12 px-0\">\n <p-table #tt\n [value]=\"invoices\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter justify-content-end\">\n <div class=\"text-end\">\n <label for=\"user-invoice-search\" class=\"visually-hidden\">Search Invoices</label>\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input id=\"user-invoice-search\"\n name=\"user-invoice-search\"\n [(ngModel)]=\"searchText\"\n (input)=\"tt.filterGlobal($event.target.value, 'contains')\"\n type=\"text\"\n pInputText\n size=\"50\"\n placeholder=\"Search Invoices...\"\n data-cy=\"incident-search\"\n class=\"wd-90\">\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" pSortableColumn=\"date\">Invoice Date <p-sortIcon field=\"date\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"frequency\">Frequency <p-sortIcon field=\"frequency\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"seatsPurchased\">Seats Purchased <p-sortIcon field=\"seatsPurchased\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"subtotal\">Subtotal <p-sortIcon field=\"subtotal\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"total\">Total (incl. tax) <p-sortIcon field=\"total\"></p-sortIcon></th>\n <th scope=\"col\">Action</th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-invoice>\n <tr>\n <td>{{ invoice.date | date:'dd-MMM-YYYY' }}</td>\n <td>\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: invoiceFrequency,\n item: invoice.product.billing_frequency\n }\"\n color=\"blue-grey\">{{ invoice.product.billing_frequency }}</span>\n </td>\n <td>{{ invoice?.subscription_product?.purchased_units }}</td>\n <td>{{ (invoice.subtotal_in_cents / 100) | currency:invoice?.product?.currency }}</td>\n <td class=\"td-total\">{{ (invoice.total_in_cents / 100) | currency:invoice?.product?.currency }}</td>\n <td>\n <a *ngIf=\"invoice?.file?.url; else noFileUrl\" class=\"btn btn-sm btn-primary\" [attr.href]=\"invoice.file.url\" target=\"_blank\" title=\"Download\">\n <i class=\"fa fa-download\">&nbsp;Download</i>\n </a>\n <ng-template #noFileUrl>\n <a class=\"btn btn-sm btn-primary\" [attr.href]=\"invoice?.stripe_invoice_pdf\" target=\"_blank\" title=\"Download\">\n <i class=\"fa fa-download\">&nbsp;Download</i>\n </a>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n\n <span *ngIf=\"totalRecords !== 0\" class=\"total-records-count\">Total: {{ totalRecords }}</span>\n\n </div>\n</div>\n<pw-no-data [withImage]=\"true\" message=\"You don't have any invoice yet.\" *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n</pw-no-data>\n\n","import { Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, getUser } from '@posiwise/app-store';\nimport { CommonService, ProfileService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\n\nimport { Store } from '@ngrx/store';\n\n@Component({\n selector: 'pw-communication-tab',\n templateUrl: './communication-tab.component.html',\n styleUrl: './communication-tab.component.scss',\n\n standalone: false\n})\nexport class CommunicationTabComponent extends AppBaseComponent implements OnInit {\n subscriptions = [];\n userSubscription = [];\n\n isLoaded = false;\n\n user: User;\n\n constructor(\n private readonly commonService: CommonService,\n private readonly profileService: ProfileService,\n private readonly store: Store<AppState>,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getAllSubscription();\n }\n\n private getAllSubscription() {\n this.commonService.getAllNewsletter().subscribe(response => {\n this.store.select(getUser).subscribe(user => {\n if (user?.currentUser) {\n this.user = user.currentUser;\n this.profileService\n .getUserObject('user_newsletters', this.user.slug)\n .subscribe(newsletter => {\n this.isLoaded = true;\n this.userSubscription = newsletter;\n this.subscriptions = response.newsletters;\n if (this.userSubscription.length > 0 && this.subscriptions.length > 0) {\n this.subscriptions.forEach(element => {\n const item = this.userSubscription?.find(\n x => x.newsletter_id === element.id\n );\n element.enabled = item ? item.send_newsletters : false;\n });\n } else {\n this.subscriptions.forEach(element => {\n element.enabled = false;\n });\n }\n });\n }\n });\n });\n }\n\n onValueChange(item, value) {\n const data = {\n send_newsletter: value\n };\n\n if (item.id === 9999) {\n const marketingSubs = {\n id: this.user.id,\n send_marketing_emails: value\n };\n this.profileService.updateUserProfile(marketingSubs).subscribe(() => {\n this.updateUser();\n this.toast.success(this.translation.translate('User.Settings.UpdatedMessage'));\n });\n } else {\n this.commonService.toggleNewsletter(item.id, data).subscribe(() => {\n this.updateUser();\n this.toast.success(\n this.translation.translate('User.Settings.Communications.UpdatedMessage')\n );\n });\n }\n }\n\n updateUser() {\n // this.userService.getUserInfo().subscribe(resp => {\n // this.localStorage.setItem('user', JSON.stringify(resp)).subscribe();\n // });\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Communication preferences</h2>\n\n <p>\n Although sometimes we do need to communicate with you - for example if you contact\n Support, or if we need to send you a receipt or invoice - we make a clear distinction\n between transactional and non-transactional communications.\n </p>\n\n <p>\n You will always receive the transactional communications but you can decide to opt out\n from all the not transactional ones. To do so, you’ll just need to turn the switch off\n in the list of available communication provided below.\n </p>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n</div>\n\n<div class=\"row mt-4 pt-1\"\n *ngIf=\"isLoaded\">\n <div class=\"col-md-6 col-sm-6\">\n <ng-container *ngFor=\"let item of subscriptions; let idx = index\">\n <div class=\"mb-3\"\n *ngIf=\"item.visible || item.enabled\">\n <div class=\"row\">\n <div class=\"col-md-10 col-sm-6\">\n <label [id]=\"'communication-tab-' + idx\">{{ item.name }}</label>\n </div>\n <div class=\"col-md-2 col-sm-6\">\n <ui-switch [checked]=\"item.enabled\"\n [attr.aria-labelledby]=\"'communication-tab-' + idx\"\n checkedLabel=\"on\"\n uncheckedLabel=\"off\"\n (valueChange)=\"onValueChange(item, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n\n\n<pw-no-data [withImage]=\"true\" message=\"You don't have any communication preferences yet.\" *ngIf=\"subscriptions.length === 0 && isLoaded\">\n</pw-no-data>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-others-tab',\n templateUrl: './others-tab.component.html',\n\n standalone: false\n})\nexport class OthersTabComponent extends AppBaseComponent implements OnInit, OnDestroy {\n subscriptionConfigs = [];\n globalConfigs = [];\n\n userId: number;\n\n isLoaded = false;\n\n constructor(\n private readonly commonService: CommonService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getGlobalConfigs();\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n }\n });\n }\n\n private getGlobalSubscriptionConfig() {\n this.commonService\n .getAllGlobalSubscriptionConfigs()\n .subscribe(response => {\n this.subscriptionConfigs = response.global_subscription_configs;\n this.globalConfigs.forEach(globalConfig => {\n const config = this.subscriptionConfigs?.find(\n subscriptionConfig =>\n subscriptionConfig.global_config_id === globalConfig?.id\n );\n globalConfig.value = config?.value;\n globalConfig.global_subscription_config_id = config?.id;\n });\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n private getGlobalConfigs() {\n this.commonService.getAllGlobalConfigs().subscribe(response => {\n this.globalConfigs = response.global_configs;\n this.getGlobalSubscriptionConfig();\n });\n }\n\n onValueChange(item, value) {\n const data = {\n user_id: this.userId,\n value,\n global_config_id: item?.id\n };\n const sub$ = item?.global_subscription_config_id\n ? this.commonService.editGlobalSubscriptionConfig(\n item?.global_subscription_config_id,\n data\n )\n : this.commonService.postGlobalSubscriptionConfig(data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('User.OtherSettings.UpdatedMessage'));\n }).add(() => {\n this.getGlobalConfigs();\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Other</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"row mt-4 pt-1\"\n *ngIf=\"isLoaded && globalConfigs?.length\">\n <div class=\"col-md-6 col-sm-6\">\n <ng-container *ngFor=\"let item of globalConfigs; let idx = index\">\n <div class=\"mb-3\">\n <div class=\"row\">\n <div class=\"col-md-10 col-sm-6\">\n <label [id]=\"'others-tab-' + idx\"> {{ item?.name }} </label>\n </div>\n <div class=\"col-md-2 col-sm-6\">\n <ui-switch [checked]=\"item.value === 'true'\"\n [attr.aria-labelledby]=\"'others-tab-' + idx\"\n checkedLabel=\"on\"\n uncheckedLabel=\"off\"\n (valueChange)=\"onValueChange(item, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div *ngIf=\"isLoaded && !globalConfigs?.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'User.OtherSettings.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\nimport { StatusCodes } from 'http-status-codes';\n\n@Component({\n selector: 'pw-security-tab',\n templateUrl: './security-tab.component.html',\n styleUrls: ['./security-tab.component.scss'],\n\n standalone: false\n})\nexport class SecurityTabComponent extends AppBaseComponent implements OnInit {\n @ViewChild('password', { static: false }) passwordRef: ElementRef;\n @ViewChild('verificationCode', { static: false }) verificationCode: ElementRef;\n\n @ViewChild('ssoPassword', { static: false }) ssoPasswordRef: ElementRef;\n\n showSSOSection = false;\n ssoPasswordVerified = false;\n isSSOPasswordInvalid = true;\n\n user;\n\n isCurrentPasswordValid = true;\n passwordVerified = false;\n show2FA = false;\n\n created2faDetails: object;\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUser();\n }\n\n private getUser() {\n this.userService.getUserInfo().subscribe(res => {\n this.user = res;\n });\n }\n\n validatePassword() {\n const password = this.passwordRef.nativeElement.value;\n if (password) {\n this.userService.checkPassword({ password }).subscribe({\n next: data => {\n if (data?.status === StatusCodes.OK) {\n if (this.user?.enable_two_factor_authenticator === false) {\n this.passwordVerified = true;\n this.create2FA();\n } else {\n this.disable2FA();\n }\n }\n },\n error: err => {\n if (err) {\n this.toast.error(err.error.message);\n this.passwordRef.nativeElement.value = '';\n }\n }\n });\n }\n }\n\n checkValidity() {\n const password = this.passwordRef.nativeElement.value;\n if (password.length > 5) {\n this.isCurrentPasswordValid = false;\n } else {\n this.isCurrentPasswordValid = true;\n }\n }\n\n private create2FA() {\n this.userService.createTwoFactorAuthenticator().subscribe(res => {\n this.created2faDetails = res;\n });\n }\n\n verify2FA() {\n this.userService\n .verifyTwoFactorAuthenticator(this.verificationCode.nativeElement.value)\n .subscribe(() => {\n this.enable2FA();\n });\n }\n\n private enable2FA() {\n this.userService\n .enableTwoFactorAuthenticator(this.verificationCode.nativeElement.value)\n .subscribe(_ => {\n this.getUser();\n this.reset();\n });\n }\n\n private disable2FA() {\n this.userService.disableTwoFactorAuthenticator().subscribe(_ => {\n this.getUser();\n this.reset();\n });\n }\n\n reset() {\n this.show2FA = false;\n this.isCurrentPasswordValid = true;\n this.passwordVerified = false;\n this.created2faDetails = {};\n }\n\n checkSSOPasswordValidity() {\n const password = this.ssoPasswordRef.nativeElement.value;\n this.isSSOPasswordInvalid = password.length <= 5;\n }\n\n validateSSOPassword() {\n const password = this.ssoPasswordRef.nativeElement.value;\n if (password) {\n this.userService.checkPassword({ password }).subscribe({\n next: data => {\n if (data?.status === StatusCodes.OK) {\n this.ssoPasswordVerified = true;\n }\n },\n error: err => {\n this.toast.error(err.error.message);\n this.ssoPasswordRef.nativeElement.value = '';\n }\n });\n }\n }\n\n triggerSSO() {\n this.userService.sendSSOActivationEmail().subscribe(() => {\n this.toast.success(\n this.user?.cognito_sso_activated\n ? 'Activation email resent successfully.'\n : 'SSO activation email sent successfully.'\n );\n this.getUser();\n this.resetSSO();\n });\n }\n\n resetSSO() {\n this.showSSOSection = false;\n this.ssoPasswordVerified = false;\n this.isSSOPasswordInvalid = true;\n if (this.ssoPasswordRef?.nativeElement) {\n this.ssoPasswordRef.nativeElement.value = '';\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Security settings</h2>\n </div>\n</div>\n<p-accordion>\n <p-accordion-panel value=\"0\">\n <p-accordion-header>Two Factor Authentication (2FA)</p-accordion-header>\n <p-accordion-content>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <div class=\"d-flex\">\n <p class=\"small text-muted\"> Add an extra layer of security to your user account by asking to verify their\n identity when they enter a username and password </p>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <!-- Disable 2FA -->\n <button class=\"btn btn-danger\" *ngIf=\"user?.enable_two_factor_authenticator\" (click)=\"show2FA = true\"> Disable\n </button>\n <!-- Enable 2FA -->\n <button class=\"btn btn-primary\" *ngIf=\"!user?.enable_two_factor_authenticator\"\n [disabled]=\"created2faDetails?.code\" (click)=\"show2FA = true\"> Enable </button>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"show2FA\">\n <div class=\"col-12 col-md-6 col-lg-4 mt-2\">\n <div class=\"mb-3\">\n <input type=\"password\" class=\"form-control\" #password *ngIf=\"!passwordVerified\" placeholder=\"Current Password\"\n (keyup)=\"checkValidity()\" id=\"input_current_password_800\" name=\"input_current_password_800\" />\n </div>\n </div>\n <div *ngIf=\"created2faDetails?.code\" class=\"col-12\">\n <p class=\"small\"> Scan the QR code below or use secret manually with the Google authenticator app on your mobile\n device, after that fill in the field below with the code generated in the app </p>\n <img [src]=\"created2faDetails?.qr_uri\" alt=\"loading QR code...\" class=\"qr-code img-thumbnail img-responsive\" />\n <strong> Secret Key: {{ created2faDetails?.code }}</strong>\n <p class=\"small\">Auth Type: Time Based OTP</p>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"show2FA\">\n <div class=\"col-4\">\n <div class=\"mb-3 mt-2\">\n <input type=\"text\" #verificationCode class=\"form-control\" *ngIf=\"passwordVerified\"\n placeholder=\"Provide passcode from authenticator app\" id=\"input_provide_passcode_from_authenticator_app_800\" name=\"input_provide_passcode_from_authenticator_app_800\" />\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"show2FA\">\n <div class=\"d-flex mt-2\">\n <button class=\"btn btn-raised btn-outline-default me-2\" (click)=\"reset()\"> Cancel </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"!passwordVerified\" (click)=\"validatePassword()\"\n [disabled]=\"isCurrentPasswordValid\"> Validate </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"passwordVerified\" (click)=\"verify2FA()\"> Confirm </button>\n </div>\n </div>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n</p-accordion>\n<p-accordion>\n <p-accordion-panel value=\"0\">\n <p-accordion-header>Single Sign On (SSO) - AWS Cognito</p-accordion-header>\n <p-accordion-content>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <p class=\"small text-muted\"> {{ user?.cognito_sso_activated ? 'You have already activated AWS Cognito SSO, if you click on ‘Resend activation email‘ you‘ll receive an email with instructions to reset your SSO\n password.' : 'Once you click ‘Enable’, you’ll receive an email with instructions to activate your AWS Cognito\n SSO. This will enable you to access all our systems using a single password.' }} </p>\n </div>\n </div>\n <!-- Enable or Resend Button -->\n <div class=\"row\" *ngIf=\"!showSSOSection\">\n <div class=\"col-12\">\n <button class=\"btn btn-primary\" (click)=\"showSSOSection = true\"> {{ user?.cognito_sso_activated ? 'Resend\n activation email' : 'Enable' }} </button>\n </div>\n </div>\n <!-- Password Validation -->\n <div class=\"row\" *ngIf=\"showSSOSection\">\n <div class=\"col-12 col-md-6 col-lg-4 mt-2\" *ngIf=\"!ssoPasswordVerified\">\n <div class=\"mb-3\">\n <input type=\"password\" class=\"form-control\" #ssoPassword placeholder=\"Current Password\"\n (keyup)=\"checkSSOPasswordValidity()\" id=\"input_current_password_800\" name=\"input_current_password_800\" />\n </div>\n </div>\n <div class=\"col-12\">\n <div class=\"d-flex mt-2\">\n <button class=\"btn btn-raised btn-outline-default me-2\" (click)=\"resetSSO()\"> Cancel </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"!ssoPasswordVerified\" (click)=\"validateSSOPassword()\"\n [disabled]=\"isSSOPasswordInvalid\"> Validate </button>\n <button class=\"btn btn-primary\" *ngIf=\"ssoPasswordVerified\" (click)=\"triggerSSO()\"> Confirm </button>\n </div>\n </div>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n</p-accordion>\n","import { Component, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { PermissionService } from '@posiwise/common-services';\n\nimport { MenuItem } from 'primeng/api';\n\n@Component({\n selector: 'pw-settings',\n templateUrl: './settings-tabs.component.html',\n\n standalone: false\n})\nexport class SettingsComponent {\n @ViewChild('menuItems', { static: true }) menu: MenuItem[];\n\n items: MenuItem[];\n activeItem: MenuItem;\n\n constructor(\n private readonly router: Router,\n private readonly permissionService: PermissionService\n ) {\n this.items = [\n {\n id: 'communications',\n label: 'Communications',\n icon: 'fa fa-fw fa-cogs',\n routerLink: ['/settings/communication']\n },\n {\n id: 'security',\n label: 'Security',\n icon: 'fa fa-fw fa-lock',\n routerLink: ['/settings/security']\n },\n {\n id: 'other',\n label: 'Other',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/settings/other']\n }\n ];\n this.activeItem =\n this.items[\n this.items.findIndex(\n record => record.routerLink[0] === this.router.url.split('?')[0]\n )\n ];\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n }\n}\n","<pw-tabs [items]=\"items\"></pw-tabs>\n","import { Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, PermissionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-support',\n templateUrl: './support.component.html',\n styleUrls: ['./support.component.scss'],\n\n standalone: false\n})\nexport class SupportComponent extends AppBaseComponent implements OnInit {\n supports = [];\n\n subscriptionId: number;\n\n isLoading: boolean;\n\n isLoaded = false;\n\n constructor(\n injector: Injector,\n private readonly commonService: CommonService\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.subscriptionId = PermissionService.selectedSubscription?.id;\n this.getAllSupport();\n }\n\n private getAllSupport() {\n this.isLoading = true;\n this.commonService\n .getAllCustomerSupport(this.subscriptionId)\n .subscribe(response => {\n this.supports = response;\n })\n .add(() => {\n this.isLoading = false;\n this.isLoaded = true;\n });\n }\n}\n","<div class=\"row m-3\">\n <div class=\"col-12 mb-3\">\n <div\n\t\tclass=\"col-12 d-flex flex-wrap justify-content-between align-items-center mt-4\">\n\t\t<h2 class=\"card-title p-0 float-start\">Support Center</h2>\n\t\t<a routerLink=\"/support-details/add\"\n\t\t\taria-label=\"Navigate to Target\"\n\t\t\tclass=\"btn btn-sm btn-outline-primary float-end\"\n tabindex=\"0\"\n (keydown)=\"$event.key === 'Enter' && $event.target.click()\"\n\t\t\taria-expanded=\"false\">\n\t\t\t<i class=\"fa fa-plus-circle\"\n\t\t\t\taria-hidden=\"true\"></i>\n Create new support request\n\t\t</a>\n\t</div>\n </div>\n <div class=\"col-12 my-3\">\n <h3>Previous support requests</h3>\n <p>Please note that responses to your support requests are sent directly to your email. You can simply reply to those\n emails for further assistance.</p>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12 mb-3\">\n <p-accordion>\n <p-accordion-panel *ngFor=\"let item of supports; let i = index\" [value]=\"i\">\n <p-accordion-header>{{ item?.created_at | dateFormat }} ({{ item?.user_name }}) {{ item?.title }}</p-accordion-header>\n <p-accordion-content>\n <p>{{ item?.description }}</p>\n <a [href]=\"item?.attachment?.version_200x200?.url\"\n target=\"_blank\">\n <img alt=\"version_200x200\"\n *ngIf=\"item?.attachment?.version_200x200?.url\"\n [src]=\"item?.attachment?.version_200x200?.url\"\n class=\"img-fluid\" /></a>\n </p-accordion-content>\n </p-accordion-panel>\n </p-accordion>\n </div>\n <div class=\"col-12\"\n *ngIf=\"!supports?.length && isLoaded\">\n <pw-no-data [withImage]=\"true\" message=\"No support requests found\"> </pw-no-data>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Injector, OnInit, Renderer2 } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { AppAdmin } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, CommonService, PermissionService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-support-details',\n templateUrl: './support-details.component.html',\n styleUrls: ['./support-details.component.scss'],\n\n standalone: false\n})\nexport class SupportDetailsComponent extends AppBaseComponent implements AfterViewInit, OnInit {\n form: UntypedFormGroup;\n\n uploadedFiles = [];\n\n invalidFile = false;\n isSubmitClicked = false;\n\n siteKey: string;\n\n recaptcha = null;\n\n isLoading: boolean;\n filesUploaded: boolean;\n subscriptionId;\n\n constructor(\n injector: Injector,\n private readonly commonService: CommonService,\n private readonly authService: AuthService,\n private readonly renderer: Renderer2,\n private readonly el: ElementRef\n ) {\n super(injector);\n this.form = AppAdmin.customerSupportForm();\n this.form.get('product_id').setValue(PermissionService.selectedProduct.id);\n this.siteKey = this.appConfig.integrations.captcha_key_V2;\n }\n\n ngOnInit(): void {\n this.subscriptionId = PermissionService.selectedSubscription?.id;\n }\n\n ngAfterViewInit() {\n this.attachCloseButtonListener();\n }\n\n @ValidateForm('form')\n onSave() {\n this.isSubmitClicked = true;\n }\n\n handleSuccess(token: string) {\n if (token) {\n this.authService.validateReCaptcha(token).subscribe((isSuccess: boolean) => {\n if (isSuccess) {\n this.isLoading = true;\n const data = {\n ...this.form.value\n };\n if (this.uploadedFiles.length > 0) {\n data.attachment = this.uploadedFiles[0];\n }\n if (!data.attachment) {\n delete data.attachment;\n }\n this.commonService\n .postCustomerSupport({ ...data, subscription_id: this.subscriptionId })\n .subscribe(() => {\n this.back();\n })\n .add(() => {\n this.isLoading = false;\n this.isSubmitClicked = false;\n });\n }\n });\n }\n }\n\n onSelect(event = null) {\n this.invalidFile = false;\n for (const file of event.files) {\n if (!HelperService.validateFile(file, this.toast)) {\n this.invalidFile = true;\n } else {\n this.uploadedFiles.push(file);\n }\n }\n this.filesUploaded = true;\n\n if (this.invalidFile) {\n setTimeout(() => this.attachCloseButtonListener(), 0);\n }\n }\n\n onRemove(event) {\n this.uploadedFiles = this.uploadedFiles.filter(x => event.file.name !== x.name);\n if (this.uploadedFiles.length === 0) {\n this.filesUploaded = false;\n }\n this.invalidFile = false;\n }\n\n attachCloseButtonListener() {\n const closeButton = this.el.nativeElement.querySelector('.p-message-close');\n\n if (closeButton) {\n this.renderer.listen(closeButton, 'click', () => {\n this.handleCloseButtonClick();\n });\n }\n }\n\n handleCloseButtonClick() {\n this.invalidFile = false;\n this.filesUploaded = false;\n }\n\n onUploadError(event) {\n HelperService.onUploadError(event, this.toast);\n }\n}\n","<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\" (click)=\"back()\" class=\"previous\"><i\n class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">{{ 'Label.NewSupport' | transloco }}</h3>\n </div>\n <div class=\"p-2 m-1 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12\">\n <pw-input-container controlId=\"support-details-title\"\n label=\"title\"\n name=\"title\"\n errorMsg=\"Title is required\">\n <input type=\"text\"\n id=\"support-details-title\"\n class=\"form-control\"\n formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12\">\n <pw-input-container controlId=\"support-details-description\"\n label=\"Description\"\n errorMsg=\"description is required\"\n name=\"description\">\n <textarea rows=\"3\"\n id=\"support-details-description\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <h4 class=\"mt-4\">You can add a picture here</h4>\n <div class=\"mb-3 file-upload-support-details\">\n <label id=\"support-details-file-label\">Upload Picture</label>\n <p-fileUpload #forms\n [attr.aria-labelledby]=\"'support-details-file-label'\"\n name=\"myfile[]\"\n [customUpload]=\"true\"\n [showUploadButton]=\"false\"\n accept=\"image/*\"\n [disabled]=\"uploadedFiles && uploadedFiles.length > 0\"\n (onSelect)=\"onSelect($event)\"\n (onRemove)=\"onRemove($event)\"\n (onError)=\"onUploadError($event)\">\n <ng-template pTemplate=\"content\"\n [ngIf]=\"uploadedFiles?.length\">\n <div class=\"drag-drop-text\" *ngIf=\"!filesUploaded && (!uploadedFiles || uploadedFiles.length === 0)\">\n <p>You can drag and drop your file here</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <ng-container *ngIf=\"isSubmitClicked\">\n <div class=\"support-details-captcha\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"siteKey\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isSubmitClicked\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\" [disabled]=\"invalidFile\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </ng-container>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { FileUpload } from 'primeng/fileupload';\nimport { forkJoin, Observable } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-portfolios',\n templateUrl: './edit-portfolios.component.html',\n styleUrls: ['./edit-portfolios.component.scss'],\n\n standalone: false\n})\nexport class EditPortfoliosComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n @ViewChild('form', { static: false }) uploader: FileUpload;\n\n @Output() successEvent: EventEmitter<boolean> = new EventEmitter();\n\n @Input() id: number;\n @Input() slug: string;\n\n uploadedFiles = [];\n project = [];\n projectPictures = [];\n\n busy: boolean;\n filesUploaded: boolean;\n\n constructor(\n private readonly modalService: NgbModal,\n private readonly profileService: ProfileService\n ) {}\n\n openModal(id: number) {\n this.id = 0;\n this.id = id;\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n onSelect(event = null) {\n // eslint-disable-next-line no-restricted-syntax\n for (const file of event.files) {\n if (HelperService.validateFile(file)) {\n this.uploadedFiles.push(file);\n }\n }\n this.filesUploaded = true;\n }\n\n getProjectPictures() {\n this.profileService.getProjectPictures(this.slug).subscribe(response => {\n if (response.length > 0) {\n this.projectPictures = response.flatMap(x => x.project_pictures);\n }\n });\n }\n\n /**\n * Uploads multiple images for the project\n * @param form\n */\n onSave(form) {\n if (this.uploadedFiles.length > 0) {\n this.busy = true;\n const subscriptions$: Observable<Subscription>[] = [];\n this.uploadedFiles.forEach(file => {\n subscriptions$.push(\n this.profileService.addProjectPictures({\n project_id: Number(this.id),\n image: file\n })\n );\n });\n\n forkJoin(subscriptions$)\n .subscribe({\n next: () => {\n form.clear();\n this.successEvent.emit();\n this.modalService.dismissAll();\n },\n error: () => {\n form.clear();\n this.modalService.dismissAll();\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n }\n\n deleteProjectPicture(id: number) {\n this.profileService.deletePicture(id).subscribe(_ => {\n this.getProjectPictures();\n });\n }\n\n trackByImage(_index: number, item: { id: number }) {\n return item?.id;\n }\n\n onRemove(event) {\n this.uploadedFiles = this.uploadedFiles.filter(x => event.file.name !== x.name);\n this.filesUploaded = false;\n }\n\n onUploadError(event) {\n HelperService.onUploadError(event);\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Add/Edit Portfolio Item</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n Add a cover image or a downloadable file for your portfolio item\n <p-fileUpload #form\n name=\"myfile[]\"\n [customUpload]=\"true\"\n [showUploadButton]=\"false\"\n accept=\"\"\n [disabled]=\"uploadedFiles && uploadedFiles.length > 0\"\n (onSelect)=\"onSelect($event)\"\n (onRemove)=\"onRemove($event)\"\n (onError)=\"onUploadError($event)\">\n <ng-template pTemplate=\"content\"\n [ngIf]=\"uploadedFiles?.length\">\n <div class=\"drag-drop-text\" *ngIf=\"!filesUploaded && (!uploadedFiles || uploadedFiles.length === 0)\">\n <p>You can drag and drop your file here</p>\n </div>\n </ng-template>\n </p-fileUpload>\n <div class=\"ui-fileupload-content ui-widget-content ui-corner-bottom\">\n <div class=\"ui-fileupload-files\">\n <div class=\"\">\n <h5>Uploaded Pictures</h5>\n <div *ngFor=\"let image of projectPictures; trackBy: trackByImage\"\n class=\"ui-fileupload-row d-inline-block\">\n <div>\n <img [src]=\"image?.picture?.version_50x50?.url\"\n alt=\"\"\n width=\"50\" />\n </div>\n <div class=\"pt-1 ps-1\">\n <button icon=\"pi pi-times\"\n type=\"button\"\n (click)=\"deleteProjectPicture(image.id)\"\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only\">\n <span class=\"ui-button-icon-left ui-clickable pi pi-times\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n [buttonBusy]=\"busy\"\n (click)=\"onSave(form)\">\n Save\n </button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService, ValidationService } from '@posiwise/common-services';\nimport { Project } from '@posiwise/common-utilities';\nimport { appendQueryParam, clearQueryParams, ValidateForm } from '@posiwise/utils';\n\nimport moment from 'moment';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-project-modal',\n templateUrl: './edit-project-modal.component.html',\n styleUrls: ['./edit-project-modal.component.scss'],\n\n standalone: false\n})\nexport class EditProjectModalComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Output() cancelEvent: EventEmitter<void> = new EventEmitter();\n @Output() saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n form: UntypedFormGroup;\n\n weeks: number[] = [];\n startYears: number[];\n endYears: number[];\n\n title = 'Add Project';\n\n submitted = false;\n buttonBusy = false;\n\n private currentProject: Project;\n\n userId: number;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n injector: Injector\n ) {\n super(injector);\n this.getForm();\n }\n\n get f() {\n return this.form.controls;\n }\n\n ngOnInit() {\n clearQueryParams(this.router, this.route);\n this.userStore().subscribe(user => {\n this.userId = user.id;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n getStartYear() {\n const d = new Date(`01 July 1980`);\n const range = [];\n for (let i = new Date().getFullYear(); i >= d.getFullYear(); i--) {\n range.push(i);\n }\n this.startYears = range;\n }\n\n getEndYears(start_year) {\n const range = [];\n for (let i = new Date().getFullYear(); i >= start_year; i--) {\n range.push(i);\n }\n this.endYears = range;\n }\n\n private getWeeks() {\n const endYear = moment([this.form.value['end_year']]);\n const startYear = moment([this.form.value['start_year']]);\n if (endYear) {\n const weeks = endYear.diff(startYear, 'weeks');\n this.weeks = Array.from(Array(weeks).keys());\n }\n }\n\n onOpen(item = null) {\n this.currentProject = item;\n appendQueryParam(this.router, this.route, {\n modal: 'editProjects'\n });\n\n if (item) {\n this.form.patchValue(item);\n this.title = `Edit Project - ${item.title}`;\n this.getStartYear();\n this.getEndYears(item.end_year);\n this.getWeeks();\n } else {\n this.form.reset();\n this.title = 'Add Project';\n }\n\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.submitted = true;\n this.buttonBusy = true;\n const { value } = this.form;\n value.user_id = this.userId;\n\n const subscription$ = this.currentProject?.id\n ? this.profileService.updateProjects(this.currentProject.id, value)\n : this.profileService.addProjects(value);\n subscription$\n .subscribe(() => {\n this.modalService.dismissAll();\n this.toast.success(\n this.translation.translate('User.Profile.Projects.ProjectUpdated')\n );\n this.saveEvent.emit(true);\n })\n .add(() => {\n this.submitted = false;\n this.buttonBusy = false;\n });\n }\n\n private getForm() {\n this.form = this.fb.group({\n start_year: [\n null,\n [\n Validators.required,\n Validators.pattern(ValidationService.CustomValidatorPatterns.Year)\n ]\n ],\n end_year: [\n null,\n [\n Validators.required,\n Validators.pattern(ValidationService.CustomValidatorPatterns.Year)\n ]\n ],\n client_name: [null, Validators.required],\n title: [null, Validators.required],\n description: [null, Validators.required],\n length: ['', [Validators.required, Validators.max(5000)]],\n advertisable: [false],\n syndicated: [false]\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <!-- Title -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-title\"\n label=\"Title\"\n name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-project-title\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f.title.errors }\" />\n </pw-input-container>\n <!-- Client Name -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-client_name\"\n label=\"Client Name\"\n name=\"client_name\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-project-client_name\"\n class=\"form-control\"\n formControlName=\"client_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f.client_name.errors }\" />\n </pw-input-container>\n <!-- Project Start Year -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-start_year\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Start\"\n name=\"start_year\"\n errorMsg=\"YYYY format date is required\">\n <p-select\n [attr.aria-labelledby]=\"'edit-project-start_year-label'\"\n (onShow)=\"getStartYear()\"\n formControlName=\"start_year\"\n [options]=\"startYears\"\n [placeholder]=\"'Select Start Year'\"\n (onChange)=\"getEndYears($event.value)\"\n [ngClass]=\"{ 'is-invalid': submitted && f.start_year.errors }\">\n </p-select>\n </pw-input-container>\n <!-- Project End Year -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-end_year\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"End\"\n name=\"end_year\"\n errorMsg=\"YYYY format date is required\">\n <p-select\n [attr.aria-labelledby]=\"'edit-project-end_year-label'\"\n formControlName=\"end_year\"\n [options]=\"endYears\"\n [placeholder]=\"'Select End Year'\"\n (onChange)=\"getEndYears($event.value)\"\n [ngClass]=\"{ 'is-invalid': submitted && f.end_year.errors }\">\n </p-select>\n </pw-input-container>\n <!-- Total Weeks Worked -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-length\"\n label=\"Weeks worked\"\n name=\"length\"\n errorMsg=\"This field is required. (0-5000)\">\n <input type=\"number\"\n id=\"edit-project-length\"\n formControlName=\"length\"\n class=\"form-control\"\n placeholder=\"weeks\"\n [ngClass]=\"{ 'is-invalid': submitted && f.length.errors }\" />\n </pw-input-container>\n <!-- Description -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-description\"\n label=\"Description\"\n name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea type=\"text\"\n id=\"edit-project-description\"\n class=\"form-control\"\n formControlName=\"description\"\n required\n [ngClass]=\"{ 'is-invalid': submitted && f.description.errors }\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { QualificationService } from '@posiwise/common-services';\nimport { appendQueryParam, clearQueryParams, ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-qualifications-modal',\n templateUrl: './edit-qualifications-modal.component.html',\n styleUrls: ['./edit-qualifications-modal.component.scss'],\n\n standalone: false\n})\nexport class EditQualificationsModalComponent extends AppBaseComponent implements OnInit {\n @Output()\n saveEvent: EventEmitter<void> = new EventEmitter();\n\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n title = 'Add Education';\n\n form: UntypedFormGroup;\n\n userId: number;\n\n now: Date = new Date(); // Used for datepicker\n\n minToDate = this.now;\n\n qualifications = [\n { value: 0, label: 'No formal education' },\n { value: 1, label: 'Primary education' },\n { value: 2, label: 'Secondary educ, action or high school' },\n { value: 3, label: 'GED' },\n { value: 4, label: 'Vocational qualification' },\n { value: 5, label: \"Bachelor's degree\" },\n { value: 7, label: \"Master's degree\" },\n { value: 9, label: 'Doctorate or higher' }\n ];\n buttonBusy = false;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly qualificationService: QualificationService,\n injector: Injector\n ) {\n super(injector);\n\n this.form = this.fb.group({\n id: [null],\n school: [null, Validators.required],\n course: [null, Validators.required],\n degree: [null],\n started_on: [null, Validators.required],\n ended_on: [null, Validators.required],\n description: [null],\n points: [null]\n });\n }\n\n ngOnInit() {\n clearQueryParams(this.router, this.route);\n this.userStore().subscribe(response => {\n this.userId = response.id;\n });\n }\n\n onOpen(value = null) {\n appendQueryParam(this.router, this.route, {\n modal: 'editQualifications'\n });\n\n if (value) {\n this.form.patchValue(value);\n this.title = 'Edit Education';\n } else {\n this.form.reset();\n this.title = 'Add Education';\n }\n\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n onDateChange(): void {\n const fromDate = this.form.controls['started_on'].value;\n if (fromDate) {\n this.minToDate = new Date(fromDate);\n this.minToDate.setDate(this.minToDate.getDate() + 1);\n }\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n const data = { ...this.form.value };\n data.user_id = this.userId;\n data.degree = this.qualifications.find(x => x.value === data.points)?.label;\n\n const sub$ = data?.id\n ? this.qualificationService.updateQualifications(data.id, data)\n : this.qualificationService.addQualifications(data);\n\n sub$.subscribe(() => {\n const msg = data.id\n ? this.translation.translate('User.Profile.Qualifications.UpdatedMessage')\n : this.translation.translate('User.Profile.Qualifications.AddedMessage');\n this.toast.success(msg);\n this.saveEvent.emit();\n clearQueryParams(this.router, this.route);\n this.modalService.dismissAll();\n }).add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-school\"\n label=\"School\"\n name=\"school\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-qualifications-school\"\n class=\"form-control\"\n formControlName=\"school\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-qualifications-started_on\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Dates Attended\"\n name=\"started_on\"\n errorMsg=\"This field is required.\">\n <div class=\"ui-fluid\">\n <p-calendar inputId=\"edit-qualifications-started_on\" formControlName=\"started_on\"\n [attr.aria-labelledby]=\"'edit-qualifications-started_on-label'\"\n [monthNavigator]=\"true\"\n [yearNavigator]=\"true\"\n yearRange=\"1950:2020\"\n (onSelect)=\"onDateChange()\"\n [showIcon]=\"true\"\n dateFormat=\"yy-mm-dd\">\n </p-calendar>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-qualifications-ended_on\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Dates Completed\"\n name=\"ended_on\"\n errorMsg=\"This field is required.\">\n <div class=\"ui-fluid\">\n <p-calendar inputId=\"edit-qualifications-ended_on\" formControlName=\"ended_on\"\n [attr.aria-labelledby]=\"'edit-qualifications-ended_on-label'\"\n [monthNavigator]=\"true\"\n [yearNavigator]=\"true\"\n [showIcon]=\"true\"\n (onSelect)=\"onDateChange()\"\n [minDate]=\"minToDate\"\n dateFormat=\"yy-mm-dd\"\n yearRange=\"1950:2025\"></p-calendar>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-points\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Degree\"\n name=\"points\"\n errorMsg=\"This field is required.\">\n <p-select inputId=\"edit-qualifications-points\"\n [options]=\"qualifications\"\n [attr.aria-labelledby]=\"'edit-qualifications-points-label'\"\n placeholder=\"Select\"\n formControlName=\"points\"></p-select>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-course\"\n label=\"Course\"\n name=\"course\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-qualifications-course\"\n class=\"form-control\"\n formControlName=\"course\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-description\"\n label=\"Description\"\n name=\"description\">\n <textarea type=\"text\"\n id=\"edit-qualifications-description\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n\n<i\n class=\"fa fa-lg pi pi-plus-circle float-end mt-2 pt-1 pt-md-0 profile-icons\"\n data-cy=\"add-qualification\"\n (keydown.enter)=\"onOpen()\"\n aria-label=\"Add Qualification\"\n (click)=\"onOpen()\"\n aria-hidden=\"true\"\n></i>\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { Project, User } from '@posiwise/common-utilities';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-recommendation-modal',\n templateUrl: './edit-recommendation-modal.component.html',\n\n standalone: false\n})\nexport class EditRecommendationModalComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() user: User;\n\n form: UntypedFormGroup;\n\n title = 'Endorse';\n\n buttonBusy = false;\n\n project = new Project();\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService\n ) {\n this.form = this.fb.group({\n project_id: [null],\n user_id: [null],\n description: [null, Validators.required],\n quality: [null],\n time: [null],\n communication: [null]\n });\n }\n\n onOpen(value = null) {\n if (value) {\n this.project = value;\n }\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n const data = {\n user_id: this.user.id,\n project_id: this.project.id,\n description: this.form.get('description').value,\n quality: this.form.get('quality').value,\n time: this.form.get('time').value,\n communication: this.form.get('communication').value\n } as object;\n\n this.profileService\n .postProjectRecommendation(data)\n .subscribe(_ => {\n this.modalService.dismissAll();\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-quality\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Quality\"\n name=\"quality\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"quality\"\n [attr.aria-labelledby]=\"'edit-recommendation-quality-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-communication\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Communication\"\n name=\"communication\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"communication\"\n [attr.aria-labelledby]=\"'edit-recommendation-communication-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-time\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Time\"\n name=\"time\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"time\"\n [attr.aria-labelledby]=\"'edit-recommendation-time-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-recommendation-description\"\n label=\"Description\"\n name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea type=\"text\"\n id=\"edit-recommendation-description\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n\n<!-- <i class=\"fal fa-plus-circle fa-2x btn-link float-end btn-add\" (click)=\"onOpen()\" aria-hidden=\"true\"></i> -->\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { TAG_ENTITY, TAG_TYPE } from '@posiwise/common-utilities';\nimport { appendQueryParam, clearQueryParams } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-skills-modal',\n templateUrl: './edit-skills-modal.component.html',\n\n standalone: false\n})\nexport class EditSkillsModalComponent extends AppBaseComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input()\n userId: number;\n\n @Input()\n slug: string;\n\n @Input()\n entityType = TAG_TYPE.SKILLS;\n\n @Input()\n entityEntity = TAG_ENTITY.USER;\n\n @Output()\n saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n allSkills = [];\n\n searchSkills = [];\n\n selectedSkills = [];\n\n constructor(\n private readonly modalService: NgbModal,\n private readonly tagService: TagService,\n injector: Injector\n ) {\n super(injector);\n }\n\n open() {\n this.getSkills();\n this.modalService.open(this.content, { centered: true, windowClass: 'modal-holder' });\n appendQueryParam(this.router, this.route, {\n modal: 'editskills'\n });\n }\n\n /**\n * Populate all the skills for the dropdown\n */\n private getSkills() {\n this.tagService.getTagsByType('skills', {}).subscribe(response => {\n this.allSkills = response.tags;\n this.getEntitySkills();\n });\n }\n\n /**\n * Skills Search\n * @param event: keyword to search\n */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.allSkills.filter(x =>\n x.name.toLowerCase().includes(event.query.toLowerCase())\n );\n } else {\n this.allSkills.forEach(item => {\n data.push(item);\n });\n }\n this.searchSkills = data;\n }\n\n close(modal) {\n modal.close();\n this.selectedSkills = [];\n }\n\n private getEntitySkills() {\n this.tagService\n .getTagsByEntity(this.slug, this.entityEntity, this.entityType)\n .subscribe(response => {\n this.selectedSkills = this.allSkills.filter(item => {\n return response.tags.find(x => x.id === item.id);\n });\n });\n }\n\n saveUserSkills() {\n const skills = [];\n this.selectedSkills.forEach(element => {\n skills.push({\n tag_id: element.id,\n rank: element.id,\n years: 0,\n preferred: true\n });\n });\n\n const postData = {\n entity_tags: skills,\n user_id: Number(this.userId),\n slug: this.slug,\n tag_entity: this.entityEntity\n };\n\n this.tagService.addTags(postData).subscribe(() => {\n this.saveEvent.emit(true);\n this.toast.success(this.translation.translate('User.Profile.Skills.UpdatedMessage'));\n clearQueryParams(this.router, this.route);\n this.modalService.dismissAll();\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">My Skills</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"ui-fluid skills-modal skills-dropdown\">\n <p-autoComplete [(ngModel)]=\"selectedSkills\"\n [suggestions]=\"searchSkills\"\n dataKey=\"id\"\n field=\"name\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [minLength]=\"1\"\n [maxlength]=\"10\"\n placeholder=\"Skills\"\n [dropdown]=\"true\"\n [multiple]=\"true\"></p-autoComplete>\n\n <small class=\"p-2\">Select up to 10 skills.</small>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"close(modal)\">Cancel</button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveUserSkills()\">Save</button>\n </div>\n</ng-template>\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext, ValidationError } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-social-links',\n templateUrl: './edit-social-links.component.html',\n\n standalone: false\n})\nexport class EditSocialLinksComponent extends AppBaseComponent implements OnInit {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() links: Record<string, string> = {};\n @Input() userId: number;\n\n @Output() saveEvent: EventEmitter<void> = new EventEmitter();\n\n form: UntypedFormGroup;\n\n buttonBusy = false;\n\n constructor(\n injector: Injector,\n private readonly modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n this.form = this.fb.group({\n user_id: 0,\n youtube: ['', this.urlValidator('youtube')],\n skype: ['', this.urlValidator('skype')],\n linkedin: ['', this.urlValidator('linkedin')],\n twitter: ['', this.urlValidator('twitter')],\n instagram: ['', this.urlValidator('instagram')],\n facebook: ['', this.urlValidator('facebook')],\n stackoverflow: ['', this.urlValidator('stackoverflow')],\n github: ['', this.urlValidator('github')],\n bitbucket: ['', this.urlValidator('bitbucket')],\n gitlab: ['', this.urlValidator('gitlab')]\n });\n }\n\n private urlValidator(social: string): ValidatorFn {\n return (control: AbstractControl): ValidationError | null => {\n const url = `https://www.${social}`;\n const url2 = `https://${social}`;\n if (control.value) {\n const valid = control.value.includes(url) || control.value.includes(url2);\n\n return valid ? null : { urlMalformed: { value: control.value } };\n }\n\n return null;\n };\n }\n\n ngOnInit() {\n this.form.patchValue(this.links);\n }\n\n onOpen(links) {\n this.links = links;\n this.form.patchValue(this.links);\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n this.form.patchValue({\n user_id: this.userId\n });\n this.profileService\n .postLinks(this.form.value)\n .subscribe(_ => {\n this.toast.success(\n this.translation.translate('User.Profile.SocialLinks.AddedMessage')\n );\n this.modalService.dismissAll();\n this.saveEvent.emit();\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Tell us your external portfolio</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\"\n class=\"p-sm-3\"\n (ngSubmit)=\"onSaveDetail()\">\n <div>\n <p>\n Please tell us where we can find more information about you or about your\n work/projects. This will impact your ranking on the site.\n </p>\n </div>\n\n <div class=\"row mt-0\">\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-linkedin\"><img src=\"/assets/img/icons/social/linkedin.svg\"\n width=\"20\"\n alt=\"\" />\n LinkedIn</label>\n <input type=\"url\"\n id=\"external-portfolio-linkedin\"\n name=\"linkedin\"\n formControlName=\"linkedin\"\n class=\"form-control\"\n placeholder=\"https://linkedin.com/in/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-twitter\"><img src=\"/assets/img/icons/social/twitter.svg\"\n width=\"20\"\n alt=\"\" />\n Twitter</label>\n <input type=\"url\"\n id=\"external-portfolio-twitter\"\n name=\"twitter\"\n formControlName=\"twitter\"\n class=\"form-control\"\n placeholder=\"https://twitter.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-facebook\"><img src=\"/assets/img/icons/social/facebook.svg\"\n width=\"20\"\n alt=\"\" />\n Facebook</label>\n <input type=\"url\"\n id=\"external-portfolio-facebook\"\n name=\"facebook\"\n formControlName=\"facebook\"\n class=\"form-control\"\n placeholder=\"https://www.facebook.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-youtube\"><img src=\"/assets/img/icons/social/youtube.svg\"\n width=\"20\"\n alt=\"\" />\n YouTube</label>\n <input type=\"url\"\n id=\"external-portfolio-youtube\"\n name=\"youtube\"\n formControlName=\"youtube\"\n class=\"form-control\"\n placeholder=\"https://www.youtube.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-skype\">\n <img src=\"/assets/img/icons/social/skype.svg\"\n width=\"20\"\n alt=\"\" /> Skype\n </label>\n <input type=\"url\"\n id=\"external-portfolio-skype\"\n name=\"skype\"\n formControlName=\"skype\"\n class=\"form-control\"\n placeholder=\"https://www.skype.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-github\"><img src=\"/assets/img/icons/social/github.svg\"\n width=\"20\"\n alt=\"\" />\n Github</label>\n <input type=\"url\"\n id=\"external-portfolio-github\"\n name=\"github\"\n formControlName=\"github\"\n class=\"form-control\"\n placeholder=\"https://github.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-stackoverflow\"><img src=\"/assets/img/icons/social/stackoverflow.svg\"\n width=\"20\"\n alt=\"\" />\n StackOverflow</label>\n <input type=\"url\"\n id=\"external-portfolio-stackoverflow\"\n name=\"stackoverflow\"\n formControlName=\"stackoverflow\"\n class=\"form-control\"\n placeholder=\"http://stackoverflow.com/users/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgxGpAutocompleteDirective } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { GeoService, ProfileService } from '@posiwise/common-services';\nimport { Country } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { map, Observable } from 'rxjs';\n\nimport { NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { EditUser, ModalContext, UserProfile } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-user-profile-modal',\n templateUrl: './edit-user-profile-modal.component.html',\n styleUrl: './edit-user-profile-modal.component.scss',\n\n standalone: false\n})\nexport class EditUserProfileModalComponent extends AppBaseComponent implements OnInit {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() slug: string;\n @Input() user: EditUser;\n\n @Output() saveEvent: EventEmitter<UserProfile> = new EventEmitter<UserProfile>();\n\n @ViewChild('ngxPlaces') placesRef: NgxGpAutocompleteDirective;\n\n form: UntypedFormGroup;\n\n countries$: Observable<Country[]>;\n\n states: Country[] = [];\n buttonBusy = false;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n private readonly geoService: GeoService,\n injector: Injector\n ) {\n super(injector);\n this.form = this.fb.group({\n first_name: [null, Validators.required],\n last_name: [null, Validators.required],\n headline: [null, Validators.required],\n description: [null, Validators.required],\n gender: ['M'],\n phone_number: [null],\n dob: [null, Validators.required],\n website_url: [null],\n country: [null, Validators.required],\n postcode: [null],\n location: [null],\n state: [null, Validators.required],\n province: [null, Validators.required]\n });\n }\n\n ngOnInit() {\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n this.getValues();\n }\n\n getValues() {\n let dobObject: NgbDateStruct;\n\n const userProfile = this.user?.profile;\n if (userProfile) {\n if (userProfile?.country) {\n this.getRegion(userProfile.country);\n }\n if (userProfile?.dob) {\n dobObject = {\n year: Number(userProfile.dob.substring(0, 4)),\n month: Number(userProfile.dob.substring(5, 7)),\n day: Number(userProfile.dob.substring(8, 10))\n };\n\n this.form.patchValue({});\n }\n\n this.form.patchValue(userProfile);\n this.form.patchValue({\n first_name: this.user.first_name,\n last_name: this.user.last_name,\n dob: dobObject || {}\n });\n }\n }\n\n handleAddressChange(_event) {\n this.form.patchValue({\n latitude: _event.geometry.location.lat(),\n longitude: _event.geometry.location.lng(),\n location: _event.formatted_address\n });\n }\n\n onOpen() {\n this.form.reset();\n this.getValues();\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n getRegion(countryId) {\n if (countryId) {\n this.geoService.getRegions(countryId).subscribe(response => {\n this.states = [{ code: 0, name: 'Select State' }, ...response];\n });\n }\n }\n\n onSaveDetail() {\n this.form.patchValue({ province: this.form.value.state });\n this.save();\n }\n\n @ValidateForm('form')\n save() {\n this.buttonBusy = true;\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n\n this.profileService\n .updateUserProfile(data)\n .subscribe(response => {\n if (response.id) {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n this.modalService.dismissAll();\n this.saveEvent.emit(response);\n }\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Edit Intro</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSaveDetail()\">\n <div class=\"row\">\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-first-name\"\n label=\"First Name\"\n name=\"first_name\"\n errorMsg=\"Please enter first Name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"edit-intro-first-name\"\n autocomplete=\"given-name\" name=\"input_first_name_1\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-last-name\"\n label=\"Last Name\"\n name=\"last_name\"\n errorMsg=\"Please enter last Name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"edit-intro-last-name\"\n autocomplete=\"family-name\" name=\"input_last_name_2\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-intro-headline\"\n label=\"Headline\"\n name=\"headline\"\n errorMsg=\"Please enter headline\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"edit-intro-headline\" name=\"input_headline_3\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-intro-description\"\n label=\"About me\"\n name=\"description\"\n errorMsg=\"Please enter description\">\n <textarea class=\"form-control\"\n id=\"edit-intro-description\"\n name=\"description\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-gender\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Gender\"\n name=\"gender\"\n errorMsg=\"Please enter Gender\">\n <p-selectButton [options]=\"[\n { label: 'Male', value: 'M' },\n { label: 'Female', value: 'F' }\n ]\"\n [attr.aria-labelledby]=\"'edit-intro-gender-label'\"\n formControlName=\"gender\"></p-selectButton>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-dob\"\n label=\"Date of Birth\"\n name=\"dob\"\n errorMsg=\"Please enter date of birth\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"edit-intro-dob\"\n name=\"dob\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ year: 1950, month: 1, day: 1 }\"\n [maxDate]=\"{ year: 2018, month: 12, day: 31 }\"\n autocomplete=\"off\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-phone\"\n label=\"Phone\"\n name=\"phone_number\"\n errorMsg=\"Please enter phone\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"phone_number\"\n id=\"edit-intro-phone\"\n name=\"phone_number\"\n autocomplete=\"tel\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-postcode\"\n label=\"Postcode\"\n name=\"postcode\"\n errorMsg=\"Please enter postcode\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"postcode\"\n id=\"edit-intro-postcode\"\n autocomplete=\"postal-code\" name=\"input_postcode_6\"/>\n </pw-input-container>\n\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-country\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Country\"\n name=\"country\"\n errorMsg=\"Please select a country\">\n\n <p-select\n [attr.aria-labelledby]=\"'edit-intro-country-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country\"\n (onChange)=\"getRegion($event.value)\"\n placeholder=\"{{ 'User.Profile.SelectCountry' | transloco }}\">\n </p-select>\n\n </pw-input-container>\n </ng-container>\n\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-state\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"State\"\n name=\"state\"\n errorMsg=\"Please select a state\">\n <p-select\n [attr.aria-labelledby]=\"'edit-intro-state-label'\"\n [options]=\"states\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"state\"\n [placeholder]=\"'User.Profile.SelectState' | transloco\">\n </p-select>\n </pw-input-container>\n\n <!-- Location -->\n <pw-input-container label=\"Location\"\n class=\"col-12 col-md-6\"\n controlId=\"edit-intro-location\"\n [useAriaLabelledbyOnly]=\"true\"\n name=\"location\">\n <input ngx-gp-autocomplete\n id=\"edit-intro-location\"\n name=\"location\"\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n [attr.aria-labelledby]=\"'edit-intro-location-label'\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-website\"\n label=\"Website\"\n name=\"website_url\"\n errorMsg=\"Please enter Website\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"website_url\"\n id=\"edit-intro-website\"\n autocomplete=\"url\" name=\"input_website_url_8\"/>\n </pw-input-container>\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"modal.close()\"\n value=\"Cancel\" id=\"input_field_9\" name=\"input_field_9\"/>\n <input type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n value=\"Save Changes\" id=\"input_field_10\" name=\"input_field_10\"/>\n </div>\n </form>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService, QualificationService, TagService } from '@posiwise/common-services';\nimport { TAG_ENTITY, TAG_TYPE, User } from '@posiwise/common-utilities';\n\nimport { forkJoin, Subscription } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport {\n AboutUserProfile,\n Qualification,\n Skill\n} from '../../shared/interface/user-module.interface';\nimport { EditQualificationsModalComponent } from '../edit-qualifications-modal/edit-qualifications-modal.component';\nimport { EditSkillsModalComponent } from '../edit-skills-modal/edit-skills-modal.component';\nimport { EditSocialLinksComponent } from '../edit-social-links/edit-social-links.component';\nimport { EditUserProfileModalComponent } from '../edit-user-profile-modal/edit-user-profile-modal.component';\n\n@Component({\n selector: 'pw-user-about',\n templateUrl: './user-about.component.html',\n styleUrls: ['./user-about.component.scss'],\n\n standalone: false\n})\nexport class UserAboutComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @Input() user: User;\n @Input() isEdit = false;\n\n @Output()\n saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n @ViewChild(EditUserProfileModalComponent, { static: false })\n modal: EditUserProfileModalComponent;\n\n @ViewChild(EditQualificationsModalComponent, { static: false })\n qualificationModal: EditQualificationsModalComponent;\n\n @ViewChild(EditSkillsModalComponent, { static: false })\n skillsModal: EditSkillsModalComponent;\n\n @ViewChild(EditSocialLinksComponent, { static: false })\n socialModal: EditSocialLinksComponent;\n\n private readonly navigationSubscription: Subscription;\n\n allSkills = [];\n\n searchSkills = [];\n\n selectedSkills: Skill[];\n\n objectKeys = Object.keys;\n\n user_profile: AboutUserProfile;\n\n qualifications: Qualification[] = [];\n\n userLinks: Record<string, string> = {};\n\n noUserLinks: boolean;\n\n loading = false;\n\n constructor(\n private readonly profileService: ProfileService,\n private readonly qualificationService: QualificationService,\n private readonly tagService: TagService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserDetails();\n this.getSkills();\n }\n\n getUserDetails() {\n this.loading = true;\n forkJoin({\n user_profile: this.profileService.getUserObject('user_profile', this.user.slug),\n qualifications: this.profileService.getUserObject('qualifications', this.user.slug),\n user_links: this.profileService.getUserObject('user_link', this.user.slug),\n user_skills: this.tagService.getGroupedSkills(\n this.user.slug,\n TAG_ENTITY.USER,\n TAG_TYPE.SKILLS\n )\n }).subscribe({\n next: response => {\n this.user_profile = response.user_profile;\n this.user['profile'] = response.user_profile;\n this.qualifications = response.qualifications;\n this.userLinks = response.user_links || [];\n this.noUserLinks = Object.values(this.userLinks).some(x => !!x);\n this.selectedSkills = response.user_skills;\n this.loading = false;\n },\n error: err => {\n this.loading = false;\n this.toast.showToast(err);\n },\n complete: () => {\n this.loading = false;\n }\n });\n }\n\n /**\n * Populate all the skills for the dropdown\n */\n private getSkills() {\n this.tagService.getTagsByType('skills', {}).subscribe(response => {\n this.allSkills = response.skills;\n });\n }\n\n onProfileOpen() {\n this.modal.onOpen();\n }\n\n openSkills() {\n this.skillsModal.open();\n }\n\n onProfileSaved(_event) {\n this.getUserDetails();\n this.saveEvent.emit();\n }\n\n onOpenSocial() {\n if (this.socialModal) {\n this.socialModal.onOpen(this.userLinks); // Pass userLinks to the modal\n }\n }\n\n editQualification(item) {\n this.qualificationModal.onOpen(item);\n }\n\n deleteQualification(item) {\n swal.fire({\n title: 'Delete',\n html: `Are you sure you want to delete <strong>${item.degree}</strong>?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.qualificationService.deleteQualifications(item.id).subscribe(() => {\n this.toast.success(\n this.translation.translate(\n 'User.Profile.Qualifications.QualificationDelete'\n )\n );\n this.getUserDetails();\n });\n }\n });\n }\n\n onSaveUserLinks() {\n this.getUserDetails();\n }\n\n trackByQualification(_index: number, item: { id: number }) {\n return item.id;\n }\n\n override ngOnDestroy() {\n // avoid memory leaks here by cleaning up after ourselves. If we\n // don't then we will continue to run our initialiseInvites()\n // method on every navigationEnd event.\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <div data-cy=\"personal-info\">\n <h2 class=\"\">Personal Information</h2>\n <ng-container *ngIf=\"user && isEdit\">\n <i\n class=\"profile-icons fa fa-lg fa-user-edit float-end mt-3 pt-1 pt-md-0\"\n (click)=\"onProfileOpen()\"\n (keydown.enter)=\"onProfileOpen()\"\n aria-label=\"Open Profile\"\n aria-hidden=\"true\"\n ></i>\n <pw-edit-user-profile-modal [user]=\"user\"\n (saveEvent)=\"onProfileSaved($event)\"\n [slug]=\"user?.slug\">\n </pw-edit-user-profile-modal>\n </ng-container>\n </div>\n <div>\n <div class=\"my-3\">\n <span class=\"profile-label\">About Me:</span>\n <span class=\"display-block overflow-hidden\">{{ user_profile?.description || 'No description has been added yet.' }}\n </span>\n </div>\n <hr />\n <div class=\"row mt-0 my-0\">\n <div class=\"col-6 col-sm-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"icon-present font-small-3\" aria-hidden=\"true\"></i>\n Birthday:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.dob | dateFormat\n }}</span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-globe font-small-3\" aria-hidden=\"true\"></i> Lives\n in:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.country\n }}</span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-monitor font-small-3\" aria-hidden=\"true\"></i>\n Website:</span>\n <a class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.website_url\n }}</a>\n </li>\n </ul>\n </div>\n <div class=\"col-6 col-sm-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-user font-small-3\" aria-hidden=\"true\"></i>\n Gender:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{\n user_profile?.gender === 'M'\n ? 'Male'\n : user_profile?.gender === 'F'\n ? 'Female'\n : ''\n }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-mail font-small-3\" aria-hidden=\"true\"></i>\n Email:</span>\n <a class=\"display-block overflow-hidden pt-2\">{{ user?.email }}</a>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-smartphone font-small-3\" aria-hidden=\"true\"></i> Phone\n Number:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.phone_number\n }}</span>\n </li>\n </ul>\n </div>\n <div class=\"col-6 col-md-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-book font-small-3\" aria-hidden=\"true\"></i>\n Joined:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user?.joined_at | dateFormat\n }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <hr />\n <div data-cy=\"skills-info\"\n class=\"mt-4\">\n <h2 class=\"\">Skills</h2>\n <div class=\"float-end\"\n *ngIf=\"isEdit\">\n <i\n class=\"profile-icons fa fa-lg fa-edit float-end mt-3 pt-1 pt-md-0\"\n (click)=\"openSkills()\"\n (keydown.enter)=\"openSkills()\"\n aria-label=\"Open Skills\"\n aria-hidden=\"true\"\n ></i>\n <pw-edit-skills-modal [userId]=\"user?.id\"\n [slug]=\"user?.slug\"\n (saveEvent)=\"getUserDetails()\">\n </pw-edit-skills-modal>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"mb-4\"\n *ngIf=\"selectedSkills?.length === 0\">\n {{\n isEdit\n ? \"You haven't selected any skills yet. Please add some.\"\n : 'No skills added.'\n }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"ui-fluid\">\n <span class=\"\"\n *ngFor=\"let skill of selectedSkills\">\n <span class=\"my-2 me-3\">{{ skill.category_name }}</span>\n <span *ngFor=\"let item of skill.tags\"\n class=\"badge bg-success me-2 mb-2\">{{ item.name }}\n </span>\n <br />\n </span>\n </div>\n <hr />\n <div data-cy=\"educational-info\">\n <div class=\"\">\n <h2 class=\"\">Educational Information</h2>\n <div class=\"float-end\"\n *ngIf=\"isEdit\">\n <pw-edit-qualifications-modal (saveEvent)=\"getUserDetails()\">\n </pw-edit-qualifications-modal>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6 col-12 mb-4\"\n [ngClass]=\"{ editable: isEdit }\"\n *ngFor=\"let item of qualifications; trackBy: trackByQualification\">\n <div class=\"mb-2\">\n <div class=\"float-start\">\n <h4>{{ item?.school }}</h4>\n <ul class=\"no-list-style\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-clock font-small-3\" aria-hidden=\"true\"></i>\n Period:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.started_on }} - {{ item?.ended_on }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-feather font-small-3\" aria-hidden=\"true\"></i>\n Degree:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.degree }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-octagon font-small-3\" aria-hidden=\"true\"></i>\n Course:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.course }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"float-end action\"\n *ngIf=\"isEdit\">\n <span class=\"fa-stack\">\n <i\n class=\"fa fa-lg fa-edit fa-stack-1x me-3 profile-icons\"\n title=\"Edit\"\n (keydown.enter)=\"editQualification(item)\"\n aria-label=\"Edit Qualification\"\n (click)=\"editQualification(item)\"\n aria-hidden=\"true\"\n ></i>\n </span>\n <span class=\"fa-stack\">\n <i\n class=\"fa fa-lg fa-trash fa-stack-1x delete-icon\"\n data-cy=\"delete-qualification\"\n title=\"Delete\"\n aria-label=\"Delete Qualification\"\n (keydown.enter)=\"deleteQualification(item)\"\n (click)=\"deleteQualification(item)\"\n aria-hidden=\"true\"\n ></i>\n </span>\n </div>\n </div>\n </div>\n <div class=\"col-lg-6 col-12 mb-4\"\n *ngIf=\"qualifications && qualifications.length === 0\">\n {{\n isEdit\n ? ' No qualification yet. Please add some.'\n : 'No qualifications added.'\n }}\n </div>\n </div>\n </div>\n <hr />\n <!-- External Portfolio -->\n <div data-cy=\"portfolio-info\"\n class=\"mt-4\">\n <div class=\"\">\n <h2 class=\"\">External Portfolio</h2>\n <i\n class=\"fa fa-lg fa-edit profile-icons float-end mt-3 pt-1 pt-md-0\"\n *ngIf=\"isEdit\"\n (click)=\"onOpenSocial()\"\n aria-label=\"Edit external portfolio\"\n (keydown)=\"($event.key === 'Enter' ? onOpenSocial() : null)\"\n title=\"Edit External Portfolio\"\n ></i>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-12 mb-4\">\n <div *ngIf=\"userLinks\">\n <ng-container *ngFor=\"let link of objectKeys(userLinks)\">\n <a target=\"_blank\"\n rel=\"noopener noreferrer\"\n [href]=\"userLinks[link]\"\n *ngIf=\"userLinks[link]\">\n <img src=\"assets/img/icons/social/{{ link }}.svg\"\n class=\"me-2\"\n width=\"40\"\n alt=\"\" />\n </a>\n </ng-container>\n </div>\n <div class=\"row\">\n <ng-container *ngIf=\"user\">\n <pw-edit-social-links [userId]=\"user.id\"\n [links]=\"userLinks\"\n (saveEvent)=\"onSaveUserLinks()\">\n </pw-edit-social-links>\n </ng-container>\n <div class=\"col-12 mb-4\"\n *ngIf=\"!noUserLinks\">\n {{\n isEdit\n ? 'No external portfolio yet. Please add some.'\n : 'No portfolio added.'\n }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"loading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-portfolios',\n templateUrl: './user-portfolios.component.html',\n styleUrls: ['./user-portfolios.component.scss'],\n\n standalone: false\n})\nexport class PortfoliosComponent implements OnInit {\n @Input() user: User;\n @Input() isEdit = false;\n\n projectPictures = [];\n\n selectedPicURL: string;\n\n isLoaded = false;\n\n constructor(\n private readonly service: ProfileService,\n private readonly modalService: NgbModal\n ) {}\n\n ngOnInit() {\n this.getProjectPictures();\n }\n\n private getProjectPictures() {\n this.service.getProjectPictures(this.user.slug).subscribe(response => {\n if (response.length > 0) {\n this.projectPictures = response.flatMap(x => x.project_pictures);\n }\n this.isLoaded = true;\n });\n }\n\n deletePicture(id) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.service.deletePicture(id).subscribe(_ => {\n this.getProjectPictures();\n });\n }\n });\n }\n\n trackByImage(_index: number, item: { id: number }) {\n return item.id;\n }\n\n showFullImage(picture, content, evt) {\n if ($(evt.target).attr('id') !== 'delete-icon') {\n this.selectedPicURL = picture.picture.url;\n this.modalService.open(content, {\n centered: true,\n size: 'lg',\n windowClass: 'img-popup'\n });\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <h2>User's Portfolio</h2>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <pw-no-data [withImage]=\"true\" message=\"No portfolio listed yet - please consider adding some.\"\n *ngIf=\"projectPictures.length === 0 && isLoaded\"></pw-no-data>\n <div class=\"card-body\">\n <div class=\"card-block\"\n *ngIf=\"projectPictures.length\">\n <div class=\"grid-hover\">\n <div class=\"row\">\n <div class=\"col-md-4 col-12 mb-2\"\n *ngFor=\"let picture of projectPictures; trackBy: trackByImage\">\n <figure class=\"effect-marley\"\n (keydown.enter)=\"showFullImage(picture, content, $event)\"\n (click)=\"showFullImage(picture, content, $event)\">\n <img [src]=\"picture.picture.url\"\n alt=\"project pic\" />\n <figcaption>\n <h2>\n <span class=\"portfolio-header-text\">{{ picture.project_title }}</span>\n </h2>\n <i\n class=\"fal fa-2x fa-times white\"\n id=\"delete-icon\"\n (click)=\"deletePicture(picture.id)\"\n (keydown.enter)=\"deletePicture(picture.id)\"\n *ngIf=\"isEdit\"\n aria-hidden=\"true\"\n ></i>\n <p class=\"thumb-description\">\n {{ picture?.project_description }}\n </p>\n </figcaption>\n </figure>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-img-popup\">\n <img alt=\"Selected Url\"\n [src]=\"selectedPicURL\"\n class=\"img-fluid\" />\n <button type=\"button\"\n class=\"close close-img\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\">\n <span class=\"btn\">&times;</span>\n </button>\n </div>\n</ng-template>\n","import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { Project, User } from '@posiwise/common-utilities';\n\nimport swal from 'sweetalert2';\n\nimport { EditPortfoliosComponent } from '../edit-portfolios/edit-portfolios.component';\nimport { EditProjectModalComponent } from '../edit-project-modal/edit-project-modal.component';\nimport { EditRecommendationModalComponent } from '../edit-recommendation-modal/edit-recommendation-modal.component';\nimport { EditSkillsModalComponent } from '../edit-skills-modal/edit-skills-modal.component';\n\n@Component({\n selector: 'pw-user-projects',\n templateUrl: './user-projects.component.html',\n styleUrls: ['./user-projects.component.scss'],\n\n standalone: false\n})\nexport class UserProjectsComponent extends AppBaseComponent implements OnInit {\n @Input() user: User;\n @Input() isEdit = false;\n\n @ViewChild(EditProjectModalComponent, { static: true })\n projectModal: EditProjectModalComponent;\n\n @ViewChild(EditSkillsModalComponent, { static: false })\n skillModal: EditSkillsModalComponent;\n\n @ViewChild(EditRecommendationModalComponent, { static: true })\n recommendationModal: EditRecommendationModalComponent;\n\n @ViewChild(EditPortfoliosComponent, { static: false })\n portfolios: EditPortfoliosComponent;\n\n projects: Project[] = [];\n\n submitted: boolean;\n\n isLoaded = false;\n\n constructor(\n private readonly service: ProfileService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getProjects();\n }\n\n onEditProject(item) {\n this.projectModal.onOpen(item);\n }\n\n editRecommendation(item) {\n this.recommendationModal.onOpen(item);\n }\n\n openSkills(project) {\n this.skillModal.slug = project.slug;\n this.skillModal.open();\n }\n\n getProjects() {\n this.service.getProjects(this.user?.slug).subscribe(response => {\n this.projects = response.projects;\n this.isLoaded = true;\n });\n }\n\n onSkillsSave() {\n this.getProjects();\n }\n\n onSaveProject(_event) {\n this.getProjects();\n }\n\n openPortfolios(id: number) {\n this.portfolios.openModal(id);\n this.portfolios.getProjectPictures();\n }\n\n onDeleteProject(project) {\n swal.fire({\n title: 'Delete',\n text: `Are you sure you want to delete ${project.title}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.service.deleteProject(project.id).subscribe(() => {\n this.projects = this.projects.filter((x: Project) => x.id !== project.id);\n });\n }\n });\n }\n\n trackByProject(_index: number, item: Project) {\n return item.id;\n }\n\n deletePicture(project) {\n this.service.deletePicture(project.project_pictures[0].id).subscribe(_ => {\n this.getProjects();\n });\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <h2>User's Projects</h2>\n <div class=\"row\"\n *ngIf=\"isEdit\">\n <div class=\"col-12\">\n <div class=\"content-header\">\n <button class=\"btn btn-primary float-end\"\n (click)=\"onEditProject(null)\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{'Create Project' | transloco}}\n </button>\n </div>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div id=\"timeline\"\n class=\"timeline-center timeline-wrapper\"\n *ngIf=\"projects?.length\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let project of projects;\n let i = index;\n let odd = odd;\n let even = even;\n trackBy: trackByProject\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\"\n data-bs-toggle=\"tooltip\"\n data-placement=\"right\"\n title=\"Portfolio project work\">\n <span class=\"timeline-year\"> {{ project.start_year }} </span>\n </span>\n </div>\n <div class=\"timeline-card card shadow rounded border-grey border-lighten-2 pb-0\">\n <div class=\"card-header\">\n <h4 class=\"mb-0 card-title\">\n <a>{{ project.title }}</a>\n </h4>\n <div class=\"card-subtitle text-muted mt-0\">\n <span class=\"font-small-3\">\n {{ project.start_year }} - {{ project.end_year }}</span>\n </div>\n </div>\n <div class=\"card-body project-card\">\n <ng-container *ngIf=\"project.project_pictures?.length\">\n <i\n class=\"fal fa-times\"\n (click)=\"deletePicture(project)\"\n (keydown.enter)=\"deletePicture(project)\"\n aria-hidden=\"true\"\n ></i>\n <img class=\"img-fluid project-picture\"\n [src]=\"project.project_pictures[0].picture.url\"\n alt=\"Project Cover\" />\n </ng-container>\n <div class=\"card-body\">\n <div class=\"\">\n <p class=\"card-text\">{{ project.description }}</p>\n <div class=\"list-inline mb-1\">\n <!-- Skills -->\n <div *ngIf=\"project.tags?.length\">\n <div class=\"my-2\">\n <i class=\"fa fa-user-tag\" aria-hidden=\"true\"></i>\n Skills\n </div>\n <ng-container *ngFor=\"let tag of project.tags\">\n <span class=\"badge bg-success me-2\">{{\n tag.name\n }}</span>\n </ng-container>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"project.project_recommendations?.length\">\n <div class=\"my-2\">\n <i\n class=\"fa fa-clipboard-check me-2\"\n aria-hidden=\"true\"\n ></i>\n Recommendations\n </div>\n <section class=\"mb-2\"\n *ngFor=\"\n let recommendation of project.project_recommendations\n \">\n <div class=\"me-2\">\n Client: {{ recommendation?.client_name }}\n </div>\n <div class=\"me-2\">\n Message: {{ recommendation?.description }}\n </div>\n <div class=\"row recommendation\">\n <div class=\"col-4\">\n <span>Communication</span>\n <p-rating [(ngModel)]=\"\n recommendation.communication\n \"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n <div class=\"col-4\">\n <span>Quality</span>\n <p-rating [(ngModel)]=\"recommendation.quality\"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n <div class=\"col-4\">\n <span>Time</span>\n <p-rating [(ngModel)]=\"recommendation.time\"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n </div>\n </section>\n </div>\n <div class=\"text-end mt-3 d-flex justify-content-end project-actions\"\n *ngIf=\"isEdit\">\n <!-- Project Edit -->\n <span class=\"btn btn-link pb-0 actions\"\n (keydown.enter)=\"onEditProject(project)\"\n (click)=\"onEditProject(project)\">\n Edit\n </span>\n <button class=\"btn btn-link pb-0 actions\"\n (click)=\"openSkills(project)\">\n Skills\n </button>\n <pw-edit-skills-modal [userId]=\"user?.id\"\n entityEntity=\"Project\"\n entityType=\"skills\"\n (saveEvent)=\"onSkillsSave()\"\n [slug]=\"project?.slug\">\n </pw-edit-skills-modal>\n <!-- Portfolios -->\n <button class=\"btn btn-link pb-0 actions\"\n (click)=\"openPortfolios(project.id)\">\n Photos\n </button>\n <pw-edit-portfolios [slug]=\"user?.slug\"\n [id]=\"project.id\"\n (successEvent)=\"getProjects()\">\n </pw-edit-portfolios>\n <span class=\"btn btn-link pb-0 delete-project actions\"\n (keydown.enter)=\"onDeleteProject(project)\"\n (click)=\"onDeleteProject(project)\">\n Delete\n </span>\n </div>\n <!-- Recommendation -->\n <span class=\"pe-1 mt-3\"\n (click)=\"editRecommendation(project)\"\n (keydown.enter)=\"editRecommendation(project)\"\n *ngIf=\"!isEdit\">\n <a class=\"primary\"><span class=\"fa fa-commenting-o\"></span> Endorse\n </a></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"\n isEdit\n ? ('User.Profile.Projects.NoProjects' | transloco)\n : ('User.Profile.Projects.NoUserProjects' | transloco)\n \"\n *ngIf=\"projects?.length === 0 && isLoaded\">\n </pw-no-data>\n </div>\n</div>\n<pw-edit-project-modal (saveEvent)=\"onSaveProject($event)\"></pw-edit-project-modal>\n<pw-edit-recommendation-modal [user]=\"user\"></pw-edit-recommendation-modal>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { ScriptLoaderService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { MenuItem } from 'primeng/api';\nimport { forkJoin } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { UserProfile, UserRelationship } from '../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-user-profile-page',\n templateUrl: './user-profile-page.component.html',\n styleUrls: ['./user-profile-page.component.scss'],\n\n standalone: false\n})\nexport class UserProfilePageComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private loggedInUserDetails: User;\n\n user: User;\n slug: string;\n\n objectKeys = Object.keys;\n\n image = 'assets/img/icons/male.png';\n\n isFollowing: boolean;\n\n isLoaded = false;\n\n userProfile: UserProfile;\n\n items: MenuItem[];\n activeItem: MenuItem;\n /** Current tab value for p-tabs */\n activeTabValue: string;\n\n onTabChange(value: string) {\n const item = this.items.find(i => i.id === value);\n if (item) {\n this.activeItem = item;\n }\n }\n\n constructor(\n injector: Injector,\n private readonly profileService: ProfileService,\n private readonly modalService: NgbModal,\n private readonly scriptLoader: ScriptLoaderService\n ) {\n super(injector);\n this.route.params.subscribe(data => {\n this.slug = data['user-slug'];\n });\n\n this.items = [\n { id: 'about', label: 'About', icon: 'fa fa-fw fa-user' },\n {\n id: 'projects',\n label: 'Projects',\n icon: 'fa fa-fw fa-briefcase',\n state: {\n permission: this.permissionService.evaluatePermissions('Pages.Product.CRM')\n }\n },\n {\n id: 'portfolio',\n label: 'Portfolio',\n icon: 'fa fa-fw fa-image',\n state: {\n permission: this.permissionService.evaluatePermissions('Pages.Product.CRM')\n }\n }\n ];\n [this.activeItem] = this.items;\n this.activeTabValue = this.activeItem?.id as string;\n }\n\n get allowEdit() {\n return (\n this.loggedInUserDetails?.slug === this.slug || this.permissionService.isSuperAdmin()\n );\n }\n\n ngOnInit() {\n this.getUserBySlug();\n // Horizontal Timeline js for user timeline\n this.waitForJQuery(() => {\n this.scriptLoader.loadScript('head', '/assets/js/vertical-timeline.js', true);\n });\n }\n\n handleImageError(event: Event, fallbackPath): void {\n HelperService.handleImageFallbackPath(event, fallbackPath);\n }\n\n private dataURLtoBlob(dataUrl: string) {\n const arr = dataUrl?.split(',');\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n // eslint-disable-next-line no-plusplus\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n openModal(content) {\n if (this.allowEdit) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.userService.addAvatar(file).subscribe(res => {\n this.modalService.dismissAll();\n this.image = res?.user_avatar[2]?.url;\n });\n }\n\n getUserBySlug() {\n forkJoin({\n user: this.profileService.getUserObject('user', this.slug),\n user_profile: this.profileService.getUserObject('user_profile', this.slug),\n avatar: this.profileService.getUserObject('avatar', this.slug)\n }).subscribe({\n next: response => {\n this.user = response.user;\n this.userProfile = response.user_profile;\n if (response.avatar && response.avatar.length > 0) {\n this.image = response?.avatar[2]?.url;\n }\n this.getCurrentUserDetails();\n this.isLoaded = true;\n },\n error: error => {\n if (error.status === StatusCodes.NOT_FOUND) {\n this.router.navigate(['NotFound']);\n }\n }\n });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n private getCurrentUserDetails() {\n this.userStore().subscribe((currentUser: User) => {\n if (currentUser) {\n this.loggedInUserDetails = currentUser;\n\n this.userService\n .getCurrentUserObject('user_relationships')\n .subscribe((response: UserRelationship[]) => {\n this.isFollowing =\n response.length > 0\n ? response.some(\n x =>\n x.followed_id === this.user.id &&\n currentUser.id === x.follower_id\n )\n : false;\n });\n }\n });\n }\n\n sendMessageSlug() {\n this.router.navigate(['/message'], { fragment: this.slug });\n }\n\n followUser() {\n this.userService.followUser(this.user.id).subscribe(response => {\n const name = this.user.first_name || this.user.slug;\n if (response.id) {\n this.isFollowing = true;\n this.toast.success(`You're now following ${name}`);\n } else {\n this.isFollowing = false;\n this.toast.success(`You've unfollowed ${name}`);\n }\n });\n }\n\n private waitForJQuery(callback: () => void): void {\n let attempts = 0;\n const maxAttempts = 100; // 10 seconds max wait time\n\n const checkJQuery = () => {\n if (window['jQuery']) {\n callback();\n } else if (attempts < maxAttempts) {\n attempts++;\n setTimeout(checkJQuery, 100);\n } else {\n // Load jQuery since it's needed\n this.loadJQueryForUserProfile(callback);\n }\n };\n checkJQuery();\n }\n\n private loadJQueryForUserProfile(callback: () => void): void {\n const jquerySrc = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js';\n const script = document.createElement('script');\n script.src = jquerySrc;\n script.crossOrigin = 'anonymous';\n script.async = false;\n script.onload = () => {\n callback();\n };\n script.onerror = () => {\n console.error('Failed to load jQuery for user profile');\n // Try fallback\n const fallbackScript = document.createElement('script');\n fallbackScript.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js';\n fallbackScript.crossOrigin = 'anonymous';\n fallbackScript.async = false;\n fallbackScript.onload = () => {\n callback();\n };\n fallbackScript.onerror = () => {\n console.error('All jQuery CDNs failed for user profile');\n };\n document.head.appendChild(fallbackScript);\n };\n document.head.appendChild(script);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<!-- User Profile Starts -->\n<!-- Basic User Details Starts -->\n<section id=\"user-profile\"\n *ngIf=\"user\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"dashboard\">\n <div class=\"media row py-3 align-items-center\">\n <div class=\"col-3 col-sm-2\">\n <div class=\"align-self-center halfway-fab text-center\">\n <!-- User Avatar -->\n <a class=\"profile-image\">\n <img [src]=\"image\"\n width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"User Male\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\" />\n <div class=\"ms-4 ps-3 ms-sm-0 ps-sm-0 overlay\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n *ngIf=\"allowEdit\">\n <div class=\"overlay-text\">\n <!-- Change Profile Pic -->\n <a aria-label=\"Navigate to Target\">\n {{ 'User.Profile.Change' | transloco }}\n </a>\n </div>\n </div>\n </a>\n </div>\n </div>\n <div class=\"col-9 col-sm-5\">\n <div class=\"align-self-start halfway-fab ps-3 pt-2\">\n <div>\n <strong class=\"font-medium-2 text-uppercase\"\n *ngIf=\"user?.last_name\">\n {{\n user?.first_name\n ? user?.first_name + ' ' + user?.last_name\n : 'Update Profile'\n }}\n </strong>\n <strong class=\"font-medium-2 text-uppercase\"\n *ngIf=\"!user?.last_name\">\n {{ user?.first_name ? user?.first_name : 'Update Profile' }}\n </strong>\n <p class=\"font-small-4\">{{ userProfile?.headline }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-sm-5\">\n <div class=\"profile-cover-buttons\"\n *ngIf=\"!allowEdit\">\n <div class=\"d-flex halfway-fab align-self-end\">\n <div class=\"text-end d-none d-sm-none d-md-none d-lg-block\">\n <button type=\"button\"\n (click)=\"followUser()\"\n class=\"btn btn-outline-primary btn-raised me-2\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n {{ isFollowing ? 'Following' : 'Follow' }}\n </button>\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-3\"\n (click)=\"sendMessageSlug()\">\n <i class=\"fa fa-mail-bulk\" aria-hidden=\"true\"></i> Message\n </button>\n </div>\n <div class=\"text-end d-block d-sm-block d-md-block d-lg-none\">\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-2\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-3\">\n <i class=\"fa fa-mail-bulk\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</section>\n<!-- Basic User Details Ends -->\n<section>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <p-tabs [value]=\"activeTabValue\" (valueChange)=\"onTabChange($event)\">\n <p-tablist>\n <p-tab *ngFor=\"let item of items\" [value]=\"item.id\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span>{{ item.label }}</span>\n </p-tab>\n </p-tablist>\n </p-tabs>\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <ng-template [ngIf]=\"user && activeItem.id === 'about'\">\n <pw-user-about [user]=\"user\"\n [isEdit]=\"allowEdit\"\n (saveEvent)=\"getUserBySlug()\">\n </pw-user-about>\n </ng-template>\n <ng-template [ngIf]=\"activeItem.id === 'projects'\">\n <pw-user-projects [user]=\"user\"\n [isEdit]=\"allowEdit\"></pw-user-projects>\n </ng-template>\n <ng-template [ngIf]=\"activeItem.id === 'portfolio'\">\n <pw-portfolios [user]=\"user\"\n [isEdit]=\"allowEdit\"></pw-portfolios>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ 'User.Profile.ProfilePicture' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n [userAvatar]=\"image\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppConfigService } from '@posiwise/app-config-service';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { SharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { UiSwitchModule } from 'ngx-ui-switch';\nimport { AccordionModule } from 'primeng/accordion';\nimport { CalendarModule } from 'primeng/calendar';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { RatingModule } from 'primeng/rating';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\n\nimport { Loader } from '@googlemaps/js-api-loader';\nimport { NgbDatepickerModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AccountComponent } from './account/account.component';\nimport { AccountDetailsComponent } from './account/account-details/account-details.component';\nimport { AddSubscriptionComponent } from './account/subscriptions/add-subscription/add-subscription.component';\nimport { SavedCardDetailsComponent } from './account/subscriptions/saved-card-details/saved-card-details.component';\nimport { SubscriptionCredentialComponent } from './account/subscriptions/subscription-credential/subscription-credential.component';\nimport { UpdatePaymentDetailsComponent } from './account/subscriptions/update-payment-details/update-payment-details.component';\nimport { UpgradeSubscriptionComponent } from './account/subscriptions/upgrade-subscription/upgrade-subscription.component';\nimport { UserSubscriptionDetailsComponent } from './account/subscriptions/user-subscription-details/user-subscription-details.component';\nimport { UserSubscriptionListComponent } from './account/subscriptions/user-subscriptions-list/user-subscriptions-list.component';\nimport { UserInvoiceComponent } from './account/user-invoice/user-invoice.component';\nimport { CommunicationTabComponent } from './settings-tabs/communication-tab/communication-tab.component';\nimport { OthersTabComponent } from './settings-tabs/others-tab/others-tab.component';\nimport { SecurityTabComponent } from './settings-tabs/security-tab/security-tab.component';\nimport { SettingsComponent } from './settings-tabs/settings-tabs.component';\nimport { SupportComponent } from './support/support.component';\nimport { SupportDetailsComponent } from './support/support-details/support-details.component';\nimport { EditPortfoliosComponent } from './user-profile/edit-portfolios/edit-portfolios.component';\nimport { EditProjectModalComponent } from './user-profile/edit-project-modal/edit-project-modal.component';\nimport { EditQualificationsModalComponent } from './user-profile/edit-qualifications-modal/edit-qualifications-modal.component';\nimport { EditRecommendationModalComponent } from './user-profile/edit-recommendation-modal/edit-recommendation-modal.component';\nimport { EditSkillsModalComponent } from './user-profile/edit-skills-modal/edit-skills-modal.component';\nimport { EditSocialLinksComponent } from './user-profile/edit-social-links/edit-social-links.component';\nimport { EditUserProfileModalComponent } from './user-profile/edit-user-profile-modal/edit-user-profile-modal.component';\nimport { UserAboutComponent } from './user-profile/user-about/user-about.component';\nimport { PortfoliosComponent } from './user-profile/user-portfolios/user-portfolios.component';\nimport { UserProfilePageComponent } from './user-profile/user-profile-page.component';\nimport { UserProjectsComponent } from './user-profile/user-projects/user-projects.component';\n\nconst primeNgModules = [\n CalendarModule,\n MultiSelectModule,\n ProgressSpinnerModule,\n AccordionModule,\n FileUploadModule,\n SelectModule,\n RatingModule,\n SelectButtonModule\n];\n\nconst ngbModule = [NgbModalModule, NgbDatepickerModule];\n\n@NgModule({\n declarations: [\n AccountComponent,\n AccountDetailsComponent,\n AddSubscriptionComponent,\n SavedCardDetailsComponent,\n SubscriptionCredentialComponent,\n UpdatePaymentDetailsComponent,\n UpgradeSubscriptionComponent,\n UserSubscriptionDetailsComponent,\n UserSubscriptionListComponent,\n UserInvoiceComponent,\n CommunicationTabComponent,\n OthersTabComponent,\n SecurityTabComponent,\n SettingsComponent,\n SupportComponent,\n EditPortfoliosComponent,\n EditProjectModalComponent,\n EditQualificationsModalComponent,\n EditRecommendationModalComponent,\n EditSkillsModalComponent,\n EditSocialLinksComponent,\n EditUserProfileModalComponent,\n UserAboutComponent,\n PortfoliosComponent,\n UserProfilePageComponent,\n UserProjectsComponent,\n SupportDetailsComponent\n ],\n imports: [\n InputTextModule,\n DirectivesModule,\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n CoreTranslocoModule,\n NgxGpAutocompleteModule,\n SharedComponentsModule,\n PipesModule,\n UiSwitchModule,\n NgxCaptchaModule,\n FormsModule,\n ...primeNgModules,\n ...ngbModule\n ],\n exports: [\n AccountComponent,\n AccountDetailsComponent,\n AddSubscriptionComponent,\n SavedCardDetailsComponent,\n SubscriptionCredentialComponent,\n UpdatePaymentDetailsComponent,\n UpgradeSubscriptionComponent,\n UserSubscriptionDetailsComponent,\n UserSubscriptionListComponent,\n UserInvoiceComponent,\n CommunicationTabComponent,\n OthersTabComponent,\n SecurityTabComponent,\n SettingsComponent,\n SupportComponent,\n EditPortfoliosComponent,\n EditProjectModalComponent,\n EditQualificationsModalComponent,\n EditRecommendationModalComponent,\n EditSkillsModalComponent,\n EditSocialLinksComponent,\n EditUserProfileModalComponent,\n UserAboutComponent,\n PortfoliosComponent,\n UserProfilePageComponent,\n UserProjectsComponent,\n SupportDetailsComponent\n ],\n providers: [\n {\n provide: Loader,\n useFactory: (appConfigService: AppConfigService) => {\n return new Loader({\n apiKey: appConfigService.getGoogleApiKey(),\n libraries: ['places']\n });\n },\n deps: [AppConfigService]\n }\n ]\n})\nexport class UserModuleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i5","i6","i7","i8","i9","i10","i4","i7.SavedCardDetailsComponent","i10.SavedCardDetailsComponent","i11","i12","i14","i15","i13","i5.EditQualificationsModalComponent","i6.EditSkillsModalComponent","i7.EditSocialLinksComponent","i8.EditUserProfileModalComponent","i8.EditPortfoliosComponent","i9.EditProjectModalComponent","i10.EditRecommendationModalComponent","i11.EditSkillsModalComponent","i8.UserAboutComponent","i9.PortfoliosComponent","i10.UserProjectsComponent"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-user-module.mjs","sources":["../../../../libs/user-module/src/lib/account/account.component.ts","../../../../libs/user-module/src/lib/account/account.component.html","../../../../libs/user-module/src/lib/account/account-details/account-details.component.ts","../../../../libs/user-module/src/lib/account/account-details/account-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/add-subscription/add-subscription.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/add-subscription/add-subscription.component.html","../../../../libs/user-module/src/lib/account/subscriptions/saved-card-details/saved-card-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/saved-card-details/saved-card-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/subscription-credential/subscription-credential.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/subscription-credential/subscription-credential.component.html","../../../../libs/user-module/src/lib/account/subscriptions/update-payment-details/update-payment-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/update-payment-details/update-payment-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/upgrade-subscription/upgrade-subscription.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/upgrade-subscription/upgrade-subscription.component.html","../../../../libs/user-module/src/lib/account/subscriptions/user-subscription-details/user-subscription-details.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/user-subscription-details/user-subscription-details.component.html","../../../../libs/user-module/src/lib/account/subscriptions/user-subscriptions-list/user-subscriptions-list.component.ts","../../../../libs/user-module/src/lib/account/subscriptions/user-subscriptions-list/user-subscriptions-list.component.html","../../../../libs/user-module/src/lib/account/user-invoice/user-invoice.component.ts","../../../../libs/user-module/src/lib/account/user-invoice/user-invoice.component.html","../../../../libs/user-module/src/lib/settings-tabs/communication-tab/communication-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/communication-tab/communication-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/others-tab/others-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/others-tab/others-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/security-tab/security-tab.component.ts","../../../../libs/user-module/src/lib/settings-tabs/security-tab/security-tab.component.html","../../../../libs/user-module/src/lib/settings-tabs/settings-tabs.component.ts","../../../../libs/user-module/src/lib/settings-tabs/settings-tabs.component.html","../../../../libs/user-module/src/lib/support/support.component.ts","../../../../libs/user-module/src/lib/support/support.component.html","../../../../libs/user-module/src/lib/support/support-details/support-details.component.ts","../../../../libs/user-module/src/lib/support/support-details/support-details.component.html","../../../../libs/user-module/src/lib/user-profile/edit-portfolios/edit-portfolios.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-portfolios/edit-portfolios.component.html","../../../../libs/user-module/src/lib/user-profile/edit-project-modal/edit-project-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-project-modal/edit-project-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-qualifications-modal/edit-qualifications-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-qualifications-modal/edit-qualifications-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-recommendation-modal/edit-recommendation-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-recommendation-modal/edit-recommendation-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-skills-modal/edit-skills-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-skills-modal/edit-skills-modal.component.html","../../../../libs/user-module/src/lib/user-profile/edit-social-links/edit-social-links.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-social-links/edit-social-links.component.html","../../../../libs/user-module/src/lib/user-profile/edit-user-profile-modal/edit-user-profile-modal.component.ts","../../../../libs/user-module/src/lib/user-profile/edit-user-profile-modal/edit-user-profile-modal.component.html","../../../../libs/user-module/src/lib/user-profile/user-about/user-about.component.ts","../../../../libs/user-module/src/lib/user-profile/user-about/user-about.component.html","../../../../libs/user-module/src/lib/user-profile/user-portfolios/user-portfolios.component.ts","../../../../libs/user-module/src/lib/user-profile/user-portfolios/user-portfolios.component.html","../../../../libs/user-module/src/lib/user-profile/user-projects/user-projects.component.ts","../../../../libs/user-module/src/lib/user-profile/user-projects/user-projects.component.html","../../../../libs/user-module/src/lib/user-profile/user-profile-page.component.ts","../../../../libs/user-module/src/lib/user-profile/user-profile-page.component.html","../../../../libs/user-module/src/lib/user-module.module.ts","../../../../libs/user-module/src/posiwise-user-module.ts"],"sourcesContent":["import { Component, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MenuItem } from 'primeng/api';\n\n@Component({\n selector: 'pw-user-account',\n templateUrl: './account.component.html',\n\n standalone: false\n})\nexport class AccountComponent {\n @ViewChild('menuItems', { static: true }) menu: MenuItem[];\n\n items: MenuItem[];\n\n activeItem: MenuItem;\n\n path: string;\n\n constructor(private readonly router: Router) {\n this.items = [\n {\n id: 'account',\n label: 'Account',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/account/details']\n },\n {\n id: 'subscription',\n label: 'Subscriptions',\n icon: 'fa fa-fw fa-file-invoice',\n routerLink: ['/account/subscriptions']\n },\n {\n id: 'invoice',\n label: 'Invoices',\n icon: 'fa fa-fw fa-tag',\n routerLink: ['/account/invoice']\n }\n ];\n this.activeItem =\n this.items[\n this.items.findIndex(\n record => record.routerLink[0] === this.router.url.split('?')[0]\n )\n ];\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n }\n}\n","<pw-tabs [items]=\"items\"></pw-tabs>\n","import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';\nimport { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgxGpAutocompleteDirective } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, GeoService, ProfileService } from '@posiwise/common-services';\nimport { AppUser, Country, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { map, Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport { NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-account-details',\n templateUrl: './account-details.component.html',\n styleUrls: ['./account-details.component.scss'],\n\n standalone: false\n})\nexport class AccountDetailsComponent extends AppBaseComponent implements OnInit {\n @ViewChild('ngxPlaces') placesRef: NgxGpAutocompleteDirective;\n @ViewChild('password', { static: false }) passwordRef: ElementRef;\n\n emailForm: UntypedFormGroup;\n passwordForm: UntypedFormGroup;\n profileForm: UntypedFormGroup;\n\n image = 'assets/img/icons/male.png';\n\n countries$: Observable<Country[]>;\n\n states: Country[] = [];\n\n validatedEmail: string;\n\n toggleEmail: boolean;\n togglePassword: boolean;\n toggleNickName: boolean;\n\n passwordVerified = false;\n isCurrentPasswordValid = true;\n\n selectedState;\n\n user: User;\n\n slug: string;\n\n isLoaded = false;\n passwordBusyButton = false;\n slugBusyButton = false;\n emailBusyButton = false;\n validatePasswordBusyButton = false;\n profileBusyButton = false;\n\n showApiToken = false;\n showApiClientId = false;\n refreshingTokens = false;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly modalService: NgbModal,\n private readonly authService: AuthService,\n private readonly geoService: GeoService,\n private readonly profileService: ProfileService,\n injector: Injector\n ) {\n super(injector);\n this.getForms();\n }\n\n ngOnInit() {\n this.getUserProfile();\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n }\n\n handleAddressChange(_event) {\n this.profileForm.patchValue({\n latitude: _event.geometry.location.lat(),\n longitude: _event.geometry.location.lng(),\n location: _event.formatted_address\n });\n }\n\n private getUserProfile() {\n this.userService\n .getUserInfo()\n .subscribe(user => {\n if (user) {\n this.user = user;\n this.slug = user.slug;\n if (user?.user_avatar?.length) {\n this.image = user?.user_avatar[2]?.url;\n }\n let dobObject: NgbDateStruct;\n if (user.dob) {\n dobObject = {\n day: Number(user.dob.substring(8, 10)),\n month: Number(user.dob.substring(5, 7)),\n year: Number(user.dob.substring(0, 4))\n };\n }\n\n this.getRegion(user.country);\n\n // Map api_keys if present\n if (user && user.api_keys) {\n if (user.api_keys.api_user_token && !user.api_user_token) {\n this.user.api_user_token = user.api_keys.api_user_token;\n }\n if (user.api_keys.api_user_id && !user.api_user_id) {\n this.user.api_user_id = user.api_keys.api_user_id;\n }\n if (user.api_keys.api_hits !== undefined && user.api_hits === undefined) {\n this.user.api_hits = user.api_keys.api_hits;\n }\n if (\n user.api_keys.api_hits_max !== undefined &&\n user.api_hits_max === undefined\n ) {\n this.user.api_hits_max = user.api_keys.api_hits_max;\n }\n }\n\n this.profileForm.patchValue(this.user);\n this.profileForm.patchValue({ dob: dobObject });\n this.validatedEmail = this.user.email;\n }\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /**\n * Updates Email Address\n * this needs to be separate and requires the email to be validated from email before it's actually changed\n */\n onEmailFormSubmit() {\n this.emailBusyButton = true;\n const data = this.emailForm.value;\n data.confirmation_path = 'confirm-email';\n\n if (data && this.passwordVerified) {\n this.userService\n .updateEmail(data)\n .subscribe(() => {\n this.emailForm.reset();\n this.passwordVerified = false;\n this.toast.success(`A verification email has been sent to ${data.email}`, '', {\n positionClass: 'toast-top-center',\n timeOut: 100000\n });\n })\n .add(() => {\n this.emailBusyButton = false;\n });\n }\n }\n\n validatePassword() {\n this.validatePasswordBusyButton = true;\n const password = this.passwordRef.nativeElement.value;\n if (password) {\n this.userService\n .checkPassword({ password })\n .subscribe(data => {\n if (data?.status === StatusCodes.OK) {\n this.passwordVerified = true;\n } else {\n this.toast.error(data.error.message);\n this.passwordRef.nativeElement.value = '';\n }\n })\n .add(() => {\n this.validatePasswordBusyButton = false;\n });\n }\n }\n\n handleImageError(event: Event, fallbackPath): void {\n HelperService.handleImageFallbackPath(event, fallbackPath);\n }\n\n checkValidity() {\n const password = this.passwordRef.nativeElement.value;\n if (password.length > 5) {\n this.isCurrentPasswordValid = false;\n } else {\n this.isCurrentPasswordValid = true;\n }\n }\n\n onPasswordFormSubmit() {\n if (this.passwordForm.valid) {\n this.passwordBusyButton = true;\n const data = {\n password: this.passwordForm.value['newPassword'],\n password_confirmation: this.passwordForm.value['confirmPassword'],\n old_password: this.passwordForm.value['currentPassword']\n };\n this.userService\n .updatePassword(data)\n .subscribe(response => {\n if (response.status_code === 200) {\n this.toast.success(response.message, '', {\n positionClass: 'toast-top-center'\n });\n this.onTogglePassword();\n } else {\n this.toast.error(response.error.message);\n }\n this.passwordForm.reset();\n })\n .add(() => {\n this.passwordBusyButton = false;\n });\n }\n }\n\n @ValidateForm('profileForm')\n onProfileFormSubmit() {\n this.profileBusyButton = true;\n const data = { ...this.profileForm.value };\n data.dob = HelperService.dateFormat(this.profileForm.get('dob')?.value);\n if (data.location === '') {\n data.location = null;\n }\n Object.entries(data).forEach(([key, val]) => {\n if (val === '' || val === null) {\n delete data[key];\n }\n });\n this.profileService\n .updateUserProfile(data)\n .subscribe(() => {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n })\n .add(() => {\n this.profileBusyButton = false;\n });\n }\n\n onAvatarSave() {\n const data = {\n avatar: this.profileForm.get('avatar')?.value\n };\n this.profileService.updateUserProfile(data).subscribe(() => {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onUpdateSlug() {\n this.slugBusyButton = true;\n this.userService\n .updateSlug(this.slug)\n .subscribe(response => {\n this.toggleNickName = false;\n if (response?.status === StatusCodes.OK) {\n this.getUserProfile();\n } else {\n this.toast.error('User.Account.UserNameError');\n }\n })\n .add(() => {\n this.slugBusyButton = false;\n });\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.userService.addAvatar(file).subscribe(res => {\n this.image = res?.user_avatar[2]?.url;\n this.modalService.dismissAll();\n });\n }\n\n sendMailToResetPassword() {\n this.authService.forgotPassword(this.user.email, 'reset-password').subscribe(() => {\n this.toast.success(this.translation.translate('User.Account.Message.CheckEmail'));\n });\n }\n\n getRegion(countryId: number | string) {\n if (countryId) {\n this.geoService.getRegions(countryId).subscribe(response => {\n this.states = [{ code: 0, name: 'Select State' }, ...response];\n });\n }\n }\n\n private getForms() {\n this.emailForm = this.fb.group({\n email: ['', [Validators.required, Validators.email]]\n });\n\n this.passwordForm = this.fb.group(\n {\n currentPassword: ['', [Validators.required]],\n newPassword: ['', [Validators.required, Validators.minLength(8)]],\n confirmPassword: ['', [Validators.required, Validators.minLength(8)]]\n },\n {\n validators: this.passwordMatcher\n }\n );\n\n this.profileForm = AppUser.getForm(new AppUser({}));\n }\n\n private passwordMatcher(ac: AbstractControl): null {\n const password = ac.get('newPassword').value;\n const confirmPassword = ac.get('confirmPassword').value;\n if (password !== confirmPassword) {\n ac.get('confirmPassword').setErrors({ MatchPassword: true });\n }\n\n return null;\n }\n\n dataURLtoBlob(dataUrl: string) {\n const arr = dataUrl.split(',');\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n onToggleEmail() {\n this.emailForm.reset();\n this.passwordVerified = false;\n this.toggleEmail = false;\n }\n\n onTogglePassword() {\n this.passwordForm.reset();\n this.togglePassword = false;\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n shouldUserChangeEmail() {\n if (this.user.has_password) {\n this.toggleEmail = !this.toggleEmail;\n } else {\n swal.fire({\n text: `You don't have password, please reset your password first and then try changing email`,\n icon: 'warning'\n });\n }\n }\n\n toggleApiTokenVisibility() {\n this.showApiToken = !this.showApiToken;\n }\n\n toggleApiClientIdVisibility() {\n this.showApiClientId = !this.showApiClientId;\n }\n\n refreshApiTokens() {\n swal.fire({\n title: 'Are you sure?',\n text: this.translation.translate('User.Subscriptions.APICredentials.RefreshWarning'),\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#d33',\n cancelButtonColor: '#3085d6',\n confirmButtonText: 'Yes, refresh tokens!'\n }).then(result => {\n if (result.isConfirmed) {\n this.performTokenRefresh();\n }\n });\n }\n\n private performTokenRefresh() {\n this.refreshingTokens = true;\n this.userService\n .refreshUserApiTokens()\n .subscribe({\n next: response => {\n if (response && response.api_keys) {\n if (!this.user.api_keys) {\n this.user.api_keys = {};\n }\n if (response.api_keys.api_user_token) {\n this.user.api_keys.api_user_token = response.api_keys.api_user_token;\n }\n if (response.api_keys.api_user_id) {\n this.user.api_keys.api_user_id = response.api_keys.api_user_id;\n }\n if (response.api_keys.api_hits !== undefined) {\n this.user.api_keys.api_hits = response.api_keys.api_hits;\n }\n if (response.api_keys.api_hits_max !== undefined) {\n this.user.api_keys.api_hits_max = response.api_keys.api_hits_max;\n }\n }\n\n this.showApiToken = false;\n this.showApiClientId = false;\n this.getUserProfile();\n }\n })\n .add(() => {\n this.refreshingTokens = false;\n });\n }\n}\n","<div class=\"w-100 text-center\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row d-flex flex-row\">\n <div class=\"col-md-8 order-md-first order-sm-last\">\n <section id=\"email-section\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-8 col-lg-8\">\n <h2>{{ 'User.Account.RegisteredEmail' | transloco }}</h2>\n <!-- Email Form -->\n <section id=\"email-form\">\n <form [formGroup]=\"emailForm\"\n (ngSubmit)=\"onEmailFormSubmit()\">\n <!-- Email Address -->\n <div class=\"mt-0\">\n <span id=\"account-primary-email-label\" class=\"me-3 pw-label-style\">{{ 'User.Account.PrimaryEmail' | transloco }}:\n </span>\n <strong>{{ validatedEmail }}</strong>\n <div class=\"mt-1\">\n <ng-container *ngIf=\"!toggleEmail\">\n <a class=\"btn btn-raised btn-outline-primary\"\n aria-label=\"Navigate to Target\"\n (click)=\"shouldUserChangeEmail()\">\n {{ 'User.Account.ChangeEmail' | transloco }}</a>\n </ng-container>\n <ng-container *ngIf=\"toggleEmail\">\n <div class=\"row\">\n <div class=\"clearfix\"></div>\n <div class=\"col-12 mb-3\">\n <input type=\"password\"\n class=\"form-control\"\n id=\"account-email-current-password\"\n name=\"currentPassword\"\n #password\n *ngIf=\"!passwordVerified\"\n placeholder=\"Current Password\"\n autocomplete=\"current-password\"\n (keyup)=\"checkValidity()\" />\n <input type=\"text\"\n class=\"form-control\"\n id=\"account-new-email\"\n name=\"newEmail\"\n *ngIf=\"passwordVerified\"\n placeholder=\"New Email\"\n autocomplete=\"email\"\n formControlName=\"email\" />\n </div>\n <div class=\"col-12\">\n <a *ngIf=\"toggleEmail\"\n class=\"btn btn-raised btn-outline-default my-2 me-2\"\n aria-label=\"Navigate to Target\"\n (click)=\"onToggleEmail()\">{{ 'Button.Cancel' | transloco }}</a>\n <button class=\"btn btn-raised btn-primary\"\n type=\"submit\"\n [buttonBusy]=\"validatePasswordBusyButton\"\n (click)=\"validatePassword()\"\n *ngIf=\"!passwordVerified\"\n [disabled]=\"isCurrentPasswordValid\">\n {{ 'User.Account.Validate' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-raised btn-primary\"\n [buttonBusy]=\"emailBusyButton\"\n *ngIf=\"passwordVerified\">\n {{\n 'User.Account.SendVerification' | transloco\n }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <section id=\"slug\"\n class=\"mb-2 mt-3\">\n <div>\n <span class=\"me-3 pw-label-style\" id=\"account-nickname-label\">{{ 'User.Account.NickName' | transloco }}:\n </span>\n <strong>{{ slug }}</strong>\n <div>\n <ng-container *ngIf=\"!toggleNickName\">\n <a class=\"btn btn-raised btn-outline-primary me-2\"\n aria-label=\"Navigate to Target\"\n (click)=\"toggleNickName = true\">\n {{ 'User.Account.ChangeNickname' | transloco }}</a>\n </ng-container>\n <ng-container *ngIf=\"toggleNickName\">\n <div class=\"mb-3\">\n <input type=\"text\"\n id=\"account-nickname\"\n name=\"nickname\"\n class=\"form-control slug-input\"\n aria-labelledby=\"account-nickname-label\"\n [(ngModel)]=\"slug\"\n [ngModelOptions]=\"{ standalone: true }\" />\n </div>\n <div>\n <button type=\"button\"\n class=\"btn btn-raised btn-outline-default\"\n (click)=\"toggleNickName = false\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-raised btn-primary ms-2\"\n [buttonBusy]=\"slugBusyButton\"\n [disabled]=\"slug?.length < 2\"\n (click)=\"onUpdateSlug()\">\n {{ 'User.Account.UpdateNickname' | transloco }}\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n </section>\n </form>\n </section>\n </div>\n </div>\n <section id=\"password-change\"\n class=\"mt-1\">\n <form [formGroup]=\"passwordForm\"\n (ngSubmit)=\"onPasswordFormSubmit()\">\n <div class=\"row\">\n <div class=\"col-sm-12 col-md-8 col-lg-8 mt-4\">\n <h2>{{ 'User.Account.ChangePassword' | transloco }}</h2>\n </div>\n <ng-container *ngIf=\"!user?.has_password\">\n <div class=\"text-danger mx-3 my-2\">\n <div>\n You don't have a password set, click on\n <em>{{ 'User.Account.ChangePassword' | transloco }}</em>.\n </div>\n <div>{{ 'User.Profile.PictureMessage' | transloco }}</div>\n </div>\n </ng-container>\n <div class=\"col-sm-12 col-md-8 col-lg-8\"\n *ngIf=\"user?.has_password\">\n <ng-container *ngIf=\"togglePassword\">\n <div class=\"mb-3\">\n <label for=\"account-current-password\">{{ 'User.Account.CurrentPassword' | transloco }}</label>\n <input type=\"password\"\n id=\"account-current-password\"\n class=\"form-control\"\n formControlName=\"currentPassword\"\n autocomplete=\"current-password\" name=\"input_currentPassword_4\"/>\n <small class=\"form-text text-muted danger\"\n *ngIf=\"\n !passwordForm.get('currentPassword').valid &&\n (passwordForm.get('currentPassword').dirty ||\n passwordForm.get('currentPassword').touched)\n \">\n {{ 'User.Account.Required' | transloco }}\n </small>\n </div>\n <div class=\"mb-3\">\n <label for=\"account-new-password\">{{ 'User.Account.NewPassword' | transloco }}</label>\n <input type=\"password\"\n id=\"account-new-password\"\n class=\"form-control\"\n formControlName=\"newPassword\"\n autocomplete=\"new-password\" name=\"input_newPassword_5\"/>\n <small class=\"form-text text-muted danger\"\n *ngIf=\"\n !passwordForm.get('newPassword').valid &&\n (passwordForm.get('newPassword').dirty ||\n passwordForm.get('newPassword').touched)\n \">{{ 'User.Account.Validation.StrongPassword' | transloco }}\n </small>\n </div>\n <div class=\"mb-3\">\n <label for=\"account-confirm-password\">{{\n 'User.Account.ConfirmPassword' | transloco\n }}</label>\n <input type=\"password\"\n id=\"account-confirm-password\"\n class=\"form-control\"\n formControlName=\"confirmPassword\"\n autocomplete=\"new-password\" name=\"input_confirmPassword_6\"/>\n <div class=\"text-danger\"\n *ngIf=\"\n passwordForm.get('confirmPassword').touched &&\n passwordForm.get('confirmPassword').errors\n ?.MatchPassword\n \">\n {{ 'User.Account.Validation.PasswordsMatch' | transloco }}\n </div>\n </div>\n <div class=\"mb-3\">\n <a class=\"btn btn-raised btn-outline-default\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n *ngIf=\"togglePassword\"\n (click)=\"onTogglePassword()\">\n {{ 'Button.Cancel' | transloco }}</a>\n <button class=\"btn btn-raised btn-primary ms-2\"\n [buttonBusy]=\"passwordBusyButton\"\n [disabled]=\"!passwordForm.valid\">\n {{ 'User.Account.UpdatePassword' | transloco }}\n </button>\n </div>\n </ng-container>\n <div>\n <a class=\"btn btn-raised btn-outline-primary\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n *ngIf=\"!togglePassword\"\n (click)=\"togglePassword = !togglePassword\">\n {{ 'User.Account.ChangePassword' | transloco }}</a>\n </div>\n </div>\n <div class=\"col-sm-12 col-md-8 col-lg-8\"\n *ngIf=\"!user?.has_password\">\n <a class=\"btn btn-raised btn-primary me-2\"\n aria-label=\"Navigate to Target\"\n data-bs-target=\"\"\n (click)=\"sendMailToResetPassword()\">\n {{ 'User.Account.ChangePassword' | transloco }}</a>\n </div>\n </div>\n </form>\n </section>\n <ng-container *ngIf=\"user?.api_keys?.api_hits_max > 0\">\n <section id=\"api-credentials\"\n class=\"mt-4\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h3>{{ 'User.Subscriptions.APICredentials.Title' | transloco }}</h3>\n <p>\n {{ 'User.Subscriptions.APICredentials.Description' | transloco }}\n </p>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"account-api-token\">{{ 'User.Subscriptions.APICredentials.AccessToken' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"account-api-token\"\n name=\"api_token\"\n class=\"form-control\"\n [value]=\"showApiToken ? user?.api_keys?.api_user_token || ('User.Subscriptions.APICredentials.NoTokenAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiTokenVisibility()\">\n {{ showApiToken ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"account-api-client-id\">{{ 'User.Subscriptions.APICredentials.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"account-api-client-id\"\n name=\"api_client_id\"\n class=\"form-control\"\n [value]=\"showApiClientId ? user?.api_keys?.api_user_id || ('User.Subscriptions.APICredentials.NoClientIdAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiClientIdVisibility()\">\n {{ showApiClientId ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-3\">\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\"\n class=\"btn btn-warning\"\n (click)=\"refreshApiTokens()\"\n [disabled]=\"refreshingTokens\">\n <i class=\"fas fa-sync-alt me-2\" [class.fa-spin]=\"refreshingTokens\"></i>\n {{ refreshingTokens ? ('User.Subscriptions.APICredentials.Refreshing' | transloco) : ('User.Subscriptions.APICredentials.RefreshTokens' | transloco) }}\n </button>\n\n <div class=\"d-flex align-items-center gap-2\">\n <ng-container *ngIf=\"user?.api_keys?.api_hits !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHits' | transloco }}:</span>\n <span class=\"fw-bold\">{{ user.api_keys.api_hits | number }}</span>\n </ng-container>\n\n <ng-container *ngIf=\"user?.api_keys?.api_hits_max !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHitsMax' | transloco }}:</span>\n <span class=\"fw-bold\">{{ user.api_keys.api_hits_max | number }}</span>\n </ng-container>\n\n <!-- Show utilization percentage when both values exist -->\n <ng-container *ngIf=\"user?.api_keys?.api_hits !== null && user?.api_keys?.api_hits_max !== null && user?.api_keys?.api_hits_max > 0\">\n <span class=\"text-muted ms-2\">(</span>\n <span class=\"fw-bold\" [ngClass]=\"{\n 'text-success': (user.api_keys.api_hits / user.api_keys.api_hits_max) <= 0.8,\n 'text-warning': (user.api_keys.api_hits / user.api_keys.api_hits_max) > 0.8 && (user.api_keys.api_hits / user.api_keys.api_hits_max) <= 0.9,\n 'text-danger': (user.api_keys.api_hits / user.api_keys.api_hits_max) > 0.9\n }\">\n {{ (user.api_keys.api_hits / user.api_keys.api_hits_max * 100) | number:'1.0-0' }}% consumed\n </span>\n <span class=\"text-muted\">)</span>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </section>\n </ng-container>\n </section>\n </div>\n <!-- Avatar -->\n <div class=\"mt-4 mt-sm-0 col-md-4 text-center order-md-last order-sm-first\">\n <h2>{{ 'User.Profile.Avatar' | transloco }}</h2>\n <div class=\"text-center mt-1\">\n <div class=\"image-container\">\n <img [src]=\"image\"\n width=\"150\"\n height=\"150\"\n class=\"image rounded-circle\"\n alt=\"User Male\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\" />\n <div class=\"overlay\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">{{ 'User.Profile.Change' | transloco }}</div>\n </div>\n </div>\n <h4 class=\"mt-2\">{{ user?.first_name }} {{ user?.last_name }}</h4>\n <a aria-label=\"Navigate to Target\"\n class=\"d-inline-block mb-2\"\n (click)=\"openModal(content)\">\n {{ 'User.Profile.EditAvatar' | transloco }}</a>\n <br />\n </div>\n </div>\n</div>\n<br />\n<section id=\"user-profile\"\n class=\"mt-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <form [formGroup]=\"profileForm\"\n (ngSubmit)=\"onProfileFormSubmit()\">\n <h2>{{ 'User.Profile.UserProfile' | transloco }}</h2>\n <div class=\"row mt-3\">\n <div class=\"col-sm-12 col-md-6 col-lg-6\">\n <pw-input-container label=\"First Name\"\n name=\"first_name\"\n controlId=\"account-first_name\"\n errorMsg=\"Please enter first Name\">\n <input type=\"text\"\n id=\"account-first_name\"\n class=\"form-control\"\n formControlName=\"first_name\"\n autocomplete=\"given-name\" name=\"input_first_name_9\"/>\n </pw-input-container>\n <pw-input-container label=\"Preferred name\"\n name=\"preferred_name\"\n controlId=\"account-preferred_name\"\n errorMsg=\"Please enter preferred Name\">\n <input type=\"text\"\n id=\"account-preferred_name\"\n class=\"form-control\"\n formControlName=\"preferred_name\"\n autocomplete=\"username\" name=\"input_preferred_name_10\"/>\n </pw-input-container>\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container label=\"Country\"\n name=\"country\"\n controlId=\"account-country\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please select a country\">\n <p-select\n [attr.aria-labelledby]=\"'account-country-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country\"\n (onChange)=\"getRegion($event.value)\"\n placeholder=\"{{ 'User.Profile.SelectCountry' | transloco }}\">\n </p-select>\n </pw-input-container>\n </ng-container>\n <pw-input-container label=\"Province\"\n name=\"province\"\n controlId=\"account-province\"\n errorMsg=\"Please enter province\">\n <input type=\"text\"\n id=\"account-province\"\n class=\"form-control\"\n formControlName=\"province\"\n autocomplete=\"postal-code\" name=\"input_province_11\"/>\n </pw-input-container>\n <pw-input-container label=\"Website Url\"\n name=\"website_url\"\n controlId=\"account-website_url\"\n errorMsg=\"Please enter Website\">\n <input type=\"text\"\n id=\"account-website_url\"\n class=\"form-control\"\n formControlName=\"website_url\"\n autocomplete=\"url\" name=\"input_website_url_12\"/>\n </pw-input-container>\n </div>\n <div class=\"col-sm-12 col-md-6 col-lg-6\">\n <pw-input-container label=\"Last Name\"\n name=\"last_name\"\n controlId=\"account-last_name\"\n errorMsg=\"Please enter last Name\">\n <input type=\"text\"\n id=\"account-last_name\"\n class=\"form-control\"\n formControlName=\"last_name\"\n autocomplete=\"family-name\" name=\"input_last_name_13\"/>\n </pw-input-container>\n <pw-input-container label=\"Date of Birth\"\n name=\"dob\"\n controlId=\"account-dob\"\n errorMsg=\"Please enter date of birth\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"account-dob\"\n name=\"dob\"\n placeholder=\"dd-mmm-yyyy\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2018 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n type=\"button\"\n id=\"account-dob-trigger\"\n aria-label=\"Open date picker for date of birth\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n <pw-input-container label=\"State\"\n name=\"state\"\n controlId=\"account-state\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please select a state\">\n <p-select\n [attr.aria-labelledby]=\"'account-state-label'\"\n [options]=\"states\"\n [(ngModel)]=\"selectedState\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"state\"\n [placeholder]=\"'User.Profile.SelectState' | transloco\">\n </p-select>\n\n </pw-input-container>\n <!-- Location -->\n <pw-input-container label=\"Location\"\n name=\"location\"\n controlId=\"account-location\"\n [useAriaLabelledbyOnly]=\"true\">\n <input ngx-gp-autocomplete\n id=\"account-location\"\n name=\"location\"\n class=\"form-control\"\n [attr.aria-labelledby]=\"'account-location-label'\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n <pw-input-container label=\"Phone Number\"\n name=\"phone_number\"\n controlId=\"account-phone_number\"\n errorMsg=\"Please enter phone number\">\n <input type=\"text\"\n id=\"account-phone_number\"\n class=\"form-control\"\n formControlName=\"phone_number\"\n autocomplete=\"tel\" name=\"input_phone_number_16\"/>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end\">\n <div class=\"mb-3\">\n <button class=\"btn btn-raised btn-primary\" [buttonBusy]=\"profileBusyButton\">\n {{ 'Button.Save' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</section>\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ 'User.Profile.ProfilePicture' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProductService } from '@posiwise/common-services';\nimport { Product, PRODUCT_CATEGORY, Subscription, User } from '@posiwise/common-utilities';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\n\n@Component({\n selector: 'pw-add-subscription',\n templateUrl: './add-subscription.component.html',\n styleUrls: ['./add-subscription.component.scss'],\n\n standalone: false\n})\nexport class AddSubscriptionComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private readonly singleProducts = [];\n\n private readonly enterpriseProducts = [];\n\n form: UntypedFormGroup;\n\n busy: boolean;\n isLoaded: boolean;\n selectedProduct: boolean;\n isPurchaseAttempted: boolean;\n userLoggedIn: boolean;\n\n availableProducts: Product[] = [];\n products: Product[];\n\n user: User;\n\n unitError: string;\n\n category = PRODUCT_CATEGORY;\n\n units = 1;\n\n subscribedPermissionKeys = [];\n\n currentSubscription: Subscription;\n\n subscriptionId: number;\n\n constructor(\n private readonly productService: ProductService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.subscriptionId = Number(this.route.snapshot.queryParamMap.get('subscription_id'));\n this.getProducts();\n }\n\n private getProducts() {\n // Gets All the products\n this.productService\n .getProductList({}, this.subscriptionId, { only_relevant: true })\n .subscribe((response: Subscription) => {\n this.products = response.products || [];\n if (this.products?.length) {\n this.products = this.products.filter(x => x.active);\n }\n\n this.isLoaded = true;\n this.userStore().subscribe(user => {\n this.user = user;\n if (this.user) {\n const subs: Subscription[] = cloneDeep(this.user.subscriptions);\n subs.forEach(subscription => {\n subscription.products.forEach(product => {\n const prod = this.products.find(x => x.id === product.id);\n if (prod) {\n prod['is_subscribed'] = true;\n prod['purchased_units'] = product?.purchased_units;\n }\n });\n });\n\n this.subscribedPermissionKeys = Array.from(\n new Set(\n this.user.subscriptions\n .flatMap(x => x.products)\n .map(product => product.permission_key)\n )\n );\n\n // show category only if we have products\n const prodPermissionKeys = this.products.map(p => p.permission_key);\n this.subscribedPermissionKeys = this.subscribedPermissionKeys.filter(x =>\n prodPermissionKeys.includes(x)\n );\n\n // Filtering the product with the existing permission_key\n this.availableProducts = sortBy(\n this.getSingleCategoryProducts(),\n 'is_subscribed'\n );\n }\n });\n });\n }\n\n private getSingleCategoryProducts(category = this.subscribedPermissionKeys[0]) {\n return this.products.filter(x => category === x.permission_key);\n }\n\n onChangeCategory(category) {\n this.availableProducts = this.getSingleCategoryProducts(category);\n this.availableProducts = sortBy(this.availableProducts, 'is_subscribed');\n }\n\n onSelection(product) {\n this.router.navigate([\n `account/subscriptions/upgrade/${this.subscriptionId}/${product.id}`\n ]);\n }\n\n trackByProduct(_index: number, item: Product) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div *ngIf=\"isLoaded && !selectedProduct\"\n class=\"mt-4\">\n <a aria-label=\"Navigate to Target\"\n [routerLink]=\"['/account/subscriptions']\"\n class=\"previous float-start\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n\n <div class=\"d-flex flex-wrap justify-content-center\">\n <div class=\"toggle\"\n *ngFor=\"let item of subscribedPermissionKeys; let i = index\">\n <input type=\"radio\"\n name=\"sizeBy\"\n value=\"option{{ i + 1 }}\"\n id=\"option{{ i + 1 }}\"\n (change)=\"onChangeCategory(item)\"\n [checked]=\"i === 0\" />\n <label for=\"option{{ i + 1 }}\">{{ item }}</label>\n </div>\n </div>\n\n <ul class=\"row animated fadeIn d-flex\">\n <li *ngFor=\"let product of availableProducts; trackBy: trackByProduct\"\n class=\"col-sm-12 col-md-6 col-xl-4 my-3 mt-sm-2\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <h4 class=\"text-bold-500 primary mb-3\">{{ product.name }}</h4>\n <ng-template [ngIf]=\"product.price_per_unit\"\n [ngIfElse]=\"freeProductRef\">\n <h5 *ngIf=\"product?.purchased_units\"\n class=\"my-3 branding-color-1\">\n Currently {{ product.currency | currencySymbol\n }}{{\n (\n (product.purchased_units * product.price_per_unit) /\n 100\n ) | number:'1.2-2'\n }}&nbsp;/&nbsp;{{ product.billing_frequency }}\n </h5>\n <h5 class=\"my-3\">\n Min\n {{product.min_units &gt; 1 ? (product.min_units + ' Seats'): (product.min_units + ' Seat')}}\n - {{ product.currency | currencySymbol\n }}{{\n ((product.min_units * product.price_per_unit) / 100) | number:'1.2-2'\n }}&nbsp;/&nbsp;{{ product.billing_frequency }}\n </h5>\n <h5 class=\"d-inline-block text-bold-600 mb-2\">\n {{ product.currency | currencySymbol\n }}{{ (product.price_per_unit / 100) | number:'1.2-2' }}&nbsp;/&nbsp;{{\n product.billing_frequency\n }}&nbsp;/&nbsp;seat\n </h5>\n </ng-template>\n <ng-template #freeProductRef>\n <div class=\"d-inline-block text-bold-600 mb-2\">Free</div>\n </ng-template>\n <p class=\"mb-2\"\n [innerHTML]=\"product?.description\"></p>\n </div>\n <div class=\"card-footer px-3\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onSelection(product)\"\n *ngIf=\"\n !product.is_subscribed &&\n !product.trial_subscription &&\n product.stripe_plan_id\n \"\n class=\"card-btn btn btn-raised me-1 btn-primary btn-sm\">\n {{ 'User.Subscriptions.Subscribe' | transloco }}\n </a>\n\n <div class=\"mt-3\"\n *ngIf=\"\n !product.is_subscribed &&\n product.trial_subscription &&\n product.stripe_plan_id\n \">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onSelection(product)\"\n class=\"card-btn btn btn-raised me-1 btn-primary btn-sm\">\n {{ 'Button.Upgrade' | transloco }}\n </a>\n <span class=\"badge bg-secondary position-absolute trial-badge\">{{ 'User.Subscriptions.Trial' | transloco }}\n </span>\n </div>\n\n <span *ngIf=\"\n product.is_subscribed &&\n !product.trial_subscription &&\n !product.is_deleted\n \"\n class=\"card-btn badge bg-default text-white\">\n {{ 'User.Subscriptions.Subscribed' | transloco }}\n </span>\n\n <span *ngIf=\"\n product.is_subscribed &&\n product.trial_subscription &&\n product.price_per_unit === 0 &&\n !product.is_deleted &&\n !product.stripe_plan_id\n \"\n class=\"card-btn badge bg-default text-white\">\n Free\n </span>\n\n <span *ngIf=\"product.is_deleted\"\n class=\"card-btn badge bg-default text-white\">\n {{ 'User.Subscriptions.UnsubscribedButActive' | transloco }}\n </span>\n </div>\n </div>\n </div>\n </li>\n </ul>\n <div class=\"row\">\n <div class=\"col-12\">\n <pw-no-data [withImage]=\"true\" message=\"No products available under this category.\"\n *ngIf=\"availableProducts && availableProducts.length === 0\">\n </pw-no-data>\n </div>\n </div>\n</div>\n","/**\n * @summary Shows the saved credit card details of the user\n * @author anikets43\n *\n * Created at : 2020-02-08 16:56:18\n * Last modified : 2020-02-08 17:06:29\n */\n\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pw-saved-card-details',\n templateUrl: './saved-card-details.component.html',\n styleUrls: ['./saved-card-details.component.scss'],\n\n standalone: false\n})\nexport class SavedCardDetailsComponent {\n /**\n * Credit Card details like brand, exp_month, exp_year, card_number\n */\n @Input() data: {\n brand?: string;\n exp_month?: string;\n exp_year?: string;\n card_number?: string;\n };\n\n /**\n * boolean: change payment option\n */\n @Input() isChangePayment: boolean;\n\n @Input() showNewCard: boolean;\n\n /**\n * Emitter: on payment change request\n */\n @Output() changeEvent: EventEmitter<boolean> = new EventEmitter();\n\n OnPaymentChange(value) {\n this.changeEvent.emit(value);\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\"\n *ngIf=\"!showNewCard\">\n <h4 class=\"title\">Saved Card</h4>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Type:</div>\n <div class=\"summary-right\">{{ data?.brand }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Expiry:</div>\n <div class=\"summary-right\">{{ data.exp_month }} / {{ data.exp_year }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">Card Number:</div>\n <div class=\"summary-right\">{{ data?.card_number }}</div>\n </div>\n </div>\n\n <div class=\"col-12 mt-3\"\n *ngIf=\"!showNewCard\">\n <button type=\"button\"\n class=\"btn btn-outline-primary btn-sm\"\n aria-label=\"Change Payment Option\"\n (click)=\"OnPaymentChange(true)\">\n Change Payment Option\n </button>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { SubscriptionService } from '@posiwise/common-services';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\n\nimport { forkJoin, from, Observable } from 'rxjs';\nimport { distinct } from 'rxjs/operators';\n\nimport { CredentialData } from '../../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-subscription-credential',\n templateUrl: './subscription-credential.component.html',\n styleUrls: ['./subscription-credential.component.scss'],\n\n standalone: false\n})\nexport class SubscriptionCredentialComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private credentialToEdit;\n\n @ViewChild('passwordValidationModalForRevealCredential', { static: false })\n passwordValidationModalForRevealCredential: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForEditCredential', { static: false })\n passwordValidationModalForEditCredential: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForAddCredential', { static: false })\n passwordValidationModalForAddCredential: PasswordValidationComponent;\n\n form: UntypedFormGroup;\n\n data = [];\n\n subscriptionId: number;\n totalRecords: number;\n\n allSubscriptionCredentials: CredentialData[];\n availableCredentials: CredentialData[] = [];\n credentialsSelect: CredentialData[];\n updatedCredential: CredentialData;\n uniqueCredential = [];\n\n isEdit = false;\n submitted = false;\n buttonBusy = false;\n isLoaded = false;\n\n credentials = [];\n\n showForm = false;\n\n credentialSaved: string;\n credentialName: string;\n\n credentialToReveal;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly subscriptionService: SubscriptionService,\n injector: Injector\n ) {\n super(injector);\n this.form = this.fb.group({\n credentials: this.fb.array([])\n });\n }\n\n ngOnInit() {\n this.route.params.subscribe(params => {\n this.subscriptionId = params['subscriptionId'];\n if (this.subscriptionId) {\n this.getAllCredentials();\n }\n });\n }\n\n get credentialsGroup() {\n return this.form.get('credentials') as UntypedFormArray;\n }\n\n /** Function to get all credentials */\n private getAllCredentials() {\n this.allSubscriptionCredentials = [];\n this.subscriptionService\n .getAllSubscriptionCredentials(this.subscriptionId)\n .subscribe(response => {\n this.allSubscriptionCredentials = response.subscription_credentials;\n this.totalRecords = response.object_count;\n this.getAllAvailableCredentials();\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /** Function to get available Credentials */\n private getAllAvailableCredentials() {\n this.credentials = [];\n this.uniqueCredential = [];\n this.subscriptionService.getAllCredentials().subscribe(response => {\n this.availableCredentials = response.credentials;\n from(this.availableCredentials)\n .pipe(distinct(c => c.name))\n .subscribe(res => {\n this.uniqueCredential.push(res);\n });\n this.uniqueCredential.forEach(credential => {\n const subscriptionCredentialGroup = { credential_name: '', credentials: [] };\n this.allSubscriptionCredentials.forEach(subscriptionCredential => {\n if (credential.name === subscriptionCredential.name) {\n subscriptionCredentialGroup['credentials'].push(subscriptionCredential);\n }\n });\n if (subscriptionCredentialGroup['credentials'].length > 0) {\n subscriptionCredentialGroup['credential_name'] = credential.name;\n this.credentials.push(subscriptionCredentialGroup);\n }\n });\n });\n }\n\n /** Function to get credential on select */\n selectedOption(event) {\n this.credentialsGroup.clear();\n const credentialName = this.isEdit ? event : event.value;\n this.credentialsSelect = this.availableCredentials.filter(x => x.name === credentialName);\n this.credentialsSelect.forEach(adminCredential => {\n const subscriptionCredential = this.allSubscriptionCredentials.find(\n credential => credential?.credential_id === adminCredential?.id\n );\n adminCredential.value = subscriptionCredential?.value;\n adminCredential.subscription_credential_id = subscriptionCredential?.id;\n adminCredential.credential_id = subscriptionCredential?.credential_id;\n this.credentialsGroup.push(\n this.fb.group({\n subscription_id: [0, [Validators.required]],\n credential_id: [adminCredential?.id],\n field: [adminCredential?.field],\n description: [adminCredential?.description],\n value: [\n adminCredential?.value,\n adminCredential?.is_required ? [Validators.required] : []\n ],\n id: [subscriptionCredential?.id]\n })\n );\n });\n }\n\n /** Function to post credentials */\n saveCredentials() {\n this.submitted = true;\n this.buttonBusy = true;\n const subscription$: Observable<Subscription>[] = [];\n const isValid = this.form.value.credentials.every(\n (_x, i) => this.credentialsGroup.controls[i].valid === true\n );\n if (isValid) {\n this.form.value.credentials.forEach(credential => {\n if (credential?.value) {\n const data = {\n subscription_id: this.subscriptionId,\n credential_id: credential.credential_id,\n value: credential.value\n };\n const sub$ = credential?.id\n ? this.subscriptionService.editSubscriptionCredential(credential.id, data)\n : this.subscriptionService.postSubscriptionCredential(data);\n\n subscription$.push(sub$);\n }\n });\n\n forkJoin(subscription$)\n .subscribe(response => {\n if (response?.length) {\n this.toast.success(\n this.translation.translate(\n 'User.Subscriptions.SubscriptionCredentials.UpdateMessage'\n )\n );\n } else {\n this.toast.error(`Something went wrong while saving credentials`);\n }\n })\n .add(() => {\n this.submitted = false;\n this.buttonBusy = false;\n });\n } else {\n this.buttonBusy = false;\n }\n }\n\n revealCredentials(credential) {\n this.credentialToReveal = credential.credential_name;\n this.passwordValidationModalForRevealCredential.open();\n }\n\n hideCredentials() {\n this.credentialName = '';\n }\n\n showCredentials() {\n this.credentialName = this.credentialToReveal;\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n onCancel() {\n this.getAllCredentials();\n this.submitted = false;\n this.form.reset();\n this.showForm = false;\n this.isEdit = false;\n this.credentialsSelect = [];\n this.data = [];\n this.credentialSaved = '';\n }\n\n // password popup for add credential\n openCredentialsForAdd() {\n this.passwordValidationModalForAddCredential.open();\n }\n\n // password popup for edit credential\n openCredentialsForEdit(credential) {\n this.credentialToEdit = credential;\n this.passwordValidationModalForEditCredential.open();\n }\n\n editCredentials() {\n this.showForm = true;\n this.isEdit = true;\n this.selectedOption(this.credentialToEdit);\n }\n\n showEditForm() {\n this.data = [];\n this.isEdit = false;\n this.showForm = true;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\"\n *ngIf=\"showForm\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ data.length ? 'Edit' : 'Create new' }} Credential</span>\n </h3>\n </div>\n</div>\n<ng-container *ngIf=\"showForm\">\n <div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form>\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-4\"\n *ngIf=\"!isEdit && showForm\">\n <div class=\"mb-3\">\n <label id=\"subscription-credential-select-label\">Credential <span class=\"text-danger required-icon\">*</span> </label>\n <p-select\n [attr.aria-labelledby]=\"'subscription-credential-select-label'\"\n [options]=\"uniqueCredential\"\n [placeholder]=\"'Select credential'\"\n optionLabel=\"name\"\n optionValue=\"name\"\n (onChange)=\"selectedOption($event)\">\n </p-select>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\"\n *ngIf=\"credentialsSelect?.length\">\n <div class=\"card pb-2 pt-2 overflow-visible\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <form [formGroup]=\"form\"\n novalidate\n (ngSubmit)=\"saveCredentials()\">\n <div formArrayName=\"credentials\">\n <div *ngFor=\"\n let credential of credentialsGroup.controls;\n let i = index\n \">\n <div [formGroupName]=\"i\">\n <div class=\"mb-3\">\n <pw-input-container label=\"{{\n credential.get('field').value\n }}\"\n [class.info-circle]=\"\n credential.get('description').value\n \"\n name=\"value\"\n errorMsg=\"Please enter value\">\n <span *ngIf=\"\n credential.get('description')\n .value\n \"\n class=\"tooltiptext gradient-custom-branding\">{{\n credential.get('description')\n .value\n }}</span>\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"value\"\n [ngClass]=\"{\n 'is-invalid':\n submitted &&\n credential.get('value')\n .invalid\n }\" id=\"input_value_1\" name=\"input_value_1\"/>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-end mt-3\">\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"onCancel()\"\n (keydown.enter)=\"onCancel()\" >\n {{ 'Button.Back' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!showForm\">\n <div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-3\">Credentials</h2>\n </div>\n <div class=\"col-12 col-md-12 text-end\">\n <button class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openCredentialsForAdd()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add Credential' }}\n </button>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"row my-4\">\n <div class=\"col-12 col-md-6 col-xl-4 mt-3 credential-cards\"\n *ngFor=\"let credential of credentials\">\n <div class=\"card\">\n <h2 class=\"credential-field mt-3\">{{ credential.credential_name }}</h2>\n <div class=\"card-content\"\n *ngFor=\"let subscriptionCredential of credential.credentials\">\n <div class=\"card-header\">\n <div>\n <strong class=\"d-block\">{{ subscriptionCredential.field }}:</strong>\n <input class=\"credential-value\"\n [type]=\"\n credentialName === credential.credential_name\n ? 'text'\n : 'password'\n \"\n readonly\n #input\n [value]=\"subscriptionCredential?.value\" id=\"input_text_5520\" name=\"input_text_5520\" />\n </div>\n </div>\n <div class=\"card-footer\">\n <div class=\"float-end px-2\">\n <button class=\"btn btn-outline-primary me-2\"\n *ngIf=\"credentialName !== credential.credential_name\"\n (click)=\"revealCredentials(credential)\">\n {{\n 'User.Subscriptions.SubscriptionCredentials.RevealCredential'\n | transloco\n }}\n </button>\n <button class=\"btn btn-outline-primary me-2\"\n *ngIf=\"credentialName === credential.credential_name\"\n (click)=\"hideCredentials()\">\n {{\n 'User.Subscriptions.SubscriptionCredentials.HideCredential'\n | transloco\n }}\n </button>\n <a class=\"me-2 my-1\"\n aria-label=\"Edit Credential\"\n (click)=\"openCredentialsForEdit(credential.credential_name)\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"allSubscriptionCredentials?.length === 0 && isLoaded\"\n class=\"clearboth\">\n <pw-no-data [withImage]=\"true\" [message]=\"'User.Subscriptions.SubscriptionCredentials.NoDataMessage' | transloco\">\n </pw-no-data>\n </div>\n</ng-container>\n<!-- password validation modal for reveal Credential -->\n<pw-password-validation #passwordValidationModalForRevealCredential\n (successEvent)=\"showCredentials()\">\n</pw-password-validation>\n<!-- password validation modal for Edit Credential -->\n<pw-password-validation #passwordValidationModalForEditCredential\n (successEvent)=\"editCredentials()\">\n</pw-password-validation>\n<!-- password validation modal for Add Credential -->\n<pw-password-validation #passwordValidationModalForAddCredential\n (successEvent)=\"showEditForm()\">\n</pw-password-validation>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport {\n ProductService,\n ScriptLoaderService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { forkJoin } from 'rxjs';\n\nimport { CardDetails, StripeCardResponse } from '../../../shared/interface/user-module.interface';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare let Stripe: {\n setPublishableKey(key: string): void;\n card: {\n createToken(\n card: CardDetails,\n callback: (status: number, response: StripeCardResponse) => void\n ): void;\n };\n};\n\n@Component({\n selector: 'pw-update-payment-details',\n templateUrl: './update-payment-details.component.html',\n styleUrls: ['./update-payment-details.component.scss'],\n\n standalone: false\n})\nexport class UpdatePaymentDetailsComponent extends AppBaseComponent implements OnInit {\n form: UntypedFormGroup;\n\n years = [];\n months = [];\n\n busy: boolean;\n isChangePayment: boolean;\n\n cardDetails: CardDetails[];\n\n loading = true;\n\n errorMessage: string;\n stripePublishKey: string;\n errorMsg: string;\n\n subscriptionId: number;\n productId: number;\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly scriptLoader: ScriptLoaderService,\n private readonly productService: ProductService,\n private readonly subscriptionService: SubscriptionService,\n injector: Injector\n ) {\n super(injector);\n\n this.route.params.subscribe(response => {\n this.subscriptionId = Number(response['subscriptionId']);\n this.productId = Number(response['productId']);\n this.getCardDetails();\n });\n\n this.form = this.fb.group({\n card_number: ['', Validators.required],\n cvc: ['', Validators.required],\n exp_month: ['', Validators.required],\n exp_year: ['', Validators.required]\n });\n }\n\n ngOnInit() {\n this.scriptLoader.loadScript('head', 'https://js.stripe.com/v2/', true);\n this.years = HelperService.getYears();\n this.months = HelperService.getMonths();\n }\n\n private getCardDetails() {\n forkJoin({\n cardDetails: this.subscriptionService.getCardDetails(this.subscriptionId),\n product: this.productService.getProductById(this.productId)\n })\n .subscribe(response => {\n this.stripePublishKey = response.product.stripe_publishable_key;\n if (response.cardDetails.status === StatusCodes.OK) {\n this.cardDetails = response.cardDetails.data || null;\n }\n })\n .add(() => {\n this.loading = false;\n });\n }\n\n onUpdatePaymentDetailsCancel() {\n this.router.navigate(['/account/subscriptions']);\n }\n\n @ValidateForm('form')\n onSave() {\n this.busy = true;\n this.errorMsg = '';\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n Stripe.setPublishableKey(this.stripePublishKey);\n\n Stripe.card.createToken(cardDetails, (status, res) => {\n if (status !== 200) {\n this.toast.error(res?.error?.message);\n this.busy = false;\n } else {\n this.subscriptionService\n .updateCardDetails(this.form.value, this.subscriptionId)\n .subscribe({\n next: response => {\n if (response.error) {\n const err = response.error.errors[0].message;\n this.toast.error(err);\n } else if (response.status === StatusCodes.CREATED) {\n this.toast.success(response.message);\n }\n this.cancel();\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n });\n }\n\n cancel() {\n this.router.navigate(['/account/subscriptions']);\n }\n\n onChange(value) {\n this.isChangePayment = value;\n }\n}\n","<div class=\"container-fluid\">\n <div class=\"card-block\">\n <div class=\"row\">\n <div class=\"col-lg-12 ps-0\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous float-start\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h4 class=\"form-section my-3\">\n <i class=\"ft-edit\" aria-hidden=\"true\"></i>\n Update Card Details\n </h4>\n </div>\n <div class=\"col-12 col-lg-6 mt-3 payment-left p-3 card\">\n <div class=\"card-body\">\n <div class=\"alert alert-danger\"\n *ngIf=\"errorMsg\">{{ errorMsg }}</div>\n <ng-template [ngIf]=\"!isChangePayment && cardDetails\">\n <pw-saved-card-details [data]=\"cardDetails\"\n (changeEvent)=\"onChange($event)\">\n </pw-saved-card-details>\n </ng-template>\n\n <ng-template [ngIf]=\"loading\">\n <div class=\"text-center\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-template>\n\n <ng-container *ngIf=\"(!cardDetails && !loading) || isChangePayment\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <h4 class=\"title\">New card?</h4>\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"mb-3\">\n <label for=\"update-payment-card_number\">Card Number</label>\n <input type=\"text\"\n id=\"update-payment-card_number\"\n class=\"form-control\"\n formControlName=\"card_number\"\n placeholder=\"Card Number\"\n name=\"card_number\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('card_number').touched &&\n form.get('card_number').errors?.required\n \">\n <span> Please enter card number. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label for=\"update-payment-cvc\">CVC</label>\n <input type=\"text\"\n id=\"update-payment-cvc\"\n class=\"form-control\"\n formControlName=\"cvc\"\n placeholder=\"CVC\"\n name=\"cvc\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('cvc').touched &&\n form.get('cvc').errors?.required\n \">\n <span> Please enter cvc number. </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"update-payment-exp_month-label\">Exp. Month</label>\n <p-select\n [attr.aria-labelledby]=\"'update-payment-exp_month-label'\"\n [options]=\"months\"\n [appendTo]=\"'body'\"\n formControlName=\"exp_month\"\n [placeholder]=\"'Exp. Month'\"\n optionValue=\"value\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_month').touched &&\n form.get('exp_month').errors?.required\n \">\n <span> Please enter expiry month. </span>\n </div>\n </div>\n </div>\n\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"update-payment-exp_year-label\">Exp. Year</label>\n <p-select\n [attr.aria-labelledby]=\"'update-payment-exp_year-label'\"\n [options]=\"years\"\n formControlName=\"exp_year\"\n [placeholder]=\"'Exp. Year'\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_year')?.touched &&\n form.get('exp_year')?.errors?.['required']\n \">\n <span> Please enter expiry year. </span>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 text-center mt-4\">\n <img src=\"/assets/img/icons/powered_by_stripe_v2.png\"\n class=\"payment-provider\"\n alt=\"\" />\n </div>\n\n <div class=\"col-12 mt-4 text-end\">\n <button type=\"button\"\n (click)=\"cancel()\"\n class=\"btn btn-outline-default me-2\">\n Cancel\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [buttonBusy]=\"busy\">\n Submit\n </button>\n </div>\n </div>\n </form>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport {\n FormHelperService,\n ProductService,\n ScriptLoaderService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { Product, Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\nimport { CardDetails } from '../../../shared/interface/user-module.interface';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare let Stripe;\n\n@Component({\n selector: 'pw-upgrade-subscription',\n templateUrl: './upgrade-subscription.component.html',\n styleUrls: ['./upgrade-subscription.component.scss'],\n\n standalone: false\n})\nexport class UpgradeSubscriptionComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('passwordValidationModal', { static: true })\n passwordValidationModal: PasswordValidationComponent;\n\n form: UntypedFormGroup;\n\n product: Product;\n subscription: Subscription;\n user: User;\n cardDetails: CardDetails;\n\n units: number;\n subscriptionId: number;\n productId: number;\n\n unitError: string;\n password: string;\n stripePublishKey: string;\n\n busy: boolean;\n isPurchaseAttempted: boolean;\n\n months = [];\n years = [];\n\n showNewCard: boolean;\n passwordModalVisible: boolean;\n\n errorMsg;\n\n get totalAmount() {\n if (this.product) {\n const units = Number(this.form.get('units').value);\n // eslint-disable-next-line no-restricted-globals\n if (!Number.isNaN(units)) {\n return (units * this.product.price_per_unit) / 100;\n }\n }\n\n return 0;\n }\n\n constructor(\n injector: Injector,\n private readonly productService: ProductService,\n private readonly fb: UntypedFormBuilder,\n private readonly modalService: NgbModal,\n private readonly subscriptionService: SubscriptionService,\n private readonly store: Store<AppState>,\n private readonly scriptLoader: ScriptLoaderService\n ) {\n super(injector);\n this.form = this.fb.group({\n card_number: ['', Validators.required],\n units: [],\n cvc: ['', Validators.required],\n exp_month: ['', Validators.required],\n exp_year: ['', Validators.required]\n });\n }\n\n ngOnInit(): void {\n this.scriptLoader.loadScript('head', 'https://js.stripe.com/v2/', true);\n this.years = HelperService.getYears();\n this.months = HelperService.getMonths();\n\n this.userStore().subscribe(user => {\n this.user = user;\n });\n\n this.route.params.subscribe(response => {\n this.subscriptionId = +response['subscriptionId'];\n this.productId = +response['productId'];\n this.getSubscriptionDetails();\n this.getCardDetails(this.subscriptionId);\n });\n }\n\n getSubscriptionDetails() {\n this.subscriptionService\n .getById(this.subscriptionId)\n .subscribe(response => {\n this.subscription = response;\n const product = this.subscription.products.find(x => x.id === this.productId);\n this.form.patchValue({\n units: product?.purchased_units\n });\n\n this.units = this.form.get('units').value;\n })\n .add(() => {\n this.getProductDetails();\n });\n }\n\n getProductDetails() {\n this.productService.getProductById(this.productId).subscribe(response => {\n this.product = response;\n this.stripePublishKey = response?.stripe_publishable_key;\n if (response?.stripe_publishable_key) {\n Stripe.setPublishableKey(response.stripe_publishable_key);\n }\n const prodUnits =\n this.units > this.product.min_units ? this.units : this.product.min_units || 1;\n\n this.form.patchValue({\n units: prodUnits\n });\n\n this.units = this.form.get('units').value;\n });\n }\n\n onMaxReached(event) {\n if (event) {\n this.unitError = `Maximum is ${this.units}`;\n }\n }\n\n onMinReached(event) {\n if (event) {\n this.unitError = `Minimum is ${this.subscription.min_units || this.product.min_units}`;\n }\n }\n\n onUnitChange(event) {\n this.units = event;\n this.form.patchValue({\n units: event\n });\n this.unitError = '';\n }\n\n onValidatePassword(isSuccess: boolean) {\n if (isSuccess) {\n this.onPurchaseSubmit();\n this.password = null;\n this.modalService.dismissAll();\n }\n }\n\n private postCreateToken(cardToken) {\n const data = {\n stripe_token: cardToken,\n product_id: this.product.id,\n units: this.form.get('units').value || 1,\n subscription_id: this.subscriptionId\n };\n this.userService\n .addNewSubscriptionUsingStripe(data)\n .subscribe({\n next: () => {\n this.toast.success(\n this.translation.translate('User.Subscriptions.SubscriptionPurchased')\n );\n this.router.navigate(['/account/subscriptions']);\n this.modalService.dismissAll();\n },\n error: () => {\n this.busy = false;\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n\n attemptPurchase() {\n if (this.user.has_password) {\n this.passwordValidationModal.open();\n } else {\n this.noPasswordModal();\n }\n }\n\n private onPurchaseSubmit() {\n this.busy = true;\n this.passwordModalVisible = true;\n if (this.subscription.stripe_customer_id) {\n if (this.showNewCard) {\n this.updateCardDetails();\n } else {\n this.enrollUserToSubscription();\n }\n } else if (this.form.valid) {\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n // Get publishable key from product get id\n Stripe.card.createToken(\n cardDetails,\n (status, response) => {\n if (status === StatusCodes.OK) {\n const cardToken = response.id;\n this.postCreateToken(cardToken);\n } else {\n this.toast.error(response?.error?.message, '', { disableTimeOut: true });\n this.busy = false;\n this.isPurchaseAttempted = false;\n }\n },\n () => {\n this.busy = false;\n this.isPurchaseAttempted = false;\n this.modalService.dismissAll();\n }\n );\n }\n }\n\n private enrollUserToSubscription() {\n const data = {\n product_id: this.product.id,\n units: this.form.get('units').value,\n subscription_id: this.subscriptionId\n };\n\n this.subscriptionService.postSubscription(data).subscribe({\n next: response => {\n this.store.dispatch(new GetUser());\n if (response.id) {\n this.router.navigate(['/account/subscriptions']);\n this.toast.success(\n this.translation.translate('User.Subscriptions.SubscriptionPurchased')\n );\n this.isPurchaseAttempted = false;\n this.modalService.dismissAll();\n this.back();\n }\n },\n error: () => {\n this.busy = false;\n this.isPurchaseAttempted = false;\n },\n complete: () => {\n this.busy = !this.busy;\n }\n });\n }\n\n private noPasswordModal() {\n swal.fire({\n title: 'Set Password',\n html: `<div>Please set a password before changing the subscription in the account section.</div>\n <br />\n <strong><a href=\"/account/details\">Click here to reset</a></strong>`,\n confirmButtonText: 'OK'\n });\n }\n\n private getCardDetails(subscriptionId: number) {\n this.subscriptionService.getCardDetails(subscriptionId).subscribe(data => {\n this.cardDetails = data.data || null;\n this.form.patchValue({\n units: this.units,\n card_number: this.cardDetails?.card_number,\n cvc: this.cardDetails?.cvc,\n exp_month: this.cardDetails?.exp_month || '',\n exp_year: this.cardDetails?.exp_year || ''\n });\n });\n }\n\n onDiscardToggle() {\n this.form.markAllAsTouched();\n FormHelperService.markFormAsPristine(this.form);\n }\n\n @ValidateForm('form')\n updateCardDetails() {\n const cardDetails = {\n number: this.form.value.card_number,\n cvc: this.form.value.cvc,\n exp_month: this.form.value.exp_month,\n exp_year: this.form.value.exp_year\n };\n Stripe.setPublishableKey(this.stripePublishKey);\n\n Stripe.card.createToken(cardDetails, (status, res) => {\n if (status !== 200) {\n this.toast.error(res.error.message);\n } else {\n this.subscriptionService\n .updateCardDetails(this.form.value, this.subscriptionId)\n .subscribe({\n next: response => {\n if (response.error) {\n const err = response.error.errors[0].message;\n this.toast.error(err);\n } else if (response.status === StatusCodes.CREATED) {\n this.enrollUserToSubscription();\n this.toast.success(response.message);\n }\n },\n error: error => {\n this.errorMsg = HelperService.getErrorMessage(error);\n this.toast.error(this.errorMsg);\n }\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<h4 class=\"form-section m-3\">\n <i class=\"ft-check-circle\" aria-hidden=\"true\"></i> {{ 'Button.Payment' | transloco }}\n</h4>\n<div class=\"card-block\">\n <!-- Show Payment Page when there is user.has_stripe_account===false -->\n <ng-container>\n <form class=\"form\"\n (ngSubmit)=\"attemptPurchase()\"\n [formGroup]=\"form\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-body p-3 payment-left card pb-0\">\n <div class=\"card-body\">\n <div class=\"row\"\n *ngIf=\"product?.max_units > 1\">\n <div class=\"col-12\">\n <div class=\"mb-3\">\n <h4 class=\"title\">\n {{ 'User.Subscriptions.LicensesRequired' | transloco }}\n </h4>\n <div class=\"row btns-row\">\n <div class=\"col-md-4 col-8\">\n <pw-number-picker name=\"number-picker\"\n [(value)]=\"units\"\n [min]=\"subscription.min_units || product.min_units\"\n [max]=\"product.max_units\"\n step=\"1\"\n postfix=\"Units\"\n placeholder=\"Total Licenses\"\n [inputReadOnly]=\"false\"\n size=\"small\"\n pickStartAfter=\"500\"\n pickTimer=\"100\"\n [arrowKeys]=\"true\"\n (minReached)=\"onMinReached($event)\"\n (maxReached)=\"onMaxReached($event)\"\n (valueChange)=\"onUnitChange($event)\">\n </pw-number-picker>\n </div>\n </div>\n <div class=\"text-center\">\n <small class=\"form-text text-muted danger\">\n {{ unitError }}\n </small>\n </div>\n </div>\n <p>\n If you proceed, your credit card will be charged\n <strong>{{ product.currency }}\n {{ totalAmount | number:'1.2-2' }}</strong>\n </p>\n </div>\n </div>\n <!-- Shows Saved Card: Shows when user has card details and not trying to update the card details -->\n <ng-template [ngIf]=\"cardDetails\">\n <pw-saved-card-details [data]=\"cardDetails\"\n (changeEvent)=\"showNewCard = $event\"\n [showNewCard]=\"showNewCard\">\n </pw-saved-card-details>\n </ng-template>\n <!-- Add New Payment Starts, opens up when user doesn't have stripe account or tries to change the\n card details -->\n <ng-template [ngIf]=\"(user && !cardDetails) || (cardDetails && showNewCard)\">\n <h4 class=\"title\">\n {{ 'User.Subscriptions.NewCard' | transloco }}?\n </h4>\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"mb-3\">\n <label for=\"upgrade-subscription-card_number\">{{\n 'User.Subscriptions.CardNumber' | transloco\n }}</label>\n <input type=\"text\"\n id=\"upgrade-subscription-card_number\"\n class=\"form-control\"\n formControlName=\"card_number\"\n placeholder=\"Card Number\"\n name=\"card_number\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('card_number').touched &&\n form.get('card_number').errors?.required\n \">\n <span> Please enter card number. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label for=\"upgrade-subscription-cvc\">{{\n 'User.Subscriptions.CVC' | transloco\n }}</label>\n <input type=\"text\"\n id=\"upgrade-subscription-cvc\"\n class=\"form-control\"\n formControlName=\"cvc\"\n placeholder=\"CVC\"\n name=\"cvc\" />\n <div class=\"danger\"\n *ngIf=\"\n form.get('cvc').touched &&\n form.get('cvc').errors?.required\n \">\n <span> Please enter cvc. </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"upgrade-subscription-exp_month-label\">Exp. Month</label>\n <p-select\n [attr.aria-labelledby]=\"'upgrade-subscription-exp_month-label'\"\n [options]=\"months\"\n formControlName=\"exp_month\"\n [placeholder]=\"'Exp. Month'\"\n optionValue=\"value\"\n [appendTo]=\"'body'\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_month').touched &&\n form.get('exp_month').errors?.required\n \">\n <span> Please enter expiry month. </span>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"mb-3\">\n <label class=\"sr-only\" id=\"upgrade-subscription-exp_year-label\">Exp. Year</label>\n <p-select\n [attr.aria-labelledby]=\"'upgrade-subscription-exp_year-label'\"\n [options]=\"years\"\n formControlName=\"exp_year\"\n [placeholder]=\"'Exp. Year'\"\n [appendTo]=\"'body'\"\n optionValue=\"value\"\n optionLabel=\"value\">\n </p-select>\n <div class=\"danger\"\n *ngIf=\"\n form.get('exp_year').touched &&\n form.get('exp_year').errors?.required\n \">\n <span> Please enter expiry year. </span>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-2\"\n *ngIf=\"cardDetails\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"showNewCard = false; onDiscardToggle()\">Disregard and pay with current registered card</a>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n <!-- Purchase Summary -->\n <div class=\"col-md-6\"\n *ngIf=\"product\">\n <div class=\"purchase-summary card p-3 payment-right\">\n <div class=\"card-body\">\n <h4 class=\"title\">{{ 'Label.PurchaseSummary' | transloco }}</h4>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Plan' | transloco }}:</div>\n <div class=\"summary-right\">{{ product.name }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Price' | transloco }}:</div>\n <div class=\"summary-right\">\n {{ product.currency }}\n {{ (product.price_per_unit / 100) | number:'1.2-2' }}\n </div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Seats' | transloco }}:</div>\n <div class=\"summary-right\">{{ form.get('units').value }}</div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">{{ 'Label.Total' | transloco }}:</div>\n <div class=\"summary-right\">\n {{ product.currency }} {{ totalAmount | number:'1.2-2' }}\n </div>\n </div>\n <div class=\"summary-row d-flex mb-2\">\n <div class=\"summary-left\">\n {{ 'Label.Recurrency' | transloco }}:\n </div>\n <div class=\"summary-right\">{{ product.billing_frequency }}</div>\n </div>\n </div>\n <div class=\"text-center\">\n <hr />\n <p>\n By subscribing you acknowledge and accept our terms of service and\n privacy policy\n </p>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-center mt-3\">\n <img src=\"/assets/img/icons/powered_by_stripe_v2.png\"\n class=\"payment-provider\"\n alt=\"\" />\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"form-actions text-end\">\n <button type=\"button\"\n class=\"btn btn-raised btn-outline-default me-1\"\n [disabled]=\"isPurchaseAttempted\"\n routerLink=\"/account/subscriptions\">\n <i class=\"ft-x\" aria-hidden=\"true\"></i>{{ 'Button.Back' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-raised btn-primary\"\n [disabled]=\"isPurchaseAttempted\"\n [buttonBusy]=\"busy\">\n <i class=\"ft-check\" aria-hidden=\"true\"></i>\n {{ 'Button.Purchase' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </ng-container>\n</div>\n\n<pw-password-validation #passwordValidationModal\n (successEvent)=\"onValidatePassword($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>\n If you proceed, your credit card will be charged\n <strong *ngIf=\"totalAmount\">{{ product.currency }} {{ totalAmount | number:'1.2-2' }}</strong>\n </p>\n </div>\n </div>\n</pw-password-validation>\n","import { Component, Injector, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport {\n AbstractControl,\n UntypedFormBuilder,\n UntypedFormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport { GeoService, SubscriptionService, ValidationService } from '@posiwise/common-services';\nimport { Country, Product, Subscription, User } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { map, Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\n@Component({\n templateUrl: './user-subscription-details.component.html',\n styleUrls: ['./user-subscription-details.component.scss'],\n\n standalone: false\n})\nexport class UserSubscriptionDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n @ViewChild('modal', { static: true }) modal: PasswordValidationComponent;\n\n allowUpdate: boolean;\n hasUnitChanged: boolean;\n\n busyButton = false;\n\n form: UntypedFormGroup;\n\n unitError: string;\n\n subscription: Subscription;\n\n units = 1;\n\n countries$: Observable<Country[]>;\n\n squaredLogo: string;\n fullLogo: string;\n slug: string;\n\n userId: number;\n subscriptionId: number;\n\n user: User;\n\n showApiToken = false;\n showApiClientId = false;\n refreshingTokens = false;\n\n totalAmount() {\n const allProductsPrice = this.subscription.products.map(x => x.price_per_unit * this.units);\n\n return allProductsPrice.reduce((a: number, b: number) => a + b, 0) / 100;\n }\n\n constructor(\n private readonly fb: UntypedFormBuilder,\n private readonly geoService: GeoService,\n private readonly modalService: NgbModal,\n private readonly subscriptionService: SubscriptionService,\n private readonly store: Store<AppState>,\n injector: Injector\n ) {\n super(injector);\n this.form = this.getForm();\n this.route.params.subscribe(params => {\n this.subscriptionId = +params['subscriptionId'];\n this.fetchData();\n });\n }\n\n ngOnInit() {\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n this.userStore().subscribe(user => {\n if (user) {\n this.slug = user.slug;\n this.user = user;\n this.userId = user.id;\n }\n });\n }\n\n private fetchData() {\n this.subscriptionService.getById(this.subscriptionId).subscribe(response => {\n this.subscription = response;\n this.fullLogo = this.subscription?.full_logo.url;\n this.squaredLogo = this.subscription?.squared_logo?.url;\n this.form.patchValue(this.subscription);\n this.units = this.subscription?.products[0]?.purchased_units;\n this.form.patchValue({\n units: this.units\n });\n });\n }\n\n private getForm() {\n return this.fb.group({\n organisation: ['', [Validators.required]],\n contact_name: ['', [Validators.required]],\n contact_email: ['', [Validators.required, Validators.email]],\n contact_tel: [''],\n tax_id: [''],\n invoice_recipient_emails: ['', [this.commaSeparatedEmailsValidator()]],\n address: ['', [Validators.required]],\n country_code: ['', [Validators.required]],\n facebook_handle: [''],\n twitter_handle: [''],\n linkedin_handle: [''],\n reddit_handle: [''],\n company_url: [''],\n enforce_2fa: [false]\n });\n }\n\n private commaSeparatedEmailsValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!control.value) {\n return null; // Allow empty values\n }\n\n const value = control.value as string;\n\n // Check if there are spaces around commas (comma-space or space-comma patterns)\n if (value.includes(',') && (value.includes(', ') || value.includes(' ,'))) {\n return { invalidFormat: true };\n }\n\n // Check if any email part contains spaces (after splitting by comma)\n const emailParts = value.split(',');\n if (emailParts.some((part: string) => part.trim() !== part || part.includes(' '))) {\n return { invalidFormat: true };\n }\n\n // Validate each email\n const emails = emailParts.map((email: string) => email.trim());\n for (const email of emails) {\n if (email && !ValidationService.email(email)) {\n return { invalidEmail: true };\n }\n }\n\n return null;\n };\n }\n\n /** *\n * Update seats for all the products of subscription\n */\n updateUnits() {\n if (this.subscription.products[0].trial_subscription) {\n return;\n }\n this.modal.open();\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onImgError(event: Event, fallbackSrc: string): void {\n const img = event.target as HTMLImageElement | null;\n if (!img) return;\n if (img.src && img.src.endsWith(fallbackSrc)) return;\n img.src = fallbackSrc;\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.subscriptionService.addFullLogo(this.subscriptionId, file).subscribe(res => {\n this.modalService.dismissAll();\n this.fullLogo = res?.full_logo?.url;\n });\n }\n\n uploadSquaredLogo(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.subscriptionService.addSquaredLogo(this.subscriptionId, file).subscribe(res => {\n this.modalService.dismissAll();\n this.squaredLogo = res?.squared_logo?.url;\n });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n dataURLtoBlob(dataUrl) {\n const arr = dataUrl.split(',');\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n @ValidateForm('form')\n onSaveDetails() {\n this.busyButton = true;\n const formValue = { ...this.form.value };\n\n // Process invoice_recipient_emails: remove spaces from comma-separated emails\n if (formValue.invoice_recipient_emails) {\n formValue.invoice_recipient_emails = formValue.invoice_recipient_emails\n .split(',')\n .map((email: string) => email.trim())\n .join(',');\n }\n\n this.subscriptionService\n .updateSubscription(Number(this.subscriptionId), formValue)\n .subscribe(() => {\n this.toast.success('Subscription details updated.');\n this.store.dispatch(new GetUser());\n this.back();\n })\n .add(() => {\n this.busyButton = false;\n });\n }\n\n onPasswordValidation(_event) {\n this.subscriptionService\n .updateSubscriptionUnit(this.subscription.id, this.units)\n .subscribe(response => {\n if (response.status === StatusCodes.OK) {\n this.toast.success('Unit quantity updated.');\n } else {\n this.toast.error('Something went wrong!');\n }\n });\n }\n\n onMaxReached(event) {\n if (event) {\n this.unitError = `Maximum is ${this.units}`;\n }\n }\n\n onMinReached(event) {\n if (event) {\n this.unitError = `Minimum is ${this.units}`;\n }\n }\n\n onUnitChange(event) {\n this.allowUpdate = true;\n this.hasUnitChanged = true;\n this.units = event;\n this.unitError = '';\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('address').setValue(event.formatted_address);\n }\n\n toggleApiTokenVisibility() {\n this.showApiToken = !this.showApiToken;\n }\n\n toggleApiClientIdVisibility() {\n this.showApiClientId = !this.showApiClientId;\n }\n\n refreshApiTokens() {\n swal.fire({\n title: 'Are you sure?',\n text: 'This will expire the current tokens.',\n icon: 'warning',\n showCancelButton: true,\n confirmButtonColor: '#d33',\n cancelButtonColor: '#3085d6',\n confirmButtonText: 'Yes, refresh tokens!'\n }).then(result => {\n if (result.isConfirmed) {\n this.performTokenRefresh();\n }\n });\n }\n\n private performTokenRefresh() {\n this.refreshingTokens = true;\n this.subscriptionService\n .refreshApiTokens(this.subscriptionId)\n .subscribe({\n next: response => {\n if (response && response.api_access_token) {\n this.subscription.api_access_token = response.api_access_token;\n }\n if (response && response.api_client_id) {\n this.subscription.api_client_id = response.api_client_id;\n }\n\n this.showApiToken = false;\n this.showApiClientId = false;\n this.fetchData();\n }\n })\n .add(() => {\n this.refreshingTokens = false;\n });\n }\n\n trackByProduct(_index: number, item: Product) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.allowUpdate = false;\n }\n}\n","<!-- edit Subscription details page -->\n<div class=\"row\">\n <div class=\"col-12\">\n <h3 class=\"my-3\">{{ subscription?.organisation || subscription?.contact_name }}</h3>\n </div>\n</div>\n\n<div class=\"row\"\n *ngIf=\"subscription\">\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">Full Logo\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.FullLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"fullLogo\"\n alt=\"full logo\"\n width=\"100%\"\n class=\"image full-logo\"\n height=\"100%\"\n role=\"presentation\"\n (error)=\"onImgError($event, 'assets/img/icons/dummy-logo.jpg')\" />\n <div class=\"overlay mt-2\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">\n <a aria-label=\"Navigate to Target\">{{ 'User.Profile.Change' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">Squared Logo\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.SquaredLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"squaredLogo\"\n alt=\"Squared Presentation\"\n width=\"150\"\n class=\"squared_logo\"\n [height]=\"'150'\"\n role=\"presentation\"\n (error)=\"onImgError($event, 'assets/img/icons/dummy-icon.jpg')\" />\n <div class=\"overlay mt-2\"\n (keydown.enter)=\"openModal(squaredLogoContent)\"\n (click)=\"openModal(squaredLogoContent)\">\n <div class=\"overlay-text\">\n <a aria-label=\"Navigate to Target\">{{ 'User.Profile.Change' | transloco }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"row\">\n <div class=\"col-12\">\n <small *ngIf=\"subscription?.trial_subscription && subscription?.calculated_price\"\n class=\"text-danger\">Upgrade to be able to update your purchased seats</small>\n </div>\n</div>\n<div class=\"row btns-row align-items-center\">\n <div class=\"col-md-3 col-8\"\n *ngIf=\"subscription\">\n <label for=\"user-subscription-seats\" class=\"visually-hidden\">{{ 'User.Subscriptions.Tooltip.Seats' | transloco }}</label>\n <pw-number-picker [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Seats'|transloco\"\n inputId=\"user-subscription-seats\"\n name=\"number-picker\"\n [(value)]=\"units\"\n [min]=\"subscription?.min_units||subscription?.products[0].min_units\"\n [max]=\"subscription?.products[0].max_units\"\n step=\"1\"\n postfix=\"seats\"\n placeholder=\"Total Licences\"\n [inputReadOnly]=\"subscription?.products[0].trial_subscription\"\n [showUpButton]=\"!subscription?.products[0].trial_subscription\"\n [showDownButton]=\"!subscription?.products[0].trial_subscription\"\n size=\"small\"\n pickStartAfter=\"500\"\n pickTimer=\"100\"\n [arrowKeys]=\"true\"\n (minReached)=\"onMinReached($event)\"\n (maxReached)=\"onMaxReached($event)\"\n (valueChange)=\"onUnitChange($event)\">\n </pw-number-picker>\n </div>\n\n <div class=\"col-md-3 col-4 p-1\"\n *ngIf=\"subscription\">\n\n <ng-template [ngIf]=\"!subscription?.products[0].trial_subscription && allowUpdate\"\n [ngIfElse]=\"nonPaidRef\">\n <button class=\"btn btn-primary\"\n (click)=\"updateUnits()\">\n {{ 'User.Subscriptions.UpdateUnits' | transloco }}\n </button>\n </ng-template>\n <ng-template #nonPaidRef>\n <div>\n <small class=\"danger\"\n *ngIf=\"subscription?.products[0].trial_subscription\">Update seats is available only to paid subscriptions</small>\n </div>\n </ng-template>\n </div>\n\n <div class=\"col-12 col-md-6\"\n *ngIf=\"hasUnitChanged\">\n <table class=\"table table-borderless table-sm\"\n aria-describedby=\"Product details\">\n <thead>\n <tr>\n <th scope=\"true\">Product</th>\n <th scope=\"true\">Price per seat <span>({{subscription?.products[0]?.currency|currencySymbol}})</span></th>\n <th scope=\"true\">Seats</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let product of subscription.products; trackBy: trackByProduct\">\n <td>{{ product.name }}</td>\n <td>{{ product.price_per_unit / 100 }}</td>\n <td>{{ units }}</td>\n </tr>\n </tbody>\n </table>\n <p>\n If you proceed, the new cost for your subscription will be\n <strong>{{ totalAmount()| currency: subscription?.products[0]?.currency:'symbol-narrow'}}</strong>\n </p>\n </div>\n</div>\n<form [formGroup]=\"form\"\n (ngSubmit)=\"onSaveDetails()\"\n class=\"row mt-4\"\n *ngIf=\"subscription\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.ContactName' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Name\"\n name=\"contact_name\"\n controlId=\"user-subscription-contact_name\"\n errorMsg=\"Please enter Contact Name\">\n <input type=\"text\"\n id=\"user-subscription-contact_name\"\n class=\"form-control\"\n formControlName=\"contact_name\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.ContactEmail' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Email\"\n name=\"contact_email\"\n controlId=\"user-subscription-contact_email\"\n errorMsg=\"Please enter Contact Email\">\n <input type=\"text\"\n id=\"user-subscription-contact_email\"\n class=\"form-control\"\n formControlName=\"contact_email\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Organization' | transloco\"\n class=\"col-md-6\"\n label=\"Organisation\"\n name=\"organisation\"\n controlId=\"user-subscription-organisation\"\n errorMsg=\"Please enter organisation\">\n <input type=\"text\"\n id=\"user-subscription-organisation\"\n class=\"form-control\"\n formControlName=\"organisation\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Phone' | transloco\"\n class=\"col-md-6\"\n label=\"Contact Tel\"\n name=\"contact_tel\"\n controlId=\"user-subscription-contact_tel\"\n errorMsg=\"Please enter Contact Telephone Number\">\n <input type=\"text\"\n id=\"user-subscription-contact_tel\"\n class=\"form-control\"\n formControlName=\"contact_tel\" />\n </pw-input-container>\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Country' | transloco\"\n class=\"col-md-6\"\n label=\"Country\"\n name=\"country_code\"\n controlId=\"user-subscription-country_code\"\n [useAriaLabelledbyOnly]=\"true\"\n [isLeftTooltip]=\"true\"\n errorMsg=\"Please select a country\">\n <p-select\n [attr.aria-labelledby]=\"'user-subscription-country_code-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country_code\"\n placeholder=\"Select Country\">\n </p-select>\n </pw-input-container>\n </ng-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Address' | transloco\"\n class=\"col-md-6\"\n label=\"Address\"\n name=\"address\"\n controlId=\"user-subscription-address\"\n [useAriaLabelledbyOnly]=\"true\"\n errorMsg=\"Please enter address\">\n <input ngx-gp-autocomplete\n id=\"user-subscription-address\"\n name=\"address\"\n class=\"form-control\"\n [attr.aria-labelledby]=\"'user-subscription-address-label'\"\n #places=\"ngx-places\"\n formControlName=\"address\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.VatNumber' | transloco\"\n class=\"col-md-6\"\n label=\"GST/VAT Number\"\n name=\"tax_id\"\n controlId=\"user-subscription-tax_id\"\n errorMsg=\"Please enter GST/VAT Number\">\n <input type=\"text\"\n id=\"user-subscription-tax_id\"\n class=\"form-control\"\n formControlName=\"tax_id\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.CompanyUrl' | transloco\"\n class=\"col-md-6\"\n label=\"Company URL\"\n name=\"company_url\"\n controlId=\"user-subscription-company_url\"\n errorMsg=\"Please enter company url\">\n <input type=\"text\"\n id=\"user-subscription-company_url\"\n class=\"form-control\"\n formControlName=\"company_url\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.InvoiceRecipientEmails' | transloco\"\n class=\"col-md-6\"\n label=\"Invoice Recipient Emails\"\n name=\"invoice_recipient_emails\"\n controlId=\"user-subscription-invoice_recipient_emails\"\n errorMsg=\"Please enter valid email addresses separated by commas\">\n <input type=\"text\"\n id=\"user-subscription-invoice_recipient_emails\"\n class=\"form-control\"\n formControlName=\"invoice_recipient_emails\"\n placeholder=\"email1@example.com,email2@example.com\" />\n </pw-input-container>\n\n <ng-container *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <div class=\"col-12\">\n <h3>Social Media</h3>\n <p>\n Any of the social media handles that you set here will appear in the footer of emails going out to your child subscriptions.\n </p>\n </div>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.FacebookHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Facebook handle\"\n name=\"facebook_handle\"\n controlId=\"user-subscription-facebook_handle\"\n errorMsg=\"Please enter facebook id\">\n <input type=\"text\"\n id=\"user-subscription-facebook_handle\"\n class=\"form-control\"\n formControlName=\"facebook_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.TwitterHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Twitter handle\"\n name=\"twitter_handle\"\n controlId=\"user-subscription-twitter_handle\"\n errorMsg=\"Please enter twitter id\">\n <input type=\"text\"\n id=\"user-subscription-twitter_handle\"\n class=\"form-control\"\n formControlName=\"twitter_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.LinkedinHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Linkedin handle\"\n name=\"linkedin_handle\"\n controlId=\"user-subscription-linkedin_handle\"\n errorMsg=\"Please enter linkedin id\">\n <input type=\"text\"\n id=\"user-subscription-linkedin_handle\"\n class=\"form-control\"\n formControlName=\"linkedin_handle\" />\n </pw-input-container>\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.RedditHandle' | transloco\"\n class=\"col-md-6\"\n label=\"Reddit handle\"\n name=\"reddit_handle\"\n controlId=\"user-subscription-reddit_handle\"\n errorMsg=\"Please enter reddit id\">\n <input type=\"text\"\n id=\"user-subscription-reddit_handle\"\n class=\"form-control\"\n formControlName=\"reddit_handle\" />\n </pw-input-container>\n </ng-container>\n\n <ng-container *ngIf=\"subscription?.api_hits_max > 0\">\n <div class=\"col-12\">\n <h3>{{ 'User.Subscriptions.APICredentials.Title' | transloco }}</h3>\n <p>\n Manage your {{appConfig?.company?.name}} API credentials. These tokens are used to authenticate API requests.\n </p>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"user-subscription-api-token\">{{ 'User.Subscriptions.APICredentials.AccessToken' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"user-subscription-api-token\"\n name=\"api_token\"\n class=\"form-control\"\n [value]=\"showApiToken ? subscription?.api_access_token || ('User.Subscriptions.APICredentials.NoTokenAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiTokenVisibility()\">\n {{ showApiToken ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"user-subscription-api-client-id\">{{ 'User.Subscriptions.APICredentials.ClientId' | transloco }}</label>\n <div class=\"input-group\">\n <input type=\"text\"\n id=\"user-subscription-api-client-id\"\n name=\"api_client_id\"\n class=\"form-control\"\n [value]=\"showApiClientId ? subscription?.api_client_id || ('User.Subscriptions.APICredentials.NoClientIdAvailable' | transloco) : '*************************'\"\n readonly />\n <button type=\"button\"\n class=\"btn btn-outline-secondary\"\n (click)=\"toggleApiClientIdVisibility()\">\n {{ showApiClientId ? ('User.Subscriptions.APICredentials.Hide' | transloco) : ('User.Subscriptions.APICredentials.View' | transloco) }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-12 mt-3\">\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\"\n class=\"btn btn-warning\"\n (click)=\"refreshApiTokens()\"\n [disabled]=\"refreshingTokens\">\n <i class=\"fas fa-sync-alt me-2\" [class.fa-spin]=\"refreshingTokens\"></i>\n {{ refreshingTokens ? ('User.Subscriptions.APICredentials.Refreshing' | transloco) : ('User.Subscriptions.APICredentials.RefreshTokens' | transloco) }}\n </button>\n\n <div class=\"d-flex align-items-center gap-2\">\n <ng-container *ngIf=\"subscription?.api_hits !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHits' | transloco }}:</span>\n <span class=\"fw-bold\">{{ subscription.api_hits | number }}</span>\n </ng-container>\n\n <ng-container *ngIf=\"subscription?.api_hits_max !== null\">\n <span class=\"text-muted\">{{ 'User.Subscriptions.APICredentials.ApiHitsMax' | transloco }}:</span>\n <span class=\"fw-bold\">{{ subscription.api_hits_max | number }}</span>\n </ng-container>\n\n <!-- Show utilization percentage when both values exist -->\n <ng-container *ngIf=\"subscription?.api_hits !== null || subscription?.api_hits_max !== null\">\n <span class=\"text-muted ms-2\">(</span>\n <span class=\"fw-bold\" [ngClass]=\"{\n 'text-success': (subscription.api_hits / subscription.api_hits_max) <= 0.8,\n 'text-warning': (subscription.api_hits / subscription.api_hits_max) > 0.8 && (subscription.api_hits / subscription.api_hits_max) <= 0.9,\n 'text-danger': (subscription.api_hits / subscription.api_hits_max) > 0.9\n }\">\n {{ (subscription.api_hits / subscription.api_hits_max * 100) | number:'1.0-0' }}% consumed\n </span>\n <span class=\"text-muted\">)</span>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"col-12 mt-5\">\n <h3>Security</h3>\n <p>\n While we'll add more security options in the future, please start by enforcing 2FA for all your subscription members.\n </p>\n </div>\n <div class=\"col-12 col-sm-3\">\n <pw-input-container label=\"Enforce 2FA\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'User.Subscriptions.Tooltip.Enforce2fa' | transloco\"\n name=\"enforce_2fa\"\n controlId=\"user-subscription-enforce_2fa\"\n [useAriaLabelledbyOnly]=\"true\">\n <ui-switch formControlName=\"enforce_2fa\"\n name=\"enforce_2fa\"\n [attr.aria-labelledby]=\"'user-subscription-enforce_2fa-label'\"> </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n routerLink=\"/account/subscriptions\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button name=\"submit\"\n type=\"submit\"\n [buttonBusy]=\"busyButton\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n</form>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.FullLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"onImageSelection($event)\"\n aspectRatio=\"fullLogo\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<ng-template #squaredLogoContent\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.SquaredLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"uploadSquaredLogo($event)\"\n aspectRatio=\"auto\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<pw-password-validation #modal\n (successEvent)=\"onPasswordValidation($event)\"> </pw-password-validation>\n","/*\n * @Author: anikets43\n * @description: shows all the subscribed user products\n * Account => Subscription\n */\n\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { HttpParams } from '@angular/common/http';\nimport { Component, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\n\nimport { AdminService } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, GetUser } from '@posiwise/app-store';\nimport { PermissionService, SubscriptionService } from '@posiwise/common-services';\nimport { Product, Subscription, User } from '@posiwise/common-utilities';\nimport { PasswordValidationComponent } from '@posiwise/shared-components';\n\nimport sortBy from 'lodash/sortBy';\nimport { MenuItem } from 'primeng/api';\nimport swal from 'sweetalert2';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { Store } from '@ngrx/store';\n\nimport { CurrentItem } from '../../../shared/interface/user-module.interface';\nimport { AddSubscriptionComponent } from '../add-subscription/add-subscription.component';\n\n@Component({\n selector: 'pw-user-subscriptions-list',\n templateUrl: './user-subscriptions-list.component.html',\n styleUrls: ['./user-subscriptions-list.component.scss'],\n\n standalone: false\n})\nexport class UserSubscriptionListComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('menuItems', { static: false })\n menu: MenuItem[];\n\n @ViewChild(AddSubscriptionComponent, { static: false })\n changeSubscriptionRef: AddSubscriptionComponent;\n\n @ViewChild('passwordValidationModalForAccountDelete', { static: false })\n passwordValidationModalForAccountDelete: PasswordValidationComponent;\n\n @ViewChild('passwordValidationModalForKey', { static: false })\n passwordValidationModalForKey: PasswordValidationComponent;\n\n @ViewChild('passwordValidationForUnsubscribe', { static: false })\n passwordValidationForUnsubscribe: PasswordValidationComponent;\n\n @ViewChild('cancelSubscriptionModal', { static: false })\n cancelSubscriptionModal: TemplateRef<unknown>;\n\n showApiKey = true;\n\n password: string;\n productName: string;\n\n subscribedSubscriptions = [];\n\n activeItem: MenuItem;\n\n isAddNew: boolean;\n\n user: User;\n\n isUpdatePayment: false;\n\n selectedSubscription: { id: number; productId: number };\n\n editing: boolean;\n\n isLoaded = false;\n\n reasonToCancel = '';\n\n currentItem: CurrentItem;\n\n showTos = false;\n\n objectKeys = Object.keys;\n\n items: MenuItem[] = [\n { id: 'profile', label: 'Profile', icon: 'fa fa-fw fa-user-cog' },\n { id: 'subscription', label: 'Subscription', icon: 'fa fa-fw fa-book' },\n { id: 'invoice', label: 'Invoice', icon: 'fa fa-file-invoice-dollar' }\n ];\n\n productId: number;\n\n constructor(\n private readonly subscriptionService: SubscriptionService,\n private readonly adminService: AdminService,\n private readonly modalService: NgbModal,\n private readonly store: Store<AppState>,\n private readonly clipboard: Clipboard,\n injector: Injector\n ) {\n super(injector);\n this.getSubscribedProduct = this.getSubscribedProduct.bind(this);\n }\n\n ngOnInit() {\n this.route.queryParams.subscribe(params => {\n this.isAddNew = params['isNew'];\n this.getSubscribedProduct();\n this.selectedSubscription = null;\n });\n\n [this.activeItem] = this.items;\n }\n\n onClipboardCopy(accessCode: string) {\n this.clipboard.copy(accessCode);\n this.toast.success('Access Key copied to the clipboard');\n }\n\n attemptUnsubscribe(item, productId: number) {\n this.selectedSubscription = item;\n this.selectedSubscription.productId = productId;\n if (this.user.has_password) {\n this.passwordValidationForUnsubscribe.open();\n } else {\n this.noPasswordModal();\n }\n }\n\n openCancelSubscriptionModal() {\n this.modalService.open(this.cancelSubscriptionModal, {\n centered: true,\n windowClass: 'modal-holder'\n });\n }\n\n private getSubscribedProduct() {\n this.userStore().subscribe(user => {\n this.user = user;\n if (user) {\n this.userService.getUserSubscriptions(user.id).subscribe(response => {\n this.subscribedSubscriptions = sortBy(response.subscriptions, 'deleted');\n response?.expired_subscriptions.forEach(subscription => {\n this.subscribedSubscriptions.push(subscription);\n });\n this.subscribedSubscriptions.forEach(subscription => {\n subscription.products.forEach((product: Product) => {\n product.masked = product.api_access_token\n ? '*************************'\n : null;\n });\n });\n this.isLoaded = true;\n });\n }\n });\n }\n\n updateApiKey(item) {\n this.subscriptionService.updateSubscriptionAPIKey(item.id).subscribe(response => {\n item.api_access_token = response;\n this.toast.success(this.translation.translate('User.Subscriptions.UpdatedKey'));\n this.getSubscribedProduct();\n });\n }\n\n showKey(item) {\n this.currentItem = item;\n this.passwordValidationModalForKey.open();\n this.showApiKey = false;\n }\n\n displayApiKey() {\n this.showApiKey = true;\n this.currentItem.masked = this.currentItem?.api_access_token;\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n if (this.activeItem.id === 'subscription') {\n this.getSubscribedProduct();\n }\n }\n\n onUnsubscribe(item, reasonToCancel: string) {\n const httpParams = new HttpParams().set('product_id', item.productId);\n const requestOptions = {\n params: httpParams,\n body: {\n reason_to_cancel: reasonToCancel\n }\n };\n this.subscriptionService.deleteSubscription(item.id, requestOptions).subscribe(() => {\n this.store.dispatch(new GetUser());\n this.modalService.dismissAll();\n this.getSubscribedProduct();\n this.selectedSubscription = null;\n this.reasonToCancel = '';\n });\n }\n\n onValidatePassword(isSuccess: boolean) {\n if (isSuccess) {\n // Password validation component already closes its modal\n // Use setTimeout to ensure modal is fully closed before opening the next one\n setTimeout(() => {\n this.openCancelSubscriptionModal();\n }, 100);\n }\n }\n\n onConfirmCancel() {\n if (!this.reasonToCancel || this.reasonToCancel.trim() === '') {\n this.toast.error(\n this.translation.translate('User.Subscriptions.Validation.ReasonRequired')\n );\n return;\n }\n this.onUnsubscribe(this.selectedSubscription, this.reasonToCancel);\n }\n\n discardEdit() {\n this.editing = false;\n this.selectedSubscription = null;\n }\n\n onSaveDetails() {\n this.toast.success(this.translation.translate('User.Subscriptions.UpdatedMessage'));\n this.editing = false;\n }\n\n onUpdatePaymentDetailsCancel() {\n this.router.navigate(['.'], { relativeTo: this.route, queryParams: {} });\n }\n\n attemptUpgrade(subscription: Subscription, product: Product) {\n if (this.user.has_password) {\n this.router.navigate([\n `account/subscriptions/upgrade/${subscription.id}/${product.id}`\n ]);\n } else {\n this.noPasswordModal();\n }\n }\n\n private noPasswordModal() {\n swal.fire({\n title: 'Set Password',\n text: `Please set a password before changing the subscription in the account section.`,\n confirmButtonText: 'OK'\n });\n }\n\n showModalForAccountDeletion() {\n swal.fire({\n title: 'Delete',\n html: `Are you sure you want to delete?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.passwordValidationModalForAccountDelete.open();\n }\n });\n }\n\n deleteUser(_event) {\n const subscriptionId = PermissionService.selectedSubscription.id;\n this.adminService.deleteUser(this.user.id, subscriptionId).subscribe(() => {\n this.router.navigate(['logout']);\n });\n }\n\n showPrivacyAndTos(product: Product) {\n this.productId = product.id;\n this.productName = product.name;\n this.showTos = true;\n }\n\n onCancel() {\n this.showTos = false;\n }\n\n trackBySubscription(_index: number, item: { id: number }) {\n return item.id;\n }\n\n trackByProduct(_index: number, item: { id: number }) {\n return item.id;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<ng-container *ngIf=\"!showTos\">\n <!-- Subscriptions Tab Content -->\n <div class=\"row\"\n *ngIf=\"!editing && !isAddNew\">\n <div class=\"col-12\">\n <h2>Your Subscriptions</h2>\n <p class=\"float-start\">You'll find in this section the summary of your subscriptions.</p>\n <div class=\"text-end\">\n <!-- Delete Account -->\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-danger px-3 mt-2 me-2 me-sm-2\"\n (click)=\"showModalForAccountDeletion()\"\n [pTooltip]=\"'User.Account.Tooltip.DeleteAccount' | transloco\"\n tooltipPosition=\"bottom\">\n {{ 'User.Account.DeleteAccount' | transloco }}\n </button>\n </div>\n </div>\n </div>\n <!-- Subscribed Product Cards -->\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"row\"\n *ngIf=\"\n !editing && !isAddNew && !isUpdatePayment && isLoaded && subscribedSubscriptions.length\n \">\n <div class=\"col-12 col-md-6 my-4\"\n *ngFor=\"let subscription of subscribedSubscriptions; trackBy: trackBySubscription\">\n <div class=\"subscription-details mb-4\">\n <div class=\"float-start\">\n <div>\n <strong>Organisation:</strong>\n {{\n subscription.organisation\n ? subscription.organisation\n : subscription.contact_name\n }}\n </div>\n <div>\n <strong>{{ 'User.Subscriptions.TotalPriceExclTax' | transloco }}:</strong>\n <ng-template [ngIf]=\"subscription.calculated_price\"\n [ngIfElse]=\"freeProductRef\">\n {{\n subscription.calculated_price / 100\n | currency: subscription.products[0]?.currency:'symbol-narrow'\n }}\n {{ subscription.products[0].trial_subscription ? '(After Trial)' : '' }}\n </ng-template>\n <ng-template #freeProductRef> Free </ng-template>\n </div>\n <div>\n <strong>{{ 'User.Subscriptions.TotalPurchasedSeats' | transloco }}:</strong>\n {{ subscription.purchased_units }}\n </div>\n <div>\n <div>\n <strong>{{ 'User.Subscriptions.SeatsInUse' | transloco }}:</strong>\n {{ subscription.units_in_use || 1 }}\n </div>\n </div>\n </div>\n\n <!-- Products list -->\n <div *ngFor=\"\n let product of subscription.products;\n let first = first;\n trackBy: trackByProduct\n \">\n <ng-container *ngIf=\"first\">\n <!-- Edit -->\n <div *ngIf=\"\n !product.deleted &&\n (subscription.is_subscription_owner ||\n subscription.is_subscription_admin) &&\n !product.dependency_products?.length\n \"\n class=\"float-end m-2 m-sm-2\">\n <a class=\"btn btn-outline-primary btn-sm mx-1\"\n aria-label=\"Navigate to Target\"\n [routerLink]=\"['../subscriptions', subscription.id]\">\n {{ 'Button.Edit' | transloco }}\n </a>\n <button [routerLink]=\"['../subscriptions', subscription.id, 'credential']\"\n *ngIf=\"\n !product.expired &&\n !product.deleted &&\n !product.trial_subscription\n \"\n class=\"btn btn-dark btn-sm float-end mx-1\">\n {{ 'User.Subscriptions.Credentials' | transloco }}\n </button>\n <!-- Update Card Details -->\n <a class=\"btn btn-sm btn-outline-primary mx-1 me-sm-2\"\n *ngIf=\"!isUpdatePayment && subscription.stripe_customer_id\"\n [routerLink]=\"[\n '../subscriptions',\n subscription.id,\n 'product',\n product.id,\n 'update-payment'\n ]\">\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i>\n {{ 'User.Subscriptions.UpdateCardDetails' | transloco }}</a>\n </div>\n <!-- Add New Subscription -->\n <div class=\"float-end m-2 m-sm-2\"\n *ngIf=\"\n !product.deleted &&\n (subscription.is_subscription_owner ||\n subscription.is_subscription_admin) &&\n !product.dependency_products?.length\n \">\n <button class=\"btn btn-sm btn-primary\"\n [routerLink]=\"'/account/subscriptions/add-new'\"\n [queryParams]=\"{ subscription_id: subscription.id }\"\n [pTooltip]=\"\n 'User.Subscriptions.Tooltip.ManageAllProducts' | transloco\n \"\n tooltipPosition=\"bottom\">\n <i class=\"fa fa-plus-circle\"></i>\n {{ 'User.Subscriptions.SeeAllProducts' | transloco }}\n </button>\n </div>\n </ng-container>\n <div class=\"card subscription-products-cards\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <div>\n <h4 class=\"mb-3 text-bold-500 primary\">{{ product?.name }}</h4>\n <!-- Frequency -->\n <div>\n <div>\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.Frequency' | transloco\n }}:</strong>\n {{ product?.billing_frequency | uppercase }}\n </div>\n </div>\n <!-- Expiration -->\n <div [ngClass]=\"{ 'text-danger': product.expired }\">\n <strong class=\"d-inline-block w-50\">{{\n product.expired ? 'Expired' : 'Expiry Date'\n }}:</strong>\n {{ product.expires_at | dateFormat }}\n </div>\n <!-- Estimated Price -->\n <div [ngClass]=\"{ 'text-danger': product.expired }\">\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.PriceExclTax' | transloco\n }}:</strong>\n {{ product.currency }}\n {{ (product.calculated_price / 100) | number:'1.2-2' }}\n </div>\n <!-- API Key -->\n <ng-template [ngIf]=\"\n (product.stripe_plan_id && product.max_hits > 0) ||\n product.max_hits_trial > 0\n \">\n <div class=\"d-inline\">\n <strong class=\"d-inline-block w-50\">{{\n 'User.Subscriptions.ApiKey' | transloco\n }}:</strong>\n <code class=\"d-inline me-2\">{{ product.masked }}</code>\n </div>\n <div class=\"float-end\">\n <!-- Show Access Key -->\n <button class=\"btn\"\n ngbTooltip=\"Show Access Key\"\n (click)=\"showKey(product)\">\n <i class=\"fas fa-eye\" aria-hidden=\"true\"></i>\n </button>\n <!-- Copy To Clipboard -->\n <button class=\"btn\"\n ngbTooltip=\"Copy Key\">\n <i\n class=\"fal fa-copy\"\n aria-hidden=\"true\"\n (click)=\"\n onClipboardCopy(product.api_access_token)\n \"\n (keydown.enter)=\"onClipboardCopy(product.api_access_token)\"\n ></i>\n </button>\n <!-- Update API Key -->\n <button class=\"btn\"\n ngbTooltip=\"Change Key\"\n *ngIf=\"!product.expired && !product.deleted\"\n (click)=\"updateApiKey(product)\">\n <i class=\"fal fa-sync-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </ng-template>\n <div class=\"clearfix\"></div>\n </div>\n </div>\n <div class=\"card-footer px-3\">\n <div class=\"float-start\">\n <div *ngIf=\"product.deleted && !product.expired\">\n <i class=\"fa fa-info-circle me-2\" aria-hidden=\"true\"></i>{{ 'User.Subscriptions.OutdatedMessage' | transloco }}\n </div>\n <div>\n <span *ngIf=\"product.deleted\"\n class=\"badge bg-danger me-2\">Deleted</span>\n <span class=\"badge bg-warning me-2\"\n *ngIf=\"\n product.trial_subscription &&\n product.calculated_price\n \">\n Trial</span>\n <span class=\"badge bg-grey me-2\"\n *ngIf=\"product?.pause_collection && objectKeys(product?.pause_collection)?.length\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.PausedCollection'|transloco\"\n tooltipPosition=\"top\">\n Paused collection\n </span>\n <span class=\"badge bg-success me-2\"\n *ngIf=\"!product.calculated_price\">\n Free\n </span>\n </div>\n </div>\n <ng-template [ngIf]=\"\n subscription.is_subscription_owner ||\n subscription.is_subscription_admin\n \">\n <!-- Unsubscribe -->\n <button class=\"btn btn-outline-danger btn-sm float-end me-2\"\n *ngIf=\"\n subscription?.stripe_customer_id&&\n !product?.deleted &&\n !product?.trial_subscription\n \"\n (click)=\"attemptUnsubscribe(subscription, product.id)\">\n {{ 'User.Subscriptions.Unsubscribe' | transloco }}\n </button>\n <button class=\"badge bg-dark me-2 float-end\"\n *ngIf=\"product?.product_privacy_service_id\"\n (click)=\"showPrivacyAndTos(product)\">\n {{\n 'User.Subscriptions.PrivacyAndTermsOfService'\n | transloco\n }}\n </button>\n\n <ng-template [ngIf]=\"product.stripe_plan_id && product.active\">\n <!-- Upgrade -->\n <button class=\"btn btn-primary btn-sm me-2 float-end\"\n *ngIf=\"product.trial_subscription && !product.deleted\"\n (click)=\"attemptUpgrade(subscription, product)\">\n {{ 'Button.Upgrade' | transloco }}\n </button>\n <!-- Subscribe -->\n <button class=\"btn btn-primary btn-sm float-start\"\n *ngIf=\"subscription.expired && product.stripe_plan_id\"\n [routerLink]=\"'/account/subscriptions/add-new'\">\n {{ 'User.Subscriptions.Subscribe' | transloco }}\n </button>\n </ng-template>\n </ng-template>\n <div *ngIf=\"!product?.deleted && !subscription.is_subscription_owner\">\n <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i> Invited to\n use this product\n <span *ngIf=\"subscription.is_subscription_admin\"\n class=\"fw-bold\">as an admin</span>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"subscription.products.length === 0\">\n <div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-header\">\n <p class=\"text-center\">\n No product available for this subscription\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-12\"\n *ngIf=\"!editing && !isAddNew && !isUpdatePayment\">\n <pw-no-data [withImage]=\"true\" message=\"You don't have any subscription.\"\n *ngIf=\"subscribedSubscriptions.length === 0\">\n </pw-no-data>\n </div>\n </div>\n </div>\n </div>\n\n <!--\n Add New Subscription\n -->\n <!-- <ng-template [ngIf]=\"isAddNew && !isUpdatePayment\">\n <pw-subscription-details></pw-subscription-details>\n </ng-template> -->\n <!--\n Validate Password For Account Delete\n -->\n <pw-password-validation #passwordValidationModalForAccountDelete\n (successEvent)=\"deleteUser($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n </pw-password-validation>\n <!--\n Validate Password For Display Key\n -->\n <pw-password-validation #passwordValidationModalForKey\n (successEvent)=\"displayApiKey()\">\n </pw-password-validation>\n <!--\n Validate Password For Unsubscribe\n -->\n <pw-password-validation #passwordValidationForUnsubscribe\n (successEvent)=\"onValidatePassword($event)\">\n <div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}</p>\n <p>{{ 'User.Account.Message.ConfirmPassword' | transloco }}</p>\n </div>\n </div>\n </pw-password-validation>\n <!--\n Cancel Subscription Modal\n -->\n <ng-template #cancelSubscriptionModal let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\">{{ 'User.Subscriptions.CancelSubscription.Title' | transloco }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss(); reasonToCancel = '';\">\n </button>\n </div>\n <div class=\"modal-body\">\n <p>{{ 'User.Subscriptions.CancelSubscription.Message' | transloco }}</p>\n <div class=\"mb-3\">\n <label for=\"reasonToCancel\" class=\"form-label\">\n {{ 'User.Subscriptions.CancelSubscription.ReasonLabel' | transloco }} <span class=\"text-danger\">*</span>\n </label>\n <textarea\n id=\"reasonToCancel\"\n class=\"form-control\"\n rows=\"4\"\n [(ngModel)]=\"reasonToCancel\"\n [ngClass]=\"{'is-invalid': reasonToCancel && reasonToCancel.trim() === ''}\"\n placeholder=\"{{ 'User.Subscriptions.CancelSubscription.ReasonPlaceholder' | transloco }}\"></textarea>\n <div class=\"invalid-feedback\" *ngIf=\"reasonToCancel && reasonToCancel.trim() === ''\">\n {{ 'User.Subscriptions.Validation.ReasonRequired' | transloco }}\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.dismiss(); reasonToCancel = '';\">\n {{ 'User.Subscriptions.CancelSubscription.KeepItForNow' | transloco }}\n </button>\n <button type=\"button\"\n class=\"btn btn-danger\"\n [disabled]=\"!reasonToCancel || reasonToCancel.trim() === ''\"\n (click)=\"onConfirmCancel(); modal.close()\">\n {{ 'User.Subscriptions.CancelSubscription.ConfirmButton' | transloco }}\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"showTos\">\n <pw-privacy-and-tos [productId]=\"productId\"></pw-privacy-and-tos>\n</ng-container>\n\n<router-outlet></router-outlet>\n","import { Component, Injector, OnDestroy } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging, POLL_TIMEOUT } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { LazyLoadEvent } from 'primeng/api';\nimport { interval, Subscription } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\n\n@Component({\n selector: 'pw-user-invoice',\n templateUrl: './user-invoice.component.html',\n styleUrls: ['./user-invoice.component.scss'],\n\n standalone: false\n})\nexport class UserInvoiceComponent extends AppBaseComponent implements OnDestroy {\n invoices = [];\n buttonBusy = false;\n userId: number;\n totalRecordsUnFiltered = 0;\n\n searchText = '';\n subscription: Subscription;\n intervalTimer = interval(POLL_TIMEOUT * 60 * 1000);\n isLoaded = false;\n page = 0;\n totalRecords = 0;\n\n invoiceFrequency = ['week', 'month', 'year'];\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.fetchInvoices({\n page: this.page,\n page_size: this.PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private fetchInvoices(paging: Paging) {\n this.isLoaded = false;\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user.id;\n this.userService.getUserInvoices(paging, user.id).subscribe(response => {\n this.isLoaded = true;\n this.invoices = response.invoices;\n this.totalRecords = response.object_count;\n this.totalRecordsUnFiltered = response.unfiltered_count;\n this.pollForInvoices();\n });\n }\n });\n }\n\n private pollForInvoices() {\n this.subscription = this.intervalTimer\n .pipe(mergeMap(() => this.userService.getUserInvoices({}, this.userId)))\n .subscribe(data => {\n this.invoices = data.invoices;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\">\n <h2 class=\"card-title p-0 float-start\">Your Invoices</h2>\n </div>\n</div>\n\n<div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"></p-progressSpinner>\n</div>\n<div class=\"row primeng-datatable-container mt-0\" [class.custom-disable-wrapper]=\"buttonBusy\" [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <div class=\"col-12 px-0\">\n <p-table #tt\n [value]=\"invoices\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter justify-content-end\">\n <div class=\"text-end\">\n <label for=\"user-invoice-search\" class=\"visually-hidden\">Search Invoices</label>\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input id=\"user-invoice-search\"\n name=\"user-invoice-search\"\n [(ngModel)]=\"searchText\"\n (input)=\"tt.filterGlobal($event.target.value, 'contains')\"\n type=\"text\"\n pInputText\n size=\"50\"\n placeholder=\"Search Invoices...\"\n data-cy=\"incident-search\"\n class=\"wd-90\">\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\" pSortableColumn=\"date\">Invoice Date <p-sortIcon field=\"date\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"frequency\">Frequency <p-sortIcon field=\"frequency\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"seatsPurchased\">Seats Purchased <p-sortIcon field=\"seatsPurchased\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"subtotal\">Subtotal <p-sortIcon field=\"subtotal\"></p-sortIcon></th>\n <th scope=\"col\" pSortableColumn=\"total\">Total (incl. tax) <p-sortIcon field=\"total\"></p-sortIcon></th>\n <th scope=\"col\">Action</th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-invoice>\n <tr>\n <td>{{ invoice.date | date:'dd-MMM-YYYY' }}</td>\n <td>\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: invoiceFrequency,\n item: invoice.product.billing_frequency\n }\"\n color=\"blue-grey\">{{ invoice.product.billing_frequency }}</span>\n </td>\n <td>{{ invoice?.subscription_product?.purchased_units }}</td>\n <td>{{ (invoice.subtotal_in_cents / 100) | currency:invoice?.product?.currency }}</td>\n <td class=\"td-total\">{{ (invoice.total_in_cents / 100) | currency:invoice?.product?.currency }}</td>\n <td>\n <a *ngIf=\"invoice?.file?.url; else noFileUrl\" class=\"btn btn-sm btn-primary\" [attr.href]=\"invoice.file.url\" target=\"_blank\" title=\"Download\">\n <i class=\"fa fa-download\">&nbsp;Download</i>\n </a>\n <ng-template #noFileUrl>\n <a class=\"btn btn-sm btn-primary\" [attr.href]=\"invoice?.stripe_invoice_pdf\" target=\"_blank\" title=\"Download\">\n <i class=\"fa fa-download\">&nbsp;Download</i>\n </a>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n\n <span *ngIf=\"totalRecords !== 0\" class=\"total-records-count\">Total: {{ totalRecords }}</span>\n\n </div>\n</div>\n<pw-no-data [withImage]=\"true\" message=\"You don't have any invoice yet.\" *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n</pw-no-data>\n\n","import { Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AppState, getUser } from '@posiwise/app-store';\nimport { CommonService, ProfileService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\n\nimport { Store } from '@ngrx/store';\n\n@Component({\n selector: 'pw-communication-tab',\n templateUrl: './communication-tab.component.html',\n styleUrl: './communication-tab.component.scss',\n\n standalone: false\n})\nexport class CommunicationTabComponent extends AppBaseComponent implements OnInit {\n subscriptions = [];\n userSubscription = [];\n\n isLoaded = false;\n\n user: User;\n\n constructor(\n private readonly commonService: CommonService,\n private readonly profileService: ProfileService,\n private readonly store: Store<AppState>,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getAllSubscription();\n }\n\n private getAllSubscription() {\n this.commonService.getAllNewsletter().subscribe(response => {\n this.store.select(getUser).subscribe(user => {\n if (user?.currentUser) {\n this.user = user.currentUser;\n this.profileService\n .getUserObject('user_newsletters', this.user.slug)\n .subscribe(newsletter => {\n this.isLoaded = true;\n this.userSubscription = newsletter;\n this.subscriptions = response.newsletters;\n if (this.userSubscription.length > 0 && this.subscriptions.length > 0) {\n this.subscriptions.forEach(element => {\n const item = this.userSubscription?.find(\n x => x.newsletter_id === element.id\n );\n element.enabled = item ? item.send_newsletters : false;\n });\n } else {\n this.subscriptions.forEach(element => {\n element.enabled = false;\n });\n }\n });\n }\n });\n });\n }\n\n onValueChange(item, value) {\n const data = {\n send_newsletter: value\n };\n\n if (item.id === 9999) {\n const marketingSubs = {\n id: this.user.id,\n send_marketing_emails: value\n };\n this.profileService.updateUserProfile(marketingSubs).subscribe(() => {\n this.updateUser();\n this.toast.success(this.translation.translate('User.Settings.UpdatedMessage'));\n });\n } else {\n this.commonService.toggleNewsletter(item.id, data).subscribe(() => {\n this.updateUser();\n this.toast.success(\n this.translation.translate('User.Settings.Communications.UpdatedMessage')\n );\n });\n }\n }\n\n updateUser() {\n // this.userService.getUserInfo().subscribe(resp => {\n // this.localStorage.setItem('user', JSON.stringify(resp)).subscribe();\n // });\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Communication preferences</h2>\n\n <p>\n Although sometimes we do need to communicate with you - for example if you contact\n Support, or if we need to send you a receipt or invoice - we make a clear distinction\n between transactional and non-transactional communications.\n </p>\n\n <p>\n You will always receive the transactional communications but you can decide to opt out\n from all the not transactional ones. To do so, you’ll just need to turn the switch off\n in the list of available communication provided below.\n </p>\n </div>\n\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n</div>\n\n<div class=\"row mt-4 pt-1\"\n *ngIf=\"isLoaded\">\n <div class=\"col-md-6 col-sm-6\">\n <ng-container *ngFor=\"let item of subscriptions; let idx = index\">\n <div class=\"mb-3\"\n *ngIf=\"item.visible || item.enabled\">\n <div class=\"row\">\n <div class=\"col-md-10 col-sm-6\">\n <label [id]=\"'communication-tab-' + idx\">{{ item.name }}</label>\n </div>\n <div class=\"col-md-2 col-sm-6\">\n <ui-switch [checked]=\"item.enabled\"\n [attr.aria-labelledby]=\"'communication-tab-' + idx\"\n checkedLabel=\"on\"\n uncheckedLabel=\"off\"\n (valueChange)=\"onValueChange(item, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n\n\n<pw-no-data [withImage]=\"true\" message=\"You don't have any communication preferences yet.\" *ngIf=\"subscriptions.length === 0 && isLoaded\">\n</pw-no-data>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-others-tab',\n templateUrl: './others-tab.component.html',\n\n standalone: false\n})\nexport class OthersTabComponent extends AppBaseComponent implements OnInit, OnDestroy {\n subscriptionConfigs = [];\n globalConfigs = [];\n\n userId: number;\n\n isLoaded = false;\n\n constructor(\n private readonly commonService: CommonService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getGlobalConfigs();\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n }\n });\n }\n\n private getGlobalSubscriptionConfig() {\n this.commonService\n .getAllGlobalSubscriptionConfigs()\n .subscribe(response => {\n this.subscriptionConfigs = response.global_subscription_configs;\n this.globalConfigs.forEach(globalConfig => {\n const config = this.subscriptionConfigs?.find(\n subscriptionConfig =>\n subscriptionConfig.global_config_id === globalConfig?.id\n );\n globalConfig.value = config?.value;\n globalConfig.global_subscription_config_id = config?.id;\n });\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n private getGlobalConfigs() {\n this.commonService.getAllGlobalConfigs().subscribe(response => {\n this.globalConfigs = response.global_configs;\n this.getGlobalSubscriptionConfig();\n });\n }\n\n onValueChange(item, value) {\n const data = {\n user_id: this.userId,\n value,\n global_config_id: item?.id\n };\n const sub$ = item?.global_subscription_config_id\n ? this.commonService.editGlobalSubscriptionConfig(\n item?.global_subscription_config_id,\n data\n )\n : this.commonService.postGlobalSubscriptionConfig(data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('User.OtherSettings.UpdatedMessage'));\n }).add(() => {\n this.getGlobalConfigs();\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Other</h2>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"row mt-4 pt-1\"\n *ngIf=\"isLoaded && globalConfigs?.length\">\n <div class=\"col-md-6 col-sm-6\">\n <ng-container *ngFor=\"let item of globalConfigs; let idx = index\">\n <div class=\"mb-3\">\n <div class=\"row\">\n <div class=\"col-md-10 col-sm-6\">\n <label [id]=\"'others-tab-' + idx\"> {{ item?.name }} </label>\n </div>\n <div class=\"col-md-2 col-sm-6\">\n <ui-switch [checked]=\"item.value === 'true'\"\n [attr.aria-labelledby]=\"'others-tab-' + idx\"\n checkedLabel=\"on\"\n uncheckedLabel=\"off\"\n (valueChange)=\"onValueChange(item, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div *ngIf=\"isLoaded && !globalConfigs?.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'User.OtherSettings.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, ElementRef, Injector, OnInit, ViewChild } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\nimport { StatusCodes } from 'http-status-codes';\n\n@Component({\n selector: 'pw-security-tab',\n templateUrl: './security-tab.component.html',\n styleUrls: ['./security-tab.component.scss'],\n\n standalone: false\n})\nexport class SecurityTabComponent extends AppBaseComponent implements OnInit {\n @ViewChild('password', { static: false }) passwordRef: ElementRef;\n @ViewChild('verificationCode', { static: false }) verificationCode: ElementRef;\n\n @ViewChild('ssoPassword', { static: false }) ssoPasswordRef: ElementRef;\n\n showSSOSection = false;\n ssoPasswordVerified = false;\n isSSOPasswordInvalid = true;\n\n user;\n\n isCurrentPasswordValid = true;\n passwordVerified = false;\n show2FA = false;\n\n created2faDetails: object;\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUser();\n }\n\n private getUser() {\n this.userService.getUserInfo().subscribe(res => {\n this.user = res;\n });\n }\n\n validatePassword() {\n const password = this.passwordRef.nativeElement.value;\n if (password) {\n this.userService.checkPassword({ password }).subscribe({\n next: data => {\n if (data?.status === StatusCodes.OK) {\n if (this.user?.enable_two_factor_authenticator === false) {\n this.passwordVerified = true;\n this.create2FA();\n } else {\n this.disable2FA();\n }\n }\n },\n error: err => {\n if (err) {\n this.toast.error(err.error.message);\n this.passwordRef.nativeElement.value = '';\n }\n }\n });\n }\n }\n\n checkValidity() {\n const password = this.passwordRef.nativeElement.value;\n if (password.length > 5) {\n this.isCurrentPasswordValid = false;\n } else {\n this.isCurrentPasswordValid = true;\n }\n }\n\n private create2FA() {\n this.userService.createTwoFactorAuthenticator().subscribe(res => {\n this.created2faDetails = res;\n });\n }\n\n verify2FA() {\n this.userService\n .verifyTwoFactorAuthenticator(this.verificationCode.nativeElement.value)\n .subscribe(() => {\n this.enable2FA();\n });\n }\n\n private enable2FA() {\n this.userService\n .enableTwoFactorAuthenticator(this.verificationCode.nativeElement.value)\n .subscribe(_ => {\n this.getUser();\n this.reset();\n });\n }\n\n private disable2FA() {\n this.userService.disableTwoFactorAuthenticator().subscribe(_ => {\n this.getUser();\n this.reset();\n });\n }\n\n reset() {\n this.show2FA = false;\n this.isCurrentPasswordValid = true;\n this.passwordVerified = false;\n this.created2faDetails = {};\n }\n\n checkSSOPasswordValidity() {\n const password = this.ssoPasswordRef.nativeElement.value;\n this.isSSOPasswordInvalid = password.length <= 5;\n }\n\n validateSSOPassword() {\n const password = this.ssoPasswordRef.nativeElement.value;\n if (password) {\n this.userService.checkPassword({ password }).subscribe({\n next: data => {\n if (data?.status === StatusCodes.OK) {\n this.ssoPasswordVerified = true;\n }\n },\n error: err => {\n this.toast.error(err.error.message);\n this.ssoPasswordRef.nativeElement.value = '';\n }\n });\n }\n }\n\n triggerSSO() {\n this.userService.sendSSOActivationEmail().subscribe(() => {\n this.toast.success(\n this.user?.cognito_sso_activated\n ? 'Activation email resent successfully.'\n : 'SSO activation email sent successfully.'\n );\n this.getUser();\n this.resetSSO();\n });\n }\n\n resetSSO() {\n this.showSSOSection = false;\n this.ssoPasswordVerified = false;\n this.isSSOPasswordInvalid = true;\n if (this.ssoPasswordRef?.nativeElement) {\n this.ssoPasswordRef.nativeElement.value = '';\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Security settings</h2>\n </div>\n</div>\n<p-accordion>\n <p-accordion-panel value=\"0\">\n <p-accordion-header>Two Factor Authentication (2FA)</p-accordion-header>\n <p-accordion-content>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <div class=\"d-flex\">\n <p class=\"small text-muted\"> Add an extra layer of security to your user account by asking to verify their\n identity when they enter a username and password </p>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <!-- Disable 2FA -->\n <button class=\"btn btn-danger\" *ngIf=\"user?.enable_two_factor_authenticator\" (click)=\"show2FA = true\"> Disable\n </button>\n <!-- Enable 2FA -->\n <button class=\"btn btn-primary\" *ngIf=\"!user?.enable_two_factor_authenticator\"\n [disabled]=\"created2faDetails?.code\" (click)=\"show2FA = true\"> Enable </button>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"show2FA\">\n <div class=\"col-12 col-md-6 col-lg-4 mt-2\">\n <div class=\"mb-3\">\n <input type=\"password\" class=\"form-control\" #password *ngIf=\"!passwordVerified\" placeholder=\"Current Password\"\n (keyup)=\"checkValidity()\" id=\"input_current_password_800\" name=\"input_current_password_800\" />\n </div>\n </div>\n <div *ngIf=\"created2faDetails?.code\" class=\"col-12\">\n <p class=\"small\"> Scan the QR code below or use secret manually with the Google authenticator app on your mobile\n device, after that fill in the field below with the code generated in the app </p>\n <img [src]=\"created2faDetails?.qr_uri\" alt=\"loading QR code...\" class=\"qr-code img-thumbnail img-responsive\" />\n <strong> Secret Key: {{ created2faDetails?.code }}</strong>\n <p class=\"small\">Auth Type: Time Based OTP</p>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"show2FA\">\n <div class=\"col-4\">\n <div class=\"mb-3 mt-2\">\n <input type=\"text\" #verificationCode class=\"form-control\" *ngIf=\"passwordVerified\"\n placeholder=\"Provide passcode from authenticator app\" id=\"input_provide_passcode_from_authenticator_app_800\" name=\"input_provide_passcode_from_authenticator_app_800\" />\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"show2FA\">\n <div class=\"d-flex mt-2\">\n <button class=\"btn btn-raised btn-outline-default me-2\" (click)=\"reset()\"> Cancel </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"!passwordVerified\" (click)=\"validatePassword()\"\n [disabled]=\"isCurrentPasswordValid\"> Validate </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"passwordVerified\" (click)=\"verify2FA()\"> Confirm </button>\n </div>\n </div>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n</p-accordion>\n<p-accordion>\n <p-accordion-panel value=\"0\">\n <p-accordion-header>Single Sign On (SSO) - AWS Cognito</p-accordion-header>\n <p-accordion-content>\n <div class=\"row mt-2\">\n <div class=\"col-12\">\n <p class=\"small text-muted\"> {{ user?.cognito_sso_activated ? 'You have already activated AWS Cognito SSO, if you click on ‘Resend activation email‘ you‘ll receive an email with instructions to reset your SSO\n password.' : 'Once you click ‘Enable’, you’ll receive an email with instructions to activate your AWS Cognito\n SSO. This will enable you to access all our systems using a single password.' }} </p>\n </div>\n </div>\n <!-- Enable or Resend Button -->\n <div class=\"row\" *ngIf=\"!showSSOSection\">\n <div class=\"col-12\">\n <button class=\"btn btn-primary\" (click)=\"showSSOSection = true\"> {{ user?.cognito_sso_activated ? 'Resend\n activation email' : 'Enable' }} </button>\n </div>\n </div>\n <!-- Password Validation -->\n <div class=\"row\" *ngIf=\"showSSOSection\">\n <div class=\"col-12 col-md-6 col-lg-4 mt-2\" *ngIf=\"!ssoPasswordVerified\">\n <div class=\"mb-3\">\n <input type=\"password\" class=\"form-control\" #ssoPassword placeholder=\"Current Password\"\n (keyup)=\"checkSSOPasswordValidity()\" id=\"input_current_password_801\" name=\"input_current_password_801\" />\n </div>\n </div>\n <div class=\"col-12\">\n <div class=\"d-flex mt-2\">\n <button class=\"btn btn-raised btn-outline-default me-2\" (click)=\"resetSSO()\"> Cancel </button>\n <button class=\"btn btn-raised btn-primary\" *ngIf=\"!ssoPasswordVerified\" (click)=\"validateSSOPassword()\"\n [disabled]=\"isSSOPasswordInvalid\"> Validate </button>\n <button class=\"btn btn-primary\" *ngIf=\"ssoPasswordVerified\" (click)=\"triggerSSO()\"> Confirm </button>\n </div>\n </div>\n </div>\n </p-accordion-content>\n </p-accordion-panel>\n</p-accordion>\n","import { Component, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { PermissionService } from '@posiwise/common-services';\n\nimport { MenuItem } from 'primeng/api';\n\n@Component({\n selector: 'pw-settings',\n templateUrl: './settings-tabs.component.html',\n\n standalone: false\n})\nexport class SettingsComponent {\n @ViewChild('menuItems', { static: true }) menu: MenuItem[];\n\n items: MenuItem[];\n activeItem: MenuItem;\n\n constructor(\n private readonly router: Router,\n private readonly permissionService: PermissionService\n ) {\n this.items = [\n {\n id: 'communications',\n label: 'Communications',\n icon: 'fa fa-fw fa-cogs',\n routerLink: ['/settings/communication']\n },\n {\n id: 'security',\n label: 'Security',\n icon: 'fa fa-fw fa-lock',\n routerLink: ['/settings/security']\n },\n {\n id: 'other',\n label: 'Other',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/settings/other']\n }\n ];\n this.activeItem =\n this.items[\n this.items.findIndex(\n record => record.routerLink[0] === this.router.url.split('?')[0]\n )\n ];\n }\n\n activateMenu() {\n this.activeItem = this.menu['activeItem'];\n }\n}\n","<pw-tabs [items]=\"items\"></pw-tabs>\n","import { Component, Injector, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, PermissionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-support',\n templateUrl: './support.component.html',\n styleUrls: ['./support.component.scss'],\n\n standalone: false\n})\nexport class SupportComponent extends AppBaseComponent implements OnInit {\n supports = [];\n\n subscriptionId: number;\n\n isLoading: boolean;\n\n isLoaded = false;\n\n constructor(\n injector: Injector,\n private readonly commonService: CommonService\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.subscriptionId = PermissionService.selectedSubscription?.id;\n this.getAllSupport();\n }\n\n private getAllSupport() {\n this.isLoading = true;\n this.commonService\n .getAllCustomerSupport(this.subscriptionId)\n .subscribe(response => {\n this.supports = response;\n })\n .add(() => {\n this.isLoading = false;\n this.isLoaded = true;\n });\n }\n}\n","<div class=\"row m-3\">\n <div class=\"col-12 mb-3\">\n <div\n\t\tclass=\"col-12 d-flex flex-wrap justify-content-between align-items-center mt-4\">\n\t\t<h2 class=\"card-title p-0 float-start\">Support Center</h2>\n\t\t<a routerLink=\"/support-details/add\"\n\t\t\taria-label=\"Navigate to Target\"\n\t\t\tclass=\"btn btn-sm btn-outline-primary float-end\"\n tabindex=\"0\"\n (keydown)=\"$event.key === 'Enter' && $event.target.click()\"\n\t\t\taria-expanded=\"false\">\n\t\t\t<i class=\"fa fa-plus-circle\"\n\t\t\t\taria-hidden=\"true\"></i>\n Create new support request\n\t\t</a>\n\t</div>\n </div>\n <div class=\"col-12 my-3\">\n <h3>Previous support requests</h3>\n <p>Please note that responses to your support requests are sent directly to your email. You can simply reply to those\n emails for further assistance.</p>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12 mb-3\">\n <p-accordion>\n <p-accordion-panel *ngFor=\"let item of supports; let i = index\" [value]=\"i\">\n <p-accordion-header>{{ item?.created_at | dateFormat }} ({{ item?.user_name }}) {{ item?.title }}</p-accordion-header>\n <p-accordion-content>\n <p>{{ item?.description }}</p>\n <a [href]=\"item?.attachment?.version_200x200?.url\"\n target=\"_blank\">\n <img alt=\"version_200x200\"\n *ngIf=\"item?.attachment?.version_200x200?.url\"\n [src]=\"item?.attachment?.version_200x200?.url\"\n class=\"img-fluid\" /></a>\n </p-accordion-content>\n </p-accordion-panel>\n </p-accordion>\n </div>\n <div class=\"col-12\"\n *ngIf=\"!supports?.length && isLoaded\">\n <pw-no-data [withImage]=\"true\" message=\"No support requests found\"> </pw-no-data>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Injector, OnInit, Renderer2 } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\nimport { AppAdmin } from '@posiwise/admin-module-utils';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, CommonService, PermissionService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-support-details',\n templateUrl: './support-details.component.html',\n styleUrls: ['./support-details.component.scss'],\n\n standalone: false\n})\nexport class SupportDetailsComponent extends AppBaseComponent implements AfterViewInit, OnInit {\n form: UntypedFormGroup;\n\n uploadedFiles = [];\n\n invalidFile = false;\n isSubmitClicked = false;\n\n siteKey: string;\n\n recaptcha = null;\n\n isLoading: boolean;\n filesUploaded: boolean;\n subscriptionId;\n\n constructor(\n injector: Injector,\n private readonly commonService: CommonService,\n private readonly authService: AuthService,\n private readonly renderer: Renderer2,\n private readonly el: ElementRef\n ) {\n super(injector);\n this.form = AppAdmin.customerSupportForm();\n this.form.get('product_id').setValue(PermissionService.selectedProduct.id);\n this.siteKey = this.appConfig.integrations.captcha_key_V2;\n }\n\n ngOnInit(): void {\n this.subscriptionId = PermissionService.selectedSubscription?.id;\n }\n\n ngAfterViewInit() {\n this.attachCloseButtonListener();\n }\n\n @ValidateForm('form')\n onSave() {\n this.isSubmitClicked = true;\n }\n\n handleSuccess(token: string) {\n if (token) {\n this.authService.validateReCaptcha(token).subscribe((isSuccess: boolean) => {\n if (isSuccess) {\n this.isLoading = true;\n const data = {\n ...this.form.value\n };\n if (this.uploadedFiles.length > 0) {\n data.attachment = this.uploadedFiles[0];\n }\n if (!data.attachment) {\n delete data.attachment;\n }\n this.commonService\n .postCustomerSupport({ ...data, subscription_id: this.subscriptionId })\n .subscribe(() => {\n this.back();\n })\n .add(() => {\n this.isLoading = false;\n this.isSubmitClicked = false;\n });\n }\n });\n }\n }\n\n onSelect(event = null) {\n this.invalidFile = false;\n for (const file of event.files) {\n if (!HelperService.validateFile(file, this.toast)) {\n this.invalidFile = true;\n } else {\n this.uploadedFiles.push(file);\n }\n }\n this.filesUploaded = true;\n\n if (this.invalidFile) {\n setTimeout(() => this.attachCloseButtonListener(), 0);\n }\n }\n\n onRemove(event) {\n this.uploadedFiles = this.uploadedFiles.filter(x => event.file.name !== x.name);\n if (this.uploadedFiles.length === 0) {\n this.filesUploaded = false;\n }\n this.invalidFile = false;\n }\n\n attachCloseButtonListener() {\n const closeButton = this.el.nativeElement.querySelector('.p-message-close');\n\n if (closeButton) {\n this.renderer.listen(closeButton, 'click', () => {\n this.handleCloseButtonClick();\n });\n }\n }\n\n handleCloseButtonClick() {\n this.invalidFile = false;\n this.filesUploaded = false;\n }\n\n onUploadError(event) {\n HelperService.onUploadError(event, this.toast);\n }\n}\n","<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\" (click)=\"back()\" class=\"previous\"><i\n class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"mt-3\">{{ 'Label.NewSupport' | transloco }}</h3>\n </div>\n <div class=\"p-2 m-1 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12\">\n <pw-input-container controlId=\"support-details-title\"\n label=\"title\"\n name=\"title\"\n errorMsg=\"Title is required\">\n <input type=\"text\"\n id=\"support-details-title\"\n class=\"form-control\"\n formControlName=\"title\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12\">\n <pw-input-container controlId=\"support-details-description\"\n label=\"Description\"\n errorMsg=\"description is required\"\n name=\"description\">\n <textarea rows=\"3\"\n id=\"support-details-description\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-6\">\n <h4 class=\"mt-4\">You can add a picture here</h4>\n <div class=\"mb-3 file-upload-support-details\">\n <span id=\"support-details-file-label\" class=\"pw-label-style\">Upload Picture</span>\n <p-fileUpload #forms\n [attr.aria-labelledby]=\"'support-details-file-label'\"\n name=\"myfile[]\"\n [customUpload]=\"true\"\n [showUploadButton]=\"false\"\n accept=\"image/*\"\n [disabled]=\"uploadedFiles && uploadedFiles.length > 0\"\n (onSelect)=\"onSelect($event)\"\n (onRemove)=\"onRemove($event)\"\n (onError)=\"onUploadError($event)\">\n <ng-template pTemplate=\"content\"\n [ngIf]=\"uploadedFiles?.length\">\n <div class=\"drag-drop-text\" *ngIf=\"!filesUploaded && (!uploadedFiles || uploadedFiles.length === 0)\">\n <p>You can drag and drop your file here</p>\n </div>\n </ng-template>\n </p-fileUpload>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <ng-container *ngIf=\"isSubmitClicked\">\n <div class=\"support-details-captcha\">\n <ngx-recaptcha2 [ngModelOptions]=\"{ standalone: true }\"\n [siteKey]=\"siteKey\"\n size=\"normal\"\n [(ngModel)]=\"recaptcha\"\n (success)=\"handleSuccess($event)\">\n </ngx-recaptcha2>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!isSubmitClicked\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\" [disabled]=\"invalidFile\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </ng-container>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { FileUpload } from 'primeng/fileupload';\nimport { forkJoin, Observable } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-portfolios',\n templateUrl: './edit-portfolios.component.html',\n styleUrls: ['./edit-portfolios.component.scss'],\n\n standalone: false\n})\nexport class EditPortfoliosComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n @ViewChild('form', { static: false }) uploader: FileUpload;\n\n @Output() successEvent: EventEmitter<boolean> = new EventEmitter();\n\n @Input() id: number;\n @Input() slug: string;\n\n uploadedFiles = [];\n project = [];\n projectPictures = [];\n\n busy: boolean;\n filesUploaded: boolean;\n\n constructor(\n private readonly modalService: NgbModal,\n private readonly profileService: ProfileService\n ) {}\n\n openModal(id: number) {\n this.id = 0;\n this.id = id;\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n onSelect(event = null) {\n // eslint-disable-next-line no-restricted-syntax\n for (const file of event.files) {\n if (HelperService.validateFile(file)) {\n this.uploadedFiles.push(file);\n }\n }\n this.filesUploaded = true;\n }\n\n getProjectPictures() {\n this.profileService.getProjectPictures(this.slug).subscribe(response => {\n if (response.length > 0) {\n this.projectPictures = response.flatMap(x => x.project_pictures);\n }\n });\n }\n\n /**\n * Uploads multiple images for the project\n * @param form\n */\n onSave(form) {\n if (this.uploadedFiles.length > 0) {\n this.busy = true;\n const subscriptions$: Observable<Subscription>[] = [];\n this.uploadedFiles.forEach(file => {\n subscriptions$.push(\n this.profileService.addProjectPictures({\n project_id: Number(this.id),\n image: file\n })\n );\n });\n\n forkJoin(subscriptions$)\n .subscribe({\n next: () => {\n form.clear();\n this.successEvent.emit();\n this.modalService.dismissAll();\n },\n error: () => {\n form.clear();\n this.modalService.dismissAll();\n }\n })\n .add(() => {\n this.busy = false;\n });\n }\n }\n\n deleteProjectPicture(id: number) {\n this.profileService.deletePicture(id).subscribe(_ => {\n this.getProjectPictures();\n });\n }\n\n trackByImage(_index: number, item: { id: number }) {\n return item?.id;\n }\n\n onRemove(event) {\n this.uploadedFiles = this.uploadedFiles.filter(x => event.file.name !== x.name);\n this.filesUploaded = false;\n }\n\n onUploadError(event) {\n HelperService.onUploadError(event);\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Add/Edit Portfolio Item</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n Add a cover image or a downloadable file for your portfolio item\n <p-fileUpload #form\n name=\"myfile[]\"\n [customUpload]=\"true\"\n [showUploadButton]=\"false\"\n accept=\"\"\n [disabled]=\"uploadedFiles && uploadedFiles.length > 0\"\n (onSelect)=\"onSelect($event)\"\n (onRemove)=\"onRemove($event)\"\n (onError)=\"onUploadError($event)\">\n <ng-template pTemplate=\"content\"\n [ngIf]=\"uploadedFiles?.length\">\n <div class=\"drag-drop-text\" *ngIf=\"!filesUploaded && (!uploadedFiles || uploadedFiles.length === 0)\">\n <p>You can drag and drop your file here</p>\n </div>\n </ng-template>\n </p-fileUpload>\n <div class=\"ui-fileupload-content ui-widget-content ui-corner-bottom\">\n <div class=\"ui-fileupload-files\">\n <div class=\"\">\n <h5>Uploaded Pictures</h5>\n <div *ngFor=\"let image of projectPictures; trackBy: trackByImage\"\n class=\"ui-fileupload-row d-inline-block\">\n <div>\n <img [src]=\"image?.picture?.version_50x50?.url\"\n alt=\"\"\n width=\"50\" />\n </div>\n <div class=\"pt-1 ps-1\">\n <button icon=\"pi pi-times\"\n type=\"button\"\n (click)=\"deleteProjectPicture(image.id)\"\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only\">\n <span class=\"ui-button-icon-left ui-clickable pi pi-times\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n [buttonBusy]=\"busy\"\n (click)=\"onSave(form)\">\n Save\n </button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService, ValidationService } from '@posiwise/common-services';\nimport { Project } from '@posiwise/common-utilities';\nimport { appendQueryParam, clearQueryParams, ValidateForm } from '@posiwise/utils';\n\nimport moment from 'moment';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-project-modal',\n templateUrl: './edit-project-modal.component.html',\n styleUrls: ['./edit-project-modal.component.scss'],\n\n standalone: false\n})\nexport class EditProjectModalComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Output() cancelEvent: EventEmitter<void> = new EventEmitter();\n @Output() saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n form: UntypedFormGroup;\n\n weeks: number[] = [];\n startYears: number[];\n endYears: number[];\n\n title = 'Add Project';\n\n submitted = false;\n buttonBusy = false;\n\n private currentProject: Project;\n\n userId: number;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n injector: Injector\n ) {\n super(injector);\n this.getForm();\n }\n\n get f() {\n return this.form.controls;\n }\n\n ngOnInit() {\n clearQueryParams(this.router, this.route);\n this.userStore().subscribe(user => {\n this.userId = user.id;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n getStartYear() {\n const d = new Date(`01 July 1980`);\n const range = [];\n for (let i = new Date().getFullYear(); i >= d.getFullYear(); i--) {\n range.push(i);\n }\n this.startYears = range;\n }\n\n getEndYears(start_year) {\n const range = [];\n for (let i = new Date().getFullYear(); i >= start_year; i--) {\n range.push(i);\n }\n this.endYears = range;\n }\n\n private getWeeks() {\n const endYear = moment([this.form.value['end_year']]);\n const startYear = moment([this.form.value['start_year']]);\n if (endYear) {\n const weeks = endYear.diff(startYear, 'weeks');\n this.weeks = Array.from(Array(weeks).keys());\n }\n }\n\n onOpen(item = null) {\n this.currentProject = item;\n appendQueryParam(this.router, this.route, {\n modal: 'editProjects'\n });\n\n if (item) {\n this.form.patchValue(item);\n this.title = `Edit Project - ${item.title}`;\n this.getStartYear();\n this.getEndYears(item.end_year);\n this.getWeeks();\n } else {\n this.form.reset();\n this.title = 'Add Project';\n }\n\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.submitted = true;\n this.buttonBusy = true;\n const { value } = this.form;\n value.user_id = this.userId;\n\n const subscription$ = this.currentProject?.id\n ? this.profileService.updateProjects(this.currentProject.id, value)\n : this.profileService.addProjects(value);\n subscription$\n .subscribe(() => {\n this.modalService.dismissAll();\n this.toast.success(\n this.translation.translate('User.Profile.Projects.ProjectUpdated')\n );\n this.saveEvent.emit(true);\n })\n .add(() => {\n this.submitted = false;\n this.buttonBusy = false;\n });\n }\n\n private getForm() {\n this.form = this.fb.group({\n start_year: [\n null,\n [\n Validators.required,\n Validators.pattern(ValidationService.CustomValidatorPatterns.Year)\n ]\n ],\n end_year: [\n null,\n [\n Validators.required,\n Validators.pattern(ValidationService.CustomValidatorPatterns.Year)\n ]\n ],\n client_name: [null, Validators.required],\n title: [null, Validators.required],\n description: [null, Validators.required],\n length: ['', [Validators.required, Validators.max(5000)]],\n advertisable: [false],\n syndicated: [false]\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <!-- Title -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-title\"\n label=\"Title\"\n name=\"title\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-project-title\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f.title.errors }\" />\n </pw-input-container>\n <!-- Client Name -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-client_name\"\n label=\"Client Name\"\n name=\"client_name\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-project-client_name\"\n class=\"form-control\"\n formControlName=\"client_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f.client_name.errors }\" />\n </pw-input-container>\n <!-- Project Start Year -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-start_year\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Start\"\n name=\"start_year\"\n errorMsg=\"YYYY format date is required\">\n <p-select\n [attr.aria-labelledby]=\"'edit-project-start_year-label'\"\n (onShow)=\"getStartYear()\"\n formControlName=\"start_year\"\n [options]=\"startYears\"\n [placeholder]=\"'Select Start Year'\"\n (onChange)=\"getEndYears($event.value)\"\n [ngClass]=\"{ 'is-invalid': submitted && f.start_year.errors }\">\n </p-select>\n </pw-input-container>\n <!-- Project End Year -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-end_year\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"End\"\n name=\"end_year\"\n errorMsg=\"YYYY format date is required\">\n <p-select\n [attr.aria-labelledby]=\"'edit-project-end_year-label'\"\n formControlName=\"end_year\"\n [options]=\"endYears\"\n [placeholder]=\"'Select End Year'\"\n (onChange)=\"getEndYears($event.value)\"\n [ngClass]=\"{ 'is-invalid': submitted && f.end_year.errors }\">\n </p-select>\n </pw-input-container>\n <!-- Total Weeks Worked -->\n <pw-input-container class=\"col-4\"\n controlId=\"edit-project-length\"\n label=\"Weeks worked\"\n name=\"length\"\n errorMsg=\"This field is required. (0-5000)\">\n <input type=\"number\"\n id=\"edit-project-length\"\n formControlName=\"length\"\n class=\"form-control\"\n placeholder=\"weeks\"\n [ngClass]=\"{ 'is-invalid': submitted && f.length.errors }\" />\n </pw-input-container>\n <!-- Description -->\n <pw-input-container class=\"col-12\"\n controlId=\"edit-project-description\"\n label=\"Description\"\n name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea type=\"text\"\n id=\"edit-project-description\"\n class=\"form-control\"\n formControlName=\"description\"\n required\n [ngClass]=\"{ 'is-invalid': submitted && f.description.errors }\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { QualificationService } from '@posiwise/common-services';\nimport { appendQueryParam, clearQueryParams, ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-qualifications-modal',\n templateUrl: './edit-qualifications-modal.component.html',\n styleUrls: ['./edit-qualifications-modal.component.scss'],\n\n standalone: false\n})\nexport class EditQualificationsModalComponent extends AppBaseComponent implements OnInit {\n @Output()\n saveEvent: EventEmitter<void> = new EventEmitter();\n\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n title = 'Add Education';\n\n form: UntypedFormGroup;\n\n userId: number;\n\n now: Date = new Date(); // Used for datepicker\n\n minToDate = this.now;\n\n qualifications = [\n { value: 0, label: 'No formal education' },\n { value: 1, label: 'Primary education' },\n { value: 2, label: 'Secondary educ, action or high school' },\n { value: 3, label: 'GED' },\n { value: 4, label: 'Vocational qualification' },\n { value: 5, label: \"Bachelor's degree\" },\n { value: 7, label: \"Master's degree\" },\n { value: 9, label: 'Doctorate or higher' }\n ];\n buttonBusy = false;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly qualificationService: QualificationService,\n injector: Injector\n ) {\n super(injector);\n\n this.form = this.fb.group({\n id: [null],\n school: [null, Validators.required],\n course: [null, Validators.required],\n degree: [null],\n started_on: [null, Validators.required],\n ended_on: [null, Validators.required],\n description: [null],\n points: [null]\n });\n }\n\n ngOnInit() {\n clearQueryParams(this.router, this.route);\n this.userStore().subscribe(response => {\n this.userId = response.id;\n });\n }\n\n onOpen(value = null) {\n appendQueryParam(this.router, this.route, {\n modal: 'editQualifications'\n });\n\n if (value) {\n this.form.patchValue(value);\n this.title = 'Edit Education';\n } else {\n this.form.reset();\n this.title = 'Add Education';\n }\n\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n onDateChange(): void {\n const fromDate = this.form.controls['started_on'].value;\n if (fromDate) {\n this.minToDate = new Date(fromDate);\n this.minToDate.setDate(this.minToDate.getDate() + 1);\n }\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n const data = { ...this.form.value };\n data.user_id = this.userId;\n data.degree = this.qualifications.find(x => x.value === data.points)?.label;\n\n const sub$ = data?.id\n ? this.qualificationService.updateQualifications(data.id, data)\n : this.qualificationService.addQualifications(data);\n\n sub$.subscribe(() => {\n const msg = data.id\n ? this.translation.translate('User.Profile.Qualifications.UpdatedMessage')\n : this.translation.translate('User.Profile.Qualifications.AddedMessage');\n this.toast.success(msg);\n this.saveEvent.emit();\n clearQueryParams(this.router, this.route);\n this.modalService.dismissAll();\n }).add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-school\"\n label=\"School\"\n name=\"school\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-qualifications-school\"\n class=\"form-control\"\n formControlName=\"school\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-qualifications-started_on\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Dates Attended\"\n name=\"started_on\"\n errorMsg=\"This field is required.\">\n <div class=\"ui-fluid\">\n <p-calendar inputId=\"edit-qualifications-started_on\" formControlName=\"started_on\"\n [attr.aria-labelledby]=\"'edit-qualifications-started_on-label'\"\n [monthNavigator]=\"true\"\n [yearNavigator]=\"true\"\n yearRange=\"1950:2020\"\n (onSelect)=\"onDateChange()\"\n [showIcon]=\"true\"\n dateFormat=\"yy-mm-dd\">\n </p-calendar>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-qualifications-ended_on\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Dates Completed\"\n name=\"ended_on\"\n errorMsg=\"This field is required.\">\n <div class=\"ui-fluid\">\n <p-calendar inputId=\"edit-qualifications-ended_on\" formControlName=\"ended_on\"\n [attr.aria-labelledby]=\"'edit-qualifications-ended_on-label'\"\n [monthNavigator]=\"true\"\n [yearNavigator]=\"true\"\n [showIcon]=\"true\"\n (onSelect)=\"onDateChange()\"\n [minDate]=\"minToDate\"\n dateFormat=\"yy-mm-dd\"\n yearRange=\"1950:2025\"></p-calendar>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-points\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Degree\"\n name=\"points\"\n errorMsg=\"This field is required.\">\n <p-select inputId=\"edit-qualifications-points\"\n [options]=\"qualifications\"\n [attr.aria-labelledby]=\"'edit-qualifications-points-label'\"\n placeholder=\"Select\"\n formControlName=\"points\"></p-select>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-course\"\n label=\"Course\"\n name=\"course\"\n errorMsg=\"This field is required.\">\n <input type=\"text\"\n id=\"edit-qualifications-course\"\n class=\"form-control\"\n formControlName=\"course\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-qualifications-description\"\n label=\"Description\"\n name=\"description\">\n <textarea type=\"text\"\n id=\"edit-qualifications-description\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n\n<i\n class=\"fa fa-lg pi pi-plus-circle float-end mt-2 pt-1 pt-md-0 profile-icons\"\n data-cy=\"add-qualification\"\n (keydown.enter)=\"onOpen()\"\n aria-label=\"Add Qualification\"\n (click)=\"onOpen()\"\n aria-hidden=\"true\"\n></i>\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { Project, User } from '@posiwise/common-utilities';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-recommendation-modal',\n templateUrl: './edit-recommendation-modal.component.html',\n\n standalone: false\n})\nexport class EditRecommendationModalComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() user: User;\n\n form: UntypedFormGroup;\n\n title = 'Endorse';\n\n buttonBusy = false;\n\n project = new Project();\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService\n ) {\n this.form = this.fb.group({\n project_id: [null],\n user_id: [null],\n description: [null, Validators.required],\n quality: [null],\n time: [null],\n communication: [null]\n });\n }\n\n onOpen(value = null) {\n if (value) {\n this.project = value;\n }\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n const data = {\n user_id: this.user.id,\n project_id: this.project.id,\n description: this.form.get('description').value,\n quality: this.form.get('quality').value,\n time: this.form.get('time').value,\n communication: this.form.get('communication').value\n } as object;\n\n this.profileService\n .postProjectRecommendation(data)\n .subscribe(_ => {\n this.modalService.dismissAll();\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">{{ title }}</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\">\n <div class=\"row p-2\">\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-quality\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Quality\"\n name=\"quality\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"quality\"\n [attr.aria-labelledby]=\"'edit-recommendation-quality-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-communication\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Communication\"\n name=\"communication\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"communication\"\n [attr.aria-labelledby]=\"'edit-recommendation-communication-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-md-4\"\n controlId=\"edit-recommendation-time\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Time\"\n name=\"time\"\n errorMsg=\"This field is required.\">\n <p-rating formControlName=\"time\"\n [attr.aria-labelledby]=\"'edit-recommendation-time-label'\"\n [cancel]=\"false\"></p-rating>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-recommendation-description\"\n label=\"Description\"\n name=\"description\"\n errorMsg=\"This field is required.\">\n <textarea type=\"text\"\n id=\"edit-recommendation-description\"\n class=\"form-control\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n\n<!-- <i class=\"fal fa-plus-circle fa-2x btn-link float-end btn-add\" (click)=\"onOpen()\" aria-hidden=\"true\"></i> -->\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { TagService } from '@posiwise/common-services';\nimport { TAG_ENTITY, TAG_TYPE } from '@posiwise/common-utilities';\nimport { appendQueryParam, clearQueryParams } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-skills-modal',\n templateUrl: './edit-skills-modal.component.html',\n\n standalone: false\n})\nexport class EditSkillsModalComponent extends AppBaseComponent {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input()\n userId: number;\n\n @Input()\n slug: string;\n\n @Input()\n entityType = TAG_TYPE.SKILLS;\n\n @Input()\n entityEntity = TAG_ENTITY.USER;\n\n @Output()\n saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n allSkills = [];\n\n searchSkills = [];\n\n selectedSkills = [];\n\n constructor(\n private readonly modalService: NgbModal,\n private readonly tagService: TagService,\n injector: Injector\n ) {\n super(injector);\n }\n\n open() {\n this.getSkills();\n this.modalService.open(this.content, { centered: true, windowClass: 'modal-holder' });\n appendQueryParam(this.router, this.route, {\n modal: 'editskills'\n });\n }\n\n /**\n * Populate all the skills for the dropdown\n */\n private getSkills() {\n this.tagService.getTagsByType('skills', {}).subscribe(response => {\n this.allSkills = response.tags;\n this.getEntitySkills();\n });\n }\n\n /**\n * Skills Search\n * @param event: keyword to search\n */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.allSkills.filter(x =>\n x.name.toLowerCase().includes(event.query.toLowerCase())\n );\n } else {\n this.allSkills.forEach(item => {\n data.push(item);\n });\n }\n this.searchSkills = data;\n }\n\n close(modal) {\n modal.close();\n this.selectedSkills = [];\n }\n\n private getEntitySkills() {\n this.tagService\n .getTagsByEntity(this.slug, this.entityEntity, this.entityType)\n .subscribe(response => {\n this.selectedSkills = this.allSkills.filter(item => {\n return response.tags.find(x => x.id === item.id);\n });\n });\n }\n\n saveUserSkills() {\n const skills = [];\n this.selectedSkills.forEach(element => {\n skills.push({\n tag_id: element.id,\n rank: element.id,\n years: 0,\n preferred: true\n });\n });\n\n const postData = {\n entity_tags: skills,\n user_id: Number(this.userId),\n slug: this.slug,\n tag_entity: this.entityEntity\n };\n\n this.tagService.addTags(postData).subscribe(() => {\n this.saveEvent.emit(true);\n this.toast.success(this.translation.translate('User.Profile.Skills.UpdatedMessage'));\n clearQueryParams(this.router, this.route);\n this.modalService.dismissAll();\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">My Skills</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"ui-fluid skills-modal skills-dropdown\">\n <p-autoComplete [(ngModel)]=\"selectedSkills\"\n [suggestions]=\"searchSkills\"\n dataKey=\"id\"\n field=\"name\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [minLength]=\"1\"\n [maxlength]=\"10\"\n placeholder=\"Skills\"\n [dropdown]=\"true\"\n [multiple]=\"true\"></p-autoComplete>\n\n <small class=\"p-2\">Select up to 10 skills.</small>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"close(modal)\">Cancel</button>\n <button type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"saveUserSkills()\">Save</button>\n </div>\n</ng-template>\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn } from '@angular/forms';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { ModalContext, ValidationError } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-social-links',\n templateUrl: './edit-social-links.component.html',\n\n standalone: false\n})\nexport class EditSocialLinksComponent extends AppBaseComponent implements OnInit {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() links: Record<string, string> = {};\n @Input() userId: number;\n\n @Output() saveEvent: EventEmitter<void> = new EventEmitter();\n\n form: UntypedFormGroup;\n\n buttonBusy = false;\n\n constructor(\n injector: Injector,\n private readonly modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n private readonly cdr: ChangeDetectorRef\n ) {\n super(injector);\n this.form = this.fb.group({\n user_id: 0,\n youtube: ['', this.urlValidator('youtube')],\n skype: ['', this.urlValidator('skype')],\n linkedin: ['', this.urlValidator('linkedin')],\n twitter: ['', this.urlValidator('twitter')],\n instagram: ['', this.urlValidator('instagram')],\n facebook: ['', this.urlValidator('facebook')],\n stackoverflow: ['', this.urlValidator('stackoverflow')],\n github: ['', this.urlValidator('github')],\n bitbucket: ['', this.urlValidator('bitbucket')],\n gitlab: ['', this.urlValidator('gitlab')]\n });\n }\n\n private urlValidator(social: string): ValidatorFn {\n return (control: AbstractControl): ValidationError | null => {\n const url = `https://www.${social}`;\n const url2 = `https://${social}`;\n if (control.value) {\n const valid = control.value.includes(url) || control.value.includes(url2);\n\n return valid ? null : { urlMalformed: { value: control.value } };\n }\n\n return null;\n };\n }\n\n ngOnInit() {\n this.form.patchValue(this.links);\n }\n\n onOpen(links) {\n this.links = links;\n this.form.patchValue(this.links);\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n @ValidateForm('form')\n onSaveDetail() {\n this.buttonBusy = true;\n this.form.patchValue({\n user_id: this.userId\n });\n this.profileService\n .postLinks(this.form.value)\n .subscribe(_ => {\n this.toast.success(\n this.translation.translate('User.Profile.SocialLinks.AddedMessage')\n );\n this.modalService.dismissAll();\n this.saveEvent.emit();\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Tell us your external portfolio</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\"\n class=\"p-sm-3\"\n (ngSubmit)=\"onSaveDetail()\">\n <div>\n <p>\n Please tell us where we can find more information about you or about your\n work/projects. This will impact your ranking on the site.\n </p>\n </div>\n\n <div class=\"row mt-0\">\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-linkedin\"><img src=\"/assets/img/icons/social/linkedin.svg\"\n width=\"20\"\n alt=\"\" />\n LinkedIn</label>\n <input type=\"url\"\n id=\"external-portfolio-linkedin\"\n name=\"linkedin\"\n formControlName=\"linkedin\"\n class=\"form-control\"\n placeholder=\"https://linkedin.com/in/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-twitter\"><img src=\"/assets/img/icons/social/twitter.svg\"\n width=\"20\"\n alt=\"\" />\n Twitter</label>\n <input type=\"url\"\n id=\"external-portfolio-twitter\"\n name=\"twitter\"\n formControlName=\"twitter\"\n class=\"form-control\"\n placeholder=\"https://twitter.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-facebook\"><img src=\"/assets/img/icons/social/facebook.svg\"\n width=\"20\"\n alt=\"\" />\n Facebook</label>\n <input type=\"url\"\n id=\"external-portfolio-facebook\"\n name=\"facebook\"\n formControlName=\"facebook\"\n class=\"form-control\"\n placeholder=\"https://www.facebook.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-youtube\"><img src=\"/assets/img/icons/social/youtube.svg\"\n width=\"20\"\n alt=\"\" />\n YouTube</label>\n <input type=\"url\"\n id=\"external-portfolio-youtube\"\n name=\"youtube\"\n formControlName=\"youtube\"\n class=\"form-control\"\n placeholder=\"https://www.youtube.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-skype\">\n <img src=\"/assets/img/icons/social/skype.svg\"\n width=\"20\"\n alt=\"\" /> Skype\n </label>\n <input type=\"url\"\n id=\"external-portfolio-skype\"\n name=\"skype\"\n formControlName=\"skype\"\n class=\"form-control\"\n placeholder=\"https://www.skype.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-github\"><img src=\"/assets/img/icons/social/github.svg\"\n width=\"20\"\n alt=\"\" />\n Github</label>\n <input type=\"url\"\n id=\"external-portfolio-github\"\n name=\"github\"\n formControlName=\"github\"\n class=\"form-control\"\n placeholder=\"https://github.com/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n\n <div class=\"col-sm-6 col-12\">\n <div class=\"mb-3\">\n <label for=\"external-portfolio-stackoverflow\"><img src=\"/assets/img/icons/social/stackoverflow.svg\"\n width=\"20\"\n alt=\"\" />\n StackOverflow</label>\n <input type=\"url\"\n id=\"external-portfolio-stackoverflow\"\n name=\"stackoverflow\"\n formControlName=\"stackoverflow\"\n class=\"form-control\"\n placeholder=\"http://stackoverflow.com/users/nickname\"\n autocomplete=\"url\" />\n </div>\n </div>\n </div>\n </form>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\"\n class=\"btn btn-outline-default\"\n (click)=\"modal.close()\">\n Cancel\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n (click)=\"onSaveDetail()\">Save</button>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgxGpAutocompleteDirective } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { GeoService, ProfileService } from '@posiwise/common-services';\nimport { Country } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\nimport { map, Observable } from 'rxjs';\n\nimport { NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { EditUser, ModalContext, UserProfile } from '../../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-edit-user-profile-modal',\n templateUrl: './edit-user-profile-modal.component.html',\n styleUrl: './edit-user-profile-modal.component.scss',\n\n standalone: false\n})\nexport class EditUserProfileModalComponent extends AppBaseComponent implements OnInit {\n @ViewChild('content', { static: true }) content: TemplateRef<ModalContext>;\n\n @Input() slug: string;\n @Input() user: EditUser;\n\n @Output() saveEvent: EventEmitter<UserProfile> = new EventEmitter<UserProfile>();\n\n @ViewChild('ngxPlaces') placesRef: NgxGpAutocompleteDirective;\n\n form: UntypedFormGroup;\n\n countries$: Observable<Country[]>;\n\n states: Country[] = [];\n buttonBusy = false;\n\n constructor(\n public modalService: NgbModal,\n private readonly fb: UntypedFormBuilder,\n private readonly profileService: ProfileService,\n private readonly geoService: GeoService,\n injector: Injector\n ) {\n super(injector);\n this.form = this.fb.group({\n first_name: [null, Validators.required],\n last_name: [null, Validators.required],\n headline: [null, Validators.required],\n description: [null, Validators.required],\n gender: ['M'],\n phone_number: [null],\n dob: [null, Validators.required],\n website_url: [null],\n country: [null, Validators.required],\n postcode: [null],\n location: [null],\n state: [null, Validators.required],\n province: [null, Validators.required]\n });\n }\n\n ngOnInit() {\n this.geoService.getCountries().subscribe(() => {\n this.countries$ = this.geoService\n .getCountries()\n .pipe(\n map((countries: []) => [{ name: 'Select Country', code: null }, ...countries])\n );\n });\n this.getValues();\n }\n\n getValues() {\n let dobObject: NgbDateStruct;\n\n const userProfile = this.user?.profile;\n if (userProfile) {\n if (userProfile?.country) {\n this.getRegion(userProfile.country);\n }\n if (userProfile?.dob) {\n dobObject = {\n year: Number(userProfile.dob.substring(0, 4)),\n month: Number(userProfile.dob.substring(5, 7)),\n day: Number(userProfile.dob.substring(8, 10))\n };\n\n this.form.patchValue({});\n }\n\n this.form.patchValue(userProfile);\n this.form.patchValue({\n first_name: this.user.first_name,\n last_name: this.user.last_name,\n dob: dobObject || {}\n });\n }\n }\n\n handleAddressChange(_event) {\n this.form.patchValue({\n latitude: _event.geometry.location.lat(),\n longitude: _event.geometry.location.lng(),\n location: _event.formatted_address\n });\n }\n\n onOpen() {\n this.form.reset();\n this.getValues();\n this.modalService.open(this.content, {\n centered: true,\n size: 'lg',\n windowClass: 'modal-holder'\n });\n }\n\n getRegion(countryId) {\n if (countryId) {\n this.geoService.getRegions(countryId).subscribe(response => {\n this.states = [{ code: 0, name: 'Select State' }, ...response];\n });\n }\n }\n\n onSaveDetail() {\n this.form.patchValue({ province: this.form.value.state });\n this.save();\n }\n\n @ValidateForm('form')\n save() {\n this.buttonBusy = true;\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n\n this.profileService\n .updateUserProfile(data)\n .subscribe(response => {\n if (response.id) {\n this.toast.success(this.translation.translate('User.Profile.ProfileUpdated'));\n this.modalService.dismissAll();\n this.saveEvent.emit(response);\n }\n })\n .add(() => {\n this.buttonBusy = false;\n });\n }\n}\n","<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title\"\n id=\"modal-basic-title\">Edit Intro</h4>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSaveDetail()\">\n <div class=\"row\">\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-first-name\"\n label=\"First Name\"\n name=\"first_name\"\n errorMsg=\"Please enter first Name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"edit-intro-first-name\"\n autocomplete=\"given-name\" name=\"input_first_name_1\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-last-name\"\n label=\"Last Name\"\n name=\"last_name\"\n errorMsg=\"Please enter last Name\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"edit-intro-last-name\"\n autocomplete=\"family-name\" name=\"input_last_name_2\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-intro-headline\"\n label=\"Headline\"\n name=\"headline\"\n errorMsg=\"Please enter headline\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"edit-intro-headline\" name=\"input_headline_3\"/>\n </pw-input-container>\n\n <pw-input-container class=\"col-12\"\n controlId=\"edit-intro-description\"\n label=\"About me\"\n name=\"description\"\n errorMsg=\"Please enter description\">\n <textarea class=\"form-control\"\n id=\"edit-intro-description\"\n name=\"description\"\n formControlName=\"description\"></textarea>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-gender\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Gender\"\n name=\"gender\"\n errorMsg=\"Please enter Gender\">\n <p-selectButton [options]=\"[\n { label: 'Male', value: 'M' },\n { label: 'Female', value: 'F' }\n ]\"\n [attr.aria-labelledby]=\"'edit-intro-gender-label'\"\n formControlName=\"gender\"></p-selectButton>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-dob\"\n label=\"Date of Birth\"\n name=\"dob\"\n errorMsg=\"Please enter date of birth\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n id=\"edit-intro-dob\"\n name=\"dob\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ year: 1950, month: 1, day: 1 }\"\n [maxDate]=\"{ year: 2018, month: 12, day: 31 }\"\n autocomplete=\"off\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n type=\"button\"\n aria-label=\"Open date picker\"\n (click)=\"d.toggle()\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-phone\"\n label=\"Phone\"\n name=\"phone_number\"\n errorMsg=\"Please enter phone\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"phone_number\"\n id=\"edit-intro-phone\"\n name=\"phone_number\"\n autocomplete=\"tel\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-6\"\n controlId=\"edit-intro-postcode\"\n label=\"Postcode\"\n name=\"postcode\"\n errorMsg=\"Please enter postcode\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"postcode\"\n id=\"edit-intro-postcode\"\n autocomplete=\"postal-code\" name=\"input_postcode_6\"/>\n </pw-input-container>\n\n <ng-container *ngIf=\"countries$ | async as countries\">\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-country\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"Country\"\n name=\"country\"\n errorMsg=\"Please select a country\">\n\n <p-select\n [attr.aria-labelledby]=\"'edit-intro-country-label'\"\n [options]=\"countries\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"country\"\n (onChange)=\"getRegion($event.value)\"\n placeholder=\"{{ 'User.Profile.SelectCountry' | transloco }}\">\n </p-select>\n\n </pw-input-container>\n </ng-container>\n\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-state\"\n [useAriaLabelledbyOnly]=\"true\"\n label=\"State\"\n name=\"state\"\n errorMsg=\"Please select a state\">\n <p-select\n [attr.aria-labelledby]=\"'edit-intro-state-label'\"\n [options]=\"states\"\n optionLabel=\"name\"\n optionValue=\"code\"\n formControlName=\"state\"\n [placeholder]=\"'User.Profile.SelectState' | transloco\">\n </p-select>\n </pw-input-container>\n\n <!-- Location -->\n <pw-input-container label=\"Location\"\n class=\"col-12 col-md-6\"\n controlId=\"edit-intro-location\"\n [useAriaLabelledbyOnly]=\"true\"\n name=\"location\">\n <input ngx-gp-autocomplete\n id=\"edit-intro-location\"\n name=\"location\"\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n [attr.aria-labelledby]=\"'edit-intro-location-label'\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </pw-input-container>\n\n <pw-input-container class=\"col-12 col-sm-6\"\n controlId=\"edit-intro-website\"\n label=\"Website\"\n name=\"website_url\"\n errorMsg=\"Please enter Website\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"website_url\"\n id=\"edit-intro-website\"\n autocomplete=\"url\" name=\"input_website_url_8\"/>\n </pw-input-container>\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"modal.close()\"\n value=\"Cancel\" id=\"input_field_9\" name=\"input_field_9\"/>\n <input type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n value=\"Save Changes\" id=\"input_field_10\" name=\"input_field_10\"/>\n </div>\n </form>\n </div>\n</ng-template>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService, QualificationService, TagService } from '@posiwise/common-services';\nimport { TAG_ENTITY, TAG_TYPE, User } from '@posiwise/common-utilities';\n\nimport { forkJoin, Subscription } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport {\n AboutUserProfile,\n Qualification,\n Skill\n} from '../../shared/interface/user-module.interface';\nimport { EditQualificationsModalComponent } from '../edit-qualifications-modal/edit-qualifications-modal.component';\nimport { EditSkillsModalComponent } from '../edit-skills-modal/edit-skills-modal.component';\nimport { EditSocialLinksComponent } from '../edit-social-links/edit-social-links.component';\nimport { EditUserProfileModalComponent } from '../edit-user-profile-modal/edit-user-profile-modal.component';\n\n@Component({\n selector: 'pw-user-about',\n templateUrl: './user-about.component.html',\n styleUrls: ['./user-about.component.scss'],\n\n standalone: false\n})\nexport class UserAboutComponent extends AppBaseComponent implements OnInit, OnDestroy {\n @Input() user: User;\n @Input() isEdit = false;\n\n @Output()\n saveEvent: EventEmitter<boolean> = new EventEmitter();\n\n @ViewChild(EditUserProfileModalComponent, { static: false })\n modal: EditUserProfileModalComponent;\n\n @ViewChild(EditQualificationsModalComponent, { static: false })\n qualificationModal: EditQualificationsModalComponent;\n\n @ViewChild(EditSkillsModalComponent, { static: false })\n skillsModal: EditSkillsModalComponent;\n\n @ViewChild(EditSocialLinksComponent, { static: false })\n socialModal: EditSocialLinksComponent;\n\n private readonly navigationSubscription: Subscription;\n\n allSkills = [];\n\n searchSkills = [];\n\n selectedSkills: Skill[];\n\n objectKeys = Object.keys;\n\n user_profile: AboutUserProfile;\n\n qualifications: Qualification[] = [];\n\n userLinks: Record<string, string> = {};\n\n noUserLinks: boolean;\n\n loading = false;\n\n constructor(\n private readonly profileService: ProfileService,\n private readonly qualificationService: QualificationService,\n private readonly tagService: TagService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserDetails();\n this.getSkills();\n }\n\n getUserDetails() {\n this.loading = true;\n forkJoin({\n user_profile: this.profileService.getUserObject('user_profile', this.user.slug),\n qualifications: this.profileService.getUserObject('qualifications', this.user.slug),\n user_links: this.profileService.getUserObject('user_link', this.user.slug),\n user_skills: this.tagService.getGroupedSkills(\n this.user.slug,\n TAG_ENTITY.USER,\n TAG_TYPE.SKILLS\n )\n }).subscribe({\n next: response => {\n this.user_profile = response.user_profile;\n this.user['profile'] = response.user_profile;\n this.qualifications = response.qualifications;\n this.userLinks = response.user_links || [];\n this.noUserLinks = Object.values(this.userLinks).some(x => !!x);\n this.selectedSkills = response.user_skills;\n this.loading = false;\n },\n error: err => {\n this.loading = false;\n this.toast.showToast(err);\n },\n complete: () => {\n this.loading = false;\n }\n });\n }\n\n /**\n * Populate all the skills for the dropdown\n */\n private getSkills() {\n this.tagService.getTagsByType('skills', {}).subscribe(response => {\n this.allSkills = response.skills;\n });\n }\n\n onProfileOpen() {\n this.modal.onOpen();\n }\n\n openSkills() {\n this.skillsModal.open();\n }\n\n onProfileSaved(_event) {\n this.getUserDetails();\n this.saveEvent.emit();\n }\n\n onOpenSocial() {\n if (this.socialModal) {\n this.socialModal.onOpen(this.userLinks); // Pass userLinks to the modal\n }\n }\n\n editQualification(item) {\n this.qualificationModal.onOpen(item);\n }\n\n deleteQualification(item) {\n swal.fire({\n title: 'Delete',\n html: `Are you sure you want to delete <strong>${item.degree}</strong>?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.qualificationService.deleteQualifications(item.id).subscribe(() => {\n this.toast.success(\n this.translation.translate(\n 'User.Profile.Qualifications.QualificationDelete'\n )\n );\n this.getUserDetails();\n });\n }\n });\n }\n\n onSaveUserLinks() {\n this.getUserDetails();\n }\n\n trackByQualification(_index: number, item: { id: number }) {\n return item.id;\n }\n\n override ngOnDestroy() {\n // avoid memory leaks here by cleaning up after ourselves. If we\n // don't then we will continue to run our initialiseInvites()\n // method on every navigationEnd event.\n if (this.navigationSubscription) {\n this.navigationSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <div data-cy=\"personal-info\">\n <h2 class=\"\">Personal Information</h2>\n <ng-container *ngIf=\"user && isEdit\">\n <i\n class=\"profile-icons fa fa-lg fa-user-edit float-end mt-3 pt-1 pt-md-0\"\n (click)=\"onProfileOpen()\"\n (keydown.enter)=\"onProfileOpen()\"\n aria-label=\"Open Profile\"\n aria-hidden=\"true\"\n ></i>\n <pw-edit-user-profile-modal [user]=\"user\"\n (saveEvent)=\"onProfileSaved($event)\"\n [slug]=\"user?.slug\">\n </pw-edit-user-profile-modal>\n </ng-container>\n </div>\n <div>\n <div class=\"my-3\">\n <span class=\"profile-label\">About Me:</span>\n <span class=\"display-block overflow-hidden\">{{ user_profile?.description || 'No description has been added yet.' }}\n </span>\n </div>\n <hr />\n <div class=\"row mt-0 my-0\">\n <div class=\"col-6 col-sm-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"icon-present font-small-3\" aria-hidden=\"true\"></i>\n Birthday:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.dob | dateFormat\n }}</span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-globe font-small-3\" aria-hidden=\"true\"></i> Lives\n in:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.country\n }}</span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-monitor font-small-3\" aria-hidden=\"true\"></i>\n Website:</span>\n <a class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.website_url\n }}</a>\n </li>\n </ul>\n </div>\n <div class=\"col-6 col-sm-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-user font-small-3\" aria-hidden=\"true\"></i>\n Gender:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{\n user_profile?.gender === 'M'\n ? 'Male'\n : user_profile?.gender === 'F'\n ? 'Female'\n : ''\n }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-mail font-small-3\" aria-hidden=\"true\"></i>\n Email:</span>\n <a class=\"display-block overflow-hidden pt-2\">{{ user?.email }}</a>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-smartphone font-small-3\" aria-hidden=\"true\"></i> Phone\n Number:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user_profile?.phone_number\n }}</span>\n </li>\n </ul>\n </div>\n <div class=\"col-6 col-md-6 col-lg-4\">\n <ul class=\"no-list-style personal-info\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-book font-small-3\" aria-hidden=\"true\"></i>\n Joined:</span>\n <span class=\"display-block overflow-hidden pt-2\">{{\n user?.joined_at | dateFormat\n }}</span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <hr />\n <div data-cy=\"skills-info\"\n class=\"mt-4\">\n <h2 class=\"\">Skills</h2>\n <div class=\"float-end\"\n *ngIf=\"isEdit\">\n <i\n class=\"profile-icons fa fa-lg fa-edit float-end mt-3 pt-1 pt-md-0\"\n (click)=\"openSkills()\"\n (keydown.enter)=\"openSkills()\"\n aria-label=\"Open Skills\"\n aria-hidden=\"true\"\n ></i>\n <pw-edit-skills-modal [userId]=\"user?.id\"\n [slug]=\"user?.slug\"\n (saveEvent)=\"getUserDetails()\">\n </pw-edit-skills-modal>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"mb-4\"\n *ngIf=\"selectedSkills?.length === 0\">\n {{\n isEdit\n ? \"You haven't selected any skills yet. Please add some.\"\n : 'No skills added.'\n }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"ui-fluid\">\n <span class=\"\"\n *ngFor=\"let skill of selectedSkills\">\n <span class=\"my-2 me-3\">{{ skill.category_name }}</span>\n <span *ngFor=\"let item of skill.tags\"\n class=\"badge bg-success me-2 mb-2\">{{ item.name }}\n </span>\n <br />\n </span>\n </div>\n <hr />\n <div data-cy=\"educational-info\">\n <div class=\"\">\n <h2 class=\"\">Educational Information</h2>\n <div class=\"float-end\"\n *ngIf=\"isEdit\">\n <pw-edit-qualifications-modal (saveEvent)=\"getUserDetails()\">\n </pw-edit-qualifications-modal>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6 col-12 mb-4\"\n [ngClass]=\"{ editable: isEdit }\"\n *ngFor=\"let item of qualifications; trackBy: trackByQualification\">\n <div class=\"mb-2\">\n <div class=\"float-start\">\n <h4>{{ item?.school }}</h4>\n <ul class=\"no-list-style\">\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-clock font-small-3\" aria-hidden=\"true\"></i>\n Period:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.started_on }} - {{ item?.ended_on }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-feather font-small-3\" aria-hidden=\"true\"></i>\n Degree:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.degree }}\n </span>\n </li>\n <li class=\"mb-4\">\n <span class=\"profile-label\"><i class=\"ft-octagon font-small-3\" aria-hidden=\"true\"></i>\n Course:</span>\n <span class=\"display-block overflow-hidden pt-2\">\n {{ item?.course }}\n </span>\n </li>\n </ul>\n </div>\n <div class=\"float-end action\"\n *ngIf=\"isEdit\">\n <span class=\"fa-stack\">\n <i\n class=\"fa fa-lg fa-edit fa-stack-1x me-3 profile-icons\"\n title=\"Edit\"\n (keydown.enter)=\"editQualification(item)\"\n aria-label=\"Edit Qualification\"\n (click)=\"editQualification(item)\"\n aria-hidden=\"true\"\n ></i>\n </span>\n <span class=\"fa-stack\">\n <i\n class=\"fa fa-lg fa-trash fa-stack-1x delete-icon\"\n data-cy=\"delete-qualification\"\n title=\"Delete\"\n aria-label=\"Delete Qualification\"\n (keydown.enter)=\"deleteQualification(item)\"\n (click)=\"deleteQualification(item)\"\n aria-hidden=\"true\"\n ></i>\n </span>\n </div>\n </div>\n </div>\n <div class=\"col-lg-6 col-12 mb-4\"\n *ngIf=\"qualifications && qualifications.length === 0\">\n {{\n isEdit\n ? ' No qualification yet. Please add some.'\n : 'No qualifications added.'\n }}\n </div>\n </div>\n </div>\n <hr />\n <!-- External Portfolio -->\n <div data-cy=\"portfolio-info\"\n class=\"mt-4\">\n <div class=\"\">\n <h2 class=\"\">External Portfolio</h2>\n <i\n class=\"fa fa-lg fa-edit profile-icons float-end mt-3 pt-1 pt-md-0\"\n *ngIf=\"isEdit\"\n (click)=\"onOpenSocial()\"\n aria-label=\"Edit external portfolio\"\n (keydown)=\"($event.key === 'Enter' ? onOpenSocial() : null)\"\n title=\"Edit External Portfolio\"\n ></i>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6 col-12 mb-4\">\n <div *ngIf=\"userLinks\">\n <ng-container *ngFor=\"let link of objectKeys(userLinks)\">\n <a target=\"_blank\"\n rel=\"noopener noreferrer\"\n [href]=\"userLinks[link]\"\n *ngIf=\"userLinks[link]\">\n <img src=\"assets/img/icons/social/{{ link }}.svg\"\n class=\"me-2\"\n width=\"40\"\n alt=\"\" />\n </a>\n </ng-container>\n </div>\n <div class=\"row\">\n <ng-container *ngIf=\"user\">\n <pw-edit-social-links [userId]=\"user.id\"\n [links]=\"userLinks\"\n (saveEvent)=\"onSaveUserLinks()\">\n </pw-edit-social-links>\n </ng-container>\n <div class=\"col-12 mb-4\"\n *ngIf=\"!noUserLinks\">\n {{\n isEdit\n ? 'No external portfolio yet. Please add some.'\n : 'No portfolio added.'\n }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"loading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\n\nimport { ProfileService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'pw-portfolios',\n templateUrl: './user-portfolios.component.html',\n styleUrls: ['./user-portfolios.component.scss'],\n\n standalone: false\n})\nexport class PortfoliosComponent implements OnInit {\n @Input() user: User;\n @Input() isEdit = false;\n\n projectPictures = [];\n\n selectedPicURL: string;\n\n isLoaded = false;\n\n constructor(\n private readonly service: ProfileService,\n private readonly modalService: NgbModal\n ) {}\n\n ngOnInit() {\n this.getProjectPictures();\n }\n\n private getProjectPictures() {\n this.service.getProjectPictures(this.user.slug).subscribe(response => {\n if (response.length > 0) {\n this.projectPictures = response.flatMap(x => x.project_pictures);\n }\n this.isLoaded = true;\n });\n }\n\n deletePicture(id) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.service.deletePicture(id).subscribe(_ => {\n this.getProjectPictures();\n });\n }\n });\n }\n\n trackByImage(_index: number, item: { id: number }) {\n return item.id;\n }\n\n showFullImage(picture, content, evt) {\n if ($(evt.target).attr('id') !== 'delete-icon') {\n this.selectedPicURL = picture.picture.url;\n this.modalService.open(content, {\n centered: true,\n size: 'lg',\n windowClass: 'img-popup'\n });\n }\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <h2>User's Portfolio</h2>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <pw-no-data [withImage]=\"true\" message=\"No portfolio listed yet - please consider adding some.\"\n *ngIf=\"projectPictures.length === 0 && isLoaded\"></pw-no-data>\n <div class=\"card-body\">\n <div class=\"card-block\"\n *ngIf=\"projectPictures.length\">\n <div class=\"grid-hover\">\n <div class=\"row\">\n <div class=\"col-md-4 col-12 mb-2\"\n *ngFor=\"let picture of projectPictures; trackBy: trackByImage\">\n <figure class=\"effect-marley\"\n (keydown.enter)=\"showFullImage(picture, content, $event)\"\n (click)=\"showFullImage(picture, content, $event)\">\n <img [src]=\"picture.picture.url\"\n alt=\"project pic\" />\n <figcaption>\n <h2>\n <span class=\"portfolio-header-text\">{{ picture.project_title }}</span>\n </h2>\n <i\n class=\"fal fa-2x fa-times white\"\n id=\"delete-icon\"\n (click)=\"deletePicture(picture.id)\"\n (keydown.enter)=\"deletePicture(picture.id)\"\n *ngIf=\"isEdit\"\n aria-hidden=\"true\"\n ></i>\n <p class=\"thumb-description\">\n {{ picture?.project_description }}\n </p>\n </figcaption>\n </figure>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-img-popup\">\n <img alt=\"Selected Url\"\n [src]=\"selectedPicURL\"\n class=\"img-fluid\" />\n <button type=\"button\"\n class=\"close close-img\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\">\n <span class=\"btn\">&times;</span>\n </button>\n </div>\n</ng-template>\n","import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { Project, User } from '@posiwise/common-utilities';\n\nimport swal from 'sweetalert2';\n\nimport { EditPortfoliosComponent } from '../edit-portfolios/edit-portfolios.component';\nimport { EditProjectModalComponent } from '../edit-project-modal/edit-project-modal.component';\nimport { EditRecommendationModalComponent } from '../edit-recommendation-modal/edit-recommendation-modal.component';\nimport { EditSkillsModalComponent } from '../edit-skills-modal/edit-skills-modal.component';\n\n@Component({\n selector: 'pw-user-projects',\n templateUrl: './user-projects.component.html',\n styleUrls: ['./user-projects.component.scss'],\n\n standalone: false\n})\nexport class UserProjectsComponent extends AppBaseComponent implements OnInit {\n @Input() user: User;\n @Input() isEdit = false;\n\n @ViewChild(EditProjectModalComponent, { static: true })\n projectModal: EditProjectModalComponent;\n\n @ViewChild(EditSkillsModalComponent, { static: false })\n skillModal: EditSkillsModalComponent;\n\n @ViewChild(EditRecommendationModalComponent, { static: true })\n recommendationModal: EditRecommendationModalComponent;\n\n @ViewChild(EditPortfoliosComponent, { static: false })\n portfolios: EditPortfoliosComponent;\n\n projects: Project[] = [];\n\n submitted: boolean;\n\n isLoaded = false;\n\n constructor(\n private readonly service: ProfileService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getProjects();\n }\n\n onEditProject(item) {\n this.projectModal.onOpen(item);\n }\n\n editRecommendation(item) {\n this.recommendationModal.onOpen(item);\n }\n\n openSkills(project) {\n this.skillModal.slug = project.slug;\n this.skillModal.open();\n }\n\n getProjects() {\n this.service.getProjects(this.user?.slug).subscribe(response => {\n this.projects = response.projects;\n this.isLoaded = true;\n });\n }\n\n onSkillsSave() {\n this.getProjects();\n }\n\n onSaveProject(_event) {\n this.getProjects();\n }\n\n openPortfolios(id: number) {\n this.portfolios.openModal(id);\n this.portfolios.getProjectPictures();\n }\n\n onDeleteProject(project) {\n swal.fire({\n title: 'Delete',\n text: `Are you sure you want to delete ${project.title}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(rep => {\n if (rep.value) {\n this.service.deleteProject(project.id).subscribe(() => {\n this.projects = this.projects.filter((x: Project) => x.id !== project.id);\n });\n }\n });\n }\n\n trackByProject(_index: number, item: Project) {\n return item.id;\n }\n\n deletePicture(project) {\n this.service.deletePicture(project.project_pictures[0].id).subscribe(_ => {\n this.getProjects();\n });\n }\n}\n","<div class=\"row\">\n <div class=\"col-sm-12 mt-2\">\n <h2>User's Projects</h2>\n <div class=\"row\"\n *ngIf=\"isEdit\">\n <div class=\"col-12\">\n <div class=\"content-header\">\n <button class=\"btn btn-primary float-end\"\n (click)=\"onEditProject(null)\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{'Create Project' | transloco}}\n </button>\n </div>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div id=\"timeline\"\n class=\"timeline-center timeline-wrapper\"\n *ngIf=\"projects?.length\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let project of projects;\n let i = index;\n let odd = odd;\n let even = even;\n trackBy: trackByProject\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\"\n data-bs-toggle=\"tooltip\"\n data-placement=\"right\"\n title=\"Portfolio project work\">\n <span class=\"timeline-year\"> {{ project.start_year }} </span>\n </span>\n </div>\n <div class=\"timeline-card card shadow rounded border-grey border-lighten-2 pb-0\">\n <div class=\"card-header\">\n <h4 class=\"mb-0 card-title\">\n <a>{{ project.title }}</a>\n </h4>\n <div class=\"card-subtitle text-muted mt-0\">\n <span class=\"font-small-3\">\n {{ project.start_year }} - {{ project.end_year }}</span>\n </div>\n </div>\n <div class=\"card-body project-card\">\n <ng-container *ngIf=\"project.project_pictures?.length\">\n <i\n class=\"fal fa-times\"\n (click)=\"deletePicture(project)\"\n (keydown.enter)=\"deletePicture(project)\"\n aria-hidden=\"true\"\n ></i>\n <img class=\"img-fluid project-picture\"\n [src]=\"project.project_pictures[0].picture.url\"\n alt=\"Project Cover\" />\n </ng-container>\n <div class=\"card-body\">\n <div class=\"\">\n <p class=\"card-text\">{{ project.description }}</p>\n <div class=\"list-inline mb-1\">\n <!-- Skills -->\n <div *ngIf=\"project.tags?.length\">\n <div class=\"my-2\">\n <i class=\"fa fa-user-tag\" aria-hidden=\"true\"></i>\n Skills\n </div>\n <ng-container *ngFor=\"let tag of project.tags\">\n <span class=\"badge bg-success me-2\">{{\n tag.name\n }}</span>\n </ng-container>\n </div>\n <div class=\"mt-2\"\n *ngIf=\"project.project_recommendations?.length\">\n <div class=\"my-2\">\n <i\n class=\"fa fa-clipboard-check me-2\"\n aria-hidden=\"true\"\n ></i>\n Recommendations\n </div>\n <section class=\"mb-2\"\n *ngFor=\"\n let recommendation of project.project_recommendations\n \">\n <div class=\"me-2\">\n Client: {{ recommendation?.client_name }}\n </div>\n <div class=\"me-2\">\n Message: {{ recommendation?.description }}\n </div>\n <div class=\"row recommendation\">\n <div class=\"col-4\">\n <span>Communication</span>\n <p-rating [(ngModel)]=\"\n recommendation.communication\n \"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n <div class=\"col-4\">\n <span>Quality</span>\n <p-rating [(ngModel)]=\"recommendation.quality\"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n <div class=\"col-4\">\n <span>Time</span>\n <p-rating [(ngModel)]=\"recommendation.time\"\n [cancel]=\"false\"\n [readonly]=\"true\">\n </p-rating>\n </div>\n </div>\n </section>\n </div>\n <div class=\"text-end mt-3 d-flex justify-content-end project-actions\"\n *ngIf=\"isEdit\">\n <!-- Project Edit -->\n <span class=\"btn btn-link pb-0 actions\"\n (keydown.enter)=\"onEditProject(project)\"\n (click)=\"onEditProject(project)\">\n Edit\n </span>\n <button class=\"btn btn-link pb-0 actions\"\n (click)=\"openSkills(project)\">\n Skills\n </button>\n <pw-edit-skills-modal [userId]=\"user?.id\"\n entityEntity=\"Project\"\n entityType=\"skills\"\n (saveEvent)=\"onSkillsSave()\"\n [slug]=\"project?.slug\">\n </pw-edit-skills-modal>\n <!-- Portfolios -->\n <button class=\"btn btn-link pb-0 actions\"\n (click)=\"openPortfolios(project.id)\">\n Photos\n </button>\n <pw-edit-portfolios [slug]=\"user?.slug\"\n [id]=\"project.id\"\n (successEvent)=\"getProjects()\">\n </pw-edit-portfolios>\n <span class=\"btn btn-link pb-0 delete-project actions\"\n (keydown.enter)=\"onDeleteProject(project)\"\n (click)=\"onDeleteProject(project)\">\n Delete\n </span>\n </div>\n <!-- Recommendation -->\n <span class=\"pe-1 mt-3\"\n (click)=\"editRecommendation(project)\"\n (keydown.enter)=\"editRecommendation(project)\"\n *ngIf=\"!isEdit\">\n <a class=\"primary\"><span class=\"fa fa-commenting-o\"></span> Endorse\n </a></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"\n isEdit\n ? ('User.Profile.Projects.NoProjects' | transloco)\n : ('User.Profile.Projects.NoUserProjects' | transloco)\n \"\n *ngIf=\"projects?.length === 0 && isLoaded\">\n </pw-no-data>\n </div>\n</div>\n<pw-edit-project-modal (saveEvent)=\"onSaveProject($event)\"></pw-edit-project-modal>\n<pw-edit-recommendation-modal [user]=\"user\"></pw-edit-recommendation-modal>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ProfileService } from '@posiwise/common-services';\nimport { ScriptLoaderService } from '@posiwise/common-services';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\nimport { StatusCodes } from 'http-status-codes';\nimport { MenuItem } from 'primeng/api';\nimport { forkJoin } from 'rxjs';\n\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\n\nimport { UserProfile, UserRelationship } from '../shared/interface/user-module.interface';\n\n@Component({\n selector: 'pw-user-profile-page',\n templateUrl: './user-profile-page.component.html',\n styleUrls: ['./user-profile-page.component.scss'],\n\n standalone: false\n})\nexport class UserProfilePageComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private loggedInUserDetails: User;\n\n user: User;\n slug: string;\n\n objectKeys = Object.keys;\n\n image = 'assets/img/icons/male.png';\n\n isFollowing: boolean;\n\n isLoaded = false;\n\n userProfile: UserProfile;\n\n items: MenuItem[];\n activeItem: MenuItem;\n /** Current tab value for p-tabs */\n activeTabValue: string;\n\n onTabChange(value: string) {\n const item = this.items.find(i => i.id === value);\n if (item) {\n this.activeItem = item;\n }\n }\n\n constructor(\n injector: Injector,\n private readonly profileService: ProfileService,\n private readonly modalService: NgbModal,\n private readonly scriptLoader: ScriptLoaderService\n ) {\n super(injector);\n this.route.params.subscribe(data => {\n this.slug = data['user-slug'];\n });\n\n this.items = [\n { id: 'about', label: 'About', icon: 'fa fa-fw fa-user' },\n {\n id: 'projects',\n label: 'Projects',\n icon: 'fa fa-fw fa-briefcase',\n state: {\n permission: this.permissionService.evaluatePermissions('Pages.Product.CRM')\n }\n },\n {\n id: 'portfolio',\n label: 'Portfolio',\n icon: 'fa fa-fw fa-image',\n state: {\n permission: this.permissionService.evaluatePermissions('Pages.Product.CRM')\n }\n }\n ];\n [this.activeItem] = this.items;\n this.activeTabValue = this.activeItem?.id as string;\n }\n\n get allowEdit() {\n return (\n this.loggedInUserDetails?.slug === this.slug || this.permissionService.isSuperAdmin()\n );\n }\n\n ngOnInit() {\n this.getUserBySlug();\n // Horizontal Timeline js for user timeline\n this.waitForJQuery(() => {\n this.scriptLoader.loadScript('head', '/assets/js/vertical-timeline.js', true);\n });\n }\n\n handleImageError(event: Event, fallbackPath): void {\n HelperService.handleImageFallbackPath(event, fallbackPath);\n }\n\n private dataURLtoBlob(dataUrl: string) {\n const arr = dataUrl?.split(',');\n // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];\n const bStr = atob(arr[1]);\n let n = bStr.length;\n const u8arr = new Uint8Array(n);\n // eslint-disable-next-line no-plusplus\n while (n--) {\n u8arr[n] = bStr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n }\n\n openModal(content) {\n if (this.allowEdit) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n }\n\n onImageSelection(event) {\n const blob = this.dataURLtoBlob(event);\n const filename = `${`${this.slug.toLocaleLowerCase()}_${Date.parse(\n new Date().toString()\n )}`}.png`;\n const file: File = new File([blob], filename);\n this.userService.addAvatar(file).subscribe(res => {\n this.modalService.dismissAll();\n this.image = res?.user_avatar[2]?.url;\n });\n }\n\n getUserBySlug() {\n forkJoin({\n user: this.profileService.getUserObject('user', this.slug),\n user_profile: this.profileService.getUserObject('user_profile', this.slug),\n avatar: this.profileService.getUserObject('avatar', this.slug)\n }).subscribe({\n next: response => {\n this.user = response.user;\n this.userProfile = response.user_profile;\n if (response.avatar && response.avatar.length > 0) {\n this.image = response?.avatar[2]?.url;\n }\n this.getCurrentUserDetails();\n this.isLoaded = true;\n },\n error: error => {\n if (error.status === StatusCodes.NOT_FOUND) {\n this.router.navigate(['NotFound']);\n }\n }\n });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n private getCurrentUserDetails() {\n this.userStore().subscribe((currentUser: User) => {\n if (currentUser) {\n this.loggedInUserDetails = currentUser;\n\n this.userService\n .getCurrentUserObject('user_relationships')\n .subscribe((response: UserRelationship[]) => {\n this.isFollowing =\n response.length > 0\n ? response.some(\n x =>\n x.followed_id === this.user.id &&\n currentUser.id === x.follower_id\n )\n : false;\n });\n }\n });\n }\n\n sendMessageSlug() {\n this.router.navigate(['/message'], { fragment: this.slug });\n }\n\n followUser() {\n this.userService.followUser(this.user.id).subscribe(response => {\n const name = this.user.first_name || this.user.slug;\n if (response.id) {\n this.isFollowing = true;\n this.toast.success(`You're now following ${name}`);\n } else {\n this.isFollowing = false;\n this.toast.success(`You've unfollowed ${name}`);\n }\n });\n }\n\n private waitForJQuery(callback: () => void): void {\n let attempts = 0;\n const maxAttempts = 100; // 10 seconds max wait time\n\n const checkJQuery = () => {\n if (window['jQuery']) {\n callback();\n } else if (attempts < maxAttempts) {\n attempts++;\n setTimeout(checkJQuery, 100);\n } else {\n // Load jQuery since it's needed\n this.loadJQueryForUserProfile(callback);\n }\n };\n checkJQuery();\n }\n\n private loadJQueryForUserProfile(callback: () => void): void {\n const jquerySrc = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js';\n const script = document.createElement('script');\n script.src = jquerySrc;\n script.crossOrigin = 'anonymous';\n script.async = false;\n script.onload = () => {\n callback();\n };\n script.onerror = () => {\n console.error('Failed to load jQuery for user profile');\n // Try fallback\n const fallbackScript = document.createElement('script');\n fallbackScript.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js';\n fallbackScript.crossOrigin = 'anonymous';\n fallbackScript.async = false;\n fallbackScript.onload = () => {\n callback();\n };\n fallbackScript.onerror = () => {\n console.error('All jQuery CDNs failed for user profile');\n };\n document.head.appendChild(fallbackScript);\n };\n document.head.appendChild(script);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<!-- User Profile Starts -->\n<!-- Basic User Details Starts -->\n<section id=\"user-profile\"\n *ngIf=\"user\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"dashboard\">\n <div class=\"media row py-3 align-items-center\">\n <div class=\"col-3 col-sm-2\">\n <div class=\"align-self-center halfway-fab text-center\">\n <!-- User Avatar -->\n <a class=\"profile-image\">\n <img [src]=\"image\"\n width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"User Male\"\n (error)=\"handleImageError($event, 'assets/img/icons/male.png')\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\" />\n <div class=\"ms-4 ps-3 ms-sm-0 ps-sm-0 overlay\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n *ngIf=\"allowEdit\">\n <div class=\"overlay-text\">\n <!-- Change Profile Pic -->\n <a aria-label=\"Navigate to Target\">\n {{ 'User.Profile.Change' | transloco }}\n </a>\n </div>\n </div>\n </a>\n </div>\n </div>\n <div class=\"col-9 col-sm-5\">\n <div class=\"align-self-start halfway-fab ps-3 pt-2\">\n <div>\n <strong class=\"font-medium-2 text-uppercase\"\n *ngIf=\"user?.last_name\">\n {{\n user?.first_name\n ? user?.first_name + ' ' + user?.last_name\n : 'Update Profile'\n }}\n </strong>\n <strong class=\"font-medium-2 text-uppercase\"\n *ngIf=\"!user?.last_name\">\n {{ user?.first_name ? user?.first_name : 'Update Profile' }}\n </strong>\n <p class=\"font-small-4\">{{ userProfile?.headline }}</p>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-sm-5\">\n <div class=\"profile-cover-buttons\"\n *ngIf=\"!allowEdit\">\n <div class=\"d-flex halfway-fab align-self-end\">\n <div class=\"text-end d-none d-sm-none d-md-none d-lg-block\">\n <button type=\"button\"\n (click)=\"followUser()\"\n class=\"btn btn-outline-primary btn-raised me-2\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n {{ isFollowing ? 'Following' : 'Follow' }}\n </button>\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-3\"\n (click)=\"sendMessageSlug()\">\n <i class=\"fa fa-mail-bulk\" aria-hidden=\"true\"></i> Message\n </button>\n </div>\n <div class=\"text-end d-block d-sm-block d-md-block d-lg-none\">\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-2\">\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-primary btn-raised me-3\">\n <i class=\"fa fa-mail-bulk\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</section>\n<!-- Basic User Details Ends -->\n<section>\n <div class=\"container-fluid pw-tab overflow-hidden\">\n <p-tabs [value]=\"activeTabValue\" (valueChange)=\"onTabChange($event)\">\n <p-tablist>\n <p-tab *ngFor=\"let item of items\" [value]=\"item.id\">\n <i *ngIf=\"item.icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span>{{ item.label }}</span>\n </p-tab>\n </p-tablist>\n </p-tabs>\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <ng-template [ngIf]=\"user && activeItem.id === 'about'\">\n <pw-user-about [user]=\"user\"\n [isEdit]=\"allowEdit\"\n (saveEvent)=\"getUserBySlug()\">\n </pw-user-about>\n </ng-template>\n <ng-template [ngIf]=\"activeItem.id === 'projects'\">\n <pw-user-projects [user]=\"user\"\n [isEdit]=\"allowEdit\"></pw-user-projects>\n </ng-template>\n <ng-template [ngIf]=\"activeItem.id === 'portfolio'\">\n <pw-portfolios [user]=\"user\"\n [isEdit]=\"allowEdit\"></pw-portfolios>\n </ng-template>\n </div>\n </div>\n </div>\n</section>\n<ng-template #content\n let-modal>\n <div class=\"card m-0\">\n <div class=\"card-content\">\n <div class=\"card-title\">\n <h3 class=\"modal-title\">{{ 'User.Profile.ProfilePicture' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"card-header\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n [userAvatar]=\"image\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n </div>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';\n\nimport { AppConfigService } from '@posiwise/app-config-service';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { SharedComponentsModule } from '@posiwise/shared-components';\n\nimport { NgxCaptchaModule } from 'ngx-captcha';\nimport { UiSwitchModule } from 'ngx-ui-switch';\nimport { AccordionModule } from 'primeng/accordion';\nimport { CalendarModule } from 'primeng/calendar';\nimport { FileUploadModule } from 'primeng/fileupload';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { RatingModule } from 'primeng/rating';\nimport { SelectModule } from 'primeng/select';\nimport { SelectButtonModule } from 'primeng/selectbutton';\n\nimport { Loader } from '@googlemaps/js-api-loader';\nimport { NgbDatepickerModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AccountComponent } from './account/account.component';\nimport { AccountDetailsComponent } from './account/account-details/account-details.component';\nimport { AddSubscriptionComponent } from './account/subscriptions/add-subscription/add-subscription.component';\nimport { SavedCardDetailsComponent } from './account/subscriptions/saved-card-details/saved-card-details.component';\nimport { SubscriptionCredentialComponent } from './account/subscriptions/subscription-credential/subscription-credential.component';\nimport { UpdatePaymentDetailsComponent } from './account/subscriptions/update-payment-details/update-payment-details.component';\nimport { UpgradeSubscriptionComponent } from './account/subscriptions/upgrade-subscription/upgrade-subscription.component';\nimport { UserSubscriptionDetailsComponent } from './account/subscriptions/user-subscription-details/user-subscription-details.component';\nimport { UserSubscriptionListComponent } from './account/subscriptions/user-subscriptions-list/user-subscriptions-list.component';\nimport { UserInvoiceComponent } from './account/user-invoice/user-invoice.component';\nimport { CommunicationTabComponent } from './settings-tabs/communication-tab/communication-tab.component';\nimport { OthersTabComponent } from './settings-tabs/others-tab/others-tab.component';\nimport { SecurityTabComponent } from './settings-tabs/security-tab/security-tab.component';\nimport { SettingsComponent } from './settings-tabs/settings-tabs.component';\nimport { SupportComponent } from './support/support.component';\nimport { SupportDetailsComponent } from './support/support-details/support-details.component';\nimport { EditPortfoliosComponent } from './user-profile/edit-portfolios/edit-portfolios.component';\nimport { EditProjectModalComponent } from './user-profile/edit-project-modal/edit-project-modal.component';\nimport { EditQualificationsModalComponent } from './user-profile/edit-qualifications-modal/edit-qualifications-modal.component';\nimport { EditRecommendationModalComponent } from './user-profile/edit-recommendation-modal/edit-recommendation-modal.component';\nimport { EditSkillsModalComponent } from './user-profile/edit-skills-modal/edit-skills-modal.component';\nimport { EditSocialLinksComponent } from './user-profile/edit-social-links/edit-social-links.component';\nimport { EditUserProfileModalComponent } from './user-profile/edit-user-profile-modal/edit-user-profile-modal.component';\nimport { UserAboutComponent } from './user-profile/user-about/user-about.component';\nimport { PortfoliosComponent } from './user-profile/user-portfolios/user-portfolios.component';\nimport { UserProfilePageComponent } from './user-profile/user-profile-page.component';\nimport { UserProjectsComponent } from './user-profile/user-projects/user-projects.component';\n\nconst primeNgModules = [\n CalendarModule,\n MultiSelectModule,\n ProgressSpinnerModule,\n AccordionModule,\n FileUploadModule,\n SelectModule,\n RatingModule,\n SelectButtonModule\n];\n\nconst ngbModule = [NgbModalModule, NgbDatepickerModule];\n\n@NgModule({\n declarations: [\n AccountComponent,\n AccountDetailsComponent,\n AddSubscriptionComponent,\n SavedCardDetailsComponent,\n SubscriptionCredentialComponent,\n UpdatePaymentDetailsComponent,\n UpgradeSubscriptionComponent,\n UserSubscriptionDetailsComponent,\n UserSubscriptionListComponent,\n UserInvoiceComponent,\n CommunicationTabComponent,\n OthersTabComponent,\n SecurityTabComponent,\n SettingsComponent,\n SupportComponent,\n EditPortfoliosComponent,\n EditProjectModalComponent,\n EditQualificationsModalComponent,\n EditRecommendationModalComponent,\n EditSkillsModalComponent,\n EditSocialLinksComponent,\n EditUserProfileModalComponent,\n UserAboutComponent,\n PortfoliosComponent,\n UserProfilePageComponent,\n UserProjectsComponent,\n SupportDetailsComponent\n ],\n imports: [\n InputTextModule,\n DirectivesModule,\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n CoreTranslocoModule,\n NgxGpAutocompleteModule,\n SharedComponentsModule,\n PipesModule,\n UiSwitchModule,\n NgxCaptchaModule,\n FormsModule,\n ...primeNgModules,\n ...ngbModule\n ],\n exports: [\n AccountComponent,\n AccountDetailsComponent,\n AddSubscriptionComponent,\n SavedCardDetailsComponent,\n SubscriptionCredentialComponent,\n UpdatePaymentDetailsComponent,\n UpgradeSubscriptionComponent,\n UserSubscriptionDetailsComponent,\n UserSubscriptionListComponent,\n UserInvoiceComponent,\n CommunicationTabComponent,\n OthersTabComponent,\n SecurityTabComponent,\n SettingsComponent,\n SupportComponent,\n EditPortfoliosComponent,\n EditProjectModalComponent,\n EditQualificationsModalComponent,\n EditRecommendationModalComponent,\n EditSkillsModalComponent,\n EditSocialLinksComponent,\n EditUserProfileModalComponent,\n UserAboutComponent,\n PortfoliosComponent,\n UserProfilePageComponent,\n UserProjectsComponent,\n SupportDetailsComponent\n ],\n providers: [\n {\n provide: Loader,\n useFactory: (appConfigService: AppConfigService) => {\n return new Loader({\n apiKey: appConfigService.getGoogleApiKey(),\n libraries: ['places']\n });\n },\n deps: [AppConfigService]\n }\n ]\n})\nexport class UserModuleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i5","i6","i7","i8","i9","i10","i4","i7.SavedCardDetailsComponent","i10.SavedCardDetailsComponent","i11","i12","i14","i15","i13","i5.EditQualificationsModalComponent","i6.EditSkillsModalComponent","i7.EditSocialLinksComponent","i8.EditUserProfileModalComponent","i8.EditPortfoliosComponent","i9.EditProjectModalComponent","i10.EditRecommendationModalComponent","i11.EditSkillsModalComponent","i8.UserAboutComponent","i9.PortfoliosComponent","i10.UserProjectsComponent"],"mappings":"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"}