@flusys/ng-storage 3.0.0-rc → 3.0.1
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.
- package/README.md +176 -414
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-Bv8ER8J0.mjs → flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-Bv8ER8J0.mjs.map → flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-McM1zSlE.mjs → flusys-ng-storage-file-manager-list.component-0O_b4EjN.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-McM1zSlE.mjs.map → flusys-ng-storage-file-manager-list.component-0O_b4EjN.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-form.component-fRFiMFev.mjs → flusys-ng-storage-folder-form.component-BTQGEqNu.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-folder-form.component-fRFiMFev.mjs.map → flusys-ng-storage-folder-form.component-BTQGEqNu.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-list.component-C4xHI8SO.mjs → flusys-ng-storage-folder-list.component-B8GoIh6Z.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-folder-list.component-C4xHI8SO.mjs.map → flusys-ng-storage-folder-list.component-B8GoIh6Z.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-DEMexjmg.mjs → flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-DEMexjmg.mjs.map → flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-iJez-rII.mjs → flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-iJez-rII.mjs.map → flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs.map} +1 -1
- package/fesm2022/flusys-ng-storage.mjs +36 -38
- package/fesm2022/flusys-ng-storage.mjs.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-config-form.component-DEMexjmg.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-form.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, 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 { AngularModule, PrimeModule } 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_PROVIDERS } 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AngularModule, PrimeModule, FormField],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{ isEditMode() ? 'Edit Storage Configuration' : 'New Storage Configuration' }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mb-4\">Company: {{ currentCompanyName() }}</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 for=\"name\" class=\"block font-medium mb-2 text-sm sm:text-base\">Configuration Name *</label>\n <input pInputText id=\"name\" [formField]=\"configForm.name\" placeholder=\"e.g., Production AWS S3\" class=\"w-full\" />\n </div>\n\n <div class=\"field\">\n <label for=\"storage\" class=\"block font-medium mb-2 text-sm sm:text-base\">Storage Provider *</label>\n <select id=\"storage\" class=\"p-select-native w-full\" [formField]=\"configForm.storage\">\n @for (provider of storageProviders; track provider.value) {\n <option [value]=\"provider.value\">{{ provider.label }}</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\">Active</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\">Set as Default</label>\n </div>\n </div>\n\n @if (selectedProvider() === fileLocationEnum.AWS) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">AWS S3 Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"awsRegion\" class=\"block font-medium mb-2 text-sm sm:text-base\">AWS Region *</label>\n <input pInputText id=\"awsRegion\" [formField]=\"configForm.awsRegion\" placeholder=\"us-east-1\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsBucket\" class=\"block font-medium mb-2 text-sm sm:text-base\">Bucket Name *</label>\n <input pInputText id=\"awsBucket\" [formField]=\"configForm.awsBucket\" placeholder=\"my-bucket\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsAccessKeyId\" class=\"block font-medium mb-2 text-sm sm:text-base\">Access Key ID *</label>\n <input pInputText id=\"awsAccessKeyId\" [formField]=\"configForm.awsAccessKeyId\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsSecretAccessKey\" class=\"block font-medium mb-2 text-sm sm:text-base\">Secret Access Key *</label>\n <input type=\"password\" pInputText id=\"awsSecretAccessKey\" [formField]=\"configForm.awsSecretAccessKey\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"awsEndpoint\" class=\"block font-medium mb-2 text-sm sm:text-base\">Custom Endpoint (Optional)</label>\n <input pInputText id=\"awsEndpoint\" [formField]=\"configForm.awsEndpoint\" placeholder=\"https://s3.custom-endpoint.com\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.AZURE) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">Azure Blob Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"azureAccountName\" class=\"block font-medium mb-2 text-sm sm:text-base\">Account Name *</label>\n <input pInputText id=\"azureAccountName\" [formField]=\"configForm.azureAccountName\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"azureContainerName\" class=\"block font-medium mb-2 text-sm sm:text-base\">Container Name *</label>\n <input pInputText id=\"azureContainerName\" [formField]=\"configForm.azureContainerName\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"azureAccountKey\" class=\"block font-medium mb-2 text-sm sm:text-base\">Account Key *</label>\n <input type=\"password\" pInputText id=\"azureAccountKey\" [formField]=\"configForm.azureAccountKey\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.SFTP) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">SFTP Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"sftpHost\" class=\"block font-medium mb-2 text-sm sm:text-base\">Host *</label>\n <input pInputText id=\"sftpHost\" [formField]=\"configForm.sftpHost\" placeholder=\"sftp.example.com\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpPort\" class=\"block font-medium mb-2 text-sm sm:text-base\">Port *</label>\n <input type=\"number\" pInputText id=\"sftpPort\" [formField]=\"configForm.sftpPort\" placeholder=\"22\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpUsername\" class=\"block font-medium mb-2 text-sm sm:text-base\">Username *</label>\n <input pInputText id=\"sftpUsername\" [formField]=\"configForm.sftpUsername\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpPassword\" class=\"block font-medium mb-2 text-sm sm:text-base\">Password *</label>\n <input type=\"password\" pInputText id=\"sftpPassword\" [formField]=\"configForm.sftpPassword\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"sftpBasePath\" class=\"block font-medium mb-2 text-sm sm:text-base\">Base Path *</label>\n <input pInputText id=\"sftpBasePath\" [formField]=\"configForm.sftpBasePath\" placeholder=\"/uploads\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.LOCAL) {\n <div class=\"grid grid-cols-1 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">Local Storage Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"localBasePath\" class=\"block font-medium mb-2 text-sm sm:text-base\">Base Path *</label>\n <input pInputText id=\"localBasePath\" [formField]=\"configForm.localBasePath\" placeholder=\"/var/www/uploads\" class=\"w-full\" />\n </div>\n </div>\n }\n\n <div class=\"flex justify-end gap-2 mt-4\">\n <p-button label=\"Cancel\" severity=\"secondary\" [outlined]=\"true\" (onClick)=\"onCancel()\" />\n <p-button type=\"submit\" [label]=\"isEditMode() ? 'Update' : 'Create'\" [loading]=\"isLoading()\" [disabled]=\"!isFormValid() || isLoading()\" />\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 routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n readonly fileLocationEnum = FileLocationEnum;\n readonly storageProviders = STORAGE_PROVIDERS;\n\n readonly existingConfig = signal<IStorageConfig | null>(null);\n readonly isEditMode = computed(() => !!this.existingConfig());\n readonly formModel = signal<IStorageConfigFormModel>({ ...DEFAULT_FORM_MODEL });\n\n readonly configForm = form(this.formModel, (f) => {\n required(f.name, { message: 'Configuration name is required' });\n });\n\n readonly selectedProvider = computed(() => this.formModel().storage);\n readonly isFormValid = computed(() => this.formModel().name.trim().length > 0);\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.findByIdAsync(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.showError('Failed to load storage configuration.');\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 if (this.isEditMode()) {\n await this.configService.updateAsync({\n id: formValue.id,\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n this.showSuccess('Storage configuration updated successfully.');\n } else {\n await this.configService.insertAsync({\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n this.showSuccess('Storage configuration created successfully.');\n }\n this.navigateTo(['/storage/configs']);\n } catch {\n this.showError(`Failed to ${this.isEditMode() ? 'update' : 'create'} storage configuration.`);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onCancel(): void {\n this.navigateTo(['/storage/configs']);\n }\n\n private extractProviderConfig(config: IStorageConfig): 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(formValue: IStorageConfigFormModel): 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":";;;;;;;;;;;;AAiCA,MAAM,kBAAkB,GAA4B;AAClD,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,gBAAgB,CAAC,GAAG;AAC7B,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,aAAa,EAAE,EAAE;CAClB;AA0IK,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAC/C,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpD,WAAW,GAAG,KAAK;IAElB,gBAAgB,GAAG,gBAAgB;IACnC,gBAAgB,GAAG,iBAAiB;AAEpC,IAAA,cAAc,GAAG,MAAM,CAAwB,IAAI,0DAAC;AACpD,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,sDAAC;IACpD,SAAS,GAAG,MAAM,CAA0B,EAAE,GAAG,kBAAkB,EAAE,qDAAC;IAEtE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAI;QAC/C,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;AACjE,IAAA,CAAC,CAAC;AAEO,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,4DAAC;IAC3D,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,uDAAC;AAE9E,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEjC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC3B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,UAAU,CAAC,EAAU,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;AACrC,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI;AAC5B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;AAC5B,oBAAA,GAAG,CAAC;oBACJ,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,oBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;AACjC,oBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;AACpC,oBAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACtC,iBAAA,CAAC,CAAC;YACL;QACF;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,uCAAuC,CAAC;AACvD,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACvC;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AAEzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;AAElD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;oBACnC,EAAE,EAAE,SAAS,CAAC,EAAE;oBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,MAAM;oBACN,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;AAC/B,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,6CAA6C,CAAC;YACjE;iBAAO;AACL,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;oBACnC,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,MAAM;oBACN,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;AAC/B,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,6CAA6C,CAAC;YACjE;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACvC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAA,uBAAA,CAAyB,CAAC;QAC/F;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACvC;AAEQ,IAAA,qBAAqB,CAAC,MAAsB,EAAA;AAClD,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE;AAC7B,QAAA,QAAQ,MAAM,CAAC,OAAO;YACpB,KAAK,gBAAgB,CAAC,GAAG;gBACvB,OAAO;AACL,oBAAA,SAAS,EAAG,CAAC,CAAC,QAAQ,CAAY,IAAI,EAAE;AACxC,oBAAA,SAAS,EAAG,CAAC,CAAC,QAAQ,CAAY,IAAI,EAAE;AACxC,oBAAA,cAAc,EAAG,CAAC,CAAC,aAAa,CAAY,IAAI,EAAE;AAClD,oBAAA,kBAAkB,EAAG,CAAC,CAAC,iBAAiB,CAAY,IAAI,EAAE;AAC1D,oBAAA,WAAW,EAAG,CAAC,CAAC,UAAU,CAAY,IAAI,EAAE;iBAC7C;YACH,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO;AACL,oBAAA,gBAAgB,EAAG,CAAC,CAAC,aAAa,CAAY,IAAI,EAAE;AACpD,oBAAA,eAAe,EAAG,CAAC,CAAC,YAAY,CAAY,IAAI,EAAE;AAClD,oBAAA,kBAAkB,EAAG,CAAC,CAAC,eAAe,CAAY,IAAI,EAAE;iBACzD;YACH,KAAK,gBAAgB,CAAC,IAAI;gBACxB,OAAO;AACL,oBAAA,QAAQ,EAAG,CAAC,CAAC,MAAM,CAAY,IAAI,EAAE;oBACrC,QAAQ,EAAE,CAAE,CAAC,CAAC,MAAM,CAAY,IAAI,EAAE,EAAE,QAAQ,EAAE;AAClD,oBAAA,YAAY,EAAG,CAAC,CAAC,UAAU,CAAY,IAAI,EAAE;AAC7C,oBAAA,YAAY,EAAG,CAAC,CAAC,UAAU,CAAY,IAAI,EAAE;AAC7C,oBAAA,YAAY,EAAG,CAAC,CAAC,UAAU,CAAY,IAAI,EAAE;iBAC9C;YACH,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,EAAE,aAAa,EAAG,CAAC,CAAC,UAAU,CAAY,IAAI,EAAE,EAAE;AAC3D,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEQ,IAAA,mBAAmB,CAAC,SAAkC,EAAA;AAC5D,QAAA,QAAQ,SAAS,CAAC,OAAO;YACvB,KAAK,gBAAgB,CAAC,GAAG;gBACvB,OAAO;oBACL,MAAM,EAAE,SAAS,CAAC,SAAS;oBAC3B,MAAM,EAAE,SAAS,CAAC,SAAS;oBAC3B,WAAW,EAAE,SAAS,CAAC,cAAc;oBACrC,eAAe,EAAE,SAAS,CAAC,kBAAkB;AAC7C,oBAAA,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;iBAClE;YACH,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO;oBACL,WAAW,EAAE,SAAS,CAAC,gBAAgB;oBACvC,UAAU,EAAE,SAAS,CAAC,eAAe;oBACrC,aAAa,EAAE,SAAS,CAAC,kBAAkB;iBAC5C;YACH,KAAK,gBAAgB,CAAC,IAAI;gBACxB,OAAO;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,oBAAA,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE;oBAChE,QAAQ,EAAE,SAAS,CAAC,YAAY;oBAChC,QAAQ,EAAE,SAAS,CAAC,YAAY;oBAChC,QAAQ,EAAE,SAAS,CAAC,YAAY;iBACjC;YACH,KAAK,gBAAgB,CAAC,KAAK;AACzB,gBAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,aAAa,EAAE;AAC9C,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;uGAhKW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApI3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnIS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqIpC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAxItC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;AAChD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkIT,EAAA,CAAA;AACF,iBAAA;;;;;"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-form.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, 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 { AngularModule, PrimeModule } 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_PROVIDERS } 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 changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AngularModule, PrimeModule, FormField],\n template: `\n <div class=\"card\">\n <h3 class=\"text-lg sm:text-xl font-semibold mb-4\">\n {{ isEditMode() ? 'Edit Storage Configuration' : 'New Storage Configuration' }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mb-4\">Company: {{ currentCompanyName() }}</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 for=\"name\" class=\"block font-medium mb-2 text-sm sm:text-base\">Configuration Name *</label>\n <input pInputText id=\"name\" [formField]=\"configForm.name\" placeholder=\"e.g., Production AWS S3\" class=\"w-full\" />\n </div>\n\n <div class=\"field\">\n <label for=\"storage\" class=\"block font-medium mb-2 text-sm sm:text-base\">Storage Provider *</label>\n <select id=\"storage\" class=\"p-select-native w-full\" [formField]=\"configForm.storage\">\n @for (provider of storageProviders; track provider.value) {\n <option [value]=\"provider.value\">{{ provider.label }}</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\">Active</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\">Set as Default</label>\n </div>\n </div>\n\n @if (selectedProvider() === fileLocationEnum.AWS) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">AWS S3 Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"awsRegion\" class=\"block font-medium mb-2 text-sm sm:text-base\">AWS Region *</label>\n <input pInputText id=\"awsRegion\" [formField]=\"configForm.awsRegion\" placeholder=\"us-east-1\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsBucket\" class=\"block font-medium mb-2 text-sm sm:text-base\">Bucket Name *</label>\n <input pInputText id=\"awsBucket\" [formField]=\"configForm.awsBucket\" placeholder=\"my-bucket\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsAccessKeyId\" class=\"block font-medium mb-2 text-sm sm:text-base\">Access Key ID *</label>\n <input pInputText id=\"awsAccessKeyId\" [formField]=\"configForm.awsAccessKeyId\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"awsSecretAccessKey\" class=\"block font-medium mb-2 text-sm sm:text-base\">Secret Access Key *</label>\n <input type=\"password\" pInputText id=\"awsSecretAccessKey\" [formField]=\"configForm.awsSecretAccessKey\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"awsEndpoint\" class=\"block font-medium mb-2 text-sm sm:text-base\">Custom Endpoint (Optional)</label>\n <input pInputText id=\"awsEndpoint\" [formField]=\"configForm.awsEndpoint\" placeholder=\"https://s3.custom-endpoint.com\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.AZURE) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">Azure Blob Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"azureAccountName\" class=\"block font-medium mb-2 text-sm sm:text-base\">Account Name *</label>\n <input pInputText id=\"azureAccountName\" [formField]=\"configForm.azureAccountName\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"azureContainerName\" class=\"block font-medium mb-2 text-sm sm:text-base\">Container Name *</label>\n <input pInputText id=\"azureContainerName\" [formField]=\"configForm.azureContainerName\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"azureAccountKey\" class=\"block font-medium mb-2 text-sm sm:text-base\">Account Key *</label>\n <input type=\"password\" pInputText id=\"azureAccountKey\" [formField]=\"configForm.azureAccountKey\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.SFTP) {\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"md:col-span-2 mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">SFTP Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"sftpHost\" class=\"block font-medium mb-2 text-sm sm:text-base\">Host *</label>\n <input pInputText id=\"sftpHost\" [formField]=\"configForm.sftpHost\" placeholder=\"sftp.example.com\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpPort\" class=\"block font-medium mb-2 text-sm sm:text-base\">Port *</label>\n <input type=\"number\" pInputText id=\"sftpPort\" [formField]=\"configForm.sftpPort\" placeholder=\"22\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpUsername\" class=\"block font-medium mb-2 text-sm sm:text-base\">Username *</label>\n <input pInputText id=\"sftpUsername\" [formField]=\"configForm.sftpUsername\" class=\"w-full\" />\n </div>\n <div class=\"field\">\n <label for=\"sftpPassword\" class=\"block font-medium mb-2 text-sm sm:text-base\">Password *</label>\n <input type=\"password\" pInputText id=\"sftpPassword\" [formField]=\"configForm.sftpPassword\" class=\"w-full\" />\n </div>\n <div class=\"field md:col-span-2\">\n <label for=\"sftpBasePath\" class=\"block font-medium mb-2 text-sm sm:text-base\">Base Path *</label>\n <input pInputText id=\"sftpBasePath\" [formField]=\"configForm.sftpBasePath\" placeholder=\"/uploads\" class=\"w-full\" />\n </div>\n </div>\n }\n\n @if (selectedProvider() === fileLocationEnum.LOCAL) {\n <div class=\"grid grid-cols-1 gap-4 mt-4 p-4 bg-surface-ground rounded-lg border border-surface\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-semibold text-muted-color uppercase tracking-wide\">Local Storage Configuration</span>\n </div>\n <div class=\"field\">\n <label for=\"localBasePath\" class=\"block font-medium mb-2 text-sm sm:text-base\">Base Path *</label>\n <input pInputText id=\"localBasePath\" [formField]=\"configForm.localBasePath\" placeholder=\"/var/www/uploads\" class=\"w-full\" />\n </div>\n </div>\n }\n\n <div class=\"flex justify-end gap-2 mt-4\">\n <p-button label=\"Cancel\" severity=\"secondary\" [outlined]=\"true\" (onClick)=\"onCancel()\" />\n <p-button type=\"submit\" [label]=\"isEditMode() ? 'Update' : 'Create'\" [loading]=\"isLoading()\" [disabled]=\"!isFormValid() || isLoading()\" />\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 routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n readonly fileLocationEnum = FileLocationEnum;\n readonly storageProviders = STORAGE_PROVIDERS;\n\n readonly existingConfig = signal<IStorageConfig | null>(null);\n readonly isEditMode = computed(() => !!this.existingConfig());\n readonly formModel = signal<IStorageConfigFormModel>({ ...DEFAULT_FORM_MODEL });\n\n readonly configForm = form(this.formModel, (f) => {\n required(f.name, { message: 'Configuration name is required' });\n });\n\n readonly selectedProvider = computed(() => this.formModel().storage);\n readonly isFormValid = computed(() => this.formModel().name.trim().length > 0);\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.findByIdAsync(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.showError('Failed to load storage configuration.');\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 if (this.isEditMode()) {\n await this.configService.updateAsync({\n id: formValue.id,\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n this.showSuccess('Storage configuration updated successfully.');\n } else {\n await this.configService.insertAsync({\n name: formValue.name,\n storage: formValue.storage,\n config,\n isActive: formValue.isActive,\n isDefault: formValue.isDefault,\n });\n this.showSuccess('Storage configuration created successfully.');\n }\n this.navigateTo(['/storage/configs']);\n } catch {\n this.showError(`Failed to ${this.isEditMode() ? 'update' : 'create'} storage configuration.`);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onCancel(): void {\n this.navigateTo(['/storage/configs']);\n }\n\n private extractProviderConfig(config: IStorageConfig): 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(formValue: IStorageConfigFormModel): 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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"}
|
|
@@ -44,8 +44,8 @@ class StorageConfigListComponent extends BaseStorageListPage {
|
|
|
44
44
|
errorMessage: 'Failed to delete storage configuration.',
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
48
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
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
49
|
<div class="card">
|
|
50
50
|
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4">
|
|
51
51
|
<div>
|
|
@@ -110,7 +110,7 @@ class StorageConfigListComponent extends BaseStorageListPage {
|
|
|
110
110
|
</div>
|
|
111
111
|
`, 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
112
112
|
}
|
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigListComponent, decorators: [{
|
|
114
114
|
type: Component,
|
|
115
115
|
args: [{
|
|
116
116
|
selector: 'lib-storage-config-list',
|
|
@@ -184,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
184
184
|
}] });
|
|
185
185
|
|
|
186
186
|
export { StorageConfigListComponent };
|
|
187
|
-
//# sourceMappingURL=flusys-ng-storage-storage-config-list.component-
|
|
187
|
+
//# sourceMappingURL=flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-config-list.component-
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-list.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { AngularModule, HasPermissionDirective, PrimeModule, STORAGE_CONFIG_PERMISSIONS } from '@flusys/ng-shared';\nimport { firstValueFrom } from 'rxjs';\nimport { IStorageConfig } from '../../interfaces/storage-config.interface';\nimport { StorageConfigApiService } from '../../services/storage-config-api.service';\nimport { BaseStorageListPage } from '../../utils/base-storage-page';\nimport { getProviderIcon, getProviderLabel, getProviderSeverity } from '../../utils/storage-utils';\n\n@Component({\n selector: 'lib-storage-config-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AngularModule, PrimeModule, HasPermissionDirective],\n template: `\n <div class=\"card\">\n <div class=\"flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4\">\n <div>\n <h3 class=\"text-lg sm:text-xl font-semibold\">Storage Configurations</h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">Company: {{ currentCompanyName() }}</p>\n }\n </div>\n <p-button *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.CREATE\" label=\"New Configuration\" icon=\"pi pi-plus\" (onClick)=\"onCreate()\" styleClass=\"w-full sm:w-auto\" />\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>Name</th>\n <th>Provider</th>\n <th class=\"hidden sm:table-cell\">Created</th>\n <th class=\"w-[120px]\">Actions</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\">{{ config.name }}</span>\n </div>\n </td>\n <td>\n <p-tag [value]=\"getProviderLabel(config.storage)\" [severity]=\"getProviderSeverity(config.storage)\" />\n </td>\n <td class=\"hidden sm:table-cell\">{{ config.createdAt | date: 'short' }}</td>\n <td>\n <div class=\"flex gap-1\">\n <p-button *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.UPDATE\" icon=\"pi pi-pencil\" [text]=\"true\" severity=\"secondary\" size=\"small\" (onClick)=\"onEdit(config.id)\" pTooltip=\"Edit\" tooltipPosition=\"top\" />\n <p-button *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.DELETE\" icon=\"pi pi-trash\" [text]=\"true\" severity=\"danger\" size=\"small\" (onClick)=\"onDeleteConfig(config)\" pTooltip=\"Delete\" tooltipPosition=\"top\" />\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 {{ showCompanyInfo() ? 'No storage configurations found in current company' : 'No storage configurations found' }}\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\n readonly getProviderIcon = getProviderIcon;\n readonly getProviderLabel = getProviderLabel;\n readonly getProviderSeverity = getProviderSeverity;\n\n getResourceRoute(): string {\n return '/storage/configs';\n }\n\n override getDeleteConfirmMessage(config: IStorageConfig): string {\n return `Are you sure you want to delete \"${config.name}\"?`;\n }\n\n async loadData(): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await firstValueFrom(\n this.configService.getAll('', { 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('Failed to load storage configurations.');\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.deleteAsync({ id, type: 'delete' }),\n {\n header: 'Delete Configuration',\n successMessage: 'Storage configuration deleted successfully.',\n errorMessage: 'Failed to delete storage configuration.',\n },\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -135,10 +135,10 @@ class BaseStoragePage {
|
|
|
135
135
|
navigateTo(path) {
|
|
136
136
|
this.router.navigate(path);
|
|
137
137
|
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
139
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.
|
|
138
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStoragePage, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
139
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseStoragePage, isStandalone: true, ngImport: i0 });
|
|
140
140
|
}
|
|
141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStoragePage, decorators: [{
|
|
142
142
|
type: Directive
|
|
143
143
|
}] });
|
|
144
144
|
class BaseStorageListPage extends BaseListPage {
|
|
@@ -150,16 +150,16 @@ class BaseStorageListPage extends BaseListPage {
|
|
|
150
150
|
const name = item.name ?? 'this item';
|
|
151
151
|
return `Are you sure you want to delete "${name}"?`;
|
|
152
152
|
}
|
|
153
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
154
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.
|
|
153
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStorageListPage, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
154
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseStorageListPage, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
155
155
|
}
|
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStorageListPage, decorators: [{
|
|
157
157
|
type: Directive
|
|
158
158
|
}] });
|
|
159
159
|
|
|
160
160
|
class FileManagerApiService extends ApiResourceService {
|
|
161
161
|
constructor() {
|
|
162
|
-
super('
|
|
162
|
+
super('file-manager', inject(HttpClient), 'storage');
|
|
163
163
|
}
|
|
164
164
|
getFiles(fileIds) {
|
|
165
165
|
const requests = fileIds.map((id) => ({ id }));
|
|
@@ -171,10 +171,10 @@ class FileManagerApiService extends ApiResourceService {
|
|
|
171
171
|
async createFileAsync(dto) {
|
|
172
172
|
return firstValueFrom(this.createFile(dto));
|
|
173
173
|
}
|
|
174
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
175
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
174
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
175
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, providedIn: 'root' });
|
|
176
176
|
}
|
|
177
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FileManagerApiService, decorators: [{
|
|
178
178
|
type: Injectable,
|
|
179
179
|
args: [{ providedIn: 'root' }]
|
|
180
180
|
}], ctorParameters: () => [] });
|
|
@@ -265,10 +265,10 @@ class UploadService extends BaseApiService {
|
|
|
265
265
|
const configId = this.resolveConfigId(storageConfigId);
|
|
266
266
|
return { ...data, ...(configId && { storageConfigId: configId }) };
|
|
267
267
|
}
|
|
268
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
269
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
268
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
269
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, providedIn: 'root' });
|
|
270
270
|
}
|
|
271
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: UploadService, decorators: [{
|
|
272
272
|
type: Injectable,
|
|
273
273
|
args: [{ providedIn: 'root' }]
|
|
274
274
|
}], ctorParameters: () => [] });
|
|
@@ -313,10 +313,10 @@ class ProfileUploadProviderAdapter {
|
|
|
313
313
|
: undefined,
|
|
314
314
|
})));
|
|
315
315
|
}
|
|
316
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
317
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
316
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileUploadProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
317
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileUploadProviderAdapter });
|
|
318
318
|
}
|
|
319
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
319
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ProfileUploadProviderAdapter, decorators: [{
|
|
320
320
|
type: Injectable
|
|
321
321
|
}] });
|
|
322
322
|
|
|
@@ -354,13 +354,12 @@ function provideStorageProviders() {
|
|
|
354
354
|
*/
|
|
355
355
|
class FolderApiService extends ApiResourceService {
|
|
356
356
|
constructor() {
|
|
357
|
-
|
|
358
|
-
super('storage/folder', http);
|
|
357
|
+
super('folder', inject(HttpClient), 'storage');
|
|
359
358
|
}
|
|
360
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
361
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
359
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
360
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, providedIn: 'root' });
|
|
362
361
|
}
|
|
363
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: FolderApiService, decorators: [{
|
|
364
363
|
type: Injectable,
|
|
365
364
|
args: [{
|
|
366
365
|
providedIn: 'root',
|
|
@@ -376,13 +375,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
376
375
|
*/
|
|
377
376
|
class StorageConfigApiService extends ApiResourceService {
|
|
378
377
|
constructor() {
|
|
379
|
-
|
|
380
|
-
super('storage/storage-config', http);
|
|
378
|
+
super('storage-config', inject(HttpClient), 'storage');
|
|
381
379
|
}
|
|
382
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
383
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.
|
|
380
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
381
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, providedIn: 'root' });
|
|
384
382
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageConfigApiService, decorators: [{
|
|
386
384
|
type: Injectable,
|
|
387
385
|
args: [{
|
|
388
386
|
providedIn: 'root',
|
|
@@ -405,17 +403,17 @@ const STORAGE_ROUTES = [
|
|
|
405
403
|
children: [
|
|
406
404
|
{
|
|
407
405
|
path: '',
|
|
408
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-
|
|
406
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-0O_b4EjN.mjs').then((m) => m.FileManagerListComponent),
|
|
409
407
|
},
|
|
410
408
|
{
|
|
411
409
|
path: 'new',
|
|
412
410
|
canActivate: [permissionGuard(FILE_PERMISSIONS.CREATE)],
|
|
413
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-
|
|
411
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs').then((m) => m.FileManagerFormComponent),
|
|
414
412
|
},
|
|
415
413
|
{
|
|
416
414
|
path: ':id',
|
|
417
415
|
canActivate: [permissionGuard(FILE_PERMISSIONS.UPDATE)],
|
|
418
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-
|
|
416
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs').then((m) => m.FileManagerFormComponent),
|
|
419
417
|
},
|
|
420
418
|
],
|
|
421
419
|
},
|
|
@@ -426,17 +424,17 @@ const STORAGE_ROUTES = [
|
|
|
426
424
|
children: [
|
|
427
425
|
{
|
|
428
426
|
path: '',
|
|
429
|
-
loadComponent: () => import('./flusys-ng-storage-folder-list.component-
|
|
427
|
+
loadComponent: () => import('./flusys-ng-storage-folder-list.component-B8GoIh6Z.mjs').then((m) => m.FolderListComponent),
|
|
430
428
|
},
|
|
431
429
|
{
|
|
432
430
|
path: 'new',
|
|
433
431
|
canActivate: [permissionGuard(FOLDER_PERMISSIONS.CREATE)],
|
|
434
|
-
loadComponent: () => import('./flusys-ng-storage-folder-form.component-
|
|
432
|
+
loadComponent: () => import('./flusys-ng-storage-folder-form.component-BTQGEqNu.mjs').then((m) => m.FolderFormComponent),
|
|
435
433
|
},
|
|
436
434
|
{
|
|
437
435
|
path: ':id',
|
|
438
436
|
canActivate: [permissionGuard(FOLDER_PERMISSIONS.UPDATE)],
|
|
439
|
-
loadComponent: () => import('./flusys-ng-storage-folder-form.component-
|
|
437
|
+
loadComponent: () => import('./flusys-ng-storage-folder-form.component-BTQGEqNu.mjs').then((m) => m.FolderFormComponent),
|
|
440
438
|
},
|
|
441
439
|
],
|
|
442
440
|
},
|
|
@@ -447,17 +445,17 @@ const STORAGE_ROUTES = [
|
|
|
447
445
|
children: [
|
|
448
446
|
{
|
|
449
447
|
path: '',
|
|
450
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-
|
|
448
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs').then((m) => m.StorageConfigListComponent),
|
|
451
449
|
},
|
|
452
450
|
{
|
|
453
451
|
path: 'new',
|
|
454
452
|
canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.CREATE)],
|
|
455
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-
|
|
453
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs').then((m) => m.StorageConfigFormComponent),
|
|
456
454
|
},
|
|
457
455
|
{
|
|
458
456
|
path: ':id',
|
|
459
457
|
canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.UPDATE)],
|
|
460
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-
|
|
458
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs').then((m) => m.StorageConfigFormComponent),
|
|
461
459
|
},
|
|
462
460
|
],
|
|
463
461
|
},
|
|
@@ -509,8 +507,8 @@ class StorageContainerComponent {
|
|
|
509
507
|
return 'No permissions available';
|
|
510
508
|
return `Manage ${tabs.map((t) => t.label.toLowerCase()).join(', ')}`;
|
|
511
509
|
}, ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
|
|
512
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.
|
|
513
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.
|
|
510
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
511
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: StorageContainerComponent, isStandalone: true, selector: "lib-storage-container", ngImport: i0, template: `
|
|
514
512
|
<div class="p-2 sm:p-4">
|
|
515
513
|
<div class="mb-4">
|
|
516
514
|
<h1 class="text-xl sm:text-2xl font-bold m-0">Storage</h1>
|
|
@@ -534,7 +532,7 @@ class StorageContainerComponent {
|
|
|
534
532
|
</div>
|
|
535
533
|
`, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
536
534
|
}
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.
|
|
535
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: StorageContainerComponent, decorators: [{
|
|
538
536
|
type: Component,
|
|
539
537
|
args: [{ selector: 'lib-storage-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, RouterOutlet, RouterLink, RouterLinkActive], template: `
|
|
540
538
|
<div class="p-2 sm:p-4">
|