@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
@@ -50,7 +50,7 @@ export declare class StorageAdminDialogComponent implements OnInit {
50
50
  IsRoleSelected(roleId: string): boolean;
51
51
  OpenCreateCredentialDialog(): Promise<void>;
52
52
  SaveAccount(): Promise<void>;
53
- private SyncAccountPermissions;
53
+ private syncAccountPermissions;
54
54
  ConfirmDeleteAccount(account: MJFileStorageAccountEntity): void;
55
55
  CancelDeleteAccount(): void;
56
56
  ExecuteDeleteAccount(): Promise<void>;
@@ -710,7 +710,7 @@ export class StorageAdminDialogComponent {
710
710
  throw new Error(accountEntity.LatestResult?.Message || 'Failed to save storage account.');
711
711
  }
712
712
  // Sync Role Permissions
713
- await this.SyncAccountPermissions(accountEntity.ID, this.EditingAccountSelectedRoleIDs);
713
+ await this.syncAccountPermissions(accountEntity.ID, this.EditingAccountSelectedRoleIDs);
714
714
  // Force engine refresh
715
715
  await FileStorageEngineBase.Instance.Config(true);
716
716
  await this.LoadAllData();
@@ -729,7 +729,7 @@ export class StorageAdminDialogComponent {
729
729
  this.cdr.markForCheck();
730
730
  }
731
731
  }
732
- async SyncAccountPermissions(accountId, desiredRoleIds) {
732
+ async syncAccountPermissions(accountId, desiredRoleIds) {
733
733
  const md = this.ProviderToUse;
734
734
  const user = md.CurrentUser;
735
735
  const existingPerms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, accountId));
@@ -1 +1 @@
1
- {"version":3,"file":"storage-admin-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/admin/storage-admin-dialog.component.ts","../../../src/lib/admin/storage-admin-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n Metadata,\n RunView,\n type IMetadataProvider,\n} from '@memberjunction/core';\nimport {\n FileStorageEngineBase,\n MJFileStorageAccountEntity,\n MJFileStorageProviderEntity,\n MJFileStorageAccountPermissionEntity,\n MJCredentialEntity,\n MJRoleEntity,\n} from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialDialogService } from '@memberjunction/ng-credentials';\n\nexport type StorageAdminTab = 'accounts' | 'providers';\n\nexport interface StorageAccountRow {\n account: MJFileStorageAccountEntity;\n provider?: MJFileStorageProviderEntity;\n credentialName?: string;\n roleCount: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-storage-admin-dialog',\n templateUrl: './storage-admin-dialog.component.html',\n styleUrls: ['./storage-admin-dialog.component.css'],\n})\nexport class StorageAdminDialogComponent implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private viewContainerRef = inject(ViewContainerRef);\n private credentialDialog = inject(CredentialDialogService);\n\n @Input() Visible: boolean = false;\n @Input() ActiveTab: StorageAdminTab = 'accounts';\n @Input() Provider: IMetadataProvider | null = null;\n\n @Output() Close = new EventEmitter<void>();\n @Output() AccountsChanged = new EventEmitter<void>();\n\n public get ProviderToUse(): IMetadataProvider {\n return this.Provider ?? Metadata.Provider;\n }\n\n // ── State ───────────────────────────────────────────────────────────\n public IsLoading: boolean = false;\n public IsSaving: boolean = false;\n public SearchTerm: string = '';\n\n public Providers: MJFileStorageProviderEntity[] = [];\n public Accounts: MJFileStorageAccountEntity[] = [];\n public Credentials: MJCredentialEntity[] = [];\n public Roles: MJRoleEntity[] = [];\n public AccountPermissions: MJFileStorageAccountPermissionEntity[] = [];\n\n // ── Account Editor Sub-View / Modal ─────────────────────────────────\n public IsEditingAccount: boolean = false;\n public EditingAccount: MJFileStorageAccountEntity | null = null;\n public EditingAccountName: string = '';\n public EditingAccountDescription: string = '';\n public EditingAccountProviderID: string = '';\n public EditingAccountCredentialID: string = '';\n public EditingAccountIncludeInGlobalSearch: boolean = false;\n public EditingAccountSelectedRoleIDs: string[] = [];\n\n // ── Delete Confirmation ─────────────────────────────────────────────\n public AccountToDelete: MJFileStorageAccountEntity | null = null;\n public IsDeleting: boolean = false;\n\n async ngOnInit(): Promise<void> {\n if (this.Visible) {\n await this.LoadAllData();\n }\n }\n\n public async Open(tab: StorageAdminTab = 'accounts', accountToEdit?: MJFileStorageAccountEntity | null): Promise<void> {\n this.ActiveTab = tab;\n this.Visible = true;\n this.IsEditingAccount = false;\n this.AccountToDelete = null;\n await this.LoadAllData();\n\n if (accountToEdit) {\n this.StartEditAccount(accountToEdit);\n }\n this.cdr.markForCheck();\n }\n\n public async LoadAllData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n\n // Load providers and accounts via FileStorageEngineBase + RunView\n await FileStorageEngineBase.Instance.Config(true);\n this.Providers = [...FileStorageEngineBase.Instance.Providers].sort(\n (a, b) => (a.Priority ?? 0) - (b.Priority ?? 0) || a.Name.localeCompare(b.Name)\n );\n this.Accounts = [...FileStorageEngineBase.Instance.Accounts].sort((a, b) =>\n a.Name.localeCompare(b.Name)\n );\n\n // Load Credentials\n const credResult = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (credResult.Success) {\n this.Credentials = credResult.Results;\n }\n\n // Load Roles\n const roleResult = await rv.RunView<MJRoleEntity>({\n EntityName: 'MJ: Roles',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (roleResult.Success) {\n this.Roles = roleResult.Results;\n }\n\n // Load Account Permissions\n const permResult = await rv.RunView<MJFileStorageAccountPermissionEntity>({\n EntityName: 'MJ: File Storage Account Permissions',\n ResultType: 'entity_object',\n });\n if (permResult.Success) {\n this.AccountPermissions = permResult.Results;\n }\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error loading storage data:', err);\n this.notifications.CreateSimpleNotification('Failed to load storage configuration.', 'error');\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n // ── Computed Rows & Filters ─────────────────────────────────────────\n\n public get FilteredAccountRows(): StorageAccountRow[] {\n const term = (this.SearchTerm || '').toLowerCase().trim();\n\n return this.Accounts.filter((a) => {\n if (!term) return true;\n const prov = this.Providers.find((p) => UUIDsEqual(p.ID, a.ProviderID));\n const cred = this.Credentials.find((c) => UUIDsEqual(c.ID, a.CredentialID));\n const credName = cred?.Name || '';\n return (\n a.Name.toLowerCase().includes(term) ||\n (a.Description || '').toLowerCase().includes(term) ||\n (prov?.Name || '').toLowerCase().includes(term) ||\n credName.toLowerCase().includes(term)\n );\n }).map((account) => {\n const provider = this.Providers.find((p) => UUIDsEqual(p.ID, account.ProviderID));\n const credential = this.Credentials.find((c) => UUIDsEqual(c.ID, account.CredentialID));\n const credentialName = credential?.Name;\n const roleCount = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, account.ID)).length;\n return { account, provider, credentialName, roleCount };\n });\n }\n\n public get ActiveProviders(): MJFileStorageProviderEntity[] {\n return this.Providers.filter((p) => p.IsActive);\n }\n\n // ── Account Editing ─────────────────────────────────────────────────\n\n public StartCreateAccount(): void {\n this.EditingAccount = null;\n this.EditingAccountName = '';\n this.EditingAccountDescription = '';\n this.EditingAccountProviderID = this.ActiveProviders[0]?.ID || (this.Providers[0]?.ID ?? '');\n this.EditingAccountCredentialID = '';\n this.EditingAccountIncludeInGlobalSearch = false;\n this.EditingAccountSelectedRoleIDs = [];\n this.IsEditingAccount = true;\n this.cdr.markForCheck();\n }\n\n public StartEditAccount(account: MJFileStorageAccountEntity): void {\n this.EditingAccount = account;\n this.EditingAccountName = account.Name || '';\n this.EditingAccountDescription = account.Description || '';\n this.EditingAccountProviderID = account.ProviderID || '';\n this.EditingAccountCredentialID = account.CredentialID || '';\n this.EditingAccountIncludeInGlobalSearch = !!account.IncludeInGlobalSearch;\n\n const accountPerms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, account.ID));\n this.EditingAccountSelectedRoleIDs = accountPerms\n .map((p) => p.RoleID)\n .filter((roleId): roleId is string => roleId !== null && roleId !== undefined);\n\n this.IsEditingAccount = true;\n this.cdr.markForCheck();\n }\n\n public CancelEditAccount(): void {\n this.IsEditingAccount = false;\n this.EditingAccount = null;\n this.cdr.markForCheck();\n }\n\n public ToggleRoleSelection(roleId: string): void {\n const idx = this.EditingAccountSelectedRoleIDs.findIndex((id) => UUIDsEqual(id, roleId));\n if (idx >= 0) {\n this.EditingAccountSelectedRoleIDs.splice(idx, 1);\n } else {\n this.EditingAccountSelectedRoleIDs.push(roleId);\n }\n }\n\n public IsRoleSelected(roleId: string): boolean {\n return this.EditingAccountSelectedRoleIDs.some((id) => UUIDsEqual(id, roleId));\n }\n\n public async OpenCreateCredentialDialog(): Promise<void> {\n try {\n const result = await this.credentialDialog.openDialog(this.viewContainerRef, {\n title: 'Create Credential for Storage Account',\n });\n if (result.success && result.credential) {\n // Refresh credentials list\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n const credResult = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (credResult.Success) {\n this.Credentials = credResult.Results;\n }\n this.EditingAccountCredentialID = result.credential.ID;\n this.notifications.CreateSimpleNotification(`Credential \"${result.credential.Name}\" created.`, 'success');\n this.cdr.markForCheck();\n }\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error creating credential:', err);\n }\n }\n\n public async SaveAccount(): Promise<void> {\n const name = this.EditingAccountName.trim();\n if (!name) {\n this.notifications.CreateSimpleNotification('Account name is required.', 'warning');\n return;\n }\n if (!this.EditingAccountProviderID) {\n this.notifications.CreateSimpleNotification('Storage provider is required.', 'warning');\n return;\n }\n\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const user = md.CurrentUser;\n let accountEntity: MJFileStorageAccountEntity;\n\n if (this.EditingAccount) {\n accountEntity = this.EditingAccount;\n } else {\n accountEntity = await md.GetEntityObject<MJFileStorageAccountEntity>(\n 'MJ: File Storage Accounts',\n user\n );\n }\n\n accountEntity.Name = name;\n accountEntity.Description = this.EditingAccountDescription.trim() || null;\n accountEntity.ProviderID = this.EditingAccountProviderID;\n accountEntity.CredentialID = this.EditingAccountCredentialID || '';\n accountEntity.IncludeInGlobalSearch = this.EditingAccountIncludeInGlobalSearch;\n\n const saved = await accountEntity.Save();\n if (!saved) {\n throw new Error(accountEntity.LatestResult?.Message || 'Failed to save storage account.');\n }\n\n // Sync Role Permissions\n await this.SyncAccountPermissions(accountEntity.ID, this.EditingAccountSelectedRoleIDs);\n\n // Force engine refresh\n await FileStorageEngineBase.Instance.Config(true);\n await this.LoadAllData();\n\n this.IsEditingAccount = false;\n this.EditingAccount = null;\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(`Storage account \"${name}\" saved successfully.`, 'success');\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error saving account:', err);\n const msg = err instanceof Error ? err.message : 'Failed to save storage account.';\n this.notifications.CreateSimpleNotification(msg, 'error');\n } finally {\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n private async SyncAccountPermissions(accountId: string, desiredRoleIds: string[]): Promise<void> {\n const md = this.ProviderToUse;\n const user = md.CurrentUser;\n\n const existingPerms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, accountId));\n const existingRoleMap = new Map<string, MJFileStorageAccountPermissionEntity>();\n for (const p of existingPerms) {\n if (p.RoleID) {\n existingRoleMap.set(p.RoleID, p);\n }\n }\n\n // Delete permissions for unselected roles\n for (const p of existingPerms) {\n if (!p.RoleID || !desiredRoleIds.some((rId) => UUIDsEqual(rId, p.RoleID))) {\n await p.Delete();\n }\n }\n\n // Add permissions for newly selected roles\n for (const roleId of desiredRoleIds) {\n if (!existingRoleMap.has(roleId)) {\n const newPerm = await md.GetEntityObject<MJFileStorageAccountPermissionEntity>(\n 'MJ: File Storage Account Permissions',\n user\n );\n newPerm.FileStorageAccountID = accountId;\n newPerm.Type = 'Role';\n newPerm.RoleID = roleId;\n newPerm.CanRead = true;\n newPerm.CanWrite = true;\n await newPerm.Save();\n }\n }\n }\n\n // ── Account Deletion ────────────────────────────────────────────────\n\n public ConfirmDeleteAccount(account: MJFileStorageAccountEntity): void {\n this.AccountToDelete = account;\n this.cdr.markForCheck();\n }\n\n public CancelDeleteAccount(): void {\n this.AccountToDelete = null;\n this.cdr.markForCheck();\n }\n\n public async ExecuteDeleteAccount(): Promise<void> {\n if (!this.AccountToDelete) return;\n this.IsDeleting = true;\n this.cdr.markForCheck();\n\n try {\n const accountName = this.AccountToDelete.Name;\n const accountId = this.AccountToDelete.ID;\n\n // Delete associated permissions first\n const perms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, accountId));\n for (const p of perms) {\n await p.Delete();\n }\n\n const deleted = await this.AccountToDelete.Delete();\n if (!deleted) {\n throw new Error('Failed to delete storage account.');\n }\n\n await FileStorageEngineBase.Instance.Config(true);\n await this.LoadAllData();\n\n this.AccountToDelete = null;\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(`Storage account \"${accountName}\" removed.`, 'info');\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Delete error:', err);\n const msg = err instanceof Error ? err.message : 'Failed to delete storage account.';\n this.notifications.CreateSimpleNotification(msg, 'error');\n } finally {\n this.IsDeleting = false;\n this.cdr.markForCheck();\n }\n }\n\n // ── Provider Management ─────────────────────────────────────────────\n\n public async ToggleProviderActive(provider: MJFileStorageProviderEntity): Promise<void> {\n const newState = !provider.IsActive;\n provider.IsActive = newState;\n this.cdr.markForCheck();\n\n try {\n const saved = await provider.Save();\n if (!saved) {\n provider.IsActive = !newState; // rollback\n throw new Error(provider.LatestResult?.Message || 'Failed to update provider status.');\n }\n await FileStorageEngineBase.Instance.Config(true);\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(\n `Provider \"${provider.Name}\" is now ${newState ? 'active' : 'inactive'}.`,\n 'info'\n );\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Provider toggle error:', err);\n this.notifications.CreateSimpleNotification('Failed to update provider status.', 'error');\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n // ── UI Helpers ──────────────────────────────────────────────────────\n\n public GetProviderIcon(providerName: string): string {\n const name = (providerName || '').toLowerCase();\n if (name.includes('aws') || name.includes('s3')) return 'fa-brands fa-aws';\n if (name.includes('azure')) return 'fa-brands fa-microsoft';\n if (name.includes('google drive')) return 'fa-brands fa-google-drive';\n if (name.includes('google cloud')) return 'fa-brands fa-google';\n if (name.includes('dropbox')) return 'fa-brands fa-dropbox';\n if (name.includes('box')) return 'fa-solid fa-box';\n if (name.includes('sharepoint') || name.includes('onedrive')) return 'fa-brands fa-microsoft';\n return 'fa-solid fa-cloud';\n }\n\n public OnDialogClose(): void {\n this.Visible = false;\n this.IsEditingAccount = false;\n this.AccountToDelete = null;\n this.Close.emit();\n }\n}\n","<mj-dialog\n [Visible]=\"Visible\"\n Title=\"Manage File Storage\"\n [Width]=\"880\"\n [MinWidth]=\"600\"\n (Close)=\"OnDialogClose()\">\n\n <div class=\"mj-storage-admin-container\">\n <!-- Tab Navigation -->\n <div class=\"mj-storage-admin-tabs\">\n <button\n type=\"button\"\n class=\"mj-tab-btn\"\n [class.active]=\"ActiveTab === 'accounts'\"\n (click)=\"ActiveTab = 'accounts'\">\n <i class=\"fa-solid fa-server\"></i>\n <span>Storage Accounts</span>\n <span class=\"mj-tab-count\">{{ Accounts.length }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"mj-tab-btn\"\n [class.active]=\"ActiveTab === 'providers'\"\n (click)=\"ActiveTab = 'providers'\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Storage Providers</span>\n <span class=\"mj-tab-count\">{{ Providers.length }}</span>\n </button>\n </div>\n\n <!-- ── TAB 1: STORAGE ACCOUNTS ────────────────────────────────────── -->\n @if (ActiveTab === 'accounts') {\n <div class=\"mj-tab-pane\">\n <!-- Toolbar -->\n <div class=\"mj-admin-pane-toolbar\">\n <div class=\"mj-admin-search-wrapper\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <input\n type=\"text\"\n [(ngModel)]=\"SearchTerm\"\n placeholder=\"Search storage accounts by name, provider, or credential...\" />\n @if (SearchTerm) {\n <button type=\"button\" class=\"mj-clear-btn\" (click)=\"SearchTerm = ''\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary\"\n (click)=\"StartCreateAccount()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Storage Account</span>\n </button>\n </div>\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"mj-admin-loading\">\n <mj-loading text=\"Loading storage accounts...\"></mj-loading>\n </div>\n } @else if (FilteredAccountRows.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-folder-plus\"\n [Title]=\"SearchTerm ? 'No matching storage accounts' : 'No storage accounts configured'\"\n [Message]=\"SearchTerm ? 'Try adjusting your search query.' : 'Configure storage accounts to connect MemberJunction to cloud storage services like AWS S3, Azure Blob Storage, Box, Dropbox, or Google Drive.'\">\n @if (!SearchTerm) {\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary mj-empty-cta\"\n (click)=\"StartCreateAccount()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Configure First Account</span>\n </button>\n }\n </mj-empty-state>\n } @else {\n <!-- Accounts List -->\n <div class=\"mj-admin-table-container\">\n <table class=\"mj-admin-table\">\n <thead>\n <tr>\n <th>Account Name</th>\n <th>Provider</th>\n <th>Credential</th>\n <th>Global Search</th>\n <th>Role Access</th>\n <th class=\"mj-text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredAccountRows; track row.account.ID) {\n <tr>\n <td>\n <div class=\"mj-account-name-cell\">\n <span class=\"mj-account-title\">{{ row.account.Name }}</span>\n @if (row.account.Description) {\n <span class=\"mj-account-desc\">{{ row.account.Description }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"mj-provider-badge\">\n <i [class]=\"GetProviderIcon(row.provider?.Name || row.account.Provider)\"></i>\n <span>{{ row.provider?.Name || row.account.Provider }}</span>\n </span>\n </td>\n <td>\n @if (row.credentialName) {\n <span class=\"mj-status-badge mj-status-badge--success\" [title]=\"'Credential: ' + row.credentialName\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ row.credentialName }}</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--warning\" title=\"No credential configured\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>No Credential</span>\n </span>\n }\n </td>\n <td>\n @if (row.account.IncludeInGlobalSearch) {\n <span class=\"mj-status-badge mj-status-badge--info\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Enabled</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--muted\">\n <span>Disabled</span>\n </span>\n }\n </td>\n <td>\n <span class=\"mj-role-count-badge\">\n <i class=\"fa-solid fa-user-shield\"></i>\n <span>{{ row.roleCount === 0 ? 'All Users' : row.roleCount + ' Role(s)' }}</span>\n </span>\n </td>\n <td class=\"mj-text-right\">\n <div class=\"mj-action-button-group\">\n <button\n type=\"button\"\n class=\"mj-action-icon-btn\"\n title=\"Edit Account\"\n (click)=\"StartEditAccount(row.account)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n <button\n type=\"button\"\n class=\"mj-action-icon-btn mj-action-icon-btn--danger\"\n title=\"Delete Account\"\n (click)=\"ConfirmDeleteAccount(row.account)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- ── TAB 2: STORAGE PROVIDERS ────────────────────────────────────── -->\n @if (ActiveTab === 'providers') {\n <div class=\"mj-tab-pane\">\n <div class=\"mj-admin-pane-desc\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Enable or disable storage provider integrations for your organization. Only active providers are available when configuring accounts.</span>\n </div>\n\n <div class=\"mj-admin-table-container\">\n <table class=\"mj-admin-table\">\n <thead>\n <tr>\n <th>Status</th>\n <th>Provider Driver</th>\n <th>Server Driver Key</th>\n <th>Client Driver Key</th>\n <th>Search Support</th>\n <th class=\"mj-text-center\">Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (prov of Providers; track prov.ID) {\n <tr [class.mj-row-inactive]=\"!prov.IsActive\">\n <td>\n <label class=\"mj-toggle-switch\" [title]=\"prov.IsActive ? 'Deactivate provider' : 'Activate provider'\">\n <input\n type=\"checkbox\"\n [checked]=\"prov.IsActive\"\n (change)=\"ToggleProviderActive(prov)\" />\n <span class=\"mj-toggle-slider\"></span>\n </label>\n </td>\n <td>\n <div class=\"mj-provider-cell\">\n <div class=\"mj-provider-icon-circle\">\n <i [class]=\"GetProviderIcon(prov.Name)\"></i>\n </div>\n <div>\n <div class=\"mj-provider-name\">{{ prov.Name }}</div>\n @if (prov.Description) {\n <div class=\"mj-provider-desc\">{{ prov.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <code class=\"mj-code-pill\">{{ prov.ServerDriverKey || '—' }}</code>\n </td>\n <td>\n <code class=\"mj-code-pill\">{{ prov.ClientDriverKey || '—' }}</code>\n </td>\n <td>\n @if (prov.SupportsSearch) {\n <span class=\"mj-status-badge mj-status-badge--success\" title=\"Provider supports full-text file search\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>Native Search</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--muted\">\n <span>Standard</span>\n </span>\n }\n </td>\n <td class=\"mj-text-center\">\n <span class=\"mj-priority-pill\">{{ prov.Priority }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button type=\"button\" class=\"mj-admin-btn mj-admin-btn-secondary\" (click)=\"OnDialogClose()\">\n Close\n </button>\n </mj-dialog-actions>\n</mj-dialog>\n\n<!-- ── ACCOUNT CREATE / EDIT SUB-DIALOG ──────────────────────────────── -->\n@if (IsEditingAccount) {\n <mj-dialog\n [Visible]=\"IsEditingAccount\"\n [Title]=\"EditingAccount ? 'Edit Storage Account: ' + EditingAccount.Name : 'Add Storage Account'\"\n [Width]=\"640\"\n (Close)=\"CancelEditAccount()\">\n\n <div class=\"mj-account-editor-form\">\n <!-- Provider Selection -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Storage Provider <span class=\"mj-required\">*</span></label>\n <select\n class=\"mj-form-select\"\n [(ngModel)]=\"EditingAccountProviderID\"\n [disabled]=\"!!EditingAccount\">\n @for (prov of ActiveProviders; track prov.ID) {\n <option [value]=\"prov.ID\">{{ prov.Name }}</option>\n }\n </select>\n <div class=\"mj-form-hint\">Select the cloud storage engine driver for this account.</div>\n </div>\n\n <!-- Account Name -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Account Name <span class=\"mj-required\">*</span></label>\n <input\n type=\"text\"\n class=\"mj-form-input\"\n [(ngModel)]=\"EditingAccountName\"\n placeholder=\"e.g., Corporate Azure Blob Storage, Marketing S3 Bucket\" />\n </div>\n\n <!-- Account Description -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Description</label>\n <textarea\n class=\"mj-form-textarea\"\n rows=\"2\"\n [(ngModel)]=\"EditingAccountDescription\"\n placeholder=\"Optional notes or details about the intended purpose of this storage account...\"></textarea>\n </div>\n\n <!-- Credential Picker with Inline Create -->\n <div class=\"mj-form-group\">\n <div class=\"mj-form-label-row\">\n <label class=\"mj-form-label\">Storage Credentials</label>\n <button\n type=\"button\"\n class=\"mj-admin-btn-link\"\n (click)=\"OpenCreateCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n </div>\n <div class=\"mj-credential-input-row\">\n <select class=\"mj-form-select\" [(ngModel)]=\"EditingAccountCredentialID\">\n <option value=\"\">-- No Credential Assigned --</option>\n @for (cred of Credentials; track cred.ID) {\n <option [value]=\"cred.ID\">{{ cred.Name }}</option>\n }\n </select>\n </div>\n <div class=\"mj-form-hint\">\n Credentials manage authentication tokens, connection strings, or API keys securely via the Credential Engine.\n </div>\n </div>\n\n <!-- Global Search Toggle -->\n <div class=\"mj-form-checkbox-group\">\n <label class=\"mj-checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"EditingAccountIncludeInGlobalSearch\" />\n <span>Include in Global Search</span>\n </label>\n <div class=\"mj-form-hint mj-checkbox-hint\">\n When enabled, file contents and metadata in this account will be indexed for universal MemberJunction search.\n </div>\n </div>\n\n <!-- Role Permissions -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Role Access Permissions</label>\n <div class=\"mj-form-hint\">\n Select specific roles permitted to access this storage account. If no roles are selected, all authorized users have access.\n </div>\n <div class=\"mj-roles-checklist\">\n @for (role of Roles; track role.ID) {\n <label class=\"mj-role-check-item\">\n <input\n type=\"checkbox\"\n [checked]=\"IsRoleSelected(role.ID)\"\n (change)=\"ToggleRoleSelection(role.ID)\" />\n <span>{{ role.Name }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <mj-dialog-actions>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-secondary\"\n [disabled]=\"IsSaving\"\n (click)=\"CancelEditAccount()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary\"\n [disabled]=\"IsSaving || !EditingAccountName.trim() || !EditingAccountProviderID\"\n (click)=\"SaveAccount()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Saving...</span>\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n <span>{{ EditingAccount ? 'Save Changes' : 'Create Account' }}</span>\n }\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- ── DELETE CONFIRMATION DIALOG ────────────────────────────────────── -->\n@if (AccountToDelete) {\n <mj-dialog\n [Visible]=\"!!AccountToDelete\"\n Title=\"Delete Storage Account\"\n [Width]=\"460\"\n (Close)=\"CancelDeleteAccount()\">\n\n <div class=\"mj-delete-confirm-body\">\n <div class=\"mj-delete-confirm-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <div class=\"mj-delete-confirm-text\">\n <p class=\"mj-delete-confirm-title\">\n Are you sure you want to delete <strong>{{ AccountToDelete.Name }}</strong>?\n </p>\n <p class=\"mj-delete-confirm-subtitle\">\n This will remove the storage account connection and role permissions. Existing files in the remote storage service will not be deleted, but will no longer be accessible via this account in MemberJunction.\n </p>\n </div>\n </div>\n\n <mj-dialog-actions>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-secondary\"\n [disabled]=\"IsDeleting\"\n (click)=\"CancelDeleteAccount()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ExecuteDeleteAccount()\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Deleting...</span>\n } @else {\n <i class=\"fa-solid fa-trash-can\"></i>\n <span>Delete Account</span>\n }\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
1
+ {"version":3,"file":"storage-admin-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/admin/storage-admin-dialog.component.ts","../../../src/lib/admin/storage-admin-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewContainerRef,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n Metadata,\n RunView,\n type IMetadataProvider,\n} from '@memberjunction/core';\nimport {\n FileStorageEngineBase,\n MJFileStorageAccountEntity,\n MJFileStorageProviderEntity,\n MJFileStorageAccountPermissionEntity,\n MJCredentialEntity,\n MJRoleEntity,\n} from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialDialogService } from '@memberjunction/ng-credentials';\n\nexport type StorageAdminTab = 'accounts' | 'providers';\n\nexport interface StorageAccountRow {\n account: MJFileStorageAccountEntity;\n provider?: MJFileStorageProviderEntity;\n credentialName?: string;\n roleCount: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-storage-admin-dialog',\n templateUrl: './storage-admin-dialog.component.html',\n styleUrls: ['./storage-admin-dialog.component.css'],\n})\nexport class StorageAdminDialogComponent implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private viewContainerRef = inject(ViewContainerRef);\n private credentialDialog = inject(CredentialDialogService);\n\n @Input() Visible: boolean = false;\n @Input() ActiveTab: StorageAdminTab = 'accounts';\n @Input() Provider: IMetadataProvider | null = null;\n\n @Output() Close = new EventEmitter<void>();\n @Output() AccountsChanged = new EventEmitter<void>();\n\n public get ProviderToUse(): IMetadataProvider {\n return this.Provider ?? Metadata.Provider;\n }\n\n // ── State ───────────────────────────────────────────────────────────\n public IsLoading: boolean = false;\n public IsSaving: boolean = false;\n public SearchTerm: string = '';\n\n public Providers: MJFileStorageProviderEntity[] = [];\n public Accounts: MJFileStorageAccountEntity[] = [];\n public Credentials: MJCredentialEntity[] = [];\n public Roles: MJRoleEntity[] = [];\n public AccountPermissions: MJFileStorageAccountPermissionEntity[] = [];\n\n // ── Account Editor Sub-View / Modal ─────────────────────────────────\n public IsEditingAccount: boolean = false;\n public EditingAccount: MJFileStorageAccountEntity | null = null;\n public EditingAccountName: string = '';\n public EditingAccountDescription: string = '';\n public EditingAccountProviderID: string = '';\n public EditingAccountCredentialID: string = '';\n public EditingAccountIncludeInGlobalSearch: boolean = false;\n public EditingAccountSelectedRoleIDs: string[] = [];\n\n // ── Delete Confirmation ─────────────────────────────────────────────\n public AccountToDelete: MJFileStorageAccountEntity | null = null;\n public IsDeleting: boolean = false;\n\n async ngOnInit(): Promise<void> {\n if (this.Visible) {\n await this.LoadAllData();\n }\n }\n\n public async Open(tab: StorageAdminTab = 'accounts', accountToEdit?: MJFileStorageAccountEntity | null): Promise<void> {\n this.ActiveTab = tab;\n this.Visible = true;\n this.IsEditingAccount = false;\n this.AccountToDelete = null;\n await this.LoadAllData();\n\n if (accountToEdit) {\n this.StartEditAccount(accountToEdit);\n }\n this.cdr.markForCheck();\n }\n\n public async LoadAllData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n\n // Load providers and accounts via FileStorageEngineBase + RunView\n await FileStorageEngineBase.Instance.Config(true);\n this.Providers = [...FileStorageEngineBase.Instance.Providers].sort(\n (a, b) => (a.Priority ?? 0) - (b.Priority ?? 0) || a.Name.localeCompare(b.Name)\n );\n this.Accounts = [...FileStorageEngineBase.Instance.Accounts].sort((a, b) =>\n a.Name.localeCompare(b.Name)\n );\n\n // Load Credentials\n const credResult = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (credResult.Success) {\n this.Credentials = credResult.Results;\n }\n\n // Load Roles\n const roleResult = await rv.RunView<MJRoleEntity>({\n EntityName: 'MJ: Roles',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (roleResult.Success) {\n this.Roles = roleResult.Results;\n }\n\n // Load Account Permissions\n const permResult = await rv.RunView<MJFileStorageAccountPermissionEntity>({\n EntityName: 'MJ: File Storage Account Permissions',\n ResultType: 'entity_object',\n });\n if (permResult.Success) {\n this.AccountPermissions = permResult.Results;\n }\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error loading storage data:', err);\n this.notifications.CreateSimpleNotification('Failed to load storage configuration.', 'error');\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n // ── Computed Rows & Filters ─────────────────────────────────────────\n\n public get FilteredAccountRows(): StorageAccountRow[] {\n const term = (this.SearchTerm || '').toLowerCase().trim();\n\n return this.Accounts.filter((a) => {\n if (!term) return true;\n const prov = this.Providers.find((p) => UUIDsEqual(p.ID, a.ProviderID));\n const cred = this.Credentials.find((c) => UUIDsEqual(c.ID, a.CredentialID));\n const credName = cred?.Name || '';\n return (\n a.Name.toLowerCase().includes(term) ||\n (a.Description || '').toLowerCase().includes(term) ||\n (prov?.Name || '').toLowerCase().includes(term) ||\n credName.toLowerCase().includes(term)\n );\n }).map((account) => {\n const provider = this.Providers.find((p) => UUIDsEqual(p.ID, account.ProviderID));\n const credential = this.Credentials.find((c) => UUIDsEqual(c.ID, account.CredentialID));\n const credentialName = credential?.Name;\n const roleCount = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, account.ID)).length;\n return { account, provider, credentialName, roleCount };\n });\n }\n\n public get ActiveProviders(): MJFileStorageProviderEntity[] {\n return this.Providers.filter((p) => p.IsActive);\n }\n\n // ── Account Editing ─────────────────────────────────────────────────\n\n public StartCreateAccount(): void {\n this.EditingAccount = null;\n this.EditingAccountName = '';\n this.EditingAccountDescription = '';\n this.EditingAccountProviderID = this.ActiveProviders[0]?.ID || (this.Providers[0]?.ID ?? '');\n this.EditingAccountCredentialID = '';\n this.EditingAccountIncludeInGlobalSearch = false;\n this.EditingAccountSelectedRoleIDs = [];\n this.IsEditingAccount = true;\n this.cdr.markForCheck();\n }\n\n public StartEditAccount(account: MJFileStorageAccountEntity): void {\n this.EditingAccount = account;\n this.EditingAccountName = account.Name || '';\n this.EditingAccountDescription = account.Description || '';\n this.EditingAccountProviderID = account.ProviderID || '';\n this.EditingAccountCredentialID = account.CredentialID || '';\n this.EditingAccountIncludeInGlobalSearch = !!account.IncludeInGlobalSearch;\n\n const accountPerms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, account.ID));\n this.EditingAccountSelectedRoleIDs = accountPerms\n .map((p) => p.RoleID)\n .filter((roleId): roleId is string => roleId !== null && roleId !== undefined);\n\n this.IsEditingAccount = true;\n this.cdr.markForCheck();\n }\n\n public CancelEditAccount(): void {\n this.IsEditingAccount = false;\n this.EditingAccount = null;\n this.cdr.markForCheck();\n }\n\n public ToggleRoleSelection(roleId: string): void {\n const idx = this.EditingAccountSelectedRoleIDs.findIndex((id) => UUIDsEqual(id, roleId));\n if (idx >= 0) {\n this.EditingAccountSelectedRoleIDs.splice(idx, 1);\n } else {\n this.EditingAccountSelectedRoleIDs.push(roleId);\n }\n }\n\n public IsRoleSelected(roleId: string): boolean {\n return this.EditingAccountSelectedRoleIDs.some((id) => UUIDsEqual(id, roleId));\n }\n\n public async OpenCreateCredentialDialog(): Promise<void> {\n try {\n const result = await this.credentialDialog.openDialog(this.viewContainerRef, {\n title: 'Create Credential for Storage Account',\n });\n if (result.success && result.credential) {\n // Refresh credentials list\n const md = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(md);\n const credResult = await rv.RunView<MJCredentialEntity>({\n EntityName: 'MJ: Credentials',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n });\n if (credResult.Success) {\n this.Credentials = credResult.Results;\n }\n this.EditingAccountCredentialID = result.credential.ID;\n this.notifications.CreateSimpleNotification(`Credential \"${result.credential.Name}\" created.`, 'success');\n this.cdr.markForCheck();\n }\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error creating credential:', err);\n }\n }\n\n public async SaveAccount(): Promise<void> {\n const name = this.EditingAccountName.trim();\n if (!name) {\n this.notifications.CreateSimpleNotification('Account name is required.', 'warning');\n return;\n }\n if (!this.EditingAccountProviderID) {\n this.notifications.CreateSimpleNotification('Storage provider is required.', 'warning');\n return;\n }\n\n this.IsSaving = true;\n this.cdr.markForCheck();\n\n try {\n const md = this.ProviderToUse;\n const user = md.CurrentUser;\n let accountEntity: MJFileStorageAccountEntity;\n\n if (this.EditingAccount) {\n accountEntity = this.EditingAccount;\n } else {\n accountEntity = await md.GetEntityObject<MJFileStorageAccountEntity>(\n 'MJ: File Storage Accounts',\n user\n );\n }\n\n accountEntity.Name = name;\n accountEntity.Description = this.EditingAccountDescription.trim() || null;\n accountEntity.ProviderID = this.EditingAccountProviderID;\n accountEntity.CredentialID = this.EditingAccountCredentialID || '';\n accountEntity.IncludeInGlobalSearch = this.EditingAccountIncludeInGlobalSearch;\n\n const saved = await accountEntity.Save();\n if (!saved) {\n throw new Error(accountEntity.LatestResult?.Message || 'Failed to save storage account.');\n }\n\n // Sync Role Permissions\n await this.syncAccountPermissions(accountEntity.ID, this.EditingAccountSelectedRoleIDs);\n\n // Force engine refresh\n await FileStorageEngineBase.Instance.Config(true);\n await this.LoadAllData();\n\n this.IsEditingAccount = false;\n this.EditingAccount = null;\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(`Storage account \"${name}\" saved successfully.`, 'success');\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Error saving account:', err);\n const msg = err instanceof Error ? err.message : 'Failed to save storage account.';\n this.notifications.CreateSimpleNotification(msg, 'error');\n } finally {\n this.IsSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n private async syncAccountPermissions(accountId: string, desiredRoleIds: string[]): Promise<void> {\n const md = this.ProviderToUse;\n const user = md.CurrentUser;\n\n const existingPerms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, accountId));\n const existingRoleMap = new Map<string, MJFileStorageAccountPermissionEntity>();\n for (const p of existingPerms) {\n if (p.RoleID) {\n existingRoleMap.set(p.RoleID, p);\n }\n }\n\n // Delete permissions for unselected roles\n for (const p of existingPerms) {\n if (!p.RoleID || !desiredRoleIds.some((rId) => UUIDsEqual(rId, p.RoleID))) {\n await p.Delete();\n }\n }\n\n // Add permissions for newly selected roles\n for (const roleId of desiredRoleIds) {\n if (!existingRoleMap.has(roleId)) {\n const newPerm = await md.GetEntityObject<MJFileStorageAccountPermissionEntity>(\n 'MJ: File Storage Account Permissions',\n user\n );\n newPerm.FileStorageAccountID = accountId;\n newPerm.Type = 'Role';\n newPerm.RoleID = roleId;\n newPerm.CanRead = true;\n newPerm.CanWrite = true;\n await newPerm.Save();\n }\n }\n }\n\n // ── Account Deletion ────────────────────────────────────────────────\n\n public ConfirmDeleteAccount(account: MJFileStorageAccountEntity): void {\n this.AccountToDelete = account;\n this.cdr.markForCheck();\n }\n\n public CancelDeleteAccount(): void {\n this.AccountToDelete = null;\n this.cdr.markForCheck();\n }\n\n public async ExecuteDeleteAccount(): Promise<void> {\n if (!this.AccountToDelete) return;\n this.IsDeleting = true;\n this.cdr.markForCheck();\n\n try {\n const accountName = this.AccountToDelete.Name;\n const accountId = this.AccountToDelete.ID;\n\n // Delete associated permissions first\n const perms = this.AccountPermissions.filter((p) => UUIDsEqual(p.FileStorageAccountID, accountId));\n for (const p of perms) {\n await p.Delete();\n }\n\n const deleted = await this.AccountToDelete.Delete();\n if (!deleted) {\n throw new Error('Failed to delete storage account.');\n }\n\n await FileStorageEngineBase.Instance.Config(true);\n await this.LoadAllData();\n\n this.AccountToDelete = null;\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(`Storage account \"${accountName}\" removed.`, 'info');\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Delete error:', err);\n const msg = err instanceof Error ? err.message : 'Failed to delete storage account.';\n this.notifications.CreateSimpleNotification(msg, 'error');\n } finally {\n this.IsDeleting = false;\n this.cdr.markForCheck();\n }\n }\n\n // ── Provider Management ─────────────────────────────────────────────\n\n public async ToggleProviderActive(provider: MJFileStorageProviderEntity): Promise<void> {\n const newState = !provider.IsActive;\n provider.IsActive = newState;\n this.cdr.markForCheck();\n\n try {\n const saved = await provider.Save();\n if (!saved) {\n provider.IsActive = !newState; // rollback\n throw new Error(provider.LatestResult?.Message || 'Failed to update provider status.');\n }\n await FileStorageEngineBase.Instance.Config(true);\n this.AccountsChanged.emit();\n this.notifications.CreateSimpleNotification(\n `Provider \"${provider.Name}\" is now ${newState ? 'active' : 'inactive'}.`,\n 'info'\n );\n } catch (err) {\n console.error('[StorageAdminDialogComponent] Provider toggle error:', err);\n this.notifications.CreateSimpleNotification('Failed to update provider status.', 'error');\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n // ── UI Helpers ──────────────────────────────────────────────────────\n\n public GetProviderIcon(providerName: string): string {\n const name = (providerName || '').toLowerCase();\n if (name.includes('aws') || name.includes('s3')) return 'fa-brands fa-aws';\n if (name.includes('azure')) return 'fa-brands fa-microsoft';\n if (name.includes('google drive')) return 'fa-brands fa-google-drive';\n if (name.includes('google cloud')) return 'fa-brands fa-google';\n if (name.includes('dropbox')) return 'fa-brands fa-dropbox';\n if (name.includes('box')) return 'fa-solid fa-box';\n if (name.includes('sharepoint') || name.includes('onedrive')) return 'fa-brands fa-microsoft';\n return 'fa-solid fa-cloud';\n }\n\n public OnDialogClose(): void {\n this.Visible = false;\n this.IsEditingAccount = false;\n this.AccountToDelete = null;\n this.Close.emit();\n }\n}\n","<mj-dialog\n [Visible]=\"Visible\"\n Title=\"Manage File Storage\"\n [Width]=\"880\"\n [MinWidth]=\"600\"\n (Close)=\"OnDialogClose()\">\n\n <div class=\"mj-storage-admin-container\">\n <!-- Tab Navigation -->\n <div class=\"mj-storage-admin-tabs\">\n <button\n type=\"button\"\n class=\"mj-tab-btn\"\n [class.active]=\"ActiveTab === 'accounts'\"\n (click)=\"ActiveTab = 'accounts'\">\n <i class=\"fa-solid fa-server\"></i>\n <span>Storage Accounts</span>\n <span class=\"mj-tab-count\">{{ Accounts.length }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"mj-tab-btn\"\n [class.active]=\"ActiveTab === 'providers'\"\n (click)=\"ActiveTab = 'providers'\">\n <i class=\"fa-solid fa-cubes\"></i>\n <span>Storage Providers</span>\n <span class=\"mj-tab-count\">{{ Providers.length }}</span>\n </button>\n </div>\n\n <!-- ── TAB 1: STORAGE ACCOUNTS ────────────────────────────────────── -->\n @if (ActiveTab === 'accounts') {\n <div class=\"mj-tab-pane\">\n <!-- Toolbar -->\n <div class=\"mj-admin-pane-toolbar\">\n <div class=\"mj-admin-search-wrapper\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <input\n type=\"text\"\n [(ngModel)]=\"SearchTerm\"\n placeholder=\"Search storage accounts by name, provider, or credential...\" />\n @if (SearchTerm) {\n <button type=\"button\" class=\"mj-clear-btn\" (click)=\"SearchTerm = ''\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary\"\n (click)=\"StartCreateAccount()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Add Storage Account</span>\n </button>\n </div>\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"mj-admin-loading\">\n <mj-loading text=\"Loading storage accounts...\"></mj-loading>\n </div>\n } @else if (FilteredAccountRows.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-folder-plus\"\n [Title]=\"SearchTerm ? 'No matching storage accounts' : 'No storage accounts configured'\"\n [Message]=\"SearchTerm ? 'Try adjusting your search query.' : 'Configure storage accounts to connect MemberJunction to cloud storage services like AWS S3, Azure Blob Storage, Box, Dropbox, or Google Drive.'\">\n @if (!SearchTerm) {\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary mj-empty-cta\"\n (click)=\"StartCreateAccount()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Configure First Account</span>\n </button>\n }\n </mj-empty-state>\n } @else {\n <!-- Accounts List -->\n <div class=\"mj-admin-table-container\">\n <table class=\"mj-admin-table\">\n <thead>\n <tr>\n <th>Account Name</th>\n <th>Provider</th>\n <th>Credential</th>\n <th>Global Search</th>\n <th>Role Access</th>\n <th class=\"mj-text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredAccountRows; track row.account.ID) {\n <tr>\n <td>\n <div class=\"mj-account-name-cell\">\n <span class=\"mj-account-title\">{{ row.account.Name }}</span>\n @if (row.account.Description) {\n <span class=\"mj-account-desc\">{{ row.account.Description }}</span>\n }\n </div>\n </td>\n <td>\n <span class=\"mj-provider-badge\">\n <i [class]=\"GetProviderIcon(row.provider?.Name || row.account.Provider)\"></i>\n <span>{{ row.provider?.Name || row.account.Provider }}</span>\n </span>\n </td>\n <td>\n @if (row.credentialName) {\n <span class=\"mj-status-badge mj-status-badge--success\" [title]=\"'Credential: ' + row.credentialName\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ row.credentialName }}</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--warning\" title=\"No credential configured\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>No Credential</span>\n </span>\n }\n </td>\n <td>\n @if (row.account.IncludeInGlobalSearch) {\n <span class=\"mj-status-badge mj-status-badge--info\">\n <i class=\"fa-solid fa-check\"></i>\n <span>Enabled</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--muted\">\n <span>Disabled</span>\n </span>\n }\n </td>\n <td>\n <span class=\"mj-role-count-badge\">\n <i class=\"fa-solid fa-user-shield\"></i>\n <span>{{ row.roleCount === 0 ? 'All Users' : row.roleCount + ' Role(s)' }}</span>\n </span>\n </td>\n <td class=\"mj-text-right\">\n <div class=\"mj-action-button-group\">\n <button\n type=\"button\"\n class=\"mj-action-icon-btn\"\n title=\"Edit Account\"\n (click)=\"StartEditAccount(row.account)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n <button\n type=\"button\"\n class=\"mj-action-icon-btn mj-action-icon-btn--danger\"\n title=\"Delete Account\"\n (click)=\"ConfirmDeleteAccount(row.account)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- ── TAB 2: STORAGE PROVIDERS ────────────────────────────────────── -->\n @if (ActiveTab === 'providers') {\n <div class=\"mj-tab-pane\">\n <div class=\"mj-admin-pane-desc\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Enable or disable storage provider integrations for your organization. Only active providers are available when configuring accounts.</span>\n </div>\n\n <div class=\"mj-admin-table-container\">\n <table class=\"mj-admin-table\">\n <thead>\n <tr>\n <th>Status</th>\n <th>Provider Driver</th>\n <th>Server Driver Key</th>\n <th>Client Driver Key</th>\n <th>Search Support</th>\n <th class=\"mj-text-center\">Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (prov of Providers; track prov.ID) {\n <tr [class.mj-row-inactive]=\"!prov.IsActive\">\n <td>\n <label class=\"mj-toggle-switch\" [title]=\"prov.IsActive ? 'Deactivate provider' : 'Activate provider'\">\n <input\n type=\"checkbox\"\n [checked]=\"prov.IsActive\"\n (change)=\"ToggleProviderActive(prov)\" />\n <span class=\"mj-toggle-slider\"></span>\n </label>\n </td>\n <td>\n <div class=\"mj-provider-cell\">\n <div class=\"mj-provider-icon-circle\">\n <i [class]=\"GetProviderIcon(prov.Name)\"></i>\n </div>\n <div>\n <div class=\"mj-provider-name\">{{ prov.Name }}</div>\n @if (prov.Description) {\n <div class=\"mj-provider-desc\">{{ prov.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <code class=\"mj-code-pill\">{{ prov.ServerDriverKey || '—' }}</code>\n </td>\n <td>\n <code class=\"mj-code-pill\">{{ prov.ClientDriverKey || '—' }}</code>\n </td>\n <td>\n @if (prov.SupportsSearch) {\n <span class=\"mj-status-badge mj-status-badge--success\" title=\"Provider supports full-text file search\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>Native Search</span>\n </span>\n } @else {\n <span class=\"mj-status-badge mj-status-badge--muted\">\n <span>Standard</span>\n </span>\n }\n </td>\n <td class=\"mj-text-center\">\n <span class=\"mj-priority-pill\">{{ prov.Priority }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button type=\"button\" class=\"mj-admin-btn mj-admin-btn-secondary\" (click)=\"OnDialogClose()\">\n Close\n </button>\n </mj-dialog-actions>\n</mj-dialog>\n\n<!-- ── ACCOUNT CREATE / EDIT SUB-DIALOG ──────────────────────────────── -->\n@if (IsEditingAccount) {\n <mj-dialog\n [Visible]=\"IsEditingAccount\"\n [Title]=\"EditingAccount ? 'Edit Storage Account: ' + EditingAccount.Name : 'Add Storage Account'\"\n [Width]=\"640\"\n (Close)=\"CancelEditAccount()\">\n\n <div class=\"mj-account-editor-form\">\n <!-- Provider Selection -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Storage Provider <span class=\"mj-required\">*</span></label>\n <select\n class=\"mj-form-select\"\n [(ngModel)]=\"EditingAccountProviderID\"\n [disabled]=\"!!EditingAccount\">\n @for (prov of ActiveProviders; track prov.ID) {\n <option [value]=\"prov.ID\">{{ prov.Name }}</option>\n }\n </select>\n <div class=\"mj-form-hint\">Select the cloud storage engine driver for this account.</div>\n </div>\n\n <!-- Account Name -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Account Name <span class=\"mj-required\">*</span></label>\n <input\n type=\"text\"\n class=\"mj-form-input\"\n [(ngModel)]=\"EditingAccountName\"\n placeholder=\"e.g., Corporate Azure Blob Storage, Marketing S3 Bucket\" />\n </div>\n\n <!-- Account Description -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Description</label>\n <textarea\n class=\"mj-form-textarea\"\n rows=\"2\"\n [(ngModel)]=\"EditingAccountDescription\"\n placeholder=\"Optional notes or details about the intended purpose of this storage account...\"></textarea>\n </div>\n\n <!-- Credential Picker with Inline Create -->\n <div class=\"mj-form-group\">\n <div class=\"mj-form-label-row\">\n <label class=\"mj-form-label\">Storage Credentials</label>\n <button\n type=\"button\"\n class=\"mj-admin-btn-link\"\n (click)=\"OpenCreateCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n </div>\n <div class=\"mj-credential-input-row\">\n <select class=\"mj-form-select\" [(ngModel)]=\"EditingAccountCredentialID\">\n <option value=\"\">-- No Credential Assigned --</option>\n @for (cred of Credentials; track cred.ID) {\n <option [value]=\"cred.ID\">{{ cred.Name }}</option>\n }\n </select>\n </div>\n <div class=\"mj-form-hint\">\n Credentials manage authentication tokens, connection strings, or API keys securely via the Credential Engine.\n </div>\n </div>\n\n <!-- Global Search Toggle -->\n <div class=\"mj-form-checkbox-group\">\n <label class=\"mj-checkbox-label\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"EditingAccountIncludeInGlobalSearch\" />\n <span>Include in Global Search</span>\n </label>\n <div class=\"mj-form-hint mj-checkbox-hint\">\n When enabled, file contents and metadata in this account will be indexed for universal MemberJunction search.\n </div>\n </div>\n\n <!-- Role Permissions -->\n <div class=\"mj-form-group\">\n <label class=\"mj-form-label\">Role Access Permissions</label>\n <div class=\"mj-form-hint\">\n Select specific roles permitted to access this storage account. If no roles are selected, all authorized users have access.\n </div>\n <div class=\"mj-roles-checklist\">\n @for (role of Roles; track role.ID) {\n <label class=\"mj-role-check-item\">\n <input\n type=\"checkbox\"\n [checked]=\"IsRoleSelected(role.ID)\"\n (change)=\"ToggleRoleSelection(role.ID)\" />\n <span>{{ role.Name }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <mj-dialog-actions>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-secondary\"\n [disabled]=\"IsSaving\"\n (click)=\"CancelEditAccount()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-primary\"\n [disabled]=\"IsSaving || !EditingAccountName.trim() || !EditingAccountProviderID\"\n (click)=\"SaveAccount()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Saving...</span>\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n <span>{{ EditingAccount ? 'Save Changes' : 'Create Account' }}</span>\n }\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- ── DELETE CONFIRMATION DIALOG ────────────────────────────────────── -->\n@if (AccountToDelete) {\n <mj-dialog\n [Visible]=\"!!AccountToDelete\"\n Title=\"Delete Storage Account\"\n [Width]=\"460\"\n (Close)=\"CancelDeleteAccount()\">\n\n <div class=\"mj-delete-confirm-body\">\n <div class=\"mj-delete-confirm-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <div class=\"mj-delete-confirm-text\">\n <p class=\"mj-delete-confirm-title\">\n Are you sure you want to delete <strong>{{ AccountToDelete.Name }}</strong>?\n </p>\n <p class=\"mj-delete-confirm-subtitle\">\n This will remove the storage account connection and role permissions. Existing files in the remote storage service will not be deleted, but will no longer be accessible via this account in MemberJunction.\n </p>\n </div>\n </div>\n\n <mj-dialog-actions>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-secondary\"\n [disabled]=\"IsDeleting\"\n (click)=\"CancelDeleteAccount()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"mj-admin-btn mj-admin-btn-danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ExecuteDeleteAccount()\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Deleting...</span>\n } @else {\n <i class=\"fa-solid fa-trash-can\"></i>\n <span>Delete Account</span>\n }\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n"]}
@@ -5,53 +5,127 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class CategoryTreeComponent extends BaseAngularComponent implements OnInit {
7
7
  private notifications;
8
+ CategorySelected: EventEmitter<string | undefined>;
9
+ /**
10
+ * @deprecated Use {@link CategorySelected}.
11
+ *
12
+ * The same emitter under the old binding name, so a template still binding
13
+ * (categorySelected) keeps working. Must stay AFTER CategorySelected: class fields
14
+ * initialise in order, and the other way round this captures undefined.
15
+ */
8
16
  categorySelected: EventEmitter<string | undefined>;
9
17
  isLoading: boolean;
10
- showNew: boolean;
11
- newCategoryName: string;
12
- renameFileCategory: MJFileCategoryEntity | undefined;
13
- categoriesData: MJFileCategoryEntity[];
18
+ ShowNew: boolean;
19
+ /** @deprecated Use {@link ShowNew}. */
20
+ get showNew(): boolean;
21
+ /** @deprecated Use {@link ShowNew}. */
22
+ set showNew(value: boolean);
23
+ NewCategoryName: string;
24
+ /** @deprecated Use {@link NewCategoryName}. */
25
+ get newCategoryName(): string;
26
+ /** @deprecated Use {@link NewCategoryName}. */
27
+ set newCategoryName(value: string);
28
+ RenameFileCategory: MJFileCategoryEntity | undefined;
29
+ /** @deprecated Use {@link RenameFileCategory}. */
30
+ get renameFileCategory(): MJFileCategoryEntity | undefined;
31
+ /** @deprecated Use {@link RenameFileCategory}. */
32
+ set renameFileCategory(value: MJFileCategoryEntity | undefined);
33
+ CategoriesData: MJFileCategoryEntity[];
34
+ /** @deprecated Use {@link CategoriesData}. */
35
+ get categoriesData(): MJFileCategoryEntity[];
36
+ /** @deprecated Use {@link CategoriesData}. */
37
+ set categoriesData(value: MJFileCategoryEntity[]);
14
38
  /** Expanded node IDs for the tree */
15
- expandedIds: Set<string>;
39
+ ExpandedIds: Set<string>;
40
+ /** @deprecated Use {@link ExpandedIds}. */
41
+ get expandedIds(): Set<string>;
42
+ /** @deprecated Use {@link ExpandedIds}. */
43
+ set expandedIds(value: Set<string>);
16
44
  /** Currently selected node ID */
17
45
  private selectedId;
18
46
  /** Context menu state */
19
- contextMenuVisible: boolean;
20
- contextMenuX: number;
21
- contextMenuY: number;
47
+ ContextMenuVisible: boolean;
48
+ /** @deprecated Use {@link ContextMenuVisible}. */
49
+ get contextMenuVisible(): boolean;
50
+ /** @deprecated Use {@link ContextMenuVisible}. */
51
+ set contextMenuVisible(value: boolean);
52
+ ContextMenuX: number;
53
+ /** @deprecated Use {@link ContextMenuX}. */
54
+ get contextMenuX(): number;
55
+ /** @deprecated Use {@link ContextMenuX}. */
56
+ set contextMenuX(value: number);
57
+ ContextMenuY: number;
58
+ /** @deprecated Use {@link ContextMenuY}. */
59
+ get contextMenuY(): number;
60
+ /** @deprecated Use {@link ContextMenuY}. */
61
+ set contextMenuY(value: number);
22
62
  private contextMenuNode;
23
63
  private get md();
24
64
  constructor(notifications: MJNotificationService);
25
65
  ngOnInit(): void;
26
66
  /** Returns root-level nodes (no parent). */
67
+ get RootNodes(): MJFileCategoryEntity[];
68
+ /** @deprecated Use {@link RootNodes}. */
27
69
  get rootNodes(): MJFileCategoryEntity[];
28
70
  /** Checks if a node has children. */
71
+ HasChildren(node: MJFileCategoryEntity): boolean;
72
+ /** @deprecated Use {@link HasChildren}. */
29
73
  hasChildren(node: MJFileCategoryEntity): boolean;
30
74
  /** Returns children of a node. */
75
+ GetChildren(node: MJFileCategoryEntity): MJFileCategoryEntity[];
76
+ /** @deprecated Use {@link GetChildren}. */
31
77
  getChildren(node: MJFileCategoryEntity): MJFileCategoryEntity[];
32
78
  /** Checks if a node is expanded. */
79
+ IsExpanded(node: MJFileCategoryEntity): boolean;
80
+ /** @deprecated Use {@link IsExpanded}. */
33
81
  isExpanded(node: MJFileCategoryEntity): boolean;
34
82
  /** Toggles expand/collapse on a node. */
83
+ ToggleExpand(node: MJFileCategoryEntity, event: Event): void;
84
+ /** @deprecated Use {@link ToggleExpand}. */
35
85
  toggleExpand(node: MJFileCategoryEntity, event: Event): void;
36
86
  /** Checks if a node is the currently selected node. */
87
+ IsSelected(node: MJFileCategoryEntity): boolean;
88
+ /** @deprecated Use {@link IsSelected}. */
37
89
  isSelected(node: MJFileCategoryEntity): boolean;
38
90
  /** Selects a node and emits event. */
91
+ SelectNode(node: MJFileCategoryEntity): void;
92
+ /** @deprecated Use {@link SelectNode}. */
39
93
  selectNode(node: MJFileCategoryEntity): void;
40
94
  /** Opens context menu on right-click. */
95
+ OnContextMenu(event: MouseEvent, node: MJFileCategoryEntity): void;
96
+ /** @deprecated Use {@link OnContextMenu}. */
41
97
  onContextMenu(event: MouseEvent, node: MJFileCategoryEntity): void;
42
98
  /** Closes the context menu. */
99
+ CloseContextMenu(): void;
100
+ /** @deprecated Use {@link CloseContextMenu}. */
43
101
  closeContextMenu(): void;
44
102
  /** Handles context menu action selection. */
103
+ OnContextMenuAction(action: string): void;
104
+ /** @deprecated Use {@link OnContextMenuAction}. */
45
105
  onContextMenuAction(action: string): void;
106
+ CreateNewCategory(): Promise<void>;
107
+ /** @deprecated Use {@link CreateNewCategory}. */
46
108
  createNewCategory(): Promise<void>;
109
+ CancelNewCategory(): void;
110
+ /** @deprecated Use {@link CancelNewCategory}. */
47
111
  cancelNewCategory(): void;
112
+ SaveNewCategory(): Promise<void>;
113
+ /** @deprecated Use {@link SaveNewCategory}. */
48
114
  saveNewCategory(): Promise<void>;
115
+ DeleteCategory(fileCategory: MJFileCategoryEntity): Promise<void>;
116
+ /** @deprecated Use {@link DeleteCategory}. */
49
117
  deleteCategory(fileCategory: MJFileCategoryEntity): Promise<void>;
118
+ ClearSelection(): void;
119
+ /** @deprecated Use {@link ClearSelection}. */
50
120
  clearSelection(): void;
121
+ CancelRename(): void;
122
+ /** @deprecated Use {@link CancelRename}. */
51
123
  cancelRename(): void;
124
+ SaveRename(): Promise<void>;
125
+ /** @deprecated Use {@link SaveRename}. */
52
126
  saveRename(): Promise<void>;
53
127
  Refresh(): Promise<void>;
54
128
  static ɵfac: i0.ɵɵFactoryDeclaration<CategoryTreeComponent, never>;
55
- static ɵcmp: i0.ɵɵComponentDeclaration<CategoryTreeComponent, "mj-files-category-tree", never, {}, { "categorySelected": "categorySelected"; }, never, never, false, never>;
129
+ static ɵcmp: i0.ɵɵComponentDeclaration<CategoryTreeComponent, "mj-files-category-tree", never, {}, { "CategorySelected": "CategorySelected"; "categorySelected": "categorySelected"; }, never, never, false, never>;
56
130
  }
57
131
  //# sourceMappingURL=category-tree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"category-tree.d.ts","sourceRoot":"","sources":["../../../src/lib/category-tree/category-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,qBAMa,qBAAsB,SAAQ,oBAAqB,YAAW,MAAM;IAwBnE,OAAO,CAAC,aAAa;IAvBvB,gBAAgB,mCAA0C;IAE7D,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,OAAO,CAAS;IACzB,eAAe,SAAM;IACrB,kBAAkB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAErD,cAAc,EAAE,oBAAoB,EAAE,CAAM;IAEnD,qCAAqC;IAC9B,WAAW,cAAqB;IAEvC,iCAAiC;IACjC,OAAO,CAAC,UAAU,CAAqB;IAEvC,yBAAyB;IAClB,kBAAkB,UAAS;IAC3B,YAAY,SAAK;IACjB,YAAY,SAAK;IACxB,OAAO,CAAC,eAAe,CAAmC;IAE1D,OAAO,KAAK,EAAE,GAAiC;gBAE3B,aAAa,EAAE,qBAAqB;IAExD,QAAQ,IAAI,IAAI;IAIhB,4CAA4C;IAC5C,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAEtC;IAED,qCAAqC;IACrC,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAIhD,kCAAkC;IAClC,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,EAAE;IAI/D,oCAAoC;IACpC,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,yCAAyC;IACzC,YAAY,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAS5D,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,sCAAsC;IACtC,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAK5C,yCAAyC;IACzC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IASlE,+BAA+B;IAC/B,gBAAgB,IAAI,IAAI;IAKxB,6CAA6C;IAC7C,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBnC,iBAAiB;IAIvB,iBAAiB;IAIX,eAAe;IAYf,cAAc,CAAC,YAAY,EAAE,oBAAoB;IAgBvD,cAAc;IAKd,YAAY;IAKN,UAAU;IAOV,OAAO;yCA9JF,qBAAqB;2CAArB,qBAAqB;CA8KjC"}
1
+ {"version":3,"file":"category-tree.d.ts","sourceRoot":"","sources":["../../../src/lib/category-tree/category-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE,qBAMa,qBAAsB,SAAQ,oBAAqB,YAAW,MAAM;IAyGnE,OAAO,CAAC,aAAa;IAxGvB,gBAAgB,mCAA0C;IAEpE;;;;;;OAMG;IACO,gBAAgB,mCAAyB;IAE5C,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,OAAO,CAAS;IAEhC,uCAAuC;IACvC,IAAW,OAAO,IAAI,OAAO,CAE5B;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK,EAAE,OAAO,EAEhC;IACM,eAAe,SAAM;IAE5B,+CAA+C;IAC/C,IAAW,eAAe,WAEzB;IACD,+CAA+C;IAC/C,IAAW,eAAe,CAAC,KAAK,QAAA,EAE/B;IACM,kBAAkB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAE5D,kDAAkD;IAClD,IAAW,kBAAkB,IAAI,oBAAoB,GAAG,SAAS,CAEhE;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,EAEpE;IAEM,cAAc,EAAE,oBAAoB,EAAE,CAAM;IAEnD,8CAA8C;IAC9C,IAAW,cAAc,IAAI,oBAAoB,EAAE,CAElD;IACD,8CAA8C;IAC9C,IAAW,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,EAEtD;IAED,qCAAqC;IAC9B,WAAW,cAAqB;IAEvC,2CAA2C;IAC3C,IAAW,WAAW,gBAErB;IACD,2CAA2C;IAC3C,IAAW,WAAW,CAAC,KAAK,aAAA,EAE3B;IAED,iCAAiC;IACjC,OAAO,CAAC,UAAU,CAAqB;IAEvC,yBAAyB;IAClB,kBAAkB,UAAS;IAElC,kDAAkD;IAClD,IAAW,kBAAkB,YAE5B;IACD,kDAAkD;IAClD,IAAW,kBAAkB,CAAC,KAAK,SAAA,EAElC;IACM,YAAY,SAAK;IAExB,4CAA4C;IAC5C,IAAW,YAAY,WAEtB;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK,QAAA,EAE5B;IACM,YAAY,SAAK;IAExB,4CAA4C;IAC5C,IAAW,YAAY,WAEtB;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK,QAAA,EAE5B;IACD,OAAO,CAAC,eAAe,CAAmC;IAE1D,OAAO,KAAK,EAAE,GAAiC;gBAE3B,aAAa,EAAE,qBAAqB;IAExD,QAAQ,IAAI,IAAI;IAIhB,4CAA4C;IAC5C,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAEtC;IAED,yCAAyC;IACzC,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAEtC;IAED,qCAAqC;IACrC,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAIhD,2CAA2C;IAC3C,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAIhD,kCAAkC;IAClC,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,EAAE;IAI/D,2CAA2C;IAC3C,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,EAAE;IAI/D,oCAAoC;IACpC,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,0CAA0C;IAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,yCAAyC;IACzC,YAAY,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAS5D,4CAA4C;IAC5C,YAAY,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5D,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,0CAA0C;IAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO;IAI/C,sCAAsC;IACtC,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAK5C,0CAA0C;IAC1C,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAI5C,yCAAyC;IACzC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IASlE,6CAA6C;IAC7C,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAIlE,+BAA+B;IAC/B,gBAAgB,IAAI,IAAI;IAKxB,gDAAgD;IAChD,gBAAgB,IAAI,IAAI;IAIxB,6CAA6C;IAC7C,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBzC,mDAAmD;IACnD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAInC,iBAAiB;IAIvB,iDAAiD;IAC3C,iBAAiB;IAIvB,iBAAiB;IAIjB,iDAAiD;IACjD,iBAAiB;IAIX,eAAe;IAYrB,+CAA+C;IACzC,eAAe;IAIf,cAAc,CAAC,YAAY,EAAE,oBAAoB;IAgBvD,8CAA8C;IACxC,cAAc,CAAC,YAAY,EAAE,oBAAoB;IAIvD,cAAc;IAKd,8CAA8C;IAC9C,cAAc;IAId,YAAY;IAKZ,4CAA4C;IAC5C,YAAY;IAIN,UAAU;IAOhB,0CAA0C;IACpC,UAAU;IAIV,OAAO;yCApUF,qBAAqB;2CAArB,qBAAqB;CAoVjC"}