@flusys/ng-storage 1.0.0-beta → 1.1.0-beta
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 +68 -1
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-DVZsFYrj.mjs → flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-DVZsFYrj.mjs.map → flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-CwnyNoYb.mjs → flusys-ng-storage-file-manager-list.component-BevfDZO0.mjs} +6 -6
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-CwnyNoYb.mjs.map → flusys-ng-storage-file-manager-list.component-BevfDZO0.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-form.component-DH-KCz21.mjs → flusys-ng-storage-folder-form.component-BhurG3dl.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-folder-form.component-DH-KCz21.mjs.map → flusys-ng-storage-folder-form.component-BhurG3dl.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-folder-list.component-iIys4NvL.mjs → flusys-ng-storage-folder-list.component-Clrjcw0B.mjs} +4 -4
- package/fesm2022/{flusys-ng-storage-folder-list.component-iIys4NvL.mjs.map → flusys-ng-storage-folder-list.component-Clrjcw0B.mjs.map} +1 -1
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-Bc95TVD0.mjs → flusys-ng-storage-storage-config-form.component-SEYIBife.mjs} +37 -4
- package/fesm2022/flusys-ng-storage-storage-config-form.component-SEYIBife.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-Bfomqyr3.mjs → flusys-ng-storage-storage-config-list.component-CofVBysj.mjs} +5 -5
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-Bfomqyr3.mjs.map → flusys-ng-storage-storage-config-list.component-CofVBysj.mjs.map} +1 -1
- package/fesm2022/flusys-ng-storage.mjs +191 -70
- package/fesm2022/flusys-ng-storage.mjs.map +1 -1
- package/package.json +4 -4
- package/types/flusys-ng-storage.d.ts +77 -4
- package/fesm2022/flusys-ng-storage-storage-config-form.component-Bc95TVD0.mjs.map +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable, Component } from '@angular/core';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import { switchMap } from 'rxjs';
|
|
5
|
+
import { BaseApiService, getDefaultStorageConfigId } from '@flusys/ng-core';
|
|
3
6
|
import { HttpClient } from '@angular/common/http';
|
|
4
|
-
import { ApiResourceService } from '@flusys/ng-shared';
|
|
5
|
-
import { BaseApiService } from '@flusys/ng-core';
|
|
7
|
+
import { ApiResourceService, PROFILE_UPLOAD_PROVIDER } from '@flusys/ng-shared';
|
|
6
8
|
import { CommonModule } from '@angular/common';
|
|
7
9
|
import { RouterOutlet, RouterLink, RouterLinkActive } from '@angular/router';
|
|
8
10
|
|
|
@@ -76,6 +78,13 @@ class FileManagerApiService extends ApiResourceService {
|
|
|
76
78
|
sort: {},
|
|
77
79
|
});
|
|
78
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Create new file manager record
|
|
83
|
+
* POST /storage/file-manager/insert
|
|
84
|
+
*/
|
|
85
|
+
create(dto) {
|
|
86
|
+
return this.http.post(`${this.baseUrl}/insert`, dto);
|
|
87
|
+
}
|
|
79
88
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FileManagerApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
80
89
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FileManagerApiService, providedIn: 'root' });
|
|
81
90
|
}
|
|
@@ -86,50 +95,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
86
95
|
}]
|
|
87
96
|
}], ctorParameters: () => [] });
|
|
88
97
|
|
|
89
|
-
/**
|
|
90
|
-
* Folder API Service
|
|
91
|
-
* Handles folder CRUD operations
|
|
92
|
-
* Endpoint: POST /storage/folder/*
|
|
93
|
-
*
|
|
94
|
-
* Note: Company feature enabled - all queries automatically scoped to user's company
|
|
95
|
-
*/
|
|
96
|
-
class FolderApiService extends ApiResourceService {
|
|
97
|
-
constructor() {
|
|
98
|
-
const http = inject(HttpClient);
|
|
99
|
-
super('storage/folder', http);
|
|
100
|
-
}
|
|
101
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
102
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, providedIn: 'root' });
|
|
103
|
-
}
|
|
104
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, decorators: [{
|
|
105
|
-
type: Injectable,
|
|
106
|
-
args: [{
|
|
107
|
-
providedIn: 'root',
|
|
108
|
-
}]
|
|
109
|
-
}], ctorParameters: () => [] });
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Storage Config API Service
|
|
113
|
-
* Handles storage configuration CRUD operations
|
|
114
|
-
* Endpoint: POST /storage/storage-config/*
|
|
115
|
-
*
|
|
116
|
-
* Note: Company feature enabled - all queries automatically scoped to user's company
|
|
117
|
-
*/
|
|
118
|
-
class StorageConfigApiService extends ApiResourceService {
|
|
119
|
-
constructor() {
|
|
120
|
-
const http = inject(HttpClient);
|
|
121
|
-
super('storage/storage-config', http);
|
|
122
|
-
}
|
|
123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
124
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, providedIn: 'root' });
|
|
125
|
-
}
|
|
126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, decorators: [{
|
|
127
|
-
type: Injectable,
|
|
128
|
-
args: [{
|
|
129
|
-
providedIn: 'root',
|
|
130
|
-
}]
|
|
131
|
-
}], ctorParameters: () => [] });
|
|
132
|
-
|
|
133
98
|
/**
|
|
134
99
|
* Upload Service
|
|
135
100
|
* Handles file upload/delete operations
|
|
@@ -140,11 +105,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
140
105
|
* - Image compression
|
|
141
106
|
* - Multiple storage providers
|
|
142
107
|
* - File validation (size, type)
|
|
108
|
+
* - Default storage config from environment (services.storage.defaultStorageConfigId)
|
|
143
109
|
*/
|
|
144
110
|
class UploadService extends BaseApiService {
|
|
111
|
+
fileManagerApi = inject(FileManagerApiService);
|
|
145
112
|
constructor() {
|
|
146
113
|
super('storage');
|
|
147
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Get default storage config ID from app config
|
|
117
|
+
* Used when no storageConfigId is provided in upload options
|
|
118
|
+
*/
|
|
119
|
+
getDefaultConfigId() {
|
|
120
|
+
return getDefaultStorageConfigId(this.appConfig);
|
|
121
|
+
}
|
|
148
122
|
/**
|
|
149
123
|
* Upload single file
|
|
150
124
|
* POST /storage/upload/single-file?storageConfigId=x&folderPath=y
|
|
@@ -179,24 +153,25 @@ class UploadService extends BaseApiService {
|
|
|
179
153
|
}
|
|
180
154
|
/**
|
|
181
155
|
* Build query string from upload options
|
|
156
|
+
* Uses default storageConfigId from app config if not provided in options
|
|
182
157
|
*/
|
|
183
158
|
buildQueryParams(options) {
|
|
184
|
-
if (!options)
|
|
185
|
-
return '';
|
|
186
159
|
const params = new URLSearchParams();
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (
|
|
160
|
+
// Use provided storageConfigId or fall back to default from config
|
|
161
|
+
const storageConfigId = options?.storageConfigId ?? this.getDefaultConfigId();
|
|
162
|
+
if (storageConfigId)
|
|
163
|
+
params.append('storageConfigId', storageConfigId);
|
|
164
|
+
if (options?.folderPath)
|
|
190
165
|
params.append('folderPath', options.folderPath);
|
|
191
|
-
if (options
|
|
166
|
+
if (options?.maxWidth)
|
|
192
167
|
params.append('maxWidth', options.maxWidth.toString());
|
|
193
|
-
if (options
|
|
168
|
+
if (options?.maxHeight)
|
|
194
169
|
params.append('maxHeight', options.maxHeight.toString());
|
|
195
|
-
if (options
|
|
170
|
+
if (options?.quality)
|
|
196
171
|
params.append('quality', options.quality.toString());
|
|
197
|
-
if (options
|
|
172
|
+
if (options?.format)
|
|
198
173
|
params.append('format', options.format);
|
|
199
|
-
if (options
|
|
174
|
+
if (options?.compress !== undefined)
|
|
200
175
|
params.append('compress', options.compress.toString());
|
|
201
176
|
return params.toString();
|
|
202
177
|
}
|
|
@@ -205,20 +180,22 @@ class UploadService extends BaseApiService {
|
|
|
205
180
|
* POST /storage/upload/delete-single-file
|
|
206
181
|
*
|
|
207
182
|
* @param key - File key/path to delete
|
|
208
|
-
* @param storageConfigId - Optional storage config ID (uses default if not provided)
|
|
183
|
+
* @param storageConfigId - Optional storage config ID (uses default from config if not provided)
|
|
209
184
|
*/
|
|
210
185
|
deleteSingleFile(key, storageConfigId) {
|
|
211
|
-
|
|
186
|
+
const configId = storageConfigId ?? this.getDefaultConfigId();
|
|
187
|
+
return this.http.post(this.getUrl('upload/delete-single-file'), { key, ...(configId && { storageConfigId: configId }) });
|
|
212
188
|
}
|
|
213
189
|
/**
|
|
214
190
|
* Delete multiple files
|
|
215
191
|
* POST /storage/upload/delete-multiple-file
|
|
216
192
|
*
|
|
217
193
|
* @param keys - Array of file keys/paths to delete
|
|
218
|
-
* @param storageConfigId - Optional storage config ID (uses default if not provided)
|
|
194
|
+
* @param storageConfigId - Optional storage config ID (uses default from config if not provided)
|
|
219
195
|
*/
|
|
220
196
|
deleteMultipleFiles(keys, storageConfigId) {
|
|
221
|
-
|
|
197
|
+
const configId = storageConfigId ?? this.getDefaultConfigId();
|
|
198
|
+
return this.http.post(this.getUrl('upload/delete-multiple-file'), { keys, ...(configId && { storageConfigId: configId }) });
|
|
222
199
|
}
|
|
223
200
|
/**
|
|
224
201
|
* Get file download URL
|
|
@@ -230,6 +207,34 @@ class UploadService extends BaseApiService {
|
|
|
230
207
|
getFileUrl(key) {
|
|
231
208
|
return this.getUrl(`upload/file/${key}`);
|
|
232
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Upload file and register in file manager
|
|
212
|
+
* Returns file manager ID (UUID) for storing in references like profilePictureId
|
|
213
|
+
*
|
|
214
|
+
* @param file - File to upload
|
|
215
|
+
* @param options - Upload options (storage config, compression, etc.)
|
|
216
|
+
* @returns Observable with file manager record (id is the UUID to store)
|
|
217
|
+
*/
|
|
218
|
+
uploadAndRegister(file, options) {
|
|
219
|
+
return this.uploadSingleFile(file, options).pipe(switchMap((uploadResponse) => {
|
|
220
|
+
if (!uploadResponse.success || !uploadResponse.data) {
|
|
221
|
+
throw new Error(uploadResponse.message || 'Upload failed');
|
|
222
|
+
}
|
|
223
|
+
const uploadedFile = uploadResponse.data;
|
|
224
|
+
const storageConfigId = options?.storageConfigId ?? this.getDefaultConfigId();
|
|
225
|
+
// Create file manager record
|
|
226
|
+
return this.fileManagerApi.create({
|
|
227
|
+
name: uploadedFile.name,
|
|
228
|
+
key: uploadedFile.key,
|
|
229
|
+
size: String(uploadedFile.size),
|
|
230
|
+
contentType: uploadedFile.contentType,
|
|
231
|
+
isPrivate: options?.isPrivate ?? false,
|
|
232
|
+
folderId: options?.folderId,
|
|
233
|
+
storageConfigId,
|
|
234
|
+
location: FileLocationEnum.LOCAL,
|
|
235
|
+
});
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
233
238
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
234
239
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UploadService, providedIn: 'root' });
|
|
235
240
|
}
|
|
@@ -240,6 +245,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
240
245
|
}]
|
|
241
246
|
}], ctorParameters: () => [] });
|
|
242
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Profile Upload Provider Adapter
|
|
250
|
+
*
|
|
251
|
+
* Implements IProfileUploadProvider interface for ng-auth profile page.
|
|
252
|
+
* Uses UploadService.uploadAndRegister() to upload files and register in file manager.
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* // In app.config.ts
|
|
256
|
+
* providers: [
|
|
257
|
+
* ...provideStorageProviders(),
|
|
258
|
+
* ]
|
|
259
|
+
*/
|
|
260
|
+
class ProfileUploadProviderAdapter {
|
|
261
|
+
uploadService = inject(UploadService);
|
|
262
|
+
/**
|
|
263
|
+
* Upload profile picture and register in file manager
|
|
264
|
+
* Returns file manager ID (UUID) for storing in user.profilePictureId
|
|
265
|
+
*/
|
|
266
|
+
uploadProfilePicture(file, options) {
|
|
267
|
+
return this.uploadService
|
|
268
|
+
.uploadAndRegister(file, {
|
|
269
|
+
folderPath: options?.folderPath ?? 'profile-pictures',
|
|
270
|
+
compress: options?.compress ?? true,
|
|
271
|
+
maxWidth: options?.maxWidth ?? 400,
|
|
272
|
+
maxHeight: options?.maxHeight ?? 400,
|
|
273
|
+
})
|
|
274
|
+
.pipe(map((response) => ({
|
|
275
|
+
success: response.success,
|
|
276
|
+
message: response.message,
|
|
277
|
+
data: response.data
|
|
278
|
+
? {
|
|
279
|
+
id: response.data.id,
|
|
280
|
+
name: response.data.name,
|
|
281
|
+
key: response.data.key,
|
|
282
|
+
size: parseFloat(response.data.size) * 1024, // Convert KB to bytes
|
|
283
|
+
contentType: response.data.contentType,
|
|
284
|
+
}
|
|
285
|
+
: undefined,
|
|
286
|
+
})));
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ProfileUploadProviderAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
289
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ProfileUploadProviderAdapter });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ProfileUploadProviderAdapter, decorators: [{
|
|
292
|
+
type: Injectable
|
|
293
|
+
}] });
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Provide Storage Providers
|
|
297
|
+
*
|
|
298
|
+
* Registers storage-related provider implementations.
|
|
299
|
+
* Call this in app.config.ts to enable storage features in other packages.
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* // In app.config.ts
|
|
303
|
+
* export const appConfig: ApplicationConfig = {
|
|
304
|
+
* providers: [
|
|
305
|
+
* ...provideStorageProviders(),
|
|
306
|
+
* ],
|
|
307
|
+
* };
|
|
308
|
+
*
|
|
309
|
+
* @returns Array of providers for storage functionality
|
|
310
|
+
*/
|
|
311
|
+
function provideStorageProviders() {
|
|
312
|
+
return [
|
|
313
|
+
{
|
|
314
|
+
provide: PROFILE_UPLOAD_PROVIDER,
|
|
315
|
+
useClass: ProfileUploadProviderAdapter,
|
|
316
|
+
},
|
|
317
|
+
];
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Folder API Service
|
|
322
|
+
* Handles folder CRUD operations
|
|
323
|
+
* Endpoint: POST /storage/folder/*
|
|
324
|
+
*
|
|
325
|
+
* Note: Company feature enabled - all queries automatically scoped to user's company
|
|
326
|
+
*/
|
|
327
|
+
class FolderApiService extends ApiResourceService {
|
|
328
|
+
constructor() {
|
|
329
|
+
const http = inject(HttpClient);
|
|
330
|
+
super('storage/folder', http);
|
|
331
|
+
}
|
|
332
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
333
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, providedIn: 'root' });
|
|
334
|
+
}
|
|
335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: FolderApiService, decorators: [{
|
|
336
|
+
type: Injectable,
|
|
337
|
+
args: [{
|
|
338
|
+
providedIn: 'root',
|
|
339
|
+
}]
|
|
340
|
+
}], ctorParameters: () => [] });
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Storage Config API Service
|
|
344
|
+
* Handles storage configuration CRUD operations
|
|
345
|
+
* Endpoint: POST /storage/storage-config/*
|
|
346
|
+
*
|
|
347
|
+
* Note: Company feature enabled - all queries automatically scoped to user's company
|
|
348
|
+
*/
|
|
349
|
+
class StorageConfigApiService extends ApiResourceService {
|
|
350
|
+
constructor() {
|
|
351
|
+
const http = inject(HttpClient);
|
|
352
|
+
super('storage/storage-config', http);
|
|
353
|
+
}
|
|
354
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
355
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, providedIn: 'root' });
|
|
356
|
+
}
|
|
357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigApiService, decorators: [{
|
|
358
|
+
type: Injectable,
|
|
359
|
+
args: [{
|
|
360
|
+
providedIn: 'root',
|
|
361
|
+
}]
|
|
362
|
+
}], ctorParameters: () => [] });
|
|
363
|
+
|
|
243
364
|
/**
|
|
244
365
|
* Storage Module Routes
|
|
245
366
|
* All storage management routes: configs, files, folders
|
|
@@ -257,15 +378,15 @@ const STORAGE_ROUTES = [
|
|
|
257
378
|
children: [
|
|
258
379
|
{
|
|
259
380
|
path: '',
|
|
260
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-
|
|
381
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-BevfDZO0.mjs').then((m) => m.FileManagerListComponent),
|
|
261
382
|
},
|
|
262
383
|
{
|
|
263
384
|
path: 'new',
|
|
264
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-
|
|
385
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs').then((m) => m.FileManagerFormComponent),
|
|
265
386
|
},
|
|
266
387
|
{
|
|
267
388
|
path: ':id',
|
|
268
|
-
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-
|
|
389
|
+
loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs').then((m) => m.FileManagerFormComponent),
|
|
269
390
|
},
|
|
270
391
|
],
|
|
271
392
|
},
|
|
@@ -275,15 +396,15 @@ const STORAGE_ROUTES = [
|
|
|
275
396
|
children: [
|
|
276
397
|
{
|
|
277
398
|
path: '',
|
|
278
|
-
loadComponent: () => import('./flusys-ng-storage-folder-list.component-
|
|
399
|
+
loadComponent: () => import('./flusys-ng-storage-folder-list.component-Clrjcw0B.mjs').then((m) => m.FolderListComponent),
|
|
279
400
|
},
|
|
280
401
|
{
|
|
281
402
|
path: 'new',
|
|
282
|
-
loadComponent: () => import('./flusys-ng-storage-folder-form.component-
|
|
403
|
+
loadComponent: () => import('./flusys-ng-storage-folder-form.component-BhurG3dl.mjs').then((m) => m.FolderFormComponent),
|
|
283
404
|
},
|
|
284
405
|
{
|
|
285
406
|
path: ':id',
|
|
286
|
-
loadComponent: () => import('./flusys-ng-storage-folder-form.component-
|
|
407
|
+
loadComponent: () => import('./flusys-ng-storage-folder-form.component-BhurG3dl.mjs').then((m) => m.FolderFormComponent),
|
|
287
408
|
},
|
|
288
409
|
],
|
|
289
410
|
},
|
|
@@ -293,15 +414,15 @@ const STORAGE_ROUTES = [
|
|
|
293
414
|
children: [
|
|
294
415
|
{
|
|
295
416
|
path: '',
|
|
296
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-
|
|
417
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-CofVBysj.mjs').then((m) => m.StorageConfigListComponent),
|
|
297
418
|
},
|
|
298
419
|
{
|
|
299
420
|
path: 'new',
|
|
300
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-
|
|
421
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-SEYIBife.mjs').then((m) => m.StorageConfigFormComponent),
|
|
301
422
|
},
|
|
302
423
|
{
|
|
303
424
|
path: ':id',
|
|
304
|
-
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-
|
|
425
|
+
loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-SEYIBife.mjs').then((m) => m.StorageConfigFormComponent),
|
|
305
426
|
},
|
|
306
427
|
],
|
|
307
428
|
},
|
|
@@ -411,5 +532,5 @@ var storageContainer_component = /*#__PURE__*/Object.freeze({
|
|
|
411
532
|
* Generated bundle index. Do not edit.
|
|
412
533
|
*/
|
|
413
534
|
|
|
414
|
-
export { FileLocationEnum, FileManagerApiService, FolderApiService, ImageFormat, STORAGE_ROUTES, StorageConfigApiService, StorageContainerComponent, UploadService };
|
|
535
|
+
export { FileLocationEnum, FileManagerApiService, FolderApiService, ImageFormat, ProfileUploadProviderAdapter, STORAGE_ROUTES, StorageConfigApiService, StorageContainerComponent, UploadService, provideStorageProviders };
|
|
415
536
|
//# sourceMappingURL=flusys-ng-storage.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage.mjs","sources":["../../../projects/ng-storage/enums/file-location.enum.ts","../../../projects/ng-storage/services/file-manager-api.service.ts","../../../projects/ng-storage/services/folder-api.service.ts","../../../projects/ng-storage/services/storage-config-api.service.ts","../../../projects/ng-storage/services/upload.service.ts","../../../projects/ng-storage/routes/storage.routes.ts","../../../projects/ng-storage/pages/storage-container/storage-container.component.ts","../../../projects/ng-storage/public-api.ts","../../../projects/ng-storage/flusys-ng-storage.ts"],"sourcesContent":["/**\n * File Location Enum\n * Storage provider types (matches backend FileLocationEnum)\n */\nexport enum FileLocationEnum {\n LOCAL = 'local',\n AWS = 'aws',\n AZURE = 'azure',\n SFTP = 'sftp',\n}\n\n/**\n * Image Format Enum\n * Supported image output formats for compression\n */\nexport enum ImageFormat {\n ORIGINAL = 'original',\n JPEG = 'jpeg',\n PNG = 'png',\n WEBP = 'webp',\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ApiResourceService, ISingleResponse, IListResponse } from '@flusys/ng-shared';\nimport {\n IFileManager,\n ICreateFileManagerDto,\n IUpdateFileManagerDto,\n IGetFilesRequestDto,\n IFilesResponseDto,\n} from '../interfaces/file-manager.interface';\n\n/**\n * File Manager API Service\n * Handles file metadata CRUD operations\n * Endpoint: POST /storage/file-manager/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FileManagerApiService extends ApiResourceService<\n IUpdateFileManagerDto,\n IFileManager\n> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/file-manager', http);\n }\n\n /**\n * Get multiple files with valid URLs\n * POST /storage/file-manager/get-files\n * Regenerates presigned URLs if expired\n */\n getFiles(\n fileIds: string[]\n ): Observable<ISingleResponse<IFilesResponseDto[]>> {\n const requests: IGetFilesRequestDto[] = fileIds.map((id) => ({ id }));\n return this.http.post<ISingleResponse<IFilesResponseDto[]>>(\n `${this.baseUrl}/get-files`,\n requests\n );\n }\n\n /**\n * Get files by folder\n * POST /storage/file-manager/get-all\n * Filtered by folder ID and company (if enabled)\n */\n getFilesByFolder(\n folderId: number | null,\n page: number = 1,\n limit: number = 50\n ): Observable<IListResponse<IFileManager>> {\n return this.getAll('', {\n filter: folderId ? { folderId } : {},\n pagination: { currentPage: page - 1, pageSize: limit },\n select: [],\n sort: {},\n });\n }\n\n /**\n * Get private files (requires permission)\n * POST /storage/file-manager/get-all\n * Filtered by isPrivate and user permission 'storage.file.viewPrivate'\n */\n getPrivateFiles(\n page: number = 1,\n limit: number = 50\n ): Observable<IListResponse<IFileManager>> {\n return this.getAll('', {\n filter: { isPrivate: true },\n pagination: { currentPage: page - 1, pageSize: limit },\n select: [],\n sort: {},\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService } from '@flusys/ng-shared';\nimport { IFolder, IUpdateFolderDto } from '../interfaces/folder.interface';\n\n/**\n * Folder API Service\n * Handles folder CRUD operations\n * Endpoint: POST /storage/folder/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FolderApiService extends ApiResourceService<IUpdateFolderDto, IFolder> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/folder', http);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService } from '@flusys/ng-shared';\nimport { IStorageConfig, IUpdateStorageConfigDto } from '../interfaces/storage-config.interface';\n\n/**\n * Storage Config API Service\n * Handles storage configuration CRUD operations\n * Endpoint: POST /storage/storage-config/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class StorageConfigApiService extends ApiResourceService<\n IUpdateStorageConfigDto,\n IStorageConfig\n> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/storage-config', http);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BaseApiService } from '@flusys/ng-core';\nimport { ISingleResponse } from '@flusys/ng-shared';\nimport {\n IUploadOptionsDto,\n IUploadedFileInfo,\n} from '../interfaces/upload.interface';\n\n/**\n * Upload Service\n * Handles file upload/delete operations\n * Endpoint: POST /storage/upload/*\n *\n * Features:\n * - Company-scoped uploads (if company feature enabled)\n * - Image compression\n * - Multiple storage providers\n * - File validation (size, type)\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class UploadService extends BaseApiService {\n constructor() {\n super('storage');\n }\n\n /**\n * Upload single file\n * POST /storage/upload/single-file?storageConfigId=x&folderPath=y\n *\n * @param file - File to upload\n * @param options - Upload options (storage config, compression, etc.)\n */\n uploadSingleFile(\n file: File,\n options?: IUploadOptionsDto\n ): Observable<ISingleResponse<IUploadedFileInfo>> {\n const formData = new FormData();\n formData.append('file', file);\n\n const queryParams = this.buildQueryParams(options);\n const url = queryParams\n ? `${this.getUrl('upload/single-file')}?${queryParams}`\n : this.getUrl('upload/single-file');\n\n return this.http.post<ISingleResponse<IUploadedFileInfo>>(url, formData);\n }\n\n /**\n * Upload multiple files (max 50)\n * POST /storage/upload/multiple-file?storageConfigId=x&folderPath=y\n *\n * @param files - Array of files to upload\n * @param options - Upload options\n */\n uploadMultipleFiles(\n files: File[],\n options?: IUploadOptionsDto\n ): Observable<ISingleResponse<IUploadedFileInfo[]>> {\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n\n const queryParams = this.buildQueryParams(options);\n const url = queryParams\n ? `${this.getUrl('upload/multiple-file')}?${queryParams}`\n : this.getUrl('upload/multiple-file');\n\n return this.http.post<ISingleResponse<IUploadedFileInfo[]>>(url, formData);\n }\n\n /**\n * Build query string from upload options\n */\n private buildQueryParams(options?: IUploadOptionsDto): string {\n if (!options) return '';\n const params = new URLSearchParams();\n if (options.storageConfigId) params.append('storageConfigId', options.storageConfigId);\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 return params.toString();\n }\n\n /**\n * Delete single file\n * POST /storage/upload/delete-single-file\n *\n * @param key - File key/path to delete\n * @param storageConfigId - Optional storage config ID (uses default if not provided)\n */\n deleteSingleFile(key: string, storageConfigId?: string): Observable<ISingleResponse<void>> {\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-single-file'),\n { key, ...(storageConfigId && { storageConfigId }) }\n );\n }\n\n /**\n * Delete multiple files\n * POST /storage/upload/delete-multiple-file\n *\n * @param keys - Array of file keys/paths to delete\n * @param storageConfigId - Optional storage config ID (uses default if not provided)\n */\n deleteMultipleFiles(keys: string[], storageConfigId?: string): Observable<ISingleResponse<void>> {\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-multiple-file'),\n { keys, ...(storageConfigId && { storageConfigId }) }\n );\n }\n\n /**\n * Get file download URL\n * GET /storage/upload/file/:filePath\n *\n * @param key - File key/path\n * @returns URL for direct file access\n */\n getFileUrl(key: string): string {\n return this.getUrl(`upload/file/${key}`);\n }\n}\n","import { Routes } from '@angular/router';\n\n/**\n * Storage Module Routes\n * All storage management routes: configs, files, folders\n *\n * All routes are protected by permission guards to prevent direct URL access.\n */\nexport const STORAGE_ROUTES: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('../pages/storage-container/storage-container.component').then(\n (m) => m.StorageContainerComponent,\n ),\n children: [\n // File Manager Routes\n {\n path: 'files',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-list.component').then(\n (m) => m.FileManagerListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-form.component').then(\n (m) => m.FileManagerFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-form.component').then(\n (m) => m.FileManagerFormComponent,\n ),\n },\n ],\n },\n\n // Folder Routes\n {\n path: 'folders',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/folder/folder-list.component').then(\n (m) => m.FolderListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/folder/folder-form.component').then(\n (m) => m.FolderFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/folder/folder-form.component').then(\n (m) => m.FolderFormComponent,\n ),\n },\n ],\n },\n\n // Storage Config Routes\n {\n path: 'configs',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-list.component').then(\n (m) => m.StorageConfigListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-form.component').then(\n (m) => m.StorageConfigFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-form.component').then(\n (m) => m.StorageConfigFormComponent,\n ),\n },\n ],\n },\n\n // Default redirect to files\n {\n path: '',\n redirectTo: 'files',\n pathMatch: 'full',\n },\n ],\n },\n];\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\n\ninterface ITab {\n id: string;\n label: string;\n icon: string;\n route: string;\n}\n\n/**\n * Storage Container Component\n *\n * Main container for Storage module with tab navigation\n * Routes: Files | Folders | Configurations\n */\n@Component({\n selector: 'lib-storage-container',\n standalone: true,\n imports: [CommonModule, RouterOutlet, RouterLink, RouterLinkActive],\n template: `\n <div class=\"storage-page p-4\">\n <div class=\"storage-header mb-4\">\n <h1 class=\"text-2xl font-bold m-0\">Storage</h1>\n <p class=\"text-gray-500 mt-1\">Manage files, folders, and storage configurations</p>\n </div>\n\n <div class=\"storage-tabs flex gap-1 mb-4 border-b border-gray-200\">\n @for (tab of tabs; track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"active\"\n class=\"tab-link flex items-center gap-2 px-4 py-2 rounded-t-lg cursor-pointer transition-colors\">\n <i [class]=\"tab.icon\"></i>\n <span>{{ tab.label }}</span>\n </a>\n }\n </div>\n\n <div class=\"storage-content\">\n <router-outlet />\n </div>\n </div>\n `,\n styles: [\n `\n .tab-link {\n color: var(--text-color-secondary, #6b7280);\n text-decoration: none;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n }\n .tab-link.active {\n color: var(--primary-color, #3b82f6);\n border-bottom-color: var(--primary-color, #3b82f6);\n background-color: var(--surface-ground, #f9fafb);\n }\n .tab-link:hover:not(.active) {\n background-color: var(--surface-hover, #f3f4f6);\n }\n `,\n ],\n})\nexport class StorageContainerComponent {\n /** All available tabs */\n readonly tabs: ITab[] = [\n {\n id: 'files',\n label: 'Files',\n icon: 'pi pi-file',\n route: 'files',\n },\n {\n id: 'folders',\n label: 'Folders',\n icon: 'pi pi-folder',\n route: 'folders',\n },\n {\n id: 'configs',\n label: 'Configurations',\n icon: 'pi pi-cog',\n route: 'configs',\n },\n ];\n}\n","// =============================================================================\n// @flusys/ng-storage - Storage Package\n// =============================================================================\n\n// Enums\nexport * from './enums/public-api';\n\n// Interfaces\nexport * from './interfaces/public-api';\n\n// Services\nexport { FileManagerApiService } from './services/file-manager-api.service';\nexport { FolderApiService } from './services/folder-api.service';\nexport { StorageConfigApiService } from './services/storage-config-api.service';\nexport { UploadService } from './services/upload.service';\n\n// Routes\nexport { STORAGE_ROUTES } from './routes/storage.routes';\n\n// Components\nexport { StorageContainerComponent } from './pages/storage-container/storage-container.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage.mjs","sources":["../../../projects/ng-storage/enums/file-location.enum.ts","../../../projects/ng-storage/services/file-manager-api.service.ts","../../../projects/ng-storage/services/upload.service.ts","../../../projects/ng-storage/adapters/profile-upload-provider.adapter.ts","../../../projects/ng-storage/providers/storage-providers.ts","../../../projects/ng-storage/services/folder-api.service.ts","../../../projects/ng-storage/services/storage-config-api.service.ts","../../../projects/ng-storage/routes/storage.routes.ts","../../../projects/ng-storage/pages/storage-container/storage-container.component.ts","../../../projects/ng-storage/public-api.ts","../../../projects/ng-storage/flusys-ng-storage.ts"],"sourcesContent":["/**\n * File Location Enum\n * Storage provider types (matches backend FileLocationEnum)\n */\nexport enum FileLocationEnum {\n LOCAL = 'local',\n AWS = 'aws',\n AZURE = 'azure',\n SFTP = 'sftp',\n}\n\n/**\n * Image Format Enum\n * Supported image output formats for compression\n */\nexport enum ImageFormat {\n ORIGINAL = 'original',\n JPEG = 'jpeg',\n PNG = 'png',\n WEBP = 'webp',\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ApiResourceService, ISingleResponse, IListResponse } from '@flusys/ng-shared';\nimport {\n IFileManager,\n ICreateFileManagerDto,\n IUpdateFileManagerDto,\n IGetFilesRequestDto,\n IFilesResponseDto,\n} from '../interfaces/file-manager.interface';\n\n/**\n * File Manager API Service\n * Handles file metadata CRUD operations\n * Endpoint: POST /storage/file-manager/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FileManagerApiService extends ApiResourceService<\n IUpdateFileManagerDto,\n IFileManager\n> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/file-manager', http);\n }\n\n /**\n * Get multiple files with valid URLs\n * POST /storage/file-manager/get-files\n * Regenerates presigned URLs if expired\n */\n getFiles(\n fileIds: string[]\n ): Observable<ISingleResponse<IFilesResponseDto[]>> {\n const requests: IGetFilesRequestDto[] = fileIds.map((id) => ({ id }));\n return this.http.post<ISingleResponse<IFilesResponseDto[]>>(\n `${this.baseUrl}/get-files`,\n requests\n );\n }\n\n /**\n * Get files by folder\n * POST /storage/file-manager/get-all\n * Filtered by folder ID and company (if enabled)\n */\n getFilesByFolder(\n folderId: number | null,\n page: number = 1,\n limit: number = 50\n ): Observable<IListResponse<IFileManager>> {\n return this.getAll('', {\n filter: folderId ? { folderId } : {},\n pagination: { currentPage: page - 1, pageSize: limit },\n select: [],\n sort: {},\n });\n }\n\n /**\n * Get private files (requires permission)\n * POST /storage/file-manager/get-all\n * Filtered by isPrivate and user permission 'storage.file.viewPrivate'\n */\n getPrivateFiles(\n page: number = 1,\n limit: number = 50\n ): Observable<IListResponse<IFileManager>> {\n return this.getAll('', {\n filter: { isPrivate: true },\n pagination: { currentPage: page - 1, pageSize: limit },\n select: [],\n sort: {},\n });\n }\n\n /**\n * Create new file manager record\n * POST /storage/file-manager/insert\n */\n create(dto: ICreateFileManagerDto): Observable<ISingleResponse<IFileManager>> {\n return this.http.post<ISingleResponse<IFileManager>>(\n `${this.baseUrl}/insert`,\n dto\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, switchMap } from 'rxjs';\nimport { BaseApiService, getDefaultStorageConfigId } from '@flusys/ng-core';\nimport { ISingleResponse } from '@flusys/ng-shared';\nimport {\n IUploadOptionsDto,\n IUploadedFileInfo,\n} from '../interfaces/upload.interface';\nimport { FileManagerApiService } from './file-manager-api.service';\nimport { IFileManager } from '../interfaces/file-manager.interface';\nimport { FileLocationEnum } from '../enums/file-location.enum';\n\n/**\n * Upload Service\n * Handles file upload/delete operations\n * Endpoint: POST /storage/upload/*\n *\n * Features:\n * - Company-scoped uploads (if company feature enabled)\n * - Image compression\n * - Multiple storage providers\n * - File validation (size, type)\n * - Default storage config from environment (services.storage.defaultStorageConfigId)\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class UploadService extends BaseApiService {\n private readonly fileManagerApi = inject(FileManagerApiService);\n\n constructor() {\n super('storage');\n }\n\n /**\n * Get default storage config ID from app config\n * Used when no storageConfigId is provided in upload options\n */\n getDefaultConfigId(): string | undefined {\n return getDefaultStorageConfigId(this.appConfig);\n }\n\n /**\n * Upload single file\n * POST /storage/upload/single-file?storageConfigId=x&folderPath=y\n *\n * @param file - File to upload\n * @param options - Upload options (storage config, compression, etc.)\n */\n uploadSingleFile(\n file: File,\n options?: IUploadOptionsDto\n ): Observable<ISingleResponse<IUploadedFileInfo>> {\n const formData = new FormData();\n formData.append('file', file);\n\n const queryParams = this.buildQueryParams(options);\n const url = queryParams\n ? `${this.getUrl('upload/single-file')}?${queryParams}`\n : this.getUrl('upload/single-file');\n\n return this.http.post<ISingleResponse<IUploadedFileInfo>>(url, formData);\n }\n\n /**\n * Upload multiple files (max 50)\n * POST /storage/upload/multiple-file?storageConfigId=x&folderPath=y\n *\n * @param files - Array of files to upload\n * @param options - Upload options\n */\n uploadMultipleFiles(\n files: File[],\n options?: IUploadOptionsDto\n ): Observable<ISingleResponse<IUploadedFileInfo[]>> {\n const formData = new FormData();\n files.forEach((file) => formData.append('files', file));\n\n const queryParams = this.buildQueryParams(options);\n const url = queryParams\n ? `${this.getUrl('upload/multiple-file')}?${queryParams}`\n : this.getUrl('upload/multiple-file');\n\n return this.http.post<ISingleResponse<IUploadedFileInfo[]>>(url, formData);\n }\n\n /**\n * Build query string from upload options\n * Uses default storageConfigId from app config if not provided in options\n */\n private buildQueryParams(options?: IUploadOptionsDto): string {\n const params = new URLSearchParams();\n\n // Use provided storageConfigId or fall back to default from config\n const storageConfigId = options?.storageConfigId ?? this.getDefaultConfigId();\n if (storageConfigId) params.append('storageConfigId', storageConfigId);\n\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 /**\n * Delete single file\n * POST /storage/upload/delete-single-file\n *\n * @param key - File key/path to delete\n * @param storageConfigId - Optional storage config ID (uses default from config if not provided)\n */\n deleteSingleFile(key: string, storageConfigId?: string): Observable<ISingleResponse<void>> {\n const configId = storageConfigId ?? this.getDefaultConfigId();\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-single-file'),\n { key, ...(configId && { storageConfigId: configId }) }\n );\n }\n\n /**\n * Delete multiple files\n * POST /storage/upload/delete-multiple-file\n *\n * @param keys - Array of file keys/paths to delete\n * @param storageConfigId - Optional storage config ID (uses default from config if not provided)\n */\n deleteMultipleFiles(keys: string[], storageConfigId?: string): Observable<ISingleResponse<void>> {\n const configId = storageConfigId ?? this.getDefaultConfigId();\n return this.http.post<ISingleResponse<void>>(\n this.getUrl('upload/delete-multiple-file'),\n { keys, ...(configId && { storageConfigId: configId }) }\n );\n }\n\n /**\n * Get file download URL\n * GET /storage/upload/file/:filePath\n *\n * @param key - File key/path\n * @returns URL for direct file access\n */\n getFileUrl(key: string): string {\n return this.getUrl(`upload/file/${key}`);\n }\n\n /**\n * Upload file and register in file manager\n * Returns file manager ID (UUID) for storing in references like profilePictureId\n *\n * @param file - File to upload\n * @param options - Upload options (storage config, compression, etc.)\n * @returns Observable with file manager record (id is the UUID to store)\n */\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((uploadResponse) => {\n if (!uploadResponse.success || !uploadResponse.data) {\n throw new Error(uploadResponse.message || 'Upload failed');\n }\n\n const uploadedFile = uploadResponse.data;\n const storageConfigId = options?.storageConfigId ?? this.getDefaultConfigId();\n\n // Create file manager record\n return this.fileManagerApi.create({\n name: uploadedFile.name,\n key: uploadedFile.key,\n size: String(uploadedFile.size),\n contentType: uploadedFile.contentType,\n isPrivate: options?.isPrivate ?? false,\n folderId: options?.folderId,\n storageConfigId,\n location: FileLocationEnum.LOCAL,\n });\n })\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n IProfileUploadProvider,\n IProfileUploadOptions,\n IProfileUploadResult,\n ISingleResponse,\n} from '@flusys/ng-shared';\nimport { UploadService } from '../services/upload.service';\n\n/**\n * Profile Upload Provider Adapter\n *\n * Implements IProfileUploadProvider interface for ng-auth profile page.\n * Uses UploadService.uploadAndRegister() to upload files and register in file manager.\n *\n * @example\n * // In app.config.ts\n * providers: [\n * ...provideStorageProviders(),\n * ]\n */\n@Injectable()\nexport class ProfileUploadProviderAdapter implements IProfileUploadProvider {\n private readonly uploadService = inject(UploadService);\n\n /**\n * Upload profile picture and register in file manager\n * Returns file manager ID (UUID) for storing in user.profilePictureId\n */\n uploadProfilePicture(\n file: File,\n options?: IProfileUploadOptions\n ): Observable<ISingleResponse<IProfileUploadResult>> {\n return this.uploadService\n .uploadAndRegister(file, {\n folderPath: options?.folderPath ?? 'profile-pictures',\n compress: options?.compress ?? true,\n maxWidth: options?.maxWidth ?? 400,\n maxHeight: options?.maxHeight ?? 400,\n })\n .pipe(\n map((response) => ({\n success: response.success,\n message: response.message,\n data: response.data\n ? {\n id: response.data.id,\n name: response.data.name,\n key: response.data.key,\n size: parseFloat(response.data.size) * 1024, // Convert KB to bytes\n contentType: response.data.contentType,\n }\n : undefined,\n }))\n );\n }\n}\n","import { Provider } from '@angular/core';\nimport { PROFILE_UPLOAD_PROVIDER } from '@flusys/ng-shared';\nimport { ProfileUploadProviderAdapter } from '../adapters/profile-upload-provider.adapter';\n\n/**\n * Provide Storage Providers\n *\n * Registers storage-related provider implementations.\n * Call this in app.config.ts to enable storage features in other packages.\n *\n * @example\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * ...provideStorageProviders(),\n * ],\n * };\n *\n * @returns Array of providers for storage functionality\n */\nexport function provideStorageProviders(): Provider[] {\n return [\n {\n provide: PROFILE_UPLOAD_PROVIDER,\n useClass: ProfileUploadProviderAdapter,\n },\n ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService } from '@flusys/ng-shared';\nimport { IFolder, IUpdateFolderDto } from '../interfaces/folder.interface';\n\n/**\n * Folder API Service\n * Handles folder CRUD operations\n * Endpoint: POST /storage/folder/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class FolderApiService extends ApiResourceService<IUpdateFolderDto, IFolder> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/folder', http);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ApiResourceService } from '@flusys/ng-shared';\nimport { IStorageConfig, IUpdateStorageConfigDto } from '../interfaces/storage-config.interface';\n\n/**\n * Storage Config API Service\n * Handles storage configuration CRUD operations\n * Endpoint: POST /storage/storage-config/*\n *\n * Note: Company feature enabled - all queries automatically scoped to user's company\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class StorageConfigApiService extends ApiResourceService<\n IUpdateStorageConfigDto,\n IStorageConfig\n> {\n constructor() {\n const http = inject(HttpClient);\n super('storage/storage-config', http);\n }\n}\n","import { Routes } from '@angular/router';\n\n/**\n * Storage Module Routes\n * All storage management routes: configs, files, folders\n *\n * All routes are protected by permission guards to prevent direct URL access.\n */\nexport const STORAGE_ROUTES: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('../pages/storage-container/storage-container.component').then(\n (m) => m.StorageContainerComponent,\n ),\n children: [\n // File Manager Routes\n {\n path: 'files',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-list.component').then(\n (m) => m.FileManagerListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-form.component').then(\n (m) => m.FileManagerFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/file-manager/file-manager-form.component').then(\n (m) => m.FileManagerFormComponent,\n ),\n },\n ],\n },\n\n // Folder Routes\n {\n path: 'folders',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/folder/folder-list.component').then(\n (m) => m.FolderListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/folder/folder-form.component').then(\n (m) => m.FolderFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/folder/folder-form.component').then(\n (m) => m.FolderFormComponent,\n ),\n },\n ],\n },\n\n // Storage Config Routes\n {\n path: 'configs',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-list.component').then(\n (m) => m.StorageConfigListComponent,\n ),\n },\n {\n path: 'new',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-form.component').then(\n (m) => m.StorageConfigFormComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('../pages/storage-config/storage-config-form.component').then(\n (m) => m.StorageConfigFormComponent,\n ),\n },\n ],\n },\n\n // Default redirect to files\n {\n path: '',\n redirectTo: 'files',\n pathMatch: 'full',\n },\n ],\n },\n];\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';\n\ninterface ITab {\n id: string;\n label: string;\n icon: string;\n route: string;\n}\n\n/**\n * Storage Container Component\n *\n * Main container for Storage module with tab navigation\n * Routes: Files | Folders | Configurations\n */\n@Component({\n selector: 'lib-storage-container',\n standalone: true,\n imports: [CommonModule, RouterOutlet, RouterLink, RouterLinkActive],\n template: `\n <div class=\"storage-page p-4\">\n <div class=\"storage-header mb-4\">\n <h1 class=\"text-2xl font-bold m-0\">Storage</h1>\n <p class=\"text-gray-500 mt-1\">Manage files, folders, and storage configurations</p>\n </div>\n\n <div class=\"storage-tabs flex gap-1 mb-4 border-b border-gray-200\">\n @for (tab of tabs; track tab.id) {\n <a\n [routerLink]=\"tab.route\"\n routerLinkActive=\"active\"\n class=\"tab-link flex items-center gap-2 px-4 py-2 rounded-t-lg cursor-pointer transition-colors\">\n <i [class]=\"tab.icon\"></i>\n <span>{{ tab.label }}</span>\n </a>\n }\n </div>\n\n <div class=\"storage-content\">\n <router-outlet />\n </div>\n </div>\n `,\n styles: [\n `\n .tab-link {\n color: var(--text-color-secondary, #6b7280);\n text-decoration: none;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n }\n .tab-link.active {\n color: var(--primary-color, #3b82f6);\n border-bottom-color: var(--primary-color, #3b82f6);\n background-color: var(--surface-ground, #f9fafb);\n }\n .tab-link:hover:not(.active) {\n background-color: var(--surface-hover, #f3f4f6);\n }\n `,\n ],\n})\nexport class StorageContainerComponent {\n /** All available tabs */\n readonly tabs: ITab[] = [\n {\n id: 'files',\n label: 'Files',\n icon: 'pi pi-file',\n route: 'files',\n },\n {\n id: 'folders',\n label: 'Folders',\n icon: 'pi pi-folder',\n route: 'folders',\n },\n {\n id: 'configs',\n label: 'Configurations',\n icon: 'pi pi-cog',\n route: 'configs',\n },\n ];\n}\n","// =============================================================================\n// @flusys/ng-storage - Storage Package\n// =============================================================================\n\n// Enums\nexport * from './enums/public-api';\n\n// Interfaces\nexport * from './interfaces/public-api';\n\n// Adapters\nexport { ProfileUploadProviderAdapter } from './adapters/profile-upload-provider.adapter';\n\n// Providers\nexport { provideStorageProviders } from './providers/storage-providers';\n\n// Services\nexport { FileManagerApiService } from './services/file-manager-api.service';\nexport { FolderApiService } from './services/folder-api.service';\nexport { StorageConfigApiService } from './services/storage-config-api.service';\nexport { UploadService } from './services/upload.service';\n\n// Routes\nexport { STORAGE_ROUTES } from './routes/storage.routes';\n\n// Components\nexport { StorageContainerComponent } from './pages/storage-container/storage-container.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flusys/ng-storage",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0-beta",
|
|
4
4
|
"description": "File storage module for FLUSYS Angular applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/common": "^21.0.0",
|
|
8
8
|
"@angular/core": "^21.0.0",
|
|
9
|
-
"@flusys/ng-core": "^1.
|
|
10
|
-
"@flusys/ng-layout": "^1.
|
|
11
|
-
"@flusys/ng-shared": "^1.
|
|
9
|
+
"@flusys/ng-core": "^1.1.0-beta",
|
|
10
|
+
"@flusys/ng-layout": "^1.1.0-beta",
|
|
11
|
+
"@flusys/ng-shared": "^1.1.0-beta",
|
|
12
12
|
"@primeuix/themes": "^1.0.0",
|
|
13
13
|
"primeicons": "^7.0.0",
|
|
14
14
|
"primeng": "^21.0.0"
|