@flusys/ng-storage 9.2.0 → 9.2.2
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/fesm2022/{flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs → flusys-ng-storage-file-manager-api.service-D6CGVtHb.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs.map → flusys-ng-storage-file-manager-api.service-D6CGVtHb.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs → flusys-ng-storage-file-manager-form.component-CWpPnWXB.mjs} +8 -8
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs.map → flusys-ng-storage-file-manager-form.component-CWpPnWXB.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-BjlsjxSH.mjs → flusys-ng-storage-file-manager-list.component-DAYXDYUX.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-BjlsjxSH.mjs.map → flusys-ng-storage-file-manager-list.component-DAYXDYUX.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-api.service-D_fFEuO6.mjs → flusys-ng-storage-folder-api.service-BlQH7f29.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-folder-api.service-D_fFEuO6.mjs.map → flusys-ng-storage-folder-api.service-BlQH7f29.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-form.component-D9qZ47dk.mjs → flusys-ng-storage-folder-form.component-C721Ej1L.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-folder-form.component-D9qZ47dk.mjs.map → flusys-ng-storage-folder-form.component-C721Ej1L.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-list.component-B0kQQRFm.mjs → flusys-ng-storage-folder-list.component-JBDc-7tx.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-folder-list.component-B0kQQRFm.mjs.map → flusys-ng-storage-folder-list.component-JBDc-7tx.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs → flusys-ng-storage-storage-config-api.service-6pfK7lpy.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs.map → flusys-ng-storage-storage-config-api.service-6pfK7lpy.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs → flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs.map → flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-B6uawDtd.mjs → flusys-ng-storage-storage-config-list.component-BsKP0D_R.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-B6uawDtd.mjs.map → flusys-ng-storage-storage-config-list.component-BsKP0D_R.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-container.component-EWGNoozU.mjs → flusys-ng-storage-storage-container.component-ByWJLvlY.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-storage-container.component-EWGNoozU.mjs.map → flusys-ng-storage-storage-container.component-ByWJLvlY.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-upload.service-CIcEL_Kr.mjs → flusys-ng-storage-upload.service-D9n8yztB.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-upload.service-CIcEL_Kr.mjs.map → flusys-ng-storage-upload.service-D9n8yztB.mjs.map} +1 -1
- package/fesm2022/flusys-ng-storage.mjs +23 -23
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-
|
|
1
|
+
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-6pfK7lpy.mjs";
|
|
2
2
|
import { BaseStoragePage, FileLocationEnum, STORAGE_PROVIDER_OPTIONS } from "./flusys-ng-storage.mjs";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import { Component, computed, effect, inject, signal } from "@angular/core";
|
|
@@ -160,7 +160,7 @@ var StorageConfigFormComponent = class StorageConfigFormComponent extends BaseSt
|
|
|
160
160
|
}
|
|
161
161
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
162
162
|
minVersion: "12.0.0",
|
|
163
|
-
version: "22.2.
|
|
163
|
+
version: "22.2.2",
|
|
164
164
|
ngImport: i0,
|
|
165
165
|
type: StorageConfigFormComponent,
|
|
166
166
|
deps: [],
|
|
@@ -168,7 +168,7 @@ var StorageConfigFormComponent = class StorageConfigFormComponent extends BaseSt
|
|
|
168
168
|
});
|
|
169
169
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
170
170
|
minVersion: "17.0.0",
|
|
171
|
-
version: "22.2.
|
|
171
|
+
version: "22.2.2",
|
|
172
172
|
type: StorageConfigFormComponent,
|
|
173
173
|
isStandalone: true,
|
|
174
174
|
selector: "lib-storage-config-form",
|
|
@@ -677,7 +677,7 @@ var StorageConfigFormComponent = class StorageConfigFormComponent extends BaseSt
|
|
|
677
677
|
};
|
|
678
678
|
i0.ɵɵngDeclareClassMetadata({
|
|
679
679
|
minVersion: "12.0.0",
|
|
680
|
-
version: "22.2.
|
|
680
|
+
version: "22.2.2",
|
|
681
681
|
ngImport: i0,
|
|
682
682
|
type: StorageConfigFormComponent,
|
|
683
683
|
decorators: [{
|
|
@@ -1035,4 +1035,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1035
1035
|
});
|
|
1036
1036
|
export { StorageConfigFormComponent };
|
|
1037
1037
|
|
|
1038
|
-
//# sourceMappingURL=flusys-ng-storage-storage-config-form.component-
|
|
1038
|
+
//# sourceMappingURL=flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs","names":[],"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 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';\nimport {\n FButtonDirective,\n InputTextDirective,\n PasswordComponent,\n SelectComponent,\n ToggleSwitchComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\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: [\n InputTextDirective,\n PasswordComponent,\n SelectComponent,\n ToggleSwitchComponent,\n FButtonDirective,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\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 (submit)=\"onSubmit($event)\">\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 fInputText\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 <f-select\n inputId=\"storage\"\n [options]=\"[...storageProviderOptions]\"\n optionValue=\"value\"\n [formField]=\"configForm.storage\"\n >\n <ng-template #item let-provider>{{ provider.labelKey | translate }}</ng-template>\n <ng-template #selectedItem let-provider>{{ provider.labelKey | translate }}</ng-template>\n </f-select>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <f-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 <f-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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"awsSecretAccessKey\"\n [formField]=\"configForm.awsSecretAccessKey\"\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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"azureAccountKey\"\n [formField]=\"configForm.azureAccountKey\"\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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"sftpPassword\"\n [formField]=\"configForm.sftpPassword\"\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 fInputText\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 fInputText\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 fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onCancel()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\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(event: Event): Promise<void> {\n event.preventDefault();\n\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs","names":[],"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 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';\nimport {\n FButtonDirective,\n InputTextDirective,\n PasswordComponent,\n SelectComponent,\n ToggleSwitchComponent,\n UiIconComponent,\n} from '@flusys/ng-ui';\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: [\n InputTextDirective,\n PasswordComponent,\n SelectComponent,\n ToggleSwitchComponent,\n FButtonDirective,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\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 (submit)=\"onSubmit($event)\">\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 fInputText\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 <f-select\n inputId=\"storage\"\n [options]=\"[...storageProviderOptions]\"\n optionValue=\"value\"\n [formField]=\"configForm.storage\"\n >\n <ng-template #item let-provider>{{ provider.labelKey | translate }}</ng-template>\n <ng-template #selectedItem let-provider>{{ provider.labelKey | translate }}</ng-template>\n </f-select>\n </div>\n\n <div class=\"field flex items-center gap-2\">\n <f-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 <f-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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"awsSecretAccessKey\"\n [formField]=\"configForm.awsSecretAccessKey\"\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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"azureAccountKey\"\n [formField]=\"configForm.azureAccountKey\"\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 fInputText\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 fInputText\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 fInputText\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 <f-password\n inputId=\"sftpPassword\"\n [formField]=\"configForm.sftpPassword\"\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 fInputText\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 fInputText\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 fButton\n type=\"button\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onCancel()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\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(event: Event): Promise<void> {\n event.preventDefault();\n\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"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-
|
|
1
|
+
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-6pfK7lpy.mjs";
|
|
2
2
|
import { BaseStorageListPage, getProviderIcon, getProviderLabelKey, getProviderSeverity } from "./flusys-ng-storage.mjs";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import { Component, inject, signal } from "@angular/core";
|
|
@@ -51,7 +51,7 @@ var StorageConfigListComponent = class StorageConfigListComponent extends BaseSt
|
|
|
51
51
|
}
|
|
52
52
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
53
53
|
minVersion: "12.0.0",
|
|
54
|
-
version: "22.2.
|
|
54
|
+
version: "22.2.2",
|
|
55
55
|
ngImport: i0,
|
|
56
56
|
type: StorageConfigListComponent,
|
|
57
57
|
deps: null,
|
|
@@ -59,7 +59,7 @@ var StorageConfigListComponent = class StorageConfigListComponent extends BaseSt
|
|
|
59
59
|
});
|
|
60
60
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
61
61
|
minVersion: "17.0.0",
|
|
62
|
-
version: "22.2.
|
|
62
|
+
version: "22.2.2",
|
|
63
63
|
type: StorageConfigListComponent,
|
|
64
64
|
isStandalone: true,
|
|
65
65
|
selector: "lib-storage-config-list",
|
|
@@ -410,7 +410,7 @@ var StorageConfigListComponent = class StorageConfigListComponent extends BaseSt
|
|
|
410
410
|
};
|
|
411
411
|
i0.ɵɵngDeclareClassMetadata({
|
|
412
412
|
minVersion: "12.0.0",
|
|
413
|
-
version: "22.2.
|
|
413
|
+
version: "22.2.2",
|
|
414
414
|
ngImport: i0,
|
|
415
415
|
type: StorageConfigListComponent,
|
|
416
416
|
decorators: [{
|
|
@@ -573,4 +573,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
573
573
|
});
|
|
574
574
|
export { StorageConfigListComponent };
|
|
575
575
|
|
|
576
|
-
//# sourceMappingURL=flusys-ng-storage-storage-config-list.component-
|
|
576
|
+
//# sourceMappingURL=flusys-ng-storage-storage-config-list.component-BsKP0D_R.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-config-list.component-B6uawDtd.mjs","names":[],"sources":["../../../projects/ng-storage/pages/storage-config/storage-config-list.component.ts"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n HasPermissionDirective,\n STORAGE_CONFIG_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport {\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\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: [\n FButtonDirective,\n UiIconComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n DatePipe,\n FormsModule,\n HasPermissionDirective,\n TranslatePipe,\n ],\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 <div\n class=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full sm:w-auto\"\n >\n <f-iconfield class=\"w-full sm:w-64\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"'shared.search' | translate\"\n class=\"w-full\"\n />\n </f-iconfield>\n <button\n fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.CREATE\"\n (click)=\"onCreate()\"\n class=\"w-full sm:w-auto\"\n >\n <ui-icon pButtonIcon name=\"plus\"></ui-icon>\n <span pButtonLabel>{{ 'storage.button.new.configuration' | translate }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-x-auto\">\n <f-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 >\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 <ui-icon [name]=\"getProviderIcon(config.storage)\"></ui-icon>\n <span class=\"truncate max-w-32 sm:max-w-none\">{{\n config.name\n }}</span>\n </div>\n </td>\n <td>\n <f-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 fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n (click)=\"onEdit(config.id)\"\n [fTooltip]=\"'shared.edit' | translate\"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"pencil\"></ui-icon>\n </button>\n <button\n fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n [disabled]=\"config.isDefault\"\n (click)=\"onDeleteConfig(config)\"\n [fTooltip]=\"\n (config.isDefault\n ? 'storage.config.default.delete.forbidden'\n : 'shared.delete'\n ) | translate\n \"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"trash\"></ui-icon>\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 </f-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 private readonly _searchTerm = signal('');\n readonly searchTerm = this._searchTerm.asReadonly();\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 const token = this.beginLoad();\n this.isLoading.set(true);\n try {\n const response = await this.configService.getAll(\n {\n pagination: this.getPaginationParams(),\n },\n this.searchTerm(),\n );\n if (!this.isLatestLoad(token)) return;\n if (response.success) {\n this.items.set(response.data ?? []);\n this.total.set(response.meta?.total ?? 0);\n }\n } catch {\n if (this.isLatestLoad(token)) {\n this.showError(\n this.translateService.translate('storage.config.load.failed'),\n );\n }\n } finally {\n if (this.isLatestLoad(token)) this.isLoading.set(false);\n }\n }\n\n onSearchChange(term: string): void {\n this._searchTerm.set(term);\n this.first.set(0);\n this.loadData();\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"],"mappings":";;;;;;;;;AAsLA,IAAa,6BAAb,MAAa,mCAAmC,oBAAmC;CACxE,6BAA6B;CAErB,gBAAgB,OAAO,uBAAuB;CAC9C,mBAAmB,OAAO,gBAAgB;CAElD,kBAAkB;CAClB,sBAAsB;CACtB,sBAAsB;CAEd,cAAc,OAAO,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,aAAa,KAAK,YAAY,WAAU;CAEjD,mBAAgB;EACd,OAAO;CACT;CAES,wBAAwB,QAAsB;EACrD,OAAO,KAAK,iBAAiB,UAAU,8BAA8B,EACnE,MAAM,OAAO,KACd,CAAA;CACH;CAEA,MAAM,WAAQ;EACZ,MAAM,QAAQ,KAAK,UAAS;EAC5B,KAAK,UAAU,IAAI,IAAI;EACvB,IAAI;GACF,MAAM,WAAW,MAAM,KAAK,cAAc,OACxC,EACE,YAAY,KAAK,oBAAmB,EACrC,GACD,KAAK,WAAU,CAAE;GAEnB,IAAI,CAAC,KAAK,aAAa,KAAK,GAAG;GAC/B,IAAI,SAAS,SAAS;IACpB,KAAK,MAAM,IAAI,SAAS,QAAQ,CAAA,CAAE;IAClC,KAAK,MAAM,IAAI,SAAS,MAAM,SAAS,CAAC;GAC1C;EACF,QAAQ;GACN,IAAI,KAAK,aAAa,KAAK,GACzB,KAAK,UACH,KAAK,iBAAiB,UAAU,4BAA4B,CAAC;EAGnE,UAAU;GACR,IAAI,KAAK,aAAa,KAAK,GAAG,KAAK,UAAU,IAAI,KAAK;EACxD;CACF;CAEA,eAAe,MAAY;EACzB,KAAK,YAAY,IAAI,IAAI;EACzB,KAAK,MAAM,IAAI,CAAC;EAChB,KAAK,SAAQ;CACf;CAEA,eAAe,QAAsB;EACnC,KAAK,cACH,SACC,MAAM,EAAE,KACR,OAAO,KAAK,cAAc,OAAO;GAAE;GAAI,MAAM;EAAQ,CAAE,GACxD,EACE,QAAQ,KAAK,iBAAiB,UAAU,6BAA6B,EACtE,CAAA;CAEL;CAhEW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAA0B,MAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAA1B,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAA0B,cAAA;EAAA,UAAA;EAAA,iBAAA;EAAA,UAAA;EAAA,UA1I3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwIT,UAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MArJC;IAAgB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAChB;IAAe,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACf;IAAkB,UAAA;IAAA,QAAA,CAAA,gBAAA,YAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAClB;IAAkB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAClB;IAAkB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAClB;IAAc,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACd;IAAY,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACZ;IAAgB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAEhB;GAAW;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,eAAA;IAAA,UAAA,CAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACX;IAAsB,UAAA;IAAA,QAAA,CAAA,eAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAFtB;IAAQ,MAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAGR;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AA4IJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA0B,YAAA,CAAA;EA1JtC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GACD,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyIX,CAAA"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-storage-config-list.component-BsKP0D_R.mjs","names":[],"sources":["../../../projects/ng-storage/pages/storage-config/storage-config-list.component.ts"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n HasPermissionDirective,\n STORAGE_CONFIG_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport {\n FButtonDirective,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\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: [\n FButtonDirective,\n UiIconComponent,\n IconFieldComponent,\n InputIconComponent,\n InputTextDirective,\n TableComponent,\n TagComponent,\n TooltipDirective,\n DatePipe,\n FormsModule,\n HasPermissionDirective,\n TranslatePipe,\n ],\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 <div\n class=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full sm:w-auto\"\n >\n <f-iconfield class=\"w-full sm:w-64\">\n <f-inputicon icon=\"search\" />\n <input\n fInputText\n type=\"text\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"onSearchChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"'shared.search' | translate\"\n class=\"w-full\"\n />\n </f-iconfield>\n <button\n fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.CREATE\"\n (click)=\"onCreate()\"\n class=\"w-full sm:w-auto\"\n >\n <ui-icon pButtonIcon name=\"plus\"></ui-icon>\n <span pButtonLabel>{{ 'storage.button.new.configuration' | translate }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-x-auto\">\n <f-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 >\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 <ui-icon [name]=\"getProviderIcon(config.storage)\"></ui-icon>\n <span class=\"truncate max-w-32 sm:max-w-none\">{{\n config.name\n }}</span>\n </div>\n </td>\n <td>\n <f-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 fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n (click)=\"onEdit(config.id)\"\n [fTooltip]=\"'shared.edit' | translate\"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"pencil\"></ui-icon>\n </button>\n <button\n fButton\n *hasPermission=\"STORAGE_CONFIG_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n [disabled]=\"config.isDefault\"\n (click)=\"onDeleteConfig(config)\"\n [fTooltip]=\"\n (config.isDefault\n ? 'storage.config.default.delete.forbidden'\n : 'shared.delete'\n ) | translate\n \"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"trash\"></ui-icon>\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 </f-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 private readonly _searchTerm = signal('');\n readonly searchTerm = this._searchTerm.asReadonly();\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 const token = this.beginLoad();\n this.isLoading.set(true);\n try {\n const response = await this.configService.getAll(\n {\n pagination: this.getPaginationParams(),\n },\n this.searchTerm(),\n );\n if (!this.isLatestLoad(token)) return;\n if (response.success) {\n this.items.set(response.data ?? []);\n this.total.set(response.meta?.total ?? 0);\n }\n } catch {\n if (this.isLatestLoad(token)) {\n this.showError(\n this.translateService.translate('storage.config.load.failed'),\n );\n }\n } finally {\n if (this.isLatestLoad(token)) this.isLoading.set(false);\n }\n }\n\n onSearchChange(term: string): void {\n this._searchTerm.set(term);\n this.first.set(0);\n this.loadData();\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"],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ var StorageContainerComponent = class StorageContainerComponent {
|
|
|
36
36
|
})), ...ngDevMode ? [{ debugName: "visibleTabs" }] : /* istanbul ignore next */ []);
|
|
37
37
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
38
38
|
minVersion: "12.0.0",
|
|
39
|
-
version: "22.2.
|
|
39
|
+
version: "22.2.2",
|
|
40
40
|
ngImport: i0,
|
|
41
41
|
type: StorageContainerComponent,
|
|
42
42
|
deps: [],
|
|
@@ -44,7 +44,7 @@ var StorageContainerComponent = class StorageContainerComponent {
|
|
|
44
44
|
});
|
|
45
45
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
46
46
|
minVersion: "14.0.0",
|
|
47
|
-
version: "22.2.
|
|
47
|
+
version: "22.2.2",
|
|
48
48
|
type: StorageContainerComponent,
|
|
49
49
|
isStandalone: true,
|
|
50
50
|
selector: "lib-storage-container",
|
|
@@ -92,7 +92,7 @@ var StorageContainerComponent = class StorageContainerComponent {
|
|
|
92
92
|
};
|
|
93
93
|
i0.ɵɵngDeclareClassMetadata({
|
|
94
94
|
minVersion: "12.0.0",
|
|
95
|
-
version: "22.2.
|
|
95
|
+
version: "22.2.2",
|
|
96
96
|
ngImport: i0,
|
|
97
97
|
type: StorageContainerComponent,
|
|
98
98
|
decorators: [{
|
|
@@ -121,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
121
121
|
});
|
|
122
122
|
export { StorageContainerComponent };
|
|
123
123
|
|
|
124
|
-
//# sourceMappingURL=flusys-ng-storage-storage-container.component-
|
|
124
|
+
//# sourceMappingURL=flusys-ng-storage-storage-container.component-ByWJLvlY.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-container.component-
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-storage-container.component-ByWJLvlY.mjs","names":[],"sources":["../../../projects/ng-storage/pages/storage-container/storage-container.component.ts"],"sourcesContent":["import { Component, computed, inject } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport {\n FILE_PERMISSIONS,\n FOLDER_PERMISSIONS,\n PermissionValidatorService,\n RouterTabItem,\n RouterTabsComponent,\n STORAGE_CONFIG_PERMISSIONS,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\n\ninterface ITab {\n id: string;\n labelKey: string;\n icon: string;\n route: string;\n permission: string;\n}\n\n/**\n * Storage Container Component\n *\n * Main container for Storage module with tab navigation\n * Routes: Files | Folders | Configurations\n * Tabs are filtered based on user permissions\n */\n@Component({\n selector: 'lib-storage-container',\n imports: [RouterOutlet, TranslatePipe, RouterTabsComponent],\n template: `\n <div class=\"p-2 sm:p-4\">\n <div class=\"mb-4\">\n <h1 class=\"text-xl sm:text-2xl font-bold m-0\">{{ 'storage.title' | translate }}</h1>\n <p class=\"text-muted-color mt-1 text-sm sm:text-base\">{{ 'storage.subtitle' | translate }}</p>\n </div>\n\n <lib-router-tabs [tabs]=\"visibleTabs()\" class=\"mb-4\" />\n\n <router-outlet />\n </div>\n `,\n})\nexport class StorageContainerComponent {\n private readonly permissionValidator = inject(PermissionValidatorService);\n private readonly translateService = inject(TranslateService);\n\n /** All available tabs with required permissions */\n private readonly allTabs: ITab[] = [\n {\n id: 'files',\n labelKey: 'storage.file.title',\n icon: 'file',\n route: 'files',\n permission: FILE_PERMISSIONS.READ,\n },\n {\n id: 'folders',\n labelKey: 'storage.folder.title',\n icon: 'folder',\n route: 'folders',\n permission: FOLDER_PERMISSIONS.READ,\n },\n {\n id: 'configs',\n labelKey: 'storage.config.title',\n icon: 'cog',\n route: 'configs',\n permission: STORAGE_CONFIG_PERMISSIONS.READ,\n },\n ];\n\n /** Visible tabs based on user permissions */\n readonly visibleTabs = computed<RouterTabItem[]>(() =>\n this.allTabs\n .filter((tab) => this.permissionValidator.hasPermission(tab.permission))\n .map((tab) => ({\n id: tab.id,\n label: this.translateService.translate(tab.labelKey),\n icon: tab.icon,\n route: tab.route,\n })),\n );\n}\n"],"mappings":";;;;AA4CA,IAAa,4BAAb,MAAa,0BAAyB;CACnB,sBAAsB,OAAO,0BAA0B;CACvD,mBAAmB,OAAO,gBAAgB;CAG1C,UAAkB;EACjC;GACE,IAAI;GACJ,UAAU;GACV,MAAM;GACN,OAAO;GACP,YAAY,iBAAiB;EAC9B;EACD;GACE,IAAI;GACJ,UAAU;GACV,MAAM;GACN,OAAO;GACP,YAAY,mBAAmB;EAChC;EACD;GACE,IAAI;GACJ,UAAU;GACV,MAAM;GACN,OAAO;GACP,YAAY,2BAA2B;EACxC;CACF;CAGQ,cAAc,eACrB,KAAK,QACF,QAAQ,QAAQ,KAAK,oBAAoB,cAAc,IAAI,UAAU,CAAC,CAAC,CACvE,KAAK,SAAS;EACb,IAAI,IAAI;EACR,OAAO,KAAK,iBAAiB,UAAU,IAAI,QAAQ;EACnD,MAAM,IAAI;EACV,OAAO,IAAI;CACZ,EAAC,GACL,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAvCU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UAb1B;;;;;;;;;;;;EAWT,UAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MAZS;IAAY,UAAA;IAAA,QAAA,CAAA,QAAA,kBAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAiB;IAAmB,UAAA;IAAA,QAAA,CAAA,MAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAlC;IAAa,MAAA;GAAA;EAAA;CAAA,CAAA;;AAc1B,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EAhBrC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,SAAS;IAAC;IAAc;IAAe;GAAmB;GAC1D,UAAU;;;;;;;;;;;;EAYX,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as FileManagerApiService } from "./flusys-ng-storage-file-manager-api.service-
|
|
1
|
+
import { t as FileManagerApiService } from "./flusys-ng-storage-file-manager-api.service-D6CGVtHb.mjs";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import { Service, inject } from "@angular/core";
|
|
4
4
|
import { BaseApiService, getDefaultStorageConfigId } from "@flusys/ng-core";
|
|
@@ -87,7 +87,7 @@ var UploadService = class UploadService extends BaseApiService {
|
|
|
87
87
|
}
|
|
88
88
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
89
89
|
minVersion: "12.0.0",
|
|
90
|
-
version: "22.2.
|
|
90
|
+
version: "22.2.2",
|
|
91
91
|
ngImport: i0,
|
|
92
92
|
type: UploadService,
|
|
93
93
|
deps: [],
|
|
@@ -95,14 +95,14 @@ var UploadService = class UploadService extends BaseApiService {
|
|
|
95
95
|
});
|
|
96
96
|
static ɵprov = i0.ɵɵngDeclareService({
|
|
97
97
|
minVersion: "22.0.0",
|
|
98
|
-
version: "22.2.
|
|
98
|
+
version: "22.2.2",
|
|
99
99
|
ngImport: i0,
|
|
100
100
|
type: UploadService
|
|
101
101
|
});
|
|
102
102
|
};
|
|
103
103
|
i0.ɵɵngDeclareClassMetadata({
|
|
104
104
|
minVersion: "12.0.0",
|
|
105
|
-
version: "22.2.
|
|
105
|
+
version: "22.2.2",
|
|
106
106
|
ngImport: i0,
|
|
107
107
|
type: UploadService,
|
|
108
108
|
decorators: [{ type: Service }],
|
|
@@ -110,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
110
110
|
});
|
|
111
111
|
export { UploadService as t };
|
|
112
112
|
|
|
113
|
-
//# sourceMappingURL=flusys-ng-storage-upload.service-
|
|
113
|
+
//# sourceMappingURL=flusys-ng-storage-upload.service-D9n8yztB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-upload.service-
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-upload.service-D9n8yztB.mjs","names":[],"sources":["../../../projects/ng-storage/services/upload.service.ts"],"sourcesContent":["import { inject, Service } from '@angular/core';\nimport { map, Observable, switchMap } from 'rxjs';\nimport { BaseApiService, getDefaultStorageConfigId } from '@flusys/ng-core';\nimport { ISingleResponse } from '@flusys/ng-shared';\nimport { IUploadOptionsDto, IUploadedFileInfo } from '../interfaces/upload.interface';\nimport { FileManagerApiService } from './file-manager-api.service';\nimport { ICreateFileManagerDto, IFileManager } from '../interfaces/file-manager.interface';\n\n/**\n * Upload Service - File upload/delete operations\n * Endpoint: POST /storage/upload/*\n */\n@Service()\nexport class UploadService extends BaseApiService {\n private readonly fileManagerApi = inject(FileManagerApiService);\n\n constructor() {\n super('storage');\n }\n\n /** Get default storage config ID from app config */\n getDefaultConfigId(): string | undefined {\n return getDefaultStorageConfigId(this.appConfig);\n }\n\n /** Upload single file - POST /storage/upload/single-file */\n uploadSingleFile(file: File, options?: IUploadOptionsDto): Observable<ISingleResponse<IUploadedFileInfo>> {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post<ISingleResponse<IUploadedFileInfo>>(this.buildUploadUrl('single-file', options), formData);\n }\n\n /** Upload multiple files (max 50) - POST /storage/upload/multiple-file */\n uploadMultipleFiles(files: File[], options?: IUploadOptionsDto): Observable<ISingleResponse<IUploadedFileInfo[]>> {\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n return this.http.post<ISingleResponse<IUploadedFileInfo[]>>(this.buildUploadUrl('multiple-file', options), formData);\n }\n\n /** Delete single file - POST /storage/upload/delete-single-file */\n deleteSingleFile(key: string, storageConfigId?: string): Observable<ISingleResponse<void>> {\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-single-file'),\n this.buildDeleteBody({ key }, storageConfigId),\n );\n }\n\n /** Delete multiple files - POST /storage/upload/delete-multiple-file */\n deleteMultipleFiles(keys: string[], storageConfigId?: string): Observable<ISingleResponse<void>> {\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-multiple-file'),\n this.buildDeleteBody({ keys }, storageConfigId),\n );\n }\n\n /** Get file download URL - GET /storage/upload/file/:filePath */\n getFileUrl(key: string): string {\n return this.getUrl(`upload/file/${key}`);\n }\n\n /** Upload file and register in file manager - returns file manager ID (UUID) */\n uploadAndRegister(\n file: File,\n options?: IUploadOptionsDto & { isPrivate?: boolean; folderId?: string },\n ): Observable<ISingleResponse<IFileManager>> {\n return this.uploadSingleFile(file, options).pipe(\n switchMap((response) => {\n if (!response.success || !response.data) {\n throw new Error(response.message || 'upload.failed');\n }\n return this.fileManagerApi.createFile(this.toCreateFileDto(response.data, options));\n }),\n );\n }\n\n /** Upload multiple files and register in file manager - batch upload (2 API calls total) */\n uploadAndRegisterMultiple(\n files: File[],\n options?: IUploadOptionsDto & { isPrivate?: boolean; folderId?: string },\n ): Observable<ISingleResponse<IFileManager[]>> {\n return this.uploadMultipleFiles(files, options).pipe(\n switchMap((response) => {\n if (!response.success || !response.data) {\n throw new Error(response.message || 'upload.failed');\n }\n const dtos = response.data.map((fileInfo) => this.toCreateFileDto(fileInfo, options));\n return this.fileManagerApi.createFiles(dtos).pipe(\n map((bulkResponse) => ({\n success: bulkResponse.success,\n data: bulkResponse.data ?? [],\n message: bulkResponse.message,\n })),\n );\n }),\n );\n }\n\n // ─── Private Helpers ───────────────────────────────────────────────────────\n\n private resolveConfigId(storageConfigId?: string): string | undefined {\n return storageConfigId ?? this.getDefaultConfigId();\n }\n\n private toCreateFileDto(\n fileInfo: IUploadedFileInfo,\n options?: { isPrivate?: boolean; folderId?: string; storageConfigId?: string },\n ): ICreateFileManagerDto {\n return {\n name: fileInfo.name,\n key: fileInfo.key,\n size: String(fileInfo.size),\n contentType: fileInfo.contentType,\n isPrivate: options?.isPrivate ?? false,\n folderId: options?.folderId,\n storageConfigId: this.resolveConfigId(options?.storageConfigId),\n };\n }\n\n private buildUploadUrl(endpoint: string, options?: IUploadOptionsDto): string {\n const params = this.buildQueryParams(options);\n const baseUrl = this.getUrl(`upload/${endpoint}`);\n return params ? `${baseUrl}?${params}` : baseUrl;\n }\n\n private buildQueryParams(options?: IUploadOptionsDto): string {\n const params = new URLSearchParams();\n const configId = this.resolveConfigId(options?.storageConfigId);\n\n if (configId) params.append('storageConfigId', configId);\n if (options?.folderPath) params.append('folderPath', options.folderPath);\n if (options?.maxWidth) params.append('maxWidth', options.maxWidth.toString());\n if (options?.maxHeight) params.append('maxHeight', options.maxHeight.toString());\n if (options?.quality) params.append('quality', options.quality.toString());\n if (options?.format) params.append('format', options.format);\n if (options?.compress !== undefined) params.append('compress', options.compress.toString());\n\n return params.toString();\n }\n\n private buildDeleteBody(data: { key?: string; keys?: string[] }, storageConfigId?: string): Record<string, unknown> {\n const configId = this.resolveConfigId(storageConfigId);\n return { ...data, ...(configId && { storageConfigId: configId }) };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as FileManagerApiService } from "./flusys-ng-storage-file-manager-api.service-
|
|
2
|
-
import { t as FolderApiService } from "./flusys-ng-storage-folder-api.service-
|
|
3
|
-
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-
|
|
4
|
-
import { t as UploadService } from "./flusys-ng-storage-upload.service-
|
|
1
|
+
import { t as FileManagerApiService } from "./flusys-ng-storage-file-manager-api.service-D6CGVtHb.mjs";
|
|
2
|
+
import { t as FolderApiService } from "./flusys-ng-storage-folder-api.service-BlQH7f29.mjs";
|
|
3
|
+
import { t as StorageConfigApiService } from "./flusys-ng-storage-storage-config-api.service-6pfK7lpy.mjs";
|
|
4
|
+
import { t as UploadService } from "./flusys-ng-storage-upload.service-D9n8yztB.mjs";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import { DestroyRef, Directive, Service, computed, inject, signal } from "@angular/core";
|
|
7
7
|
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
@@ -287,7 +287,7 @@ var BaseStoragePage = class BaseStoragePage {
|
|
|
287
287
|
}
|
|
288
288
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
289
289
|
minVersion: "12.0.0",
|
|
290
|
-
version: "22.2.
|
|
290
|
+
version: "22.2.2",
|
|
291
291
|
ngImport: i0,
|
|
292
292
|
type: BaseStoragePage,
|
|
293
293
|
deps: [],
|
|
@@ -295,7 +295,7 @@ var BaseStoragePage = class BaseStoragePage {
|
|
|
295
295
|
});
|
|
296
296
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
297
297
|
minVersion: "14.0.0",
|
|
298
|
-
version: "22.2.
|
|
298
|
+
version: "22.2.2",
|
|
299
299
|
type: BaseStoragePage,
|
|
300
300
|
isStandalone: true,
|
|
301
301
|
ngImport: i0
|
|
@@ -303,7 +303,7 @@ var BaseStoragePage = class BaseStoragePage {
|
|
|
303
303
|
};
|
|
304
304
|
i0.ɵɵngDeclareClassMetadata({
|
|
305
305
|
minVersion: "12.0.0",
|
|
306
|
-
version: "22.2.
|
|
306
|
+
version: "22.2.2",
|
|
307
307
|
ngImport: i0,
|
|
308
308
|
type: BaseStoragePage,
|
|
309
309
|
decorators: [{ type: Directive }]
|
|
@@ -417,7 +417,7 @@ var BaseStorageListPage = class BaseStorageListPage {
|
|
|
417
417
|
}
|
|
418
418
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
419
419
|
minVersion: "12.0.0",
|
|
420
|
-
version: "22.2.
|
|
420
|
+
version: "22.2.2",
|
|
421
421
|
ngImport: i0,
|
|
422
422
|
type: BaseStorageListPage,
|
|
423
423
|
deps: [],
|
|
@@ -425,7 +425,7 @@ var BaseStorageListPage = class BaseStorageListPage {
|
|
|
425
425
|
});
|
|
426
426
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
427
427
|
minVersion: "14.0.0",
|
|
428
|
-
version: "22.2.
|
|
428
|
+
version: "22.2.2",
|
|
429
429
|
type: BaseStorageListPage,
|
|
430
430
|
isStandalone: true,
|
|
431
431
|
ngImport: i0
|
|
@@ -433,7 +433,7 @@ var BaseStorageListPage = class BaseStorageListPage {
|
|
|
433
433
|
};
|
|
434
434
|
i0.ɵɵngDeclareClassMetadata({
|
|
435
435
|
minVersion: "12.0.0",
|
|
436
|
-
version: "22.2.
|
|
436
|
+
version: "22.2.2",
|
|
437
437
|
ngImport: i0,
|
|
438
438
|
type: BaseStorageListPage,
|
|
439
439
|
decorators: [{ type: Directive }]
|
|
@@ -529,7 +529,7 @@ var FileProviderAdapter = class FileProviderAdapter {
|
|
|
529
529
|
});
|
|
530
530
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
531
531
|
minVersion: "12.0.0",
|
|
532
|
-
version: "22.2.
|
|
532
|
+
version: "22.2.2",
|
|
533
533
|
ngImport: i0,
|
|
534
534
|
type: FileProviderAdapter,
|
|
535
535
|
deps: [],
|
|
@@ -537,7 +537,7 @@ var FileProviderAdapter = class FileProviderAdapter {
|
|
|
537
537
|
});
|
|
538
538
|
static ɵprov = i0.ɵɵngDeclareService({
|
|
539
539
|
minVersion: "22.0.0",
|
|
540
|
-
version: "22.2.
|
|
540
|
+
version: "22.2.2",
|
|
541
541
|
ngImport: i0,
|
|
542
542
|
type: FileProviderAdapter,
|
|
543
543
|
autoProvided: false
|
|
@@ -545,7 +545,7 @@ var FileProviderAdapter = class FileProviderAdapter {
|
|
|
545
545
|
};
|
|
546
546
|
i0.ɵɵngDeclareClassMetadata({
|
|
547
547
|
minVersion: "12.0.0",
|
|
548
|
-
version: "22.2.
|
|
548
|
+
version: "22.2.2",
|
|
549
549
|
ngImport: i0,
|
|
550
550
|
type: FileProviderAdapter,
|
|
551
551
|
decorators: [{
|
|
@@ -575,7 +575,7 @@ const STORAGE_ROUTES = [{
|
|
|
575
575
|
...SHARED_MESSAGES
|
|
576
576
|
}
|
|
577
577
|
}) },
|
|
578
|
-
loadComponent: () => import("./flusys-ng-storage-storage-container.component-
|
|
578
|
+
loadComponent: () => import("./flusys-ng-storage-storage-container.component-ByWJLvlY.mjs").then((m) => m.StorageContainerComponent),
|
|
579
579
|
children: [
|
|
580
580
|
{
|
|
581
581
|
path: "files",
|
|
@@ -583,17 +583,17 @@ const STORAGE_ROUTES = [{
|
|
|
583
583
|
children: [
|
|
584
584
|
{
|
|
585
585
|
path: "",
|
|
586
|
-
loadComponent: () => import("./flusys-ng-storage-file-manager-list.component-
|
|
586
|
+
loadComponent: () => import("./flusys-ng-storage-file-manager-list.component-DAYXDYUX.mjs").then((m) => m.FileManagerListComponent)
|
|
587
587
|
},
|
|
588
588
|
{
|
|
589
589
|
path: "new",
|
|
590
590
|
canActivate: [permissionGuard(FILE_PERMISSIONS.CREATE)],
|
|
591
|
-
loadComponent: () => import("./flusys-ng-storage-file-manager-form.component-
|
|
591
|
+
loadComponent: () => import("./flusys-ng-storage-file-manager-form.component-CWpPnWXB.mjs").then((m) => m.FileManagerFormComponent)
|
|
592
592
|
},
|
|
593
593
|
{
|
|
594
594
|
path: ":id",
|
|
595
595
|
canActivate: [permissionGuard(FILE_PERMISSIONS.UPDATE)],
|
|
596
|
-
loadComponent: () => import("./flusys-ng-storage-file-manager-form.component-
|
|
596
|
+
loadComponent: () => import("./flusys-ng-storage-file-manager-form.component-CWpPnWXB.mjs").then((m) => m.FileManagerFormComponent)
|
|
597
597
|
}
|
|
598
598
|
]
|
|
599
599
|
},
|
|
@@ -603,17 +603,17 @@ const STORAGE_ROUTES = [{
|
|
|
603
603
|
children: [
|
|
604
604
|
{
|
|
605
605
|
path: "",
|
|
606
|
-
loadComponent: () => import("./flusys-ng-storage-folder-list.component-
|
|
606
|
+
loadComponent: () => import("./flusys-ng-storage-folder-list.component-JBDc-7tx.mjs").then((m) => m.FolderListComponent)
|
|
607
607
|
},
|
|
608
608
|
{
|
|
609
609
|
path: "new",
|
|
610
610
|
canActivate: [permissionGuard(FOLDER_PERMISSIONS.CREATE)],
|
|
611
|
-
loadComponent: () => import("./flusys-ng-storage-folder-form.component-
|
|
611
|
+
loadComponent: () => import("./flusys-ng-storage-folder-form.component-C721Ej1L.mjs").then((m) => m.FolderFormComponent)
|
|
612
612
|
},
|
|
613
613
|
{
|
|
614
614
|
path: ":id",
|
|
615
615
|
canActivate: [permissionGuard(FOLDER_PERMISSIONS.UPDATE)],
|
|
616
|
-
loadComponent: () => import("./flusys-ng-storage-folder-form.component-
|
|
616
|
+
loadComponent: () => import("./flusys-ng-storage-folder-form.component-C721Ej1L.mjs").then((m) => m.FolderFormComponent)
|
|
617
617
|
}
|
|
618
618
|
]
|
|
619
619
|
},
|
|
@@ -623,17 +623,17 @@ const STORAGE_ROUTES = [{
|
|
|
623
623
|
children: [
|
|
624
624
|
{
|
|
625
625
|
path: "",
|
|
626
|
-
loadComponent: () => import("./flusys-ng-storage-storage-config-list.component-
|
|
626
|
+
loadComponent: () => import("./flusys-ng-storage-storage-config-list.component-BsKP0D_R.mjs").then((m) => m.StorageConfigListComponent)
|
|
627
627
|
},
|
|
628
628
|
{
|
|
629
629
|
path: "new",
|
|
630
630
|
canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.CREATE)],
|
|
631
|
-
loadComponent: () => import("./flusys-ng-storage-storage-config-form.component-
|
|
631
|
+
loadComponent: () => import("./flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs").then((m) => m.StorageConfigFormComponent)
|
|
632
632
|
},
|
|
633
633
|
{
|
|
634
634
|
path: ":id",
|
|
635
635
|
canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.UPDATE)],
|
|
636
|
-
loadComponent: () => import("./flusys-ng-storage-storage-config-form.component-
|
|
636
|
+
loadComponent: () => import("./flusys-ng-storage-storage-config-form.component-RLN7RBa3.mjs").then((m) => m.StorageConfigFormComponent)
|
|
637
637
|
}
|
|
638
638
|
]
|
|
639
639
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flusys/ng-storage",
|
|
3
|
-
"version": "9.2.
|
|
3
|
+
"version": "9.2.2",
|
|
4
4
|
"description": "File storage module for FLUSYS Angular applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"@angular/core": ">=22.0.0",
|
|
9
9
|
"@angular/forms": ">=22.0.0",
|
|
10
10
|
"@angular/router": ">=22.0.0",
|
|
11
|
-
"@flusys/ng-core": ">=9.2.
|
|
12
|
-
"@flusys/ng-layout": ">=9.2.
|
|
13
|
-
"@flusys/ng-shared": ">=9.2.
|
|
14
|
-
"@flusys/ng-ui": ">=9.2.
|
|
11
|
+
"@flusys/ng-core": ">=9.2.2",
|
|
12
|
+
"@flusys/ng-layout": ">=9.2.2",
|
|
13
|
+
"@flusys/ng-shared": ">=9.2.2",
|
|
14
|
+
"@flusys/ng-ui": ">=9.2.2",
|
|
15
15
|
"rxjs": "^7.8.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|