{"version":3,"file":"c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs","sources":["../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.ts","../../branding/shared/lazy/add-branding-modal/add-branding-modal.component.html","../../branding/shared/lazy/add-branding-modal/add-branding-modal.service.ts","../../branding/shared/lazy/add-branding-modal/c8y-ngx-components-branding-shared-lazy-add-branding-modal.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { StoreBrandingService } from '@c8y/ngx-components/branding/shared/data';\nimport {\n  AbstractControl,\n  FormBuilder,\n  ReactiveFormsModule,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport { CoreModule, gettext } from '@c8y/ngx-components';\nimport { NgIf } from '@angular/common';\n\n@Component({\n  selector: 'c8y-add-branding-modal',\n  templateUrl: './add-branding-modal.component.html',\n  standalone: true,\n  imports: [CoreModule, NgIf, ReactiveFormsModule]\n})\nexport class AddBrandingModalComponent {\n  @Input() duplicateBranding = false;\n  form: ReturnType<typeof this.initForm>;\n  namesAlreadyTaken: string[] = [];\n  loading = true;\n\n  result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n    this._resovle = resolve;\n    this._reject = reject;\n  });\n\n  messages = [\n    {\n      name: 'nameAlreadyTaken',\n      text: gettext('The provided name is already taken.')\n    },\n    {\n      name: 'onlyLowerCaseCharacters',\n      text: gettext('Only lower case characters are allowed.')\n    },\n    {\n      name: 'shouldStartWithLowerCaseLetterOrNumber',\n      text: gettext('Should start with a lower case letter or a number.')\n    },\n    {\n      name: 'invalidCharacters',\n      text: gettext('Invalid character \"{{ invalidCharacter }}\". Only a-z, 0-9 and - are allowed.')\n    }\n  ] as const;\n\n  private _resovle: (value: ReturnType<typeof this.initForm>['value']) => void;\n  private _reject: (reason?: any) => void;\n\n  constructor(\n    private branding: StoreBrandingService,\n    private formBuilder: FormBuilder\n  ) {\n    this.form = this.initForm();\n    this.getExistingBrandingVersions();\n  }\n\n  async getExistingBrandingVersions() {\n    try {\n      const { variants } = await this.branding.loadBrandingVariants();\n      this.namesAlreadyTaken = variants.map(variant => variant.version);\n    } catch (e) {\n      console.warn(e);\n    }\n    this.loading = false;\n  }\n\n  initForm() {\n    return this.formBuilder.group({\n      brandingName: [\n        '',\n        [Validators.required, this.ensureProperVariantName(), this.ensureNotExistingName()]\n      ]\n    });\n  }\n\n  cancel() {\n    this._reject();\n  }\n\n  save() {\n    this._resovle(this.form.value);\n  }\n\n  private ensureNotExistingName(): ValidatorFn {\n    return (control: AbstractControl) => {\n      if (typeof control.value === 'string') {\n        const lowercaseName = control.value.toLowerCase();\n        const nameAlreadyTaken = this.namesAlreadyTaken.some(name =>\n          name.toLowerCase().startsWith(lowercaseName + '-')\n        );\n        if (nameAlreadyTaken) {\n          return { nameAlreadyTaken: {} };\n        }\n      }\n      return null;\n    };\n  }\n\n  private ensureProperVariantName(): ValidatorFn {\n    return (control: AbstractControl) => {\n      if (typeof control.value === 'string') {\n        const value = control.value;\n        if (/[A-Z]/.test(value)) {\n          return {\n            onlyLowerCaseCharacters: {}\n          };\n        }\n        if (!/^[a-z0-9]+/.test(value)) {\n          return {\n            shouldStartWithLowerCaseLetterOrNumber: {}\n          };\n        }\n\n        const matches = /[^a-z0-9-]/.exec(value);\n        if (matches) {\n          return {\n            invalidCharacters: {\n              invalidCharacter: matches[0]\n            }\n          };\n        }\n      }\n      return null;\n    };\n  }\n}\n","<c8y-modal\n  [title]=\"duplicateBranding ? 'Duplicate Branding' : 'Create Branding'\"\n  [headerClasses]=\"'dialog-header'\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [disabled]=\"form.invalid\"\n  [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n<ng-container c8y-modal-title>\n  <span [c8yIcon]=\"'palette'\"></span>\n</ng-container>\n  <div [formGroup]=\"form\" class=\"p-24\">\n    <c8y-form-group>\n      <label\n        for=\"brandingName\"\n        translate\n      >\n        Branding name\n      </label>\n      <input\n        class=\"form-control\"\n        name=\"brandingName\"\n        id=\"brandingName\"\n        type=\"text\"\n        formControlName=\"brandingName\"\n        placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'main-branding' } }}\"\n      />\n      <c8y-messages [helpMessage]=\"'Upper case letters not allowed' | translate\">\n        <c8y-message *ngFor=\"let message of messages\"\n          [name]=\"message.name\"\n          [text]=\"message.text | translate\"\n        ></c8y-message>\n      </c8y-messages>\n    </c8y-form-group>\n  </div>\n</c8y-modal>\n","import { Injectable } from '@angular/core';\nimport { AddBrandingModalComponent } from './add-branding-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AddBrandingModalService {\n  constructor(private modal: BsModalService) {}\n\n  async openAddBrandingModal() {\n    let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n    try {\n      const modalRef = this.modal.show(AddBrandingModalComponent, {\n        class: 'modal-sm',\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        ignoreBackdropClick: true,\n        keyboard: false\n      });\n      versionDetails = await modalRef.content.result;\n    } catch (e) {\n      // modal closed\n      return;\n    }\n\n    return versionDetails;\n  }\n\n  async openDuplicateBrandingModal() {\n    let versionDetails: Awaited<AddBrandingModalComponent['result']>;\n    try {\n      const modalRef = this.modal.show(AddBrandingModalComponent, {\n        class: 'modal-sm',\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        initialState: { duplicateBranding: true },\n        ignoreBackdropClick: true,\n        keyboard: false\n      });\n      versionDetails = await modalRef.content.result;\n    } catch (e) {\n      // modal closed\n      return;\n    }\n\n    return versionDetails;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}