@flusys/ng-storage 5.4.0 → 5.5.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.
Files changed (20) hide show
  1. package/fesm2022/{flusys-ng-storage-file-manager-form.component-DnE4Whts.mjs → flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs} +67 -42
  2. package/fesm2022/flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-storage-file-manager-list.component-Go5Gqptd.mjs → flusys-ng-storage-file-manager-list.component-D_shqU2a.mjs} +77 -50
  4. package/fesm2022/flusys-ng-storage-file-manager-list.component-D_shqU2a.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-storage-folder-form.component-BYOD0A_5.mjs → flusys-ng-storage-folder-form.component-BK2EWeV4.mjs} +45 -29
  6. package/fesm2022/flusys-ng-storage-folder-form.component-BK2EWeV4.mjs.map +1 -0
  7. package/fesm2022/{flusys-ng-storage-folder-list.component-N6RjQQwv.mjs → flusys-ng-storage-folder-list.component-aQXBRZiN.mjs} +45 -33
  8. package/fesm2022/flusys-ng-storage-folder-list.component-aQXBRZiN.mjs.map +1 -0
  9. package/fesm2022/{flusys-ng-storage-storage-config-form.component-BdpCYR3c.mjs → flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs} +47 -30
  10. package/fesm2022/{flusys-ng-storage-storage-config-form.component-BdpCYR3c.mjs.map → flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs.map} +1 -1
  11. package/fesm2022/{flusys-ng-storage-storage-config-list.component-CtsIrKSq.mjs → flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs} +45 -33
  12. package/fesm2022/flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs.map +1 -0
  13. package/fesm2022/flusys-ng-storage.mjs +58 -46
  14. package/fesm2022/flusys-ng-storage.mjs.map +1 -1
  15. package/package.json +11 -10
  16. package/fesm2022/flusys-ng-storage-file-manager-form.component-DnE4Whts.mjs.map +0 -1
  17. package/fesm2022/flusys-ng-storage-file-manager-list.component-Go5Gqptd.mjs.map +0 -1
  18. package/fesm2022/flusys-ng-storage-folder-form.component-BYOD0A_5.mjs.map +0 -1
  19. package/fesm2022/flusys-ng-storage-folder-list.component-N6RjQQwv.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-storage-storage-config-list.component-CtsIrKSq.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"flusys-ng-storage-storage-config-form.component-BdpCYR3c.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-form.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n AngularModule,\n PrimeModule,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { FileLocationEnum } from '../../enums/file-location.enum';\nimport { IStorageConfig } from '../../interfaces/storage-config.interface';\nimport { StorageConfigApiService } from '../../services/storage-config-api.service';\nimport { BaseStoragePage } from '../../utils/base-storage-page';\nimport { STORAGE_PROVIDER_OPTIONS } from '../../utils/storage-utils';\n\ninterface IStorageConfigFormModel {\n id: string;\n name: string;\n storage: FileLocationEnum;\n isActive: boolean;\n isDefault: boolean;\n awsRegion: string;\n awsBucket: string;\n awsAccessKeyId: string;\n awsSecretAccessKey: string;\n awsEndpoint: string;\n azureAccountName: string;\n azureAccountKey: string;\n azureContainerName: string;\n sftpHost: string;\n sftpPort: string;\n sftpUsername: string;\n sftpPassword: string;\n sftpBasePath: string;\n localBasePath: string;\n}\n\nconst DEFAULT_FORM_MODEL: IStorageConfigFormModel = {\n id: '',\n name: '',\n storage: FileLocationEnum.AWS,\n isActive: true,\n isDefault: false,\n awsRegion: '',\n awsBucket: '',\n awsAccessKeyId: '',\n awsSecretAccessKey: '',\n awsEndpoint: '',\n azureAccountName: '',\n azureAccountKey: '',\n azureContainerName: '',\n sftpHost: '',\n sftpPort: '22',\n sftpUsername: '',\n sftpPassword: '',\n sftpBasePath: '',\n localBasePath: '',\n};\n\n@Component({\n selector: 'lib-storage-config-form',\n imports: [AngularModule, PrimeModule, FormField, TranslatePipe],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{\n (isEditMode()\n ? 'storage.config.edit.config'\n : 'storage.config.new.config'\n ) | translate\n }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mb-4\">\n {{ 'shared.company' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n\n <form (ngSubmit)=\"onSubmit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"field\">\n <label\n for=\"name\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.config.name.required' | translate }}</label\n >\n <input\n pInputText\n id=\"name\"\n [formField]=\"configForm.name\"\n [placeholder]=\"\n 'storage.config.config.name.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"field\">\n <label\n for=\"storage\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.provider.required' | translate }}</label\n >\n <select\n id=\"storage\"\n class=\"p-select-native w-full\"\n [formField]=\"configForm.storage\"\n >\n @for (provider of storageProviderOptions; track provider.value) {\n <option [value]=\"provider.value\">\n {{ provider.labelKey | translate }}\n </option>\n }\n </select>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <p-toggleswitch [formField]=\"configForm.isActive\" />\n <label class=\"text-sm sm:text-base\">{{\n 'shared.active' | translate\n }}</label>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <p-toggleswitch [formField]=\"configForm.isDefault\" />\n <label class=\"text-sm sm:text-base\">{{\n 'storage.set.as.default' | translate\n }}</label>\n </div>\n </div>\n\n @if (selectedProvider() === fileLocationEnum.AWS) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.aws.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"awsRegion\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.region.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsRegion\"\n [formField]=\"configForm.awsRegion\"\n [placeholder]=\"'storage.aws.region.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsBucket\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.bucket.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsBucket\"\n [formField]=\"configForm.awsBucket\"\n [placeholder]=\"'storage.aws.bucket.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsAccessKeyId\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.access.key.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsAccessKeyId\"\n [formField]=\"configForm.awsAccessKeyId\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsSecretAccessKey\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.secret.key.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"awsSecretAccessKey\"\n [formField]=\"configForm.awsSecretAccessKey\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"awsEndpoint\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.endpoint.optional' | translate }}</label\n >\n <input\n pInputText\n id=\"awsEndpoint\"\n [formField]=\"configForm.awsEndpoint\"\n [placeholder]=\"\n 'storage.config.endpoint.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.AZURE) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.azure.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"azureAccountName\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.azure.account.name.required' | translate }}</label\n >\n <input\n pInputText\n id=\"azureAccountName\"\n [formField]=\"configForm.azureAccountName\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"azureContainerName\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{\n 'storage.azure.container.name.required' | translate\n }}</label\n >\n <input\n pInputText\n id=\"azureContainerName\"\n [formField]=\"configForm.azureContainerName\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"azureAccountKey\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.azure.account.key.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"azureAccountKey\"\n [formField]=\"configForm.azureAccountKey\"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.SFTP) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.sftp.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"sftpHost\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.host.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpHost\"\n [formField]=\"configForm.sftpHost\"\n [placeholder]=\"'storage.sftp.host.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpPort\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.port.required' | translate }}</label\n >\n <input\n type=\"number\"\n pInputText\n id=\"sftpPort\"\n [formField]=\"configForm.sftpPort\"\n [placeholder]=\"'storage.sftp.port.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpUsername\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.username.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpUsername\"\n [formField]=\"configForm.sftpUsername\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpPassword\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.password.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"sftpPassword\"\n [formField]=\"configForm.sftpPassword\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"sftpBasePath\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.base.path.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpBasePath\"\n [formField]=\"configForm.sftpBasePath\"\n [placeholder]=\"'storage.sftp.base.path.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.LOCAL) {\n <div\n class=\"grid grid-cols-1 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.local.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"localBasePath\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.local.base.path.required' | translate }}</label\n >\n <input\n pInputText\n id=\"localBasePath\"\n [formField]=\"configForm.localBasePath\"\n [placeholder]=\"\n 'storage.local.base.path.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n <div class=\"flex justify-end gap-2 mt-4\">\n <p-button\n [label]=\"'shared.cancel' | translate\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n />\n <p-button\n type=\"submit\"\n [label]=\"\n (isEditMode() ? 'shared.update' : 'shared.create') | translate\n \"\n [loading]=\"isLoading()\"\n [disabled]=\"!isFormValid() || isLoading()\"\n />\n </div>\n </form>\n </div>\n `,\n})\nexport class StorageConfigFormComponent extends BaseStoragePage {\n private readonly route = inject(ActivatedRoute);\n private readonly configService = inject(StorageConfigApiService);\n private readonly translateService = inject(TranslateService);\n private readonly routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n readonly fileLocationEnum = FileLocationEnum;\n readonly storageProviderOptions = STORAGE_PROVIDER_OPTIONS;\n\n readonly existingConfig = signal<IStorageConfig | null>(null);\n readonly isEditMode = computed(() => !!this.existingConfig());\n readonly formModel = signal<IStorageConfigFormModel>({\n ...DEFAULT_FORM_MODEL,\n });\n\n readonly configForm = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translateService.translate(\n 'storage.validation.config.name.required',\n ),\n });\n });\n\n readonly selectedProvider = computed(() => this.formModel().storage);\n readonly isFormValid = computed(\n () => this.formModel().name.trim().length > 0,\n );\n\n constructor() {\n super();\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const configId = params.get('id');\n if (configId && configId !== 'new') {\n this.loadConfig(configId);\n }\n });\n }\n\n async loadConfig(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.configService.findById(id);\n if (response.success && response.data) {\n const config = response.data;\n this.existingConfig.set(config);\n this.formModel.update((m) => ({\n ...m,\n id: config.id,\n name: config.name,\n storage: config.storage,\n isActive: config.isActive ?? true,\n isDefault: config.isDefault ?? false,\n ...this.extractProviderConfig(config),\n }));\n }\n } catch {\n this.navigateTo(['/storage/configs']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n async onSubmit(): Promise<void> {\n if (!this.isFormValid()) return;\n\n this.isLoading.set(true);\n try {\n const formValue = this.formModel();\n const config = this.buildProviderConfig(formValue);\n\n const response = this.isEditMode()\n ? await this.configService.update({\n id: formValue.id,\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n })\n : await this.configService.insert({\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n\n this.showSuccess(\n response.messageKey\n ? this.translateService.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n );\n this.navigateTo(['/storage/configs']);\n } catch {\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onCancel(): void {\n this.navigateTo(['/storage/configs']);\n }\n\n private extractProviderConfig(\n config: IStorageConfig,\n ): Partial<IStorageConfigFormModel> {\n const c = config.config ?? {};\n switch (config.storage) {\n case FileLocationEnum.AWS:\n return {\n awsRegion: (c['region'] as string) || '',\n awsBucket: (c['bucket'] as string) || '',\n awsAccessKeyId: (c['accessKeyId'] as string) || '',\n awsSecretAccessKey: (c['secretAccessKey'] as string) || '',\n awsEndpoint: (c['endpoint'] as string) || '',\n };\n case FileLocationEnum.AZURE:\n return {\n azureAccountName: (c['accountName'] as string) || '',\n azureAccountKey: (c['accountKey'] as string) || '',\n azureContainerName: (c['containerName'] as string) || '',\n };\n case FileLocationEnum.SFTP:\n return {\n sftpHost: (c['host'] as string) || '',\n sftpPort: ((c['port'] as number) || 22).toString(),\n sftpUsername: (c['username'] as string) || '',\n sftpPassword: (c['password'] as string) || '',\n sftpBasePath: (c['basePath'] as string) || '',\n };\n case FileLocationEnum.LOCAL:\n return { localBasePath: (c['basePath'] as string) || '' };\n default:\n return {};\n }\n }\n\n private buildProviderConfig(\n formValue: IStorageConfigFormModel,\n ): Record<string, unknown> {\n switch (formValue.storage) {\n case FileLocationEnum.AWS:\n return {\n region: formValue.awsRegion,\n bucket: formValue.awsBucket,\n accessKeyId: formValue.awsAccessKeyId,\n secretAccessKey: formValue.awsSecretAccessKey,\n ...(formValue.awsEndpoint && { endpoint: formValue.awsEndpoint }),\n };\n case FileLocationEnum.AZURE:\n return {\n accountName: formValue.azureAccountName,\n accountKey: formValue.azureAccountKey,\n containerName: formValue.azureContainerName,\n };\n case FileLocationEnum.SFTP:\n return {\n host: formValue.sftpHost,\n port: formValue.sftpPort ? parseInt(formValue.sftpPort, 10) : 22,\n username: formValue.sftpUsername,\n password: formValue.sftpPassword,\n basePath: formValue.sftpBasePath,\n };\n case FileLocationEnum.LOCAL:\n return { basePath: formValue.localBasePath };\n default:\n return {};\n }\n }\n}\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-form.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n AngularModule,\n PrimeModule,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { FileLocationEnum } from '../../enums/file-location.enum';\nimport { IStorageConfig } from '../../interfaces/storage-config.interface';\nimport { StorageConfigApiService } from '../../services/storage-config-api.service';\nimport { BaseStoragePage } from '../../utils/base-storage-page';\nimport { STORAGE_PROVIDER_OPTIONS } from '../../utils/storage-utils';\n\ninterface IStorageConfigFormModel {\n id: string;\n name: string;\n storage: FileLocationEnum;\n isActive: boolean;\n isDefault: boolean;\n awsRegion: string;\n awsBucket: string;\n awsAccessKeyId: string;\n awsSecretAccessKey: string;\n awsEndpoint: string;\n azureAccountName: string;\n azureAccountKey: string;\n azureContainerName: string;\n sftpHost: string;\n sftpPort: string;\n sftpUsername: string;\n sftpPassword: string;\n sftpBasePath: string;\n localBasePath: string;\n}\n\nconst DEFAULT_FORM_MODEL: IStorageConfigFormModel = {\n id: '',\n name: '',\n storage: FileLocationEnum.AWS,\n isActive: true,\n isDefault: false,\n awsRegion: '',\n awsBucket: '',\n awsAccessKeyId: '',\n awsSecretAccessKey: '',\n awsEndpoint: '',\n azureAccountName: '',\n azureAccountKey: '',\n azureContainerName: '',\n sftpHost: '',\n sftpPort: '22',\n sftpUsername: '',\n sftpPassword: '',\n sftpBasePath: '',\n localBasePath: '',\n};\n\n@Component({\n selector: 'lib-storage-config-form',\n imports: [AngularModule, PrimeModule, FormField, TranslatePipe],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{\n (isEditMode()\n ? 'storage.config.edit.config'\n : 'storage.config.new.config'\n ) | translate\n }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mb-4\">\n {{ 'shared.company' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n\n <form (ngSubmit)=\"onSubmit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"field\">\n <label\n for=\"name\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.config.name.required' | translate }}</label\n >\n <input\n pInputText\n id=\"name\"\n [formField]=\"configForm.name\"\n [placeholder]=\"\n 'storage.config.config.name.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n\n <div class=\"field\">\n <label\n for=\"storage\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.provider.required' | translate }}</label\n >\n <select\n id=\"storage\"\n class=\"p-select-native w-full\"\n [formField]=\"configForm.storage\"\n >\n @for (provider of storageProviderOptions; track provider.value) {\n <option [value]=\"provider.value\">\n {{ provider.labelKey | translate }}\n </option>\n }\n </select>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <p-toggleswitch [formField]=\"configForm.isActive\" />\n <label class=\"text-sm sm:text-base\">{{\n 'shared.active' | translate\n }}</label>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <p-toggleswitch [formField]=\"configForm.isDefault\" />\n <label class=\"text-sm sm:text-base\">{{\n 'storage.set.as.default' | translate\n }}</label>\n </div>\n </div>\n\n @if (selectedProvider() === fileLocationEnum.AWS) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.aws.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"awsRegion\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.region.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsRegion\"\n [formField]=\"configForm.awsRegion\"\n [placeholder]=\"'storage.aws.region.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsBucket\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.bucket.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsBucket\"\n [formField]=\"configForm.awsBucket\"\n [placeholder]=\"'storage.aws.bucket.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsAccessKeyId\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.access.key.required' | translate }}</label\n >\n <input\n pInputText\n id=\"awsAccessKeyId\"\n [formField]=\"configForm.awsAccessKeyId\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"awsSecretAccessKey\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.secret.key.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"awsSecretAccessKey\"\n [formField]=\"configForm.awsSecretAccessKey\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"awsEndpoint\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.config.endpoint.optional' | translate }}</label\n >\n <input\n pInputText\n id=\"awsEndpoint\"\n [formField]=\"configForm.awsEndpoint\"\n [placeholder]=\"\n 'storage.config.endpoint.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.AZURE) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.azure.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"azureAccountName\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.azure.account.name.required' | translate }}</label\n >\n <input\n pInputText\n id=\"azureAccountName\"\n [formField]=\"configForm.azureAccountName\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"azureContainerName\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{\n 'storage.azure.container.name.required' | translate\n }}</label\n >\n <input\n pInputText\n id=\"azureContainerName\"\n [formField]=\"configForm.azureContainerName\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"azureAccountKey\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.azure.account.key.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"azureAccountKey\"\n [formField]=\"configForm.azureAccountKey\"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.SFTP) {\n <div\n class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"md:col-span-2 mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.sftp.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"sftpHost\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.host.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpHost\"\n [formField]=\"configForm.sftpHost\"\n [placeholder]=\"'storage.sftp.host.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpPort\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.port.required' | translate }}</label\n >\n <input\n type=\"number\"\n pInputText\n id=\"sftpPort\"\n [formField]=\"configForm.sftpPort\"\n [placeholder]=\"'storage.sftp.port.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpUsername\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.username.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpUsername\"\n [formField]=\"configForm.sftpUsername\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field\">\n <label\n for=\"sftpPassword\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.password.required' | translate }}</label\n >\n <input\n type=\"password\"\n pInputText\n id=\"sftpPassword\"\n [formField]=\"configForm.sftpPassword\"\n class=\"w-full\"\n />\n </div>\n <div class=\"field md:col-span-2\">\n <label\n for=\"sftpBasePath\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.sftp.base.path.required' | translate }}</label\n >\n <input\n pInputText\n id=\"sftpBasePath\"\n [formField]=\"configForm.sftpBasePath\"\n [placeholder]=\"'storage.sftp.base.path.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.LOCAL) {\n <div\n class=\"grid grid-cols-1 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\"\n >\n <div class=\"mb-2\">\n <span\n class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\"\n >{{ 'storage.local.title' | translate }}</span\n >\n </div>\n <div class=\"field\">\n <label\n for=\"localBasePath\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.local.base.path.required' | translate }}</label\n >\n <input\n pInputText\n id=\"localBasePath\"\n [formField]=\"configForm.localBasePath\"\n [placeholder]=\"\n 'storage.local.base.path.placeholder' | translate\n \"\n class=\"w-full\"\n />\n </div>\n </div>\n }\n\n <div class=\"flex justify-end gap-2 mt-4\">\n <button\n pButton\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onCancel()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n pButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <span pButtonIcon class=\"pi pi-spinner pi-spin\"></span>\n }\n <span pButtonLabel>{{ \n (isEditMode() ? 'shared.update' : 'shared.create') | translate\n }}</span>\n </button>\n </div>\n </form>\n </div>\n `,\n})\nexport class StorageConfigFormComponent extends BaseStoragePage {\n private readonly route = inject(ActivatedRoute);\n private readonly configService = inject(StorageConfigApiService);\n private readonly translateService = inject(TranslateService);\n private readonly routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n readonly fileLocationEnum = FileLocationEnum;\n readonly storageProviderOptions = STORAGE_PROVIDER_OPTIONS;\n\n readonly existingConfig = signal<IStorageConfig | null>(null);\n readonly isEditMode = computed(() => !!this.existingConfig());\n readonly formModel = signal<IStorageConfigFormModel>({\n ...DEFAULT_FORM_MODEL,\n });\n\n readonly configForm = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translateService.translate(\n 'storage.validation.config.name.required',\n ),\n });\n });\n\n readonly selectedProvider = computed(() => this.formModel().storage);\n readonly isFormValid = computed(\n () => this.formModel().name.trim().length > 0,\n );\n\n constructor() {\n super();\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const configId = params.get('id');\n if (configId && configId !== 'new') {\n this.loadConfig(configId);\n }\n });\n }\n\n async loadConfig(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.configService.findById(id);\n if (response.success && response.data) {\n const config = response.data;\n this.existingConfig.set(config);\n this.formModel.update((m) => ({\n ...m,\n id: config.id,\n name: config.name,\n storage: config.storage,\n isActive: config.isActive ?? true,\n isDefault: config.isDefault ?? false,\n ...this.extractProviderConfig(config),\n }));\n }\n } catch {\n this.navigateTo(['/storage/configs']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n async onSubmit(): Promise<void> {\n if (!this.isFormValid()) return;\n\n this.isLoading.set(true);\n try {\n const formValue = this.formModel();\n const config = this.buildProviderConfig(formValue);\n\n const response = this.isEditMode()\n ? await this.configService.update({\n id: formValue.id,\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n })\n : await this.configService.insert({\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n\n this.showSuccess(\n response.messageKey\n ? this.translateService.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n );\n this.navigateTo(['/storage/configs']);\n } catch {\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onCancel(): void {\n this.navigateTo(['/storage/configs']);\n }\n\n private extractProviderConfig(\n config: IStorageConfig,\n ): Partial<IStorageConfigFormModel> {\n const c = config.config ?? {};\n switch (config.storage) {\n case FileLocationEnum.AWS:\n return {\n awsRegion: (c['region'] as string) || '',\n awsBucket: (c['bucket'] as string) || '',\n awsAccessKeyId: (c['accessKeyId'] as string) || '',\n awsSecretAccessKey: (c['secretAccessKey'] as string) || '',\n awsEndpoint: (c['endpoint'] as string) || '',\n };\n case FileLocationEnum.AZURE:\n return {\n azureAccountName: (c['accountName'] as string) || '',\n azureAccountKey: (c['accountKey'] as string) || '',\n azureContainerName: (c['containerName'] as string) || '',\n };\n case FileLocationEnum.SFTP:\n return {\n sftpHost: (c['host'] as string) || '',\n sftpPort: ((c['port'] as number) || 22).toString(),\n sftpUsername: (c['username'] as string) || '',\n sftpPassword: (c['password'] as string) || '',\n sftpBasePath: (c['basePath'] as string) || '',\n };\n case FileLocationEnum.LOCAL:\n return { localBasePath: (c['basePath'] as string) || '' };\n default:\n return {};\n }\n }\n\n private buildProviderConfig(\n formValue: IStorageConfigFormModel,\n ): Record<string, unknown> {\n switch (formValue.storage) {\n case FileLocationEnum.AWS:\n return {\n region: formValue.awsRegion,\n bucket: formValue.awsBucket,\n accessKeyId: formValue.awsAccessKeyId,\n secretAccessKey: formValue.awsSecretAccessKey,\n ...(formValue.awsEndpoint && { endpoint: formValue.awsEndpoint }),\n };\n case FileLocationEnum.AZURE:\n return {\n accountName: formValue.azureAccountName,\n accountKey: formValue.azureAccountKey,\n containerName: formValue.azureContainerName,\n };\n case FileLocationEnum.SFTP:\n return {\n host: formValue.sftpHost,\n port: formValue.sftpPort ? parseInt(formValue.sftpPort, 10) : 22,\n username: formValue.sftpUsername,\n password: formValue.sftpPassword,\n basePath: formValue.sftpBasePath,\n };\n case FileLocationEnum.LOCAL:\n return { basePath: formValue.localBasePath };\n default:\n return {};\n }\n }\n}\n"],"names":["i2"],"mappings":"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"}
@@ -46,8 +46,8 @@ class StorageConfigListComponent extends BaseStorageListPage {
46
46
  header: this.translateService.translate('storage.config.delete.title'),
47
47
  });
48
48
  }
49
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: StorageConfigListComponent, isStandalone: true, selector: "lib-storage-config-list", usesInheritance: true, ngImport: i0, template: `
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageConfigListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: StorageConfigListComponent, isStandalone: true, selector: "lib-storage-config-list", usesInheritance: true, ngImport: i0, template: `
51
51
  <div class="card">
52
52
  <div
53
53
  class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4"
@@ -62,13 +62,15 @@ class StorageConfigListComponent extends BaseStorageListPage {
62
62
  </p>
63
63
  }
64
64
  </div>
65
- <p-button
65
+ <button
66
+ pButton
66
67
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.CREATE"
67
- [label]="'storage.button.new.configuration' | translate"
68
- icon="pi pi-plus"
69
- (onClick)="onCreate()"
70
- styleClass="w-full sm:w-auto"
71
- />
68
+ (click)="onCreate()"
69
+ class="w-full sm:w-auto"
70
+ >
71
+ <span pButtonIcon class="pi pi-plus"></span>
72
+ <span pButtonLabel>{{ 'storage.button.new.configuration' | translate }}</span>
73
+ </button>
72
74
  </div>
73
75
 
74
76
  <div class="overflow-x-auto">
@@ -117,26 +119,30 @@ class StorageConfigListComponent extends BaseStorageListPage {
117
119
  </td>
118
120
  <td>
119
121
  <div class="flex gap-1">
120
- <p-button
122
+ <button
123
+ pButton
121
124
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.UPDATE"
122
- icon="pi pi-pencil"
123
125
  [text]="true"
124
126
  severity="secondary"
125
127
  size="small"
126
- (onClick)="onEdit(config.id)"
128
+ (click)="onEdit(config.id)"
127
129
  [pTooltip]="'shared.edit' | translate"
128
130
  tooltipPosition="top"
129
- />
130
- <p-button
131
+ >
132
+ <span pButtonIcon class="pi pi-pencil"></span>
133
+ </button>
134
+ <button
135
+ pButton
131
136
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.DELETE"
132
- icon="pi pi-trash"
133
137
  [text]="true"
134
138
  severity="danger"
135
139
  size="small"
136
- (onClick)="onDeleteConfig(config)"
140
+ (click)="onDeleteConfig(config)"
137
141
  [pTooltip]="'shared.delete' | translate"
138
142
  tooltipPosition="top"
139
- />
143
+ >
144
+ <span pButtonIcon class="pi pi-trash"></span>
145
+ </button>
140
146
  </div>
141
147
  </td>
142
148
  </tr>
@@ -156,9 +162,9 @@ class StorageConfigListComponent extends BaseStorageListPage {
156
162
  </p-table>
157
163
  </div>
158
164
  </div>
159
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i3.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
165
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["pButton", "pButtonPT", "pButtonUnstyled", "hostName", "text", "plain", "raised", "size", "outlined", "link", "rounded", "fluid", "variant", "iconOnly", "loading", "severity"] }, { kind: "directive", type: i1.ButtonLabel, selector: "[pButtonLabel]", inputs: ["pButtonLabelPT", "pButtonLabelUnstyled"] }, { kind: "directive", type: i1.ButtonIcon, selector: "[pButtonIcon]", inputs: ["pButtonIconPT", "pButtonUnstyled"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "firstChange", "rowsChange", "totalRecordsChange", "selectionChange", "selectAllChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "onStateSave", "onStateRestore"] }, { kind: "component", type: i3.Tag, selector: "p-tag", inputs: ["severity", "value", "icon", "rounded"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
160
166
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigListComponent, decorators: [{
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageConfigListComponent, decorators: [{
162
168
  type: Component,
163
169
  args: [{
164
170
  selector: 'lib-storage-config-list',
@@ -178,13 +184,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
178
184
  </p>
179
185
  }
180
186
  </div>
181
- <p-button
187
+ <button
188
+ pButton
182
189
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.CREATE"
183
- [label]="'storage.button.new.configuration' | translate"
184
- icon="pi pi-plus"
185
- (onClick)="onCreate()"
186
- styleClass="w-full sm:w-auto"
187
- />
190
+ (click)="onCreate()"
191
+ class="w-full sm:w-auto"
192
+ >
193
+ <span pButtonIcon class="pi pi-plus"></span>
194
+ <span pButtonLabel>{{ 'storage.button.new.configuration' | translate }}</span>
195
+ </button>
188
196
  </div>
189
197
 
190
198
  <div class="overflow-x-auto">
@@ -233,26 +241,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
233
241
  </td>
234
242
  <td>
235
243
  <div class="flex gap-1">
236
- <p-button
244
+ <button
245
+ pButton
237
246
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.UPDATE"
238
- icon="pi pi-pencil"
239
247
  [text]="true"
240
248
  severity="secondary"
241
249
  size="small"
242
- (onClick)="onEdit(config.id)"
250
+ (click)="onEdit(config.id)"
243
251
  [pTooltip]="'shared.edit' | translate"
244
252
  tooltipPosition="top"
245
- />
246
- <p-button
253
+ >
254
+ <span pButtonIcon class="pi pi-pencil"></span>
255
+ </button>
256
+ <button
257
+ pButton
247
258
  *hasPermission="STORAGE_CONFIG_PERMISSIONS.DELETE"
248
- icon="pi pi-trash"
249
259
  [text]="true"
250
260
  severity="danger"
251
261
  size="small"
252
- (onClick)="onDeleteConfig(config)"
262
+ (click)="onDeleteConfig(config)"
253
263
  [pTooltip]="'shared.delete' | translate"
254
264
  tooltipPosition="top"
255
- />
265
+ >
266
+ <span pButtonIcon class="pi pi-trash"></span>
267
+ </button>
256
268
  </div>
257
269
  </td>
258
270
  </tr>
@@ -277,4 +289,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
277
289
  }] });
278
290
 
279
291
  export { StorageConfigListComponent };
280
- //# sourceMappingURL=flusys-ng-storage-storage-config-list.component-CtsIrKSq.mjs.map
292
+ //# sourceMappingURL=flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-list.component.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport {\n AngularModule,\n HasPermissionDirective,\n PrimeModule,\n STORAGE_CONFIG_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { IStorageConfig } from '../../interfaces/storage-config.interface';\nimport { StorageConfigApiService } from '../../services/storage-config-api.service';\nimport { BaseStorageListPage } from '../../utils/base-storage-page';\nimport {\n getProviderIcon,\n getProviderLabelKey,\n getProviderSeverity,\n} from '../../utils/storage-utils';\n\n@Component({\n selector: 'lib-storage-config-list',\n imports: [AngularModule, PrimeModule, HasPermissionDirective, TranslatePipe],\n template: `\n <div class=\"card\">\n <div\n class=\"flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4\"\n >\n <div>\n <h3 class=\"text-lg sm:text-xl font-semibold\">\n {{ 'storage.config.title' | translate }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">\n {{ 'shared.company' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n </div>\n <button\n pButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.CREATE\"\n (click)=\"onCreate()\"\n class=\"w-full sm:w-auto\"\n >\n <span pButtonIcon class=\"pi pi-plus\"></span>\n <span pButtonLabel>{{ 'storage.button.new.configuration' | translate }}</span>\n </button>\n </div>\n\n <div class=\"overflow-x-auto\">\n <p-table\n [value]=\"items()\"\n [loading]=\"isLoading()\"\n [paginator]=\"totalRecords() > 0\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"totalRecords()\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n [rowsPerPageOptions]=\"[10, 25, 50]\"\n [scrollable]=\"true\"\n styleClass=\"p-datatable-sm\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'shared.name' | translate }}</th>\n <th>{{ 'storage.table.provider' | translate }}</th>\n <th class=\"hidden sm:table-cell\">\n {{ 'storage.table.created' | translate }}\n </th>\n <th class=\"w-[120px]\">\n {{ 'shared.actions' | translate }}\n </th>\n </tr>\n </ng-template>\n <ng-template #body let-config>\n <tr>\n <td>\n <div class=\"flex items-center gap-2\">\n <i [class]=\"getProviderIcon(config.storage)\"></i>\n <span class=\"truncate max-w-32 sm:max-w-none\">{{\n config.name\n }}</span>\n </div>\n </td>\n <td>\n <p-tag\n [value]=\"getProviderLabelKey(config.storage) | translate\"\n [severity]=\"getProviderSeverity(config.storage)\"\n />\n </td>\n <td class=\"hidden sm:table-cell\">\n {{ config.createdAt | date: 'short' }}\n </td>\n <td>\n <div class=\"flex gap-1\">\n <button\n pButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n (click)=\"onEdit(config.id)\"\n [pTooltip]=\"'shared.edit' | translate\"\n tooltipPosition=\"top\"\n >\n <span pButtonIcon class=\"pi pi-pencil\"></span>\n </button>\n <button\n pButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n (click)=\"onDeleteConfig(config)\"\n [pTooltip]=\"'shared.delete' | translate\"\n tooltipPosition=\"top\"\n >\n <span pButtonIcon class=\"pi pi-trash\"></span>\n </button>\n </div>\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"4\" class=\"text-center py-4 text-muted-color\">\n {{\n (showCompanyInfo()\n ? 'storage.empty.configs.in.company'\n : 'storage.empty.configs'\n ) | translate\n }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `,\n})\nexport class StorageConfigListComponent extends BaseStorageListPage<IStorageConfig> {\n readonly STORAGE_CONFIG_PERMISSIONS = STORAGE_CONFIG_PERMISSIONS;\n\n private readonly configService = inject(StorageConfigApiService);\n private readonly translateService = inject(TranslateService);\n\n readonly getProviderIcon = getProviderIcon;\n readonly getProviderLabelKey = getProviderLabelKey;\n readonly getProviderSeverity = getProviderSeverity;\n\n getResourceRoute(): string {\n return '/storage/configs';\n }\n\n override getDeleteConfirmMessage(config: IStorageConfig): string {\n return this.translateService.translate('shared.confirm.delete.item', {\n name: config.name,\n });\n }\n\n async loadData(): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.configService.getAll({\n pagination: this.getPaginationParams(),\n });\n if (response.success) {\n this.items.set(response.data ?? []);\n this.total.set(response.meta?.total ?? 0);\n }\n } catch {\n this.showError(\n this.translateService.translate('storage.config.load.failed'),\n );\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onDeleteConfig(config: IStorageConfig): void {\n this.onDeleteAsync(\n config,\n (c) => c.id,\n (id) => this.configService.delete({ id, type: 'delete' }),\n {\n header: this.translateService.translate('storage.config.delete.title'),\n },\n );\n }\n}\n"],"names":[],"mappings":"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"}
@@ -310,9 +310,12 @@ class BaseStoragePage {
310
310
  appConfig = inject(APP_CONFIG);
311
311
  companyContext = inject(LAYOUT_AUTH_STATE);
312
312
  translateAdapter = inject(TranslateService);
313
- isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
314
- showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature, ...(ngDevMode ? [{ debugName: "showCompanyInfo" }] : []));
315
- currentCompanyName = computed(() => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME, ...(ngDevMode ? [{ debugName: "currentCompanyName" }] : []));
313
+ isLoading = signal(false, /* @ts-ignore */
314
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
315
+ showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature, /* @ts-ignore */
316
+ ...(ngDevMode ? [{ debugName: "showCompanyInfo" }] : /* istanbul ignore next */ []));
317
+ currentCompanyName = computed(() => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME, /* @ts-ignore */
318
+ ...(ngDevMode ? [{ debugName: "currentCompanyName" }] : /* istanbul ignore next */ []));
316
319
  showSuccess(detail, summaryKey = 'shared.success') {
317
320
  const summary = this.translateAdapter.translate(summaryKey);
318
321
  this.messageService.add({ severity: 'success', summary, detail });
@@ -324,10 +327,10 @@ class BaseStoragePage {
324
327
  navigateTo(path) {
325
328
  this.router.navigate(path);
326
329
  }
327
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStoragePage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
328
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseStoragePage, isStandalone: true, ngImport: i0 });
330
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BaseStoragePage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
331
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: BaseStoragePage, isStandalone: true, ngImport: i0 });
329
332
  }
330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStoragePage, decorators: [{
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BaseStoragePage, decorators: [{
331
334
  type: Directive
332
335
  }] });
333
336
  class BaseStorageListPage {
@@ -338,15 +341,23 @@ class BaseStorageListPage {
338
341
  destroyRef = inject(DestroyRef);
339
342
  translateAdapter = inject(TranslateService);
340
343
  companyContext = inject(LAYOUT_AUTH_STATE);
341
- items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : []));
342
- isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
343
- total = signal(0, ...(ngDevMode ? [{ debugName: "total" }] : []));
344
- pageSize = signal(50, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
345
- first = signal(0, ...(ngDevMode ? [{ debugName: "first" }] : []));
346
- currentPage = computed(() => Math.floor(this.first() / this.pageSize()), ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
347
- showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature, ...(ngDevMode ? [{ debugName: "showCompanyInfo" }] : []));
344
+ items = signal([], /* @ts-ignore */
345
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
346
+ isLoading = signal(false, /* @ts-ignore */
347
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
348
+ total = signal(0, /* @ts-ignore */
349
+ ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
350
+ pageSize = signal(50, /* @ts-ignore */
351
+ ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
352
+ first = signal(0, /* @ts-ignore */
353
+ ...(ngDevMode ? [{ debugName: "first" }] : /* istanbul ignore next */ []));
354
+ currentPage = computed(() => Math.floor(this.first() / this.pageSize()), /* @ts-ignore */
355
+ ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
356
+ showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature, /* @ts-ignore */
357
+ ...(ngDevMode ? [{ debugName: "showCompanyInfo" }] : /* istanbul ignore next */ []));
348
358
  totalRecords = this.total;
349
- currentCompanyName = computed(() => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME, ...(ngDevMode ? [{ debugName: "currentCompanyName" }] : []));
359
+ currentCompanyName = computed(() => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME, /* @ts-ignore */
360
+ ...(ngDevMode ? [{ debugName: "currentCompanyName" }] : /* istanbul ignore next */ []));
350
361
  getDeleteConfirmMessage(item) {
351
362
  const itemName = item.name;
352
363
  const name = itemName ?? this.translateAdapter.translate('storage.delete.this.item');
@@ -433,10 +444,10 @@ class BaseStorageListPage {
433
444
  t(key, variables) {
434
445
  return this.translateAdapter?.translate(key, variables) ?? key;
435
446
  }
436
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStorageListPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
437
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseStorageListPage, isStandalone: true, ngImport: i0 });
447
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BaseStorageListPage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
448
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.5", type: BaseStorageListPage, isStandalone: true, ngImport: i0 });
438
449
  }
439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStorageListPage, decorators: [{
450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: BaseStorageListPage, decorators: [{
440
451
  type: Directive
441
452
  }] });
442
453
 
@@ -454,10 +465,10 @@ class FileManagerApiService extends ApiResourceService {
454
465
  createFiles(dtos) {
455
466
  return this.http.post(`${this.baseUrl}/insert-many`, dtos);
456
467
  }
457
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
458
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, providedIn: 'root' });
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileManagerApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
469
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileManagerApiService, providedIn: 'root' });
459
470
  }
460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, decorators: [{
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileManagerApiService, decorators: [{
461
472
  type: Injectable,
462
473
  args: [{ providedIn: 'root' }]
463
474
  }], ctorParameters: () => [] });
@@ -473,10 +484,10 @@ class FolderApiService extends ApiResourceService {
473
484
  constructor() {
474
485
  super('folder', 'storage');
475
486
  }
476
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
477
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, providedIn: 'root' });
487
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FolderApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
488
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FolderApiService, providedIn: 'root' });
478
489
  }
479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, decorators: [{
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FolderApiService, decorators: [{
480
491
  type: Injectable,
481
492
  args: [{
482
493
  providedIn: 'root',
@@ -494,10 +505,10 @@ class StorageConfigApiService extends ApiResourceService {
494
505
  constructor() {
495
506
  super('storage-config', 'storage');
496
507
  }
497
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
498
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, providedIn: 'root' });
508
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
509
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageConfigApiService, providedIn: 'root' });
499
510
  }
500
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, decorators: [{
511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageConfigApiService, decorators: [{
501
512
  type: Injectable,
502
513
  args: [{
503
514
  providedIn: 'root',
@@ -607,10 +618,10 @@ class UploadService extends BaseApiService {
607
618
  const configId = this.resolveConfigId(storageConfigId);
608
619
  return { ...data, ...(configId && { storageConfigId: configId }) };
609
620
  }
610
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
611
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, providedIn: 'root' });
621
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
622
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UploadService, providedIn: 'root' });
612
623
  }
613
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, decorators: [{
624
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: UploadService, decorators: [{
614
625
  type: Injectable,
615
626
  args: [{ providedIn: 'root' }]
616
627
  }], ctorParameters: () => [] });
@@ -677,10 +688,10 @@ class FileProviderAdapter {
677
688
  size: parseFloat(f.size) * 1024,
678
689
  contentType: f.contentType,
679
690
  });
680
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
681
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileProviderAdapter });
691
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
692
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileProviderAdapter });
682
693
  }
683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileProviderAdapter, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: FileProviderAdapter, decorators: [{
684
695
  type: Injectable
685
696
  }] });
686
697
 
@@ -726,17 +737,17 @@ const STORAGE_ROUTES = [
726
737
  children: [
727
738
  {
728
739
  path: '',
729
- loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-Go5Gqptd.mjs').then((m) => m.FileManagerListComponent),
740
+ loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-D_shqU2a.mjs').then((m) => m.FileManagerListComponent),
730
741
  },
731
742
  {
732
743
  path: 'new',
733
744
  canActivate: [permissionGuard(FILE_PERMISSIONS.CREATE)],
734
- loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-DnE4Whts.mjs').then((m) => m.FileManagerFormComponent),
745
+ loadComponent: () => import('./flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs').then((m) => m.FileManagerFormComponent),
735
746
  },
736
747
  {
737
748
  path: ':id',
738
749
  canActivate: [permissionGuard(FILE_PERMISSIONS.UPDATE)],
739
- loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-DnE4Whts.mjs').then((m) => m.FileManagerFormComponent),
750
+ loadComponent: () => import('./flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs').then((m) => m.FileManagerFormComponent),
740
751
  },
741
752
  ],
742
753
  },
@@ -747,17 +758,17 @@ const STORAGE_ROUTES = [
747
758
  children: [
748
759
  {
749
760
  path: '',
750
- loadComponent: () => import('./flusys-ng-storage-folder-list.component-N6RjQQwv.mjs').then((m) => m.FolderListComponent),
761
+ loadComponent: () => import('./flusys-ng-storage-folder-list.component-aQXBRZiN.mjs').then((m) => m.FolderListComponent),
751
762
  },
752
763
  {
753
764
  path: 'new',
754
765
  canActivate: [permissionGuard(FOLDER_PERMISSIONS.CREATE)],
755
- loadComponent: () => import('./flusys-ng-storage-folder-form.component-BYOD0A_5.mjs').then((m) => m.FolderFormComponent),
766
+ loadComponent: () => import('./flusys-ng-storage-folder-form.component-BK2EWeV4.mjs').then((m) => m.FolderFormComponent),
756
767
  },
757
768
  {
758
769
  path: ':id',
759
770
  canActivate: [permissionGuard(FOLDER_PERMISSIONS.UPDATE)],
760
- loadComponent: () => import('./flusys-ng-storage-folder-form.component-BYOD0A_5.mjs').then((m) => m.FolderFormComponent),
771
+ loadComponent: () => import('./flusys-ng-storage-folder-form.component-BK2EWeV4.mjs').then((m) => m.FolderFormComponent),
761
772
  },
762
773
  ],
763
774
  },
@@ -768,17 +779,17 @@ const STORAGE_ROUTES = [
768
779
  children: [
769
780
  {
770
781
  path: '',
771
- loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-CtsIrKSq.mjs').then((m) => m.StorageConfigListComponent),
782
+ loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs').then((m) => m.StorageConfigListComponent),
772
783
  },
773
784
  {
774
785
  path: 'new',
775
786
  canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.CREATE)],
776
- loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-BdpCYR3c.mjs').then((m) => m.StorageConfigFormComponent),
787
+ loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs').then((m) => m.StorageConfigFormComponent),
777
788
  },
778
789
  {
779
790
  path: ':id',
780
791
  canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.UPDATE)],
781
- loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-BdpCYR3c.mjs').then((m) => m.StorageConfigFormComponent),
792
+ loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs').then((m) => m.StorageConfigFormComponent),
782
793
  },
783
794
  ],
784
795
  },
@@ -822,9 +833,10 @@ class StorageContainerComponent {
822
833
  },
823
834
  ];
824
835
  /** Visible tabs based on user permissions */
825
- visibleTabs = computed(() => this.allTabs.filter((tab) => this.permissionValidator.hasPermission(tab.permission)), ...(ngDevMode ? [{ debugName: "visibleTabs" }] : []));
826
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
827
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: StorageContainerComponent, isStandalone: true, selector: "lib-storage-container", ngImport: i0, template: `
836
+ visibleTabs = computed(() => this.allTabs.filter((tab) => this.permissionValidator.hasPermission(tab.permission)), /* @ts-ignore */
837
+ ...(ngDevMode ? [{ debugName: "visibleTabs" }] : /* istanbul ignore next */ []));
838
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
839
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: StorageContainerComponent, isStandalone: true, selector: "lib-storage-container", ngImport: i0, template: `
828
840
  <div class="p-2 sm:p-4">
829
841
  <div class="mb-4">
830
842
  <h1 class="text-xl sm:text-2xl font-bold m-0">{{ 'storage.title' | translate }}</h1>
@@ -846,9 +858,9 @@ class StorageContainerComponent {
846
858
 
847
859
  <router-outlet />
848
860
  </div>
849
- `, isInline: true, styles: [".scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
861
+ `, isInline: true, styles: [".scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
850
862
  }
851
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageContainerComponent, decorators: [{
863
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: StorageContainerComponent, decorators: [{
852
864
  type: Component,
853
865
  args: [{ selector: 'lib-storage-container', imports: [CommonModule, RouterOutlet, RouterLink, RouterLinkActive, TranslatePipe], template: `
854
866
  <div class="p-2 sm:p-4">