@masterteam/document-library 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,288 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import { HttpContext } from '@angular/common/http';
4
+ import { BreadcrumbItem } from '@masterteam/components/breadcrumb';
5
+ import { ColumnDef } from '@masterteam/components/table';
6
+ import { MTIcon } from '@masterteam/icons';
7
+ import { Popover } from 'primeng/popover';
8
+ import { Observable } from 'rxjs';
9
+
10
+ type DocumentLibraryFolderId = number | string;
11
+ interface DocumentLibraryLabel {
12
+ display?: string;
13
+ en?: string;
14
+ ar?: string;
15
+ }
16
+ interface DocumentLibraryFolder {
17
+ id: DocumentLibraryFolderId;
18
+ label: DocumentLibraryLabel;
19
+ parentId: DocumentLibraryFolderId | null;
20
+ isPrimaryFolder?: boolean;
21
+ isEditableFolder?: boolean;
22
+ isNameEditable?: boolean;
23
+ }
24
+ interface DocumentLibraryFile {
25
+ id: string;
26
+ name?: string | null;
27
+ fileName: string;
28
+ contentType: string;
29
+ size: number;
30
+ createdBy?: string | null;
31
+ created: string;
32
+ path?: string | null;
33
+ }
34
+ interface DocumentLibraryFolderEntry extends DocumentLibraryFolder {
35
+ isFolder: true;
36
+ }
37
+ interface DocumentLibraryFileEntry extends DocumentLibraryFile {
38
+ isFolder: false;
39
+ }
40
+ type DocumentLibraryEntry = DocumentLibraryFolderEntry | DocumentLibraryFileEntry;
41
+ type DocumentLibraryAsyncResult<T> = T | Promise<T> | Observable<T>;
42
+ interface DocumentLibraryCapabilities {
43
+ canCreateRootFolders?: boolean;
44
+ canUploadFiles?: boolean;
45
+ canDownloadFiles?: boolean;
46
+ canDeleteFiles?: boolean;
47
+ }
48
+ interface DocumentLibraryCreateFolderRequest {
49
+ parentId: DocumentLibraryFolderId | null;
50
+ folderName: string;
51
+ }
52
+ interface DocumentLibraryRenameFolderRequest {
53
+ folderId: DocumentLibraryFolderId;
54
+ folderName: string;
55
+ }
56
+ interface DocumentLibraryDeleteFolderRequest {
57
+ folderId: DocumentLibraryFolderId;
58
+ }
59
+ interface DocumentLibraryAddDocumentRequest {
60
+ folderId: DocumentLibraryFolderId;
61
+ documentGuid: string;
62
+ }
63
+ interface DocumentLibraryDeleteFileRequest {
64
+ fileId: string;
65
+ }
66
+ interface DocumentLibraryDownloadFileRequest {
67
+ file: DocumentLibraryFileEntry;
68
+ }
69
+ interface DocumentLibrarySelectionChangeEvent {
70
+ folder: DocumentLibraryFolder | null;
71
+ entry: DocumentLibraryEntry | null;
72
+ }
73
+ type DocumentLibraryActionName = 'open-folder' | 'create-folder' | 'rename-folder' | 'delete-folder' | 'upload-file' | 'download-file' | 'delete-file' | 'reload';
74
+ interface DocumentLibraryApiError {
75
+ code?: string;
76
+ message?: string;
77
+ details?: unknown;
78
+ }
79
+ interface DocumentLibraryResponse<T> {
80
+ endpoint: string;
81
+ status: number;
82
+ code: number;
83
+ locale: string;
84
+ message?: string | null;
85
+ errors?: DocumentLibraryApiError | null;
86
+ data: T;
87
+ cacheSession?: string;
88
+ }
89
+ interface DocumentLibraryUploadedAsset {
90
+ id?: string | null;
91
+ name?: string | null;
92
+ fileName?: string | null;
93
+ contentType?: string | null;
94
+ size?: number | null;
95
+ }
96
+ interface DocumentLibraryActionEvent {
97
+ action: DocumentLibraryActionName;
98
+ target: DocumentLibraryFolder | DocumentLibraryEntry | null;
99
+ }
100
+ declare function isDocumentLibraryFolderEntry(entry: DocumentLibraryEntry | DocumentLibraryFolder | null | undefined): entry is DocumentLibraryFolderEntry;
101
+ declare function isDocumentLibraryFileEntry(entry: DocumentLibraryEntry | null | undefined): entry is DocumentLibraryFileEntry;
102
+
103
+ type DocumentLibraryUploadDialogMode = 'file' | 'folder';
104
+
105
+ type DocumentLibraryBreadcrumbItem = BreadcrumbItem & {
106
+ folderId?: DocumentLibraryFolderId | null;
107
+ };
108
+ type DocumentLibraryTableRow = {
109
+ id: string;
110
+ entry: DocumentLibraryEntry;
111
+ name: string;
112
+ owner: string;
113
+ size: string;
114
+ updatedAt: string;
115
+ };
116
+ type DocumentLibraryActionItem = {
117
+ id?: string | number;
118
+ label: string;
119
+ icon?: MTIcon;
120
+ disabled?: boolean;
121
+ visible?: boolean;
122
+ separator?: boolean;
123
+ severity?: 'danger';
124
+ command?: () => void;
125
+ };
126
+ declare class DocumentLibrary {
127
+ private readonly api;
128
+ private readonly confirmationService;
129
+ private readonly modalService;
130
+ private readonly toast;
131
+ private readonly transloco;
132
+ readonly levelId: _angular_core.InputSignal<number>;
133
+ readonly levelDataId: _angular_core.InputSignal<number | null>;
134
+ readonly title: _angular_core.InputSignal<string>;
135
+ readonly description: _angular_core.InputSignal<string>;
136
+ readonly lang: _angular_core.InputSignal<"en" | "ar">;
137
+ readonly requestContext: _angular_core.InputSignal<HttpContext | undefined>;
138
+ readonly uploadEndPoint: _angular_core.InputSignal<string>;
139
+ readonly emptyTitle: _angular_core.InputSignal<string>;
140
+ readonly emptyDescription: _angular_core.InputSignal<string>;
141
+ readonly loaded: _angular_core.OutputEmitterRef<void>;
142
+ readonly errored: _angular_core.OutputEmitterRef<string>;
143
+ readonly selectionChanged: _angular_core.OutputEmitterRef<DocumentLibrarySelectionChangeEvent>;
144
+ readonly actionExecuted: _angular_core.OutputEmitterRef<DocumentLibraryActionEvent>;
145
+ readonly nameCellTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
146
+ readonly updatedCellTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
147
+ readonly actionsCellTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
148
+ readonly addPopover: _angular_core.Signal<Popover | undefined>;
149
+ readonly folderPopover: _angular_core.Signal<Popover | undefined>;
150
+ readonly contextPopover: _angular_core.Signal<Popover | undefined>;
151
+ readonly roots: _angular_core.WritableSignal<DocumentLibraryFolder[]>;
152
+ readonly folderRegistry: _angular_core.WritableSignal<Map<string, DocumentLibraryFolder>>;
153
+ readonly folderEntriesCache: _angular_core.WritableSignal<Map<string, DocumentLibraryEntry[]>>;
154
+ readonly expandedFolderKeys: _angular_core.WritableSignal<Set<string>>;
155
+ readonly busyKeys: _angular_core.WritableSignal<Set<string>>;
156
+ readonly selectedFolderId: _angular_core.WritableSignal<DocumentLibraryFolderId | null>;
157
+ readonly selectedEntry: _angular_core.WritableSignal<DocumentLibraryEntry | null>;
158
+ readonly error: _angular_core.WritableSignal<string | null>;
159
+ readonly contextMenuItems: _angular_core.WritableSignal<DocumentLibraryActionItem[]>;
160
+ readonly railSearch: _angular_core.WritableSignal<string>;
161
+ readonly activeLanguage: _angular_core.Signal<string>;
162
+ readonly canMutateLevelData: _angular_core.Signal<boolean>;
163
+ readonly uiLang: _angular_core.Signal<"en" | "ar">;
164
+ readonly resolvedTitle: _angular_core.Signal<string>;
165
+ readonly resolvedEmptyTitle: _angular_core.Signal<string>;
166
+ readonly resolvedEmptyDescription: _angular_core.Signal<string>;
167
+ readonly capabilities: _angular_core.Signal<{
168
+ canCreateRootFolders: boolean;
169
+ canUploadFiles: boolean;
170
+ canDownloadFiles: boolean;
171
+ canDeleteFiles: boolean;
172
+ }>;
173
+ readonly columns: _angular_core.Signal<ColumnDef[]>;
174
+ readonly selectedFolder: _angular_core.Signal<DocumentLibraryFolder | null>;
175
+ readonly currentEntries: _angular_core.Signal<DocumentLibraryEntry[]>;
176
+ readonly tableRows: _angular_core.Signal<DocumentLibraryTableRow[]>;
177
+ readonly breadcrumbs: _angular_core.Signal<DocumentLibraryBreadcrumbItem[]>;
178
+ readonly currentFolderTitle: _angular_core.Signal<string>;
179
+ readonly currentFolderSubtitle: _angular_core.Signal<string>;
180
+ readonly rootSummary: _angular_core.Signal<string>;
181
+ readonly visibleRoots: _angular_core.Signal<DocumentLibraryFolder[]>;
182
+ readonly addMenuItems: _angular_core.Signal<DocumentLibraryActionItem[]>;
183
+ readonly currentFolderMenuItems: _angular_core.Signal<DocumentLibraryActionItem[]>;
184
+ constructor();
185
+ reload(): Promise<void>;
186
+ goToRoot(): Promise<void>;
187
+ openFolder(folder: DocumentLibraryFolder): Promise<void>;
188
+ toggleExpanded(folder: DocumentLibraryFolder): Promise<void>;
189
+ onRailFolderClick(folder: DocumentLibraryFolder): Promise<void>;
190
+ onRowClick(row: DocumentLibraryTableRow): Promise<void>;
191
+ openAddPopover(event: Event): void;
192
+ openFolderPopover(event: Event): void;
193
+ openContextMenu(event: MouseEvent, target: DocumentLibraryFolder | DocumentLibraryEntry): void;
194
+ executePopoverItem(item: DocumentLibraryActionItem, popover: Popover | undefined): void;
195
+ openCreateFolderDialog(parent: DocumentLibraryFolder | null): void;
196
+ openRenameFolderDialog(folder: DocumentLibraryFolder): void;
197
+ private createFolder;
198
+ private renameFolder;
199
+ confirmDeleteFolder(folder: DocumentLibraryFolder): void;
200
+ deleteFolder(folder: DocumentLibraryFolder): Promise<void>;
201
+ confirmDeleteFile(file: DocumentLibraryFileEntry): void;
202
+ deleteFile(file: DocumentLibraryFileEntry): Promise<void>;
203
+ downloadFile(file: DocumentLibraryFileEntry): Promise<void>;
204
+ openUploadDialog(mode?: DocumentLibraryUploadDialogMode): void;
205
+ foldersForRail(parentId: DocumentLibraryFolderId | null): DocumentLibraryFolder[];
206
+ isExpanded(folderId: DocumentLibraryFolderId): boolean;
207
+ isSelectedFolder(folderId: DocumentLibraryFolderId): boolean;
208
+ hasLoadedChildren(folderId: DocumentLibraryFolderId): boolean;
209
+ folderHasChildFolders(folderId: DocumentLibraryFolderId): boolean;
210
+ canCreateFolderInSelection(folder?: DocumentLibraryFolder | null): boolean;
211
+ canUploadIntoCurrentFolder(): boolean;
212
+ canUploadIntoFolder(folder: DocumentLibraryFolder | null): boolean;
213
+ canDeleteFolder(folder: DocumentLibraryFolder): boolean;
214
+ canDeleteFile(_file: DocumentLibraryFileEntry): boolean;
215
+ canDownloadFile(_file: DocumentLibraryFileEntry): boolean;
216
+ getFolderLabel(folder: DocumentLibraryFolder): string;
217
+ getEntryTitle(entry: DocumentLibraryEntry): string;
218
+ getEntryOwner(entry: DocumentLibraryEntry): string;
219
+ getEntryUpdatedAt(entry: DocumentLibraryEntry): string;
220
+ getEntryKey(entry: DocumentLibraryEntry): string;
221
+ getFolderMenuItems(folder: DocumentLibraryFolder): DocumentLibraryActionItem[];
222
+ getEntryMenuItems(entry: DocumentLibraryEntry): DocumentLibraryActionItem[];
223
+ getFolderIcon(folder: DocumentLibraryFolder): MTIcon;
224
+ getFileIcon(entry: DocumentLibraryFileEntry): MTIcon;
225
+ private getFileAvatarPalette;
226
+ getHomeAvatarStyle(): string;
227
+ getFolderAvatarStyle(folder: DocumentLibraryFolder): string;
228
+ getFileAvatarStyle(entry: DocumentLibraryFileEntry): string;
229
+ getActionAvatarStyle(): string;
230
+ getActionPopoverStyle(): Record<string, string>;
231
+ getActionItemButtonClass(item: DocumentLibraryActionItem): string;
232
+ getActionItemAvatarStyle(item: DocumentLibraryActionItem): string;
233
+ getVisibleActionItems(items: DocumentLibraryActionItem[]): DocumentLibraryActionItem[];
234
+ hasVisibleActionItems(items: DocumentLibraryActionItem[]): boolean;
235
+ trackActionItem(item: DocumentLibraryActionItem, index: number): string | number;
236
+ getIconButtonClass(): string;
237
+ getRailItemClass(active: boolean): string;
238
+ getFileExtension(entry: DocumentLibraryFileEntry): string;
239
+ formatFileSize(size: number): string;
240
+ onBreadcrumbClick(item: BreadcrumbItem): void;
241
+ isBusy(key: string): boolean;
242
+ createFolderBusyKey(folderId: DocumentLibraryFolderId | 'root'): string;
243
+ renameFolderBusyKey(folderId: DocumentLibraryFolderId): string;
244
+ loadFolderBusyKey(folderId: DocumentLibraryFolderId): string;
245
+ private openFolderDialog;
246
+ private loadFolderEntries;
247
+ private fetchFolderEntries;
248
+ private ensureFolderEntries;
249
+ private attachUploadedDocuments;
250
+ private createFolderInBackend;
251
+ private insertFolderIntoParent;
252
+ private replaceFolder;
253
+ private removeFolderTree;
254
+ private patchFolderEntries;
255
+ private upsertFolders;
256
+ private expandFolderPath;
257
+ private expandParentForNewFolder;
258
+ private syncSelectedFolderEntry;
259
+ private getFolderTrail;
260
+ private getParentFolder;
261
+ private resolveUploadTargetFolder;
262
+ private findOrCreateChildFolder;
263
+ private folderNameMatches;
264
+ private getUploadFolderSegments;
265
+ private mergeEntriesWithUploadedFiles;
266
+ private sortFolders;
267
+ private sortEntries;
268
+ private getTargetMenuItems;
269
+ private isEntryTarget;
270
+ private isSelectedFolderInTree;
271
+ private clearSelectionForRemovedFolders;
272
+ private canRenameFolder;
273
+ private collectFolderKeys;
274
+ private toFolderKey;
275
+ private deleteFolderBusyKey;
276
+ private deleteFileBusyKey;
277
+ private uploadBusyKey;
278
+ private withBusy;
279
+ private resolveAsync;
280
+ private handleError;
281
+ private translate;
282
+ private showPopover;
283
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DocumentLibrary, never>;
284
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DocumentLibrary, "mt-document-library", never, { "levelId": { "alias": "levelId"; "required": true; "isSignal": true; }; "levelDataId": { "alias": "levelDataId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "lang": { "alias": "lang"; "required": false; "isSignal": true; }; "requestContext": { "alias": "requestContext"; "required": false; "isSignal": true; }; "uploadEndPoint": { "alias": "uploadEndPoint"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; }, { "loaded": "loaded"; "errored": "errored"; "selectionChanged": "selectionChanged"; "actionExecuted": "actionExecuted"; }, never, never, true, never>;
285
+ }
286
+
287
+ export { DocumentLibrary, isDocumentLibraryFileEntry, isDocumentLibraryFolderEntry };
288
+ export type { DocumentLibraryActionEvent, DocumentLibraryActionName, DocumentLibraryAddDocumentRequest, DocumentLibraryApiError, DocumentLibraryAsyncResult, DocumentLibraryCapabilities, DocumentLibraryCreateFolderRequest, DocumentLibraryDeleteFileRequest, DocumentLibraryDeleteFolderRequest, DocumentLibraryDownloadFileRequest, DocumentLibraryEntry, DocumentLibraryFile, DocumentLibraryFileEntry, DocumentLibraryFolder, DocumentLibraryFolderEntry, DocumentLibraryFolderId, DocumentLibraryLabel, DocumentLibraryRenameFolderRequest, DocumentLibraryResponse, DocumentLibrarySelectionChangeEvent, DocumentLibraryUploadedAsset };