@memberjunction/ng-file-storage 6.1.4 → 6.2.0-edge.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.
Files changed (36) hide show
  1. package/dist/lib/admin/storage-admin-dialog.component.d.ts +1 -1
  2. package/dist/lib/admin/storage-admin-dialog.component.js +2 -2
  3. package/dist/lib/admin/storage-admin-dialog.component.js.map +1 -1
  4. package/dist/lib/category-tree/category-tree.d.ts +83 -9
  5. package/dist/lib/category-tree/category-tree.d.ts.map +1 -1
  6. package/dist/lib/category-tree/category-tree.js +192 -50
  7. package/dist/lib/category-tree/category-tree.js.map +1 -1
  8. package/dist/lib/file-browser/file-browser.component.d.ts +30 -4
  9. package/dist/lib/file-browser/file-browser.component.d.ts.map +1 -1
  10. package/dist/lib/file-browser/file-browser.component.js +68 -16
  11. package/dist/lib/file-browser/file-browser.component.js.map +1 -1
  12. package/dist/lib/file-browser/file-grid.component.d.ts +404 -58
  13. package/dist/lib/file-browser/file-grid.component.d.ts.map +1 -1
  14. package/dist/lib/file-browser/file-grid.component.js +1040 -396
  15. package/dist/lib/file-browser/file-grid.component.js.map +1 -1
  16. package/dist/lib/file-browser/folder-tree.component.d.ts +65 -9
  17. package/dist/lib/file-browser/folder-tree.component.d.ts.map +1 -1
  18. package/dist/lib/file-browser/folder-tree.component.js +166 -58
  19. package/dist/lib/file-browser/folder-tree.component.js.map +1 -1
  20. package/dist/lib/file-browser/storage-providers-list.component.d.ts +55 -7
  21. package/dist/lib/file-browser/storage-providers-list.component.d.ts.map +1 -1
  22. package/dist/lib/file-browser/storage-providers-list.component.js +124 -34
  23. package/dist/lib/file-browser/storage-providers-list.component.js.map +1 -1
  24. package/dist/lib/file-upload/file-upload.d.ts +22 -2
  25. package/dist/lib/file-upload/file-upload.d.ts.map +1 -1
  26. package/dist/lib/file-upload/file-upload.js +40 -10
  27. package/dist/lib/file-upload/file-upload.js.map +1 -1
  28. package/dist/lib/files-grid/files-grid.d.ts +28 -4
  29. package/dist/lib/files-grid/files-grid.d.ts.map +1 -1
  30. package/dist/lib/files-grid/files-grid.js +71 -23
  31. package/dist/lib/files-grid/files-grid.js.map +1 -1
  32. package/dist/lib/record-attachments/record-attachments.component.d.ts +15 -7
  33. package/dist/lib/record-attachments/record-attachments.component.d.ts.map +1 -1
  34. package/dist/lib/record-attachments/record-attachments.component.js +34 -18
  35. package/dist/lib/record-attachments/record-attachments.component.js.map +1 -1
  36. package/package.json +13 -13
@@ -129,20 +129,92 @@ function CategoryTreeComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
129
129
  } }
130
130
  export class CategoryTreeComponent extends BaseAngularComponent {
131
131
  notifications;
132
- categorySelected = new EventEmitter();
132
+ CategorySelected = new EventEmitter();
133
+ /**
134
+ * @deprecated Use {@link CategorySelected}.
135
+ *
136
+ * The same emitter under the old binding name, so a template still binding
137
+ * (categorySelected) keeps working. Must stay AFTER CategorySelected: class fields
138
+ * initialise in order, and the other way round this captures undefined.
139
+ */
140
+ categorySelected = this.CategorySelected;
133
141
  isLoading = false;
134
- showNew = false;
135
- newCategoryName = '';
136
- renameFileCategory;
137
- categoriesData = [];
142
+ ShowNew = false;
143
+ /** @deprecated Use {@link ShowNew}. */
144
+ get showNew() {
145
+ return this.ShowNew;
146
+ }
147
+ /** @deprecated Use {@link ShowNew}. */
148
+ set showNew(value) {
149
+ this.ShowNew = value;
150
+ }
151
+ NewCategoryName = '';
152
+ /** @deprecated Use {@link NewCategoryName}. */
153
+ get newCategoryName() {
154
+ return this.NewCategoryName;
155
+ }
156
+ /** @deprecated Use {@link NewCategoryName}. */
157
+ set newCategoryName(value) {
158
+ this.NewCategoryName = value;
159
+ }
160
+ RenameFileCategory;
161
+ /** @deprecated Use {@link RenameFileCategory}. */
162
+ get renameFileCategory() {
163
+ return this.RenameFileCategory;
164
+ }
165
+ /** @deprecated Use {@link RenameFileCategory}. */
166
+ set renameFileCategory(value) {
167
+ this.RenameFileCategory = value;
168
+ }
169
+ CategoriesData = [];
170
+ /** @deprecated Use {@link CategoriesData}. */
171
+ get categoriesData() {
172
+ return this.CategoriesData;
173
+ }
174
+ /** @deprecated Use {@link CategoriesData}. */
175
+ set categoriesData(value) {
176
+ this.CategoriesData = value;
177
+ }
138
178
  /** Expanded node IDs for the tree */
139
- expandedIds = new Set();
179
+ ExpandedIds = new Set();
180
+ /** @deprecated Use {@link ExpandedIds}. */
181
+ get expandedIds() {
182
+ return this.ExpandedIds;
183
+ }
184
+ /** @deprecated Use {@link ExpandedIds}. */
185
+ set expandedIds(value) {
186
+ this.ExpandedIds = value;
187
+ }
140
188
  /** Currently selected node ID */
141
189
  selectedId;
142
190
  /** Context menu state */
143
- contextMenuVisible = false;
144
- contextMenuX = 0;
145
- contextMenuY = 0;
191
+ ContextMenuVisible = false;
192
+ /** @deprecated Use {@link ContextMenuVisible}. */
193
+ get contextMenuVisible() {
194
+ return this.ContextMenuVisible;
195
+ }
196
+ /** @deprecated Use {@link ContextMenuVisible}. */
197
+ set contextMenuVisible(value) {
198
+ this.ContextMenuVisible = value;
199
+ }
200
+ ContextMenuX = 0;
201
+ /** @deprecated Use {@link ContextMenuX}. */
202
+ get contextMenuX() {
203
+ return this.ContextMenuX;
204
+ }
205
+ /** @deprecated Use {@link ContextMenuX}. */
206
+ set contextMenuX(value) {
207
+ this.ContextMenuX = value;
208
+ }
209
+ ContextMenuY = 0;
210
+ /** @deprecated Use {@link ContextMenuY}. */
211
+ get contextMenuY() {
212
+ return this.ContextMenuY;
213
+ }
214
+ /** @deprecated Use {@link ContextMenuY}. */
215
+ set contextMenuY(value) {
216
+ this.ContextMenuY = value;
217
+ }
146
218
  contextMenuNode;
147
219
  get md() { return this.ProviderToUse; }
148
220
  constructor(notifications) {
@@ -153,88 +225,140 @@ export class CategoryTreeComponent extends BaseAngularComponent {
153
225
  this.Refresh();
154
226
  }
155
227
  /** Returns root-level nodes (no parent). */
228
+ get RootNodes() {
229
+ return this.CategoriesData.filter((c) => !c.ParentID);
230
+ }
231
+ /** @deprecated Use {@link RootNodes}. */
156
232
  get rootNodes() {
157
- return this.categoriesData.filter((c) => !c.ParentID);
233
+ return this.RootNodes;
158
234
  }
159
235
  /** Checks if a node has children. */
236
+ HasChildren(node) {
237
+ return this.CategoriesData.some((c) => UUIDsEqual(c.ParentID, node.ID));
238
+ }
239
+ /** @deprecated Use {@link HasChildren}. */
160
240
  hasChildren(node) {
161
- return this.categoriesData.some((c) => UUIDsEqual(c.ParentID, node.ID));
241
+ return this.HasChildren(node);
162
242
  }
163
243
  /** Returns children of a node. */
244
+ GetChildren(node) {
245
+ return this.CategoriesData.filter((c) => UUIDsEqual(c.ParentID, node.ID));
246
+ }
247
+ /** @deprecated Use {@link GetChildren}. */
164
248
  getChildren(node) {
165
- return this.categoriesData.filter((c) => UUIDsEqual(c.ParentID, node.ID));
249
+ return this.GetChildren(node);
166
250
  }
167
251
  /** Checks if a node is expanded. */
252
+ IsExpanded(node) {
253
+ return this.ExpandedIds.has(node.ID);
254
+ }
255
+ /** @deprecated Use {@link IsExpanded}. */
168
256
  isExpanded(node) {
169
- return this.expandedIds.has(node.ID);
257
+ return this.IsExpanded(node);
170
258
  }
171
259
  /** Toggles expand/collapse on a node. */
172
- toggleExpand(node, event) {
260
+ ToggleExpand(node, event) {
173
261
  event.stopPropagation();
174
- if (this.expandedIds.has(node.ID)) {
175
- this.expandedIds.delete(node.ID);
262
+ if (this.ExpandedIds.has(node.ID)) {
263
+ this.ExpandedIds.delete(node.ID);
176
264
  }
177
265
  else {
178
- this.expandedIds.add(node.ID);
266
+ this.ExpandedIds.add(node.ID);
179
267
  }
180
268
  }
269
+ /** @deprecated Use {@link ToggleExpand}. */
270
+ toggleExpand(node, event) {
271
+ return this.ToggleExpand(node, event);
272
+ }
181
273
  /** Checks if a node is the currently selected node. */
182
- isSelected(node) {
274
+ IsSelected(node) {
183
275
  return this.selectedId != null && UUIDsEqual(this.selectedId, node.ID);
184
276
  }
277
+ /** @deprecated Use {@link IsSelected}. */
278
+ isSelected(node) {
279
+ return this.IsSelected(node);
280
+ }
185
281
  /** Selects a node and emits event. */
186
- selectNode(node) {
282
+ SelectNode(node) {
187
283
  this.selectedId = node.ID;
188
- this.categorySelected.emit(node.ID);
284
+ this.CategorySelected.emit(node.ID);
285
+ }
286
+ /** @deprecated Use {@link SelectNode}. */
287
+ selectNode(node) {
288
+ return this.SelectNode(node);
189
289
  }
190
290
  /** Opens context menu on right-click. */
191
- onContextMenu(event, node) {
291
+ OnContextMenu(event, node) {
192
292
  event.preventDefault();
193
293
  event.stopPropagation();
194
294
  this.contextMenuNode = node;
195
- this.contextMenuX = event.clientX;
196
- this.contextMenuY = event.clientY;
197
- this.contextMenuVisible = true;
295
+ this.ContextMenuX = event.clientX;
296
+ this.ContextMenuY = event.clientY;
297
+ this.ContextMenuVisible = true;
298
+ }
299
+ /** @deprecated Use {@link OnContextMenu}. */
300
+ onContextMenu(event, node) {
301
+ return this.OnContextMenu(event, node);
198
302
  }
199
303
  /** Closes the context menu. */
200
- closeContextMenu() {
201
- this.contextMenuVisible = false;
304
+ CloseContextMenu() {
305
+ this.ContextMenuVisible = false;
202
306
  this.contextMenuNode = undefined;
203
307
  }
308
+ /** @deprecated Use {@link CloseContextMenu}. */
309
+ closeContextMenu() {
310
+ return this.CloseContextMenu();
311
+ }
204
312
  /** Handles context menu action selection. */
205
- onContextMenuAction(action) {
313
+ OnContextMenuAction(action) {
206
314
  const node = this.contextMenuNode;
207
- this.closeContextMenu();
315
+ this.CloseContextMenu();
208
316
  if (!node) {
209
317
  return;
210
318
  }
211
319
  switch (action) {
212
320
  case 'rename':
213
- this.renameFileCategory = node;
321
+ this.RenameFileCategory = node;
214
322
  break;
215
323
  case 'delete':
216
- this.deleteCategory(node);
324
+ this.DeleteCategory(node);
217
325
  break;
218
326
  }
219
327
  }
328
+ /** @deprecated Use {@link OnContextMenuAction}. */
329
+ onContextMenuAction(action) {
330
+ return this.OnContextMenuAction(action);
331
+ }
332
+ async CreateNewCategory() {
333
+ this.ShowNew = true;
334
+ }
335
+ /** @deprecated Use {@link CreateNewCategory}. */
220
336
  async createNewCategory() {
221
- this.showNew = true;
337
+ return this.CreateNewCategory();
338
+ }
339
+ CancelNewCategory() {
340
+ this.ShowNew = false;
222
341
  }
342
+ /** @deprecated Use {@link CancelNewCategory}. */
223
343
  cancelNewCategory() {
224
- this.showNew = false;
344
+ return this.CancelNewCategory();
225
345
  }
226
- async saveNewCategory() {
346
+ async SaveNewCategory() {
227
347
  this.isLoading = true;
228
348
  const categoryEntity = await this.md.GetEntityObject('MJ: File Categories', this.md.CurrentUser);
229
349
  categoryEntity.NewRecord();
230
- categoryEntity.Name = this.newCategoryName;
350
+ categoryEntity.Name = this.NewCategoryName;
231
351
  await categoryEntity?.Save();
232
- this.categoriesData = [...this.categoriesData, categoryEntity];
233
- this.showNew = false;
234
- this.newCategoryName = '';
352
+ this.CategoriesData = [...this.CategoriesData, categoryEntity];
353
+ this.ShowNew = false;
354
+ this.NewCategoryName = '';
235
355
  this.isLoading = false;
236
356
  }
237
- async deleteCategory(fileCategory) {
357
+ /** @deprecated Use {@link SaveNewCategory}. */
358
+ async saveNewCategory() {
359
+ return this.SaveNewCategory();
360
+ }
361
+ async DeleteCategory(fileCategory) {
238
362
  this.isLoading = true;
239
363
  const { ID } = fileCategory;
240
364
  const success = await fileCategory.Delete();
@@ -244,24 +368,40 @@ export class CategoryTreeComponent extends BaseAngularComponent {
244
368
  this.isLoading = false;
245
369
  return;
246
370
  }
247
- this.categoriesData = this.categoriesData.filter((c) => !UUIDsEqual(c.ID, ID));
248
- this.clearSelection();
371
+ this.CategoriesData = this.CategoriesData.filter((c) => !UUIDsEqual(c.ID, ID));
372
+ this.ClearSelection();
249
373
  this.isLoading = false;
250
374
  }
251
- clearSelection() {
375
+ /** @deprecated Use {@link DeleteCategory}. */
376
+ async deleteCategory(fileCategory) {
377
+ return this.DeleteCategory(fileCategory);
378
+ }
379
+ ClearSelection() {
252
380
  this.selectedId = undefined;
253
- this.categorySelected.emit(undefined);
381
+ this.CategorySelected.emit(undefined);
254
382
  }
383
+ /** @deprecated Use {@link ClearSelection}. */
384
+ clearSelection() {
385
+ return this.ClearSelection();
386
+ }
387
+ CancelRename() {
388
+ this.RenameFileCategory?.Revert();
389
+ this.RenameFileCategory = undefined;
390
+ }
391
+ /** @deprecated Use {@link CancelRename}. */
255
392
  cancelRename() {
256
- this.renameFileCategory?.Revert();
257
- this.renameFileCategory = undefined;
393
+ return this.CancelRename();
258
394
  }
259
- async saveRename() {
395
+ async SaveRename() {
260
396
  this.isLoading = true;
261
- await this.renameFileCategory?.Save();
262
- this.renameFileCategory = undefined;
397
+ await this.RenameFileCategory?.Save();
398
+ this.RenameFileCategory = undefined;
263
399
  this.isLoading = false;
264
400
  }
401
+ /** @deprecated Use {@link SaveRename}. */
402
+ async saveRename() {
403
+ return this.SaveRename();
404
+ }
265
405
  async Refresh() {
266
406
  this.isLoading = true;
267
407
  const rv = RunView.FromMetadataProvider(this.ProviderToUse);
@@ -270,7 +410,7 @@ export class CategoryTreeComponent extends BaseAngularComponent {
270
410
  ResultType: 'entity_object',
271
411
  });
272
412
  if (result.Success) {
273
- this.categoriesData = result.Results;
413
+ this.CategoriesData = result.Results;
274
414
  }
275
415
  else {
276
416
  throw new Error('Error loading file categories: ' + result.ErrorMessage);
@@ -278,7 +418,7 @@ export class CategoryTreeComponent extends BaseAngularComponent {
278
418
  this.isLoading = false;
279
419
  }
280
420
  static ɵfac = function CategoryTreeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CategoryTreeComponent)(i0.ɵɵdirectiveInject(i1.MJNotificationService)); };
281
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CategoryTreeComponent, selectors: [["mj-files-category-tree"]], outputs: { categorySelected: "categorySelected" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 26, vars: 9, consts: [["treeNode", ""], ["newForm", "ngForm"], ["renameForm", "ngForm"], [1, "container"], [1, "tree-header"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "category-tree"], [1, "context-menu", 3, "top", "left"], ["Title", "New file category", 3, "Close", "Visible", "Width", "MinWidth"], [1, "dialog-form-container"], [1, "mj-form-field"], [1, "mj-form-label"], ["name", "name", "required", "", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", 3, "click", "disabled"], ["Title", "Rename file category", 3, "Visible", "Width", "MinWidth"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "tree-node"], [1, "tree-node-row", 3, "click", "contextmenu"], [1, "tree-expand-btn"], [1, "tree-expand-placeholder"], [1, "fa-solid", "fa-folder", "tree-folder-icon"], [1, "tree-node-label"], [1, "tree-expand-btn", 3, "click"], [1, "fa-solid"], [1, "context-menu", 3, "click"], [1, "context-menu-item", 3, "click"], [1, "fa-solid", "fa-pen"], ["disabled", "", 1, "context-menu-item", 3, "click"], [1, "fa-solid", "fa-trash-can"], ["Title", "Rename file category", 3, "Close", "Visible", "Width", "MinWidth"], ["name", "Name", "required", "", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"]], template: function CategoryTreeComponent_Template(rf, ctx) { if (rf & 1) {
421
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CategoryTreeComponent, selectors: [["mj-files-category-tree"]], outputs: { CategorySelected: "CategorySelected", categorySelected: "categorySelected" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 26, vars: 9, consts: [["treeNode", ""], ["newForm", "ngForm"], ["renameForm", "ngForm"], [1, "container"], [1, "tree-header"], ["mjButton", "", 3, "click"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "category-tree"], [1, "context-menu", 3, "top", "left"], ["Title", "New file category", 3, "Close", "Visible", "Width", "MinWidth"], [1, "dialog-form-container"], [1, "mj-form-field"], [1, "mj-form-label"], ["name", "name", "required", "", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", 3, "click", "disabled"], ["Title", "Rename file category", 3, "Visible", "Width", "MinWidth"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "tree-node"], [1, "tree-node-row", 3, "click", "contextmenu"], [1, "tree-expand-btn"], [1, "tree-expand-placeholder"], [1, "fa-solid", "fa-folder", "tree-folder-icon"], [1, "tree-node-label"], [1, "tree-expand-btn", 3, "click"], [1, "fa-solid"], [1, "context-menu", 3, "click"], [1, "context-menu-item", 3, "click"], [1, "fa-solid", "fa-pen"], ["disabled", "", 1, "context-menu-item", 3, "click"], [1, "fa-solid", "fa-trash-can"], ["Title", "Rename file category", 3, "Close", "Visible", "Width", "MinWidth"], ["name", "Name", "required", "", 1, "mj-input", 3, "ngModelChange", "ngModel", "disabled"]], template: function CategoryTreeComponent_Template(rf, ctx) { if (rf & 1) {
282
422
  const _r1 = i0.ɵɵgetCurrentView();
283
423
  i0.ɵɵelementStart(0, "div", 3)(1, "div", 4)(2, "button", 5);
284
424
  i0.ɵɵlistener("click", function CategoryTreeComponent_Template_button_click_2_listener() { return ctx.clearSelection(); });
@@ -332,7 +472,9 @@ export class CategoryTreeComponent extends BaseAngularComponent {
332
472
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CategoryTreeComponent, [{
333
473
  type: Component,
334
474
  args: [{ standalone: false, selector: 'mj-files-category-tree', template: "<div class=\"container\">\n <div class=\"tree-header\">\n <button mjButton (click)=\"clearSelection()\">All Files</button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">Add category</button>\n </div>\n\n <div class=\"category-tree\">\n @for (node of rootNodes; track node.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: node, level: 0 }\"></ng-container>\n }\n </div>\n\n <ng-template #treeNode let-node let-level=\"level\">\n <div class=\"tree-node\" [style.padding-left.px]=\"level * 20\">\n <div class=\"tree-node-row\"\n [class.selected]=\"isSelected(node)\"\n (click)=\"selectNode(node)\"\n (contextmenu)=\"onContextMenu($event, node)\">\n @if (hasChildren(node)) {\n <button class=\"tree-expand-btn\" (click)=\"toggleExpand(node, $event)\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"!isExpanded(node)\" [class.fa-chevron-down]=\"isExpanded(node)\"></i>\n </button>\n } @else {\n <span class=\"tree-expand-placeholder\"></span>\n }\n <i class=\"fa-solid fa-folder tree-folder-icon\"></i>\n <span class=\"tree-node-label\">{{ node.Name }}</span>\n </div>\n @if (isExpanded(node)) {\n @for (child of getChildren(node); track child.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: child, level: level + 1 }\"></ng-container>\n }\n }\n </div>\n </ng-template>\n\n <!-- Context Menu -->\n @if (contextMenuVisible) {\n <div class=\"context-menu\"\n [style.top.px]=\"contextMenuY\"\n [style.left.px]=\"contextMenuX\"\n (document:click)=\"closeContextMenu()\">\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('rename')\">\n <i class=\"fa-solid fa-pen\"></i> Rename\n </button>\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('delete')\" disabled>\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n </div>\n }\n\n <mj-dialog\n [Visible]=\"showNew\"\n Title=\"New file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelNewCategory()\">\n <div class=\"dialog-form-container\">\n <form #newForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"name\"\n [(ngModel)]=\"newCategoryName\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveNewCategory()\" [disabled]=\"isLoading\">Save</button>\n <button mjButton (click)=\"cancelNewCategory()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n\n @if (!!renameFileCategory) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Rename file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelRename()\">\n <div class=\"dialog-form-container\">\n <form #renameForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"Name\"\n [(ngModel)]=\"renameFileCategory.Name\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveRename()\" [disabled]=\"isLoading || !renameFileCategory.Dirty\">Save</button>\n <button mjButton (click)=\"cancelRename()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n</div>\n", styles: ["/* Styles for category tree */\n.container {\n display: flex;\n flex-direction: column;\n}\n\n.category-tree {\n width: 250px;\n max-height: 500px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n}\n\n.tree-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-right: 4px;\n margin-bottom: 4px;\n}\n\n.tree-node-row {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.15s;\n user-select: none;\n}\n\n.tree-node-row:hover {\n background-color: var(--mj-bg-surface-hover);\n}\n\n.tree-node-row.selected {\n background-color: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.tree-expand-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 10px;\n}\n\n.tree-expand-placeholder {\n width: 16px;\n height: 16px;\n display: inline-block;\n}\n\n.tree-folder-icon {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.tree-node-label {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n/* Context Menu */\n.context-menu {\n position: fixed;\n z-index: 10000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 12px var(--mj-bg-overlay);\n padding: 4px 0;\n min-width: 140px;\n}\n\n.context-menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 16px;\n border: none;\n background: none;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n}\n\n.context-menu-item:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n.context-menu-item:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.dialog-form-container {\n padding: 8px 0;\n}\n\n.mj-form-field {\n display: flex;\n flex-direction: row;\n align-items: center;\n column-gap: 12px;\n margin-bottom: 8px;\n}\n\n.mj-form-label {\n min-width: 80px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.mj-form-field .mj-input {\n width: 100%;\n}\n"] }]
335
- }], () => [{ type: i1.MJNotificationService }], { categorySelected: [{
475
+ }], () => [{ type: i1.MJNotificationService }], { CategorySelected: [{
476
+ type: Output
477
+ }], categorySelected: [{
336
478
  type: Output
337
479
  }] }); })();
338
480
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CategoryTreeComponent, { className: "CategoryTreeComponent", filePath: "src/lib/category-tree/category-tree.ts", lineNumber: 14 }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"category-tree.js","sourceRoot":"","sources":["../../../src/lib/category-tree/category-tree.ts","../../../src/lib/category-tree/category-tree.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { RunView } from '@memberjunction/core';\nimport { MJFileCategoryEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n@Component({\n standalone: false,\n selector: 'mj-files-category-tree',\n templateUrl: './category-tree.html',\n styleUrls: ['./category-tree.css'],\n})\nexport class CategoryTreeComponent extends BaseAngularComponent implements OnInit {\n @Output() categorySelected = new EventEmitter<string | undefined>();\n\n public isLoading: boolean = false;\n public showNew: boolean = false;\n public newCategoryName = '';\n public renameFileCategory: MJFileCategoryEntity | undefined;\n\n public categoriesData: MJFileCategoryEntity[] = [];\n\n /** Expanded node IDs for the tree */\n public expandedIds = new Set<string>();\n\n /** Currently selected node ID */\n private selectedId: string | undefined;\n\n /** Context menu state */\n public contextMenuVisible = false;\n public contextMenuX = 0;\n public contextMenuY = 0;\n private contextMenuNode: MJFileCategoryEntity | undefined;\n\n private get md() { return this.ProviderToUse; }\n\n constructor(private notifications: MJNotificationService) { super(); }\n\n ngOnInit(): void {\n this.Refresh();\n }\n\n /** Returns root-level nodes (no parent). */\n get rootNodes(): MJFileCategoryEntity[] {\n return this.categoriesData.filter((c) => !c.ParentID);\n }\n\n /** Checks if a node has children. */\n hasChildren(node: MJFileCategoryEntity): boolean {\n return this.categoriesData.some((c) => UUIDsEqual(c.ParentID, node.ID));\n }\n\n /** Returns children of a node. */\n getChildren(node: MJFileCategoryEntity): MJFileCategoryEntity[] {\n return this.categoriesData.filter((c) => UUIDsEqual(c.ParentID, node.ID));\n }\n\n /** Checks if a node is expanded. */\n isExpanded(node: MJFileCategoryEntity): boolean {\n return this.expandedIds.has(node.ID);\n }\n\n /** Toggles expand/collapse on a node. */\n toggleExpand(node: MJFileCategoryEntity, event: Event): void {\n event.stopPropagation();\n if (this.expandedIds.has(node.ID)) {\n this.expandedIds.delete(node.ID);\n } else {\n this.expandedIds.add(node.ID);\n }\n }\n\n /** Checks if a node is the currently selected node. */\n isSelected(node: MJFileCategoryEntity): boolean {\n return this.selectedId != null && UUIDsEqual(this.selectedId, node.ID);\n }\n\n /** Selects a node and emits event. */\n selectNode(node: MJFileCategoryEntity): void {\n this.selectedId = node.ID;\n this.categorySelected.emit(node.ID);\n }\n\n /** Opens context menu on right-click. */\n onContextMenu(event: MouseEvent, node: MJFileCategoryEntity): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuNode = node;\n this.contextMenuX = event.clientX;\n this.contextMenuY = event.clientY;\n this.contextMenuVisible = true;\n }\n\n /** Closes the context menu. */\n closeContextMenu(): void {\n this.contextMenuVisible = false;\n this.contextMenuNode = undefined;\n }\n\n /** Handles context menu action selection. */\n onContextMenuAction(action: string): void {\n const node = this.contextMenuNode;\n this.closeContextMenu();\n if (!node) {\n return;\n }\n\n switch (action) {\n case 'rename':\n this.renameFileCategory = node;\n break;\n case 'delete':\n this.deleteCategory(node);\n break;\n }\n }\n\n async createNewCategory() {\n this.showNew = true;\n }\n\n cancelNewCategory() {\n this.showNew = false;\n }\n\n async saveNewCategory() {\n this.isLoading = true;\n const categoryEntity: MJFileCategoryEntity = await this.md.GetEntityObject('MJ: File Categories', this.md.CurrentUser);\n categoryEntity.NewRecord();\n categoryEntity.Name = this.newCategoryName;\n await categoryEntity?.Save();\n this.categoriesData = [...this.categoriesData, categoryEntity];\n this.showNew = false;\n this.newCategoryName = '';\n this.isLoading = false;\n }\n\n async deleteCategory(fileCategory: MJFileCategoryEntity) {\n this.isLoading = true;\n const { ID } = fileCategory;\n const success = await fileCategory.Delete();\n if (!success) {\n console.error('Unable to delete file category:', fileCategory);\n this.notifications.CreateSimpleNotification(`Unable to delete category '${fileCategory.Name}'`, 'error');\n this.isLoading = false;\n return;\n }\n\n this.categoriesData = this.categoriesData.filter((c) => !UUIDsEqual(c.ID, ID));\n this.clearSelection();\n this.isLoading = false;\n }\n\n clearSelection() {\n this.selectedId = undefined;\n this.categorySelected.emit(undefined);\n }\n\n cancelRename() {\n this.renameFileCategory?.Revert();\n this.renameFileCategory = undefined;\n }\n\n async saveRename() {\n this.isLoading = true;\n await this.renameFileCategory?.Save();\n this.renameFileCategory = undefined;\n this.isLoading = false;\n }\n\n async Refresh() {\n this.isLoading = true;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: File Categories',\n ResultType: 'entity_object',\n });\n\n if (result.Success) {\n this.categoriesData = <MJFileCategoryEntity[]>result.Results;\n } else {\n throw new Error('Error loading file categories: ' + result.ErrorMessage);\n }\n this.isLoading = false;\n }\n}\n","<div class=\"container\">\n <div class=\"tree-header\">\n <button mjButton (click)=\"clearSelection()\">All Files</button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">Add category</button>\n </div>\n\n <div class=\"category-tree\">\n @for (node of rootNodes; track node.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: node, level: 0 }\"></ng-container>\n }\n </div>\n\n <ng-template #treeNode let-node let-level=\"level\">\n <div class=\"tree-node\" [style.padding-left.px]=\"level * 20\">\n <div class=\"tree-node-row\"\n [class.selected]=\"isSelected(node)\"\n (click)=\"selectNode(node)\"\n (contextmenu)=\"onContextMenu($event, node)\">\n @if (hasChildren(node)) {\n <button class=\"tree-expand-btn\" (click)=\"toggleExpand(node, $event)\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"!isExpanded(node)\" [class.fa-chevron-down]=\"isExpanded(node)\"></i>\n </button>\n } @else {\n <span class=\"tree-expand-placeholder\"></span>\n }\n <i class=\"fa-solid fa-folder tree-folder-icon\"></i>\n <span class=\"tree-node-label\">{{ node.Name }}</span>\n </div>\n @if (isExpanded(node)) {\n @for (child of getChildren(node); track child.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: child, level: level + 1 }\"></ng-container>\n }\n }\n </div>\n </ng-template>\n\n <!-- Context Menu -->\n @if (contextMenuVisible) {\n <div class=\"context-menu\"\n [style.top.px]=\"contextMenuY\"\n [style.left.px]=\"contextMenuX\"\n (document:click)=\"closeContextMenu()\">\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('rename')\">\n <i class=\"fa-solid fa-pen\"></i> Rename\n </button>\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('delete')\" disabled>\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n </div>\n }\n\n <mj-dialog\n [Visible]=\"showNew\"\n Title=\"New file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelNewCategory()\">\n <div class=\"dialog-form-container\">\n <form #newForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"name\"\n [(ngModel)]=\"newCategoryName\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveNewCategory()\" [disabled]=\"isLoading\">Save</button>\n <button mjButton (click)=\"cancelNewCategory()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n\n @if (!!renameFileCategory) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Rename file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelRename()\">\n <div class=\"dialog-form-container\">\n <form #renameForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"Name\"\n [(ngModel)]=\"renameFileCategory.Name\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveRename()\" [disabled]=\"isLoading || !renameFileCategory.Dirty\">Save</button>\n <button mjButton (click)=\"cancelRename()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n</div>\n"]}
1
+ {"version":3,"file":"category-tree.js","sourceRoot":"","sources":["../../../src/lib/category-tree/category-tree.ts","../../../src/lib/category-tree/category-tree.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { RunView } from '@memberjunction/core';\nimport { MJFileCategoryEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n@Component({\n standalone: false,\n selector: 'mj-files-category-tree',\n templateUrl: './category-tree.html',\n styleUrls: ['./category-tree.css'],\n})\nexport class CategoryTreeComponent extends BaseAngularComponent implements OnInit {\n @Output() CategorySelected = new EventEmitter<string | undefined>();\n\n /**\n * @deprecated Use {@link CategorySelected}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (categorySelected) keeps working. Must stay AFTER CategorySelected: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() categorySelected = this.CategorySelected;\n\n public isLoading: boolean = false;\n public ShowNew: boolean = false;\n\n /** @deprecated Use {@link ShowNew}. */\n public get showNew(): boolean {\n return this.ShowNew;\n }\n /** @deprecated Use {@link ShowNew}. */\n public set showNew(value: boolean) {\n this.ShowNew = value;\n }\n public NewCategoryName = '';\n\n /** @deprecated Use {@link NewCategoryName}. */\n public get newCategoryName() {\n return this.NewCategoryName;\n }\n /** @deprecated Use {@link NewCategoryName}. */\n public set newCategoryName(value) {\n this.NewCategoryName = value;\n }\n public RenameFileCategory: MJFileCategoryEntity | undefined;\n\n /** @deprecated Use {@link RenameFileCategory}. */\n public get renameFileCategory(): MJFileCategoryEntity | undefined {\n return this.RenameFileCategory;\n }\n /** @deprecated Use {@link RenameFileCategory}. */\n public set renameFileCategory(value: MJFileCategoryEntity | undefined) {\n this.RenameFileCategory = value;\n }\n\n public CategoriesData: MJFileCategoryEntity[] = [];\n\n /** @deprecated Use {@link CategoriesData}. */\n public get categoriesData(): MJFileCategoryEntity[] {\n return this.CategoriesData;\n }\n /** @deprecated Use {@link CategoriesData}. */\n public set categoriesData(value: MJFileCategoryEntity[]) {\n this.CategoriesData = value;\n }\n\n /** Expanded node IDs for the tree */\n public ExpandedIds = new Set<string>();\n\n /** @deprecated Use {@link ExpandedIds}. */\n public get expandedIds() {\n return this.ExpandedIds;\n }\n /** @deprecated Use {@link ExpandedIds}. */\n public set expandedIds(value) {\n this.ExpandedIds = value;\n }\n\n /** Currently selected node ID */\n private selectedId: string | undefined;\n\n /** Context menu state */\n public ContextMenuVisible = false;\n\n /** @deprecated Use {@link ContextMenuVisible}. */\n public get contextMenuVisible() {\n return this.ContextMenuVisible;\n }\n /** @deprecated Use {@link ContextMenuVisible}. */\n public set contextMenuVisible(value) {\n this.ContextMenuVisible = value;\n }\n public ContextMenuX = 0;\n\n /** @deprecated Use {@link ContextMenuX}. */\n public get contextMenuX() {\n return this.ContextMenuX;\n }\n /** @deprecated Use {@link ContextMenuX}. */\n public set contextMenuX(value) {\n this.ContextMenuX = value;\n }\n public ContextMenuY = 0;\n\n /** @deprecated Use {@link ContextMenuY}. */\n public get contextMenuY() {\n return this.ContextMenuY;\n }\n /** @deprecated Use {@link ContextMenuY}. */\n public set contextMenuY(value) {\n this.ContextMenuY = value;\n }\n private contextMenuNode: MJFileCategoryEntity | undefined;\n\n private get md() { return this.ProviderToUse; }\n\n constructor(private notifications: MJNotificationService) { super(); }\n\n ngOnInit(): void {\n this.Refresh();\n }\n\n /** Returns root-level nodes (no parent). */\n get RootNodes(): MJFileCategoryEntity[] {\n return this.CategoriesData.filter((c) => !c.ParentID);\n }\n\n /** @deprecated Use {@link RootNodes}. */\n get rootNodes(): MJFileCategoryEntity[] {\n return this.RootNodes;\n }\n\n /** Checks if a node has children. */\n HasChildren(node: MJFileCategoryEntity): boolean {\n return this.CategoriesData.some((c) => UUIDsEqual(c.ParentID, node.ID));\n }\n\n /** @deprecated Use {@link HasChildren}. */\n hasChildren(node: MJFileCategoryEntity): boolean {\n return this.HasChildren(node);\n }\n\n /** Returns children of a node. */\n GetChildren(node: MJFileCategoryEntity): MJFileCategoryEntity[] {\n return this.CategoriesData.filter((c) => UUIDsEqual(c.ParentID, node.ID));\n }\n\n /** @deprecated Use {@link GetChildren}. */\n getChildren(node: MJFileCategoryEntity): MJFileCategoryEntity[] {\n return this.GetChildren(node);\n }\n\n /** Checks if a node is expanded. */\n IsExpanded(node: MJFileCategoryEntity): boolean {\n return this.ExpandedIds.has(node.ID);\n }\n\n /** @deprecated Use {@link IsExpanded}. */\n isExpanded(node: MJFileCategoryEntity): boolean {\n return this.IsExpanded(node);\n }\n\n /** Toggles expand/collapse on a node. */\n ToggleExpand(node: MJFileCategoryEntity, event: Event): void {\n event.stopPropagation();\n if (this.ExpandedIds.has(node.ID)) {\n this.ExpandedIds.delete(node.ID);\n } else {\n this.ExpandedIds.add(node.ID);\n }\n }\n\n /** @deprecated Use {@link ToggleExpand}. */\n toggleExpand(node: MJFileCategoryEntity, event: Event): void {\n return this.ToggleExpand(node, event);\n }\n\n /** Checks if a node is the currently selected node. */\n IsSelected(node: MJFileCategoryEntity): boolean {\n return this.selectedId != null && UUIDsEqual(this.selectedId, node.ID);\n }\n\n /** @deprecated Use {@link IsSelected}. */\n isSelected(node: MJFileCategoryEntity): boolean {\n return this.IsSelected(node);\n }\n\n /** Selects a node and emits event. */\n SelectNode(node: MJFileCategoryEntity): void {\n this.selectedId = node.ID;\n this.CategorySelected.emit(node.ID);\n }\n\n /** @deprecated Use {@link SelectNode}. */\n selectNode(node: MJFileCategoryEntity): void {\n return this.SelectNode(node);\n }\n\n /** Opens context menu on right-click. */\n OnContextMenu(event: MouseEvent, node: MJFileCategoryEntity): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuNode = node;\n this.ContextMenuX = event.clientX;\n this.ContextMenuY = event.clientY;\n this.ContextMenuVisible = true;\n }\n\n /** @deprecated Use {@link OnContextMenu}. */\n onContextMenu(event: MouseEvent, node: MJFileCategoryEntity): void {\n return this.OnContextMenu(event, node);\n }\n\n /** Closes the context menu. */\n CloseContextMenu(): void {\n this.ContextMenuVisible = false;\n this.contextMenuNode = undefined;\n }\n\n /** @deprecated Use {@link CloseContextMenu}. */\n closeContextMenu(): void {\n return this.CloseContextMenu();\n }\n\n /** Handles context menu action selection. */\n OnContextMenuAction(action: string): void {\n const node = this.contextMenuNode;\n this.CloseContextMenu();\n if (!node) {\n return;\n }\n\n switch (action) {\n case 'rename':\n this.RenameFileCategory = node;\n break;\n case 'delete':\n this.DeleteCategory(node);\n break;\n }\n }\n\n /** @deprecated Use {@link OnContextMenuAction}. */\n onContextMenuAction(action: string): void {\n return this.OnContextMenuAction(action);\n }\n\n async CreateNewCategory() {\n this.ShowNew = true;\n }\n\n /** @deprecated Use {@link CreateNewCategory}. */\n async createNewCategory() {\n return this.CreateNewCategory();\n }\n\n CancelNewCategory() {\n this.ShowNew = false;\n }\n\n /** @deprecated Use {@link CancelNewCategory}. */\n cancelNewCategory() {\n return this.CancelNewCategory();\n }\n\n async SaveNewCategory() {\n this.isLoading = true;\n const categoryEntity: MJFileCategoryEntity = await this.md.GetEntityObject('MJ: File Categories', this.md.CurrentUser);\n categoryEntity.NewRecord();\n categoryEntity.Name = this.NewCategoryName;\n await categoryEntity?.Save();\n this.CategoriesData = [...this.CategoriesData, categoryEntity];\n this.ShowNew = false;\n this.NewCategoryName = '';\n this.isLoading = false;\n }\n\n /** @deprecated Use {@link SaveNewCategory}. */\n async saveNewCategory() {\n return this.SaveNewCategory();\n }\n\n async DeleteCategory(fileCategory: MJFileCategoryEntity) {\n this.isLoading = true;\n const { ID } = fileCategory;\n const success = await fileCategory.Delete();\n if (!success) {\n console.error('Unable to delete file category:', fileCategory);\n this.notifications.CreateSimpleNotification(`Unable to delete category '${fileCategory.Name}'`, 'error');\n this.isLoading = false;\n return;\n }\n\n this.CategoriesData = this.CategoriesData.filter((c) => !UUIDsEqual(c.ID, ID));\n this.ClearSelection();\n this.isLoading = false;\n }\n\n /** @deprecated Use {@link DeleteCategory}. */\n async deleteCategory(fileCategory: MJFileCategoryEntity) {\n return this.DeleteCategory(fileCategory);\n }\n\n ClearSelection() {\n this.selectedId = undefined;\n this.CategorySelected.emit(undefined);\n }\n\n /** @deprecated Use {@link ClearSelection}. */\n clearSelection() {\n return this.ClearSelection();\n }\n\n CancelRename() {\n this.RenameFileCategory?.Revert();\n this.RenameFileCategory = undefined;\n }\n\n /** @deprecated Use {@link CancelRename}. */\n cancelRename() {\n return this.CancelRename();\n }\n\n async SaveRename() {\n this.isLoading = true;\n await this.RenameFileCategory?.Save();\n this.RenameFileCategory = undefined;\n this.isLoading = false;\n }\n\n /** @deprecated Use {@link SaveRename}. */\n async saveRename() {\n return this.SaveRename();\n }\n\n async Refresh() {\n this.isLoading = true;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: File Categories',\n ResultType: 'entity_object',\n });\n\n if (result.Success) {\n this.CategoriesData = <MJFileCategoryEntity[]>result.Results;\n } else {\n throw new Error('Error loading file categories: ' + result.ErrorMessage);\n }\n this.isLoading = false;\n }\n}\n","<div class=\"container\">\n <div class=\"tree-header\">\n <button mjButton (click)=\"clearSelection()\">All Files</button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">Add category</button>\n </div>\n\n <div class=\"category-tree\">\n @for (node of rootNodes; track node.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: node, level: 0 }\"></ng-container>\n }\n </div>\n\n <ng-template #treeNode let-node let-level=\"level\">\n <div class=\"tree-node\" [style.padding-left.px]=\"level * 20\">\n <div class=\"tree-node-row\"\n [class.selected]=\"isSelected(node)\"\n (click)=\"selectNode(node)\"\n (contextmenu)=\"onContextMenu($event, node)\">\n @if (hasChildren(node)) {\n <button class=\"tree-expand-btn\" (click)=\"toggleExpand(node, $event)\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"!isExpanded(node)\" [class.fa-chevron-down]=\"isExpanded(node)\"></i>\n </button>\n } @else {\n <span class=\"tree-expand-placeholder\"></span>\n }\n <i class=\"fa-solid fa-folder tree-folder-icon\"></i>\n <span class=\"tree-node-label\">{{ node.Name }}</span>\n </div>\n @if (isExpanded(node)) {\n @for (child of getChildren(node); track child.ID) {\n <ng-container *ngTemplateOutlet=\"treeNode; context: { $implicit: child, level: level + 1 }\"></ng-container>\n }\n }\n </div>\n </ng-template>\n\n <!-- Context Menu -->\n @if (contextMenuVisible) {\n <div class=\"context-menu\"\n [style.top.px]=\"contextMenuY\"\n [style.left.px]=\"contextMenuX\"\n (document:click)=\"closeContextMenu()\">\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('rename')\">\n <i class=\"fa-solid fa-pen\"></i> Rename\n </button>\n <button class=\"context-menu-item\" (click)=\"onContextMenuAction('delete')\" disabled>\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n </div>\n }\n\n <mj-dialog\n [Visible]=\"showNew\"\n Title=\"New file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelNewCategory()\">\n <div class=\"dialog-form-container\">\n <form #newForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"name\"\n [(ngModel)]=\"newCategoryName\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveNewCategory()\" [disabled]=\"isLoading\">Save</button>\n <button mjButton (click)=\"cancelNewCategory()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n\n @if (!!renameFileCategory) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"Rename file category\"\n [Width]=\"450\"\n [MinWidth]=\"250\"\n (Close)=\"cancelRename()\">\n <div class=\"dialog-form-container\">\n <form #renameForm=\"ngForm\">\n <label class=\"mj-form-field\">\n <span class=\"mj-form-label\">Name</span>\n <input\n class=\"mj-input\"\n name=\"Name\"\n [(ngModel)]=\"renameFileCategory.Name\"\n required\n [disabled]=\"isLoading\" />\n </label>\n </form>\n </div>\n <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"saveRename()\" [disabled]=\"isLoading || !renameFileCategory.Dirty\">Save</button>\n <button mjButton (click)=\"cancelRename()\" [disabled]=\"isLoading\">Cancel</button>\n </mj-dialog-actions>\n </mj-dialog>\n }\n</div>\n"]}
@@ -19,37 +19,59 @@ export declare class FileBrowserComponent {
19
19
  /**
20
20
  * Reference to the folder tree component for programmatic navigation
21
21
  */
22
- folderTree: FolderTreeComponent;
22
+ FolderTree: FolderTreeComponent;
23
+ /** @deprecated Use {@link FolderTree}. */
24
+ get folderTree(): FolderTreeComponent;
25
+ /** @deprecated Use {@link FolderTree}. */
26
+ set folderTree(value: FolderTreeComponent);
23
27
  /**
24
28
  * Controls manual collapse of the sidebar (toggle button on mobile).
25
29
  * CSS media queries handle the responsive layout automatically.
26
30
  */
27
- isSidebarCollapsed: boolean;
31
+ IsSidebarCollapsed: boolean;
32
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
33
+ get isSidebarCollapsed(): boolean;
34
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
35
+ set isSidebarCollapsed(value: boolean);
28
36
  /**
29
37
  * Currently selected storage account with its provider details.
30
38
  */
31
- selectedAccount: StorageAccountWithProvider | null;
39
+ SelectedAccount: StorageAccountWithProvider | null;
40
+ /** @deprecated Use {@link SelectedAccount}. */
41
+ get selectedAccount(): StorageAccountWithProvider | null;
42
+ /** @deprecated Use {@link SelectedAccount}. */
43
+ set selectedAccount(value: StorageAccountWithProvider | null);
32
44
  /**
33
45
  * Currently selected folder path in the tree.
34
46
  */
35
- selectedFolderPath: string;
47
+ SelectedFolderPath: string;
48
+ /** @deprecated Use {@link SelectedFolderPath}. */
49
+ get selectedFolderPath(): string;
50
+ /** @deprecated Use {@link SelectedFolderPath}. */
51
+ set selectedFolderPath(value: string);
36
52
  constructor();
37
53
  /**
38
54
  * Toggles the visibility of the accounts sidebar.
39
55
  * Used for manual toggle on mobile devices.
40
56
  */
57
+ ToggleSidebar(): void;
58
+ /** @deprecated Use {@link ToggleSidebar}. */
41
59
  toggleSidebar(): void;
42
60
  /**
43
61
  * Handles storage account selection from the sidebar.
44
62
  *
45
63
  * @param accountWithProvider - The selected storage account with provider details, or null if no accounts available
46
64
  */
65
+ OnAccountSelected(accountWithProvider: StorageAccountWithProvider | null): void;
66
+ /** @deprecated Use {@link OnAccountSelected}. */
47
67
  onAccountSelected(accountWithProvider: StorageAccountWithProvider | null): void;
48
68
  /**
49
69
  * Handles folder selection from the tree navigation.
50
70
  *
51
71
  * @param folderPath - The full path of the selected folder
52
72
  */
73
+ OnFolderSelected(folderPath: string): void;
74
+ /** @deprecated Use {@link OnFolderSelected}. */
53
75
  onFolderSelected(folderPath: string): void;
54
76
  /**
55
77
  * Handles folder navigation from the file grid (double-click on folder).
@@ -57,11 +79,15 @@ export declare class FileBrowserComponent {
57
79
  *
58
80
  * @param folderPath - The full path of the folder to navigate to
59
81
  */
82
+ OnFolderNavigate(folderPath: string): void;
83
+ /** @deprecated Use {@link OnFolderNavigate}. */
60
84
  onFolderNavigate(folderPath: string): void;
61
85
  /**
62
86
  * Handles folder structure changes (e.g., new folder created, folder deleted).
63
87
  * Refreshes the folder tree to show the new structure.
64
88
  */
89
+ OnFolderStructureChanged(): void;
90
+ /** @deprecated Use {@link OnFolderStructureChanged}. */
65
91
  onFolderStructureChanged(): void;
66
92
  static ɵfac: i0.ɵɵFactoryDeclaration<FileBrowserComponent, never>;
67
93
  static ɵcmp: i0.ɵɵComponentDeclaration<FileBrowserComponent, "mj-file-browser", never, {}, {}, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"file-browser.component.d.ts","sourceRoot":"","sources":["../../../src/lib/file-browser/file-browser.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E;;;;;;;;;;;;;GAaG;AACH,qBAMa,oBAAoB;IAC/B;;OAEG;IAC6B,UAAU,EAAG,mBAAmB,CAAC;IAEjE;;;OAGG;IACI,kBAAkB,EAAE,OAAO,CAAS;IAE3C;;OAEG;IACI,eAAe,EAAE,0BAA0B,GAAG,IAAI,CAAQ;IAEjE;;OAEG;IACI,kBAAkB,EAAE,MAAM,CAAO;;IAIxC;;;OAGG;IACI,aAAa,IAAI,IAAI;IAI5B;;;;OAIG;IACI,iBAAiB,CAAC,mBAAmB,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI;IAKtF;;;;OAIG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;OAKG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjD;;;OAGG;IACI,wBAAwB,IAAI,IAAI;yCAnE5B,oBAAoB;2CAApB,oBAAoB;CA0EhC"}
1
+ {"version":3,"file":"file-browser.component.d.ts","sourceRoot":"","sources":["../../../src/lib/file-browser/file-browser.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E;;;;;;;;;;;;;GAaG;AACH,qBAMa,oBAAoB;IAC/B;;OAEG;IAC6B,UAAU,EAAG,mBAAmB,CAAC;IAEjE,0CAA0C;IAC1C,IAAI,UAAU,IAAI,mBAAmB,CAEpC;IACD,0CAA0C;IAC1C,IAAI,UAAU,CAAC,KAAK,EAAE,mBAAmB,EAExC;IAED;;;OAGG;IACI,kBAAkB,EAAE,OAAO,CAAS;IAE3C,kDAAkD;IAClD,IAAW,kBAAkB,IAAI,OAAO,CAEvC;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAE3C;IAED;;OAEG;IACI,eAAe,EAAE,0BAA0B,GAAG,IAAI,CAAQ;IAEjE,+CAA+C;IAC/C,IAAW,eAAe,IAAI,0BAA0B,GAAG,IAAI,CAE9D;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,EAElE;IAED;;OAEG;IACI,kBAAkB,EAAE,MAAM,CAAO;IAExC,kDAAkD;IAClD,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAE1C;;IAID;;;OAGG;IACI,aAAa,IAAI,IAAI;IAI5B,6CAA6C;IACtC,aAAa,IAAI,IAAI;IAI5B;;;;OAIG;IACI,iBAAiB,CAAC,mBAAmB,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI;IAKtF,iDAAiD;IAC1C,iBAAiB,CAAC,mBAAmB,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI;IAItF;;;;OAIG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjD,gDAAgD;IACzC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;OAKG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjD,gDAAgD;IACzC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIjD;;;OAGG;IACI,wBAAwB,IAAI,IAAI;IAQvC,wDAAwD;IACjD,wBAAwB,IAAI,IAAI;yCApI5B,oBAAoB;2CAApB,oBAAoB;CAuIhC"}