@flusys/ng-storage 4.1.1 → 5.0.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.
Files changed (24) hide show
  1. package/README.md +17 -382
  2. package/fesm2022/{flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs → flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs} +287 -74
  3. package/fesm2022/flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs.map +1 -0
  4. package/fesm2022/{flusys-ng-storage-file-manager-list.component-bj6oOzOL.mjs → flusys-ng-storage-file-manager-list.component-Dn5hVksO.mjs} +210 -70
  5. package/fesm2022/flusys-ng-storage-file-manager-list.component-Dn5hVksO.mjs.map +1 -0
  6. package/fesm2022/{flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs → flusys-ng-storage-folder-form.component-B8vRSb1T.mjs} +88 -31
  7. package/fesm2022/flusys-ng-storage-folder-form.component-B8vRSb1T.mjs.map +1 -0
  8. package/fesm2022/{flusys-ng-storage-folder-list.component-B2Q41I1g.mjs → flusys-ng-storage-folder-list.component-B4yCKvAV.mjs} +96 -30
  9. package/fesm2022/flusys-ng-storage-folder-list.component-B4yCKvAV.mjs.map +1 -0
  10. package/fesm2022/flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs +880 -0
  11. package/fesm2022/flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs.map +1 -0
  12. package/fesm2022/{flusys-ng-storage-storage-config-list.component-DBH_qf9o.mjs → flusys-ng-storage-storage-config-list.component-C7OYYyrQ.mjs} +126 -33
  13. package/fesm2022/flusys-ng-storage-storage-config-list.component-C7OYYyrQ.mjs.map +1 -0
  14. package/fesm2022/flusys-ng-storage.mjs +143 -256
  15. package/fesm2022/flusys-ng-storage.mjs.map +1 -1
  16. package/package.json +4 -4
  17. package/types/flusys-ng-storage.d.ts +4 -2
  18. package/fesm2022/flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs.map +0 -1
  19. package/fesm2022/flusys-ng-storage-file-manager-list.component-bj6oOzOL.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs.map +0 -1
  21. package/fesm2022/flusys-ng-storage-folder-list.component-B2Q41I1g.mjs.map +0 -1
  22. package/fesm2022/flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs +0 -465
  23. package/fesm2022/flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs.map +0 -1
  24. package/fesm2022/flusys-ng-storage-storage-config-list.component-DBH_qf9o.mjs.map +0 -1
@@ -5,275 +5,162 @@ import { APP_CONFIG, TRANSLATE_ADAPTER, DEFAULT_APP_NAME, BaseApiService, getDef
5
5
  import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
6
6
  import { BaseListPage, ApiResourceService, FILE_PROVIDER, permissionGuard, FILE_PERMISSIONS, FOLDER_PERMISSIONS, STORAGE_CONFIG_PERMISSIONS, resolveTranslationModule, SHARED_MESSAGES, PermissionValidatorService, TranslatePipe } from '@flusys/ng-shared';
7
7
  import { MessageService } from 'primeng/api';
8
- import { switchMap, map } from 'rxjs';
8
+ import { switchMap, map, from } from 'rxjs';
9
9
  import { HttpClient } from '@angular/common/http';
10
10
  import { CommonModule } from '@angular/common';
11
11
 
12
12
  const STORAGE_MESSAGES = {
13
- // Container page
14
- 'storage.title': 'Storage',
15
- 'storage.subtitle': 'Manage files, folders, and storage configurations',
16
- // Tabs
17
- 'storage.tabs.file.manager': 'File Manager',
18
- 'storage.tabs.folders': 'Folders',
19
- 'storage.tabs.configs': 'Configurations',
20
- // Page titles
21
- 'storage.file.title': 'Files',
22
- 'storage.file.manager.title': 'File Manager',
23
- 'storage.file.manager.upload.file': 'Upload File',
24
- 'storage.file.manager.edit.file': 'Edit File',
25
- 'storage.folder.title': 'Folder Setup',
26
- 'storage.folder.new.folder': 'New Folder',
27
- 'storage.folder.edit.folder': 'Edit Folder',
28
- 'storage.config.title': 'Storage Configurations',
29
- 'storage.config.new.config': 'New Configuration',
30
- 'storage.config.edit.config': 'Edit Storage Configuration',
31
- // Common labels
32
- 'storage.company': 'Company',
33
- 'storage.name': 'Name',
34
- 'storage.type': 'Type',
35
- 'storage.size': 'Size',
36
- 'storage.location': 'Location',
37
- 'storage.config': 'Config',
38
- 'storage.private': 'Private',
39
- 'storage.public': 'Public',
40
- 'storage.created': 'Created',
41
- 'storage.actions': 'Actions',
42
- 'storage.slug': 'Slug',
43
- 'storage.provider': 'Provider',
44
- 'storage.active': 'Active',
45
- 'storage.set.as.default': 'Set as Default',
46
- // Table headers
47
- 'storage.table.name': 'Name',
48
- 'storage.table.type': 'Type',
49
- 'storage.table.size': 'Size',
50
- 'storage.table.location': 'Location',
51
- 'storage.table.config': 'Config',
52
- 'storage.table.private': 'Private',
53
- 'storage.table.created': 'Created',
54
- 'storage.table.actions': 'Actions',
55
- 'storage.table.slug': 'Slug',
56
- 'storage.table.provider': 'Provider',
57
- // Buttons
58
- 'storage.button.upload.file': 'Upload File',
59
- 'storage.button.new.folder': 'New Folder',
60
- 'storage.button.new.configuration': 'New Configuration',
61
- 'storage.button.choose.file': 'Choose File',
62
- 'storage.button.cancel': 'Cancel',
63
- 'storage.button.create': 'Create',
64
- 'storage.button.update': 'Update',
65
- 'storage.button.upload': 'Upload',
66
- // Tooltips
67
- 'storage.tooltip.view': 'View',
68
- 'storage.tooltip.edit': 'Edit',
69
- 'storage.tooltip.trash': 'Trash',
70
- 'storage.tooltip.delete': 'Delete',
71
- // Empty states
72
- 'storage.empty.files': 'No files found',
73
- 'storage.empty.files.in.company': 'No files found in current company',
74
- 'storage.empty.folders': 'No folders found',
75
- 'storage.empty.folders.in.company': 'No folders found in current company',
76
- 'storage.empty.configs': 'No storage configurations found',
77
- 'storage.empty.configs.in.company': 'No storage configurations found in current company',
78
- // File operations
79
- 'storage.upload.title': 'Upload File',
80
- 'storage.upload.success': 'File uploaded successfully',
81
- 'storage.upload.failed': 'Failed to upload file',
82
- 'storage.upload.progress': 'Uploading... {{percent}}%',
83
- 'storage.upload.drag.drop': 'Drag and drop file here or click to browse',
84
- 'storage.upload.select.file': 'Select File',
85
- 'storage.upload.select.files': 'Select Files',
86
- 'storage.upload.max.size': 'Maximum file size: {{size}}',
87
- 'storage.upload.please.select': 'Please select a file to upload',
88
- 'storage.download.success': 'File downloaded successfully',
89
- 'storage.download.failed': 'Failed to download file',
90
- 'storage.download.progress': 'Downloading...',
91
- // Delete operations
92
- 'storage.delete.success': 'File deleted successfully',
93
- 'storage.delete.failed': 'Failed to delete file',
94
- 'storage.delete.confirm': 'Are you sure you want to delete this file?',
95
- 'storage.delete.this.item': 'this item',
96
- 'storage.delete.confirm.named': 'Are you sure you want to delete "{{name}}"?',
97
- 'storage.delete.move.to.trash': 'Move to Trash',
98
- 'storage.delete.move.to.trash.confirm': 'Move "{{name}}" to trash? You can recover it later.',
99
- 'storage.delete.permanent.delete': 'Permanent Delete',
100
- 'storage.delete.permanent.delete.confirm': 'Permanently delete "{{name}}"? This action CANNOT be undone and will delete the file from storage.',
101
- 'storage.delete.permanent.delete.button': 'Delete Permanently',
102
- 'storage.delete.trash.success': 'File moved to trash successfully',
103
- 'storage.delete.trash.failed': 'Failed to move file to trash',
104
- 'storage.delete.permanent.success': 'File permanently deleted',
105
- 'storage.delete.permanent.failed': 'Failed to permanently delete file',
106
- // File info
107
- 'storage.file.name': 'File Name',
108
- 'storage.file.name.required': 'File Name *',
109
- 'storage.file.size': 'File Size',
110
- 'storage.file.type': 'File Type',
111
- 'storage.file.extension': 'Extension',
112
- 'storage.file.uploaded.at': 'Uploaded At',
113
- 'storage.file.uploaded.by': 'Uploaded By',
114
- 'storage.file.path': 'File Path',
115
- 'storage.file.url': 'File URL',
116
- 'storage.file.url.not.available': 'File URL is not available',
117
- 'storage.file.get.url.failed': 'Failed to get file URL',
118
- 'storage.file.private': 'Private File',
119
- 'storage.file.private.hint': 'Only users with permission can access',
120
- 'storage.file.public.hint': 'File is publicly accessible',
121
- 'storage.file.placeholder': 'Will be auto-filled from selected file',
122
- 'storage.file.placeholder.edit': 'Enter file name',
123
- 'storage.file.select.required': 'Select File *',
124
- // Validation
125
- 'storage.error.file.too.big': 'File size exceeds the maximum limit of {{maxSize}}',
126
- 'storage.error.invalid.type': 'Invalid file type. Allowed types: {{types}}',
127
- 'storage.error.too.many.files': 'Maximum {{max}} files allowed',
128
- 'storage.error.no.file': 'Please select a file',
129
- 'storage.error.no.config': 'Please select a storage configuration',
130
- 'storage.error.load.failed': 'Failed to load files',
131
- 'storage.error.load.file.failed': 'Failed to load file',
132
- // Storage config
133
- 'storage.config.config.name': 'Configuration Name',
134
- 'storage.config.config.name.required': 'Configuration Name *',
135
- 'storage.config.config.name.placeholder': 'e.g., Production AWS S3',
136
- 'storage.config.provider': 'Storage Provider',
137
- 'storage.config.provider.required': 'Storage Provider *',
138
- 'storage.config.bucket': 'Bucket Name',
139
- 'storage.config.bucket.required': 'Bucket Name *',
140
- 'storage.config.region': 'Region',
141
- 'storage.config.region.required': 'AWS Region *',
142
- 'storage.config.access.key': 'Access Key',
143
- 'storage.config.access.key.required': 'Access Key ID *',
144
- 'storage.config.secret.key': 'Secret Key',
145
- 'storage.config.secret.key.required': 'Secret Access Key *',
146
- 'storage.config.endpoint': 'Endpoint URL',
147
- 'storage.config.endpoint.optional': 'Custom Endpoint (Optional)',
148
- 'storage.config.endpoint.placeholder': 'https://s3.custom-endpoint.com',
149
- 'storage.config.public': 'Public Access',
150
- 'storage.config.no.configs': 'No storage configurations found. Please create one first.',
151
- 'storage.config.select.config': 'Select storage configuration...',
152
- 'storage.config.load.failed': 'Failed to load storage configurations',
153
- 'storage.config.load.config.failed': 'Failed to load storage configuration',
154
- 'storage.config.delete.title': 'Delete Configuration',
155
- 'storage.config.delete.success': 'Storage configuration deleted successfully',
156
- 'storage.config.delete.failed': 'Failed to delete storage configuration',
157
- // AWS specific
158
- 'storage.aws.title': 'AWS S3 Configuration',
159
- 'storage.aws.region': 'AWS Region',
160
- 'storage.aws.region.placeholder': 'us-east-1',
161
- 'storage.aws.bucket': 'Bucket Name',
162
- 'storage.aws.bucket.placeholder': 'my-bucket',
163
- 'storage.aws.access.key.id': 'Access Key ID',
164
- 'storage.aws.secret.access.key': 'Secret Access Key',
165
- // Azure specific
166
- 'storage.azure.title': 'Azure Blob Configuration',
167
- 'storage.azure.account.name': 'Account Name',
168
- 'storage.azure.account.name.required': 'Account Name *',
169
- 'storage.azure.account.key': 'Account Key',
170
- 'storage.azure.account.key.required': 'Account Key *',
171
- 'storage.azure.container.name': 'Container Name',
172
- 'storage.azure.container.name.required': 'Container Name *',
173
- // SFTP specific
174
- 'storage.sftp.title': 'SFTP Configuration',
175
- 'storage.sftp.host': 'Host',
176
- 'storage.sftp.host.required': 'Host *',
177
- 'storage.sftp.host.placeholder': 'sftp.example.com',
178
- 'storage.sftp.port': 'Port',
179
- 'storage.sftp.port.required': 'Port *',
180
- 'storage.sftp.username': 'Username',
181
- 'storage.sftp.username.required': 'Username *',
182
- 'storage.sftp.password': 'Password',
183
- 'storage.sftp.password.required': 'Password *',
184
- 'storage.sftp.base.path': 'Base Path',
185
- 'storage.sftp.base.path.required': 'Base Path *',
186
- 'storage.sftp.base.path.placeholder': '/uploads',
187
- // Local specific
188
- 'storage.local.title': 'Local Storage Configuration',
189
- 'storage.local.base.path': 'Base Path',
190
- 'storage.local.base.path.required': 'Base Path *',
191
- 'storage.local.base.path.placeholder': '/var/www/uploads',
192
- // Folder operations
193
- 'storage.folder.create': 'Create Folder',
194
- 'storage.folder.name': 'Folder Name',
195
- 'storage.folder.name.required': 'Folder Name *',
196
- 'storage.folder.name.placeholder': 'Enter folder name',
197
- 'storage.folder.create.success': 'Folder created successfully',
198
- 'storage.folder.create.failed': 'Failed to create folder',
199
- 'storage.folder.update.success': 'Folder updated successfully',
200
- 'storage.folder.update.failed': 'Failed to update folder',
201
- 'storage.folder.delete': 'Delete Folder',
202
- 'storage.folder.delete.title': 'Delete Folder',
203
- 'storage.folder.delete.confirm': 'Are you sure you want to delete this folder and all its contents?',
204
- 'storage.folder.delete.success': 'Folder deleted successfully',
205
- 'storage.folder.delete.failed': 'Failed to delete folder',
206
- 'storage.folder.optional': 'Folder (Optional)',
207
- 'storage.folder.no.folder': 'No folder (root level)',
208
- 'storage.folder.no.folders.available': 'No folders available. File will be uploaded to root level.',
209
- 'storage.folder.no.folders.edit': 'No folders available.',
210
- 'storage.folder.load.failed': 'Failed to load folder',
211
13
  // File entity CRUD (API keys)
212
14
  'file.create.success': 'File created successfully',
213
15
  'file.create.many.success': '{{count}} files created successfully',
214
16
  'file.get.success': 'File retrieved successfully',
17
+ 'file.get.by.ids.success': 'Files retrieved successfully by Ids',
18
+ 'file.get.by.filter.success': 'Files retrieved successfully by filter',
215
19
  'file.get.all.success': 'Files retrieved successfully',
216
20
  'file.update.success': 'File updated successfully',
217
21
  'file.update.many.success': '{{count}} files updated successfully',
218
22
  'file.delete.success': 'File deleted successfully',
219
23
  'file.restore.success': 'File restored successfully',
220
- 'file.not.found': 'File not found: {{path}}',
221
- 'file.upload.success': 'File uploaded successfully',
222
- 'file.upload.many.success': 'Files uploaded successfully',
223
- 'file.download.success': 'File downloaded successfully',
224
- 'file.move.success': 'File moved successfully',
225
- 'file.copy.success': 'File copied successfully',
24
+ 'file.not.found': 'File not found',
226
25
  // Folder entity CRUD (API keys)
227
26
  'folder.create.success': 'Folder created successfully',
228
27
  'folder.create.many.success': '{{count}} folders created successfully',
229
28
  'folder.get.success': 'Folder retrieved successfully',
29
+ 'folder.get.by.ids.success': 'Folders retrieved successfully by Ids',
30
+ 'folder.get.by.filter.success': 'Folders retrieved successfully by filter',
230
31
  'folder.get.all.success': 'Folders retrieved successfully',
231
32
  'folder.update.success': 'Folder updated successfully',
232
33
  'folder.update.many.success': '{{count}} folders updated successfully',
233
34
  'folder.delete.success': 'Folder deleted successfully',
234
35
  'folder.restore.success': 'Folder restored successfully',
235
- 'folder.not.found': 'Folder "{{folderId}}" not found or access denied',
236
- 'folder.tree.success': 'Folder tree retrieved successfully',
237
- 'folder.contents.success': 'Folder contents retrieved successfully',
36
+ 'folder.not.found': 'Folder not found',
238
37
  // Storage config CRUD (API keys)
239
- 'storage.config.update.success': 'Storage configuration updated successfully',
240
38
  'storage.config.create.success': 'Storage configuration created successfully',
241
- 'storage.config.update.failed': 'Failed to update storage configuration',
242
- 'storage.config.create.failed': 'Failed to create storage configuration',
243
39
  'storage.config.create.many.success': '{{count}} storage configurations created successfully',
244
40
  'storage.config.get.success': 'Storage configuration retrieved successfully',
41
+ 'storage.config.get.by.ids.success': 'Storage configurations retrieved successfully by Ids',
42
+ 'storage.config.get.by.filter.success': 'Storage configurations retrieved successfully by filter',
245
43
  'storage.config.get.all.success': 'Storage configurations retrieved successfully',
44
+ 'storage.config.update.success': 'Storage configuration updated successfully',
246
45
  'storage.config.update.many.success': '{{count}} storage configurations updated successfully',
46
+ 'storage.config.delete.success': 'Storage configuration deleted successfully',
247
47
  'storage.config.restore.success': 'Storage configuration restored successfully',
248
- 'storage.config.not.found': 'Storage configuration not found',
249
- 'storage.config.active.success': 'Active storage configuration retrieved successfully',
250
- 'storage.config.test.success': 'Storage configuration test successful',
251
- 'storage.config.test.failed': 'Storage configuration test failed',
252
- // Upload messages (API keys)
48
+ // Upload (API keys)
253
49
  'upload.success': 'File uploaded successfully',
254
50
  'upload.many.success': 'Files uploaded successfully',
255
- 'upload.failed': 'Failed to upload file',
256
51
  'upload.file.too.large': 'File size ({{fileSize}}MB) exceeds maximum {{maxSize}}MB',
257
52
  'upload.invalid.type': 'File type "{{mimeType}}" not allowed. Allowed: {{allowedTypes}}',
258
- 'upload.chunk.success': 'Chunk uploaded successfully',
259
- 'upload.complete.success': 'Upload completed successfully',
260
53
  'upload.no.files.provided': 'No files provided',
261
54
  'upload.no.file.path': 'File path is required',
262
55
  'upload.invalid.file.path': 'Invalid file path',
263
56
  'upload.config.not.found': 'Upload configuration not found',
264
- // Validation messages
57
+ // pages/storage-container/storage-container.component.ts
58
+ 'storage.title': 'Storage',
59
+ 'storage.subtitle': 'Manage files, folders, and storage configurations',
60
+ 'storage.file.title': 'Files',
61
+ 'storage.folder.title': 'Folder Setup',
62
+ 'storage.config.title': 'Storage Configurations',
63
+ // pages/storage-config/storage-config-list.component.ts
64
+ 'storage.button.new.configuration': 'New Configuration',
65
+ 'storage.table.provider': 'Provider',
66
+ 'storage.table.created': 'Created',
67
+ 'storage.empty.configs.in.company': 'No storage configurations found in current company',
68
+ 'storage.empty.configs': 'No storage configurations found',
69
+ 'storage.config.load.failed': 'Failed to load storage configurations',
70
+ 'storage.config.delete.title': 'Delete Configuration',
71
+ // pages/storage-config/storage-config-form.component.ts
72
+ 'storage.config.edit.config': 'Edit Storage Configuration',
73
+ 'storage.config.new.config': 'New Configuration',
74
+ 'storage.config.config.name.required': 'Configuration Name *',
75
+ 'storage.config.config.name.placeholder': 'e.g., Production AWS S3',
76
+ 'storage.config.provider.required': 'Storage Provider *',
77
+ 'storage.set.as.default': 'Set as Default',
78
+ 'storage.aws.title': 'AWS S3 Configuration',
79
+ 'storage.config.region.required': 'AWS Region *',
80
+ 'storage.aws.region.placeholder': 'us-east-1',
81
+ 'storage.config.bucket.required': 'Bucket Name *',
82
+ 'storage.aws.bucket.placeholder': 'my-bucket',
83
+ 'storage.config.access.key.required': 'Access Key ID *',
84
+ 'storage.config.secret.key.required': 'Secret Access Key *',
85
+ 'storage.config.endpoint.optional': 'Custom Endpoint (Optional)',
86
+ 'storage.config.endpoint.placeholder': 'https://s3.custom-endpoint.com',
87
+ 'storage.azure.title': 'Azure Blob Configuration',
88
+ 'storage.azure.account.name.required': 'Account Name *',
89
+ 'storage.azure.container.name.required': 'Container Name *',
90
+ 'storage.azure.account.key.required': 'Account Key *',
91
+ 'storage.sftp.title': 'SFTP Configuration',
92
+ 'storage.sftp.host.required': 'Host *',
93
+ 'storage.sftp.host.placeholder': 'sftp.example.com',
94
+ 'storage.sftp.port.required': 'Port *',
95
+ 'storage.sftp.port.placeholder': '22',
96
+ 'storage.sftp.username.required': 'Username *',
97
+ 'storage.sftp.password.required': 'Password *',
98
+ 'storage.sftp.base.path.required': 'Base Path *',
99
+ 'storage.sftp.base.path.placeholder': '/uploads',
100
+ 'storage.local.title': 'Local Storage Configuration',
101
+ 'storage.local.base.path.required': 'Base Path *',
102
+ 'storage.local.base.path.placeholder': '/var/www/uploads',
103
+ 'storage.config.endpoint': 'Endpoint URL',
104
+ 'storage.validation.config.name.required': 'Configuration name is required',
105
+ // pages/file-manager/file-manager-list.component.ts
106
+ 'storage.file.manager.title': 'File Manager',
107
+ 'storage.button.upload.file': 'Upload File',
108
+ 'storage.table.size': 'Size',
109
+ 'storage.table.location': 'Location',
110
+ 'storage.table.config': 'Config',
111
+ 'storage.table.private': 'Private',
112
+ 'storage.private': 'Private',
113
+ 'storage.public': 'Public',
114
+ 'storage.tooltip.trash': 'Trash',
115
+ 'storage.empty.files.in.company': 'No files found in current company',
116
+ 'storage.empty.files': 'No files found',
117
+ 'storage.file.url.not.available': 'File URL is not available',
118
+ 'storage.delete.move.to.trash.confirm': 'Move "{{name}}" to trash? You can recover it later.',
119
+ 'storage.delete.move.to.trash': 'Move to Trash',
120
+ 'storage.delete.permanent.delete.confirm': 'Permanently delete "{{name}}"? This action CANNOT be undone and will delete the file from storage.',
121
+ 'storage.delete.permanent.delete': 'Permanent Delete',
122
+ 'storage.delete.permanent.delete.button': 'Delete Permanently',
123
+ // pages/file-manager/file-manager-form.component.ts
124
+ 'storage.file.manager.edit.file': 'Edit File',
125
+ 'storage.file.manager.upload.file': 'Upload File',
126
+ 'storage.config.select.config': 'Select storage configuration...',
127
+ 'storage.config.no.configs': 'No storage configurations found. Please create one first.',
128
+ 'storage.folder.optional': 'Folder (Optional)',
129
+ 'storage.folder.no.folder': 'No folder (root level)',
130
+ 'storage.folder.no.folders.available': 'No folders available. File will be uploaded to root level.',
131
+ 'storage.folder.no.folders.edit': 'No folders available.',
132
+ 'storage.file.select.required': 'Select File *',
133
+ 'storage.button.choose.file': 'Choose File',
134
+ 'storage.upload.drag.drop': 'Drag and drop file here or click to browse',
135
+ 'storage.upload.max.size': 'Maximum file size: {{size}}',
136
+ 'storage.upload.please.select': 'Please select a file to upload',
137
+ 'storage.file.name.required': 'File Name *',
138
+ 'storage.file.placeholder.edit': 'Enter file name',
139
+ 'storage.file.placeholder': 'Will be auto-filled from selected file',
140
+ 'storage.file.private': 'Private File',
141
+ 'storage.file.private.hint': 'Only users with permission can access',
142
+ 'storage.file.public.hint': 'File is publicly accessible',
265
143
  'storage.validation.file.name.required': 'File name is required',
144
+ 'storage.error.no.file': 'Please select a file',
145
+ 'storage.error.no.config': 'Please select a storage configuration',
146
+ 'storage.upload.failed': 'Failed to upload file',
147
+ // pages/folder/folder-list.component.ts
148
+ 'storage.button.new.folder': 'New Folder',
149
+ 'storage.table.slug': 'Slug',
150
+ 'storage.empty.folders.in.company': 'No folders found in current company',
151
+ 'storage.empty.folders': 'No folders found',
152
+ 'storage.folder.delete.title': 'Delete Folder',
153
+ // pages/folder/folder-form.component.ts
154
+ 'storage.folder.edit.folder': 'Edit Folder',
155
+ 'storage.folder.new.folder': 'New Folder',
156
+ 'storage.folder.name.required': 'Folder Name *',
157
+ 'storage.folder.name.placeholder': 'Enter folder name',
266
158
  'storage.validation.folder.name.required': 'Folder name is required',
267
- 'storage.validation.config.name.required': 'Configuration name is required',
268
- // Additional missing keys
269
- 'storage.unit.kb': 'KB',
270
- 'storage.unit.mb': 'MB',
271
- 'storage.unit.gb': 'GB',
272
- 'storage.sftp.port.placeholder': '22',
273
- 'storage.file.update.success': 'File updated successfully',
274
- 'storage.pagination.files.template': 'Showing {first} to {last} of {totalRecords} files',
275
- 'storage.pagination.folders.template': 'Showing {first} to {last} of {totalRecords} folders',
276
- 'storage.pagination.configs.template': 'Showing {first} to {last} of {totalRecords} configurations',
159
+ // utils/base-storage-page.ts
160
+ 'storage.delete.this.item': 'this item',
161
+ // utils/storage-utils.ts
162
+ 'storage.size.bytes': 'Bytes',
163
+ 'storage.size.gb': 'GB',
277
164
  };
278
165
 
279
166
  /**
@@ -373,7 +260,12 @@ function getFileIcon(contentType) {
373
260
  return 'pi pi-file';
374
261
  }
375
262
  /** File size unit keys for translation */
376
- const FILE_SIZE_UNIT_KEYS = ['storage.size.bytes', 'storage.size.kb', 'storage.size.mb', 'storage.size.gb'];
263
+ const FILE_SIZE_UNIT_KEYS = [
264
+ 'storage.size.bytes',
265
+ 'shared.size.kb',
266
+ 'shared.size.mb',
267
+ 'storage.size.gb',
268
+ ];
377
269
  /**
378
270
  * Format file size from bytes to human readable format
379
271
  * Returns an object with value and unitKey for translation
@@ -395,8 +287,8 @@ function formatFileSize(bytes) {
395
287
  // Fallback to non-translated units for backward compatibility
396
288
  const unitMap = {
397
289
  'storage.size.bytes': 'Bytes',
398
- 'storage.size.kb': 'KB',
399
- 'storage.size.mb': 'MB',
290
+ 'shared.size.kb': 'KB',
291
+ 'shared.size.mb': 'MB',
400
292
  'storage.size.gb': 'GB',
401
293
  };
402
294
  return `${value} ${unitMap[unitKey]}`;
@@ -447,7 +339,9 @@ class BaseStorageListPage extends BaseListPage {
447
339
  getDeleteConfirmMessage(item) {
448
340
  const itemName = item.name;
449
341
  const name = itemName ?? this.translateAdapter.translate('storage.delete.this.item');
450
- return this.translateAdapter.translate('storage.delete.confirm.named', { name });
342
+ return this.translateAdapter.translate('shared.confirm.delete.item', {
343
+ name,
344
+ });
451
345
  }
452
346
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: BaseStorageListPage, deps: null, target: i0.ɵɵFactoryTarget.Directive });
453
347
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.5", type: BaseStorageListPage, isStandalone: true, usesInheritance: true, ngImport: i0 });
@@ -638,11 +532,8 @@ class FileProviderAdapter {
638
532
  storageConfigApi = inject(StorageConfigApiService);
639
533
  loadFiles(filter) {
640
534
  const filterObj = this.buildFileFilter(filter);
641
- return this.fileManagerApi
642
- .getAll(filter.search || '', {
643
- pagination: { currentPage: filter.page, pageSize: filter.pageSize },
644
- filter: Object.keys(filterObj).length > 0 ? filterObj : undefined,
645
- })
535
+ return from(this.fileManagerApi
536
+ .getAll({ pagination: { currentPage: filter.page, pageSize: filter.pageSize }, filter: Object.keys(filterObj).length > 0 ? filterObj : undefined }, filter.search || ''))
646
537
  .pipe(map((res) => ({ ...res, data: res.data?.map(this.mapToFileBasicInfo) })));
647
538
  }
648
539
  uploadFile(file, options) {
@@ -662,17 +553,13 @@ class FileProviderAdapter {
662
553
  })));
663
554
  }
664
555
  loadFolders(filter) {
665
- return this.folderApi
666
- .getAll(filter.search || '', {
667
- pagination: { currentPage: filter.page, pageSize: filter.pageSize },
668
- })
556
+ return from(this.folderApi
557
+ .getAll({ pagination: { currentPage: filter.page, pageSize: filter.pageSize } }, filter.search || ''))
669
558
  .pipe(map((res) => ({ ...res, data: res.data?.map((f) => ({ id: f.id, name: f.name, slug: f.slug })) })));
670
559
  }
671
560
  loadStorageConfigs(filter) {
672
- return this.storageConfigApi
673
- .getAll(filter.search || '', {
674
- pagination: { currentPage: filter.page, pageSize: filter.pageSize },
675
- })
561
+ return from(this.storageConfigApi
562
+ .getAll({ pagination: { currentPage: filter.page, pageSize: filter.pageSize } }, filter.search || ''))
676
563
  .pipe(map((res) => ({ ...res, data: res.data?.map((c) => ({ id: c.id, name: c.name, isDefault: c.isDefault })) })));
677
564
  }
678
565
  // ─── Private Helpers ────────────────────────────────────────────────────────
@@ -749,17 +636,17 @@ const STORAGE_ROUTES = [
749
636
  children: [
750
637
  {
751
638
  path: '',
752
- loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-bj6oOzOL.mjs').then((m) => m.FileManagerListComponent),
639
+ loadComponent: () => import('./flusys-ng-storage-file-manager-list.component-Dn5hVksO.mjs').then((m) => m.FileManagerListComponent),
753
640
  },
754
641
  {
755
642
  path: 'new',
756
643
  canActivate: [permissionGuard(FILE_PERMISSIONS.CREATE)],
757
- loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs').then((m) => m.FileManagerFormComponent),
644
+ loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs').then((m) => m.FileManagerFormComponent),
758
645
  },
759
646
  {
760
647
  path: ':id',
761
648
  canActivate: [permissionGuard(FILE_PERMISSIONS.UPDATE)],
762
- loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-AM7JE-s5.mjs').then((m) => m.FileManagerFormComponent),
649
+ loadComponent: () => import('./flusys-ng-storage-file-manager-form.component-BLJDAvBX.mjs').then((m) => m.FileManagerFormComponent),
763
650
  },
764
651
  ],
765
652
  },
@@ -770,17 +657,17 @@ const STORAGE_ROUTES = [
770
657
  children: [
771
658
  {
772
659
  path: '',
773
- loadComponent: () => import('./flusys-ng-storage-folder-list.component-B2Q41I1g.mjs').then((m) => m.FolderListComponent),
660
+ loadComponent: () => import('./flusys-ng-storage-folder-list.component-B4yCKvAV.mjs').then((m) => m.FolderListComponent),
774
661
  },
775
662
  {
776
663
  path: 'new',
777
664
  canActivate: [permissionGuard(FOLDER_PERMISSIONS.CREATE)],
778
- loadComponent: () => import('./flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs').then((m) => m.FolderFormComponent),
665
+ loadComponent: () => import('./flusys-ng-storage-folder-form.component-B8vRSb1T.mjs').then((m) => m.FolderFormComponent),
779
666
  },
780
667
  {
781
668
  path: ':id',
782
669
  canActivate: [permissionGuard(FOLDER_PERMISSIONS.UPDATE)],
783
- loadComponent: () => import('./flusys-ng-storage-folder-form.component-Cc2ybTwu.mjs').then((m) => m.FolderFormComponent),
670
+ loadComponent: () => import('./flusys-ng-storage-folder-form.component-B8vRSb1T.mjs').then((m) => m.FolderFormComponent),
784
671
  },
785
672
  ],
786
673
  },
@@ -791,17 +678,17 @@ const STORAGE_ROUTES = [
791
678
  children: [
792
679
  {
793
680
  path: '',
794
- loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-DBH_qf9o.mjs').then((m) => m.StorageConfigListComponent),
681
+ loadComponent: () => import('./flusys-ng-storage-storage-config-list.component-C7OYYyrQ.mjs').then((m) => m.StorageConfigListComponent),
795
682
  },
796
683
  {
797
684
  path: 'new',
798
685
  canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.CREATE)],
799
- loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs').then((m) => m.StorageConfigFormComponent),
686
+ loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs').then((m) => m.StorageConfigFormComponent),
800
687
  },
801
688
  {
802
689
  path: ':id',
803
690
  canActivate: [permissionGuard(STORAGE_CONFIG_PERMISSIONS.UPDATE)],
804
- loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-a88XhuPH.mjs').then((m) => m.StorageConfigFormComponent),
691
+ loadComponent: () => import('./flusys-ng-storage-storage-config-form.component-CMeTif8p.mjs').then((m) => m.StorageConfigFormComponent),
805
692
  },
806
693
  ],
807
694
  },