@memberjunction/ng-resource-permissions 5.43.0 → 5.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/resource-share-dialog.component.d.ts +2 -0
- package/dist/lib/resource-share-dialog.component.d.ts.map +1 -1
- package/dist/lib/resource-share-dialog.component.js +46 -51
- package/dist/lib/resource-share-dialog.component.js.map +1 -1
- package/dist/lib/user-sharing-center.component.d.ts +5 -1
- package/dist/lib/user-sharing-center.component.d.ts.map +1 -1
- package/dist/lib/user-sharing-center.component.js +130 -129
- package/dist/lib/user-sharing-center.component.js.map +1 -1
- package/dist/module.d.ts +1 -1
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +10 -4
- package/dist/module.js.map +1 -1
- package/package.json +12 -10
- package/dist/__tests__/exports.test.d.ts +0 -2
- package/dist/__tests__/exports.test.d.ts.map +0 -1
- package/dist/__tests__/exports.test.js +0 -17
- package/dist/__tests__/exports.test.js.map +0 -1
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -7
- package/dist/__tests__/index.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-sharing-center.component.js","sourceRoot":"","sources":["../../src/lib/user-sharing-center.component.ts","../../src/lib/user-sharing-center.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n BaseEntity,\n CompositeKey,\n LogError,\n NormalizedPermission,\n PermissionAction,\n} from '@memberjunction/core';\nimport { PermissionEngine } from '@memberjunction/core-entities';\nimport { MJDialogAction, MJDialogService } from '@memberjunction/ng-ui-components';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/** Which tab the Sharing Center is currently displaying. */\nexport type SharingCenterTab = 'shared-with-me' | 'shared-by-me';\n\n/**\n * One collapsible domain section rendered by {@link UserSharingCenterComponent}.\n * Exported because consumers occasionally want to render their own custom layout\n * around the same shape.\n */\nexport interface SharingCenterDomainGroup {\n DomainName: string;\n Icon: string;\n Rows: NormalizedPermission[];\n Expanded: boolean;\n}\n\n/**\n * Default domain → entity-name mapping used by the Sharing Center to load and\n * delete the underlying permission record on Revoke. Apps with custom permission\n * domains can pass a replacement function via `SharingEntityResolver`.\n */\nexport const DefaultSharingEntityResolver = (domainName: string): string | null => {\n switch (domainName) {\n case 'Dashboard Permissions':\n return 'MJ: Dashboard Permissions';\n case 'Artifact Permissions':\n return 'MJ: Artifact Permissions';\n case 'Collection Permissions':\n return 'MJ: Collection Permissions';\n case 'Access Control Rules':\n return 'MJ: Access Control Rules';\n case 'Resource Permissions':\n return 'MJ: Resource Permissions';\n default:\n return null;\n }\n};\n\n/**\n * **Generic, framework-agnostic Sharing Center.** Renders two tabs:\n *\n * - **Shared with me** — every resource the current user has direct (non-role)\n * access to, grouped by permission domain. Each row is clickable and emits\n * `ResourceClicked` so the embedding app can route to the resource. The Generic\n * component never imports Angular Router / NavigationService — the parent\n * decides how to navigate.\n *\n * - **Shared by me** — every permission record where the current user is the\n * grantor. Each row has a Revoke button that deletes the underlying permission\n * record through `Metadata.GetEntityObject().Delete()` (so audit captures the\n * revoke and BaseEntity event-driven cache invalidation runs).\n *\n * Inputs / Outputs are designed so the component drops cleanly into a dialog,\n * a side panel, an embedded widget, or a full-page route.\n *\n * @example\n * ```html\n * <mj-user-sharing-center\n * [ActiveTab]=\"tab\"\n * (ActiveTabChange)=\"tab = $event\"\n * (ResourceClicked)=\"OnResourceClicked($event)\"\n * (CloseRequested)=\"dialogRef.Close()\">\n * </mj-user-sharing-center>\n * ```\n */\n@Component({\n standalone: true,\n selector: 'mj-user-sharing-center',\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './user-sharing-center.component.html',\n styleUrls: ['./user-sharing-center.component.css'],\n})\nexport class UserSharingCenterComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(MJDialogService);\n\n // ─── Inputs ────────────────────────────────────────────────────────────────\n\n /** Which tab is shown initially. Two-way bindable via `ActiveTabChange`. */\n @Input() ActiveTab: SharingCenterTab = 'shared-with-me';\n\n /**\n * When true, the close button is rendered in the tab strip. Hide it when the\n * embedding container provides its own close affordance.\n */\n @Input() ShowCloseButton = true;\n\n /** Title text displayed in the confirm-revoke dialog. */\n @Input() RevokeConfirmTitle = 'Revoke access';\n\n /**\n * Maps a permission domain name (e.g. `\"Dashboard Permissions\"`) to the entity\n * name used to load and delete the underlying record on Revoke. Replace to add\n * support for custom domains. Defaults to {@link DefaultSharingEntityResolver}.\n */\n @Input() SharingEntityResolver: (domainName: string) => string | null = DefaultSharingEntityResolver;\n\n // ─── Outputs ───────────────────────────────────────────────────────────────\n\n /** Two-way binding partner for `ActiveTab`. */\n @Output() ActiveTabChange = new EventEmitter<SharingCenterTab>();\n\n /** Fired when a row in the \"Shared with me\" tab is clicked. */\n @Output() ResourceClicked = new EventEmitter<NormalizedPermission>();\n\n /** Fired when the user clicks the close button. Parent should close the host dialog/panel. */\n @Output() CloseRequested = new EventEmitter<void>();\n\n /** Fired after a permission has been successfully revoked. */\n @Output() PermissionRevoked = new EventEmitter<NormalizedPermission>();\n\n /** Fired whenever an error is shown to the user. Useful for parent telemetry. */\n @Output() ErrorOccurred = new EventEmitter<string>();\n\n // ─── Public state (read by template) ───────────────────────────────────────\n\n SharedWithMe: SharingCenterDomainGroup[] = [];\n SharedByMe: SharingCenterDomainGroup[] = [];\n\n IsLoadingWithMe = false;\n IsLoadingByMe = false;\n\n ErrorMessage: string | null = null;\n\n async ngOnInit(): Promise<void> {\n await this.loadTab(this.ActiveTab);\n }\n\n // ─── Public methods (callable from parent via @ViewChild) ──────────────────\n\n /** Switch to a tab and load its data if not already loaded. */\n public async SwitchTab(tab: SharingCenterTab): Promise<void> {\n if (this.ActiveTab === tab) return;\n this.ActiveTab = tab;\n this.ActiveTabChange.emit(tab);\n await this.loadTab(tab);\n }\n\n /** Force-refresh the currently active tab. */\n public async Refresh(): Promise<void> {\n if (this.ActiveTab === 'shared-with-me') {\n this.SharedWithMe = [];\n await this.loadSharedWithMe();\n } else {\n this.SharedByMe = [];\n await this.loadSharedByMe();\n }\n }\n\n // ─── Template event handlers ───────────────────────────────────────────────\n\n OnTabClick(tab: SharingCenterTab): Promise<void> {\n return this.SwitchTab(tab);\n }\n\n OnRowClick(row: NormalizedPermission): void {\n this.ResourceClicked.emit(row);\n }\n\n OnClose(): void {\n this.CloseRequested.emit();\n }\n\n async OnRevoke(row: NormalizedPermission, event: Event): Promise<void> {\n event.stopPropagation();\n if (!row.SourceRecordID) return;\n\n const entityName = this.SharingEntityResolver(row.DomainName);\n if (!entityName) return;\n\n const confirmed = await this.confirmRevoke(row);\n if (!confirmed) return;\n\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<BaseEntity>(entityName, md.CurrentUser);\n const key = new CompositeKey();\n key.KeyValuePairs.push({ FieldName: 'ID', Value: row.SourceRecordID });\n const loaded = await entity.InnerLoad(key);\n if (!loaded) {\n this.setError('Could not load the permission record.');\n return;\n }\n const deleted = await entity.Delete();\n if (!deleted) {\n this.setError(`Revoke failed: ${entity.LatestResult?.CompleteMessage ?? 'unknown error'}`);\n return;\n }\n this.PermissionRevoked.emit(row);\n await this.Refresh();\n } catch (e) {\n this.setError(`Revoke failed: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n\n ToggleGroup(group: SharingCenterDomainGroup): void {\n group.Expanded = !group.Expanded;\n this.cdr.detectChanges();\n }\n\n ActionsLabel(actions: PermissionAction[]): string {\n return actions.join(', ');\n }\n\n TrackByDomain(_idx: number, g: SharingCenterDomainGroup): string {\n return g.DomainName;\n }\n\n TrackByRow(_idx: number, r: NormalizedPermission): string {\n return r.SourceRecordID ?? `${r.DomainName}|${r.ResourceID ?? ''}|${r.GranteeID ?? ''}`;\n }\n\n // ─── Internal helpers ──────────────────────────────────────────────────────\n\n private async loadTab(tab: SharingCenterTab): Promise<void> {\n if (tab === 'shared-with-me') {\n if (this.SharedWithMe.length === 0 && !this.IsLoadingWithMe) {\n await this.loadSharedWithMe();\n }\n } else {\n if (this.SharedByMe.length === 0 && !this.IsLoadingByMe) {\n await this.loadSharedByMe();\n }\n }\n }\n\n private async loadSharedWithMe(): Promise<void> {\n const user = this.ProviderToUse.CurrentUser;\n if (!user) return;\n\n this.IsLoadingWithMe = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n try {\n const rows = await PermissionEngine.Instance.GetPermissionsSharedWithUser(user);\n this.SharedWithMe = this.groupByDomain(rows);\n } catch (e) {\n this.setError(`Failed to load shares: ${e instanceof Error ? e.message : String(e)}`);\n }\n this.IsLoadingWithMe = false;\n this.cdr.detectChanges();\n }\n\n private async loadSharedByMe(): Promise<void> {\n const user = this.ProviderToUse.CurrentUser;\n if (!user) return;\n\n this.IsLoadingByMe = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n try {\n const rows = await PermissionEngine.Instance.GetPermissionsGrantedByUser(user);\n this.SharedByMe = this.groupByDomain(rows);\n } catch (e) {\n this.setError(`Failed to load grants: ${e instanceof Error ? e.message : String(e)}`);\n }\n this.IsLoadingByMe = false;\n this.cdr.detectChanges();\n }\n\n private groupByDomain(rows: NormalizedPermission[]): SharingCenterDomainGroup[] {\n const bucket = new Map<string, NormalizedPermission[]>();\n for (const r of rows) {\n const list = bucket.get(r.DomainName) ?? [];\n list.push(r);\n bucket.set(r.DomainName, list);\n }\n const groups: SharingCenterDomainGroup[] = [];\n for (const [domainName, list] of bucket) {\n groups.push({\n DomainName: domainName,\n Icon: PermissionEngine.DomainIconFor(domainName),\n Rows: list.sort((a, b) => (a.ResourceName ?? '').localeCompare(b.ResourceName ?? '')),\n Expanded: list.length <= 10,\n });\n }\n return groups.sort((a, b) => a.DomainName.localeCompare(b.DomainName));\n }\n\n private setError(message: string): void {\n this.ErrorMessage = message;\n this.ErrorOccurred.emit(message);\n LogError(message);\n this.cdr.detectChanges();\n }\n\n private confirmRevoke(row: NormalizedPermission): Promise<boolean> {\n const resourceLabel = row.ResourceName ? `\"${row.ResourceName}\"` : 'this resource';\n const granteeLabel = row.GranteeName ?? 'this user';\n const message = `Revoke access to ${resourceLabel} for ${granteeLabel}? This cannot be undone.`;\n\n return new Promise<boolean>((resolve) => {\n const ref = this.dialogService.open({\n title: this.RevokeConfirmTitle,\n content: message,\n actions: [\n { text: 'Revoke', primary: true, themeColor: 'error' },\n { text: 'Cancel', primary: false },\n ],\n width: 420,\n minWidth: 300,\n });\n\n ref.Result.subscribe((result) => {\n const action = result as MJDialogAction | undefined;\n resolve(!!action && 'text' in action && action.text === 'Revoke');\n });\n });\n }\n}\n","<div class=\"user-sharing-center\">\n <div class=\"tabs\">\n <button\n class=\"tab\"\n [class.active]=\"ActiveTab === 'shared-with-me'\"\n (click)=\"OnTabClick('shared-with-me')\">\n <i class=\"fa-solid fa-inbox\"></i>\n Shared with me\n </button>\n <button\n class=\"tab\"\n [class.active]=\"ActiveTab === 'shared-by-me'\"\n (click)=\"OnTabClick('shared-by-me')\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n Shared by me\n </button>\n <div class=\"spacer\"></div>\n @if (ShowCloseButton) {\n <button class=\"close\" (click)=\"OnClose()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n @if (ActiveTab === 'shared-with-me') {\n @if (IsLoadingWithMe) {\n <div class=\"loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading…\n </div>\n } @else if (SharedWithMe.length === 0) {\n <div class=\"empty\">\n <i class=\"fa-solid fa-inbox\"></i>\n Nothing has been shared directly with you yet.\n </div>\n } @else {\n @for (group of SharedWithMe; track TrackByDomain($index, group)) {\n <div class=\"group\">\n <button class=\"group-header\" (click)=\"ToggleGroup(group)\">\n <i [class]=\"group.Icon\"></i>\n <span class=\"group-name\">{{ group.DomainName }}</span>\n <span class=\"count\">{{ group.Rows.length }}</span>\n <i class=\"fa-solid chevron\" [class.fa-chevron-down]=\"group.Expanded\" [class.fa-chevron-right]=\"!group.Expanded\"></i>\n </button>\n @if (group.Expanded) {\n <div class=\"rows\">\n @for (row of group.Rows; track TrackByRow($index, row)) {\n <button class=\"row\" (click)=\"OnRowClick(row)\">\n <span class=\"resource\">{{ row.ResourceName || row.ResourceID }}</span>\n <span class=\"resource-type\">{{ row.ResourceType }}</span>\n <span class=\"actions\">{{ ActionsLabel(row.Actions) }}</span>\n @if (row.ExpiresAt) {\n <span class=\"expires\">expires {{ row.ExpiresAt | date:'mediumDate' }}</span>\n }\n </button>\n }\n </div>\n }\n </div>\n }\n }\n } @else {\n @if (IsLoadingByMe) {\n <div class=\"loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading…\n </div>\n } @else if (SharedByMe.length === 0) {\n <div class=\"empty\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n You haven't shared anything with others yet.\n </div>\n } @else {\n @for (group of SharedByMe; track TrackByDomain($index, group)) {\n <div class=\"group\">\n <button class=\"group-header\" (click)=\"ToggleGroup(group)\">\n <i [class]=\"group.Icon\"></i>\n <span class=\"group-name\">{{ group.DomainName }}</span>\n <span class=\"count\">{{ group.Rows.length }}</span>\n <i class=\"fa-solid chevron\" [class.fa-chevron-down]=\"group.Expanded\" [class.fa-chevron-right]=\"!group.Expanded\"></i>\n </button>\n @if (group.Expanded) {\n <div class=\"rows\">\n @for (row of group.Rows; track TrackByRow($index, row)) {\n <div class=\"row editable\">\n <span class=\"resource\">{{ row.ResourceName || row.ResourceID }}</span>\n <span class=\"resource-type\">{{ row.ResourceType }}</span>\n <span class=\"grantee\">\n <i class=\"fa-solid fa-user\"></i>\n {{ row.GranteeName || row.GranteeType }}\n </span>\n <span class=\"actions\">{{ ActionsLabel(row.Actions) }}</span>\n @if (row.ExpiresAt) {\n <span class=\"expires\">expires {{ row.ExpiresAt | date:'mediumDate' }}</span>\n }\n <button class=\"revoke\" (click)=\"OnRevoke(row, $event)\" title=\"Revoke access\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"user-sharing-center.component.js","sourceRoot":"","sources":["../../src/lib/user-sharing-center.component.ts","../../src/lib/user-sharing-center.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n BaseEntity,\n CompositeKey,\n LogError,\n NormalizedPermission,\n PermissionAction,\n} from '@memberjunction/core';\nimport { PermissionEngine } from '@memberjunction/core-entities';\nimport { MJAccordionModule, MJDialogAction, MJDialogService, MJEmptyStateComponent } from '@memberjunction/ng-ui-components';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/** Which tab the Sharing Center is currently displaying. */\nexport type SharingCenterTab = 'shared-with-me' | 'shared-by-me';\n\n/**\n * One collapsible domain section rendered by {@link UserSharingCenterComponent}.\n * Exported because consumers occasionally want to render their own custom layout\n * around the same shape.\n */\nexport interface SharingCenterDomainGroup {\n DomainName: string;\n Icon: string;\n Rows: NormalizedPermission[];\n Expanded: boolean;\n}\n\n/**\n * Default domain → entity-name mapping used by the Sharing Center to load and\n * delete the underlying permission record on Revoke. Apps with custom permission\n * domains can pass a replacement function via `SharingEntityResolver`.\n */\nexport const DefaultSharingEntityResolver = (domainName: string): string | null => {\n switch (domainName) {\n case 'Dashboard Permissions':\n return 'MJ: Dashboard Permissions';\n case 'Artifact Permissions':\n return 'MJ: Artifact Permissions';\n case 'Collection Permissions':\n return 'MJ: Collection Permissions';\n case 'Access Control Rules':\n return 'MJ: Access Control Rules';\n case 'Resource Permissions':\n return 'MJ: Resource Permissions';\n default:\n return null;\n }\n};\n\n/**\n * **Generic, framework-agnostic Sharing Center.** Renders two tabs:\n *\n * - **Shared with me** — every resource the current user has direct (non-role)\n * access to, grouped by permission domain. Each row is clickable and emits\n * `ResourceClicked` so the embedding app can route to the resource. The Generic\n * component never imports Angular Router / NavigationService — the parent\n * decides how to navigate.\n *\n * - **Shared by me** — every permission record where the current user is the\n * grantor. Each row has a Revoke button that deletes the underlying permission\n * record through `Metadata.GetEntityObject().Delete()` (so audit captures the\n * revoke and BaseEntity event-driven cache invalidation runs).\n *\n * Inputs / Outputs are designed so the component drops cleanly into a dialog,\n * a side panel, an embedded widget, or a full-page route.\n *\n * @example\n * ```html\n * <mj-user-sharing-center\n * [ActiveTab]=\"tab\"\n * (ActiveTabChange)=\"tab = $event\"\n * (ResourceClicked)=\"OnResourceClicked($event)\"\n * (CloseRequested)=\"dialogRef.Close()\">\n * </mj-user-sharing-center>\n * ```\n */\n@Component({\n standalone: true,\n selector: 'mj-user-sharing-center',\n imports: [CommonModule, MJEmptyStateComponent, MJAccordionModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './user-sharing-center.component.html',\n styleUrls: ['./user-sharing-center.component.css'],\n})\nexport class UserSharingCenterComponent extends BaseAngularComponent implements OnInit {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogService = inject(MJDialogService);\n\n // ─── Inputs ────────────────────────────────────────────────────────────────\n\n /** Which tab is shown initially. Two-way bindable via `ActiveTabChange`. */\n @Input() ActiveTab: SharingCenterTab = 'shared-with-me';\n\n /**\n * When true, the close button is rendered in the tab strip. Hide it when the\n * embedding container provides its own close affordance.\n */\n @Input() ShowCloseButton = true;\n\n /** Title text displayed in the confirm-revoke dialog. */\n @Input() RevokeConfirmTitle = 'Revoke access';\n\n /**\n * Maps a permission domain name (e.g. `\"Dashboard Permissions\"`) to the entity\n * name used to load and delete the underlying record on Revoke. Replace to add\n * support for custom domains. Defaults to {@link DefaultSharingEntityResolver}.\n */\n @Input() SharingEntityResolver: (domainName: string) => string | null = DefaultSharingEntityResolver;\n\n // ─── Outputs ───────────────────────────────────────────────────────────────\n\n /** Two-way binding partner for `ActiveTab`. */\n @Output() ActiveTabChange = new EventEmitter<SharingCenterTab>();\n\n /** Fired when a row in the \"Shared with me\" tab is clicked. */\n @Output() ResourceClicked = new EventEmitter<NormalizedPermission>();\n\n /** Fired when the user clicks the close button. Parent should close the host dialog/panel. */\n @Output() CloseRequested = new EventEmitter<void>();\n\n /** Fired after a permission has been successfully revoked. */\n @Output() PermissionRevoked = new EventEmitter<NormalizedPermission>();\n\n /** Fired whenever an error is shown to the user. Useful for parent telemetry. */\n @Output() ErrorOccurred = new EventEmitter<string>();\n\n // ─── Public state (read by template) ───────────────────────────────────────\n\n SharedWithMe: SharingCenterDomainGroup[] = [];\n SharedByMe: SharingCenterDomainGroup[] = [];\n\n IsLoadingWithMe = false;\n IsLoadingByMe = false;\n\n ErrorMessage: string | null = null;\n\n async ngOnInit(): Promise<void> {\n await this.loadTab(this.ActiveTab);\n }\n\n // ─── Public methods (callable from parent via @ViewChild) ──────────────────\n\n /** Switch to a tab and load its data if not already loaded. */\n public async SwitchTab(tab: SharingCenterTab): Promise<void> {\n if (this.ActiveTab === tab) return;\n this.ActiveTab = tab;\n this.ActiveTabChange.emit(tab);\n await this.loadTab(tab);\n }\n\n /** Force-refresh the currently active tab. */\n public async Refresh(): Promise<void> {\n if (this.ActiveTab === 'shared-with-me') {\n this.SharedWithMe = [];\n await this.loadSharedWithMe();\n } else {\n this.SharedByMe = [];\n await this.loadSharedByMe();\n }\n }\n\n // ─── Template event handlers ───────────────────────────────────────────────\n\n OnTabClick(tab: SharingCenterTab): Promise<void> {\n return this.SwitchTab(tab);\n }\n\n OnRowClick(row: NormalizedPermission): void {\n this.ResourceClicked.emit(row);\n }\n\n OnClose(): void {\n this.CloseRequested.emit();\n }\n\n async OnRevoke(row: NormalizedPermission, event: Event): Promise<void> {\n event.stopPropagation();\n if (!row.SourceRecordID) return;\n\n const entityName = this.SharingEntityResolver(row.DomainName);\n if (!entityName) return;\n\n const confirmed = await this.confirmRevoke(row);\n if (!confirmed) return;\n\n try {\n const md = this.ProviderToUse;\n const entity = await md.GetEntityObject<BaseEntity>(entityName, md.CurrentUser);\n const key = new CompositeKey();\n key.KeyValuePairs.push({ FieldName: 'ID', Value: row.SourceRecordID });\n const loaded = await entity.InnerLoad(key);\n if (!loaded) {\n this.setError('Could not load the permission record.');\n return;\n }\n const deleted = await entity.Delete();\n if (!deleted) {\n this.setError(`Revoke failed: ${entity.LatestResult?.CompleteMessage ?? 'unknown error'}`);\n return;\n }\n this.PermissionRevoked.emit(row);\n await this.Refresh();\n } catch (e) {\n this.setError(`Revoke failed: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n\n /**\n * Apply the expand/collapse state emitted by the accordion panel for a domain\n * group. OnPush, so an explicit detectChanges() is required to reflect the change.\n */\n OnGroupExpandedChange(group: SharingCenterDomainGroup, expanded: boolean): void {\n group.Expanded = expanded;\n this.cdr.detectChanges();\n }\n\n ActionsLabel(actions: PermissionAction[]): string {\n return actions.join(', ');\n }\n\n TrackByDomain(_idx: number, g: SharingCenterDomainGroup): string {\n return g.DomainName;\n }\n\n TrackByRow(_idx: number, r: NormalizedPermission): string {\n return r.SourceRecordID ?? `${r.DomainName}|${r.ResourceID ?? ''}|${r.GranteeID ?? ''}`;\n }\n\n // ─── Internal helpers ──────────────────────────────────────────────────────\n\n private async loadTab(tab: SharingCenterTab): Promise<void> {\n if (tab === 'shared-with-me') {\n if (this.SharedWithMe.length === 0 && !this.IsLoadingWithMe) {\n await this.loadSharedWithMe();\n }\n } else {\n if (this.SharedByMe.length === 0 && !this.IsLoadingByMe) {\n await this.loadSharedByMe();\n }\n }\n }\n\n private async loadSharedWithMe(): Promise<void> {\n const user = this.ProviderToUse.CurrentUser;\n if (!user) return;\n\n this.IsLoadingWithMe = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n try {\n const rows = await PermissionEngine.Instance.GetPermissionsSharedWithUser(user);\n this.SharedWithMe = this.groupByDomain(rows);\n } catch (e) {\n this.setError(`Failed to load shares: ${e instanceof Error ? e.message : String(e)}`);\n }\n this.IsLoadingWithMe = false;\n this.cdr.detectChanges();\n }\n\n private async loadSharedByMe(): Promise<void> {\n const user = this.ProviderToUse.CurrentUser;\n if (!user) return;\n\n this.IsLoadingByMe = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n try {\n const rows = await PermissionEngine.Instance.GetPermissionsGrantedByUser(user);\n this.SharedByMe = this.groupByDomain(rows);\n } catch (e) {\n this.setError(`Failed to load grants: ${e instanceof Error ? e.message : String(e)}`);\n }\n this.IsLoadingByMe = false;\n this.cdr.detectChanges();\n }\n\n private groupByDomain(rows: NormalizedPermission[]): SharingCenterDomainGroup[] {\n const bucket = new Map<string, NormalizedPermission[]>();\n for (const r of rows) {\n const list = bucket.get(r.DomainName) ?? [];\n list.push(r);\n bucket.set(r.DomainName, list);\n }\n const groups: SharingCenterDomainGroup[] = [];\n for (const [domainName, list] of bucket) {\n groups.push({\n DomainName: domainName,\n Icon: PermissionEngine.DomainIconFor(domainName),\n Rows: list.sort((a, b) => (a.ResourceName ?? '').localeCompare(b.ResourceName ?? '')),\n Expanded: list.length <= 10,\n });\n }\n return groups.sort((a, b) => a.DomainName.localeCompare(b.DomainName));\n }\n\n private setError(message: string): void {\n this.ErrorMessage = message;\n this.ErrorOccurred.emit(message);\n LogError(message);\n this.cdr.detectChanges();\n }\n\n private confirmRevoke(row: NormalizedPermission): Promise<boolean> {\n const resourceLabel = row.ResourceName ? `\"${row.ResourceName}\"` : 'this resource';\n const granteeLabel = row.GranteeName ?? 'this user';\n const message = `Revoke access to ${resourceLabel} for ${granteeLabel}? This cannot be undone.`;\n\n return new Promise<boolean>((resolve) => {\n const ref = this.dialogService.open({\n title: this.RevokeConfirmTitle,\n content: message,\n actions: [\n { text: 'Revoke', primary: true, themeColor: 'error' },\n { text: 'Cancel', primary: false },\n ],\n width: 420,\n minWidth: 300,\n });\n\n ref.Result.subscribe((result) => {\n const action = result as MJDialogAction | undefined;\n resolve(!!action && 'text' in action && action.text === 'Revoke');\n });\n });\n }\n}\n","<div class=\"user-sharing-center\">\n <div class=\"tabs\">\n <button\n class=\"tab\"\n [class.active]=\"ActiveTab === 'shared-with-me'\"\n (click)=\"OnTabClick('shared-with-me')\">\n <i class=\"fa-solid fa-inbox\"></i>\n Shared with me\n </button>\n <button\n class=\"tab\"\n [class.active]=\"ActiveTab === 'shared-by-me'\"\n (click)=\"OnTabClick('shared-by-me')\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n Shared by me\n </button>\n <div class=\"spacer\"></div>\n @if (ShowCloseButton) {\n <button class=\"close\" (click)=\"OnClose()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n @if (ErrorMessage) {\n <div class=\"error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n @if (ActiveTab === 'shared-with-me') {\n @if (IsLoadingWithMe) {\n <div class=\"loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading…\n </div>\n } @else if (SharedWithMe.length === 0) {\n <mj-empty-state class=\"empty\" Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"Nothing has been shared directly with you yet.\" />\n } @else {\n @for (group of SharedWithMe; track TrackByDomain($index, group)) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"group.Expanded\"\n (ExpandedChange)=\"OnGroupExpandedChange(group, $event)\">\n <ng-template mjAccordionTitle>\n <span class=\"group-icon\"><i [class]=\"group.Icon\"></i></span>\n <span class=\"group-name\">{{ group.DomainName }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.Rows.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"rows\">\n @for (row of group.Rows; track TrackByRow($index, row)) {\n <button class=\"row\" (click)=\"OnRowClick(row)\">\n <span class=\"resource\">{{ row.ResourceName || row.ResourceID }}</span>\n <span class=\"resource-type\">{{ row.ResourceType }}</span>\n <span class=\"actions\">{{ ActionsLabel(row.Actions) }}</span>\n @if (row.ExpiresAt) {\n <span class=\"expires\">expires {{ row.ExpiresAt | date:'mediumDate' }}</span>\n }\n </button>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n }\n } @else {\n @if (IsLoadingByMe) {\n <div class=\"loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading…\n </div>\n } @else if (SharedByMe.length === 0) {\n <mj-empty-state class=\"empty\" Size=\"compact\"\n Icon=\"fa-solid fa-paper-plane\"\n Title=\"You haven't shared anything with others yet.\" />\n } @else {\n @for (group of SharedByMe; track TrackByDomain($index, group)) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"group.Expanded\"\n (ExpandedChange)=\"OnGroupExpandedChange(group, $event)\">\n <ng-template mjAccordionTitle>\n <span class=\"group-icon\"><i [class]=\"group.Icon\"></i></span>\n <span class=\"group-name\">{{ group.DomainName }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.Rows.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"rows\">\n @for (row of group.Rows; track TrackByRow($index, row)) {\n <div class=\"row editable\">\n <span class=\"resource\">{{ row.ResourceName || row.ResourceID }}</span>\n <span class=\"resource-type\">{{ row.ResourceType }}</span>\n <span class=\"grantee\">\n <i class=\"fa-solid fa-user\"></i>\n {{ row.GranteeName || row.GranteeType }}\n </span>\n <span class=\"actions\">{{ ActionsLabel(row.Actions) }}</span>\n @if (row.ExpiresAt) {\n <span class=\"expires\">expires {{ row.ExpiresAt | date:'mediumDate' }}</span>\n }\n <button class=\"revoke\" (click)=\"OnRevoke(row, $event)\" title=\"Revoke access\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n }\n }\n</div>\n"]}
|
package/dist/module.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import * as i10 from "@memberjunction/ng-shared-generic";
|
|
|
12
12
|
import * as i11 from "@memberjunction/ng-ui-components";
|
|
13
13
|
export declare class ResourcePermissionsModule {
|
|
14
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResourcePermissionsModule, never>;
|
|
15
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourcePermissionsModule, [typeof i1.ResourcePermissionsComponent, typeof i2.AvailableResourcesComponent, typeof i3.RequestResourceAccessComponent, typeof i4.GenericShareDialogComponent], [typeof i5.CommonModule, typeof i6.AgGridModule, typeof i7.FormsModule, typeof i8.ContainerDirectivesModule, typeof i9.GenericDialogModule, typeof i10.SharedGenericModule, typeof i11.MJButtonDirective, typeof i11.MJDropdownComponent, typeof i11.MJWindowComponent, typeof i11.MJWindowTitlebarComponent], [typeof i1.ResourcePermissionsComponent, typeof i2.AvailableResourcesComponent, typeof i3.RequestResourceAccessComponent, typeof i4.GenericShareDialogComponent]>;
|
|
15
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ResourcePermissionsModule, [typeof i1.ResourcePermissionsComponent, typeof i2.AvailableResourcesComponent, typeof i3.RequestResourceAccessComponent, typeof i4.GenericShareDialogComponent], [typeof i5.CommonModule, typeof i6.AgGridModule, typeof i7.FormsModule, typeof i8.ContainerDirectivesModule, typeof i9.GenericDialogModule, typeof i10.SharedGenericModule, typeof i11.MJButtonDirective, typeof i11.MJDropdownComponent, typeof i11.MJEmptyStateComponent, typeof i11.MJWindowComponent, typeof i11.MJWindowTitlebarComponent, typeof i11.MJAlertComponent], [typeof i1.ResourcePermissionsComponent, typeof i2.AvailableResourcesComponent, typeof i3.RequestResourceAccessComponent, typeof i4.GenericShareDialogComponent]>;
|
|
16
16
|
static ɵinj: i0.ɵɵInjectorDeclaration<ResourcePermissionsModule>;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAsBA,qBA4Ba,yBAAyB;yCAAzB,yBAAyB;0CAAzB,yBAAyB;0CAAzB,yBAAyB;CAAI"}
|
package/dist/module.js
CHANGED
|
@@ -8,7 +8,7 @@ import { AvailableResourcesComponent } from './lib/available-resources.component
|
|
|
8
8
|
import { GenericDialogModule } from '@memberjunction/ng-generic-dialog';
|
|
9
9
|
import { RequestResourceAccessComponent } from './lib/request-access.component';
|
|
10
10
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
11
|
-
import { MJButtonDirective, MJDropdownComponent, MJWindowComponent, MJWindowTitlebarComponent } from '@memberjunction/ng-ui-components';
|
|
11
|
+
import { MJButtonDirective, MJDropdownComponent, MJEmptyStateComponent, MJWindowComponent, MJWindowTitlebarComponent, MJAlertComponent } from '@memberjunction/ng-ui-components';
|
|
12
12
|
import { GenericShareDialogComponent } from './lib/resource-share-dialog.component';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
export class ResourcePermissionsModule {
|
|
@@ -21,8 +21,10 @@ export class ResourcePermissionsModule {
|
|
|
21
21
|
GenericDialogModule,
|
|
22
22
|
SharedGenericModule,
|
|
23
23
|
MJDropdownComponent,
|
|
24
|
+
MJEmptyStateComponent,
|
|
24
25
|
MJWindowComponent,
|
|
25
|
-
MJWindowTitlebarComponent
|
|
26
|
+
MJWindowTitlebarComponent,
|
|
27
|
+
MJAlertComponent] });
|
|
26
28
|
}
|
|
27
29
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourcePermissionsModule, [{
|
|
28
30
|
type: NgModule,
|
|
@@ -42,8 +44,10 @@ export class ResourcePermissionsModule {
|
|
|
42
44
|
SharedGenericModule,
|
|
43
45
|
MJButtonDirective,
|
|
44
46
|
MJDropdownComponent,
|
|
47
|
+
MJEmptyStateComponent,
|
|
45
48
|
MJWindowComponent,
|
|
46
|
-
MJWindowTitlebarComponent
|
|
49
|
+
MJWindowTitlebarComponent,
|
|
50
|
+
MJAlertComponent
|
|
47
51
|
],
|
|
48
52
|
exports: [
|
|
49
53
|
ResourcePermissionsComponent,
|
|
@@ -64,8 +68,10 @@ export class ResourcePermissionsModule {
|
|
|
64
68
|
SharedGenericModule,
|
|
65
69
|
MJButtonDirective,
|
|
66
70
|
MJDropdownComponent,
|
|
71
|
+
MJEmptyStateComponent,
|
|
67
72
|
MJWindowComponent,
|
|
68
|
-
MJWindowTitlebarComponent
|
|
73
|
+
MJWindowTitlebarComponent,
|
|
74
|
+
MJAlertComponent], exports: [ResourcePermissionsComponent,
|
|
69
75
|
AvailableResourcesComponent,
|
|
70
76
|
RequestResourceAccessComponent,
|
|
71
77
|
GenericShareDialogComponent] }); })();
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;;AA8BpF,MAAM,OAAO,yBAAyB;mHAAzB,yBAAyB;4DAAzB,yBAAyB;gEApBlC,YAAY;YACZ,YAAY;YACZ,WAAW;YACX,yBAAyB;YACzB,mBAAmB;YACnB,mBAAmB;YAEnB,mBAAmB;YACnB,qBAAqB;YACrB,iBAAiB;YACjB,yBAAyB;YACzB,gBAAgB;;iFASP,yBAAyB;cA5BrC,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,4BAA4B;oBAC5B,2BAA2B;oBAC3B,8BAA8B;oBAC9B,2BAA2B;iBAC5B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,YAAY;oBACZ,WAAW;oBACX,yBAAyB;oBACzB,mBAAmB;oBACnB,mBAAmB;oBACnB,iBAAiB;oBACjB,mBAAmB;oBACnB,qBAAqB;oBACrB,iBAAiB;oBACjB,yBAAyB;oBACzB,gBAAgB;iBACjB;gBACD,OAAO,EAAE;oBACP,4BAA4B;oBAC5B,2BAA2B;oBAC3B,8BAA8B;oBAC9B,2BAA2B;iBAC5B;aACF;;wFACY,yBAAyB,mBA1BlC,4BAA4B;QAC5B,2BAA2B;QAC3B,8BAA8B;QAC9B,2BAA2B,aAG3B,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,yBAAyB;QACzB,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,mBAAmB;QACnB,qBAAqB;QACrB,iBAAiB;QACjB,yBAAyB;QACzB,gBAAgB,aAGhB,4BAA4B;QAC5B,2BAA2B;QAC3B,8BAA8B;QAC9B,2BAA2B","sourcesContent":["import { NgModule } from '@angular/core';\nimport { ResourcePermissionsComponent } from './lib/resource-permissions.component';\nimport { CommonModule } from '@angular/common';\n\nimport { AgGridModule } from 'ag-grid-angular';\n\nimport { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';\nimport { FormsModule } from '@angular/forms';\nimport { AvailableResourcesComponent } from './lib/available-resources.component';\nimport { GenericDialogModule } from '@memberjunction/ng-generic-dialog';\nimport { RequestResourceAccessComponent } from './lib/request-access.component';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport {\n MJButtonDirective,\n MJDropdownComponent,\n MJEmptyStateComponent,\n MJWindowComponent,\n MJWindowTitlebarComponent,\n MJAlertComponent\n} from '@memberjunction/ng-ui-components';\nimport { GenericShareDialogComponent } from './lib/resource-share-dialog.component';\n\n@NgModule({\n declarations: [\n ResourcePermissionsComponent,\n AvailableResourcesComponent,\n RequestResourceAccessComponent,\n GenericShareDialogComponent\n ],\n imports: [\n CommonModule,\n AgGridModule,\n FormsModule,\n ContainerDirectivesModule,\n GenericDialogModule,\n SharedGenericModule,\n MJButtonDirective,\n MJDropdownComponent,\n MJEmptyStateComponent,\n MJWindowComponent,\n MJWindowTitlebarComponent,\n MJAlertComponent\n ],\n exports: [\n ResourcePermissionsComponent,\n AvailableResourcesComponent,\n RequestResourceAccessComponent,\n GenericShareDialogComponent\n ]\n})\nexport class ResourcePermissionsModule { }\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-resource-permissions",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.45.0",
|
|
4
4
|
"description": "MemberJunction: Generic Angular components for displaying/editing permissions for a resource",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@angular/compiler": "21.1.3",
|
|
20
20
|
"@angular/compiler-cli": "21.1.3",
|
|
21
|
+
"@memberjunction/core": "5.45.0",
|
|
22
|
+
"@memberjunction/ng-test-utils": "5.45.0",
|
|
21
23
|
"vitest": "^4.0.18"
|
|
22
24
|
},
|
|
23
25
|
"peerDependencies": {
|
|
@@ -27,15 +29,15 @@
|
|
|
27
29
|
"@angular/router": "21.1.3"
|
|
28
30
|
},
|
|
29
31
|
"dependencies": {
|
|
30
|
-
"@memberjunction/core": "5.
|
|
31
|
-
"@memberjunction/core-entities": "5.
|
|
32
|
-
"@memberjunction/global": "5.
|
|
33
|
-
"@memberjunction/ng-base-types": "5.
|
|
34
|
-
"@memberjunction/ng-container-directives": "5.
|
|
35
|
-
"@memberjunction/ng-generic-dialog": "5.
|
|
36
|
-
"@memberjunction/ng-notifications": "5.
|
|
37
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
38
|
-
"@memberjunction/ng-ui-components": "5.
|
|
32
|
+
"@memberjunction/core": "5.45.0",
|
|
33
|
+
"@memberjunction/core-entities": "5.45.0",
|
|
34
|
+
"@memberjunction/global": "5.45.0",
|
|
35
|
+
"@memberjunction/ng-base-types": "5.45.0",
|
|
36
|
+
"@memberjunction/ng-container-directives": "5.45.0",
|
|
37
|
+
"@memberjunction/ng-generic-dialog": "5.45.0",
|
|
38
|
+
"@memberjunction/ng-notifications": "5.45.0",
|
|
39
|
+
"@memberjunction/ng-shared-generic": "5.45.0",
|
|
40
|
+
"@memberjunction/ng-ui-components": "5.45.0",
|
|
39
41
|
"ag-grid-angular": "^35.0.1",
|
|
40
42
|
"ag-grid-community": "^35.0.1",
|
|
41
43
|
"tslib": "^2.8.1"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exports.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { resolve } from 'path';
|
|
4
|
-
describe('@memberjunction/ng-resource-permissions', () => {
|
|
5
|
-
it('should have a public API entry point', () => {
|
|
6
|
-
const pkgRoot = resolve(__dirname, '../..');
|
|
7
|
-
const hasPublicApi = existsSync(resolve(pkgRoot, 'src/public-api.ts'));
|
|
8
|
-
const hasIndex = existsSync(resolve(pkgRoot, 'src/index.ts'));
|
|
9
|
-
expect(hasPublicApi || hasIndex).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
it('should have a package.json with correct name', () => {
|
|
12
|
-
const pkgRoot = resolve(__dirname, '../..');
|
|
13
|
-
const pkg = require(resolve(pkgRoot, 'package.json'));
|
|
14
|
-
expect(pkg.name).toBe('@memberjunction/ng-resource-permissions');
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=exports.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it, expect } from 'vitest';\nimport { existsSync } from 'fs';\nimport { resolve } from 'path';\n\ndescribe('@memberjunction/ng-resource-permissions', () => {\n it('should have a public API entry point', () => {\n const pkgRoot = resolve(__dirname, '../..');\n const hasPublicApi = existsSync(resolve(pkgRoot, 'src/public-api.ts'));\n const hasIndex = existsSync(resolve(pkgRoot, 'src/index.ts'));\n expect(hasPublicApi || hasIndex).toBe(true);\n });\n\n it('should have a package.json with correct name', () => {\n const pkgRoot = resolve(__dirname, '../..');\n const pkg = require(resolve(pkgRoot, 'package.json'));\n expect(pkg.name).toBe('@memberjunction/ng-resource-permissions');\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it, expect } from 'vitest';\n\ndescribe('@memberjunction/ng-resource-permissions', () => {\n it('should have a passing test', () => {\n expect(true).toBe(true);\n });\n});\n"]}
|