@flusys/ng-storage 1.1.0-beta → 1.1.0
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 +144 -5
- package/fesm2022/{flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs → flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs} +120 -351
- package/fesm2022/flusys-ng-storage-file-manager-form.component-CXVB9G-f.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage-file-manager-list.component-0O_b4EjN.mjs +304 -0
- package/fesm2022/flusys-ng-storage-file-manager-list.component-0O_b4EjN.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage-folder-form.component-BTQGEqNu.mjs +155 -0
- package/fesm2022/flusys-ng-storage-folder-form.component-BTQGEqNu.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage-folder-list.component-B8GoIh6Z.mjs +194 -0
- package/fesm2022/flusys-ng-storage-folder-list.component-B8GoIh6Z.mjs.map +1 -0
- package/fesm2022/{flusys-ng-storage-storage-config-form.component-SEYIBife.mjs → flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs} +219 -302
- package/fesm2022/flusys-ng-storage-storage-config-form.component-CorNWrmF.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs +187 -0
- package/fesm2022/flusys-ng-storage-storage-config-list.component-YXzz3Tvo.mjs.map +1 -0
- package/fesm2022/flusys-ng-storage.mjs +267 -226
- package/fesm2022/flusys-ng-storage.mjs.map +1 -1
- package/package.json +9 -9
- package/types/flusys-ng-storage.d.ts +101 -151
- package/fesm2022/flusys-ng-storage-file-manager-form.component-CxAYC6nj.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-file-manager-list.component-BevfDZO0.mjs +0 -475
- package/fesm2022/flusys-ng-storage-file-manager-list.component-BevfDZO0.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-form.component-BhurG3dl.mjs +0 -253
- package/fesm2022/flusys-ng-storage-folder-form.component-BhurG3dl.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-folder-list.component-Clrjcw0B.mjs +0 -267
- package/fesm2022/flusys-ng-storage-folder-list.component-Clrjcw0B.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-form.component-SEYIBife.mjs.map +0 -1
- package/fesm2022/flusys-ng-storage-storage-config-list.component-CofVBysj.mjs +0 -328
- package/fesm2022/flusys-ng-storage-storage-config-list.component-CofVBysj.mjs.map +0 -1
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, signal, computed, Component } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
4
|
-
import { APP_CONFIG, DEFAULT_APP_NAME } from '@flusys/ng-core';
|
|
5
|
-
import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
|
|
6
|
-
import { AngularModule, PrimeModule } from '@flusys/ng-shared';
|
|
7
|
-
import { MessageService, ConfirmationService } from 'primeng/api';
|
|
8
|
-
import { firstValueFrom } from 'rxjs';
|
|
9
|
-
import { StorageConfigApiService, FileLocationEnum } from './flusys-ng-storage.mjs';
|
|
10
|
-
import * as i1 from 'primeng/button';
|
|
11
|
-
import * as i2 from 'primeng/table';
|
|
12
|
-
import * as i3 from 'primeng/tag';
|
|
13
|
-
import * as i5 from '@angular/common';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Storage Config List Component
|
|
17
|
-
* Displays all storage configurations with company filter (if enabled)
|
|
18
|
-
* Shows current company name in header
|
|
19
|
-
*/
|
|
20
|
-
class StorageConfigListComponent {
|
|
21
|
-
router = inject(Router);
|
|
22
|
-
messageService = inject(MessageService);
|
|
23
|
-
confirmationService = inject(ConfirmationService);
|
|
24
|
-
configService = inject(StorageConfigApiService);
|
|
25
|
-
appConfig = inject(APP_CONFIG);
|
|
26
|
-
companyContext = inject(LAYOUT_AUTH_STATE);
|
|
27
|
-
/** Loading state */
|
|
28
|
-
isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
|
|
29
|
-
/** Configs list */
|
|
30
|
-
configs = signal([], ...(ngDevMode ? [{ debugName: "configs" }] : []));
|
|
31
|
-
/** Total records for pagination */
|
|
32
|
-
totalRecords = signal(0, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
|
|
33
|
-
/** Page size */
|
|
34
|
-
pageSize = signal(50, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
35
|
-
/** Current page */
|
|
36
|
-
currentPage = signal(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
|
|
37
|
-
/** Show company info if company feature enabled */
|
|
38
|
-
showCompanyInfo = computed(() => this.appConfig.enableCompanyFeature, ...(ngDevMode ? [{ debugName: "showCompanyInfo" }] : []));
|
|
39
|
-
/** Current company name */
|
|
40
|
-
currentCompanyName = computed(() => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME, ...(ngDevMode ? [{ debugName: "currentCompanyName" }] : []));
|
|
41
|
-
ngOnInit() {
|
|
42
|
-
this.loadConfigs();
|
|
43
|
-
}
|
|
44
|
-
async loadConfigs() {
|
|
45
|
-
this.isLoading.set(true);
|
|
46
|
-
try {
|
|
47
|
-
const response = await firstValueFrom(this.configService.getAll('', {
|
|
48
|
-
pagination: {
|
|
49
|
-
currentPage: this.currentPage() - 1,
|
|
50
|
-
pageSize: this.pageSize(),
|
|
51
|
-
},
|
|
52
|
-
filter: {},
|
|
53
|
-
select: [],
|
|
54
|
-
sort: {},
|
|
55
|
-
}));
|
|
56
|
-
if (response.success) {
|
|
57
|
-
this.configs.set(response.data ?? []);
|
|
58
|
-
this.totalRecords.set(response.meta?.total ?? 0);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
this.messageService.add({
|
|
63
|
-
severity: 'error',
|
|
64
|
-
summary: 'Error',
|
|
65
|
-
detail: 'Failed to load storage configurations.',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
this.isLoading.set(false);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
onPageChange(event) {
|
|
73
|
-
this.currentPage.set(event.first / event.rows + 1);
|
|
74
|
-
this.pageSize.set(event.rows);
|
|
75
|
-
this.loadConfigs();
|
|
76
|
-
}
|
|
77
|
-
onCreate() {
|
|
78
|
-
this.router.navigate(['/storage/configs/new']);
|
|
79
|
-
}
|
|
80
|
-
onEdit(configId) {
|
|
81
|
-
this.router.navigate(['/storage/configs', configId]);
|
|
82
|
-
}
|
|
83
|
-
onDelete(config) {
|
|
84
|
-
this.confirmationService.confirm({
|
|
85
|
-
message: `Are you sure you want to delete "${config.name}"?`,
|
|
86
|
-
header: 'Delete Configuration',
|
|
87
|
-
icon: 'pi pi-exclamation-triangle',
|
|
88
|
-
acceptButtonStyleClass: 'p-button-danger',
|
|
89
|
-
accept: async () => {
|
|
90
|
-
try {
|
|
91
|
-
await this.configService.deleteAsync({
|
|
92
|
-
id: config.id,
|
|
93
|
-
type: 'delete',
|
|
94
|
-
});
|
|
95
|
-
this.messageService.add({
|
|
96
|
-
severity: 'success',
|
|
97
|
-
summary: 'Success',
|
|
98
|
-
detail: 'Storage configuration deleted successfully.',
|
|
99
|
-
});
|
|
100
|
-
this.loadConfigs();
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
this.messageService.add({
|
|
104
|
-
severity: 'error',
|
|
105
|
-
summary: 'Error',
|
|
106
|
-
detail: 'Failed to delete storage configuration.',
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
getProviderIcon(storage) {
|
|
113
|
-
switch (storage) {
|
|
114
|
-
case FileLocationEnum.AWS:
|
|
115
|
-
return 'pi pi-cloud';
|
|
116
|
-
case FileLocationEnum.AZURE:
|
|
117
|
-
return 'pi pi-cloud';
|
|
118
|
-
case FileLocationEnum.SFTP:
|
|
119
|
-
return 'pi pi-server';
|
|
120
|
-
case FileLocationEnum.LOCAL:
|
|
121
|
-
return 'pi pi-folder';
|
|
122
|
-
default:
|
|
123
|
-
return 'pi pi-database';
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
getProviderLabel(storage) {
|
|
127
|
-
switch (storage) {
|
|
128
|
-
case FileLocationEnum.AWS:
|
|
129
|
-
return 'AWS S3';
|
|
130
|
-
case FileLocationEnum.AZURE:
|
|
131
|
-
return 'Azure Blob';
|
|
132
|
-
case FileLocationEnum.SFTP:
|
|
133
|
-
return 'SFTP';
|
|
134
|
-
case FileLocationEnum.LOCAL:
|
|
135
|
-
return 'Local';
|
|
136
|
-
default:
|
|
137
|
-
return storage;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
getProviderSeverity(storage) {
|
|
141
|
-
switch (storage) {
|
|
142
|
-
case FileLocationEnum.AWS:
|
|
143
|
-
return 'warn';
|
|
144
|
-
case FileLocationEnum.AZURE:
|
|
145
|
-
return 'info';
|
|
146
|
-
case FileLocationEnum.SFTP:
|
|
147
|
-
return 'secondary';
|
|
148
|
-
case FileLocationEnum.LOCAL:
|
|
149
|
-
return 'success';
|
|
150
|
-
default:
|
|
151
|
-
return 'secondary';
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: StorageConfigListComponent, isStandalone: true, selector: "lib-storage-config-list", ngImport: i0, template: `
|
|
156
|
-
<div class="card">
|
|
157
|
-
<div class="flex justify-between items-center mb-4">
|
|
158
|
-
<div>
|
|
159
|
-
<h3 class="text-xl font-semibold">Storage Configurations</h3>
|
|
160
|
-
@if (showCompanyInfo()) {
|
|
161
|
-
<p class="text-sm text-gray-600 mt-1">
|
|
162
|
-
Company: {{ currentCompanyName() }}
|
|
163
|
-
</p>
|
|
164
|
-
}
|
|
165
|
-
</div>
|
|
166
|
-
<p-button
|
|
167
|
-
label="New Configuration"
|
|
168
|
-
icon="pi pi-plus"
|
|
169
|
-
(onClick)="onCreate()"
|
|
170
|
-
/>
|
|
171
|
-
</div>
|
|
172
|
-
|
|
173
|
-
<p-table
|
|
174
|
-
[value]="configs()"
|
|
175
|
-
[loading]="isLoading()"
|
|
176
|
-
[paginator]="true"
|
|
177
|
-
[rows]="pageSize()"
|
|
178
|
-
[totalRecords]="totalRecords()"
|
|
179
|
-
[lazy]="true"
|
|
180
|
-
(onLazyLoad)="onPageChange($event)"
|
|
181
|
-
styleClass="p-datatable-sm"
|
|
182
|
-
>
|
|
183
|
-
<ng-template #header>
|
|
184
|
-
<tr>
|
|
185
|
-
<th>Name</th>
|
|
186
|
-
<th>Provider</th>
|
|
187
|
-
<th>Created</th>
|
|
188
|
-
<th>Actions</th>
|
|
189
|
-
</tr>
|
|
190
|
-
</ng-template>
|
|
191
|
-
<ng-template #body let-config>
|
|
192
|
-
<tr>
|
|
193
|
-
<td>
|
|
194
|
-
<i [class]="getProviderIcon(config.storage)" class="mr-2"></i>
|
|
195
|
-
{{ config.name }}
|
|
196
|
-
</td>
|
|
197
|
-
<td>
|
|
198
|
-
<p-tag
|
|
199
|
-
[value]="getProviderLabel(config.storage)"
|
|
200
|
-
[severity]="getProviderSeverity(config.storage)"
|
|
201
|
-
/>
|
|
202
|
-
</td>
|
|
203
|
-
<td>{{ config.createdAt | date: 'short' }}</td>
|
|
204
|
-
<td>
|
|
205
|
-
<p-button
|
|
206
|
-
icon="pi pi-pencil"
|
|
207
|
-
[text]="true"
|
|
208
|
-
severity="secondary"
|
|
209
|
-
size="small"
|
|
210
|
-
(onClick)="onEdit(config.id)"
|
|
211
|
-
/>
|
|
212
|
-
<p-button
|
|
213
|
-
icon="pi pi-trash"
|
|
214
|
-
[text]="true"
|
|
215
|
-
severity="danger"
|
|
216
|
-
size="small"
|
|
217
|
-
(onClick)="onDelete(config)"
|
|
218
|
-
/>
|
|
219
|
-
</td>
|
|
220
|
-
</tr>
|
|
221
|
-
</ng-template>
|
|
222
|
-
<ng-template #emptymessage>
|
|
223
|
-
<tr>
|
|
224
|
-
<td colspan="4" class="text-center py-4">
|
|
225
|
-
@if (showCompanyInfo()) {
|
|
226
|
-
No storage configurations found in current company
|
|
227
|
-
} @else {
|
|
228
|
-
No storage configurations found
|
|
229
|
-
}
|
|
230
|
-
</td>
|
|
231
|
-
</tr>
|
|
232
|
-
</ng-template>
|
|
233
|
-
</p-table>
|
|
234
|
-
</div>
|
|
235
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i3.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }] });
|
|
236
|
-
}
|
|
237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StorageConfigListComponent, decorators: [{
|
|
238
|
-
type: Component,
|
|
239
|
-
args: [{
|
|
240
|
-
selector: 'lib-storage-config-list',
|
|
241
|
-
standalone: true,
|
|
242
|
-
imports: [AngularModule, PrimeModule],
|
|
243
|
-
template: `
|
|
244
|
-
<div class="card">
|
|
245
|
-
<div class="flex justify-between items-center mb-4">
|
|
246
|
-
<div>
|
|
247
|
-
<h3 class="text-xl font-semibold">Storage Configurations</h3>
|
|
248
|
-
@if (showCompanyInfo()) {
|
|
249
|
-
<p class="text-sm text-gray-600 mt-1">
|
|
250
|
-
Company: {{ currentCompanyName() }}
|
|
251
|
-
</p>
|
|
252
|
-
}
|
|
253
|
-
</div>
|
|
254
|
-
<p-button
|
|
255
|
-
label="New Configuration"
|
|
256
|
-
icon="pi pi-plus"
|
|
257
|
-
(onClick)="onCreate()"
|
|
258
|
-
/>
|
|
259
|
-
</div>
|
|
260
|
-
|
|
261
|
-
<p-table
|
|
262
|
-
[value]="configs()"
|
|
263
|
-
[loading]="isLoading()"
|
|
264
|
-
[paginator]="true"
|
|
265
|
-
[rows]="pageSize()"
|
|
266
|
-
[totalRecords]="totalRecords()"
|
|
267
|
-
[lazy]="true"
|
|
268
|
-
(onLazyLoad)="onPageChange($event)"
|
|
269
|
-
styleClass="p-datatable-sm"
|
|
270
|
-
>
|
|
271
|
-
<ng-template #header>
|
|
272
|
-
<tr>
|
|
273
|
-
<th>Name</th>
|
|
274
|
-
<th>Provider</th>
|
|
275
|
-
<th>Created</th>
|
|
276
|
-
<th>Actions</th>
|
|
277
|
-
</tr>
|
|
278
|
-
</ng-template>
|
|
279
|
-
<ng-template #body let-config>
|
|
280
|
-
<tr>
|
|
281
|
-
<td>
|
|
282
|
-
<i [class]="getProviderIcon(config.storage)" class="mr-2"></i>
|
|
283
|
-
{{ config.name }}
|
|
284
|
-
</td>
|
|
285
|
-
<td>
|
|
286
|
-
<p-tag
|
|
287
|
-
[value]="getProviderLabel(config.storage)"
|
|
288
|
-
[severity]="getProviderSeverity(config.storage)"
|
|
289
|
-
/>
|
|
290
|
-
</td>
|
|
291
|
-
<td>{{ config.createdAt | date: 'short' }}</td>
|
|
292
|
-
<td>
|
|
293
|
-
<p-button
|
|
294
|
-
icon="pi pi-pencil"
|
|
295
|
-
[text]="true"
|
|
296
|
-
severity="secondary"
|
|
297
|
-
size="small"
|
|
298
|
-
(onClick)="onEdit(config.id)"
|
|
299
|
-
/>
|
|
300
|
-
<p-button
|
|
301
|
-
icon="pi pi-trash"
|
|
302
|
-
[text]="true"
|
|
303
|
-
severity="danger"
|
|
304
|
-
size="small"
|
|
305
|
-
(onClick)="onDelete(config)"
|
|
306
|
-
/>
|
|
307
|
-
</td>
|
|
308
|
-
</tr>
|
|
309
|
-
</ng-template>
|
|
310
|
-
<ng-template #emptymessage>
|
|
311
|
-
<tr>
|
|
312
|
-
<td colspan="4" class="text-center py-4">
|
|
313
|
-
@if (showCompanyInfo()) {
|
|
314
|
-
No storage configurations found in current company
|
|
315
|
-
} @else {
|
|
316
|
-
No storage configurations found
|
|
317
|
-
}
|
|
318
|
-
</td>
|
|
319
|
-
</tr>
|
|
320
|
-
</ng-template>
|
|
321
|
-
</p-table>
|
|
322
|
-
</div>
|
|
323
|
-
`,
|
|
324
|
-
}]
|
|
325
|
-
}] });
|
|
326
|
-
|
|
327
|
-
export { StorageConfigListComponent };
|
|
328
|
-
//# sourceMappingURL=flusys-ng-storage-storage-config-list.component-CofVBysj.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flusys-ng-storage-storage-config-list.component-CofVBysj.mjs","sources":["../../../projects/ng-storage/pages/storage-config/storage-config-list.component.ts"],"sourcesContent":["import { Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { APP_CONFIG, DEFAULT_APP_NAME } from '@flusys/ng-core';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport { AngularModule, PrimeModule } from '@flusys/ng-shared';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { firstValueFrom } from 'rxjs';\nimport { FileLocationEnum } from '../../enums/file-location.enum';\nimport { IStorageConfig } from '../../interfaces/storage-config.interface';\nimport { StorageConfigApiService } from '../../services/storage-config-api.service';\n\n/**\n * Storage Config List Component\n * Displays all storage configurations with company filter (if enabled)\n * Shows current company name in header\n */\n@Component({\n selector: 'lib-storage-config-list',\n standalone: true,\n imports: [AngularModule, PrimeModule],\n template: `\n <div class=\"card\">\n <div class=\"flex justify-between items-center mb-4\">\n <div>\n <h3 class=\"text-xl font-semibold\">Storage Configurations</h3>\n @if (showCompanyInfo()) {\n <p class=\"text-sm text-gray-600 mt-1\">\n Company: {{ currentCompanyName() }}\n </p>\n }\n </div>\n <p-button\n label=\"New Configuration\"\n icon=\"pi pi-plus\"\n (onClick)=\"onCreate()\"\n />\n </div>\n\n <p-table\n [value]=\"configs()\"\n [loading]=\"isLoading()\"\n [paginator]=\"true\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"totalRecords()\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n styleClass=\"p-datatable-sm\"\n >\n <ng-template #header>\n <tr>\n <th>Name</th>\n <th>Provider</th>\n <th>Created</th>\n <th>Actions</th>\n </tr>\n </ng-template>\n <ng-template #body let-config>\n <tr>\n <td>\n <i [class]=\"getProviderIcon(config.storage)\" class=\"mr-2\"></i>\n {{ config.name }}\n </td>\n <td>\n <p-tag\n [value]=\"getProviderLabel(config.storage)\"\n [severity]=\"getProviderSeverity(config.storage)\"\n />\n </td>\n <td>{{ config.createdAt | date: 'short' }}</td>\n <td>\n <p-button\n icon=\"pi pi-pencil\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n (onClick)=\"onEdit(config.id)\"\n />\n <p-button\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n (onClick)=\"onDelete(config)\"\n />\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"4\" class=\"text-center py-4\">\n @if (showCompanyInfo()) {\n No storage configurations found in current company\n } @else {\n No storage configurations found\n }\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n `,\n})\nexport class StorageConfigListComponent implements OnInit {\n private readonly router = inject(Router);\n private readonly messageService = inject(MessageService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly configService = inject(StorageConfigApiService);\n private readonly appConfig = inject(APP_CONFIG);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n\n /** Loading state */\n readonly isLoading = signal(false);\n\n /** Configs list */\n readonly configs = signal<IStorageConfig[]>([]);\n\n /** Total records for pagination */\n readonly totalRecords = signal(0);\n\n /** Page size */\n readonly pageSize = signal(50);\n\n /** Current page */\n readonly currentPage = signal(1);\n\n /** Show company info if company feature enabled */\n readonly showCompanyInfo = computed(\n () => this.appConfig.enableCompanyFeature,\n );\n\n /** Current company name */\n readonly currentCompanyName = computed(\n () => this.companyContext.currentCompanyInfo()?.name ?? DEFAULT_APP_NAME,\n );\n\n ngOnInit(): void {\n this.loadConfigs();\n }\n\n async loadConfigs(): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await firstValueFrom(\n this.configService.getAll('', {\n pagination: {\n currentPage: this.currentPage() - 1,\n pageSize: this.pageSize(),\n },\n filter: {},\n select: [],\n sort: {},\n }),\n );\n\n if (response.success) {\n this.configs.set(response.data ?? []);\n this.totalRecords.set(response.meta?.total ?? 0);\n }\n } catch (error) {\n this.messageService.add({\n severity: 'error',\n summary: 'Error',\n detail: 'Failed to load storage configurations.',\n });\n } finally {\n this.isLoading.set(false);\n }\n }\n\n onPageChange(event: any): void {\n this.currentPage.set(event.first / event.rows + 1);\n this.pageSize.set(event.rows);\n this.loadConfigs();\n }\n\n onCreate(): void {\n this.router.navigate(['/storage/configs/new']);\n }\n\n onEdit(configId: string): void {\n this.router.navigate(['/storage/configs', configId]);\n }\n\n onDelete(config: IStorageConfig): void {\n this.confirmationService.confirm({\n message: `Are you sure you want to delete \"${config.name}\"?`,\n header: 'Delete Configuration',\n icon: 'pi pi-exclamation-triangle',\n acceptButtonStyleClass: 'p-button-danger',\n accept: async () => {\n try {\n await this.configService.deleteAsync({\n id: config.id,\n type: 'delete',\n });\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail: 'Storage configuration deleted successfully.',\n });\n this.loadConfigs();\n } catch (error) {\n this.messageService.add({\n severity: 'error',\n summary: 'Error',\n detail: 'Failed to delete storage configuration.',\n });\n }\n },\n });\n }\n\n getProviderIcon(storage: FileLocationEnum): string {\n switch (storage) {\n case FileLocationEnum.AWS:\n return 'pi pi-cloud';\n case FileLocationEnum.AZURE:\n return 'pi pi-cloud';\n case FileLocationEnum.SFTP:\n return 'pi pi-server';\n case FileLocationEnum.LOCAL:\n return 'pi pi-folder';\n default:\n return 'pi pi-database';\n }\n }\n\n getProviderLabel(storage: FileLocationEnum): string {\n switch (storage) {\n case FileLocationEnum.AWS:\n return 'AWS S3';\n case FileLocationEnum.AZURE:\n return 'Azure Blob';\n case FileLocationEnum.SFTP:\n return 'SFTP';\n case FileLocationEnum.LOCAL:\n return 'Local';\n default:\n return storage;\n }\n }\n\n getProviderSeverity(\n storage: FileLocationEnum,\n ): 'success' | 'secondary' | 'info' | 'warn' | 'danger' | 'contrast' {\n switch (storage) {\n case FileLocationEnum.AWS:\n return 'warn';\n case FileLocationEnum.AZURE:\n return 'info';\n case FileLocationEnum.SFTP:\n return 'secondary';\n case FileLocationEnum.LOCAL:\n return 'success';\n default:\n return 'secondary';\n }\n }\n}\n"],"names":["i4"],"mappings":"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"}
|