@flusys/ng-storage 5.5.0 → 6.0.0-beta.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/fesm2022/{flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs → flusys-ng-storage-file-manager-form.component-V-ZDWkKU.mjs} +83 -126
- package/fesm2022/flusys-ng-storage-file-manager-form.component-V-ZDWkKU.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-file-manager-list.component-D_shqU2a.mjs → flusys-ng-storage-file-manager-list.component-DqHH9lI0.mjs} +76 -74
- package/fesm2022/flusys-ng-storage-file-manager-list.component-DqHH9lI0.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-folder-form.component-BK2EWeV4.mjs → flusys-ng-storage-folder-form.component-Up9luV7j.mjs} +17 -17
- package/fesm2022/flusys-ng-storage-folder-form.component-Up9luV7j.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-folder-list.component-aQXBRZiN.mjs → flusys-ng-storage-folder-list.component-B52N1JaK.mjs} +32 -35
- package/fesm2022/flusys-ng-storage-folder-list.component-B52N1JaK.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs → flusys-ng-storage-storage-config-form.component-CEW5gpSt.mjs} +63 -68
- package/fesm2022/flusys-ng-storage-storage-config-form.component-CEW5gpSt.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs → flusys-ng-storage-storage-config-list.component-C-jaO7xD.mjs} +34 -38
- package/fesm2022/flusys-ng-storage-storage-config-list.component-C-jaO7xD.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage.mjs +72 -83
- package/fesm2022/flusys-ng-storage.mjs.map +1 -1
- package/package.json +5 -7
- package/types/flusys-ng-storage.d.ts +5 -11
- package/fesm2022/flusys-ng-storage-file-manager-form.component--W6sWv7W.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-file-manager-list.component-D_shqU2a.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-form.component-BK2EWeV4.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-list.component-aQXBRZiN.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-form.component-ByRs-CSx.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-list.component-cjiA8k2G.mjs.map +0 -1
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, signal, Component } from '@angular/core';
|
|
3
|
-
import { FILE_PERMISSIONS, TranslateService, AngularModule,
|
|
3
|
+
import { FILE_PERMISSIONS, TranslateService, AngularModule, HasPermissionDirective, TranslatePipe } from '@flusys/ng-shared';
|
|
4
|
+
import * as i1 from '@flusys/ng-ui';
|
|
5
|
+
import { UiModule } from '@flusys/ng-ui';
|
|
4
6
|
import { firstValueFrom } from 'rxjs';
|
|
5
7
|
import { BaseStorageListPage, FileManagerApiService, getFileIcon, getProviderLabelKey, getProviderSeverity } from './flusys-ng-storage.mjs';
|
|
6
|
-
import * as
|
|
7
|
-
import * as i2 from 'primeng/table';
|
|
8
|
-
import * as i3 from 'primeng/tag';
|
|
9
|
-
import * as i4 from 'primeng/tooltip';
|
|
10
|
-
import * as i5 from '@angular/common';
|
|
8
|
+
import * as i2 from '@angular/common';
|
|
11
9
|
|
|
12
10
|
class FileManagerListComponent extends BaseStorageListPage {
|
|
13
11
|
FILE_PERMISSIONS = FILE_PERMISSIONS;
|
|
@@ -67,18 +65,21 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
67
65
|
this.confirmationService.confirm({
|
|
68
66
|
message: this.translateService.translate('storage.delete.move.to.trash.confirm', { name: file.name }),
|
|
69
67
|
header: this.translateService.translate('storage.delete.move.to.trash'),
|
|
70
|
-
icon: '
|
|
68
|
+
icon: 'trash',
|
|
71
69
|
acceptLabel: this.translateService.translate('storage.delete.move.to.trash'),
|
|
72
70
|
acceptButtonStyleClass: 'p-button-warning',
|
|
73
71
|
accept: async () => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
try {
|
|
73
|
+
const response = await this.fileService.delete({
|
|
74
|
+
id: file.id,
|
|
75
|
+
type: 'delete',
|
|
76
|
+
});
|
|
77
|
+
this.showSuccess(response?.messageKey
|
|
78
|
+
? this.translateService.translate(response.messageKey, response.messageVariables)
|
|
79
|
+
: (response?.message ?? ''));
|
|
80
|
+
this.loadData();
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
82
83
|
},
|
|
83
84
|
});
|
|
84
85
|
}
|
|
@@ -86,24 +87,27 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
86
87
|
this.confirmationService.confirm({
|
|
87
88
|
message: this.translateService.translate('storage.delete.permanent.delete.confirm', { name: file.name }),
|
|
88
89
|
header: this.translateService.translate('storage.delete.permanent.delete'),
|
|
89
|
-
icon: '
|
|
90
|
+
icon: 'exclamation-triangle',
|
|
90
91
|
acceptLabel: this.translateService.translate('storage.delete.permanent.delete.button'),
|
|
91
92
|
rejectLabel: this.translateService.translate('shared.cancel'),
|
|
92
93
|
acceptButtonStyleClass: 'p-button-danger',
|
|
93
94
|
accept: async () => {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
try {
|
|
96
|
+
const response = await this.fileService.delete({
|
|
97
|
+
id: file.id,
|
|
98
|
+
type: 'permanent',
|
|
99
|
+
});
|
|
100
|
+
this.showSuccess(response?.messageKey
|
|
101
|
+
? this.translateService.translate(response.messageKey, response.messageVariables)
|
|
102
|
+
: (response?.message ?? ''));
|
|
103
|
+
this.loadData();
|
|
104
|
+
}
|
|
105
|
+
catch { }
|
|
102
106
|
},
|
|
103
107
|
});
|
|
104
108
|
}
|
|
105
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
106
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
109
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FileManagerListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: FileManagerListComponent, isStandalone: true, selector: "lib-file-manager-list", usesInheritance: true, ngImport: i0, template: `
|
|
107
111
|
<div class="card">
|
|
108
112
|
<div
|
|
109
113
|
class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4"
|
|
@@ -119,18 +123,18 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
119
123
|
}
|
|
120
124
|
</div>
|
|
121
125
|
<button
|
|
122
|
-
|
|
126
|
+
fButton
|
|
123
127
|
*hasPermission="FILE_PERMISSIONS.CREATE"
|
|
124
128
|
(click)="onUpload()"
|
|
125
129
|
class="w-full sm:w-auto"
|
|
126
130
|
>
|
|
127
|
-
<
|
|
131
|
+
<ui-icon pButtonIcon name="upload"></ui-icon>
|
|
128
132
|
<span pButtonLabel>{{ 'storage.button.upload.file' | translate }}</span>
|
|
129
133
|
</button>
|
|
130
134
|
</div>
|
|
131
135
|
|
|
132
136
|
<div class="overflow-x-auto">
|
|
133
|
-
<
|
|
137
|
+
<f-table
|
|
134
138
|
[value]="files()"
|
|
135
139
|
[loading]="isLoading()"
|
|
136
140
|
[paginator]="totalRecords() > 0"
|
|
@@ -140,7 +144,6 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
140
144
|
(onLazyLoad)="onPageChange($event)"
|
|
141
145
|
[rowsPerPageOptions]="[10, 25, 50]"
|
|
142
146
|
[scrollable]="true"
|
|
143
|
-
class="p-datatable-sm"
|
|
144
147
|
>
|
|
145
148
|
<ng-template #header>
|
|
146
149
|
<tr>
|
|
@@ -165,7 +168,7 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
165
168
|
<tr>
|
|
166
169
|
<td>
|
|
167
170
|
<div class="flex items-center gap-2">
|
|
168
|
-
<
|
|
171
|
+
<ui-icon [name]="getFileIcon(file.contentType)"></ui-icon>
|
|
169
172
|
<span class="truncate max-w-32 sm:max-w-none">{{
|
|
170
173
|
file.name
|
|
171
174
|
}}</span>
|
|
@@ -178,7 +181,7 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
178
181
|
</td>
|
|
179
182
|
<td>{{ file.size }} {{ 'shared.size.kb' | translate }}</td>
|
|
180
183
|
<td>
|
|
181
|
-
<
|
|
184
|
+
<f-tag
|
|
182
185
|
[value]="getProviderLabelKey(file.location) | translate"
|
|
183
186
|
[severity]="getProviderSeverity(file.location)"
|
|
184
187
|
/>
|
|
@@ -188,12 +191,12 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
188
191
|
</td>
|
|
189
192
|
<td>
|
|
190
193
|
@if (file.isPrivate) {
|
|
191
|
-
<
|
|
194
|
+
<f-tag
|
|
192
195
|
[value]="'storage.private' | translate"
|
|
193
196
|
severity="warn"
|
|
194
197
|
/>
|
|
195
198
|
} @else {
|
|
196
|
-
<
|
|
199
|
+
<f-tag
|
|
197
200
|
[value]="'storage.public' | translate"
|
|
198
201
|
severity="success"
|
|
199
202
|
/>
|
|
@@ -205,57 +208,57 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
205
208
|
<td>
|
|
206
209
|
<div class="flex gap-1">
|
|
207
210
|
<button
|
|
208
|
-
|
|
211
|
+
fButton
|
|
209
212
|
*hasPermission="FILE_PERMISSIONS.READ"
|
|
210
213
|
[text]="true"
|
|
211
214
|
severity="secondary"
|
|
212
215
|
size="small"
|
|
213
216
|
[disabled]="isViewing"
|
|
214
217
|
(click)="onView(file)"
|
|
215
|
-
[
|
|
218
|
+
[fTooltip]="'shared.view' | translate"
|
|
216
219
|
tooltipPosition="top"
|
|
217
220
|
>
|
|
218
221
|
@if (isViewing) {
|
|
219
|
-
<
|
|
222
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
220
223
|
} @else {
|
|
221
|
-
<
|
|
224
|
+
<ui-icon pButtonIcon name="eye"></ui-icon>
|
|
222
225
|
}
|
|
223
226
|
</button>
|
|
224
227
|
<button
|
|
225
|
-
|
|
228
|
+
fButton
|
|
226
229
|
*hasPermission="FILE_PERMISSIONS.UPDATE"
|
|
227
230
|
[text]="true"
|
|
228
231
|
severity="secondary"
|
|
229
232
|
size="small"
|
|
230
233
|
(click)="onEdit(file.id)"
|
|
231
|
-
[
|
|
234
|
+
[fTooltip]="'shared.edit' | translate"
|
|
232
235
|
tooltipPosition="top"
|
|
233
236
|
>
|
|
234
|
-
<
|
|
237
|
+
<ui-icon pButtonIcon name="pencil"></ui-icon>
|
|
235
238
|
</button>
|
|
236
239
|
<button
|
|
237
|
-
|
|
240
|
+
fButton
|
|
238
241
|
*hasPermission="FILE_PERMISSIONS.DELETE"
|
|
239
242
|
[text]="true"
|
|
240
243
|
severity="warn"
|
|
241
244
|
size="small"
|
|
242
245
|
(click)="onSoftDelete(file)"
|
|
243
|
-
[
|
|
246
|
+
[fTooltip]="'storage.tooltip.trash' | translate"
|
|
244
247
|
tooltipPosition="top"
|
|
245
248
|
>
|
|
246
|
-
<
|
|
249
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
247
250
|
</button>
|
|
248
251
|
<button
|
|
249
|
-
|
|
252
|
+
fButton
|
|
250
253
|
*hasPermission="FILE_PERMISSIONS.DELETE"
|
|
251
254
|
[text]="true"
|
|
252
255
|
severity="danger"
|
|
253
256
|
size="small"
|
|
254
257
|
(click)="onPermanentDelete(file)"
|
|
255
|
-
[
|
|
258
|
+
[fTooltip]="'shared.delete' | translate"
|
|
256
259
|
tooltipPosition="top"
|
|
257
260
|
>
|
|
258
|
-
<
|
|
261
|
+
<ui-icon pButtonIcon name="times-circle"></ui-icon>
|
|
259
262
|
</button>
|
|
260
263
|
</div>
|
|
261
264
|
</td>
|
|
@@ -272,16 +275,16 @@ class FileManagerListComponent extends BaseStorageListPage {
|
|
|
272
275
|
</td>
|
|
273
276
|
</tr>
|
|
274
277
|
</ng-template>
|
|
275
|
-
</
|
|
278
|
+
</f-table>
|
|
276
279
|
</div>
|
|
277
280
|
</div>
|
|
278
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
281
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: i1.TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color"] }, { kind: "component", type: i1.TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "sortField", "sortOrder"], outputs: ["sortFieldChange", "sortOrderChange", "onLazyLoad", "onSort"] }, { kind: "directive", type: i1.TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay"] }, { kind: "component", type: i1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "ngmodule", type: AngularModule }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
279
282
|
}
|
|
280
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FileManagerListComponent, decorators: [{
|
|
281
284
|
type: Component,
|
|
282
285
|
args: [{
|
|
283
286
|
selector: 'lib-file-manager-list',
|
|
284
|
-
imports: [
|
|
287
|
+
imports: [UiModule, AngularModule, HasPermissionDirective, TranslatePipe],
|
|
285
288
|
template: `
|
|
286
289
|
<div class="card">
|
|
287
290
|
<div
|
|
@@ -298,18 +301,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
298
301
|
}
|
|
299
302
|
</div>
|
|
300
303
|
<button
|
|
301
|
-
|
|
304
|
+
fButton
|
|
302
305
|
*hasPermission="FILE_PERMISSIONS.CREATE"
|
|
303
306
|
(click)="onUpload()"
|
|
304
307
|
class="w-full sm:w-auto"
|
|
305
308
|
>
|
|
306
|
-
<
|
|
309
|
+
<ui-icon pButtonIcon name="upload"></ui-icon>
|
|
307
310
|
<span pButtonLabel>{{ 'storage.button.upload.file' | translate }}</span>
|
|
308
311
|
</button>
|
|
309
312
|
</div>
|
|
310
313
|
|
|
311
314
|
<div class="overflow-x-auto">
|
|
312
|
-
<
|
|
315
|
+
<f-table
|
|
313
316
|
[value]="files()"
|
|
314
317
|
[loading]="isLoading()"
|
|
315
318
|
[paginator]="totalRecords() > 0"
|
|
@@ -319,7 +322,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
319
322
|
(onLazyLoad)="onPageChange($event)"
|
|
320
323
|
[rowsPerPageOptions]="[10, 25, 50]"
|
|
321
324
|
[scrollable]="true"
|
|
322
|
-
class="p-datatable-sm"
|
|
323
325
|
>
|
|
324
326
|
<ng-template #header>
|
|
325
327
|
<tr>
|
|
@@ -344,7 +346,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
344
346
|
<tr>
|
|
345
347
|
<td>
|
|
346
348
|
<div class="flex items-center gap-2">
|
|
347
|
-
<
|
|
349
|
+
<ui-icon [name]="getFileIcon(file.contentType)"></ui-icon>
|
|
348
350
|
<span class="truncate max-w-32 sm:max-w-none">{{
|
|
349
351
|
file.name
|
|
350
352
|
}}</span>
|
|
@@ -357,7 +359,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
357
359
|
</td>
|
|
358
360
|
<td>{{ file.size }} {{ 'shared.size.kb' | translate }}</td>
|
|
359
361
|
<td>
|
|
360
|
-
<
|
|
362
|
+
<f-tag
|
|
361
363
|
[value]="getProviderLabelKey(file.location) | translate"
|
|
362
364
|
[severity]="getProviderSeverity(file.location)"
|
|
363
365
|
/>
|
|
@@ -367,12 +369,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
367
369
|
</td>
|
|
368
370
|
<td>
|
|
369
371
|
@if (file.isPrivate) {
|
|
370
|
-
<
|
|
372
|
+
<f-tag
|
|
371
373
|
[value]="'storage.private' | translate"
|
|
372
374
|
severity="warn"
|
|
373
375
|
/>
|
|
374
376
|
} @else {
|
|
375
|
-
<
|
|
377
|
+
<f-tag
|
|
376
378
|
[value]="'storage.public' | translate"
|
|
377
379
|
severity="success"
|
|
378
380
|
/>
|
|
@@ -384,57 +386,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
384
386
|
<td>
|
|
385
387
|
<div class="flex gap-1">
|
|
386
388
|
<button
|
|
387
|
-
|
|
389
|
+
fButton
|
|
388
390
|
*hasPermission="FILE_PERMISSIONS.READ"
|
|
389
391
|
[text]="true"
|
|
390
392
|
severity="secondary"
|
|
391
393
|
size="small"
|
|
392
394
|
[disabled]="isViewing"
|
|
393
395
|
(click)="onView(file)"
|
|
394
|
-
[
|
|
396
|
+
[fTooltip]="'shared.view' | translate"
|
|
395
397
|
tooltipPosition="top"
|
|
396
398
|
>
|
|
397
399
|
@if (isViewing) {
|
|
398
|
-
<
|
|
400
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
399
401
|
} @else {
|
|
400
|
-
<
|
|
402
|
+
<ui-icon pButtonIcon name="eye"></ui-icon>
|
|
401
403
|
}
|
|
402
404
|
</button>
|
|
403
405
|
<button
|
|
404
|
-
|
|
406
|
+
fButton
|
|
405
407
|
*hasPermission="FILE_PERMISSIONS.UPDATE"
|
|
406
408
|
[text]="true"
|
|
407
409
|
severity="secondary"
|
|
408
410
|
size="small"
|
|
409
411
|
(click)="onEdit(file.id)"
|
|
410
|
-
[
|
|
412
|
+
[fTooltip]="'shared.edit' | translate"
|
|
411
413
|
tooltipPosition="top"
|
|
412
414
|
>
|
|
413
|
-
<
|
|
415
|
+
<ui-icon pButtonIcon name="pencil"></ui-icon>
|
|
414
416
|
</button>
|
|
415
417
|
<button
|
|
416
|
-
|
|
418
|
+
fButton
|
|
417
419
|
*hasPermission="FILE_PERMISSIONS.DELETE"
|
|
418
420
|
[text]="true"
|
|
419
421
|
severity="warn"
|
|
420
422
|
size="small"
|
|
421
423
|
(click)="onSoftDelete(file)"
|
|
422
|
-
[
|
|
424
|
+
[fTooltip]="'storage.tooltip.trash' | translate"
|
|
423
425
|
tooltipPosition="top"
|
|
424
426
|
>
|
|
425
|
-
<
|
|
427
|
+
<ui-icon pButtonIcon name="trash"></ui-icon>
|
|
426
428
|
</button>
|
|
427
429
|
<button
|
|
428
|
-
|
|
430
|
+
fButton
|
|
429
431
|
*hasPermission="FILE_PERMISSIONS.DELETE"
|
|
430
432
|
[text]="true"
|
|
431
433
|
severity="danger"
|
|
432
434
|
size="small"
|
|
433
435
|
(click)="onPermanentDelete(file)"
|
|
434
|
-
[
|
|
436
|
+
[fTooltip]="'shared.delete' | translate"
|
|
435
437
|
tooltipPosition="top"
|
|
436
438
|
>
|
|
437
|
-
<
|
|
439
|
+
<ui-icon pButtonIcon name="times-circle"></ui-icon>
|
|
438
440
|
</button>
|
|
439
441
|
</div>
|
|
440
442
|
</td>
|
|
@@ -451,7 +453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
451
453
|
</td>
|
|
452
454
|
</tr>
|
|
453
455
|
</ng-template>
|
|
454
|
-
</
|
|
456
|
+
</f-table>
|
|
455
457
|
</div>
|
|
456
458
|
</div>
|
|
457
459
|
`,
|
|
@@ -459,4 +461,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
459
461
|
}] });
|
|
460
462
|
|
|
461
463
|
export { FileManagerListComponent };
|
|
462
|
-
//# sourceMappingURL=flusys-ng-storage-file-manager-list.component-
|
|
464
|
+
//# sourceMappingURL=flusys-ng-storage-file-manager-list.component-DqHH9lI0.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-file-manager-list.component-DqHH9lI0.mjs","sources":["../../../projects/ng-storage/pages/file-manager/file-manager-list.component.ts"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\nimport {\n AngularModule,\n FILE_PERMISSIONS,\n HasPermissionDirective,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { UiModule } from '@flusys/ng-ui';\nimport { firstValueFrom } from 'rxjs';\nimport { IFileManager } from '../../interfaces/file-manager.interface';\nimport { FileManagerApiService } from '../../services/file-manager-api.service';\nimport { BaseStorageListPage } from '../../utils/base-storage-page';\n\nimport {\n getFileIcon,\n getProviderLabelKey,\n getProviderSeverity,\n} from '../../utils/storage-utils';\n\n@Component({\n selector: 'lib-file-manager-list',\n imports: [UiModule, AngularModule, HasPermissionDirective, TranslatePipe],\n template: `\n <div class=\"card\">\n <div\n class=\"flex flex-col sm:flex-row sm:justify-between sm:items-center gap-3 mb-4\"\n >\n <div>\n <h3 class=\"text-lg sm:text-xl font-semibold\">\n {{ 'storage.file.manager.title' | translate }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">\n {{ 'shared.company' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n </div>\n <button\n fButton\n *hasPermission=\"FILE_PERMISSIONS.CREATE\"\n (click)=\"onUpload()\"\n class=\"w-full sm:w-auto\"\n >\n <ui-icon pButtonIcon name=\"upload\"></ui-icon>\n <span pButtonLabel>{{ 'storage.button.upload.file' | translate }}</span>\n </button>\n </div>\n\n <div class=\"overflow-x-auto\">\n <f-table\n [value]=\"files()\"\n [loading]=\"isLoading()\"\n [paginator]=\"totalRecords() > 0\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"totalRecords()\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n [rowsPerPageOptions]=\"[10, 25, 50]\"\n [scrollable]=\"true\"\n >\n <ng-template #header>\n <tr>\n <th>{{ 'shared.name' | translate }}</th>\n <th class=\"hidden lg:table-cell\">\n {{ 'shared.type' | translate }}\n </th>\n <th>{{ 'storage.table.size' | translate }}</th>\n <th>{{ 'storage.table.location' | translate }}</th>\n <th class=\"hidden xl:table-cell\">\n {{ 'storage.table.config' | translate }}\n </th>\n <th>{{ 'storage.table.private' | translate }}</th>\n <th class=\"hidden md:table-cell\">\n {{ 'storage.table.created' | translate }}\n </th>\n <th class=\"w-[120px]\">{{ 'shared.actions' | translate }}</th>\n </tr>\n </ng-template>\n <ng-template #body let-file>\n @let isViewing = viewingFileId() === file.id;\n <tr>\n <td>\n <div class=\"flex items-center gap-2\">\n <ui-icon [name]=\"getFileIcon(file.contentType)\"></ui-icon>\n <span class=\"truncate max-w-32 sm:max-w-none\">{{\n file.name\n }}</span>\n </div>\n </td>\n <td class=\"hidden lg:table-cell\">\n <span class=\"text-sm text-muted-color\">{{\n file.contentType\n }}</span>\n </td>\n <td>{{ file.size }} {{ 'shared.size.kb' | translate }}</td>\n <td>\n <f-tag\n [value]=\"getProviderLabelKey(file.location) | translate\"\n [severity]=\"getProviderSeverity(file.location)\"\n />\n </td>\n <td class=\"hidden xl:table-cell\">\n {{ file.providerName || '-' }}\n </td>\n <td>\n @if (file.isPrivate) {\n <f-tag\n [value]=\"'storage.private' | translate\"\n severity=\"warn\"\n />\n } @else {\n <f-tag\n [value]=\"'storage.public' | translate\"\n severity=\"success\"\n />\n }\n </td>\n <td class=\"hidden md:table-cell\">\n {{ file.createdAt | date: 'short' }}\n </td>\n <td>\n <div class=\"flex gap-1\">\n <button\n fButton\n *hasPermission=\"FILE_PERMISSIONS.READ\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n [disabled]=\"isViewing\"\n (click)=\"onView(file)\"\n [fTooltip]=\"'shared.view' | translate\"\n tooltipPosition=\"top\"\n >\n @if (isViewing) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n } @else {\n <ui-icon pButtonIcon name=\"eye\"></ui-icon>\n }\n </button>\n <button\n fButton\n *hasPermission=\"FILE_PERMISSIONS.UPDATE\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n (click)=\"onEdit(file.id)\"\n [fTooltip]=\"'shared.edit' | translate\"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"pencil\"></ui-icon>\n </button>\n <button\n fButton\n *hasPermission=\"FILE_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"warn\"\n size=\"small\"\n (click)=\"onSoftDelete(file)\"\n [fTooltip]=\"'storage.tooltip.trash' | translate\"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"trash\"></ui-icon>\n </button>\n <button\n fButton\n *hasPermission=\"FILE_PERMISSIONS.DELETE\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n (click)=\"onPermanentDelete(file)\"\n [fTooltip]=\"'shared.delete' | translate\"\n tooltipPosition=\"top\"\n >\n <ui-icon pButtonIcon name=\"times-circle\"></ui-icon>\n </button>\n </div>\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"8\" class=\"text-center py-4 text-muted-color\">\n @if (showCompanyInfo()) {\n {{ 'storage.empty.files.in.company' | translate }}\n } @else {\n {{ 'storage.empty.files' | translate }}\n }\n </td>\n </tr>\n </ng-template>\n </f-table>\n </div>\n </div>\n `,\n})\nexport class FileManagerListComponent extends BaseStorageListPage<IFileManager> {\n readonly FILE_PERMISSIONS = FILE_PERMISSIONS;\n\n private readonly fileService = inject(FileManagerApiService);\n private readonly translateService = inject(TranslateService);\n\n readonly files = this.items;\n readonly viewingFileId = signal<string | null>(null);\n\n readonly getFileIcon = getFileIcon;\n readonly getProviderLabelKey = getProviderLabelKey;\n readonly getProviderSeverity = getProviderSeverity;\n\n getResourceRoute(): string {\n return '/storage/files';\n }\n\n override getDeleteConfirmMessage(file: IFileManager): string {\n return this.translateService.translate('shared.confirm.delete.item', {\n name: file.name,\n });\n }\n\n async loadData(): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.fileService.getAll({\n pagination: this.getPaginationParams(),\n filter: {},\n select: [],\n sort: {},\n });\n\n if (response.success) {\n this.items.set(response.data ?? []);\n this.total.set(response.meta?.total ?? 0);\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onUpload(): void {\n this.navigateTo(['/storage/files/new']);\n }\n\n async onView(file: IFileManager): Promise<void> {\n this.viewingFileId.set(file.id);\n try {\n const response = await firstValueFrom(\n this.fileService.getFiles([file.id]),\n );\n\n if (response.success && response.data?.length && response.data[0].url) {\n window.open(response.data[0].url, '_blank');\n } else {\n this.showError(\n this.translateService.translate('storage.file.url.not.available'),\n );\n }\n } finally {\n this.viewingFileId.set(null);\n }\n }\n\n onSoftDelete(file: IFileManager): void {\n this.confirmationService.confirm({\n message: this.translateService.translate(\n 'storage.delete.move.to.trash.confirm',\n { name: file.name },\n ),\n header: this.translateService.translate('storage.delete.move.to.trash'),\n icon: 'trash',\n acceptLabel: this.translateService.translate(\n 'storage.delete.move.to.trash',\n ),\n acceptButtonStyleClass: 'p-button-warning',\n accept: async () => {\n try {\n const response = await this.fileService.delete({\n id: file.id,\n type: 'delete',\n });\n this.showSuccess(\n response?.messageKey\n ? this.translateService.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response?.message ?? ''),\n );\n this.loadData();\n } catch {}\n },\n });\n }\n\n onPermanentDelete(file: IFileManager): void {\n this.confirmationService.confirm({\n message: this.translateService.translate(\n 'storage.delete.permanent.delete.confirm',\n { name: file.name },\n ),\n header: this.translateService.translate(\n 'storage.delete.permanent.delete',\n ),\n icon: 'exclamation-triangle',\n acceptLabel: this.translateService.translate(\n 'storage.delete.permanent.delete.button',\n ),\n rejectLabel: this.translateService.translate('shared.cancel'),\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n const response = await this.fileService.delete({\n id: file.id,\n type: 'permanent',\n });\n this.showSuccess(\n response?.messageKey\n ? this.translateService.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response?.message ?? ''),\n );\n this.loadData();\n } catch {}\n },\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@ import { inject, signal, computed, effect, Component } from '@angular/core';
|
|
|
3
3
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { form, required, FormField } from '@angular/forms/signals';
|
|
5
5
|
import { ActivatedRoute } from '@angular/router';
|
|
6
|
-
import { TranslateService, AngularModule,
|
|
6
|
+
import { TranslateService, AngularModule, TranslatePipe } from '@flusys/ng-shared';
|
|
7
7
|
import { BaseStoragePage, FolderApiService } from './flusys-ng-storage.mjs';
|
|
8
|
+
import * as i1$1 from '@flusys/ng-ui';
|
|
9
|
+
import { UiModule } from '@flusys/ng-ui';
|
|
8
10
|
import * as i1 from '@angular/forms';
|
|
9
|
-
import * as i1$1 from 'primeng/button';
|
|
10
|
-
import * as i3 from 'primeng/inputtext';
|
|
11
11
|
|
|
12
12
|
class FolderFormComponent extends BaseStoragePage {
|
|
13
13
|
route = inject(ActivatedRoute);
|
|
@@ -82,8 +82,8 @@ class FolderFormComponent extends BaseStoragePage {
|
|
|
82
82
|
onCancel() {
|
|
83
83
|
this.navigateTo(['/storage/folders']);
|
|
84
84
|
}
|
|
85
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
86
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FolderFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: FolderFormComponent, isStandalone: true, selector: "lib-folder-form", usesInheritance: true, ngImport: i0, template: `
|
|
87
87
|
<div class="card">
|
|
88
88
|
<div class="mb-4">
|
|
89
89
|
<h3 class="text-lg sm:text-xl font-semibold">
|
|
@@ -110,7 +110,7 @@ class FolderFormComponent extends BaseStoragePage {
|
|
|
110
110
|
>{{ 'storage.folder.name.required' | translate }}</label
|
|
111
111
|
>
|
|
112
112
|
<input
|
|
113
|
-
|
|
113
|
+
fInputText
|
|
114
114
|
id="name"
|
|
115
115
|
[formField]="folderForm.name"
|
|
116
116
|
[placeholder]="'storage.folder.name.placeholder' | translate"
|
|
@@ -121,7 +121,7 @@ class FolderFormComponent extends BaseStoragePage {
|
|
|
121
121
|
|
|
122
122
|
<div class="flex justify-end gap-2 mt-4">
|
|
123
123
|
<button
|
|
124
|
-
|
|
124
|
+
fButton
|
|
125
125
|
severity="secondary"
|
|
126
126
|
[outlined]="true"
|
|
127
127
|
(click)="onCancel()"
|
|
@@ -129,12 +129,12 @@ class FolderFormComponent extends BaseStoragePage {
|
|
|
129
129
|
<span pButtonLabel>{{ 'shared.cancel' | translate }}</span>
|
|
130
130
|
</button>
|
|
131
131
|
<button
|
|
132
|
-
|
|
132
|
+
fButton
|
|
133
133
|
type="submit"
|
|
134
134
|
[disabled]="!isFormValid() || isLoading()"
|
|
135
135
|
>
|
|
136
136
|
@if (isLoading()) {
|
|
137
|
-
<
|
|
137
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
138
138
|
}
|
|
139
139
|
<span pButtonLabel>{{
|
|
140
140
|
(isEditMode() ? 'shared.update' : 'shared.create') | translate
|
|
@@ -143,13 +143,13 @@ class FolderFormComponent extends BaseStoragePage {
|
|
|
143
143
|
</div>
|
|
144
144
|
</form>
|
|
145
145
|
</div>
|
|
146
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type:
|
|
146
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: UiModule }, { kind: "directive", type: i1$1.FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "rounded", "raised", "fluid", "disabled", "loading", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: i1$1.InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched"] }, { kind: "component", type: i1$1.UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
147
147
|
}
|
|
148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FolderFormComponent, decorators: [{
|
|
149
149
|
type: Component,
|
|
150
150
|
args: [{
|
|
151
151
|
selector: 'lib-folder-form',
|
|
152
|
-
imports: [AngularModule,
|
|
152
|
+
imports: [AngularModule, UiModule, FormField, TranslatePipe],
|
|
153
153
|
template: `
|
|
154
154
|
<div class="card">
|
|
155
155
|
<div class="mb-4">
|
|
@@ -177,7 +177,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
177
177
|
>{{ 'storage.folder.name.required' | translate }}</label
|
|
178
178
|
>
|
|
179
179
|
<input
|
|
180
|
-
|
|
180
|
+
fInputText
|
|
181
181
|
id="name"
|
|
182
182
|
[formField]="folderForm.name"
|
|
183
183
|
[placeholder]="'storage.folder.name.placeholder' | translate"
|
|
@@ -188,7 +188,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
188
188
|
|
|
189
189
|
<div class="flex justify-end gap-2 mt-4">
|
|
190
190
|
<button
|
|
191
|
-
|
|
191
|
+
fButton
|
|
192
192
|
severity="secondary"
|
|
193
193
|
[outlined]="true"
|
|
194
194
|
(click)="onCancel()"
|
|
@@ -196,12 +196,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
196
196
|
<span pButtonLabel>{{ 'shared.cancel' | translate }}</span>
|
|
197
197
|
</button>
|
|
198
198
|
<button
|
|
199
|
-
|
|
199
|
+
fButton
|
|
200
200
|
type="submit"
|
|
201
201
|
[disabled]="!isFormValid() || isLoading()"
|
|
202
202
|
>
|
|
203
203
|
@if (isLoading()) {
|
|
204
|
-
<
|
|
204
|
+
<ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
|
|
205
205
|
}
|
|
206
206
|
<span pButtonLabel>{{
|
|
207
207
|
(isEditMode() ? 'shared.update' : 'shared.create') | translate
|
|
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
215
215
|
}], ctorParameters: () => [] });
|
|
216
216
|
|
|
217
217
|
export { FolderFormComponent };
|
|
218
|
-
//# sourceMappingURL=flusys-ng-storage-folder-form.component-
|
|
218
|
+
//# sourceMappingURL=flusys-ng-storage-folder-form.component-Up9luV7j.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flusys-ng-storage-folder-form.component-Up9luV7j.mjs","sources":["../../../projects/ng-storage/pages/folder/folder-form.component.ts"],"sourcesContent":["import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { form, FormField, required } from '@angular/forms/signals';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n AngularModule,\n TranslatePipe,\n TranslateService,\n} from '@flusys/ng-shared';\nimport { IFolder } from '../../interfaces/folder.interface';\nimport { FolderApiService } from '../../services/folder-api.service';\nimport { BaseStoragePage } from '../../utils/base-storage-page';\nimport { UiModule } from '@flusys/ng-ui';\n\ninterface IFolderFormModel {\n id: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-folder-form',\n imports: [AngularModule, UiModule, FormField, TranslatePipe],\n template: `\n <div class=\"card\">\n <div class=\"mb-4\">\n <h3 class=\"text-lg sm:text-xl font-semibold\">\n {{\n (isEditMode()\n ? 'storage.folder.edit.folder'\n : 'storage.folder.new.folder'\n ) | translate\n }}\n </h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-muted-color mt-1\">\n {{ 'shared.company' | translate }}: {{ currentCompanyName() }}\n </p>\n }\n </div>\n\n <form (ngSubmit)=\"onSubmit()\">\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div class=\"field\">\n <label\n for=\"name\"\n class=\"block font-medium mb-2 text-sm sm:text-base\"\n >{{ 'storage.folder.name.required' | translate }}</label\n >\n <input\n fInputText\n id=\"name\"\n [formField]=\"folderForm.name\"\n [placeholder]=\"'storage.folder.name.placeholder' | translate\"\n class=\"w-full\"\n />\n </div>\n </div>\n\n <div class=\"flex justify-end gap-2 mt-4\">\n <button\n fButton\n severity=\"secondary\"\n [outlined]=\"true\"\n (click)=\"onCancel()\"\n >\n <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>\n </button>\n <button\n fButton\n type=\"submit\"\n [disabled]=\"!isFormValid() || isLoading()\"\n >\n @if (isLoading()) {\n <ui-icon pButtonIcon name=\"spinner\" [spin]=\"true\"></ui-icon>\n }\n <span pButtonLabel>{{ \n (isEditMode() ? 'shared.update' : 'shared.create') | translate\n }}</span>\n </button>\n </div>\n </form>\n </div>\n `,\n})\nexport class FolderFormComponent extends BaseStoragePage {\n private readonly route = inject(ActivatedRoute);\n private readonly folderService = inject(FolderApiService);\n private readonly translateService = inject(TranslateService);\n\n private readonly routeParams = toSignal(this.route.paramMap);\n private initialized = false;\n\n readonly existingFolder = signal<IFolder | null>(null);\n readonly isEditMode = computed(() => !!this.existingFolder());\n\n readonly formModel = signal<IFolderFormModel>({\n id: '',\n name: '',\n });\n\n readonly folderForm = form(this.formModel, (f) => {\n required(f.name, {\n message: this.translateService.translate(\n 'storage.validation.folder.name.required',\n ),\n });\n });\n\n readonly isFormValid = computed(\n () => this.formModel().name.trim().length > 0,\n );\n\n constructor() {\n super();\n effect(() => {\n const params = this.routeParams();\n if (!params || this.initialized) return;\n\n this.initialized = true;\n const folderId = params.get('id');\n if (folderId && folderId !== 'new') {\n this.loadFolder(folderId);\n }\n });\n }\n\n async loadFolder(id: string): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await this.folderService.findById(id);\n if (response.success && response.data) {\n const folder = response.data;\n this.existingFolder.set(folder);\n this.formModel.set({ id: folder.id, name: folder.name });\n }\n } finally {\n this.isLoading.set(false);\n }\n }\n\n async onSubmit(): Promise<void> {\n if (!this.isFormValid()) return;\n\n this.isLoading.set(true);\n try {\n const formValue = this.formModel();\n\n const response = this.isEditMode()\n ? await this.folderService.update({\n id: formValue.id,\n name: formValue.name,\n })\n : await this.folderService.insert({ name: formValue.name });\n\n this.showSuccess(\n response.messageKey\n ? this.translateService.translate(\n response.messageKey,\n response.messageVariables as Record<string, string | number>,\n )\n : (response.message ?? ''),\n );\n\n this.navigateTo(['/storage/folders']);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onCancel(): void {\n this.navigateTo(['/storage/folders']);\n }\n}\n"],"names":["i2"],"mappings":"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"}
|