@flusys/ng-storage 9.1.0-rc.1 → 9.1.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.
Files changed (33) hide show
  1. package/fesm2022/flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs +43 -0
  2. package/fesm2022/flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-storage-file-manager-form.component-DaO-9wKM.mjs → flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs} +411 -231
  4. package/fesm2022/flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-storage-file-manager-list.component-a7YHw1Gz.mjs → flusys-ng-storage-file-manager-list.component-4_LdJOtH.mjs} +355 -145
  6. package/fesm2022/flusys-ng-storage-file-manager-list.component-4_LdJOtH.mjs.map +1 -0
  7. package/fesm2022/flusys-ng-storage-folder-api.service-D_fFEuO6.mjs +33 -0
  8. package/fesm2022/flusys-ng-storage-folder-api.service-D_fFEuO6.mjs.map +1 -0
  9. package/fesm2022/flusys-ng-storage-folder-form.component-7C2oWijb.mjs +298 -0
  10. package/fesm2022/flusys-ng-storage-folder-form.component-7C2oWijb.mjs.map +1 -0
  11. package/fesm2022/{flusys-ng-storage-folder-list.component-BDrBAcCS.mjs → flusys-ng-storage-folder-list.component-BdSBM_DB.mjs} +284 -77
  12. package/fesm2022/flusys-ng-storage-folder-list.component-BdSBM_DB.mjs.map +1 -0
  13. package/fesm2022/flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs +33 -0
  14. package/fesm2022/flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs.map +1 -0
  15. package/fesm2022/{flusys-ng-storage-storage-config-form.component-B4wBfzVs.mjs → flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs} +369 -214
  16. package/fesm2022/flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs.map +1 -0
  17. package/fesm2022/{flusys-ng-storage-storage-config-list.component-CCkZY--j.mjs → flusys-ng-storage-storage-config-list.component-Dh9JkuZP.mjs} +303 -83
  18. package/fesm2022/flusys-ng-storage-storage-config-list.component-Dh9JkuZP.mjs.map +1 -0
  19. package/fesm2022/flusys-ng-storage-storage-container.component-EWGNoozU.mjs +124 -0
  20. package/fesm2022/flusys-ng-storage-storage-container.component-EWGNoozU.mjs.map +1 -0
  21. package/fesm2022/flusys-ng-storage-upload.service-CIcEL_Kr.mjs +113 -0
  22. package/fesm2022/flusys-ng-storage-upload.service-CIcEL_Kr.mjs.map +1 -0
  23. package/fesm2022/flusys-ng-storage.mjs +611 -876
  24. package/fesm2022/flusys-ng-storage.mjs.map +1 -1
  25. package/package.json +5 -5
  26. package/types/flusys-ng-storage.d.ts +254 -292
  27. package/fesm2022/flusys-ng-storage-file-manager-form.component-DaO-9wKM.mjs.map +0 -1
  28. package/fesm2022/flusys-ng-storage-file-manager-list.component-a7YHw1Gz.mjs.map +0 -1
  29. package/fesm2022/flusys-ng-storage-folder-form.component-BCzVzmRn.mjs +0 -225
  30. package/fesm2022/flusys-ng-storage-folder-form.component-BCzVzmRn.mjs.map +0 -1
  31. package/fesm2022/flusys-ng-storage-folder-list.component-BDrBAcCS.mjs.map +0 -1
  32. package/fesm2022/flusys-ng-storage-storage-config-form.component-B4wBfzVs.mjs.map +0 -1
  33. package/fesm2022/flusys-ng-storage-storage-config-list.component-CCkZY--j.mjs.map +0 -1
@@ -0,0 +1,113 @@
1
+ import { t as FileManagerApiService } from "./flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Service, inject } from "@angular/core";
4
+ import { BaseApiService, getDefaultStorageConfigId } from "@flusys/ng-core";
5
+ import { map, switchMap } from "rxjs";
6
+ var UploadService = class UploadService extends BaseApiService {
7
+ fileManagerApi = inject(FileManagerApiService);
8
+ constructor() {
9
+ super("storage");
10
+ }
11
+ getDefaultConfigId() {
12
+ return getDefaultStorageConfigId(this.appConfig);
13
+ }
14
+ uploadSingleFile(file, options) {
15
+ const formData = new FormData();
16
+ formData.append("file", file);
17
+ return this.http.post(this.buildUploadUrl("single-file", options), formData);
18
+ }
19
+ uploadMultipleFiles(files, options) {
20
+ const formData = new FormData();
21
+ files.forEach((file) => formData.append("files", file));
22
+ return this.http.post(this.buildUploadUrl("multiple-file", options), formData);
23
+ }
24
+ deleteSingleFile(key, storageConfigId) {
25
+ return this.http.post(this.getUrl("upload/delete-single-file"), this.buildDeleteBody({ key }, storageConfigId));
26
+ }
27
+ deleteMultipleFiles(keys, storageConfigId) {
28
+ return this.http.post(this.getUrl("upload/delete-multiple-file"), this.buildDeleteBody({ keys }, storageConfigId));
29
+ }
30
+ getFileUrl(key) {
31
+ return this.getUrl(`upload/file/${key}`);
32
+ }
33
+ uploadAndRegister(file, options) {
34
+ return this.uploadSingleFile(file, options).pipe(switchMap((response) => {
35
+ if (!response.success || !response.data) throw new Error(response.message || "upload.failed");
36
+ return this.fileManagerApi.createFile(this.toCreateFileDto(response.data, options));
37
+ }));
38
+ }
39
+ uploadAndRegisterMultiple(files, options) {
40
+ return this.uploadMultipleFiles(files, options).pipe(switchMap((response) => {
41
+ if (!response.success || !response.data) throw new Error(response.message || "upload.failed");
42
+ const dtos = response.data.map((fileInfo) => this.toCreateFileDto(fileInfo, options));
43
+ return this.fileManagerApi.createFiles(dtos).pipe(map((bulkResponse) => ({
44
+ success: bulkResponse.success,
45
+ data: bulkResponse.data ?? [],
46
+ message: bulkResponse.message
47
+ })));
48
+ }));
49
+ }
50
+ resolveConfigId(storageConfigId) {
51
+ return storageConfigId ?? this.getDefaultConfigId();
52
+ }
53
+ toCreateFileDto(fileInfo, options) {
54
+ return {
55
+ name: fileInfo.name,
56
+ key: fileInfo.key,
57
+ size: String(fileInfo.size),
58
+ contentType: fileInfo.contentType,
59
+ isPrivate: options?.isPrivate ?? false,
60
+ folderId: options?.folderId,
61
+ storageConfigId: this.resolveConfigId(options?.storageConfigId)
62
+ };
63
+ }
64
+ buildUploadUrl(endpoint, options) {
65
+ const params = this.buildQueryParams(options);
66
+ const baseUrl = this.getUrl(`upload/${endpoint}`);
67
+ return params ? `${baseUrl}?${params}` : baseUrl;
68
+ }
69
+ buildQueryParams(options) {
70
+ const params = new URLSearchParams();
71
+ const configId = this.resolveConfigId(options?.storageConfigId);
72
+ if (configId) params.append("storageConfigId", configId);
73
+ if (options?.folderPath) params.append("folderPath", options.folderPath);
74
+ if (options?.maxWidth) params.append("maxWidth", options.maxWidth.toString());
75
+ if (options?.maxHeight) params.append("maxHeight", options.maxHeight.toString());
76
+ if (options?.quality) params.append("quality", options.quality.toString());
77
+ if (options?.format) params.append("format", options.format);
78
+ if (options?.compress !== void 0) params.append("compress", options.compress.toString());
79
+ return params.toString();
80
+ }
81
+ buildDeleteBody(data, storageConfigId) {
82
+ const configId = this.resolveConfigId(storageConfigId);
83
+ return {
84
+ ...data,
85
+ ...configId && { storageConfigId: configId }
86
+ };
87
+ }
88
+ static ɵfac = i0.ɵɵngDeclareFactory({
89
+ minVersion: "12.0.0",
90
+ version: "22.2.1",
91
+ ngImport: i0,
92
+ type: UploadService,
93
+ deps: [],
94
+ target: i0.ɵɵFactoryTarget.Service
95
+ });
96
+ static ɵprov = i0.ɵɵngDeclareService({
97
+ minVersion: "22.0.0",
98
+ version: "22.2.1",
99
+ ngImport: i0,
100
+ type: UploadService
101
+ });
102
+ };
103
+ i0.ɵɵngDeclareClassMetadata({
104
+ minVersion: "12.0.0",
105
+ version: "22.2.1",
106
+ ngImport: i0,
107
+ type: UploadService,
108
+ decorators: [{ type: Service }],
109
+ ctorParameters: () => []
110
+ });
111
+ export { UploadService as t };
112
+
113
+ //# sourceMappingURL=flusys-ng-storage-upload.service-CIcEL_Kr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusys-ng-storage-upload.service-CIcEL_Kr.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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"}