@flusys/ng-storage 4.1.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -382
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs → flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs} +287 -74
- package/fesm2022/flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-bj6oOzOL.mjs → flusys-ng-storage-file-manager-list.component-Dn5hVksO.mjs} +210 -70
- package/fesm2022/flusys-ng-storage-file-manager-list.component-Dn5hVksO.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs → flusys-ng-storage-folder-form.component-B8vRSb1T.mjs} +88 -31
- package/fesm2022/flusys-ng-storage-folder-form.component-B8vRSb1T.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-folder-list.component-B2Q41I1g.mjs → flusys-ng-storage-folder-list.component-B4yCKvAV.mjs} +96 -30
- package/fesm2022/flusys-ng-storage-folder-list.component-B4yCKvAV.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs +880 -0
- package/fesm2022/flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-DBH_qf9o.mjs → flusys-ng-storage-storage-config-list.component-C7OYYyrQ.mjs} +126 -33
- package/fesm2022/flusys-ng-storage-storage-config-list.component-C7OYYyrQ.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage.mjs +143 -256
- package/fesm2022/flusys-ng-storage.mjs.map +1 -1
- package/package.json +4 -4
- package/types/flusys-ng-storage.d.ts +4 -2
- package/fesm2022/flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-file-manager-list.component-bj6oOzOL.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-list.component-B2Q41I1g.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs +0 -465
- package/fesm2022/flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-list.component-DBH_qf9o.mjs.map +0 -1
|
@@ -38,7 +38,9 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
38
38
|
storageConfigId: '',
|
|
39
39
|
}, ...(ngDevMode ? [{ debugName: "formModel" }] : []));
|
|
40
40
|
fileForm = form(this.formModel, (f) => {
|
|
41
|
-
required(f.name, {
|
|
41
|
+
required(f.name, {
|
|
42
|
+
message: this.translateService.translate('storage.validation.file.name.required'),
|
|
43
|
+
});
|
|
42
44
|
});
|
|
43
45
|
isFormValid = computed(() => this.formModel().name.trim().length > 0, ...(ngDevMode ? [{ debugName: "isFormValid" }] : []));
|
|
44
46
|
constructor() {
|
|
@@ -61,22 +63,22 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
61
63
|
async loadStorageConfigs() {
|
|
62
64
|
this.isLoadingConfigs.set(true);
|
|
63
65
|
try {
|
|
64
|
-
const response = await
|
|
66
|
+
const response = await this.configService.getAll({
|
|
65
67
|
pagination: { currentPage: 0, pageSize: 100 },
|
|
66
68
|
filter: {},
|
|
67
69
|
select: [],
|
|
68
70
|
sort: {},
|
|
69
|
-
})
|
|
71
|
+
});
|
|
70
72
|
if (response.success && response.data) {
|
|
71
73
|
this.availableConfigs.set(response.data);
|
|
72
74
|
if (response.data.length === 1) {
|
|
73
|
-
this.formModel.update((m) => ({
|
|
75
|
+
this.formModel.update((m) => ({
|
|
76
|
+
...m,
|
|
77
|
+
storageConfigId: response.data[0].id,
|
|
78
|
+
}));
|
|
74
79
|
}
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
catch {
|
|
78
|
-
this.showError(this.translateService.translate('storage.config.load.failed'));
|
|
79
|
-
}
|
|
80
82
|
finally {
|
|
81
83
|
this.isLoadingConfigs.set(false);
|
|
82
84
|
}
|
|
@@ -84,12 +86,12 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
84
86
|
async loadFolders() {
|
|
85
87
|
this.isLoadingFolders.set(true);
|
|
86
88
|
try {
|
|
87
|
-
const response = await
|
|
89
|
+
const response = await this.folderService.getAll({
|
|
88
90
|
pagination: { currentPage: 0, pageSize: 100 },
|
|
89
91
|
filter: {},
|
|
90
92
|
select: [],
|
|
91
93
|
sort: {},
|
|
92
|
-
})
|
|
94
|
+
});
|
|
93
95
|
if (response.success && response.data) {
|
|
94
96
|
this.availableFolders.set(response.data);
|
|
95
97
|
}
|
|
@@ -104,7 +106,7 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
104
106
|
async loadFile(id) {
|
|
105
107
|
this.isLoading.set(true);
|
|
106
108
|
try {
|
|
107
|
-
const response = await this.fileService.
|
|
109
|
+
const response = await this.fileService.findById(id);
|
|
108
110
|
if (response.success && response.data) {
|
|
109
111
|
const file = response.data;
|
|
110
112
|
this.existingFile.set(file);
|
|
@@ -118,7 +120,6 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
122
|
catch {
|
|
121
|
-
this.showError(this.translateService.translate('storage.error.load.file.failed'));
|
|
122
123
|
this.navigateTo(['/storage/files']);
|
|
123
124
|
}
|
|
124
125
|
finally {
|
|
@@ -139,13 +140,15 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
139
140
|
try {
|
|
140
141
|
const formValue = this.formModel();
|
|
141
142
|
if (this.isEditMode()) {
|
|
142
|
-
await this.fileService.
|
|
143
|
+
const response = await this.fileService.update({
|
|
143
144
|
id: formValue.id,
|
|
144
145
|
name: formValue.name,
|
|
145
146
|
isPrivate: formValue.isPrivate,
|
|
146
147
|
folderId: formValue.folderId || null,
|
|
147
148
|
});
|
|
148
|
-
this.showSuccess(
|
|
149
|
+
this.showSuccess(response.messageKey
|
|
150
|
+
? this.translateService.translate(response.messageKey, response.messageVariables)
|
|
151
|
+
: (response.message ?? ''));
|
|
149
152
|
}
|
|
150
153
|
else {
|
|
151
154
|
const file = this.selectedFile();
|
|
@@ -164,7 +167,7 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
164
167
|
}));
|
|
165
168
|
if (uploadResponse.success && uploadResponse.data) {
|
|
166
169
|
const uploadedFileInfo = uploadResponse.data;
|
|
167
|
-
await firstValueFrom(this.fileService.createFile({
|
|
170
|
+
const createResponse = await firstValueFrom(this.fileService.createFile({
|
|
168
171
|
name: formValue.name,
|
|
169
172
|
key: uploadedFileInfo.key,
|
|
170
173
|
contentType: file.type || 'application/octet-stream',
|
|
@@ -173,7 +176,9 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
173
176
|
folderId: formValue.folderId || undefined,
|
|
174
177
|
storageConfigId: formValue.storageConfigId,
|
|
175
178
|
}));
|
|
176
|
-
this.showSuccess(
|
|
179
|
+
this.showSuccess(createResponse?.messageKey
|
|
180
|
+
? this.translateService.translate(createResponse.messageKey, createResponse.messageVariables)
|
|
181
|
+
: (createResponse?.message ?? ''));
|
|
177
182
|
}
|
|
178
183
|
else {
|
|
179
184
|
throw new Error(this.translateService.translate('storage.upload.failed'));
|
|
@@ -195,9 +200,18 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
195
200
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: FileManagerFormComponent, isStandalone: true, selector: "lib-file-manager-form", usesInheritance: true, ngImport: i0, template: `
|
|
196
201
|
<div class="card">
|
|
197
202
|
<div class="mb-4">
|
|
198
|
-
<h3 class="text-lg sm:text-xl font-semibold">
|
|
203
|
+
<h3 class="text-lg sm:text-xl font-semibold">
|
|
204
|
+
{{
|
|
205
|
+
(isEditMode()
|
|
206
|
+
? 'storage.file.manager.edit.file'
|
|
207
|
+
: 'storage.file.manager.upload.file'
|
|
208
|
+
) | translate
|
|
209
|
+
}}
|
|
210
|
+
</h3>
|
|
199
211
|
@if (showCompanyInfo()) {
|
|
200
|
-
<p class="text-sm text-muted-color mt-1">
|
|
212
|
+
<p class="text-sm text-muted-color mt-1">
|
|
213
|
+
{{ 'shared.company' | translate }}: {{ currentCompanyName() }}
|
|
214
|
+
</p>
|
|
201
215
|
}
|
|
202
216
|
</div>
|
|
203
217
|
|
|
@@ -205,11 +219,25 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
205
219
|
@if (!isEditMode()) {
|
|
206
220
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
|
|
207
221
|
<div class="field">
|
|
208
|
-
<label
|
|
209
|
-
|
|
210
|
-
|
|
222
|
+
<label
|
|
223
|
+
for="storageConfig"
|
|
224
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
225
|
+
>{{ 'storage.config.provider.required' | translate }}</label
|
|
226
|
+
>
|
|
227
|
+
<select
|
|
228
|
+
id="storageConfig"
|
|
229
|
+
class="p-select-native w-full"
|
|
230
|
+
[formField]="fileForm.storageConfigId"
|
|
231
|
+
>
|
|
232
|
+
<option value="">
|
|
233
|
+
{{ 'storage.config.select.config' | translate }}
|
|
234
|
+
</option>
|
|
211
235
|
@for (config of availableConfigs(); track config.id) {
|
|
212
|
-
<option [value]="config.id">
|
|
236
|
+
<option [value]="config.id">
|
|
237
|
+
{{ config.name }} ({{
|
|
238
|
+
getProviderLabelKey(config.storage) | translate
|
|
239
|
+
}})
|
|
240
|
+
</option>
|
|
213
241
|
}
|
|
214
242
|
</select>
|
|
215
243
|
@if (availableConfigs().length === 0 && !isLoadingConfigs()) {
|
|
@@ -221,9 +249,19 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
221
249
|
</div>
|
|
222
250
|
|
|
223
251
|
<div class="field">
|
|
224
|
-
<label
|
|
225
|
-
|
|
226
|
-
|
|
252
|
+
<label
|
|
253
|
+
for="folder"
|
|
254
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
255
|
+
>{{ 'storage.folder.optional' | translate }}</label
|
|
256
|
+
>
|
|
257
|
+
<select
|
|
258
|
+
id="folder"
|
|
259
|
+
class="p-select-native w-full"
|
|
260
|
+
[formField]="fileForm.folderId"
|
|
261
|
+
>
|
|
262
|
+
<option value="">
|
|
263
|
+
{{ 'storage.folder.no.folder' | translate }}
|
|
264
|
+
</option>
|
|
227
265
|
@for (folder of availableFolders(); track folder.id) {
|
|
228
266
|
<option [value]="folder.id">{{ folder.name }}</option>
|
|
229
267
|
}
|
|
@@ -238,9 +276,19 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
238
276
|
</div>
|
|
239
277
|
} @else {
|
|
240
278
|
<div class="field mb-4">
|
|
241
|
-
<label
|
|
242
|
-
|
|
243
|
-
|
|
279
|
+
<label
|
|
280
|
+
for="folder"
|
|
281
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
282
|
+
>{{ 'storage.folder.optional' | translate }}</label
|
|
283
|
+
>
|
|
284
|
+
<select
|
|
285
|
+
id="folder"
|
|
286
|
+
class="p-select-native w-full"
|
|
287
|
+
[formField]="fileForm.folderId"
|
|
288
|
+
>
|
|
289
|
+
<option value="">
|
|
290
|
+
{{ 'storage.folder.no.folder' | translate }}
|
|
291
|
+
</option>
|
|
244
292
|
@for (folder of availableFolders(); track folder.id) {
|
|
245
293
|
<option [value]="folder.id">{{ folder.name }}</option>
|
|
246
294
|
}
|
|
@@ -256,7 +304,9 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
256
304
|
|
|
257
305
|
@if (!isEditMode()) {
|
|
258
306
|
<div class="field mb-4">
|
|
259
|
-
<label class="block font-medium mb-2 text-sm sm:text-base">{{
|
|
307
|
+
<label class="block font-medium mb-2 text-sm sm:text-base">{{
|
|
308
|
+
'storage.file.select.required' | translate
|
|
309
|
+
}}</label>
|
|
260
310
|
<p-fileupload
|
|
261
311
|
#fileUpload
|
|
262
312
|
[customUpload]="true"
|
|
@@ -274,35 +324,78 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
274
324
|
@if (files && files.length > 0) {
|
|
275
325
|
<div class="flex flex-col gap-2">
|
|
276
326
|
@for (file of files; track file.name) {
|
|
277
|
-
<div
|
|
278
|
-
|
|
327
|
+
<div
|
|
328
|
+
class="flex items-center gap-3 p-3 border border-surface rounded-lg bg-surface-ground"
|
|
329
|
+
>
|
|
330
|
+
<i
|
|
331
|
+
class="pi pi-file text-xl sm:text-2xl text-primary"
|
|
332
|
+
></i>
|
|
279
333
|
<div class="flex-1 min-w-0">
|
|
280
|
-
<div class="font-medium truncate">
|
|
281
|
-
|
|
334
|
+
<div class="font-medium truncate">
|
|
335
|
+
{{ file.name }}
|
|
336
|
+
</div>
|
|
337
|
+
<div class="text-sm text-muted-color">
|
|
338
|
+
{{ formatFileSize(file.size) }}
|
|
339
|
+
</div>
|
|
282
340
|
</div>
|
|
283
|
-
<p-button
|
|
341
|
+
<p-button
|
|
342
|
+
icon="pi pi-times"
|
|
343
|
+
[text]="true"
|
|
344
|
+
severity="danger"
|
|
345
|
+
size="small"
|
|
346
|
+
(onClick)="fileUpload.clear()"
|
|
347
|
+
/>
|
|
284
348
|
</div>
|
|
285
349
|
}
|
|
286
350
|
</div>
|
|
287
351
|
} @else {
|
|
288
|
-
<div
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
<
|
|
352
|
+
<div
|
|
353
|
+
class="flex items-center justify-center flex-col p-6 sm:p-8 border-2 border-dashed border-surface rounded-lg"
|
|
354
|
+
>
|
|
355
|
+
<i
|
|
356
|
+
class="pi pi-cloud-upload text-3xl sm:text-4xl text-muted-color mb-3"
|
|
357
|
+
></i>
|
|
358
|
+
<p
|
|
359
|
+
class="text-muted-color text-center text-sm sm:text-base"
|
|
360
|
+
>
|
|
361
|
+
{{ 'storage.upload.drag.drop' | translate }}
|
|
362
|
+
</p>
|
|
363
|
+
<p class="text-xs sm:text-sm text-muted-color mt-2">
|
|
364
|
+
{{
|
|
365
|
+
'storage.upload.max.size' | translate: { size: '50MB' }
|
|
366
|
+
}}
|
|
367
|
+
</p>
|
|
292
368
|
</div>
|
|
293
369
|
}
|
|
294
370
|
</ng-template>
|
|
295
371
|
</p-fileupload>
|
|
296
372
|
@if (!selectedFile() && !isEditMode()) {
|
|
297
|
-
<small class="text-muted-color">{{
|
|
373
|
+
<small class="text-muted-color">{{
|
|
374
|
+
'storage.upload.please.select' | translate
|
|
375
|
+
}}</small>
|
|
298
376
|
}
|
|
299
377
|
</div>
|
|
300
378
|
}
|
|
301
379
|
|
|
302
380
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
303
381
|
<div class="field md:col-span-2">
|
|
304
|
-
<label
|
|
305
|
-
|
|
382
|
+
<label
|
|
383
|
+
for="name"
|
|
384
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
385
|
+
>{{ 'storage.file.name.required' | translate }}</label
|
|
386
|
+
>
|
|
387
|
+
<input
|
|
388
|
+
pInputText
|
|
389
|
+
id="name"
|
|
390
|
+
[formField]="fileForm.name"
|
|
391
|
+
[placeholder]="
|
|
392
|
+
(isEditMode()
|
|
393
|
+
? 'storage.file.placeholder.edit'
|
|
394
|
+
: 'storage.file.placeholder'
|
|
395
|
+
) | translate
|
|
396
|
+
"
|
|
397
|
+
class="w-full"
|
|
398
|
+
/>
|
|
306
399
|
</div>
|
|
307
400
|
|
|
308
401
|
<div class="field">
|
|
@@ -311,18 +404,34 @@ class FileManagerFormComponent extends BaseStoragePage {
|
|
|
311
404
|
<span>{{ 'storage.file.private' | translate }}</span>
|
|
312
405
|
</label>
|
|
313
406
|
<small class="text-muted-color block mt-2">
|
|
314
|
-
{{
|
|
407
|
+
{{
|
|
408
|
+
(formModel().isPrivate
|
|
409
|
+
? 'storage.file.private.hint'
|
|
410
|
+
: 'storage.file.public.hint'
|
|
411
|
+
) | translate
|
|
412
|
+
}}
|
|
315
413
|
</small>
|
|
316
414
|
</div>
|
|
317
415
|
</div>
|
|
318
416
|
|
|
319
417
|
<div class="flex justify-end gap-2 mt-4">
|
|
320
|
-
<p-button
|
|
418
|
+
<p-button
|
|
419
|
+
[label]="'shared.cancel' | translate"
|
|
420
|
+
severity="secondary"
|
|
421
|
+
[outlined]="true"
|
|
422
|
+
(onClick)="onCancel()"
|
|
423
|
+
/>
|
|
321
424
|
<p-button
|
|
322
425
|
type="submit"
|
|
323
|
-
[label]="
|
|
426
|
+
[label]="
|
|
427
|
+
(isEditMode() ? 'shared.update' : 'shared.upload') | translate
|
|
428
|
+
"
|
|
324
429
|
[loading]="isLoading()"
|
|
325
|
-
[disabled]="
|
|
430
|
+
[disabled]="
|
|
431
|
+
!isFormValid() ||
|
|
432
|
+
(!isEditMode() && !selectedFile()) ||
|
|
433
|
+
isLoading()
|
|
434
|
+
"
|
|
326
435
|
/>
|
|
327
436
|
</div>
|
|
328
437
|
</form>
|
|
@@ -337,9 +446,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
337
446
|
template: `
|
|
338
447
|
<div class="card">
|
|
339
448
|
<div class="mb-4">
|
|
340
|
-
<h3 class="text-lg sm:text-xl font-semibold">
|
|
449
|
+
<h3 class="text-lg sm:text-xl font-semibold">
|
|
450
|
+
{{
|
|
451
|
+
(isEditMode()
|
|
452
|
+
? 'storage.file.manager.edit.file'
|
|
453
|
+
: 'storage.file.manager.upload.file'
|
|
454
|
+
) | translate
|
|
455
|
+
}}
|
|
456
|
+
</h3>
|
|
341
457
|
@if (showCompanyInfo()) {
|
|
342
|
-
<p class="text-sm text-muted-color mt-1">
|
|
458
|
+
<p class="text-sm text-muted-color mt-1">
|
|
459
|
+
{{ 'shared.company' | translate }}: {{ currentCompanyName() }}
|
|
460
|
+
</p>
|
|
343
461
|
}
|
|
344
462
|
</div>
|
|
345
463
|
|
|
@@ -347,11 +465,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
347
465
|
@if (!isEditMode()) {
|
|
348
466
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
|
|
349
467
|
<div class="field">
|
|
350
|
-
<label
|
|
351
|
-
|
|
352
|
-
|
|
468
|
+
<label
|
|
469
|
+
for="storageConfig"
|
|
470
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
471
|
+
>{{ 'storage.config.provider.required' | translate }}</label
|
|
472
|
+
>
|
|
473
|
+
<select
|
|
474
|
+
id="storageConfig"
|
|
475
|
+
class="p-select-native w-full"
|
|
476
|
+
[formField]="fileForm.storageConfigId"
|
|
477
|
+
>
|
|
478
|
+
<option value="">
|
|
479
|
+
{{ 'storage.config.select.config' | translate }}
|
|
480
|
+
</option>
|
|
353
481
|
@for (config of availableConfigs(); track config.id) {
|
|
354
|
-
<option [value]="config.id">
|
|
482
|
+
<option [value]="config.id">
|
|
483
|
+
{{ config.name }} ({{
|
|
484
|
+
getProviderLabelKey(config.storage) | translate
|
|
485
|
+
}})
|
|
486
|
+
</option>
|
|
355
487
|
}
|
|
356
488
|
</select>
|
|
357
489
|
@if (availableConfigs().length === 0 && !isLoadingConfigs()) {
|
|
@@ -363,9 +495,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
363
495
|
</div>
|
|
364
496
|
|
|
365
497
|
<div class="field">
|
|
366
|
-
<label
|
|
367
|
-
|
|
368
|
-
|
|
498
|
+
<label
|
|
499
|
+
for="folder"
|
|
500
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
501
|
+
>{{ 'storage.folder.optional' | translate }}</label
|
|
502
|
+
>
|
|
503
|
+
<select
|
|
504
|
+
id="folder"
|
|
505
|
+
class="p-select-native w-full"
|
|
506
|
+
[formField]="fileForm.folderId"
|
|
507
|
+
>
|
|
508
|
+
<option value="">
|
|
509
|
+
{{ 'storage.folder.no.folder' | translate }}
|
|
510
|
+
</option>
|
|
369
511
|
@for (folder of availableFolders(); track folder.id) {
|
|
370
512
|
<option [value]="folder.id">{{ folder.name }}</option>
|
|
371
513
|
}
|
|
@@ -380,9 +522,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
380
522
|
</div>
|
|
381
523
|
} @else {
|
|
382
524
|
<div class="field mb-4">
|
|
383
|
-
<label
|
|
384
|
-
|
|
385
|
-
|
|
525
|
+
<label
|
|
526
|
+
for="folder"
|
|
527
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
528
|
+
>{{ 'storage.folder.optional' | translate }}</label
|
|
529
|
+
>
|
|
530
|
+
<select
|
|
531
|
+
id="folder"
|
|
532
|
+
class="p-select-native w-full"
|
|
533
|
+
[formField]="fileForm.folderId"
|
|
534
|
+
>
|
|
535
|
+
<option value="">
|
|
536
|
+
{{ 'storage.folder.no.folder' | translate }}
|
|
537
|
+
</option>
|
|
386
538
|
@for (folder of availableFolders(); track folder.id) {
|
|
387
539
|
<option [value]="folder.id">{{ folder.name }}</option>
|
|
388
540
|
}
|
|
@@ -398,7 +550,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
398
550
|
|
|
399
551
|
@if (!isEditMode()) {
|
|
400
552
|
<div class="field mb-4">
|
|
401
|
-
<label class="block font-medium mb-2 text-sm sm:text-base">{{
|
|
553
|
+
<label class="block font-medium mb-2 text-sm sm:text-base">{{
|
|
554
|
+
'storage.file.select.required' | translate
|
|
555
|
+
}}</label>
|
|
402
556
|
<p-fileupload
|
|
403
557
|
#fileUpload
|
|
404
558
|
[customUpload]="true"
|
|
@@ -416,35 +570,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
416
570
|
@if (files && files.length > 0) {
|
|
417
571
|
<div class="flex flex-col gap-2">
|
|
418
572
|
@for (file of files; track file.name) {
|
|
419
|
-
<div
|
|
420
|
-
|
|
573
|
+
<div
|
|
574
|
+
class="flex items-center gap-3 p-3 border border-surface rounded-lg bg-surface-ground"
|
|
575
|
+
>
|
|
576
|
+
<i
|
|
577
|
+
class="pi pi-file text-xl sm:text-2xl text-primary"
|
|
578
|
+
></i>
|
|
421
579
|
<div class="flex-1 min-w-0">
|
|
422
|
-
<div class="font-medium truncate">
|
|
423
|
-
|
|
580
|
+
<div class="font-medium truncate">
|
|
581
|
+
{{ file.name }}
|
|
582
|
+
</div>
|
|
583
|
+
<div class="text-sm text-muted-color">
|
|
584
|
+
{{ formatFileSize(file.size) }}
|
|
585
|
+
</div>
|
|
424
586
|
</div>
|
|
425
|
-
<p-button
|
|
587
|
+
<p-button
|
|
588
|
+
icon="pi pi-times"
|
|
589
|
+
[text]="true"
|
|
590
|
+
severity="danger"
|
|
591
|
+
size="small"
|
|
592
|
+
(onClick)="fileUpload.clear()"
|
|
593
|
+
/>
|
|
426
594
|
</div>
|
|
427
595
|
}
|
|
428
596
|
</div>
|
|
429
597
|
} @else {
|
|
430
|
-
<div
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
<
|
|
598
|
+
<div
|
|
599
|
+
class="flex items-center justify-center flex-col p-6 sm:p-8 border-2 border-dashed border-surface rounded-lg"
|
|
600
|
+
>
|
|
601
|
+
<i
|
|
602
|
+
class="pi pi-cloud-upload text-3xl sm:text-4xl text-muted-color mb-3"
|
|
603
|
+
></i>
|
|
604
|
+
<p
|
|
605
|
+
class="text-muted-color text-center text-sm sm:text-base"
|
|
606
|
+
>
|
|
607
|
+
{{ 'storage.upload.drag.drop' | translate }}
|
|
608
|
+
</p>
|
|
609
|
+
<p class="text-xs sm:text-sm text-muted-color mt-2">
|
|
610
|
+
{{
|
|
611
|
+
'storage.upload.max.size' | translate: { size: '50MB' }
|
|
612
|
+
}}
|
|
613
|
+
</p>
|
|
434
614
|
</div>
|
|
435
615
|
}
|
|
436
616
|
</ng-template>
|
|
437
617
|
</p-fileupload>
|
|
438
618
|
@if (!selectedFile() && !isEditMode()) {
|
|
439
|
-
<small class="text-muted-color">{{
|
|
619
|
+
<small class="text-muted-color">{{
|
|
620
|
+
'storage.upload.please.select' | translate
|
|
621
|
+
}}</small>
|
|
440
622
|
}
|
|
441
623
|
</div>
|
|
442
624
|
}
|
|
443
625
|
|
|
444
626
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
445
627
|
<div class="field md:col-span-2">
|
|
446
|
-
<label
|
|
447
|
-
|
|
628
|
+
<label
|
|
629
|
+
for="name"
|
|
630
|
+
class="block font-medium mb-2 text-sm sm:text-base"
|
|
631
|
+
>{{ 'storage.file.name.required' | translate }}</label
|
|
632
|
+
>
|
|
633
|
+
<input
|
|
634
|
+
pInputText
|
|
635
|
+
id="name"
|
|
636
|
+
[formField]="fileForm.name"
|
|
637
|
+
[placeholder]="
|
|
638
|
+
(isEditMode()
|
|
639
|
+
? 'storage.file.placeholder.edit'
|
|
640
|
+
: 'storage.file.placeholder'
|
|
641
|
+
) | translate
|
|
642
|
+
"
|
|
643
|
+
class="w-full"
|
|
644
|
+
/>
|
|
448
645
|
</div>
|
|
449
646
|
|
|
450
647
|
<div class="field">
|
|
@@ -453,18 +650,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
453
650
|
<span>{{ 'storage.file.private' | translate }}</span>
|
|
454
651
|
</label>
|
|
455
652
|
<small class="text-muted-color block mt-2">
|
|
456
|
-
{{
|
|
653
|
+
{{
|
|
654
|
+
(formModel().isPrivate
|
|
655
|
+
? 'storage.file.private.hint'
|
|
656
|
+
: 'storage.file.public.hint'
|
|
657
|
+
) | translate
|
|
658
|
+
}}
|
|
457
659
|
</small>
|
|
458
660
|
</div>
|
|
459
661
|
</div>
|
|
460
662
|
|
|
461
663
|
<div class="flex justify-end gap-2 mt-4">
|
|
462
|
-
<p-button
|
|
664
|
+
<p-button
|
|
665
|
+
[label]="'shared.cancel' | translate"
|
|
666
|
+
severity="secondary"
|
|
667
|
+
[outlined]="true"
|
|
668
|
+
(onClick)="onCancel()"
|
|
669
|
+
/>
|
|
463
670
|
<p-button
|
|
464
671
|
type="submit"
|
|
465
|
-
[label]="
|
|
672
|
+
[label]="
|
|
673
|
+
(isEditMode() ? 'shared.update' : 'shared.upload') | translate
|
|
674
|
+
"
|
|
466
675
|
[loading]="isLoading()"
|
|
467
|
-
[disabled]="
|
|
676
|
+
[disabled]="
|
|
677
|
+
!isFormValid() ||
|
|
678
|
+
(!isEditMode() && !selectedFile()) ||
|
|
679
|
+
isLoading()
|
|
680
|
+
"
|
|
468
681
|
/>
|
|
469
682
|
</div>
|
|
470
683
|
</form>
|
|
@@ -474,4 +687,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
474
687
|
}], ctorParameters: () => [] });
|
|
475
688
|
|
|
476
689
|
export { FileManagerFormComponent };
|
|
477
|
-
//# sourceMappingURL=flusys-ng-storage-file-manager-form.component-
|
|
690
|
+
//# sourceMappingURL=flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs.map
|