@flusys/ng-storage 9.1.0 → 9.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/fesm2022/flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs +43 -0
  2. package/fesm2022/flusys-ng-storage-file-manager-api.service-DJ9uP3aN.mjs.map +1 -0
  3. package/fesm2022/{flusys-ng-storage-file-manager-form.component-DaO-9wKM.mjs → flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs} +411 -231
  4. package/fesm2022/flusys-ng-storage-file-manager-form.component-Bvhewt3f.mjs.map +1 -0
  5. package/fesm2022/{flusys-ng-storage-file-manager-list.component-a7YHw1Gz.mjs → flusys-ng-storage-file-manager-list.component-4_LdJOtH.mjs} +355 -145
  6. package/fesm2022/flusys-ng-storage-file-manager-list.component-4_LdJOtH.mjs.map +1 -0
  7. package/fesm2022/flusys-ng-storage-folder-api.service-D_fFEuO6.mjs +33 -0
  8. package/fesm2022/flusys-ng-storage-folder-api.service-D_fFEuO6.mjs.map +1 -0
  9. package/fesm2022/flusys-ng-storage-folder-form.component-7C2oWijb.mjs +298 -0
  10. package/fesm2022/flusys-ng-storage-folder-form.component-7C2oWijb.mjs.map +1 -0
  11. package/fesm2022/{flusys-ng-storage-folder-list.component-BDrBAcCS.mjs → flusys-ng-storage-folder-list.component-BdSBM_DB.mjs} +284 -77
  12. package/fesm2022/flusys-ng-storage-folder-list.component-BdSBM_DB.mjs.map +1 -0
  13. package/fesm2022/flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs +33 -0
  14. package/fesm2022/flusys-ng-storage-storage-config-api.service-Bl4asniq.mjs.map +1 -0
  15. package/fesm2022/{flusys-ng-storage-storage-config-form.component-B4wBfzVs.mjs → flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs} +369 -214
  16. package/fesm2022/flusys-ng-storage-storage-config-form.component-De5h8JY-.mjs.map +1 -0
  17. package/fesm2022/{flusys-ng-storage-storage-config-list.component-CCkZY--j.mjs → flusys-ng-storage-storage-config-list.component-Dh9JkuZP.mjs} +303 -83
  18. package/fesm2022/flusys-ng-storage-storage-config-list.component-Dh9JkuZP.mjs.map +1 -0
  19. package/fesm2022/flusys-ng-storage-storage-container.component-EWGNoozU.mjs +124 -0
  20. package/fesm2022/flusys-ng-storage-storage-container.component-EWGNoozU.mjs.map +1 -0
  21. package/fesm2022/flusys-ng-storage-upload.service-CIcEL_Kr.mjs +113 -0
  22. package/fesm2022/flusys-ng-storage-upload.service-CIcEL_Kr.mjs.map +1 -0
  23. package/fesm2022/flusys-ng-storage.mjs +611 -876
  24. package/fesm2022/flusys-ng-storage.mjs.map +1 -1
  25. package/package.json +5 -5
  26. package/types/flusys-ng-storage.d.ts +254 -292
  27. package/fesm2022/flusys-ng-storage-file-manager-form.component-DaO-9wKM.mjs.map +0 -1
  28. package/fesm2022/flusys-ng-storage-file-manager-list.component-a7YHw1Gz.mjs.map +0 -1
  29. package/fesm2022/flusys-ng-storage-folder-form.component-BCzVzmRn.mjs +0 -225
  30. package/fesm2022/flusys-ng-storage-folder-form.component-BCzVzmRn.mjs.map +0 -1
  31. package/fesm2022/flusys-ng-storage-folder-list.component-BDrBAcCS.mjs.map +0 -1
  32. package/fesm2022/flusys-ng-storage-storage-config-form.component-B4wBfzVs.mjs.map +0 -1
  33. package/fesm2022/flusys-ng-storage-storage-config-list.component-CCkZY--j.mjs.map +0 -1
@@ -0,0 +1,33 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Service } from "@angular/core";
3
+ import { ApiResourceService } from "@flusys/ng-shared";
4
+ var FolderApiService = class FolderApiService extends ApiResourceService {
5
+ constructor() {
6
+ super("folder", "storage");
7
+ }
8
+ static ɵfac = i0.ɵɵngDeclareFactory({
9
+ minVersion: "12.0.0",
10
+ version: "22.2.1",
11
+ ngImport: i0,
12
+ type: FolderApiService,
13
+ deps: [],
14
+ target: i0.ɵɵFactoryTarget.Service
15
+ });
16
+ static ɵprov = i0.ɵɵngDeclareService({
17
+ minVersion: "22.0.0",
18
+ version: "22.2.1",
19
+ ngImport: i0,
20
+ type: FolderApiService
21
+ });
22
+ };
23
+ i0.ɵɵngDeclareClassMetadata({
24
+ minVersion: "12.0.0",
25
+ version: "22.2.1",
26
+ ngImport: i0,
27
+ type: FolderApiService,
28
+ decorators: [{ type: Service }],
29
+ ctorParameters: () => []
30
+ });
31
+ export { FolderApiService as t };
32
+
33
+ //# sourceMappingURL=flusys-ng-storage-folder-api.service-D_fFEuO6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusys-ng-storage-folder-api.service-D_fFEuO6.mjs","names":[],"sources":["../../../projects/ng-storage/services/folder-api.service.ts"],"sourcesContent":["import { Service } from '@angular/core';\nimport { ApiResourceService } from '@flusys/ng-shared';\nimport {\n ICreateFolderDto,\n IFolder,\n IUpdateFolderDto,\n} 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@Service()\nexport class FolderApiService extends ApiResourceService<\n ICreateFolderDto | IUpdateFolderDto,\n IFolder\n> {\n constructor() {\n super('folder', 'storage');\n }\n}\n"],"mappings":";;;AAgBA,IAAa,mBAAb,MAAa,yBAAyB,mBAGrC;CACC,cAAA;EACE,MAAM,UAAU,SAAS;CAC3B;CANW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAgB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAhB,OAAA,QAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;CAAgB,CAAA;;AAAhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAgB,YAAA,CAAA,EAD5B,MAAA,QAAA,CAAA"}
@@ -0,0 +1,298 @@
1
+ import { t as FolderApiService } from "./flusys-ng-storage-folder-api.service-D_fFEuO6.mjs";
2
+ import { BaseStoragePage } from "./flusys-ng-storage.mjs";
3
+ import * as i0 from "@angular/core";
4
+ import { Component, computed, effect, inject, signal } from "@angular/core";
5
+ import { toSignal } from "@angular/core/rxjs-interop";
6
+ import { ActivatedRoute } from "@angular/router";
7
+ import { TranslatePipe, TranslateService } from "@flusys/ng-shared";
8
+ import { FButtonDirective, InputTextDirective, UiIconComponent } from "@flusys/ng-ui";
9
+ import { FormField, form, required } from "@angular/forms/signals";
10
+ var FolderFormComponent = class FolderFormComponent extends BaseStoragePage {
11
+ route = inject(ActivatedRoute);
12
+ folderService = inject(FolderApiService);
13
+ translateService = inject(TranslateService);
14
+ routeParams = toSignal(this.route.paramMap);
15
+ initialized = false;
16
+ existingFolder = signal(null, ...ngDevMode ? [{ debugName: "existingFolder" }] : /* istanbul ignore next */ []);
17
+ isEditMode = computed(() => !!this.existingFolder(), ...ngDevMode ? [{ debugName: "isEditMode" }] : /* istanbul ignore next */ []);
18
+ formModel = signal({
19
+ id: "",
20
+ name: ""
21
+ }, ...ngDevMode ? [{ debugName: "formModel" }] : /* istanbul ignore next */ []);
22
+ folderForm = form(this.formModel, (f) => {
23
+ required(f.name, { message: this.translateService.translate("storage.validation.folder.name.required") });
24
+ });
25
+ isFormValid = computed(() => this.formModel().name.trim().length > 0, ...ngDevMode ? [{ debugName: "isFormValid" }] : /* istanbul ignore next */ []);
26
+ constructor() {
27
+ super();
28
+ effect(() => {
29
+ const params = this.routeParams();
30
+ if (!params || this.initialized) return;
31
+ this.initialized = true;
32
+ const folderId = params.get("id");
33
+ if (folderId && folderId !== "new") this.loadFolder(folderId);
34
+ });
35
+ }
36
+ async loadFolder(id) {
37
+ this.isLoading.set(true);
38
+ try {
39
+ const response = await this.folderService.findById(id);
40
+ if (response.success && response.data) {
41
+ const folder = response.data;
42
+ this.existingFolder.set(folder);
43
+ this.formModel.set({
44
+ id: folder.id,
45
+ name: folder.name
46
+ });
47
+ }
48
+ } finally {
49
+ this.isLoading.set(false);
50
+ }
51
+ }
52
+ async onSubmit(event) {
53
+ event.preventDefault();
54
+ if (!this.isFormValid()) return;
55
+ this.isLoading.set(true);
56
+ try {
57
+ const formValue = this.formModel();
58
+ const response = this.isEditMode() ? await this.folderService.update({
59
+ id: formValue.id,
60
+ name: formValue.name
61
+ }) : await this.folderService.insert({ name: formValue.name });
62
+ this.showSuccess(response.messageKey ? this.translateService.translate(response.messageKey, response.messageVariables) : response.message ?? "");
63
+ this.navigateTo(["/storage/folders"]);
64
+ } finally {
65
+ this.isLoading.set(false);
66
+ }
67
+ }
68
+ onCancel() {
69
+ this.navigateTo(["/storage/folders"]);
70
+ }
71
+ static ɵfac = i0.ɵɵngDeclareFactory({
72
+ minVersion: "12.0.0",
73
+ version: "22.2.1",
74
+ ngImport: i0,
75
+ type: FolderFormComponent,
76
+ deps: [],
77
+ target: i0.ɵɵFactoryTarget.Component
78
+ });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({
80
+ minVersion: "17.0.0",
81
+ version: "22.2.1",
82
+ type: FolderFormComponent,
83
+ isStandalone: true,
84
+ selector: "lib-folder-form",
85
+ usesInheritance: true,
86
+ ngImport: i0,
87
+ template: `
88
+ <div class="card">
89
+ <div class="mb-4">
90
+ <h3 class="text-lg sm:text-xl font-semibold">
91
+ {{
92
+ (isEditMode()
93
+ ? 'storage.folder.edit.folder'
94
+ : 'storage.folder.new.folder'
95
+ ) | translate
96
+ }}
97
+ </h3>
98
+ @if (showCompanyInfo()) {
99
+ <p class="text-sm text-muted-color mt-1">
100
+ {{ 'shared.company' | translate }}: {{ currentCompanyName() }}
101
+ </p>
102
+ }
103
+ </div>
104
+
105
+ <form (submit)="onSubmit($event)">
106
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
107
+ <div class="field">
108
+ <label
109
+ for="name"
110
+ class="block font-medium mb-2 text-sm sm:text-base"
111
+ >{{ 'storage.folder.name.required' | translate }}</label
112
+ >
113
+ <input
114
+ fInputText
115
+ id="name"
116
+ [formField]="folderForm.name"
117
+ [placeholder]="'storage.folder.name.placeholder' | translate"
118
+ class="w-full"
119
+ />
120
+ </div>
121
+ </div>
122
+
123
+ <div class="flex justify-end gap-2 mt-4">
124
+ <button
125
+ fButton
126
+ type="button"
127
+ severity="secondary"
128
+ [outlined]="true"
129
+ (click)="onCancel()"
130
+ >
131
+ <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>
132
+ </button>
133
+ <button
134
+ fButton
135
+ type="submit"
136
+ [disabled]="!isFormValid() || isLoading()"
137
+ >
138
+ @if (isLoading()) {
139
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
140
+ }
141
+ <span pButtonLabel>{{
142
+ (isEditMode() ? 'shared.update' : 'shared.create') | translate
143
+ }}</span>
144
+ </button>
145
+ </div>
146
+ </form>
147
+ </div>
148
+ `,
149
+ isInline: true,
150
+ dependencies: [
151
+ {
152
+ kind: "directive",
153
+ type: InputTextDirective,
154
+ selector: "[fInputText]",
155
+ inputs: [
156
+ "invalid",
157
+ "touched",
158
+ "variant",
159
+ "size",
160
+ "fluid"
161
+ ]
162
+ },
163
+ {
164
+ kind: "directive",
165
+ type: FButtonDirective,
166
+ selector: "[fButton]",
167
+ inputs: [
168
+ "severity",
169
+ "text",
170
+ "outlined",
171
+ "link",
172
+ "variant",
173
+ "rounded",
174
+ "raised",
175
+ "fluid",
176
+ "disabled",
177
+ "loading",
178
+ "loadingIcon",
179
+ "size",
180
+ "label",
181
+ "icon",
182
+ "iconPos",
183
+ "ariaLabel",
184
+ "plain"
185
+ ]
186
+ },
187
+ {
188
+ kind: "component",
189
+ type: UiIconComponent,
190
+ selector: "ui-icon",
191
+ inputs: [
192
+ "name",
193
+ "size",
194
+ "spin",
195
+ "fill",
196
+ "severity"
197
+ ]
198
+ },
199
+ {
200
+ kind: "directive",
201
+ type: FormField,
202
+ selector: "[formField]",
203
+ inputs: ["formField"],
204
+ exportAs: ["formField"]
205
+ },
206
+ {
207
+ kind: "pipe",
208
+ type: TranslatePipe,
209
+ name: "translate"
210
+ }
211
+ ]
212
+ });
213
+ };
214
+ i0.ɵɵngDeclareClassMetadata({
215
+ minVersion: "12.0.0",
216
+ version: "22.2.1",
217
+ ngImport: i0,
218
+ type: FolderFormComponent,
219
+ decorators: [{
220
+ type: Component,
221
+ args: [{
222
+ selector: "lib-folder-form",
223
+ imports: [
224
+ InputTextDirective,
225
+ FButtonDirective,
226
+ UiIconComponent,
227
+ FormField,
228
+ TranslatePipe
229
+ ],
230
+ template: `
231
+ <div class="card">
232
+ <div class="mb-4">
233
+ <h3 class="text-lg sm:text-xl font-semibold">
234
+ {{
235
+ (isEditMode()
236
+ ? 'storage.folder.edit.folder'
237
+ : 'storage.folder.new.folder'
238
+ ) | translate
239
+ }}
240
+ </h3>
241
+ @if (showCompanyInfo()) {
242
+ <p class="text-sm text-muted-color mt-1">
243
+ {{ 'shared.company' | translate }}: {{ currentCompanyName() }}
244
+ </p>
245
+ }
246
+ </div>
247
+
248
+ <form (submit)="onSubmit($event)">
249
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
250
+ <div class="field">
251
+ <label
252
+ for="name"
253
+ class="block font-medium mb-2 text-sm sm:text-base"
254
+ >{{ 'storage.folder.name.required' | translate }}</label
255
+ >
256
+ <input
257
+ fInputText
258
+ id="name"
259
+ [formField]="folderForm.name"
260
+ [placeholder]="'storage.folder.name.placeholder' | translate"
261
+ class="w-full"
262
+ />
263
+ </div>
264
+ </div>
265
+
266
+ <div class="flex justify-end gap-2 mt-4">
267
+ <button
268
+ fButton
269
+ type="button"
270
+ severity="secondary"
271
+ [outlined]="true"
272
+ (click)="onCancel()"
273
+ >
274
+ <span pButtonLabel>{{ 'shared.cancel' | translate }}</span>
275
+ </button>
276
+ <button
277
+ fButton
278
+ type="submit"
279
+ [disabled]="!isFormValid() || isLoading()"
280
+ >
281
+ @if (isLoading()) {
282
+ <ui-icon pButtonIcon name="spinner" [spin]="true"></ui-icon>
283
+ }
284
+ <span pButtonLabel>{{
285
+ (isEditMode() ? 'shared.update' : 'shared.create') | translate
286
+ }}</span>
287
+ </button>
288
+ </div>
289
+ </form>
290
+ </div>
291
+ `
292
+ }]
293
+ }],
294
+ ctorParameters: () => []
295
+ });
296
+ export { FolderFormComponent };
297
+
298
+ //# sourceMappingURL=flusys-ng-storage-folder-form.component-7C2oWijb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusys-ng-storage-folder-form.component-7C2oWijb.mjs","names":[],"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 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 {\n FButtonDirective,\n InputTextDirective,\n UiIconComponent,\n} from '@flusys/ng-ui';\n\ninterface IFolderFormModel {\n id: string;\n name: string;\n}\n\n@Component({\n selector: 'lib-folder-form',\n imports: [\n InputTextDirective,\n FButtonDirective,\n UiIconComponent,\n FormField,\n TranslatePipe,\n ],\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 (submit)=\"onSubmit($event)\">\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 type=\"button\"\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(event: Event): Promise<void> {\n event.preventDefault();\n\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"],"mappings":"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"}