@c8y/ngx-components 1024.8.3 → 1024.9.0

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.
@@ -170,14 +170,14 @@ class PlatformConfigurationFormProviderService {
170
170
  'export.data.mail.subject': {
171
171
  formId: 'export.data.mail.subject',
172
172
  title: gettext('Email subject'),
173
- description: gettext('Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}'),
173
+ description: gettext('Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}'),
174
174
  type: 'string',
175
175
  control: new FormControl('')
176
176
  },
177
177
  'export.data.mail.text': {
178
178
  formId: 'export.data.mail.text',
179
179
  title: gettext('Email template'),
180
- description: `${gettext('Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}')}`,
180
+ description: `${gettext('Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}')}`,
181
181
  type: 'textarea',
182
182
  control: new FormControl(''),
183
183
  lineBreakHint: true
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-platform-configuration.mjs","sources":["../../platform-configuration/platform-configuration-form-provider.service.ts","../../platform-configuration/platform-configuration-form.component.ts","../../platform-configuration/platform-configuration-form.component.html","../../platform-configuration/platform-configuration.module.ts","../../platform-configuration/c8y-ngx-components-platform-configuration.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DatePipe } from '@c8y/ngx-components';\nimport { FormControl, Validators } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlatformConfigurationFormProviderService {\n lineBreakHint = gettext('Use [Enter] or <br> tag to add a new line');\n\n exampleTomorrowDate = (() => {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return this.c8yDatePipe.transform(tomorrow, 'yyyy-MM-ddTHH:mm:ssZ');\n })();\n\n platformConfigurationFormDefinitions = {\n 'system.password.enforce.strength': {\n formId: 'system.password.enforce.strength',\n title: gettext('Enforce \"green\" passwords for all users'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'system.password.limit.validity': {\n formId: 'system.password.limit.validity',\n title: gettext('Password validity limit (days)'),\n description: gettext(\n 'The number of days a password may be valid before it must be reset; minimum value is 0, maximum value is 999999. Leave empty to use the value from the tenant options.'\n ),\n type: 'number',\n control: new FormControl('', [Validators.min(0), Validators.max(999999)])\n },\n 'system.password.history.size': {\n formId: 'system.password.history.size',\n title: gettext('Password history size'),\n description: gettext(\n 'The number of times before the current password can be reused. Minimum value is 0, preset value is 10.'\n ),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '10' },\n control: new FormControl('', [Validators.min(0)])\n },\n 'system.password.green.min-length': {\n formId: 'system.password.green.min-length',\n title: gettext('Minimal length of \"green\" password'),\n description: gettext(\n 'The minimum number of characters which are required for a safe password. Minimum (and preset) value is 8, maximum value is 32. Leave empty to skip this constraint.'\n ),\n type: 'number',\n control: new FormControl('', [Validators.min(8), Validators.max(32)])\n },\n 'ui.email.protocolAndEncryption': {\n formId: 'ui.email.protocolAndEncryption',\n title: gettext('Protocol and encryption'),\n type: 'select',\n options: [\n {\n value: 'SMTP_PLAIN',\n name: gettext('SMTP (no encryption)')\n },\n {\n value: 'SMTP_ENCRYPTED',\n name: gettext('SMTP (STARTTLS)')\n },\n {\n value: 'SMTPS_ENCRYPTED',\n name: gettext('SMTPS (SSL/TLS)')\n }\n ],\n skipOnSave: true,\n control: new FormControl('')\n },\n 'email.protocol': {\n formId: 'email.protocol',\n title: gettext('Protocol'),\n type: 'select',\n options: [\n {\n value: 'smtp',\n name: 'SMTP'\n },\n {\n value: 'smtps',\n name: 'SMTPS'\n }\n ],\n control: new FormControl('')\n },\n 'email.connection.encrypted': {\n formId: 'email.connection.encrypted',\n title: gettext('Connection encrypted'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'email.host': {\n formId: 'email.host',\n title: gettext('Host'),\n type: 'string',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: 'localhost' },\n control: new FormControl('')\n },\n 'email.port': {\n formId: 'email.port',\n title: gettext('Port'),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '25' },\n control: new FormControl('', [Validators.min(1), Validators.max(65535)])\n },\n 'email.username': {\n formId: 'email.username',\n title: gettext('Username'),\n type: 'string',\n control: new FormControl('')\n },\n 'credentials.email.password': {\n formId: 'credentials.email.password',\n title: gettext('Password'),\n type: 'password',\n control: new FormControl('')\n },\n 'email.from': {\n formId: 'email.from',\n title: gettext('Sender address'),\n type: 'string',\n control: new FormControl('', [Validators.email])\n },\n 'passwordReset.sendNotificationToUnknownEmails': {\n formId: 'passwordReset.sendNotificationToUnknownEmails',\n title: gettext('Send notifications to unknown email addresses'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'passwordReset.email.subject': {\n formId: 'passwordReset.email.subject',\n title: gettext('Email subject'),\n description: gettext('Subject used for all password reset related emails'),\n type: 'string',\n control: new FormControl('')\n },\n 'passwordReset.token.email.template': {\n formId: 'passwordReset.token.email.template',\n title: gettext('Password reset email template (when address is known)'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to reset password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}&email={email}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.user.not.found.email.template': {\n formId: 'passwordReset.user.not.found.email.template',\n title: gettext('Password reset email template (when address is not known)'),\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.success.email.template': {\n formId: 'passwordReset.success.email.template',\n title: gettext('Password change confirmation email template'),\n description: `${gettext('Placeholders: {host}, {tenant-domain}, {username}')}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.invite.template': {\n formId: 'passwordReset.invite.template',\n title: gettext('Invitation email template'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to setup password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'export.data.mail.subject': {\n formId: 'export.data.mail.subject',\n title: gettext('Email subject'),\n description: gettext(\n 'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}'\n ),\n type: 'string',\n control: new FormControl('')\n },\n 'export.data.mail.text': {\n formId: 'export.data.mail.text',\n title: gettext('Email template'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/inventory/binaries/{binaryId}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'export.data.mail.text.userunauthorized': {\n formId: 'export.data.mail.text.userunauthorized',\n title: gettext('User unauthorized error message'),\n description: gettext('Placeholders: {user}, {exportApi}'),\n type: 'string',\n control: new FormControl('')\n },\n 'two-factor-authentication.token.sms.template': {\n formId: 'two-factor-authentication.token.sms.template',\n title: gettext('Verification token SMS template'),\n description: gettext('Placeholder: {token} - created token'),\n type: 'string',\n placeholder: gettext('e.g.: Verification code: {token}'),\n control: new FormControl('')\n },\n 'system.support.url': {\n formId: 'system.support.url',\n title: gettext('URL'),\n type: 'string',\n description: gettext(\n 'Possible values: URL string, \"false`KEEP_ORIGINAL`\" (hides the link) or leave empty (uses the default). Applications can override this setting by defining \"supportUrl`KEEP_ORIGINAL`\" application option.'\n ),\n control: new FormControl('')\n },\n 'storageLimit.warning.email.subject': {\n formId: 'storageLimit.warning.email.subject',\n title: gettext('Warning email subject'),\n description: gettext('Email which will be sent one day before data is deleted'),\n type: 'string',\n control: new FormControl('')\n },\n 'storageLimit.warning.email.template': {\n formId: 'storageLimit.warning.email.template',\n title: gettext('Warning email template'),\n description: `${gettext(\n 'Email which will be sent one day before data is deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'storageLimit.process.email.subject': {\n formId: 'storageLimit.process.email.subject',\n title: gettext('Limit exceeded email subject'),\n description: gettext('Email which will be sent after over-limit data has been deleted'),\n type: 'string',\n control: new FormControl('')\n },\n 'storageLimit.process.email.template': {\n formId: 'storageLimit.process.email.template',\n title: gettext('Limit exceeded email template'),\n description: `${gettext(\n 'Email which will be sent after over-limit data has been deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'tenantSuspend.mail.sendtosuspended': {\n formId: 'tenantSuspend.mail.sendtosuspended',\n title: gettext(\"Send email to suspended tenant's administrator\"),\n type: 'boolean',\n control: new FormControl('')\n },\n 'tenantSuspend.mail.additional.address': {\n formId: 'tenantSuspend.mail.additional.address',\n title: gettext('Tenant suspended email additional receiver'),\n type: 'string',\n control: new FormControl('', [Validators.email])\n },\n 'tenantSuspend.mail.subject': {\n formId: 'tenantSuspend.mail.subject',\n title: gettext('Tenant suspended email subject'),\n description: gettext(\n \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n ),\n type: 'string',\n control: new FormControl('')\n },\n 'tenantSuspend.mail.text': {\n formId: 'tenantSuspend.mail.text',\n title: gettext('Tenant suspended email template'),\n description: `${gettext(\n \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'system.support-user.enabled': {\n formId: 'system.support-user.enabled',\n title: gettext('Activate support user'),\n description: gettext(\n 'Possible values: \"true`KEEP_ORIGINAL`\", \"false`KEEP_ORIGINAL`\", or a specific date until the user should remain active, for example, \"{{ exampleDate }}\". Leaving it blank, will set the value to \"true`KEEP_ORIGINAL`\".'\n ),\n descriptionTranslateParams: {\n exampleDate: this.exampleTomorrowDate\n },\n type: 'string',\n control: new FormControl(''),\n placeholder: this.exampleTomorrowDate\n },\n 'system.support-user.validity-limit': {\n formId: 'system.support-user.validity-limit',\n title: gettext('Validity limit'),\n description: gettext(\n 'Each support user request from subtenant user will prolong support user access by the given number of hours (default: 24 hours). Leaving it blank, will set the value to \"24\".'\n ),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '24' },\n control: new FormControl('', [Validators.min(0)])\n }\n };\n\n optionsGroups = [\n {\n title: gettext('Passwords'),\n id: 'passwordsOptions',\n items: [\n this.platformConfigurationFormDefinitions['system.password.enforce.strength'],\n this.platformConfigurationFormDefinitions['system.password.limit.validity'],\n this.platformConfigurationFormDefinitions['system.password.history.size'],\n this.platformConfigurationFormDefinitions['system.password.green.min-length']\n ]\n },\n {\n title: gettext('Two-factor authentication'),\n id: 'twoFactorAuthenticationOptions',\n items: [\n this.platformConfigurationFormDefinitions['two-factor-authentication.token.sms.template']\n ]\n },\n {\n title: gettext('Support link'),\n id: 'supportLinkOptions',\n items: [this.platformConfigurationFormDefinitions['system.support.url']]\n },\n {\n title: gettext('Password reset'),\n id: 'passwordResetOptions',\n items: [\n this.platformConfigurationFormDefinitions['passwordReset.sendNotificationToUnknownEmails'],\n this.platformConfigurationFormDefinitions['passwordReset.token.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.user.not.found.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.email.subject'],\n this.platformConfigurationFormDefinitions['passwordReset.success.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.invite.template']\n ]\n },\n {\n title: gettext('Support user'),\n id: 'supportUserOptions',\n items: [\n this.platformConfigurationFormDefinitions['system.support-user.enabled'],\n this.platformConfigurationFormDefinitions['system.support-user.validity-limit']\n ]\n },\n {\n title: gettext('Email server'),\n id: 'emailServerOptions',\n items: [\n this.platformConfigurationFormDefinitions['ui.email.protocolAndEncryption'],\n this.platformConfigurationFormDefinitions['email.host'],\n this.platformConfigurationFormDefinitions['email.port'],\n this.platformConfigurationFormDefinitions['email.username'],\n this.platformConfigurationFormDefinitions['credentials.email.password'],\n this.platformConfigurationFormDefinitions['email.from']\n ]\n },\n {\n title: gettext('Data export'),\n id: 'dataExportOptions',\n items: [\n this.platformConfigurationFormDefinitions['export.data.mail.subject'],\n this.platformConfigurationFormDefinitions['export.data.mail.text'],\n this.platformConfigurationFormDefinitions['export.data.mail.text.userunauthorized']\n ]\n },\n {\n title: gettext('Storage limit'),\n id: 'storageLimitOptions',\n items: [\n this.platformConfigurationFormDefinitions['storageLimit.warning.email.subject'],\n this.platformConfigurationFormDefinitions['storageLimit.warning.email.template'],\n this.platformConfigurationFormDefinitions['storageLimit.process.email.subject'],\n this.platformConfigurationFormDefinitions['storageLimit.process.email.template']\n ]\n },\n {\n title: gettext('Suspending tenants'),\n id: 'suspendingTenantsOptions',\n items: [\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.sendtosuspended'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.additional.address'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.subject'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.text']\n ]\n }\n ];\n\n constructor(private c8yDatePipe: DatePipe) {}\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformConfigurationFormProviderService } from './platform-configuration-form-provider.service';\nimport { NgFor, NgSwitch, NgSwitchCase, NgTemplateOutlet, NgIf } from '@angular/common';\nimport {\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-platform-configuration-form',\n templateUrl: './platform-configuration-form.component.html',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n NgFor,\n NgSwitch,\n NgSwitchCase,\n NgTemplateOutlet,\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NgIf,\n C8yTranslatePipe\n ]\n})\nexport class PlatformConfigurationFormComponent {\n @Input('optionsGroups')\n set _optionsGroups(groupIds: string[]) {\n if (groupIds === undefined) {\n return;\n }\n this.optionsGroups = groupIds.map(groupId =>\n this.formProviderService.optionsGroups.find(option => option.id === groupId)\n );\n }\n\n @Input()\n set readOnly(disabled: boolean) {\n disabled ? this.form.disable() : this.form.enable();\n }\n\n @Input()\n set formValue(value) {\n if (value) {\n const convertedValue = this.afterLoad(value);\n this.form.patchValue(convertedValue, { emitEvent: false });\n this.form.markAsUntouched();\n this.form.markAsPristine();\n }\n }\n optionsGroups = [];\n\n @Output()\n onSave = new EventEmitter();\n\n form = new FormGroup({});\n\n lineBreakHint = this.formProviderService.lineBreakHint;\n\n constructor(private formProviderService: PlatformConfigurationFormProviderService) {\n Object.keys(formProviderService.platformConfigurationFormDefinitions).forEach(fieldId => {\n this.form.addControl(\n fieldId,\n formProviderService.platformConfigurationFormDefinitions[fieldId].control\n );\n });\n }\n\n /**\n * Parses provided object's property values\n * @param options\n */\n parseConfiguration(options: object): void {\n const definitions: object = this.formProviderService.platformConfigurationFormDefinitions;\n Object.entries(options).forEach(([key, rawValue]) => {\n if (\n definitions[key] &&\n (definitions[key].type === 'number' || definitions[key].type === 'boolean')\n ) {\n try {\n options[key] = JSON.parse(rawValue);\n } catch {\n options[key] = rawValue;\n }\n }\n });\n }\n\n /**\n * Parses incoming raw object before it is applied to FormGroup.\n */\n afterLoad(options: object): object {\n this.parseConfiguration(options);\n\n delete options['ui.email.protocolAndEncryption'];\n const emailProtocol = options['email.protocol'];\n const connectionEncrypted = options['email.connection.encrypted'] || false;\n if (emailProtocol === 'smtp') {\n if (connectionEncrypted) {\n options['ui.email.protocolAndEncryption'] = 'SMTP_ENCRYPTED';\n } else {\n options['ui.email.protocolAndEncryption'] = 'SMTP_PLAIN';\n }\n } else if (emailProtocol === 'smtps') {\n options['ui.email.protocolAndEncryption'] = 'SMTPS_ENCRYPTED';\n } else {\n options['ui.email.protocolAndEncryption'] = undefined;\n }\n return options;\n }\n\n /**\n * Translates ui.email.protocolAndEncryption field into\n * separate email.protocol and email.connection.encrypted\n */\n beforeSave(value): object {\n const protocolAndEncryption = value['ui.email.protocolAndEncryption'];\n if (protocolAndEncryption) {\n //email.protocol\n const protocol = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[1];\n value['email.protocol'] = protocol ? protocol.toLowerCase() : protocol;\n\n // email.connection.encrypted\n const encryption = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[2];\n value['email.connection.encrypted'] = encryption === 'ENCRYPTED';\n delete value['ui.email.protocolAndEncryption'];\n }\n\n return value;\n }\n\n getDirtyValues() {\n const dirtyValues = {};\n\n Object.keys(this.form.controls).forEach(key => {\n const currentControl = this.form.controls[key];\n\n if (currentControl.dirty) {\n dirtyValues[key] = currentControl.value;\n }\n });\n\n return dirtyValues;\n }\n\n emitForm() {\n if (this.form.valid) {\n const changedValues = this.getDirtyValues();\n const convertedValue = this.beforeSave(changedValues);\n this.onSave.emit(convertedValue);\n }\n }\n}\n","<form [formGroup]=\"form\">\n <div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Configuration' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div>\n <fieldset\n class=\"row schema-form-fieldset separator-bottom p-t-24\"\n *ngFor=\"let category of optionsGroups\"\n >\n <div class=\"col-sm-3 col-md-2 p-l-24 p-l-xs-8 p-b-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n data-cy=\"fieldset--section-title\"\n >\n {{ category.title | translate }}\n </div>\n </div>\n <div class=\"col-sm-9 col-md-8\">\n <div\n class=\"form-group\"\n *ngFor=\"let field of category.items\"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container\n *ngTemplateOutlet=\"stringTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'password'\">\n <ng-container\n *ngTemplateOutlet=\"passwordTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container\n *ngTemplateOutlet=\"textareaTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container\n *ngTemplateOutlet=\"booleanTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <ng-container\n *ngTemplateOutlet=\"selectTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save configuration' | translate\"\n type=\"submit\"\n (click)=\"emitForm()\"\n [disabled]=\"!form.dirty || form.invalid || form.disabled\"\n >\n <span translate>Save</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template\n #stringTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"text\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #passwordTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"password\"\n autocomplete=\"new-password\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"number\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #textareaTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <textarea\n class=\"form-control\"\n [title]=\"field.title | translate\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n [rows]=\"10\"\n ></textarea>\n <div\n class=\"help-block\"\n *ngIf=\"field.description || field.lineBreakHint\"\n >\n <span *ngIf=\"field.description\">\n {{ field.description | translate : field.descriptionTranslateParams }}\n </span>\n <span *ngIf=\"field.description && field.lineBreakHint\"><br /></span>\n <span *ngIf=\"field.lineBreakHint\">{{ lineBreakHint | translate }}</span>\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #booleanTemplate\n let-field\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ field.title | translate }}\"\n >\n <input\n [title]=\"field.title | translate\"\n type=\"checkbox\"\n [formControlName]=\"field.formId\"\n />\n <span></span>\n <span>{{ field.title | translate }}</span>\n </label>\n\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #selectTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n <span>{{ field.title | translate }}</span>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n >\n <option></option>\n <option\n *ngFor=\"let option of field.options\"\n [value]=\"option.value\"\n >\n {{ option.name | translate }}\n </option>\n </select>\n <span></span>\n </div>\n\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { CommonModule, FormsModule } from '@c8y/ngx-components';\nimport { NgModule } from '@angular/core';\nimport { PlatformConfigurationFormComponent } from './platform-configuration-form.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, PlatformConfigurationFormComponent],\n exports: [PlatformConfigurationFormComponent]\n})\nexport class PlatformConfigurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PlatformConfigurationFormProviderService","FormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-platform-configuration.mjs","sources":["../../platform-configuration/platform-configuration-form-provider.service.ts","../../platform-configuration/platform-configuration-form.component.ts","../../platform-configuration/platform-configuration-form.component.html","../../platform-configuration/platform-configuration.module.ts","../../platform-configuration/c8y-ngx-components-platform-configuration.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DatePipe } from '@c8y/ngx-components';\nimport { FormControl, Validators } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PlatformConfigurationFormProviderService {\n lineBreakHint = gettext('Use [Enter] or <br> tag to add a new line');\n\n exampleTomorrowDate = (() => {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n return this.c8yDatePipe.transform(tomorrow, 'yyyy-MM-ddTHH:mm:ssZ');\n })();\n\n platformConfigurationFormDefinitions = {\n 'system.password.enforce.strength': {\n formId: 'system.password.enforce.strength',\n title: gettext('Enforce \"green\" passwords for all users'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'system.password.limit.validity': {\n formId: 'system.password.limit.validity',\n title: gettext('Password validity limit (days)'),\n description: gettext(\n 'The number of days a password may be valid before it must be reset; minimum value is 0, maximum value is 999999. Leave empty to use the value from the tenant options.'\n ),\n type: 'number',\n control: new FormControl('', [Validators.min(0), Validators.max(999999)])\n },\n 'system.password.history.size': {\n formId: 'system.password.history.size',\n title: gettext('Password history size'),\n description: gettext(\n 'The number of times before the current password can be reused. Minimum value is 0, preset value is 10.'\n ),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '10' },\n control: new FormControl('', [Validators.min(0)])\n },\n 'system.password.green.min-length': {\n formId: 'system.password.green.min-length',\n title: gettext('Minimal length of \"green\" password'),\n description: gettext(\n 'The minimum number of characters which are required for a safe password. Minimum (and preset) value is 8, maximum value is 32. Leave empty to skip this constraint.'\n ),\n type: 'number',\n control: new FormControl('', [Validators.min(8), Validators.max(32)])\n },\n 'ui.email.protocolAndEncryption': {\n formId: 'ui.email.protocolAndEncryption',\n title: gettext('Protocol and encryption'),\n type: 'select',\n options: [\n {\n value: 'SMTP_PLAIN',\n name: gettext('SMTP (no encryption)')\n },\n {\n value: 'SMTP_ENCRYPTED',\n name: gettext('SMTP (STARTTLS)')\n },\n {\n value: 'SMTPS_ENCRYPTED',\n name: gettext('SMTPS (SSL/TLS)')\n }\n ],\n skipOnSave: true,\n control: new FormControl('')\n },\n 'email.protocol': {\n formId: 'email.protocol',\n title: gettext('Protocol'),\n type: 'select',\n options: [\n {\n value: 'smtp',\n name: 'SMTP'\n },\n {\n value: 'smtps',\n name: 'SMTPS'\n }\n ],\n control: new FormControl('')\n },\n 'email.connection.encrypted': {\n formId: 'email.connection.encrypted',\n title: gettext('Connection encrypted'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'email.host': {\n formId: 'email.host',\n title: gettext('Host'),\n type: 'string',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: 'localhost' },\n control: new FormControl('')\n },\n 'email.port': {\n formId: 'email.port',\n title: gettext('Port'),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '25' },\n control: new FormControl('', [Validators.min(1), Validators.max(65535)])\n },\n 'email.username': {\n formId: 'email.username',\n title: gettext('Username'),\n type: 'string',\n control: new FormControl('')\n },\n 'credentials.email.password': {\n formId: 'credentials.email.password',\n title: gettext('Password'),\n type: 'password',\n control: new FormControl('')\n },\n 'email.from': {\n formId: 'email.from',\n title: gettext('Sender address'),\n type: 'string',\n control: new FormControl('', [Validators.email])\n },\n 'passwordReset.sendNotificationToUnknownEmails': {\n formId: 'passwordReset.sendNotificationToUnknownEmails',\n title: gettext('Send notifications to unknown email addresses'),\n type: 'boolean',\n control: new FormControl('')\n },\n 'passwordReset.email.subject': {\n formId: 'passwordReset.email.subject',\n title: gettext('Email subject'),\n description: gettext('Subject used for all password reset related emails'),\n type: 'string',\n control: new FormControl('')\n },\n 'passwordReset.token.email.template': {\n formId: 'passwordReset.token.email.template',\n title: gettext('Password reset email template (when address is known)'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to reset password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}&email={email}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.user.not.found.email.template': {\n formId: 'passwordReset.user.not.found.email.template',\n title: gettext('Password reset email template (when address is not known)'),\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.success.email.template': {\n formId: 'passwordReset.success.email.template',\n title: gettext('Password change confirmation email template'),\n description: `${gettext('Placeholders: {host}, {tenant-domain}, {username}')}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'passwordReset.invite.template': {\n formId: 'passwordReset.invite.template',\n title: gettext('Invitation email template'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {token}, {username}, {email}. Whole link to setup password can be, for example: {tenant-domain}/apps/devicemanagement/index.html?token={token}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'export.data.mail.subject': {\n formId: 'export.data.mail.subject',\n title: gettext('Email subject'),\n description: gettext(\n 'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}'\n ),\n type: 'string',\n control: new FormControl('')\n },\n 'export.data.mail.text': {\n formId: 'export.data.mail.text',\n title: gettext('Email template'),\n description: `${gettext(\n 'Placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to result file is: {tenant-domain}/apps/public/login/index.html#/?download={binaryId}'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'export.data.mail.text.userunauthorized': {\n formId: 'export.data.mail.text.userunauthorized',\n title: gettext('User unauthorized error message'),\n description: gettext('Placeholders: {user}, {exportApi}'),\n type: 'string',\n control: new FormControl('')\n },\n 'two-factor-authentication.token.sms.template': {\n formId: 'two-factor-authentication.token.sms.template',\n title: gettext('Verification token SMS template'),\n description: gettext('Placeholder: {token} - created token'),\n type: 'string',\n placeholder: gettext('e.g.: Verification code: {token}'),\n control: new FormControl('')\n },\n 'system.support.url': {\n formId: 'system.support.url',\n title: gettext('URL'),\n type: 'string',\n description: gettext(\n 'Possible values: URL string, \"false`KEEP_ORIGINAL`\" (hides the link) or leave empty (uses the default). Applications can override this setting by defining \"supportUrl`KEEP_ORIGINAL`\" application option.'\n ),\n control: new FormControl('')\n },\n 'storageLimit.warning.email.subject': {\n formId: 'storageLimit.warning.email.subject',\n title: gettext('Warning email subject'),\n description: gettext('Email which will be sent one day before data is deleted'),\n type: 'string',\n control: new FormControl('')\n },\n 'storageLimit.warning.email.template': {\n formId: 'storageLimit.warning.email.template',\n title: gettext('Warning email template'),\n description: `${gettext(\n 'Email which will be sent one day before data is deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'storageLimit.process.email.subject': {\n formId: 'storageLimit.process.email.subject',\n title: gettext('Limit exceeded email subject'),\n description: gettext('Email which will be sent after over-limit data has been deleted'),\n type: 'string',\n control: new FormControl('')\n },\n 'storageLimit.process.email.template': {\n formId: 'storageLimit.process.email.template',\n title: gettext('Limit exceeded email template'),\n description: `${gettext(\n 'Email which will be sent after over-limit data has been deleted. Placeholders: {tenant-domain}, {tenant}, {size} - storage usage in %'\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'tenantSuspend.mail.sendtosuspended': {\n formId: 'tenantSuspend.mail.sendtosuspended',\n title: gettext(\"Send email to suspended tenant's administrator\"),\n type: 'boolean',\n control: new FormControl('')\n },\n 'tenantSuspend.mail.additional.address': {\n formId: 'tenantSuspend.mail.additional.address',\n title: gettext('Tenant suspended email additional receiver'),\n type: 'string',\n control: new FormControl('', [Validators.email])\n },\n 'tenantSuspend.mail.subject': {\n formId: 'tenantSuspend.mail.subject',\n title: gettext('Tenant suspended email subject'),\n description: gettext(\n \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n ),\n type: 'string',\n control: new FormControl('')\n },\n 'tenantSuspend.mail.text': {\n formId: 'tenantSuspend.mail.text',\n title: gettext('Tenant suspended email template'),\n description: `${gettext(\n \"Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain\"\n )}`,\n type: 'textarea',\n control: new FormControl(''),\n lineBreakHint: true\n },\n 'system.support-user.enabled': {\n formId: 'system.support-user.enabled',\n title: gettext('Activate support user'),\n description: gettext(\n 'Possible values: \"true`KEEP_ORIGINAL`\", \"false`KEEP_ORIGINAL`\", or a specific date until the user should remain active, for example, \"{{ exampleDate }}\". Leaving it blank, will set the value to \"true`KEEP_ORIGINAL`\".'\n ),\n descriptionTranslateParams: {\n exampleDate: this.exampleTomorrowDate\n },\n type: 'string',\n control: new FormControl(''),\n placeholder: this.exampleTomorrowDate\n },\n 'system.support-user.validity-limit': {\n formId: 'system.support-user.validity-limit',\n title: gettext('Validity limit'),\n description: gettext(\n 'Each support user request from subtenant user will prolong support user access by the given number of hours (default: 24 hours). Leaving it blank, will set the value to \"24\".'\n ),\n type: 'number',\n placeholder: `${gettext('e.g. {{ example }}')}`,\n placeholderParams: { example: '24' },\n control: new FormControl('', [Validators.min(0)])\n }\n };\n\n optionsGroups = [\n {\n title: gettext('Passwords'),\n id: 'passwordsOptions',\n items: [\n this.platformConfigurationFormDefinitions['system.password.enforce.strength'],\n this.platformConfigurationFormDefinitions['system.password.limit.validity'],\n this.platformConfigurationFormDefinitions['system.password.history.size'],\n this.platformConfigurationFormDefinitions['system.password.green.min-length']\n ]\n },\n {\n title: gettext('Two-factor authentication'),\n id: 'twoFactorAuthenticationOptions',\n items: [\n this.platformConfigurationFormDefinitions['two-factor-authentication.token.sms.template']\n ]\n },\n {\n title: gettext('Support link'),\n id: 'supportLinkOptions',\n items: [this.platformConfigurationFormDefinitions['system.support.url']]\n },\n {\n title: gettext('Password reset'),\n id: 'passwordResetOptions',\n items: [\n this.platformConfigurationFormDefinitions['passwordReset.sendNotificationToUnknownEmails'],\n this.platformConfigurationFormDefinitions['passwordReset.token.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.user.not.found.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.email.subject'],\n this.platformConfigurationFormDefinitions['passwordReset.success.email.template'],\n this.platformConfigurationFormDefinitions['passwordReset.invite.template']\n ]\n },\n {\n title: gettext('Support user'),\n id: 'supportUserOptions',\n items: [\n this.platformConfigurationFormDefinitions['system.support-user.enabled'],\n this.platformConfigurationFormDefinitions['system.support-user.validity-limit']\n ]\n },\n {\n title: gettext('Email server'),\n id: 'emailServerOptions',\n items: [\n this.platformConfigurationFormDefinitions['ui.email.protocolAndEncryption'],\n this.platformConfigurationFormDefinitions['email.host'],\n this.platformConfigurationFormDefinitions['email.port'],\n this.platformConfigurationFormDefinitions['email.username'],\n this.platformConfigurationFormDefinitions['credentials.email.password'],\n this.platformConfigurationFormDefinitions['email.from']\n ]\n },\n {\n title: gettext('Data export'),\n id: 'dataExportOptions',\n items: [\n this.platformConfigurationFormDefinitions['export.data.mail.subject'],\n this.platformConfigurationFormDefinitions['export.data.mail.text'],\n this.platformConfigurationFormDefinitions['export.data.mail.text.userunauthorized']\n ]\n },\n {\n title: gettext('Storage limit'),\n id: 'storageLimitOptions',\n items: [\n this.platformConfigurationFormDefinitions['storageLimit.warning.email.subject'],\n this.platformConfigurationFormDefinitions['storageLimit.warning.email.template'],\n this.platformConfigurationFormDefinitions['storageLimit.process.email.subject'],\n this.platformConfigurationFormDefinitions['storageLimit.process.email.template']\n ]\n },\n {\n title: gettext('Suspending tenants'),\n id: 'suspendingTenantsOptions',\n items: [\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.sendtosuspended'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.additional.address'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.subject'],\n this.platformConfigurationFormDefinitions['tenantSuspend.mail.text']\n ]\n }\n ];\n\n constructor(private c8yDatePipe: DatePipe) {}\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PlatformConfigurationFormProviderService } from './platform-configuration-form-provider.service';\nimport { NgFor, NgSwitch, NgSwitchCase, NgTemplateOutlet, NgIf } from '@angular/common';\nimport {\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-platform-configuration-form',\n templateUrl: './platform-configuration-form.component.html',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n NgFor,\n NgSwitch,\n NgSwitchCase,\n NgTemplateOutlet,\n C8yTranslateDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n NgIf,\n C8yTranslatePipe\n ]\n})\nexport class PlatformConfigurationFormComponent {\n @Input('optionsGroups')\n set _optionsGroups(groupIds: string[]) {\n if (groupIds === undefined) {\n return;\n }\n this.optionsGroups = groupIds.map(groupId =>\n this.formProviderService.optionsGroups.find(option => option.id === groupId)\n );\n }\n\n @Input()\n set readOnly(disabled: boolean) {\n disabled ? this.form.disable() : this.form.enable();\n }\n\n @Input()\n set formValue(value) {\n if (value) {\n const convertedValue = this.afterLoad(value);\n this.form.patchValue(convertedValue, { emitEvent: false });\n this.form.markAsUntouched();\n this.form.markAsPristine();\n }\n }\n optionsGroups = [];\n\n @Output()\n onSave = new EventEmitter();\n\n form = new FormGroup({});\n\n lineBreakHint = this.formProviderService.lineBreakHint;\n\n constructor(private formProviderService: PlatformConfigurationFormProviderService) {\n Object.keys(formProviderService.platformConfigurationFormDefinitions).forEach(fieldId => {\n this.form.addControl(\n fieldId,\n formProviderService.platformConfigurationFormDefinitions[fieldId].control\n );\n });\n }\n\n /**\n * Parses provided object's property values\n * @param options\n */\n parseConfiguration(options: object): void {\n const definitions: object = this.formProviderService.platformConfigurationFormDefinitions;\n Object.entries(options).forEach(([key, rawValue]) => {\n if (\n definitions[key] &&\n (definitions[key].type === 'number' || definitions[key].type === 'boolean')\n ) {\n try {\n options[key] = JSON.parse(rawValue);\n } catch {\n options[key] = rawValue;\n }\n }\n });\n }\n\n /**\n * Parses incoming raw object before it is applied to FormGroup.\n */\n afterLoad(options: object): object {\n this.parseConfiguration(options);\n\n delete options['ui.email.protocolAndEncryption'];\n const emailProtocol = options['email.protocol'];\n const connectionEncrypted = options['email.connection.encrypted'] || false;\n if (emailProtocol === 'smtp') {\n if (connectionEncrypted) {\n options['ui.email.protocolAndEncryption'] = 'SMTP_ENCRYPTED';\n } else {\n options['ui.email.protocolAndEncryption'] = 'SMTP_PLAIN';\n }\n } else if (emailProtocol === 'smtps') {\n options['ui.email.protocolAndEncryption'] = 'SMTPS_ENCRYPTED';\n } else {\n options['ui.email.protocolAndEncryption'] = undefined;\n }\n return options;\n }\n\n /**\n * Translates ui.email.protocolAndEncryption field into\n * separate email.protocol and email.connection.encrypted\n */\n beforeSave(value): object {\n const protocolAndEncryption = value['ui.email.protocolAndEncryption'];\n if (protocolAndEncryption) {\n //email.protocol\n const protocol = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[1];\n value['email.protocol'] = protocol ? protocol.toLowerCase() : protocol;\n\n // email.connection.encrypted\n const encryption = protocolAndEncryption.match(/^(.+?)_(.+?)$/)[2];\n value['email.connection.encrypted'] = encryption === 'ENCRYPTED';\n delete value['ui.email.protocolAndEncryption'];\n }\n\n return value;\n }\n\n getDirtyValues() {\n const dirtyValues = {};\n\n Object.keys(this.form.controls).forEach(key => {\n const currentControl = this.form.controls[key];\n\n if (currentControl.dirty) {\n dirtyValues[key] = currentControl.value;\n }\n });\n\n return dirtyValues;\n }\n\n emitForm() {\n if (this.form.valid) {\n const changedValues = this.getDirtyValues();\n const convertedValue = this.beforeSave(changedValues);\n this.onSave.emit(convertedValue);\n }\n }\n}\n","<form [formGroup]=\"form\">\n <div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'Configuration' | translate }}\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-block\">\n <div>\n <fieldset\n class=\"row schema-form-fieldset separator-bottom p-t-24\"\n *ngFor=\"let category of optionsGroups\"\n >\n <div class=\"col-sm-3 col-md-2 p-l-24 p-l-xs-8 p-b-8\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n data-cy=\"fieldset--section-title\"\n >\n {{ category.title | translate }}\n </div>\n </div>\n <div class=\"col-sm-9 col-md-8\">\n <div\n class=\"form-group\"\n *ngFor=\"let field of category.items\"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container\n *ngTemplateOutlet=\"stringTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container\n *ngTemplateOutlet=\"numberTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'password'\">\n <ng-container\n *ngTemplateOutlet=\"passwordTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container\n *ngTemplateOutlet=\"textareaTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container\n *ngTemplateOutlet=\"booleanTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <ng-container\n *ngTemplateOutlet=\"selectTemplate; context: { $implicit: field }\"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n [title]=\"'Save configuration' | translate\"\n type=\"submit\"\n (click)=\"emitForm()\"\n [disabled]=\"!form.dirty || form.invalid || form.disabled\"\n >\n <span translate>Save</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template\n #stringTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"text\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #passwordTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"password\"\n autocomplete=\"new-password\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #numberTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <input\n class=\"text-truncate form-control\"\n [title]=\"field.title | translate\"\n type=\"number\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n />\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #textareaTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n {{ field.title | translate }}\n </label>\n <textarea\n class=\"form-control\"\n [title]=\"field.title | translate\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n [placeholder]=\"field.placeholder || '' | translate : field.placeholderParams\"\n [rows]=\"10\"\n ></textarea>\n <div\n class=\"help-block\"\n *ngIf=\"field.description || field.lineBreakHint\"\n >\n <span *ngIf=\"field.description\">\n {{ field.description | translate : field.descriptionTranslateParams }}\n </span>\n <span *ngIf=\"field.description && field.lineBreakHint\"><br /></span>\n <span *ngIf=\"field.lineBreakHint\">{{ lineBreakHint | translate }}</span>\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #booleanTemplate\n let-field\n >\n <c8y-form-group>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ field.title | translate }}\"\n >\n <input\n [title]=\"field.title | translate\"\n type=\"checkbox\"\n [formControlName]=\"field.formId\"\n />\n <span></span>\n <span>{{ field.title | translate }}</span>\n </label>\n\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n\n <ng-template\n #selectTemplate\n let-field\n >\n <c8y-form-group>\n <label\n title=\"{{ field.title | translate }}\"\n [for]=\"field.formId\"\n >\n <span>{{ field.title | translate }}</span>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [id]=\"field.formId\"\n [formControlName]=\"field.formId\"\n >\n <option></option>\n <option\n *ngFor=\"let option of field.options\"\n [value]=\"option.value\"\n >\n {{ option.name | translate }}\n </option>\n </select>\n <span></span>\n </div>\n\n <div\n class=\"help-block\"\n *ngIf=\"field.description\"\n >\n {{ field.description | translate : field.descriptionTranslateParams }}\n </div>\n </c8y-form-group>\n </ng-template>\n</form>\n","import { CommonModule, FormsModule } from '@c8y/ngx-components';\nimport { NgModule } from '@angular/core';\nimport { PlatformConfigurationFormComponent } from './platform-configuration-form.component';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ReactiveFormsModule, PlatformConfigurationFormComponent],\n exports: [PlatformConfigurationFormComponent]\n})\nexport class PlatformConfigurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PlatformConfigurationFormProviderService","FormsModule"],"mappings":"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"}
@@ -615,7 +615,7 @@ class ExportSchedulesComponent {
615
615
  this.isEditMenuOpen = false;
616
616
  this.currentUserEmail = '';
617
617
  this.hasRequiredRole = false;
618
- this.defaultExportEmailTemplate = this.translateService.instant(gettext('File with exported data can be downloaded from {tenant-domain}/apps/cockpit/index.html#?download={binaryId}.'));
618
+ this.defaultExportEmailTemplate = this.translateService.instant(gettext('File with exported data can be downloaded from {tenant-domain}/apps/public/login/index.html#/?download={binaryId}.'));
619
619
  this.loadingStatus = {
620
620
  inProgress: false,
621
621
  done: false,
@@ -707,23 +707,21 @@ class ExportSchedulesComponent {
707
707
  this.onSchedulesUpdate.emit(this.scheduleList);
708
708
  }
709
709
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExportSchedulesComponent, deps: [{ token: ReportsService }, { token: i2$1.BsModalService }, { token: CronService }, { token: i3.TranslateService }, { token: i2.UserService }, { token: i1.OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
710
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: ExportSchedulesComponent, isStandalone: true, selector: "export-schedules", inputs: { exportId: "exportId" }, outputs: { onSchedulesUpdate: "onSchedulesUpdate" }, usesOnChanges: true, ngImport: i0, template: "<div>\n <div *ngIf=\"loadingStatus.inProgress\" class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error\">\n <div class=\"alert alert-warning max-width-100\" translate>Could not load schedules list.</div>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error\">\n <c8y-ui-empty-state\n *ngIf=\"!scheduleList.length\"\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div class=\"c8y-list__group\" *ngIf=\"scheduleList.length\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class=\"c8y-list__item pointer\"\n *ngFor=\"let schedule of scheduleList; index as i\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"c8y-report\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"text-truncate\" title=\"{{ schedule.emailConfig.subject }}\">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i c8yIcon=\"calendar\" class=\"text-muted m-r-4\"></i>\n <span class=\"smart-rule-information\">\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 2\"\n ngNonBindable\n translate\n [translateParams]=\"{ minutes: schedule.cronConfig.minute | number: '2.0-0' }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 3\"\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 4\"\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 5\"\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 6\"\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n type=\"button\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul role=\"list\" class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n \"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"alert alert-warning max-width-100\" *ngIf=\"!hasRequiredRole\" role=\"alert\" translate>\n You don't have the permission required to schedule exports.\n </div>\n <button\n class=\"btn btn-default m-t-16\"\n type=\"button\"\n title=\"{{ 'Add schedule' | translate }}\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DecimalPipe, name: "number" }] }); }
710
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ExportSchedulesComponent, isStandalone: true, selector: "export-schedules", inputs: { exportId: "exportId" }, outputs: { onSchedulesUpdate: "onSchedulesUpdate" }, usesOnChanges: true, ngImport: i0, template: "<div>\n @if (loadingStatus.inProgress) {\n <div class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n\n @if (!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error) {\n <div>\n <div\n class=\"alert alert-warning max-width-100\"\n translate\n >\n Could not load schedules list.\n </div>\n </div>\n }\n\n @if (!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error) {\n <div>\n @if (!scheduleList.length) {\n <c8y-ui-empty-state\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n @if (scheduleList.length) {\n <div class=\"c8y-list__group\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n @for (schedule of scheduleList; track schedule; let i = $index) {\n <div\n class=\"c8y-list__item pointer\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-report\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div\n class=\"text-truncate\"\n title=\"{{ schedule.emailConfig.subject }}\"\n >\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i\n class=\"text-muted m-r-4\"\n c8yIcon=\"calendar\"\n ></i>\n <span class=\"smart-rule-information\">\n @if (cronService.getBase(schedule.cronConfig) === 2) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 3) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 4) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 5) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 6) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-list__item__actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"settings dropdown\"\n dropdown\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n title=\"{{ 'Actions' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n role=\"list\"\n *dropdownMenu\n >\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\n \"\n type=\"button\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole\n ? buttonLabels.duplicate\n : buttonLabels.duplicateNoPermission\n \"\n type=\"button\"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n type=\"button\"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n @if (!hasRequiredRole) {\n <div\n class=\"alert alert-warning max-width-100\"\n role=\"alert\"\n translate\n >\n You don't have the permission required to schedule exports.\n </div>\n }\n <button\n class=\"btn btn-default m-t-16\"\n title=\"{{ 'Add schedule' | translate }}\"\n type=\"button\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "progressLabel", "message"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DecimalPipe, name: "number" }] }); }
711
711
  }
712
712
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ExportSchedulesComponent, decorators: [{
713
713
  type: Component,
714
714
  args: [{ selector: 'export-schedules', imports: [
715
- NgIf,
716
715
  LoadingComponent,
717
716
  C8yTranslateDirective,
718
717
  EmptyStateComponent,
719
- NgFor,
720
718
  IconDirective,
721
719
  BsDropdownDirective,
722
720
  BsDropdownToggleDirective,
723
721
  BsDropdownMenuDirective,
724
722
  C8yTranslatePipe,
725
723
  DecimalPipe
726
- ], template: "<div>\n <div *ngIf=\"loadingStatus.inProgress\" class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error\">\n <div class=\"alert alert-warning max-width-100\" translate>Could not load schedules list.</div>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error\">\n <c8y-ui-empty-state\n *ngIf=\"!scheduleList.length\"\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div class=\"c8y-list__group\" *ngIf=\"scheduleList.length\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class=\"c8y-list__item pointer\"\n *ngFor=\"let schedule of scheduleList; index as i\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"c8y-report\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"text-truncate\" title=\"{{ schedule.emailConfig.subject }}\">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i c8yIcon=\"calendar\" class=\"text-muted m-r-4\"></i>\n <span class=\"smart-rule-information\">\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 2\"\n ngNonBindable\n translate\n [translateParams]=\"{ minutes: schedule.cronConfig.minute | number: '2.0-0' }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 3\"\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 4\"\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 5\"\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 6\"\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n type=\"button\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul role=\"list\" class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n \"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"alert alert-warning max-width-100\" *ngIf=\"!hasRequiredRole\" role=\"alert\" translate>\n You don't have the permission required to schedule exports.\n </div>\n <button\n class=\"btn btn-default m-t-16\"\n type=\"button\"\n title=\"{{ 'Add schedule' | translate }}\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n" }]
724
+ ], template: "<div>\n @if (loadingStatus.inProgress) {\n <div class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n\n @if (!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error) {\n <div>\n <div\n class=\"alert alert-warning max-width-100\"\n translate\n >\n Could not load schedules list.\n </div>\n </div>\n }\n\n @if (!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error) {\n <div>\n @if (!scheduleList.length) {\n <c8y-ui-empty-state\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n @if (scheduleList.length) {\n <div class=\"c8y-list__group\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n @for (schedule of scheduleList; track schedule; let i = $index) {\n <div\n class=\"c8y-list__item pointer\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-report\"\n ></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div\n class=\"text-truncate\"\n title=\"{{ schedule.emailConfig.subject }}\"\n >\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i\n class=\"text-muted m-r-4\"\n c8yIcon=\"calendar\"\n ></i>\n <span class=\"smart-rule-information\">\n @if (cronService.getBase(schedule.cronConfig) === 2) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 3) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 4) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 5) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n }\n @if (cronService.getBase(schedule.cronConfig) === 6) {\n <span\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-list__item__actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"settings dropdown\"\n dropdown\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n title=\"{{ 'Actions' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n role=\"list\"\n *dropdownMenu\n >\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\n \"\n type=\"button\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole\n ? buttonLabels.duplicate\n : buttonLabels.duplicateNoPermission\n \"\n type=\"button\"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n type=\"button\"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n @if (!hasRequiredRole) {\n <div\n class=\"alert alert-warning max-width-100\"\n role=\"alert\"\n translate\n >\n You don't have the permission required to schedule exports.\n </div>\n }\n <button\n class=\"btn btn-default m-t-16\"\n title=\"{{ 'Add schedule' | translate }}\"\n type=\"button\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n" }]
727
725
  }], ctorParameters: () => [{ type: ReportsService }, { type: i2$1.BsModalService }, { type: CronService }, { type: i3.TranslateService }, { type: i2.UserService }, { type: i1.OptionsService }], propDecorators: { exportId: [{
728
726
  type: Input
729
727
  }], onSchedulesUpdate: [{