@memberjunction/ng-base-forms 6.1.0-edge.2 → 6.1.0-edge.3
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/LICENSE +180 -4
- package/README.md +4 -1
- package/dist/lib/base-form-component.d.ts +93 -3
- package/dist/lib/base-form-component.d.ts.map +1 -1
- package/dist/lib/base-form-component.js +240 -9
- package/dist/lib/base-form-component.js.map +1 -1
- package/dist/lib/chrome/base-form-policy.d.ts +26 -0
- package/dist/lib/chrome/base-form-policy.d.ts.map +1 -0
- package/dist/lib/chrome/base-form-policy.js +9 -0
- package/dist/lib/chrome/base-form-policy.js.map +1 -0
- package/dist/lib/chrome/clipped-title.d.ts +8 -0
- package/dist/lib/chrome/clipped-title.d.ts.map +1 -0
- package/dist/lib/chrome/clipped-title.js +18 -0
- package/dist/lib/chrome/clipped-title.js.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts +35 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js +96 -0
- package/dist/lib/chrome/form-chrome-coordinator.service.js.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts +24 -0
- package/dist/lib/chrome/form-chrome-rail-pref.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js +52 -0
- package/dist/lib/chrome/form-chrome-rail-pref.js.map +1 -0
- package/dist/lib/chrome/form-chrome.d.ts +59 -0
- package/dist/lib/chrome/form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/form-chrome.js +37 -0
- package/dist/lib/chrome/form-chrome.js.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts +8 -0
- package/dist/lib/chrome/load-form-chrome-rules.d.ts.map +1 -0
- package/dist/lib/chrome/load-form-chrome-rules.js +70 -0
- package/dist/lib/chrome/load-form-chrome-rules.js.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts +114 -0
- package/dist/lib/chrome/resolve-form-chrome.d.ts.map +1 -0
- package/dist/lib/chrome/resolve-form-chrome.js +713 -0
- package/dist/lib/chrome/resolve-form-chrome.js.map +1 -0
- package/dist/lib/container/record-form-container.component.d.ts +170 -6
- package/dist/lib/container/record-form-container.component.d.ts.map +1 -1
- package/dist/lib/container/record-form-container.component.js +1194 -62
- package/dist/lib/container/record-form-container.component.js.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts +54 -1
- package/dist/lib/explorer-entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/explorer-entity-data-grid.component.js +143 -7
- package/dist/lib/explorer-entity-data-grid.component.js.map +1 -1
- package/dist/lib/form-record-refresh.coordinator.d.ts +27 -0
- package/dist/lib/form-record-refresh.coordinator.d.ts.map +1 -0
- package/dist/lib/form-record-refresh.coordinator.js +33 -0
- package/dist/lib/form-record-refresh.coordinator.js.map +1 -0
- package/dist/lib/form-state.interface.d.ts +4 -0
- package/dist/lib/form-state.interface.d.ts.map +1 -1
- package/dist/lib/form-state.interface.js.map +1 -1
- package/dist/lib/form-state.service.d.ts +5 -0
- package/dist/lib/form-state.service.d.ts.map +1 -1
- package/dist/lib/form-state.service.js +23 -2
- package/dist/lib/form-state.service.js.map +1 -1
- package/dist/lib/host/entity-form-host.component.d.ts +5 -1
- package/dist/lib/host/entity-form-host.component.d.ts.map +1 -1
- package/dist/lib/host/entity-form-host.component.js +16 -2
- package/dist/lib/host/entity-form-host.component.js.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts +6 -2
- package/dist/lib/isa-related-panel/isa-related-panel.component.d.ts.map +1 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js +15 -1
- package/dist/lib/isa-related-panel/isa-related-panel.component.js.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.d.ts +24 -2
- package/dist/lib/panel/collapsible-panel.component.d.ts.map +1 -1
- package/dist/lib/panel/collapsible-panel.component.js +104 -10
- package/dist/lib/panel/collapsible-panel.component.js.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts +85 -1
- package/dist/lib/panel-slot/base-form-panel.d.ts.map +1 -1
- package/dist/lib/panel-slot/base-form-panel.js +72 -3
- package/dist/lib/panel-slot/base-form-panel.js.map +1 -1
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts +8 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.d.ts.map +1 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js +19 -0
- package/dist/lib/panel-slot/collect-form-panel-registrations.js.map +1 -0
- package/dist/lib/panel-slot/form-contribution.d.ts +79 -0
- package/dist/lib/panel-slot/form-contribution.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contribution.js +253 -0
- package/dist/lib/panel-slot/form-contribution.js.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts +27 -0
- package/dist/lib/panel-slot/form-contributions.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/form-contributions.component.js +83 -0
- package/dist/lib/panel-slot/form-contributions.component.js.map +1 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts +2 -0
- package/dist/lib/panel-slot/form-panel-slot.component.d.ts.map +1 -1
- package/dist/lib/panel-slot/form-panel-slot.component.js +35 -4
- package/dist/lib/panel-slot/form-panel-slot.component.js.map +1 -1
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts +22 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.d.ts.map +1 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js +78 -0
- package/dist/lib/panel-slot/related-entity-grid-panel.component.js.map +1 -0
- package/dist/lib/related-grid-height.d.ts +20 -0
- package/dist/lib/related-grid-height.d.ts.map +1 -0
- package/dist/lib/related-grid-height.js +30 -0
- package/dist/lib/related-grid-height.js.map +1 -0
- package/dist/lib/section-manager/section-manager.component.d.ts +20 -1
- package/dist/lib/section-manager/section-manager.component.d.ts.map +1 -1
- package/dist/lib/section-manager/section-manager.component.js +204 -25
- package/dist/lib/section-manager/section-manager.component.js.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.d.ts +55 -4
- package/dist/lib/toolbar/form-toolbar.component.d.ts.map +1 -1
- package/dist/lib/toolbar/form-toolbar.component.js +734 -306
- package/dist/lib/toolbar/form-toolbar.component.js.map +1 -1
- package/dist/lib/types/form-events.d.ts +35 -0
- package/dist/lib/types/form-events.d.ts.map +1 -1
- package/dist/lib/types/form-events.js +45 -0
- package/dist/lib/types/form-events.js.map +1 -1
- package/dist/lib/types/form-toolbar-item.d.ts +145 -0
- package/dist/lib/types/form-toolbar-item.d.ts.map +1 -0
- package/dist/lib/types/form-toolbar-item.js +2 -0
- package/dist/lib/types/form-toolbar-item.js.map +1 -0
- package/dist/lib/types/form-types.d.ts +8 -0
- package/dist/lib/types/form-types.d.ts.map +1 -1
- package/dist/lib/types/form-types.js.map +1 -1
- package/dist/lib/types/toolbar-config.d.ts +7 -2
- package/dist/lib/types/toolbar-config.d.ts.map +1 -1
- package/dist/lib/types/toolbar-config.js +6 -0
- package/dist/lib/types/toolbar-config.js.map +1 -1
- package/dist/module.d.ts +17 -14
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +14 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +13 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +14 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +19 -18
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-form-chrome.js","sourceRoot":"","sources":["../../../src/lib/chrome/resolve-form-chrome.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ApplyFormChromeRules,\n ContributionInclusionFromRules,\n EntityInfo,\n EntityRelationshipInfo,\n ResolveFormLayout,\n ReadRelationshipSortKey,\n ResolveRelatedFormRoles,\n type FormChromeRule,\n type FormInclusion,\n type FormRole,\n type IEntityFormConfiguration,\n type RelatedFormRoleAssignment,\n type RelatedFormRoleCandidate,\n type RelatedFormRoleResolution,\n} from '@memberjunction/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { RelatedEntitySectionKey } from '../panel-slot/form-contribution';\nimport { BaseFormPolicy, type FormChromeContext } from './base-form-policy';\nimport {\n DETAILS_SECTION_KEY,\n MORE_SECTION_KEY,\n HumanizeEntityTitle,\n IsAlwaysMoreSection,\n type FormChromeGroup,\n type FormChromePanelSnapshot,\n type FormChromeSpec,\n} from './form-chrome';\n\n/** User override of which sections live in More vs first-class. */\nexport interface ChromeMembershipOverride {\n moreSectionKeys?: readonly string[];\n firstClassSectionKeys?: readonly string[];\n}\n\nexport interface ResolveFormChromeInput {\n Entity: EntityInfo;\n Panels: FormChromePanelSnapshot[];\n /** Related-entity schema by entity ID. Built from the active provider. */\n RelatedSchemaByEntityId: ReadonlyMap<string, string>;\n /**\n * Section keys a contribution claimed or replaced. Must not appear in\n * the rail — otherwise a custom Contact Methods widget and the baked\n * grid merge into one group and both show.\n */\n HiddenSectionKeys?: readonly string[];\n /** Persisted user move-in / move-out of More. */\n Membership?: ChromeMembershipOverride | null;\n /**\n * RelatedEntityID (lowercase) → how many EntityRelationships point at\n * that entity. Used as graph in-degree by the smart ranker.\n */\n InboundRelationshipCountByEntityId?: ReadonlyMap<string, number>;\n /**\n * Section keys of registered form contributions (custom widgets). These\n * stay first-class instead of folding into Details, and rank above\n * stock related grids.\n */\n ContributionSectionKeys?: readonly string[];\n /** contribution SectionKey → details | more. Overrides first-class lift. */\n ContributionChromeGroupByKey?: ReadonlyMap<string, 'details' | 'more'>;\n /**\n * L1 inclusion from the winning contribution registration.\n * L3 `ChromeRules` still wins on the same key.\n */\n ContributionInclusionByKey?: ReadonlyMap<string, FormInclusion>;\n /** `sortKey` from the winning registration. Higher = earlier in the lead band. */\n ContributionSortKeyByKey?: ReadonlyMap<string, number>;\n /**\n * Install overlay (L3) from `MJ: Form Chrome Rules`. Empty when the\n * entity is not installed or the parent has no rows.\n */\n ChromeRules?: readonly FormChromeRule[];\n /**\n * When false, do not invent chrome groups for DisplayInForm related\n * that have no baked / contributed panel. Custom forms that set\n * `ShowRelatedEntities: false` use this so leftover More does not\n * appear for grids the template already owns (or chose not to show).\n */\n IncludeUnbakedRelated?: boolean;\n}\n\nexport interface ResolveFormChromeResult {\n Spec: FormChromeSpec;\n RelatedRoles: RelatedFormRoleResolution;\n PolicyUsed: boolean;\n}\n\n/**\n * Last-wins `BaseFormPolicy` for this entity, or `null` when none is registered.\n */\nexport function ResolveFormPolicy(entityName: string): BaseFormPolicy | null {\n const registrations = MJGlobal.Instance.ClassFactory.GetAllRegistrationsByMetadata(\n BaseFormPolicy,\n (metadata) => {\n if (!metadata) return false;\n const entity = (metadata as { entity?: unknown }).entity;\n return typeof entity === 'string' && entity === entityName;\n },\n );\n if (registrations.length === 0) return null;\n const winner = [...registrations].sort((a, b) => (a.Priority ?? 0) - (b.Priority ?? 0)).at(-1);\n if (!winner?.SubClass) return null;\n const Ctor = winner.SubClass as new () => BaseFormPolicy;\n return new Ctor();\n}\n\nexport function BuildRelatedFormRoleCandidates(\n entity: EntityInfo,\n relatedSchemaByEntityId: ReadonlyMap<string, string>,\n inboundCountByRelatedEntityId: ReadonlyMap<string, number> = new Map(),\n): RelatedFormRoleCandidate[] {\n return entity.RelatedEntities.map((rel) =>\n toCandidate(rel, relatedSchemaByEntityId, inboundCountByRelatedEntityId),\n );\n}\n\nexport function ResolveFormChrome(input: ResolveFormChromeInput): ResolveFormChromeResult {\n const formConfig = input.Entity.ConfigurationObject?.UI?.Form ?? null;\n const ranked = ResolveRelatedFormRoles(\n input.Entity.SchemaName,\n formConfig,\n BuildRelatedFormRoleCandidates(\n input.Entity,\n input.RelatedSchemaByEntityId,\n input.InboundRelationshipCountByEntityId,\n ),\n );\n const assignments = ApplyFormChromeRules(\n input.Entity.ID ?? '',\n ranked.Assignments,\n input.ChromeRules ?? [],\n );\n const resolution: RelatedFormRoleResolution = { ...ranked, Assignments: assignments };\n\n const relatedRoles = mapRelatedRoles(input.Entity, assignments);\n const contributionGroups = applyContributionRules(\n input.Entity.ID ?? '',\n input.ContributionSectionKeys ?? [],\n input.ContributionChromeGroupByKey ?? new Map(),\n input.ContributionInclusionByKey ?? new Map(),\n input.ChromeRules ?? [],\n );\n const hidden = new Set(input.HiddenSectionKeys ?? []);\n for (const key of displayInFormFalseSectionKeys(input.Entity)) hidden.add(key);\n for (const key of noneInclusionSectionKeys(input.Entity, assignments)) hidden.add(key);\n for (const key of contributionGroups.hiddenKeys) hidden.add(key);\n const visiblePanels = input.Panels.filter((p) => !hidden.has(p.SectionKey));\n const defaultSpec = BuildDefaultChromeSpec(\n visiblePanels,\n relatedRoles,\n formConfig,\n input.ContributionSectionKeys,\n contributionGroups.chromeGroupByKey,\n );\n if (input.IncludeUnbakedRelated !== false) {\n addMissingRelatedGroups(defaultSpec, input.Entity, relatedRoles, hidden);\n }\n applyRelatedDisplayNames(defaultSpec, input.Entity);\n mergeRelatedGroupsByEntity(defaultSpec, input.Entity);\n sortFirstClassRelatedGroups(\n defaultSpec,\n input.Entity,\n assignments,\n input.ContributionSectionKeys,\n contributionGroups.leadKeys,\n input.ContributionSortKeyByKey ?? new Map(),\n );\n ApplyUserChromeMembership(defaultSpec, input.Membership, visiblePanels);\n\n const policy = ResolveFormPolicy(input.Entity.Name);\n if (policy) {\n const ctx: FormChromeContext = {\n Entity: input.Entity,\n RelatedRoles: resolution,\n Panels: input.Panels,\n PrimarySectionCount: countFirstClass(defaultSpec),\n };\n const decorated = policy.DecorateChrome(defaultSpec, ctx);\n const spec = TakeDecoratedChrome(defaultSpec, decorated ?? defaultSpec);\n ApplyUserChromeMembership(spec, input.Membership, visiblePanels);\n ApplyFormChromeRuleTitles(spec, input.Entity, input.ChromeRules ?? []);\n return { Spec: spec, RelatedRoles: resolution, PolicyUsed: true };\n }\n\n ApplyFormChromeRuleTitles(defaultSpec, input.Entity, input.ChromeRules ?? []);\n return { Spec: defaultSpec, RelatedRoles: resolution, PolicyUsed: false };\n}\n\n/**\n * Policy may rename groups and swap icons. Membership (section keys and\n * More vs first-class) is data — a violating decorate is ignored.\n */\nexport function TakeDecoratedChrome(base: FormChromeSpec, decorated: FormChromeSpec): FormChromeSpec {\n return sameChromeMembership(base, decorated) ? decorated : base;\n}\n\n/**\n * L3 Title overlay. Last Sequence wins. Blank Title is ignored so an\n * incomplete rule cannot wipe DisplayName. Applied after policy decorate\n * so an admin title survives an OpenApp policy rename.\n */\nexport function ApplyFormChromeRuleTitles(\n spec: FormChromeSpec,\n entity: EntityInfo,\n rules: readonly FormChromeRule[],\n): void {\n const parent = (entity.ID ?? '').trim().toLowerCase();\n if (!parent) return;\n const titled = rules\n .filter((rule) => chromeIdsEqual(rule.EntityID, parent) && hasChromeTitle(rule.Title))\n .sort((a, b) => (a.Sequence ?? 0) - (b.Sequence ?? 0));\n if (titled.length === 0) return;\n\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const keysByRelatedId = new Map<string, string[]>();\n for (const rel of displayInForm) {\n const id = (rel.RelatedEntityID ?? '').trim().toLowerCase();\n if (!id) continue;\n const key = RelatedEntitySectionKey(rel, displayInForm);\n const list = keysByRelatedId.get(id) ?? [];\n list.push(key);\n keysByRelatedId.set(id, list);\n }\n\n const titleByKey = new Map<string, string>(spec.TitleBySectionKey);\n for (const rule of titled) {\n const title = (rule.Title ?? '').trim();\n if (rule.TargetKind === 'Contribution') {\n const key = (rule.ContributionKey ?? '').trim();\n if (key) titleByKey.set(key, title);\n continue;\n }\n const relatedId = (rule.RelatedEntityID ?? '').trim().toLowerCase();\n for (const key of keysByRelatedId.get(relatedId) ?? []) {\n titleByKey.set(key, title);\n }\n }\n if (titleByKey.size === 0) return;\n\n spec.TitleBySectionKey = titleByKey;\n for (const group of spec.Groups) {\n if (group.IsMore) continue;\n const override = group.SectionKeys\n .map((key) => titleByKey.get(key))\n .find((value): value is string => !!value);\n if (override) group.Title = override;\n }\n}\n\nfunction hasChromeTitle(title: string | null | undefined): boolean {\n return (title ?? '').trim().length > 0;\n}\n\nfunction chromeIdsEqual(a: string | null | undefined, b: string | null | undefined): boolean {\n const left = (a ?? '').trim().toLowerCase();\n const right = (b ?? '').trim().toLowerCase();\n return left.length > 0 && left === right;\n}\n\nfunction sameChromeMembership(a: FormChromeSpec, b: FormChromeSpec): boolean {\n return keyFingerprint(collectSectionKeys(a)) === keyFingerprint(collectSectionKeys(b))\n && keyFingerprint(a.MoreSectionKeys) === keyFingerprint(b.MoreSectionKeys);\n}\n\nfunction collectSectionKeys(spec: FormChromeSpec): string[] {\n return [...spec.Groups.flatMap((g) => g.SectionKeys), ...spec.MoreSectionKeys];\n}\n\nfunction keyFingerprint(keys: readonly string[]): string {\n return [...new Set(keys.filter((k) => !!k))].sort().join('\\0');\n}\n\nfunction applyContributionRules(\n parentEntityId: string,\n contributionSectionKeys: readonly string[],\n declared: ReadonlyMap<string, 'details' | 'more'>,\n l1InclusionByKey: ReadonlyMap<string, FormInclusion>,\n rules: readonly FormChromeRule[],\n): { chromeGroupByKey: Map<string, 'details' | 'more'>; hiddenKeys: string[]; leadKeys: string[] } {\n const chromeGroupByKey = new Map(declared);\n const hiddenKeys: string[] = [];\n const leadKeys: string[] = [];\n for (const key of contributionSectionKeys) {\n const inclusion = ContributionInclusionFromRules(parentEntityId, key, rules)\n ?? l1InclusionByKey.get(key)\n ?? null;\n applyContributionInclusion(key, inclusion, chromeGroupByKey, hiddenKeys);\n if (isLeadContribution(key, inclusion, chromeGroupByKey)) {\n leadKeys.push(key);\n }\n }\n return { chromeGroupByKey, hiddenKeys, leadKeys };\n}\n\nfunction applyContributionInclusion(\n key: string,\n inclusion: FormInclusion | null,\n chromeGroupByKey: Map<string, 'details' | 'more'>,\n hiddenKeys: string[],\n): void {\n if (inclusion == null) return;\n if (inclusion === 'None') {\n hiddenKeys.push(key);\n return;\n }\n if (inclusion === 'More') {\n chromeGroupByKey.set(key, 'more');\n }\n // Primary is its own first-class rail item. Do not fold into Details.\n}\n\nfunction isLeadContribution(\n key: string,\n inclusion: FormInclusion | null,\n chromeGroupByKey: ReadonlyMap<string, 'details' | 'more'>,\n): boolean {\n if (inclusion !== 'Primary') return false;\n const pinned = chromeGroupByKey.get(key);\n return pinned !== 'details' && pinned !== 'more';\n}\n\nexport function BuildDefaultChromeSpec(\n panels: FormChromePanelSnapshot[],\n relatedRoles: ReadonlyMap<string, FormRole>,\n formConfig: IEntityFormConfiguration | null,\n contributionSectionKeys: readonly string[] = [],\n contributionChromeGroupByKey: ReadonlyMap<string, 'details' | 'more'> = new Map(),\n): FormChromeSpec {\n const moreKeys: string[] = [];\n const fieldKeys: string[] = [];\n const relatedGroups: FormChromeGroup[] = [];\n const contributions = new Set(contributionSectionKeys);\n\n for (const panel of panels) {\n if (!panel.SectionKey) continue;\n if (IsAlwaysMoreSection(panel.SectionKey, panel.SectionName)) {\n moreKeys.push(panel.SectionKey);\n continue;\n }\n const pinned = contributionChromeGroupByKey.get(panel.SectionKey);\n if (pinned === 'details') {\n fieldKeys.push(panel.SectionKey);\n continue;\n }\n if (pinned === 'more') {\n moreKeys.push(panel.SectionKey);\n continue;\n }\n if (panel.Variant === 'related-entity' || contributions.has(panel.SectionKey)) {\n if (relatedRoles.get(panel.SectionKey) === 'Detail') {\n moreKeys.push(panel.SectionKey);\n continue;\n }\n relatedGroups.push(relatedGroupFromPanel(panel));\n continue;\n }\n fieldKeys.push(panel.SectionKey);\n }\n\n const groups: FormChromeGroup[] = [];\n if (fieldKeys.length > 0) {\n const firstField = panels.find((p) => p.SectionKey === fieldKeys[0]);\n groups.push({\n Key: DETAILS_SECTION_KEY,\n Title: 'Details',\n Icon: firstField?.Icon?.trim() || 'fa-solid fa-id-card',\n SectionKeys: fieldKeys,\n IsMore: false,\n });\n }\n groups.push(...MergeChromeGroupsByTitle(relatedGroups));\n appendMoreGroup(groups, moreKeys);\n\n const layout = ResolveFormLayout(formConfig, groups.length);\n return {\n Layout: layout,\n Groups: groups,\n RelatedRoles: relatedRoles,\n MoreSectionKeys: moreKeys,\n };\n}\n\nfunction relatedRailIcon(rel: EntityRelationshipInfo): string {\n if (rel.DisplayIconType === 'Custom' && rel.DisplayIcon?.trim()) {\n return rel.DisplayIcon.trim();\n }\n if (rel.DisplayIcon?.trim()) return rel.DisplayIcon.trim();\n return 'fa-solid fa-table';\n}\n\nfunction relatedGroupFromPanel(panel: FormChromePanelSnapshot): FormChromeGroup {\n return {\n Key: panel.SectionKey,\n Title: HumanizeEntityTitle(panel.SectionName || panel.SectionKey),\n Icon: panel.Icon?.trim() || 'fa-solid fa-table',\n SectionKeys: [panel.SectionKey],\n IsMore: false,\n };\n}\n\n/** First SectionKey index in a user order; used to sort rail groups. */\nexport function ChromeGroupOrderIndex(group: FormChromeGroup, sectionOrder: readonly string[]): number {\n let min = Number.MAX_SAFE_INTEGER;\n for (const key of group.SectionKeys) {\n const index = sectionOrder.indexOf(key);\n if (index >= 0 && index < min) min = index;\n }\n return min;\n}\n\n/**\n * Layer a (possibly incomplete) user ranking on the current default rail.\n * Keys the user ranked keep that relative order. Keys they never ranked\n * (Overview, a new related grid) stay in their default slots instead of\n * falling to the end — `form.sections` does not list slot-mounted leads.\n */\nexport function OverlayChromeSectionOrder(\n defaultOrder: readonly string[],\n userOrder: readonly string[],\n): string[] {\n if (userOrder.length === 0) return [...defaultOrder];\n const defaultSet = new Set(defaultOrder);\n const userSet = new Set(userOrder);\n const result = userOrder.filter((key) => defaultSet.has(key));\n for (let i = 0; i < defaultOrder.length; i++) {\n const key = defaultOrder[i];\n if (userSet.has(key)) continue;\n let insertAt = 0;\n for (let j = i - 1; j >= 0; j--) {\n const idx = result.indexOf(defaultOrder[j]);\n if (idx >= 0) {\n insertAt = idx + 1;\n break;\n }\n }\n result.splice(insertAt, 0, key);\n }\n return result;\n}\n\n/** Reorder More children from a persisted section-key order. */\nexport function OrderMoreSectionKeys(\n moreKeys: readonly string[],\n sectionOrder: readonly string[],\n): string[] {\n return OverlayChromeSectionOrder(moreKeys, sectionOrder);\n}\n\n/**\n * Keep the first-class rail order from the previous spec when chrome\n * re-resolves (slot mount, grid load, contribution key appearing).\n * Clicking a rail item must not reshuffle the list.\n * New related groups append. New lead contributions (Overview) insert\n * into the lead band before Details. More stays last.\n * User drag still wins via {@link OrderChromeGroups}.\n */\nexport function StabilizeFirstClassGroupOrder(\n previous: FormChromeSpec | null | undefined,\n next: FormChromeSpec,\n): FormChromeSpec {\n if (!previous || previous.Groups.length === 0) return next;\n const details = next.Groups.filter((g) => g.Key === DETAILS_SECTION_KEY);\n const more = next.Groups.filter((g) => g.IsMore);\n const leads = next.Groups.filter((g) => !!g.IsLead);\n const related = next.Groups.filter((g) => !g.IsMore && !g.IsLead && g.Key !== DETAILS_SECTION_KEY);\n if (leads.length === 0 && related.length === 0) return next;\n\n const used = new Set<string>();\n const orderedLeads: FormChromeGroup[] = [];\n const orderedRelated: FormChromeGroup[] = [];\n const take = (bucket: FormChromeGroup[], group: FormChromeGroup | undefined): void => {\n if (!group || used.has(group.Key)) return;\n used.add(group.Key);\n bucket.push(group);\n };\n const matchIn = (pool: FormChromeGroup[], prev: FormChromeGroup): FormChromeGroup | undefined => {\n const prevTitle = prev.Title.trim().toLowerCase();\n const prevKeys = new Set(prev.SectionKeys);\n return pool.find((g) => g.Key === prev.Key)\n ?? pool.find((g) => g.SectionKeys.some((key) => prevKeys.has(key)))\n ?? pool.find((g) => g.Title.trim().toLowerCase() === prevTitle);\n };\n\n for (const prev of previous.Groups) {\n if (prev.IsMore || prev.Key === DETAILS_SECTION_KEY) continue;\n take(orderedLeads, matchIn(leads, prev));\n take(orderedRelated, matchIn(related, prev));\n }\n for (const group of leads) {\n take(orderedLeads, group);\n }\n for (const group of related) {\n take(orderedRelated, group);\n }\n next.Groups = [...orderedLeads, ...details, ...orderedRelated, ...more];\n return next;\n}\n\n/** Reorder first-class rail groups from a persisted section-key order. More stays last. */\nexport function OrderChromeGroups(\n groups: readonly FormChromeGroup[],\n sectionOrder: readonly string[],\n): FormChromeGroup[] {\n if (sectionOrder.length === 0) return [...groups];\n const more = groups.filter((g) => g.IsMore);\n const rest = groups.filter((g) => !g.IsMore);\n const defaultKeys = rest.flatMap((g) => g.SectionKeys);\n const overlaid = OverlayChromeSectionOrder(defaultKeys, sectionOrder);\n rest.sort((a, b) => {\n const ai = ChromeGroupOrderIndex(a, overlaid);\n const bi = ChromeGroupOrderIndex(b, overlaid);\n return ai - bi;\n });\n return [...rest, ...more];\n}\n\n/**\n * Move every SectionKey of `dragged` as a block in front of `target`\n * inside a section-order list. Used by left-nav rail drag/drop.\n */\nexport function MoveChromeGroupInSectionOrder(\n sectionOrder: readonly string[],\n dragged: FormChromeGroup,\n target: FormChromeGroup,\n): string[] {\n const draggedKeys = new Set(dragged.SectionKeys);\n const without = sectionOrder.filter((key) => !draggedKeys.has(key));\n const insertAt = without.findIndex((key) => target.SectionKeys.includes(key));\n const next = [...without];\n const at = insertAt >= 0 ? insertAt : next.length;\n next.splice(at, 0, ...dragged.SectionKeys);\n return next;\n}\n\n/** Collapse rail items that share a humanized title (From/To Relationships). */\nexport function MergeChromeGroupsByTitle(groups: FormChromeGroup[]): FormChromeGroup[] {\n const merged: FormChromeGroup[] = [];\n const byTitle = new Map<string, FormChromeGroup>();\n for (const group of groups) {\n const titleKey = group.Title.trim().toLowerCase();\n const existing = byTitle.get(titleKey);\n if (!existing) {\n const copy: FormChromeGroup = { ...group, SectionKeys: [...group.SectionKeys] };\n byTitle.set(titleKey, copy);\n merged.push(copy);\n continue;\n }\n for (const key of group.SectionKeys) {\n if (!existing.SectionKeys.includes(key)) {\n existing.SectionKeys.push(key);\n }\n }\n }\n return merged;\n}\n\n/**\n * Apply a persisted user membership (move in/out of More) onto a spec\n * in place. Always-more sections (System Metadata) cannot leave More.\n */\nexport function ApplyUserChromeMembership(\n spec: FormChromeSpec,\n override: ChromeMembershipOverride | null | undefined,\n panels: readonly FormChromePanelSnapshot[] = [],\n): FormChromeSpec {\n if (!override) return spec;\n const userMore = override.moreSectionKeys ?? [];\n const userFirst = override.firstClassSectionKeys ?? [];\n if (userMore.length === 0 && userFirst.length === 0) return spec;\n\n const more = new Set(spec.MoreSectionKeys);\n for (const key of userMore) {\n if (key) more.add(key);\n }\n const panelByKey = new Map(panels.map((p) => [p.SectionKey, p]));\n for (const key of userFirst) {\n if (!key) continue;\n const panel = panelByKey.get(key);\n if (!IsAlwaysMoreSection(key, panel?.SectionName)) {\n more.delete(key);\n }\n }\n for (const panel of panels) {\n if (IsAlwaysMoreSection(panel.SectionKey, panel.SectionName)) {\n more.add(panel.SectionKey);\n }\n }\n for (const key of spec.MoreSectionKeys) {\n if (IsAlwaysMoreSection(key)) more.add(key);\n }\n\n return RebuildChromeSpecMembership(spec, [...more], panels);\n}\n\n/** Rebuild Groups / MoreSectionKeys after membership changes. Layout is unchanged. */\nexport function RebuildChromeSpecMembership(\n spec: FormChromeSpec,\n moreKeys: readonly string[],\n panels: readonly FormChromePanelSnapshot[] = [],\n): FormChromeSpec {\n const moreSet = new Set(moreKeys);\n const panelByKey = new Map(panels.map((p) => [p.SectionKey, p]));\n const groups: FormChromeGroup[] = [];\n\n for (const group of spec.Groups) {\n if (group.IsMore) continue;\n const stay = group.SectionKeys.filter((key) => !moreSet.has(key));\n if (stay.length === 0) continue;\n groups.push({ ...group, SectionKeys: stay });\n }\n\n const firstClass = new Set(groups.flatMap((g) => g.SectionKeys));\n const allKnown = new Set<string>([\n ...spec.Groups.flatMap((g) => g.SectionKeys),\n ...spec.MoreSectionKeys,\n ...moreKeys,\n ]);\n for (const key of allKnown) {\n if (!key || moreSet.has(key) || firstClass.has(key)) continue;\n const panel = panelByKey.get(key);\n groups.push({\n Key: key,\n Title: HumanizeEntityTitle(panel?.SectionName || key),\n Icon: panel?.Icon?.trim() || 'fa-solid fa-table',\n SectionKeys: [key],\n IsMore: false,\n });\n firstClass.add(key);\n }\n\n appendMoreGroup(groups, [...moreSet]);\n spec.Groups = groups;\n spec.MoreSectionKeys = [...moreSet];\n return spec;\n}\n\n/** Prefer EntityRelationship.DisplayName on single-key related groups. */\nfunction applyRelatedDisplayNames(spec: FormChromeSpec, entity: EntityInfo): void {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n for (const rel of displayInForm) {\n const name = rel.DisplayName?.trim();\n if (!name) continue;\n const sectionKey = RelatedEntitySectionKey(rel, displayInForm);\n const group = spec.Groups.find((g) => !g.IsMore && g.SectionKeys.length === 1 && g.SectionKeys[0] === sectionKey);\n if (group) group.Title = name;\n }\n}\n\nfunction appendMoreGroup(groups: FormChromeGroup[], moreKeys: string[]): void {\n if (moreKeys.length === 0) return;\n const existing = groups.find((g) => g.IsMore);\n if (existing) {\n existing.SectionKeys = moreKeys;\n return;\n }\n groups.push({\n Key: MORE_SECTION_KEY,\n Title: 'More',\n Icon: 'fa-solid fa-ellipsis',\n SectionKeys: moreKeys,\n IsMore: true,\n });\n}\n\nfunction mapRelatedRoles(\n entity: EntityInfo,\n assignments: readonly RelatedFormRoleAssignment[],\n): Map<string, FormRole> {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const byId = new Map(assignments.map((a) => [a.RelationshipID.toLowerCase(), a]));\n const roles = new Map<string, FormRole>();\n for (const rel of displayInForm) {\n const assignment = byId.get((rel.ID ?? '').toLowerCase());\n if (!assignment) continue;\n const sectionKey = RelatedEntitySectionKey(rel, displayInForm);\n roles.set(sectionKey, assignment.Role);\n }\n return roles;\n}\n\nfunction toCandidate(\n rel: EntityRelationshipInfo,\n relatedSchemaByEntityId: ReadonlyMap<string, string>,\n inboundCountByRelatedEntityId: ReadonlyMap<string, number> = new Map(),\n): RelatedFormRoleCandidate {\n const relatedId = rel.RelatedEntityID ?? '';\n const schema = relatedSchemaByEntityId.get(relatedId.toLowerCase())\n ?? relatedSchemaByEntityId.get(relatedId)\n ?? '';\n const inbound = inboundCountByRelatedEntityId.get(relatedId.toLowerCase())\n ?? inboundCountByRelatedEntityId.get(relatedId);\n return {\n ID: rel.ID,\n RelatedEntity: rel.RelatedEntity,\n RelatedEntityID: rel.RelatedEntityID,\n RelatedEntityJoinField: rel.RelatedEntityJoinField,\n RelatedEntitySchemaName: schema,\n DisplayInForm: rel.DisplayInForm,\n DisplayLocation: rel.DisplayLocation,\n DisplayComponentID: rel.DisplayComponentID,\n RelatedRecordCollection: rel.RelatedRecordCollection,\n JoinView: rel.JoinView,\n Type: rel.Type,\n Sequence: rel.Sequence,\n Configuration: rel.Configuration,\n InboundRelationshipCount: inbound,\n };\n}\n\n/** First-class rail: lead contributions, then Details, then related by Primary/score. */\nfunction sortFirstClassRelatedGroups(\n spec: FormChromeSpec,\n entity: EntityInfo,\n assignments: readonly RelatedFormRoleAssignment[],\n contributionSectionKeys: readonly string[] = [],\n leadKeys: readonly string[] = [],\n sortKeyByKey: ReadonlyMap<string, number> = new Map(),\n): void {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const byId = new Map(assignments.map((a) => [a.RelationshipID.toLowerCase(), a]));\n const scoreByKey = new Map<string, number>();\n const explicitPrimary = new Set<string>();\n const contrib = new Set(contributionSectionKeys);\n const leadSet = new Set(leadKeys);\n for (const rel of displayInForm) {\n const assignment = byId.get((rel.ID ?? '').toLowerCase());\n if (!assignment) continue;\n const key = RelatedEntitySectionKey(rel, displayInForm);\n const current = scoreByKey.get(key);\n scoreByKey.set(key, current == null ? assignment.Score : Math.max(current, assignment.Score));\n if (assignment.Reason === 'explicit-primary') explicitPrimary.add(key);\n }\n for (const key of contrib) {\n scoreByKey.set(key, (scoreByKey.get(key) ?? 0) + 150);\n }\n\n const details = spec.Groups.filter((g) => g.Key === DETAILS_SECTION_KEY);\n const more = spec.Groups.filter((g) => g.IsMore);\n const firstClass = spec.Groups.filter((g) => !g.IsMore && g.Key !== DETAILS_SECTION_KEY);\n const leads: FormChromeGroup[] = [];\n const related: FormChromeGroup[] = [];\n for (const group of firstClass) {\n if (group.SectionKeys.some((key) => leadSet.has(key))) {\n group.IsLead = true;\n leads.push(group);\n } else {\n related.push(group);\n }\n }\n const combinedSort = mergeRelatedSortKeys(entity, displayInForm, sortKeyByKey);\n leads.sort((a, b) => groupSortKey(b, combinedSort) - groupSortKey(a, combinedSort));\n related.sort((a, b) => {\n const aSort = groupSortKey(a, combinedSort);\n const bSort = groupSortKey(b, combinedSort);\n if (aSort !== bSort) return bSort - aSort;\n const aExplicit = a.SectionKeys.some((key) => explicitPrimary.has(key));\n const bExplicit = b.SectionKeys.some((key) => explicitPrimary.has(key));\n if (aExplicit !== bExplicit) return aExplicit ? -1 : 1;\n return groupScore(b, scoreByKey) - groupScore(a, scoreByKey);\n });\n spec.Groups = [...leads, ...details, ...related, ...more];\n}\n\nfunction mergeRelatedSortKeys(\n entity: EntityInfo,\n displayInForm: readonly EntityRelationshipInfo[],\n contributionSortKeyByKey: ReadonlyMap<string, number>,\n): Map<string, number> {\n const merged = new Map(contributionSortKeyByKey);\n for (const rel of displayInForm) {\n const sort = ReadRelationshipSortKey(rel.Configuration);\n if (sort == null) continue;\n const key = RelatedEntitySectionKey(rel, displayInForm);\n const current = merged.get(key);\n merged.set(key, current == null ? sort : Math.max(current, sort));\n }\n return merged;\n}\n\nfunction groupSortKey(group: FormChromeGroup, sortKeyByKey: ReadonlyMap<string, number>): number {\n let max = Number.NEGATIVE_INFINITY;\n for (const key of group.SectionKeys) {\n const value = sortKeyByKey.get(key);\n if (value != null && value > max) max = value;\n }\n return max === Number.NEGATIVE_INFINITY ? 0 : max;\n}\n\nfunction noneInclusionSectionKeys(\n entity: EntityInfo,\n assignments: readonly RelatedFormRoleAssignment[],\n): string[] {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const noneIds = new Set(\n assignments.filter((a) => a.Inclusion === 'None').map((a) => a.RelationshipID.toLowerCase()),\n );\n return displayInForm\n .filter((rel) => noneIds.has((rel.ID ?? '').toLowerCase()))\n .map((rel) => RelatedEntitySectionKey(rel, displayInForm));\n}\n\nfunction displayInFormFalseSectionKeys(entity: EntityInfo): string[] {\n const all = entity.RelatedEntities ?? [];\n return all\n .filter((rel) => !rel.DisplayInForm)\n .map((rel) => RelatedEntitySectionKey(rel, all));\n}\n\n/**\n * Collapse first-class groups that are the same related entity on different\n * join fields (Bill-To Orders + Ship-To Orders → one Orders rail item).\n */\nfunction mergeRelatedGroupsByEntity(spec: FormChromeSpec, entity: EntityInfo): void {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const entityIdByKey = new Map<string, string>();\n const titleByEntityId = new Map<string, string>();\n for (const rel of displayInForm) {\n const key = RelatedEntitySectionKey(rel, displayInForm);\n const id = (rel.RelatedEntityID ?? '').toLowerCase();\n if (!id) continue;\n entityIdByKey.set(key, id);\n const named = rel.DisplayName?.trim();\n if (named) titleByEntityId.set(id, named);\n else if (!titleByEntityId.has(id)) {\n titleByEntityId.set(id, HumanizeEntityTitle(rel.RelatedEntity));\n }\n }\n\n const details = spec.Groups.filter((g) => g.Key === DETAILS_SECTION_KEY);\n const more = spec.Groups.filter((g) => g.IsMore);\n const related = spec.Groups.filter((g) => !g.IsMore && g.Key !== DETAILS_SECTION_KEY);\n const merged: FormChromeGroup[] = [];\n const byEntity = new Map<string, FormChromeGroup>();\n\n for (const group of related) {\n const entityId = group.SectionKeys\n .map((key) => entityIdByKey.get(key))\n .find((id): id is string => !!id);\n if (!entityId) {\n merged.push(group);\n continue;\n }\n const existing = byEntity.get(entityId);\n if (!existing) {\n const copy: FormChromeGroup = {\n ...group,\n Title: titleByEntityId.get(entityId) || group.Title,\n SectionKeys: [...group.SectionKeys],\n };\n byEntity.set(entityId, copy);\n merged.push(copy);\n continue;\n }\n for (const key of group.SectionKeys) {\n if (!existing.SectionKeys.includes(key)) existing.SectionKeys.push(key);\n }\n const preferred = titleByEntityId.get(entityId);\n if (preferred) existing.Title = preferred;\n }\n\n spec.Groups = [...details, ...merged, ...more];\n}\n\nfunction groupScore(group: FormChromeGroup, scoreByKey: ReadonlyMap<string, number>): number {\n let max = Number.NEGATIVE_INFINITY;\n for (const key of group.SectionKeys) {\n const score = scoreByKey.get(key);\n if (score != null && score > max) max = score;\n }\n return max === Number.NEGATIVE_INFINITY ? 0 : max;\n}\n\nfunction addMissingRelatedGroups(\n spec: FormChromeSpec,\n entity: EntityInfo,\n relatedRoles: ReadonlyMap<string, FormRole>,\n hiddenSectionKeys: ReadonlySet<string> = new Set(),\n): void {\n const displayInForm = entity.RelatedEntities.filter((rel) => rel.DisplayInForm);\n const known = new Set<string>([\n ...spec.Groups.flatMap((g) => g.SectionKeys),\n ...spec.MoreSectionKeys,\n ...hiddenSectionKeys,\n ]);\n\n for (const rel of displayInForm) {\n const sectionKey = RelatedEntitySectionKey(rel, displayInForm);\n if (known.has(sectionKey) || hiddenSectionKeys.has(sectionKey)) continue;\n const role = relatedRoles.get(sectionKey);\n if (role === 'Detail') {\n spec.MoreSectionKeys.push(sectionKey);\n known.add(sectionKey);\n continue;\n }\n if (role === 'Primary') {\n const title = HumanizeEntityTitle(rel.DisplayName?.trim() || rel.RelatedEntity);\n const existing = spec.Groups.find(\n (g) => !g.IsMore && g.Title.trim().toLowerCase() === title.toLowerCase(),\n );\n if (existing) {\n existing.SectionKeys.push(sectionKey);\n } else {\n spec.Groups.push({\n Key: sectionKey,\n Title: title,\n Icon: relatedRailIcon(rel),\n SectionKeys: [sectionKey],\n IsMore: false,\n });\n }\n known.add(sectionKey);\n }\n }\n\n appendMoreGroup(spec.Groups, spec.MoreSectionKeys);\n\n spec.Layout = ResolveFormLayout(entity.ConfigurationObject?.UI?.Form ?? null, spec.Groups.length);\n}\n\nfunction countFirstClass(spec: FormChromeSpec): number {\n return spec.Groups.length;\n}\n"]}
|
|
@@ -2,14 +2,16 @@ import { EventEmitter, QueryList, AfterContentInit, OnDestroy } from '@angular/c
|
|
|
2
2
|
import { BaseEntity, EntityInfo } from '@memberjunction/core';
|
|
3
3
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
4
4
|
import { FormToolbarConfig } from '../types/toolbar-config';
|
|
5
|
+
import { FormToolbarItemConfig, FormToolbarItemClickEventArgs } from '../types/form-toolbar-item';
|
|
5
6
|
import { FormNavigationEvent } from '../types/navigation-events';
|
|
6
7
|
import { FormWidthMode } from '../types/form-types';
|
|
7
8
|
import { MjCollapsiblePanelComponent } from '../panel/collapsible-panel.component';
|
|
8
|
-
import { SectionManagerItem } from '../section-manager/section-manager.component';
|
|
9
|
-
import { BeforeSaveEventArgs, BeforeDeleteEventArgs, BeforeCancelEventArgs, BeforeHistoryViewEventArgs, BeforeListManagementEventArgs, CustomToolbarButtonClickEventArgs } from '../types/form-events';
|
|
9
|
+
import { SectionManagerItem, ChromeMembershipChange } from '../section-manager/section-manager.component';
|
|
10
|
+
import { BeforeSaveEventArgs, BeforeDeleteEventArgs, BeforeRefreshEventArgs, BeforeCancelEventArgs, BeforeHistoryViewEventArgs, BeforeListManagementEventArgs, CustomToolbarButtonClickEventArgs, BeforeLayoutResolveEventArgs, AfterLayoutResolvedEventArgs, BeforeSectionActivateEventArgs, AfterSectionActivatedEventArgs } from '../types/form-events';
|
|
10
11
|
import { BaseFormComponent } from '../base-form-component';
|
|
11
12
|
import { RestoreVersionEvent } from '@memberjunction/ng-record-changes';
|
|
12
13
|
import { ListManagementResult } from '@memberjunction/ng-list-management';
|
|
14
|
+
import type { FormChromeGroup } from '../chrome/form-chrome';
|
|
13
15
|
import * as i0 from "@angular/core";
|
|
14
16
|
/**
|
|
15
17
|
* Display shape for the variant picker. Kept minimal so the Generic
|
|
@@ -56,8 +58,15 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
56
58
|
private cdr;
|
|
57
59
|
private ngZone;
|
|
58
60
|
private notificationService;
|
|
61
|
+
private chrome;
|
|
62
|
+
private slots;
|
|
63
|
+
private recordRefresh;
|
|
64
|
+
private host;
|
|
59
65
|
private destroy$;
|
|
60
66
|
private panelNavReset$;
|
|
67
|
+
private chromeResolveTimer;
|
|
68
|
+
private chromeRules;
|
|
69
|
+
private chromeRulesForEntityId;
|
|
61
70
|
/** Reference to the record changes drawer (when visible) for triggering refresh after save */
|
|
62
71
|
private recordChangesDrawer?;
|
|
63
72
|
/** Controls visibility of record changes drawer */
|
|
@@ -69,12 +78,30 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
69
78
|
private static readonly TAGS_WIDTH_KEY;
|
|
70
79
|
/** Number of tags on this record */
|
|
71
80
|
TagCount: number;
|
|
81
|
+
/** Controls visibility of attachments slide panel */
|
|
82
|
+
ShowAttachmentsPanel: boolean;
|
|
83
|
+
/** Number of attachments linked to this record */
|
|
84
|
+
AttachmentCount: number;
|
|
72
85
|
/** Number of tracked record change versions for this record */
|
|
73
86
|
VersionCount: number;
|
|
74
87
|
/** Controls visibility of list management dialog */
|
|
75
88
|
ShowListManagement: boolean;
|
|
76
89
|
/** Controls visibility of section manager drawer */
|
|
77
90
|
ShowSectionManager: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Persisted per entity. Pinned (default) keeps the left rail open.
|
|
93
|
+
* Unpinned auto-collapses after the user picks another section.
|
|
94
|
+
*/
|
|
95
|
+
ChromeRailPinned: boolean;
|
|
96
|
+
/** Session-only: the rail is showing its items. Follows pin on load. */
|
|
97
|
+
private chromeRailExpanded;
|
|
98
|
+
/** Expanded rail width in px. Persisted per entity. */
|
|
99
|
+
ChromeRailWidthPx: number;
|
|
100
|
+
readonly RailWidthMin = 160;
|
|
101
|
+
readonly RailWidthMax = 360;
|
|
102
|
+
RailResizing: boolean;
|
|
103
|
+
private railResizeStartX;
|
|
104
|
+
private railResizeStartWidth;
|
|
78
105
|
/** The entity record being displayed/edited */
|
|
79
106
|
Record: BaseEntity;
|
|
80
107
|
/**
|
|
@@ -93,7 +120,10 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
93
120
|
DirtyFieldNames: string[];
|
|
94
121
|
ListCount: number;
|
|
95
122
|
IsSaving: boolean;
|
|
123
|
+
IsRefreshing: boolean;
|
|
96
124
|
ToolbarConfig: FormToolbarConfig;
|
|
125
|
+
RegisteredToolbarItems: FormToolbarItemConfig[];
|
|
126
|
+
ToolbarItemOverrides: ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null;
|
|
97
127
|
WidthMode: FormWidthMode;
|
|
98
128
|
/**
|
|
99
129
|
* Variants available for this entity record. When more than one variant is
|
|
@@ -129,6 +159,10 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
129
159
|
BeforeDelete: EventEmitter<BeforeDeleteEventArgs>;
|
|
130
160
|
/** Emitted when delete is confirmed (host app handles actual deletion) */
|
|
131
161
|
DeleteRequested: EventEmitter<void>;
|
|
162
|
+
/** Emitted BEFORE refresh - can be cancelled by setting event.Cancel = true */
|
|
163
|
+
BeforeRefresh: EventEmitter<BeforeRefreshEventArgs>;
|
|
164
|
+
/** Emitted when refresh is requested (only in standalone mode) */
|
|
165
|
+
RefreshRequested: EventEmitter<void>;
|
|
132
166
|
/** Emitted when favorite toggle is requested */
|
|
133
167
|
FavoriteToggled: EventEmitter<void>;
|
|
134
168
|
/** Emitted BEFORE history view - can be cancelled by setting event.Cancel = true */
|
|
@@ -143,6 +177,8 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
143
177
|
ShowChangesRequested: EventEmitter<void>;
|
|
144
178
|
/** Emitted when a custom toolbar button is clicked */
|
|
145
179
|
CustomButtonClick: EventEmitter<CustomToolbarButtonClickEventArgs>;
|
|
180
|
+
/** Emitted when any toolbar item (standard or custom) is clicked */
|
|
181
|
+
ToolbarItemClick: EventEmitter<FormToolbarItemClickEventArgs>;
|
|
146
182
|
/**
|
|
147
183
|
* Emitted when the user chooses a different form variant from the picker.
|
|
148
184
|
* Carries the selected variant's override ID, or null when the user picks
|
|
@@ -151,9 +187,13 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
151
187
|
* the new form mounts.
|
|
152
188
|
*/
|
|
153
189
|
VariantChange: EventEmitter<string | null>;
|
|
190
|
+
BeforeLayoutResolve: EventEmitter<BeforeLayoutResolveEventArgs>;
|
|
191
|
+
AfterLayoutResolved: EventEmitter<AfterLayoutResolvedEventArgs>;
|
|
192
|
+
BeforeSectionActivate: EventEmitter<BeforeSectionActivateEventArgs>;
|
|
193
|
+
AfterSectionActivated: EventEmitter<AfterSectionActivatedEventArgs>;
|
|
154
194
|
Panels: QueryList<MjCollapsiblePanelComponent>;
|
|
155
195
|
/** Typed accessor for the form component reference */
|
|
156
|
-
|
|
196
|
+
get fc(): BaseFormComponent | null;
|
|
157
197
|
get EffectiveRecord(): BaseEntity;
|
|
158
198
|
get EffectiveEditMode(): boolean;
|
|
159
199
|
get EffectiveUserCanEdit(): boolean;
|
|
@@ -164,6 +204,7 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
164
204
|
get EffectiveIsDirty(): boolean;
|
|
165
205
|
get EffectiveDirtyFieldNames(): string[];
|
|
166
206
|
get EffectiveIsSaving(): boolean;
|
|
207
|
+
get EffectiveIsRefreshing(): boolean;
|
|
167
208
|
get EffectiveWidthMode(): FormWidthMode;
|
|
168
209
|
/**
|
|
169
210
|
* Whether the in-form toolbar renders at all. Driven by the form's
|
|
@@ -179,20 +220,114 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
179
220
|
* yet per-instance toolbar tweaks still take effect through `fc.Config`.
|
|
180
221
|
*/
|
|
181
222
|
get EffectiveToolbarConfig(): FormToolbarConfig;
|
|
223
|
+
get EffectiveRegisteredToolbarItems(): FormToolbarItemConfig[];
|
|
224
|
+
get EffectiveToolbarItemOverrides(): ReadonlyMap<string, Partial<FormToolbarItemConfig>> | null;
|
|
182
225
|
get EffectiveSearchFilter(): string;
|
|
183
226
|
get EffectiveShowEmptyFields(): boolean;
|
|
184
227
|
get EffectiveHasCustomSectionOrder(): boolean;
|
|
185
228
|
get TotalSectionCount(): number;
|
|
186
229
|
get VisibleSectionCount(): number;
|
|
230
|
+
/** True when the current section search matches nothing in this layout. */
|
|
231
|
+
get SearchHasNoMatches(): boolean;
|
|
232
|
+
/** Left-nav rail stays up while searching even if only one group matches. */
|
|
233
|
+
get ShowChromeRail(): boolean;
|
|
234
|
+
/**
|
|
235
|
+
* SectionKeys of related-entity panels projected into the container
|
|
236
|
+
* (CodeGen-baked or hand-written). View-children we mount as fill-ins are
|
|
237
|
+
* not in this ContentChildren list.
|
|
238
|
+
*/
|
|
239
|
+
get BakedRelatedSectionKeys(): string[];
|
|
240
|
+
get EffectiveShowRelatedEntities(): boolean;
|
|
241
|
+
get ChromeLayout(): 'accordion' | 'left-nav';
|
|
242
|
+
get ChromeGroups(): FormChromeGroup[];
|
|
243
|
+
get ChromeFirstClassGroups(): FormChromeGroup[];
|
|
244
|
+
get ChromeMoreFolder(): FormChromeGroup | null;
|
|
245
|
+
get ChromeMoreItems(): FormChromeGroup[];
|
|
246
|
+
get ChromeActiveGroupKey(): string | null;
|
|
247
|
+
get ChromeActiveGroup(): FormChromeGroup | null;
|
|
248
|
+
get ChromeActiveTitle(): string;
|
|
249
|
+
get ChromeActiveIcon(): string;
|
|
250
|
+
/**
|
|
251
|
+
* True when the rail is the thin rotated strip. Search keeps the full
|
|
252
|
+
* list visible so matches stay clickable.
|
|
253
|
+
*/
|
|
254
|
+
get ChromeRailCollapsed(): boolean;
|
|
255
|
+
get IsChromeMoreActive(): boolean;
|
|
256
|
+
get ChromeReorderAllowed(): boolean;
|
|
257
|
+
get ShowMoreToggle(): boolean;
|
|
258
|
+
get MoreExpanded(): boolean;
|
|
259
|
+
get MorePreview(): string;
|
|
187
260
|
get ExpandedSectionCount(): number;
|
|
188
261
|
/** Whether the current record has IS-A related items to display in the side panel */
|
|
189
262
|
get HasIsaRelatedItems(): boolean;
|
|
190
263
|
/** Builds section info array from projected panels for the section manager drawer */
|
|
191
264
|
get SectionManagerItems(): SectionManagerItem[];
|
|
265
|
+
get SectionManagerMoreKeys(): string[];
|
|
266
|
+
get SectionManagerLockedMoreKeys(): string[];
|
|
192
267
|
/** Current section order from the form component */
|
|
193
268
|
get SectionManagerOrder(): string[];
|
|
269
|
+
/**
|
|
270
|
+
* Rail display order. `getSectionOrder()` falls back to generated
|
|
271
|
+
* `form.sections` — those keys match Details + baked related grids, not
|
|
272
|
+
* slot-mounted leads — so using that fallback parked Overview after
|
|
273
|
+
* Payments. Only a user-persisted custom order may override the resolver.
|
|
274
|
+
*/
|
|
275
|
+
private get chromeRailOrder();
|
|
194
276
|
ngAfterContentInit(): void;
|
|
195
277
|
ngOnDestroy(): void;
|
|
278
|
+
OnMoreFolderToggle(): void;
|
|
279
|
+
ChromeGroupRowCount(group: FormChromeGroup): number | undefined;
|
|
280
|
+
OnChromeGroupActivate(groupKey: string): void;
|
|
281
|
+
OnChromeRailExpand(): void;
|
|
282
|
+
OnChromeRailCollapse(): void;
|
|
283
|
+
OnChromeRailPinToggle(): void;
|
|
284
|
+
OnRailResizeStart(event: PointerEvent): void;
|
|
285
|
+
OnRailResizeMove(event: PointerEvent): void;
|
|
286
|
+
OnRailResizeEnd(): void;
|
|
287
|
+
OnRailLabelHover(event: MouseEvent, text: string): void;
|
|
288
|
+
RailDragOverKey: string | null;
|
|
289
|
+
OnRailDragStart(event: DragEvent, groupKey: string): void;
|
|
290
|
+
OnRailDragEnd(): void;
|
|
291
|
+
OnRailDragOver(event: DragEvent, groupKey: string): void;
|
|
292
|
+
OnRailDragLeave(_event: DragEvent, groupKey: string): void;
|
|
293
|
+
OnRailDrop(event: DragEvent, targetKey: string): void;
|
|
294
|
+
OnMoreToggle(): void;
|
|
295
|
+
private scheduleChromeResolve;
|
|
296
|
+
private loadChromeRulesIfNeeded;
|
|
297
|
+
private loadChromeRules;
|
|
298
|
+
private ResolveChrome;
|
|
299
|
+
private expandActiveGroupSections;
|
|
300
|
+
private ensureActiveGroupVisible;
|
|
301
|
+
private groupMatchesSearch;
|
|
302
|
+
private moreItemFromKey;
|
|
303
|
+
private allChromePanels;
|
|
304
|
+
private applyChromeVisibility;
|
|
305
|
+
/**
|
|
306
|
+
* Slot-mounted panels are view children of the slot, not ContentChildren
|
|
307
|
+
* of this container, and they cannot inject the container-provided
|
|
308
|
+
* coordinator. Toggle host classes on every `mj-collapsible-panel` in
|
|
309
|
+
* the live DOM so left-nav hide/show still reaches them.
|
|
310
|
+
*/
|
|
311
|
+
private applyChromeDomVisibility;
|
|
312
|
+
private isChromeKeyVisible;
|
|
313
|
+
private contributionSectionKeys;
|
|
314
|
+
private contributionChromeGroupByKey;
|
|
315
|
+
private contributionInclusionByKey;
|
|
316
|
+
private contributionSortKeyByKey;
|
|
317
|
+
/**
|
|
318
|
+
* Winning registration per contribution key (highest ClassFactory Priority).
|
|
319
|
+
* Headers are not rail sections.
|
|
320
|
+
*/
|
|
321
|
+
private contributionRegistrations;
|
|
322
|
+
private contributionHiddenSectionKeys;
|
|
323
|
+
private chromePanelSnapshots;
|
|
324
|
+
private domPanelSnapshots;
|
|
325
|
+
private hiddenChromeSectionKeys;
|
|
326
|
+
private buildRelatedSchemaMap;
|
|
327
|
+
private buildInboundRelationshipCounts;
|
|
328
|
+
private chromePrefKey;
|
|
329
|
+
private RestoreChromePrefs;
|
|
330
|
+
private PersistChromePrefs;
|
|
196
331
|
/**
|
|
197
332
|
* Subscribes to Navigate events from all child collapsible panels
|
|
198
333
|
* and relays them through this container's Navigate output.
|
|
@@ -204,11 +339,21 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
204
339
|
*/
|
|
205
340
|
private watchRecordChanges;
|
|
206
341
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
342
|
+
* Whether the attachments feature is available for the current record.
|
|
343
|
+
* True when record is saved and entity allows attachments (default true).
|
|
344
|
+
*/
|
|
345
|
+
get AttachmentsAvailable(): boolean;
|
|
346
|
+
/**
|
|
347
|
+
* Loads tag count, attachment count, and record change version count for toolbar badges.
|
|
348
|
+
* All queries run in parallel for performance.
|
|
209
349
|
*/
|
|
210
350
|
private badgeCountsLoaded;
|
|
211
351
|
private LoadBadgeCounts;
|
|
352
|
+
/**
|
|
353
|
+
* Queries the count of linked attachments for the current entity + record
|
|
354
|
+
* and updates the AttachmentCount badge on the toolbar.
|
|
355
|
+
*/
|
|
356
|
+
private LoadAttachmentCount;
|
|
212
357
|
/**
|
|
213
358
|
* Queries the count of tagged items for the current entity + record
|
|
214
359
|
* and updates the TagCount badge on the toolbar.
|
|
@@ -241,6 +386,18 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
241
386
|
* Cancel: delegate to FormComponent if available, otherwise re-emit.
|
|
242
387
|
*/
|
|
243
388
|
OnCancelRequested(): void;
|
|
389
|
+
/**
|
|
390
|
+
* Refresh: delegate to FormComponent if available, otherwise re-emit.
|
|
391
|
+
* Badge reload + related-grid fan-out happen on `RecordRefreshed` so
|
|
392
|
+
* `host.Refresh()` (which calls `RefreshRecord()` directly) still notifies.
|
|
393
|
+
*/
|
|
394
|
+
OnRefreshRequested(): Promise<void>;
|
|
395
|
+
/**
|
|
396
|
+
* After the form reloads the parent record: refresh chrome that is not
|
|
397
|
+
* the record itself (badges, open history drawer) and broadcast to
|
|
398
|
+
* in-form listeners (related grids, IS-A panel, custom panels).
|
|
399
|
+
*/
|
|
400
|
+
private OnFormRecordRefreshed;
|
|
244
401
|
/**
|
|
245
402
|
* Delete, Favorite, History, Lists, ShowChanges: always re-emit for host app.
|
|
246
403
|
*/
|
|
@@ -255,6 +412,12 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
255
412
|
*/
|
|
256
413
|
OnTagCountChanged(count: number): void;
|
|
257
414
|
OnTagsPanelWidthChanged(width: number): void;
|
|
415
|
+
OnAttachmentsPanelToggled(): void;
|
|
416
|
+
OnAttachmentsPanelClosed(): void;
|
|
417
|
+
/**
|
|
418
|
+
* Handles live attachment count updates from the attachments panel component.
|
|
419
|
+
*/
|
|
420
|
+
OnAttachmentCountChanged(count: number): void;
|
|
258
421
|
OnTagsRecordNavigate(event: {
|
|
259
422
|
EntityName: string;
|
|
260
423
|
RecordID: string;
|
|
@@ -312,9 +475,10 @@ export declare class MjRecordFormContainerComponent extends BaseAngularComponent
|
|
|
312
475
|
OnVariantPicked(variantID: string | null): void;
|
|
313
476
|
OnManageSections(): void;
|
|
314
477
|
OnSectionOrderChange(newOrder: string[]): void;
|
|
478
|
+
OnChromeMembershipChange(change: ChromeMembershipChange): void;
|
|
315
479
|
OnSectionManagerReset(): void;
|
|
316
480
|
OnSectionManagerClosed(): void;
|
|
317
481
|
static ɵfac: i0.ɵɵFactoryDeclaration<MjRecordFormContainerComponent, never>;
|
|
318
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MjRecordFormContainerComponent, "mj-record-form-container", never, { "Record": { "alias": "Record"; "required": false; }; "FormComponent": { "alias": "FormComponent"; "required": false; }; "EntityInfo": { "alias": "EntityInfo"; "required": false; }; "EditMode": { "alias": "EditMode"; "required": false; }; "UserCanEdit": { "alias": "UserCanEdit"; "required": false; }; "UserCanDelete": { "alias": "UserCanDelete"; "required": false; }; "IsFavorite": { "alias": "IsFavorite"; "required": false; }; "FavoriteInitDone": { "alias": "FavoriteInitDone"; "required": false; }; "IsDirty": { "alias": "IsDirty"; "required": false; }; "DirtyFieldNames": { "alias": "DirtyFieldNames"; "required": false; }; "ListCount": { "alias": "ListCount"; "required": false; }; "IsSaving": { "alias": "IsSaving"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "WidthMode": { "alias": "WidthMode"; "required": false; }; "Variants": { "alias": "Variants"; "required": false; }; "CurrentVariantID": { "alias": "CurrentVariantID"; "required": false; }; }, { "Navigate": "Navigate"; "EditModeChange": "EditModeChange"; "BeforeSave": "BeforeSave"; "SaveRequested": "SaveRequested"; "BeforeCancel": "BeforeCancel"; "CancelRequested": "CancelRequested"; "BeforeDelete": "BeforeDelete"; "DeleteRequested": "DeleteRequested"; "FavoriteToggled": "FavoriteToggled"; "BeforeHistoryView": "BeforeHistoryView"; "HistoryRequested": "HistoryRequested"; "BeforeListManagement": "BeforeListManagement"; "ListManagementRequested": "ListManagementRequested"; "ShowChangesRequested": "ShowChangesRequested"; "CustomButtonClick": "CustomButtonClick"; "VariantChange": "VariantChange"; }, ["Panels"], ["[before-toolbar]", "*"], false, never>;
|
|
482
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MjRecordFormContainerComponent, "mj-record-form-container", never, { "Record": { "alias": "Record"; "required": false; }; "FormComponent": { "alias": "FormComponent"; "required": false; }; "EntityInfo": { "alias": "EntityInfo"; "required": false; }; "EditMode": { "alias": "EditMode"; "required": false; }; "UserCanEdit": { "alias": "UserCanEdit"; "required": false; }; "UserCanDelete": { "alias": "UserCanDelete"; "required": false; }; "IsFavorite": { "alias": "IsFavorite"; "required": false; }; "FavoriteInitDone": { "alias": "FavoriteInitDone"; "required": false; }; "IsDirty": { "alias": "IsDirty"; "required": false; }; "DirtyFieldNames": { "alias": "DirtyFieldNames"; "required": false; }; "ListCount": { "alias": "ListCount"; "required": false; }; "IsSaving": { "alias": "IsSaving"; "required": false; }; "IsRefreshing": { "alias": "IsRefreshing"; "required": false; }; "ToolbarConfig": { "alias": "ToolbarConfig"; "required": false; }; "RegisteredToolbarItems": { "alias": "RegisteredToolbarItems"; "required": false; }; "ToolbarItemOverrides": { "alias": "ToolbarItemOverrides"; "required": false; }; "WidthMode": { "alias": "WidthMode"; "required": false; }; "Variants": { "alias": "Variants"; "required": false; }; "CurrentVariantID": { "alias": "CurrentVariantID"; "required": false; }; }, { "Navigate": "Navigate"; "EditModeChange": "EditModeChange"; "BeforeSave": "BeforeSave"; "SaveRequested": "SaveRequested"; "BeforeCancel": "BeforeCancel"; "CancelRequested": "CancelRequested"; "BeforeDelete": "BeforeDelete"; "DeleteRequested": "DeleteRequested"; "BeforeRefresh": "BeforeRefresh"; "RefreshRequested": "RefreshRequested"; "FavoriteToggled": "FavoriteToggled"; "BeforeHistoryView": "BeforeHistoryView"; "HistoryRequested": "HistoryRequested"; "BeforeListManagement": "BeforeListManagement"; "ListManagementRequested": "ListManagementRequested"; "ShowChangesRequested": "ShowChangesRequested"; "CustomButtonClick": "CustomButtonClick"; "ToolbarItemClick": "ToolbarItemClick"; "VariantChange": "VariantChange"; "BeforeLayoutResolve": "BeforeLayoutResolve"; "AfterLayoutResolved": "AfterLayoutResolved"; "BeforeSectionActivate": "BeforeSectionActivate"; "AfterSectionActivated": "AfterSectionActivated"; }, ["Panels"], ["[before-toolbar]", "*"], false, never>;
|
|
319
483
|
}
|
|
320
484
|
//# sourceMappingURL=record-form-container.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-form-container.component.d.ts","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAErB,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAExD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"record-form-container.component.d.ts","sourceRoot":"","sources":["../../../src/lib/container/record-form-container.component.ts"],"names":[],"mappings":"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"}
|