@wildo-ai/presets-components 1.1.5 → 1.1.7
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/esm/.native.tsbuildinfo +1 -0
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +5 -2
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
- package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.d.ts +108 -13
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js +60 -10
- package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.js +17 -23
- package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +27 -0
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.js +5 -2
- package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js +3 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.js +8 -4
- package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js +7 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.js +6 -3
- package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js +2 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.js +18 -4
- package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.js +13 -14
- package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js +1 -0
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.js +6 -1
- package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
- package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +51 -12
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
- package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
- package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
- package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
- package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +9 -0
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/form/combobox.d.ts.map +1 -1
- package/dist/esm/components/form/combobox.js +10 -10
- package/dist/esm/components/form/combobox.js.map +1 -1
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
- package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
- package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
- package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.js +6 -6
- package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.js +27 -9
- package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +3 -3
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
- package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
- package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.js +2 -2
- package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.js +1 -1
- package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
- package/dist/esm/components/sections/stepper.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.js +5 -3
- package/dist/esm/components/sections/stepper.js.map +1 -1
- package/dist/esm/config/preset-navigation.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.js +23 -2
- package/dist/esm/config/preset-navigation.js.map +1 -1
- package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
- package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +147 -61
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +240 -111
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +18 -11
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +48 -16
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/index.d.ts.map +1 -1
- package/dist/esm/config/resources/index.js +9 -2
- package/dist/esm/config/resources/index.js.map +1 -1
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +139 -36
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
- package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.js +20 -0
- package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/security.resource-presets.d.ts +3 -1
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +563 -133
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.js +76 -25
- package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.js +15 -0
- package/dist/esm/registration/register-common-enums.js.map +1 -1
- package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
- package/dist/esm/registration/register-provider-components.js +6 -0
- package/dist/esm/registration/register-provider-components.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +22 -2
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.resource-presets.js","sourceRoot":"","sources":["../../../../../src/config/resources/organizations.resource-presets.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { ResourceUIBehavior, ResourceOperationFrontendConfig } from '@wildo-ai/saas-frontend-lib';\nimport {\n resourceUIBehavior,\n resourceUIBehaviorFrom,\n StandardIconReference,\n ActionVisibility,\n useApplication,\n ResourceLayoutInlineEditDefault,\n CollectionDisplayMode,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n DisplayField,\n DisplayLayout,\n FormField,\n FormLayout,\n ObjectScope,\n RelatedResourceSections,\n Section,\n SummaryLayout,\n SummaryFlow,\n SummaryMeta,\n SummaryTitle,\n} from '@wildo-ai/saas-frontend-lib';\nimport { BadgeSemanticVariant, DisplayChromeMode, EditChromeMode, EnumDisplayMode, SectionMode } from '@wildo-ai/zod-decorators';\nimport {\n Archive,\n ArchiveRestore,\n Ban,\n CirclePause,\n GitBranch,\n Landmark,\n Move,\n Paintbrush,\n Power,\n RotateCcw,\n Send,\n ToggleLeft,\n ToggleRight,\n Trash2,\n UserPlus,\n} from 'lucide-react';\nimport {\n CoreResourceType as R,\n CoreResourceOperation as Op,\n ExternalIdentitySource,\n OrganizationStatus,\n OrganizationMemberStatus,\n OrganizationUnit_Operations,\n OrganizationMembers_Operations,\n OrganizationProfile_Operations,\n Organization_Lifecycle_Operations,\n OrganizationFeatures_Operations,\n organizationResourceConfiguration_InitializationFactory as orgFactory,\n organizationUnitResourceConfiguration_InitializationFactory as orgUnitFactory,\n organizationMembersResourceConfiguration_InitializationFactory as orgMembersFactory,\n organizationProfileResourceConfiguration_InitializationFactory as orgProfileFactory,\n organizationNotificationsResourceConfiguration_InitializationFactory as orgNotificationsFactory,\n organizationPreferencesResourceConfiguration_InitializationFactory as orgPreferencesFactory,\n organizationFeaturesResourceConfiguration_InitializationFactory as orgFeaturesFactory,\n OrganizationSchema,\n OrganizationUnitSchema,\n OrganizationMemberSchema,\n OrganizationProfileSchema,\n OrganizationNotificationsSchema,\n OrganizationPreferencesSchema,\n ScopeFeaturesWithOverridesSchema,\n} from '@wildo-ai/saas-models';\nimport { addressable, notAddressable, apiOnly } from './resource.config.utils';\n\n/**\n * Organizations — Resource frontend presets\n *\n * Domain: ORGANIZATIONS, ORGANIZATION_UNITS, ORGANIZATION_MEMBERS,\n * ORGANIZATION_PROFILES,\n * ORGANIZATION_NOTIFICATIONS, ORGANIZATION_PREFERENCES, ORGANIZATION_FEATURES\n *\n * Enum badges use inline `values` and `showDescription: true` like `billing.resource-presets.tsx`.\n * Layout templates are implemented inline in each resource config.\n */\n\n/**\n * An organization's `type`, offered as a choice among the application's DECLARED organization types (#1032).\n *\n * The type is required and must name a declared type — creation refuses anything else, and a member of an\n * organization whose type names nothing cannot sign in. The declaration is the application's, so the schema cannot\n * carry it as an enum; this reads it from the running application's configuration and hands it to the field. As free\n * text the same field accepted a typo and refused it only after submit.\n *\n * Rendered as a component (layout templates are), so reading the application context here is legal. The field still\n * hides itself on edit forms, where `type` is creation-time identity.\n */\nfunction DeclaredOrganizationTypeFormField(): React.JSX.Element {\n const { appConfig } = useApplication();\n const declaredOrganizationTypes = Object.keys(appConfig.organizationTypes ?? {});\n return <FormField name=\"type\" allowedValues={declaredOrganizationTypes} />;\n}\n\n/**\n * Org lifecycle-transition action config, shared by the main and admin org\n * presets (the same super-admin transitions surface in the main-app settings\n * hub today and will surface in the dedicated admin app later).\n *\n * ACTIVATE/SUSPEND are direct status transitions with no intermediate view, so\n * they are gated purely by their `enabledCondition` (org status). The\n * `WHEN_AVAILABLE` visibility makes each action **vanish** (rather than render\n * disabled) when its precondition is unmet: ACTIVATE shows only on a\n * suspended/expired org, SUSPEND only on an active/trial one. The icon overrides\n * give the custom ops a meaningful glyph instead of the action-bar fallback.\n */\nconst organizationLifecycleOpViews: Array<[Organization_Lifecycle_Operations, ResourceOperationFrontendConfig]> = [\n [Organization_Lifecycle_Operations.ACTIVATE, notAddressable({ iconOverride: Power, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n [Organization_Lifecycle_Operations.SUSPEND, notAddressable({ iconOverride: CirclePause, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // Tenant teardown (WS-A). `request_deletion` is the tenant-facing delete — it REPLACED the\n // org-admin `DELETE` action, which no longer exists as an API door. `hasDescription` because the\n // confirmation copy has to say the thing a delete dialog normally cannot: this is reversible,\n // and until when.\n [Organization_Lifecycle_Operations.REQUEST_DELETION, notAddressable({ iconOverride: Trash2, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // Only ever available on a marked tenant, and only to a platform super-admin — the role gate on\n // the action bar hides it from everyone else, and `WHEN_AVAILABLE` hides it on a live tenant.\n [Organization_Lifecycle_Operations.RESTORE, notAddressable({ iconOverride: RotateCcw, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // #1054 — name this organization as the one that OPERATES the application. Surfaced for the same\n // reason `restore` is: it is an operator door with no other in-product route, and the role gate on\n // the action bar plus `WHEN_AVAILABLE` (the operation is enabled only from ACTIVE) already hide it\n // from everyone it does not concern. `hasDescription` because the confirmation copy must carry what\n // a generic dialog cannot: this is IRREVERSIBLE — there is no demotion door — and it requires a\n // justification that is recorded on the audit trail.\n [Organization_Lifecycle_Operations.PROMOTE_TO_OWNER_ORGANIZATION, notAddressable({ iconOverride: Landmark, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n];\n\nexport function buildOrganizationsMainPresets(): Partial<ResourceUIBehavior> {\n return {\n [R.ORGANIZATIONS]: resourceUIBehavior(orgFactory, OrganizationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.ORGANIZATION,\n layout: {\n // NO section refs on the display side. The pane is one flat list of rows, so it names no\n // slot: a `<Section>` is a THREE-PLACE obligation — the JSX name, this manifest, and a\n // documented slot in the resource specification — and what it buys is a heading. \"Overview\"\n // over the only group on a page is a heading that says nothing the page does not.\n // `overview` survives for the EDIT form, which still groups.\n refs: { sections: ['overview'] },\n // Settings-page chrome: shown in the Settings Hub (General). Read + edit render as\n // label-left / value-right rows; the list/summary stays compact.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.INLINE, edit: EditChromeMode.SETTINGS_ROW },\n // Organization general settings. A settings pane is a list of decisions an operator came to TAKE, so its\n // writable fields are offered in place rather than behind a whole-pane edit mode. The set is\n // DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field\n // added to this schema tomorrow is covered without anyone remembering to decorate it.\n defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,\n // And its empty rows say WHICH emptiness they are — \"None yet\" for a list with no members,\n // \"Not available\" for a computed value, \"No value\" for a field awaiting input — instead of one\n // em dash standing for all three. The surface policy's dash is right where a reader is scanning;\n // on a settings row, which is read one at a time to decide something, it is an answer that\n // refuses to answer.\n defaultEmptyValue: 'placeholder',\n display: () => (\n <DisplayLayout>\n {/*\n One flat list of rows, no `<Section>` at all.\n\n It was two: an \"Overview\" card of four fields and a \"Lifecycle\" section holding\n `createdAt` and nothing else. A section of one row is not a grouping, it is a heading\n with a row under it — and \"Overview\" over the only other group named the PAGE rather\n than a part of it. Neither heading distinguished anything, so both are gone and the\n rows read as what they are: the four facts about this organization.\n\n `name` is gone from the body too. The pane's own title IS the organization's name, so\n the first row repeated it back with a label on it.\n */}\n <DisplayField name=\"slug\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"createdAt\" />\n {/*\n The organization's own children, named here rather than curated\n through per-edge relationship config.\n\n Placing them makes this template OWN the child region: automatic\n composition stands down, so the tenant's APPLICATION resources\n (todo lists, todos, tasks — org-scoped, and therefore owned children\n of every organization) stop appearing as tabs on an engine admin\n surface that only ever intended these three. That leak was the\n price of composing every owned child by default; naming them is\n what removes it, and it removes the ~16 `hidden: true` opt-outs\n that used to say the same thing edge by edge.\n\n Titles come from each child resource's own header label, so this\n adds no `layout.refs` entry and no specification slot.\n */}\n {/*\n `targets={[]}` — this pane composes NO children, which is a different statement from a\n template that never mentioned them: it still CLAIMS the child region, so the automatic\n block stands down and the tenant's application resources (todo lists, todos, tasks —\n org-scoped, and therefore owned children of every organization) do not reappear as tabs\n on an engine admin surface. That claim is the whole reason this stays.\n\n All three former targets have their own rail entry — Members, Teams, Entitlements — so\n embedding them here made one surface reachable two ways, and made a record ABOUT the\n tenant into a container OF three populations.\n */}\n <RelatedResourceSections config={{ mode: SectionMode.TABS }} targets={[]} />\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"slug\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"createdAt\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"name\" />\n <FormField name=\"slug\" />\n <FormField name=\"status\" />\n <DeclaredOrganizationTypeFormField />\n </Section>\n </FormLayout>\n ),\n },\n fields: {\n status: schemaShape.status.enumUI({\n // No description on the READ surface: the badge already IS the answer, and the per-value\n // sentence under it is a paragraph explaining a word the reader has just read — the\n // tallest thing on a settings row for the least it says. EDIT keeps it, because there the\n // reader is CHOOSING between values and the sentence is what distinguishes them.\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: false },\n edit: { showDescription: true },\n values: {\n [OrganizationStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OrganizationStatus.SUSPENDED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n [OrganizationStatus.TRIAL]: { color: BadgeSemanticVariant.INFO },\n [OrganizationStatus.TRIAL_EXPIRED]: { color: BadgeSemanticVariant.WARNING },\n [OrganizationStatus.CANCELLED]: { color: BadgeSemanticVariant.SECONDARY },\n [OrganizationStatus.DELETED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n },\n }),\n },\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n views: [\n // Organizations are created via the registration/signup flow, not a resource\n // create form — headless (no form view, created programmatically by the flow).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n // NO `Op.DELETE` view. Since the WS-A teardown split the DEFAULT delete variant is a\n // route-less INTERNAL_CALL owned by the `organization-purge` batch, so there is no HTTP\n // door for this view to drive — rendering an action for it would produce a button that\n // cannot be invoked. The tenant-facing verb is `request_deletion`, below. The `admin`\n // purge-now variant keeps its view in the admin presets.\n ...organizationLifecycleOpViews,\n ],\n })),\n\n [R.ORGANIZATION_UNITS]: resourceUIBehavior(orgUnitFactory, OrganizationUnitSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: GitBranch,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n layout: {\n refs: { sections: ['identity', 'hierarchy'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"identity\" appearance={SectionMode.CARD}>\n <DisplayField name=\"name\" />\n <DisplayField name=\"code\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"status\" />\n {/*\n Directory ownership (#1392). A unit a SCIM directory created is reconciled by that\n directory: its name and its members are re-asserted on every push, so an edit made\n here is reverted without an error. Both rows are `hideWhenEmpty`, so a hand-authored\n unit shows nothing extra and a directory-owned one says so where the name is.\n */}\n <DisplayField name=\"externalSource\" />\n <DisplayField name=\"externalId\" />\n </Section>\n <Section name=\"hierarchy\">\n <DisplayField name=\"parentUnitId\" />\n <DisplayField name=\"path\" />\n <DisplayField name=\"inheritanceType\" />\n </Section>\n {/*\n Sub-units — a SELF-REFERENCING edge, so this nests: a unit shows its\n children, each of which is a unit that shows its own. Bounded by the\n framework embed-depth default and by the cycle guard keyed on\n `(edge, host row)`, which admits a genuine hierarchy over distinct\n rows while refusing a row that reappears on its own path.\n */}\n <RelatedResourceSections\n config={{ mode: SectionMode.TABS }}\n targets={[R.ORGANIZATION_UNITS]}\n />\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"type\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"externalSource\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"identity\" appearance={SectionMode.CARD}>\n <FormField name=\"name\" />\n <FormField name=\"code\" />\n <FormField name=\"type\" />\n <FormField name=\"status\" />\n </Section>\n <Section name=\"hierarchy\">\n <FormField name=\"parentUnitId\" />\n <FormField name=\"inheritanceType\" />\n </Section>\n </FormLayout>\n ),\n },\n fields: {\n // A badge, because it is a STATE of the row the reader needs at a glance in a list — the\n // one fact that explains why a rename does not stick. Empty for a hand-authored unit.\n externalSource: schemaShape.externalSource.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE, hideWhenEmpty: true },\n values: { [ExternalIdentitySource.SCIM]: { color: BadgeSemanticVariant.INFO } },\n }),\n // The directory's own identifier for the group, so an administrator can find it there.\n externalId: schemaShape.externalId.stringUI({ display: { hideWhenEmpty: true } }),\n },\n views: [\n [Op.CREATE, notAddressable()],\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n [OrganizationUnit_Operations.MOVE, notAddressable({ iconOverride: Move })],\n [OrganizationUnit_Operations.ARCHIVE, notAddressable({ iconOverride: Archive })],\n [OrganizationUnit_Operations.RESTORE, notAddressable({ iconOverride: ArchiveRestore })],\n ],\n })),\n\n [R.ORGANIZATION_MEMBERS]: resourceUIBehavior(orgMembersFactory, OrganizationMemberSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.TEAM,\n layout: {\n refs: { sections: ['overview', 'membership'] },\n // Settings-page chrome (Settings Hub → Members): label-left / value-right rows.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.INLINE, edit: EditChromeMode.SETTINGS_ROW },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"userTitle\" />\n <DisplayField name=\"status\" />\n <DisplayField name=\"roles\" />\n </Section>\n {/* Unit assignments moved out of this row entirely (D-B5): they are now\n ORGANIZATION_UNIT_MEMBERS rows, surfaced through that resource rather than as an\n embedded field here. The section keeps its slot ref for `createdAt`. */}\n <Section name=\"membership\">\n <DisplayField name=\"createdAt\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"userTitle\" />\n <SummaryMeta>\n <DisplayField name=\"roles\" />\n <DisplayField name=\"status\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n {/* Invite email — the admin's invitee address. Renders on the CREATE (invite)\n form only: `userEmail` is `.excludeFromUpdate()`, so it's absent from the\n UPDATE DTO and this FormField auto-skips on the edit form. The invite prefix\n find-or-creates the User by this email. Placed first — it's the primary input. */}\n <FormField name=\"userEmail\" />\n <FormField name=\"userTitle\" />\n <FormField name=\"status\" />\n <FormField name=\"roles\" />\n </Section>\n {/* No `membership` section on the edit form: its only field was\n `organizationUnitsMembership`, now the ORGANIZATION_UNIT_MEMBERS junction (D-B5).\n Assigning a member to a unit is a write against that resource, not a field edit\n here — which is also what makes it role-ceiling governed. */}\n </FormLayout>\n ),\n },\n fields: {\n status: schemaShape.status.enumUI({\n // No description on the READ surface: the badge already IS the answer, and the per-value\n // sentence under it is a paragraph explaining a word the reader has just read — the\n // tallest thing on a settings row for the least it says. EDIT keeps it, because there the\n // reader is CHOOSING between values and the sentence is what distinguishes them.\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: false },\n edit: { showDescription: true },\n values: {\n [OrganizationMemberStatus.INVITED]: { color: BadgeSemanticVariant.INFO },\n [OrganizationMemberStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OrganizationMemberStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [OrganizationMemberStatus.SUSPENDED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n },\n }),\n },\n // A membership has no inherent name — its identity is the related user.\n // `instanceLabel` is a server-resolved virtual field that forwards the\n // user's name live from `USER_PROFILES` (see `forwardedLabel` on\n // `OrganizationMemberSchema`), so the label is a plain, synchronous field\n // ref — never stale, tenant-safe, no async frontend resolver. `userTitle`\n // is the distinct authored job title and stays its own FIELD.\n getFrontendResourceLabel: ['instanceLabel'],\n views: [\n [Op.COUNT, notAddressable()],\n // CREATE is the org-admin INVITE entry point (it mints the invitee's pending\n // membership row directly on this junction — invitations are no longer a separate\n // resource). Surfaced as an EMBEDDED action (\"Invite member\", UserPlus): the\n // collection toolbar shows the button, which opens the invite form overlay (email +\n // roles + optional title/units). NOT `apiOnly()` — that hid it entirely, leaving no\n // way to invite from the UI.\n [Op.CREATE, notAddressable({ iconOverride: UserPlus })],\n [Op.READ, notAddressable()],\n // A people directory. Identity, role, status and last activity are COMPARABLE across rows, which is what a table is for — and what every B2B product renders here.\n // CARDS is the framework default and nothing had ever declared otherwise, so every\n // collection in the product rendered as stacked cards — ~150px per row, four people to a\n // viewport, with each field's help text and label repeated on every card. TABLE writes the\n // headers once. `userSwitchableDisplayMode` keeps cards one click away rather than removing\n // a rendering somebody may prefer on a narrow screen.\n [Op.LIST, addressable({\n collectionDisplayConfig: {\n displayMode: CollectionDisplayMode.TABLE,\n userSwitchableDisplayMode: true,\n },\n })],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n // Role changes ride `UPDATE` — the PROMOTE/DEMOTE verbs were removed on 2026-08-01\n // (routed but never implemented, so they answered 200 having changed nothing).\n [OrganizationMembers_Operations.SUSPEND, notAddressable({ iconOverride: CirclePause })],\n [OrganizationMembers_Operations.REACTIVATE, notAddressable({ iconOverride: Power })],\n // Invitation management on a still-INVITED row (invitations live in this list, not a\n // separate section): REVOKE cancels the pending invite (deletes the row + revokes its\n // accept token), RESEND re-issues the accept link. `WHEN_AVAILABLE` hides (not disables)\n // both on non-INVITED rows — they vanish on ACTIVE members rather than sit greyed out —\n // driven by the ops' `enabledCondition: status === INVITED` (resources-config). Surfaced\n // here so the spec's frontend `views` matches the merged config (companion validator).\n [OrganizationMembers_Operations.REVOKE, notAddressable({ iconOverride: Ban, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n [OrganizationMembers_Operations.RESEND, notAddressable({ iconOverride: Send, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n ],\n })),\n\n [R.ORGANIZATION_PROFILES]: resourceUIBehavior(orgProfileFactory, OrganizationProfileSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.PROFILE,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.displayName || `Organization ${currentObject.organizationId}`,\n layout: {\n refs: { sections: ['company', 'classification', 'location', 'branding', 'social'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"company\" appearance={SectionMode.CARD}>\n <DisplayField name=\"displayName\" />\n <DisplayField name=\"domain\" />\n <DisplayField name=\"website\" />\n <DisplayField name=\"phone\" />\n <DisplayField name=\"description\" />\n </Section>\n <Section name=\"classification\">\n <DisplayField name=\"industry\" />\n <DisplayField name=\"size\" />\n <DisplayField name=\"founded\" />\n <DisplayField name=\"timezone\" />\n </Section>\n <Section name=\"location\">\n <DisplayField name=\"address\" />\n </Section>\n <Section name=\"branding\">\n <ObjectScope name=\"branding\">\n <DisplayField name=\"logo\" />\n <DisplayField name=\"favicon\" />\n <DisplayField name=\"primaryColor\" />\n <DisplayField name=\"secondaryColor\" />\n <DisplayField name=\"customDomain\" />\n </ObjectScope>\n </Section>\n <Section name=\"social\">\n <ObjectScope name=\"socialLinks\">\n <DisplayField name=\"linkedin\" />\n <DisplayField name=\"twitter\" />\n <DisplayField name=\"facebook\" />\n <DisplayField name=\"github\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n // The card's LABEL already opens with `displayName`, so rendering it again as the only\n // field said one thing twice. It is the TITLE of this card, not a row beneath one.\n <SummaryLayout>\n <SummaryTitle name=\"displayName\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"company\" appearance={SectionMode.CARD}>\n <FormField name=\"displayName\" />\n <FormField name=\"domain\" />\n <FormField name=\"website\" />\n <FormField name=\"phone\" />\n <FormField name=\"description\" />\n </Section>\n <Section name=\"classification\">\n <FormField name=\"industry\" />\n <FormField name=\"size\" />\n <FormField name=\"founded\" />\n <FormField name=\"timezone\" />\n </Section>\n <Section name=\"location\">\n <FormField name=\"address\" />\n </Section>\n <Section name=\"branding\">\n <ObjectScope name=\"branding\">\n <FormField name=\"logo\" />\n <FormField name=\"favicon\" />\n <FormField name=\"primaryColor\" />\n <FormField name=\"secondaryColor\" />\n <FormField name=\"customDomain\" />\n </ObjectScope>\n </Section>\n <Section name=\"social\">\n <ObjectScope name=\"socialLinks\">\n <FormField name=\"linkedin\" />\n <FormField name=\"twitter\" />\n <FormField name=\"facebook\" />\n <FormField name=\"github\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [OrganizationProfile_Operations.UPDATE_BRANDING, notAddressable({ iconOverride: Paintbrush })],\n ],\n })),\n\n [R.ORGANIZATION_NOTIFICATIONS]: resourceUIBehavior(orgNotificationsFactory, OrganizationNotificationsSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.NOTIFICATION,\n layout: {\n refs: { sections: ['addresses', 'categories'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"addresses\" appearance={SectionMode.CARD}>\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"defaultEmailAddress\" />\n <DisplayField name=\"billingAddress\" />\n <DisplayField name=\"securityAddress\" />\n <DisplayField name=\"administrativeAddress\" />\n <DisplayField name=\"usersManagementAddress\" />\n </ObjectScope>\n </Section>\n <Section name=\"categories\">\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"billing\" />\n <DisplayField name=\"administrative\" />\n <DisplayField name=\"security\" />\n <DisplayField name=\"usersManagement\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout flow={SummaryFlow.ROW}>\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"defaultEmailAddress\" />\n </ObjectScope>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"addresses\" appearance={SectionMode.CARD}>\n <ObjectScope name=\"emailNotifications\">\n <FormField name=\"defaultEmailAddress\" />\n <FormField name=\"billingAddress\" />\n <FormField name=\"securityAddress\" />\n <FormField name=\"administrativeAddress\" />\n <FormField name=\"usersManagementAddress\" />\n </ObjectScope>\n </Section>\n <Section name=\"categories\">\n <ObjectScope name=\"emailNotifications\">\n <FormField name=\"billing\" />\n <FormField name=\"administrative\" />\n <FormField name=\"security\" />\n <FormField name=\"usersManagement\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n ],\n })),\n\n [R.ORGANIZATION_PREFERENCES]: resourceUIBehavior(orgPreferencesFactory, OrganizationPreferencesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.SETTINGS,\n layout: {\n refs: { sections: ['regional', 'language', 'overrides'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"regional\" appearance={SectionMode.CARD}>\n <DisplayField name=\"timezone\" />\n <DisplayField name=\"locale\" />\n <DisplayField name=\"dateFormat\" />\n <DisplayField name=\"timeFormat\" />\n </Section>\n <Section name=\"language\">\n <ObjectScope name=\"languagePreferences\">\n <DisplayField name=\"primaryLanguage\" />\n <DisplayField name=\"supportedLanguages\" />\n <DisplayField name=\"allowUserOverride\" />\n <DisplayField name=\"enforceForAllMembers\" />\n </ObjectScope>\n </Section>\n <Section name=\"overrides\">\n <DisplayField name=\"allowMemberEmailOverride\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout flow={SummaryFlow.ROW}>\n <DisplayField name=\"timezone\" />\n <DisplayField name=\"locale\" />\n <ObjectScope name=\"languagePreferences\">\n <DisplayField name=\"primaryLanguage\" />\n </ObjectScope>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"regional\" appearance={SectionMode.CARD}>\n <FormField name=\"timezone\" />\n <FormField name=\"locale\" />\n <FormField name=\"dateFormat\" />\n <FormField name=\"timeFormat\" />\n </Section>\n <Section name=\"language\">\n <ObjectScope name=\"languagePreferences\">\n <FormField name=\"primaryLanguage\" />\n <FormField name=\"supportedLanguages\" />\n <FormField name=\"allowUserOverride\" />\n <FormField name=\"enforceForAllMembers\" />\n </ObjectScope>\n </Section>\n <Section name=\"overrides\">\n <FormField name=\"allowMemberEmailOverride\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n ],\n })),\n\n [R.ORGANIZATION_FEATURES]: resourceUIBehavior(orgFeaturesFactory, ScopeFeaturesWithOverridesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n layout: {\n refs: { sections: ['overview', 'overrides'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </Section>\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <DisplayField name=\"addedFeatures\" />\n <DisplayField name=\"removedFeatures\" />\n <DisplayField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"overview\" appearance={SectionMode.CARD}>\n <FormField name=\"features\" />\n <FormField name=\"limits\" />\n </Section>\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <FormField name=\"addedFeatures\" />\n <FormField name=\"removedFeatures\" />\n <FormField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.SEARCH, notAddressable()],\n // Org feature flags are toggled programmatically, not via a generic edit form —\n // UPDATE is headless.\n [Op.UPDATE, apiOnly()],\n ],\n })),\n };\n}\n\nexport function buildOrganizationsAdminPresets(main: Partial<ResourceUIBehavior>): Partial<ResourceUIBehavior> {\n return {\n [R.ORGANIZATIONS]: resourceUIBehaviorFrom(orgFactory, main[R.ORGANIZATIONS]!, ({ base, opsVariantResolver }) => ({\n icon: base.icon,\n layout: base.layout,\n fields: base.fields,\n views: [\n [opsVariantResolver(Op.READ, 'admin'), notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [opsVariantResolver(Op.CREATE, 'admin'), addressable()],\n [opsVariantResolver(Op.UPDATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],\n ...organizationLifecycleOpViews,\n ],\n })),\n [R.ORGANIZATION_FEATURES]: resourceUIBehaviorFrom(orgFeaturesFactory, main[R.ORGANIZATION_FEATURES]!, ({ base }) => ({\n icon: base.icon,\n layout: base.layout,\n views: [\n // READ is restated because `resourceUIBehaviorFrom` REPLACES `views` wholesale rather than\n // merging them — it is \"the primary differentiator between main/admin\", per its own contract.\n // Omitting it left the operator able to enable, disable and reset an organization's\n // entitlements while unable to SEE them: the three mutations below act on a record the same\n // preset refused to render. Found when this application composed both scopes and the\n // `Entitlements` rail entry went headless (ADMIN replaces MAIN per resource type).\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [OrganizationFeatures_Operations.ENABLE_FEATURE, notAddressable({ iconOverride: ToggleRight })],\n [OrganizationFeatures_Operations.DISABLE_FEATURE, notAddressable({ iconOverride: ToggleLeft })],\n [OrganizationFeatures_Operations.RESET_FEATURES, notAddressable({ iconOverride: RotateCcw })],\n ],\n })),\n };\n}\n\nexport const organizationsMainPresets = buildOrganizationsMainPresets();\nexport const organizationsAdminPresets = buildOrganizationsAdminPresets(organizationsMainPresets);\n\nexport const organizationsMainOrgResourceUIBehavior = organizationsMainPresets[R.ORGANIZATIONS]!;\nexport const organizationsAdminOrgResourceUIBehavior = organizationsAdminPresets[R.ORGANIZATIONS]!;\nexport const organizationUnitsMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_UNITS]!;\nexport const organizationMembersMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_MEMBERS]!;\nexport const organizationProfilesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_PROFILES]!;\nexport const organizationNotificationsMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_NOTIFICATIONS]!;\nexport const organizationPreferencesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_PREFERENCES]!;\nexport const organizationFeaturesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_FEATURES]!;\nexport const organizationFeaturesAdminResourceUIBehavior = organizationsAdminPresets[R.ORGANIZATION_FEATURES]!;\n"]}
|
|
1
|
+
{"version":3,"file":"organizations.resource-presets.js","sourceRoot":"","sources":["../../../../../src/config/resources/organizations.resource-presets.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport type { ResourceUIBehavior, ResourceOperationFrontendConfig } from '@wildo-ai/saas-frontend-lib';\nimport {\n resourceUIBehavior,\n resourceUIBehaviorFrom,\n StandardIconReference,\n ActionVisibility,\n useApplication,\n ResourceLayoutInlineEditDefault,\n CollectionDisplayMode,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n DisplayField,\n DisplayLayout,\n FormField,\n FormLayout,\n ObjectScope,\n RelatedResourceSections,\n ResourceHeaderTitle,\n Section,\n SummaryLayout,\n SummaryFlow,\n SummaryMeta,\n SummaryTitle,\n} from '@wildo-ai/saas-frontend-lib';\nimport { BadgeSemanticVariant, DisplayChromeMode, EditChromeMode, EnumDisplayMode, SectionMode } from '@wildo-ai/zod-decorators';\nimport {\n Archive,\n ArchiveRestore,\n BadgeCheck,\n Ban,\n CirclePause,\n GitBranch,\n Landmark,\n Move,\n Paintbrush,\n Power,\n RotateCcw,\n Send,\n ToggleLeft,\n ToggleRight,\n Trash2,\n UserPlus,\n} from 'lucide-react';\nimport {\n CoreResourceType as R,\n CoreResourceOperation as Op,\n ExternalIdentitySource,\n OrganizationStatus,\n OrganizationMemberStatus,\n OrganizationUnitStatus,\n OrganizationUnit_Operations,\n OrganizationMembers_Operations,\n OrganizationProfile_Operations,\n Organization_Lifecycle_Operations,\n OrganizationFeatures_Operations,\n organizationResourceConfiguration_InitializationFactory as orgFactory,\n organizationUnitResourceConfiguration_InitializationFactory as orgUnitFactory,\n organizationMembersResourceConfiguration_InitializationFactory as orgMembersFactory,\n organizationProfileResourceConfiguration_InitializationFactory as orgProfileFactory,\n organizationNotificationsResourceConfiguration_InitializationFactory as orgNotificationsFactory,\n organizationPreferencesResourceConfiguration_InitializationFactory as orgPreferencesFactory,\n organizationFeaturesResourceConfiguration_InitializationFactory as orgFeaturesFactory,\n OrganizationSchema,\n OrganizationUnitSchema,\n OrganizationMemberSchema,\n OrganizationProfileSchema,\n OrganizationNotificationsSchema,\n OrganizationPreferencesSchema,\n ScopeFeaturesWithOverridesSchema,\n} from '@wildo-ai/saas-models';\nimport { addressable, notAddressable, apiOnly } from './resource.config.utils';\n\n/**\n * Organizations — Resource frontend presets\n *\n * Domain: ORGANIZATIONS, ORGANIZATION_UNITS, ORGANIZATION_MEMBERS,\n * ORGANIZATION_PROFILES,\n * ORGANIZATION_NOTIFICATIONS, ORGANIZATION_PREFERENCES, ORGANIZATION_FEATURES\n *\n * Enum badges use inline `values` and `showDescription: true` like `billing.resource-presets.tsx`.\n * Layout templates are implemented inline in each resource config.\n */\n\n/**\n * An organization's `type`, offered as a choice among the application's DECLARED organization types (#1032).\n *\n * The type is required and must name a declared type — creation refuses anything else, and a member of an\n * organization whose type names nothing cannot sign in. The declaration is the application's, so the schema cannot\n * carry it as an enum; this reads it from the running application's configuration and hands it to the field. As free\n * text the same field accepted a typo and refused it only after submit.\n *\n * Rendered as a component (layout templates are), so reading the application context here is legal. The field still\n * hides itself on edit forms, where `type` is creation-time identity.\n */\nfunction DeclaredOrganizationTypeFormField(): React.JSX.Element {\n const { appConfig } = useApplication();\n const declaredOrganizationTypes = Object.keys(appConfig.organizationTypes ?? {});\n return <FormField name=\"type\" allowedValues={declaredOrganizationTypes} />;\n}\n\n/**\n * Org lifecycle-transition action config, shared by the main and admin org\n * presets (the same super-admin transitions surface in the main-app settings\n * hub today and will surface in the dedicated admin app later).\n *\n * ACTIVATE/SUSPEND are direct status transitions with no intermediate view, so\n * they are gated purely by their `enabledCondition` (org status). The\n * `WHEN_AVAILABLE` visibility makes each action **vanish** (rather than render\n * disabled) when its precondition is unmet: ACTIVATE shows only on a\n * suspended/expired org, SUSPEND only on an active/trial one. The icon overrides\n * give the custom ops a meaningful glyph instead of the action-bar fallback.\n */\nconst organizationLifecycleOpViews: Array<[Organization_Lifecycle_Operations, ResourceOperationFrontendConfig]> = [\n [Organization_Lifecycle_Operations.ACTIVATE, notAddressable({ iconOverride: Power, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n [Organization_Lifecycle_Operations.SUSPEND, notAddressable({ iconOverride: CirclePause, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // Tenant teardown (WS-A). `request_deletion` is the tenant-facing delete — it REPLACED the\n // org-admin `DELETE` action, which no longer exists as an API door. `hasDescription` because the\n // confirmation copy has to say the thing a delete dialog normally cannot: this is reversible,\n // and until when.\n [Organization_Lifecycle_Operations.REQUEST_DELETION, notAddressable({ iconOverride: Trash2, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // Only ever available on a marked tenant, and only to a platform super-admin — the role gate on\n // the action bar hides it from everyone else, and `WHEN_AVAILABLE` hides it on a live tenant.\n [Organization_Lifecycle_Operations.RESTORE, notAddressable({ iconOverride: RotateCcw, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n // #1054 — name this organization as the one that OPERATES the application. Surfaced for the same\n // reason `restore` is: it is an operator door with no other in-product route, and the role gate on\n // the action bar plus `WHEN_AVAILABLE` (the operation is enabled only from ACTIVE) already hide it\n // from everyone it does not concern. `hasDescription` because the confirmation copy must carry what\n // a generic dialog cannot: this is IRREVERSIBLE — there is no demotion door — and it requires a\n // justification that is recorded on the audit trail.\n [Organization_Lifecycle_Operations.PROMOTE_TO_OWNER_ORGANIZATION, notAddressable({ iconOverride: Landmark, actionVisibility: ActionVisibility.WHEN_AVAILABLE, hasDescription: true })],\n];\n\nexport function buildOrganizationsMainPresets(): Partial<ResourceUIBehavior> {\n return {\n [R.ORGANIZATIONS]: resourceUIBehavior(orgFactory, OrganizationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.ORGANIZATION,\n layout: {\n // NO section refs, on either surface. A `<Section>` is a THREE-PLACE obligation — the JSX\n // name, this manifest, and a documented slot in the resource specification — and what it\n // buys is a heading. The read pane is one flat list of rows, and the edit form holds two\n // writable fields (`name`, `slug`: `status` and `type` are `excludeFromUpdate`), so an\n // \"Overview\" card over either was a heading over the only group on the page.\n refs: { sections: [] },\n // Settings-page chrome: shown in the Settings Hub (General). Read + edit render as\n // label-left / value-right rows. A card (the admin directory, a reference popover) shows\n // bare values: the status badge and the type say what they are without a label.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n // Organization general settings. A settings pane is a list of decisions an operator came to TAKE, so its\n // writable fields are offered in place rather than behind a whole-pane edit mode. The set is\n // DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field\n // added to this schema tomorrow is covered without anyone remembering to decorate it.\n defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,\n // And its empty rows say WHICH emptiness they are — \"None yet\" for a list with no members,\n // \"Not available\" for a computed value, \"No value\" for a field awaiting input — instead of one\n // em dash standing for all three. The surface policy's dash is right where a reader is scanning;\n // on a settings row, which is read one at a time to decide something, it is an answer that\n // refuses to answer.\n defaultEmptyValue: 'placeholder',\n // The identity line: the organization's name, and its status beside it — the one fact about\n // a tenant a reader needs before anything else (a suspended or marked tenant reads\n // differently from a live one). Neither is repeated in the body.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n display: () => (\n <DisplayLayout>\n {/*\n One flat list of rows, no `<Section>` at all.\n\n It was two: an \"Overview\" card of four fields and a \"Lifecycle\" section holding\n `createdAt` and nothing else. A section of one row is not a grouping, it is a heading\n with a row under it — and \"Overview\" over the only other group named the PAGE rather\n than a part of it. Neither heading distinguished anything, so both are gone and the\n rows read as what they are: the facts about this organization.\n\n `name` and `status` are the header's: the title IS the organization's name, and the\n status badge sits beside it, so a row for either repeated it back with a label on it.\n */}\n <DisplayField name=\"slug\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"createdAt\" />\n {/*\n The organization's own children, named here rather than curated\n through per-edge relationship config.\n\n Placing them makes this template OWN the child region: automatic\n composition stands down, so the tenant's APPLICATION resources\n (todo lists, todos, tasks — org-scoped, and therefore owned children\n of every organization) stop appearing as tabs on an engine admin\n surface that only ever intended these three. That leak was the\n price of composing every owned child by default; naming them is\n what removes it, and it removes the ~16 `hidden: true` opt-outs\n that used to say the same thing edge by edge.\n\n Titles come from each child resource's own header label, so this\n adds no `layout.refs` entry and no specification slot.\n */}\n {/*\n `targets={[]}` — this pane composes NO children, which is a different statement from a\n template that never mentioned them: it still CLAIMS the child region, so the automatic\n block stands down and the tenant's application resources (todo lists, todos, tasks —\n org-scoped, and therefore owned children of every organization) do not reappear as tabs\n on an engine admin surface. That claim is the whole reason this stays.\n\n All three former targets have their own rail entry — Members, Teams, Entitlements — so\n embedding them here made one surface reachable two ways, and made a record ABOUT the\n tenant into a container OF three populations.\n */}\n <RelatedResourceSections config={{ mode: SectionMode.TABS }} targets={[]} />\n </DisplayLayout>\n ),\n // The card names the organization and says what state it is in and what kind it is — the two\n // facts that tell one tenant from another in a directory. The slug restates the name in URL\n // form, and the creation date answers a question nobody scanning a directory is asking; both\n // stay on the read pane.\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"status\" />\n <DisplayField name=\"type\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n // No section: see `refs`. `name` first and focused — it is the field an administrator opens\n // this form to change. `status` and the declared type are creation-time inputs (the admin\n // CREATE form); both are `excludeFromUpdate`, so the edit form skips them and asks for the\n // name and slug alone.\n edit: () => (\n <FormLayout>\n <FormField name=\"name\" autoFocus />\n <FormField name=\"slug\" />\n <FormField name=\"status\" />\n <DeclaredOrganizationTypeFormField />\n </FormLayout>\n ),\n },\n fields: {\n status: schemaShape.status.enumUI({\n // No description on the READ surface: the badge already IS the answer, and the per-value\n // sentence under it is a paragraph explaining a word the reader has just read — the\n // tallest thing on a settings row for the least it says. EDIT keeps it, because there the\n // reader is CHOOSING between values and the sentence is what distinguishes them.\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: false },\n edit: { showDescription: true },\n values: {\n [OrganizationStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OrganizationStatus.SUSPENDED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n [OrganizationStatus.TRIAL]: { color: BadgeSemanticVariant.INFO },\n [OrganizationStatus.TRIAL_EXPIRED]: { color: BadgeSemanticVariant.WARNING },\n [OrganizationStatus.CANCELLED]: { color: BadgeSemanticVariant.SECONDARY },\n [OrganizationStatus.DELETED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n },\n }),\n },\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n views: [\n // Organizations are created via the registration/signup flow, not a resource\n // create form — headless (no form view, created programmatically by the flow).\n [Op.CREATE, apiOnly()],\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n // NO `Op.DELETE` view. Since the WS-A teardown split the DEFAULT delete variant is a\n // route-less INTERNAL_CALL owned by the `organization-purge` batch, so there is no HTTP\n // door for this view to drive — rendering an action for it would produce a button that\n // cannot be invoked. The tenant-facing verb is `request_deletion`, below. The `admin`\n // purge-now variant keeps its view in the admin presets.\n ...organizationLifecycleOpViews,\n ],\n })),\n\n [R.ORGANIZATION_UNITS]: resourceUIBehavior(orgUnitFactory, OrganizationUnitSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: GitBranch,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.name,\n layout: {\n // NO section refs, on either surface. The read pane holds at most five rows once the name and\n // the two state badges moved to the header, and the form at most six fields: an \"Identity\"\n // heading over the unit's own facts named the page, and a \"Hierarchy\" heading over two rows\n // (one of which a root unit does not have, and one the edit form cannot write) was a heading\n // over a single row as often as not.\n refs: { sections: [] },\n // Read rows are SETTINGS_ROW (label start, value end); cards show bare values; the form stacks\n // label over control, because a unit is AUTHORED — named and placed — not toggled.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },\n // The identity line: the unit's name, its status, and — for a unit a SCIM directory created —\n // that directory's badge (#1392). A directory-owned unit is reconciled by the directory, so a\n // rename made here is reverted without an error; the badge beside the name is where a reader\n // learns that before trying. It hides itself on a hand-authored unit.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n <DisplayField name=\"externalSource\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n /*\n * One column of facts, each once. `name`, `status` and `externalSource` are the header's.\n * `path` is not shown: it is the materialized chain of ancestor ids the tree is queried by — the\n * same fact `parentUnitId` states by name, spelled as identifiers. Every optional row hides when\n * empty, so a root unit with no code or type reads as its parent-less, inheritance-only self.\n */\n display: () => (\n <DisplayLayout>\n <DisplayField name=\"code\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"parentUnitId\" />\n <DisplayField name=\"inheritanceType\" />\n {/* The directory's own identifier for the group, so an administrator can find it there. */}\n <DisplayField name=\"externalId\" />\n {/*\n Sub-units — a SELF-REFERENCING edge, so this nests: a unit shows its\n children, each of which is a unit that shows its own. Bounded by the\n framework embed-depth default and by the cycle guard keyed on\n `(edge, host row)`, which admits a genuine hierarchy over distinct\n rows while refusing a row that reappears on its own path.\n */}\n <RelatedResourceSections\n config={{ mode: SectionMode.TABS }}\n targets={[R.ORGANIZATION_UNITS]}\n />\n </DisplayLayout>\n ),\n // A card: the unit's name, then its state and kind as bare values. The directory badge says\n // \"SCIM\", which needs no label; \"Active\" and \"Team\" read as what they are.\n summary: () => (\n <SummaryLayout>\n <SummaryTitle name=\"name\" />\n <SummaryMeta>\n <DisplayField name=\"status\" />\n <DisplayField name=\"type\" />\n <DisplayField name=\"externalSource\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n /*\n * The name first and focused; the two short identifying fields share a row where the form is\n * wide enough. `parentUnitId` is `excludeFromUpdate` — re-parenting is the MOVE operation's — so\n * it appears on the create form only, and the edit form skips it.\n */\n edit: () => (\n <FormLayout>\n <FormField name=\"name\" autoFocus />\n {/* The container is the WRAPPER: a `@md:` variant reads its nearest `@container` ancestor. */}\n <div className=\"@container\">\n <div className=\"grid grid-cols-1 gap-group @md:grid-cols-2\">\n <FormField name=\"code\" />\n <FormField name=\"type\" />\n </div>\n </div>\n <FormField name=\"status\" />\n <FormField name=\"parentUnitId\" />\n <FormField name=\"inheritanceType\" />\n </FormLayout>\n ),\n },\n fields: {\n // A badge, because it is the unit's STATE — read at a glance beside its name. The per-value\n // sentence stays on the form, where it distinguishes the choices.\n status: schemaShape.status.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: false },\n edit: { showDescription: true },\n values: {\n [OrganizationUnitStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OrganizationUnitStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [OrganizationUnitStatus.ARCHIVED]: { color: BadgeSemanticVariant.OUTLINE },\n [OrganizationUnitStatus.SUSPENDED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n },\n }),\n // A badge, because it is a STATE of the row the reader needs at a glance in a list — the\n // one fact that explains why a rename does not stick. Empty for a hand-authored unit.\n externalSource: schemaShape.externalSource.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE, hideWhenEmpty: true },\n values: { [ExternalIdentitySource.SCIM]: { color: BadgeSemanticVariant.INFO } },\n }),\n // Optional facts: a dash under each said nothing, and on most units most of them are unset.\n code: schemaShape.code.stringUI({ display: { hideWhenEmpty: true } }),\n type: schemaShape.type.enumUI({ display: { hideWhenEmpty: true } }),\n // A root unit hangs directly under the organization; \"no parent\" is what the absence means.\n parentUnitId: schemaShape.parentUnitId.foreignKeyUI({ display: { hideWhenEmpty: true } }),\n externalId: schemaShape.externalId.stringUI({ display: { hideWhenEmpty: true } }),\n },\n views: [\n [Op.CREATE, notAddressable()],\n [Op.READ, notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n [OrganizationUnit_Operations.MOVE, notAddressable({ iconOverride: Move })],\n [OrganizationUnit_Operations.ARCHIVE, notAddressable({ iconOverride: Archive })],\n [OrganizationUnit_Operations.RESTORE, notAddressable({ iconOverride: ArchiveRestore })],\n ],\n })),\n\n [R.ORGANIZATION_MEMBERS]: resourceUIBehavior(orgMembersFactory, OrganizationMemberSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.TEAM,\n layout: {\n // NO section refs, on either surface. The read pane was an \"Overview\" card of three rows and a\n // \"Membership\" section holding `createdAt` alone — a heading over the page and a heading over\n // one row. The invite form is one group of at most four fields. Neither heading distinguished\n // anything.\n refs: { sections: [] },\n // Settings-page chrome (Settings Hub → Members): label-left / value-right rows on read and on\n // the invite/edit form; bare values on a card, where the badge and the role speak for themselves.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n // The identity line: the member's name, and their status beside it — invited, active,\n // suspended is the first thing an administrator opening a member needs. Neither is a body row.\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"status\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n /*\n * The membership's own facts, once each: the roles it confers, the member's job title when one\n * was given, the firm a service provider's expert came through (#1597, \"via {Firm}\"), and when\n * the membership began. Unit assignments are not a field here (D-B5): they are\n * ORGANIZATION_UNIT_MEMBERS rows, composed below the rows as that resource's own tab.\n */\n display: () => (\n <DisplayLayout>\n <DisplayField name=\"roles\" />\n <DisplayField name=\"userTitle\" />\n <DisplayField name=\"providerOrganizationName\" />\n <DisplayField name=\"createdAt\" />\n </DisplayLayout>\n ),\n // A card (the member list in card mode, a reference popover): the member's name — the resolved\n // label, forwarded from their profile — then status, roles and the firm, bare. It used to title\n // the card with `userTitle`, a job title most members never set, so most cards had no title.\n summary: () => (\n <SummaryLayout>\n <SummaryTitle />\n <SummaryMeta>\n <DisplayField name=\"status\" />\n <DisplayField name=\"roles\" />\n <DisplayField name=\"providerOrganizationName\" />\n </SummaryMeta>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n {/* Invite email — the admin's invitee address, first and focused: it is the one input the\n invite cannot do without. Renders on the CREATE (invite) form only: `userEmail` is\n `.excludeFromUpdate()`, so it's absent from the UPDATE DTO and this FormField\n auto-skips on the edit form. The invite prefix find-or-creates the User by this email. */}\n <FormField name=\"userEmail\" autoFocus />\n <FormField name=\"roles\" />\n <FormField name=\"userTitle\" />\n {/* `status` is `excludeFromCreate` and `excludeFromUpdate` — SUSPEND / REACTIVATE /\n REVOKE own it — so it auto-skips on both forms; kept so the form stays the one place\n that says which fields a membership form covers. */}\n <FormField name=\"status\" />\n {/* No unit assignment here: its only field was `organizationUnitsMembership`, now the\n ORGANIZATION_UNIT_MEMBERS junction (D-B5). Assigning a member to a unit is a write\n against that resource, not a field edit here — which is also what makes it role-ceiling\n governed. */}\n </FormLayout>\n ),\n },\n fields: {\n providerOrganizationName: schemaShape.providerOrganizationName.stringUI({ display: { hideWhenEmpty: true } }),\n // Most members have no job title; a row of \"—\" under every one of them said nothing.\n userTitle: schemaShape.userTitle.stringUI({ display: { hideWhenEmpty: true } }),\n /*\n * Two raw identifiers, hidden from DISPLAY so they stop being table columns. Both are summary\n * fields for the backend's sake (the provider membership's live filter reads them), and the\n * member TABLE derives its columns from summary fields — so every tenant's directory carried\n * two always-empty columns — one of them headed \"Provider organization\", like the name column\n * beside it — holding ids nobody can read. `providerOrganizationName` is the readable form of the same fact and stays.\n */\n serviceProviderRelationshipId: schemaShape.serviceProviderRelationshipId.isHidden({ display: true }),\n providerOrganizationId: schemaShape.providerOrganizationId.isHidden({ display: true }),\n status: schemaShape.status.enumUI({\n // No description on the READ surface: the badge already IS the answer, and the per-value\n // sentence under it is a paragraph explaining a word the reader has just read — the\n // tallest thing on a settings row for the least it says. EDIT keeps it, because there the\n // reader is CHOOSING between values and the sentence is what distinguishes them.\n display: { displayMode: EnumDisplayMode.BADGE, showDescription: false },\n edit: { showDescription: true },\n values: {\n [OrganizationMemberStatus.INVITED]: { color: BadgeSemanticVariant.INFO },\n [OrganizationMemberStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },\n [OrganizationMemberStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },\n [OrganizationMemberStatus.SUSPENDED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n },\n }),\n },\n /*\n * A membership has no inherent name — its identity is the related user. `instanceLabel` is a\n * server-resolved virtual field that forwards the user's name live from `USER_PROFILES` (see\n * `forwardedLabel` on `OrganizationMemberSchema`); `userTitle` is the distinct authored job title\n * and stays its own FIELD.\n *\n * `userEmail` is the second choice because the virtual label is projected on the SUMMARY DTO\n * only: the READ that the page header and a foreign-key reference fetch carries no\n * `instanceLabel`, and the header then fell back to \"<userId> ORG_MEMBER INACTIVE\" — the raw\n * summary fields. The email is on the row itself, and it is the same fallback `forwardedLabel`\n * applies server-side when a profile has no name.\n */\n getFrontendResourceLabel: ({ currentObject }) => currentObject.instanceLabel || currentObject.userEmail || '',\n views: [\n [Op.COUNT, notAddressable()],\n // CREATE is the org-admin INVITE entry point (it mints the invitee's pending\n // membership row directly on this junction — invitations are no longer a separate\n // resource). Surfaced as an EMBEDDED action (\"Invite member\", UserPlus): the\n // collection toolbar shows the button, which opens the invite form overlay (email +\n // roles + optional title/units). NOT `apiOnly()` — that hid it entirely, leaving no\n // way to invite from the UI.\n [Op.CREATE, notAddressable({ iconOverride: UserPlus })],\n [Op.READ, notAddressable()],\n // A people directory. Identity, role, status and last activity are COMPARABLE across rows, which is what a table is for — and what every B2B product renders here.\n // CARDS is the framework default and nothing had ever declared otherwise, so every\n // collection in the product rendered as stacked cards — ~150px per row, four people to a\n // viewport, with each field's help text and label repeated on every card. TABLE writes the\n // headers once. `userSwitchableDisplayMode` keeps cards one click away rather than removing\n // a rendering somebody may prefer on a narrow screen.\n [Op.LIST, addressable({\n collectionDisplayConfig: {\n displayMode: CollectionDisplayMode.TABLE,\n userSwitchableDisplayMode: true,\n },\n })],\n [Op.SEARCH, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [Op.DELETE, notAddressable()],\n // Role changes ride `UPDATE` — the PROMOTE/DEMOTE verbs were removed on 2026-08-01\n // (routed but never implemented, so they answered 200 having changed nothing).\n [OrganizationMembers_Operations.SUSPEND, notAddressable({ iconOverride: CirclePause })],\n [OrganizationMembers_Operations.REACTIVATE, notAddressable({ iconOverride: Power })],\n // Invitation management on a still-INVITED row (invitations live in this list, not a\n // separate section): REVOKE cancels the pending invite (deletes the row + revokes its\n // accept token), RESEND re-issues the accept link. `WHEN_AVAILABLE` hides (not disables)\n // both on non-INVITED rows — they vanish on ACTIVE members rather than sit greyed out —\n // driven by the ops' `enabledCondition: status === INVITED` (resources-config). Surfaced\n // here so the spec's frontend `views` matches the merged config (companion validator).\n [OrganizationMembers_Operations.REVOKE, notAddressable({ iconOverride: Ban, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n [OrganizationMembers_Operations.RESEND, notAddressable({ iconOverride: Send, actionVisibility: ActionVisibility.WHEN_AVAILABLE })],\n ],\n })),\n\n [R.ORGANIZATION_PROFILES]: resourceUIBehavior(orgProfileFactory, OrganizationProfileSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.PROFILE,\n getFrontendResourceLabel: ({ currentObject }) => currentObject.displayName || `Organization ${currentObject.organizationId}`,\n layout: {\n refs: { sections: ['company', 'classification', 'location', 'branding', 'social'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"company\" appearance={SectionMode.CARD}>\n <DisplayField name=\"displayName\" />\n <DisplayField name=\"domain\" />\n <DisplayField name=\"website\" />\n <DisplayField name=\"phone\" />\n <DisplayField name=\"description\" />\n </Section>\n <Section name=\"classification\">\n <DisplayField name=\"industry\" />\n <DisplayField name=\"size\" />\n <DisplayField name=\"founded\" />\n <DisplayField name=\"timezone\" />\n </Section>\n <Section name=\"location\">\n <DisplayField name=\"address\" />\n </Section>\n <Section name=\"branding\">\n <ObjectScope name=\"branding\">\n <DisplayField name=\"logo\" />\n <DisplayField name=\"favicon\" />\n <DisplayField name=\"primaryColor\" />\n <DisplayField name=\"secondaryColor\" />\n </ObjectScope>\n </Section>\n <Section name=\"social\">\n <ObjectScope name=\"socialLinks\">\n <DisplayField name=\"linkedin\" />\n <DisplayField name=\"twitter\" />\n <DisplayField name=\"facebook\" />\n <DisplayField name=\"github\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n // The card's LABEL already opens with `displayName`, so rendering it again as the only\n // field said one thing twice. It is the TITLE of this card, not a row beneath one.\n <SummaryLayout>\n <SummaryTitle name=\"displayName\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"company\" appearance={SectionMode.CARD}>\n <FormField name=\"displayName\" />\n <FormField name=\"domain\" />\n <FormField name=\"website\" />\n <FormField name=\"phone\" />\n <FormField name=\"description\" />\n </Section>\n <Section name=\"classification\">\n <FormField name=\"industry\" />\n <FormField name=\"size\" />\n <FormField name=\"founded\" />\n <FormField name=\"timezone\" />\n </Section>\n <Section name=\"location\">\n <FormField name=\"address\" />\n </Section>\n <Section name=\"branding\">\n <ObjectScope name=\"branding\">\n <FormField name=\"logo\" />\n <FormField name=\"favicon\" />\n <FormField name=\"primaryColor\" />\n <FormField name=\"secondaryColor\" />\n </ObjectScope>\n </Section>\n <Section name=\"social\">\n <ObjectScope name=\"socialLinks\">\n <FormField name=\"linkedin\" />\n <FormField name=\"twitter\" />\n <FormField name=\"facebook\" />\n <FormField name=\"github\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [OrganizationProfile_Operations.UPDATE_BRANDING, notAddressable({ iconOverride: Paintbrush })],\n ],\n })),\n\n [R.ORGANIZATION_NOTIFICATIONS]: resourceUIBehavior(orgNotificationsFactory, OrganizationNotificationsSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.NOTIFICATION,\n layout: {\n refs: { sections: ['addresses', 'categories'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"addresses\" appearance={SectionMode.CARD}>\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"defaultEmailAddress\" />\n <DisplayField name=\"billingAddress\" />\n <DisplayField name=\"securityAddress\" />\n <DisplayField name=\"administrativeAddress\" />\n <DisplayField name=\"usersManagementAddress\" />\n </ObjectScope>\n </Section>\n <Section name=\"categories\">\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"billing\" />\n <DisplayField name=\"administrative\" />\n <DisplayField name=\"security\" />\n <DisplayField name=\"usersManagement\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout flow={SummaryFlow.ROW}>\n <ObjectScope name=\"emailNotifications\">\n <DisplayField name=\"defaultEmailAddress\" />\n </ObjectScope>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"addresses\" appearance={SectionMode.CARD}>\n <ObjectScope name=\"emailNotifications\">\n <FormField name=\"defaultEmailAddress\" />\n <FormField name=\"billingAddress\" />\n <FormField name=\"securityAddress\" />\n <FormField name=\"administrativeAddress\" />\n <FormField name=\"usersManagementAddress\" />\n </ObjectScope>\n </Section>\n <Section name=\"categories\">\n <ObjectScope name=\"emailNotifications\">\n <FormField name=\"billing\" />\n <FormField name=\"administrative\" />\n <FormField name=\"security\" />\n <FormField name=\"usersManagement\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n ],\n })),\n\n [R.ORGANIZATION_PREFERENCES]: resourceUIBehavior(orgPreferencesFactory, OrganizationPreferencesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n icon: StandardIconReference.SETTINGS,\n layout: {\n refs: { sections: ['regional', 'language', 'overrides'] },\n display: () => (\n <DisplayLayout>\n <Section name=\"regional\" appearance={SectionMode.CARD}>\n <DisplayField name=\"timezone\" />\n <DisplayField name=\"locale\" />\n <DisplayField name=\"dateFormat\" />\n <DisplayField name=\"timeFormat\" />\n </Section>\n <Section name=\"language\">\n <ObjectScope name=\"languagePreferences\">\n <DisplayField name=\"primaryLanguage\" />\n <DisplayField name=\"supportedLanguages\" />\n <DisplayField name=\"allowUserOverride\" />\n <DisplayField name=\"enforceForAllMembers\" />\n </ObjectScope>\n </Section>\n <Section name=\"overrides\">\n <DisplayField name=\"allowMemberEmailOverride\" />\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout flow={SummaryFlow.ROW}>\n <DisplayField name=\"timezone\" />\n <DisplayField name=\"locale\" />\n <ObjectScope name=\"languagePreferences\">\n <DisplayField name=\"primaryLanguage\" />\n </ObjectScope>\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n <Section name=\"regional\" appearance={SectionMode.CARD}>\n <FormField name=\"timezone\" />\n <FormField name=\"locale\" />\n <FormField name=\"dateFormat\" />\n <FormField name=\"timeFormat\" />\n </Section>\n <Section name=\"language\">\n <ObjectScope name=\"languagePreferences\">\n <FormField name=\"primaryLanguage\" />\n <FormField name=\"supportedLanguages\" />\n <FormField name=\"allowUserOverride\" />\n <FormField name=\"enforceForAllMembers\" />\n </ObjectScope>\n </Section>\n <Section name=\"overrides\">\n <FormField name=\"allowMemberEmailOverride\" />\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n ],\n })),\n\n [R.ORGANIZATION_FEATURES]: resourceUIBehavior(orgFeaturesFactory, ScopeFeaturesWithOverridesSchema, ({ schema, schemaShape, opsVariantResolver }) => ({\n // The header showed the registry's missing-icon placeholder: nothing had ever named one.\n icon: BadgeCheck,\n layout: {\n refs: { sections: ['overview', 'overrides'] },\n // Settings-page chrome (Settings Hub → Entitlements): label-left / value-right rows on read,\n // bare values on a card. The form STACKS, because every field it edits is a list or a map\n // of entries, which needs the full width a settings row gives to its label.\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },\n // An override list with nothing in it IS the answer on this pane — \"no feature was granted or\n // withdrawn by hand\" — so it says \"None yet\" rather than an em dash that reads as missing data.\n defaultEmptyValue: 'placeholder',\n display: () => (\n <DisplayLayout>\n {/* What the organization HAS, as the engine evaluates it. The card carries no heading: the\n page is titled with what this is, and a heading over the first group restated it. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideTitle hideDescription>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </Section>\n {/* What an operator changed BY HAND. This heading stays: it is what separates a grant the\n plan gave from one a person gave. Its description is an edit prompt and stays there. */}\n <Section name=\"overrides\" hideDescription>\n <ObjectScope name=\"manualOverrides\">\n <DisplayField name=\"addedFeatures\" />\n <DisplayField name=\"removedFeatures\" />\n <DisplayField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </DisplayLayout>\n ),\n summary: () => (\n <SummaryLayout>\n <DisplayField name=\"features\" />\n <DisplayField name=\"limits\" />\n </SummaryLayout>\n ),\n edit: () => (\n <FormLayout>\n {/* The effective lists need no introduction on the form either. */}\n <Section name=\"overview\" appearance={SectionMode.CARD} hideDescription>\n <FormField name=\"features\" />\n <FormField name=\"limits\" />\n </Section>\n {/* The one description kept: that a hand-made override outlives plan changes until it is\n reset is not something the field names can say, and it is the consequence of saving. */}\n <Section name=\"overrides\">\n <ObjectScope name=\"manualOverrides\">\n <FormField name=\"addedFeatures\" />\n <FormField name=\"removedFeatures\" />\n <FormField name=\"limitOverrides\" />\n </ObjectScope>\n </Section>\n </FormLayout>\n ),\n },\n views: [\n [Op.READ, notAddressable()],\n [Op.SEARCH, notAddressable()],\n // Org feature flags are toggled programmatically, not via a generic edit form —\n // UPDATE is headless.\n [Op.UPDATE, apiOnly()],\n ],\n })),\n };\n}\n\nexport function buildOrganizationsAdminPresets(main: Partial<ResourceUIBehavior>): Partial<ResourceUIBehavior> {\n return {\n [R.ORGANIZATIONS]: resourceUIBehaviorFrom(orgFactory, main[R.ORGANIZATIONS]!, ({ base, opsVariantResolver }) => ({\n icon: base.icon,\n layout: base.layout,\n fields: base.fields,\n views: [\n // The tenant's own views first, so the operator entries below override where they share a key. In an\n // application composing both lanes this entry replaces the main one, and the organization's own General pane\n // runs the DEFAULT READ — which only an `admin`-keyed READ left without a view (#1812).\n ...(base.views ?? []),\n [opsVariantResolver(Op.READ, 'admin'), notAddressable()],\n [Op.LIST, notAddressable()],\n [Op.SEARCH, notAddressable()],\n [opsVariantResolver(Op.CREATE, 'admin'), addressable()],\n [opsVariantResolver(Op.UPDATE, 'admin'), notAddressable()],\n [opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],\n ...organizationLifecycleOpViews,\n ],\n })),\n [R.ORGANIZATION_FEATURES]: resourceUIBehaviorFrom(orgFeaturesFactory, main[R.ORGANIZATION_FEATURES]!, ({ base }) => ({\n icon: base.icon,\n layout: base.layout,\n views: [\n // READ is restated because `resourceUIBehaviorFrom` REPLACES `views` wholesale rather than\n // merging them — it is \"the primary differentiator between main/admin\", per its own contract.\n // Omitting it left the operator able to enable, disable and reset an organization's\n // entitlements while unable to SEE them: the three mutations below act on a record the same\n // preset refused to render. Found when this application composed both scopes and the\n // `Entitlements` rail entry went headless (ADMIN replaces MAIN per resource type).\n [Op.READ, notAddressable()],\n [Op.UPDATE, notAddressable()],\n [OrganizationFeatures_Operations.ENABLE_FEATURE, notAddressable({ iconOverride: ToggleRight })],\n [OrganizationFeatures_Operations.DISABLE_FEATURE, notAddressable({ iconOverride: ToggleLeft })],\n [OrganizationFeatures_Operations.RESET_FEATURES, notAddressable({ iconOverride: RotateCcw })],\n ],\n })),\n };\n}\n\nexport const organizationsMainPresets = buildOrganizationsMainPresets();\nexport const organizationsAdminPresets = buildOrganizationsAdminPresets(organizationsMainPresets);\n\nexport const organizationsMainOrgResourceUIBehavior = organizationsMainPresets[R.ORGANIZATIONS]!;\nexport const organizationsAdminOrgResourceUIBehavior = organizationsAdminPresets[R.ORGANIZATIONS]!;\nexport const organizationUnitsMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_UNITS]!;\nexport const organizationMembersMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_MEMBERS]!;\nexport const organizationProfilesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_PROFILES]!;\nexport const organizationNotificationsMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_NOTIFICATIONS]!;\nexport const organizationPreferencesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_PREFERENCES]!;\nexport const organizationFeaturesMainResourceUIBehavior = organizationsMainPresets[R.ORGANIZATION_FEATURES]!;\nexport const organizationFeaturesAdminResourceUIBehavior = organizationsAdminPresets[R.ORGANIZATION_FEATURES]!;\n"]}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* live in domain presets (see `billing.resource-presets.tsx` as reference).
|
|
8
8
|
*/
|
|
9
9
|
import type { ResourceOperationFrontendConfig } from '@wildo-ai/saas-frontend-lib';
|
|
10
|
+
import { UpdateLikeMutationFallbackMode } from '@wildo-ai/saas-frontend-lib';
|
|
10
11
|
/**
|
|
11
12
|
* Optional view fields an `addressable()` / `notAddressable()` operation may
|
|
12
13
|
* carry. Excludes `surface` — the factory owns it.
|
|
@@ -40,5 +41,24 @@ export declare function notAddressable(overrides?: OperationViewOverrides): Reso
|
|
|
40
41
|
* resource operation config instead of authoring `apiOnly()` per app.
|
|
41
42
|
*/
|
|
42
43
|
export declare function apiOnly(): ResourceOperationFrontendConfig;
|
|
44
|
+
/**
|
|
45
|
+
* View fields for a ROW VERB on a resource that has NO field-write operation (no core UPDATE).
|
|
46
|
+
*
|
|
47
|
+
* Such a verb is update-like (`resourceOperationLike: UPDATE` is what gives it its `…/{id}/<verb>` route),
|
|
48
|
+
* and every host runs an update-like verb through the row's RMM by default. A resource with no UPDATE can
|
|
49
|
+
* never have one, so a verb that opens a form failed closed: "This action failed", nothing sent. Measured in
|
|
50
|
+
* the browser on an organization OAuth client's `setAutonomousAgents` and `rotate` (#1812).
|
|
51
|
+
* `updateLikeMutationFallbackMode` documents exactly this case; spread this into each such verb's view.
|
|
52
|
+
*
|
|
53
|
+
* The reason is the RESOURCE's rather than the verb's, so declare it on every row verb of such a resource,
|
|
54
|
+
* form-bearing or not. Never on a resource that HAS an UPDATE: there the RMM carries optimistic state and
|
|
55
|
+
* version-conflict detail the direct lane gives up.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* [OrgApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
59
|
+
*/
|
|
60
|
+
export declare const ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE: {
|
|
61
|
+
readonly updateLikeMutationFallbackMode: UpdateLikeMutationFallbackMode.DIRECT_OPERATION_FALLBACK;
|
|
62
|
+
};
|
|
43
63
|
export {};
|
|
44
64
|
//# sourceMappingURL=resource.config.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.config.utils.d.ts","sourceRoot":"","sources":["../../../../../src/config/resources/resource.config.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"resource.config.utils.d.ts","sourceRoot":"","sources":["../../../../../src/config/resources/resource.config.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG7E;;;GAGG;AACH,KAAK,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,CAAC,CAAC;AAExF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE,sBAAsB,GAAG,+BAA+B,CAE/F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,sBAAsB,GAAG,+BAA+B,CAElG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,IAAI,+BAA+B,CAEzD;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mCAAmC;;CAEL,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Prefer importing these from here rather than duplicating per app; layout/template patterns
|
|
7
7
|
* live in domain presets (see `billing.resource-presets.tsx` as reference).
|
|
8
8
|
*/
|
|
9
|
+
import { UpdateLikeMutationFallbackMode } from '@wildo-ai/saas-frontend-lib';
|
|
9
10
|
import { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';
|
|
10
11
|
/**
|
|
11
12
|
* Declare an operation's frontend surface as **ADDRESSABLE** — a URL-routable
|
|
@@ -41,4 +42,23 @@ export function notAddressable(overrides) {
|
|
|
41
42
|
export function apiOnly() {
|
|
42
43
|
return { surface: ResourceOperationFrontendSurface.API_ONLY };
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* View fields for a ROW VERB on a resource that has NO field-write operation (no core UPDATE).
|
|
47
|
+
*
|
|
48
|
+
* Such a verb is update-like (`resourceOperationLike: UPDATE` is what gives it its `…/{id}/<verb>` route),
|
|
49
|
+
* and every host runs an update-like verb through the row's RMM by default. A resource with no UPDATE can
|
|
50
|
+
* never have one, so a verb that opens a form failed closed: "This action failed", nothing sent. Measured in
|
|
51
|
+
* the browser on an organization OAuth client's `setAutonomousAgents` and `rotate` (#1812).
|
|
52
|
+
* `updateLikeMutationFallbackMode` documents exactly this case; spread this into each such verb's view.
|
|
53
|
+
*
|
|
54
|
+
* The reason is the RESOURCE's rather than the verb's, so declare it on every row verb of such a resource,
|
|
55
|
+
* form-bearing or not. Never on a resource that HAS an UPDATE: there the RMM carries optimistic state and
|
|
56
|
+
* version-conflict detail the direct lane gives up.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* [OrgApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
60
|
+
*/
|
|
61
|
+
export const ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE = {
|
|
62
|
+
updateLikeMutationFallbackMode: UpdateLikeMutationFallbackMode.DIRECT_OPERATION_FALLBACK,
|
|
63
|
+
};
|
|
44
64
|
//# sourceMappingURL=resource.config.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.config.utils.js","sourceRoot":"","sources":["../../../../../src/config/resources/resource.config.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAQzE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,SAAkC;IAC5D,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkC;IAC/D,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,QAAQ,EAAE,CAAC;AAChE,CAAC","sourcesContent":["/**\n * Shared helpers for resource frontend configuration.\n * Used by domain-oriented preset files (`addressable` / `notAddressable` /\n * `apiOnly` for `views` entries).\n *\n * Prefer importing these from here rather than duplicating per app; layout/template patterns\n * live in domain presets (see `billing.resource-presets.tsx` as reference).\n */\n\nimport type { ResourceOperationFrontendConfig } from '@wildo-ai/saas-frontend-lib';\nimport { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';\n\n/**\n * Optional view fields an `addressable()` / `notAddressable()` operation may\n * carry. Excludes `surface` — the factory owns it.\n */\ntype OperationViewOverrides = Partial<Omit<ResourceOperationFrontendConfig, 'surface'>>;\n\n/**\n * Declare an operation's frontend surface as **ADDRESSABLE** — a URL-routable\n * view (a deep-linkable page that lives in the navigation area; row-click\n * resolves a route). Has an action button. Accepts the optional view fields\n * (`actionVisibility`, `iconOverride`, layout override, …).\n */\nexport function addressable(overrides?: OperationViewOverrides): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.ADDRESSABLE, ...overrides };\n}\n\n/**\n * Declare an operation's frontend surface as **EMBEDDED** — a non-addressable\n * view (no URL) rendered within a host: an overlay/drill-in when invoked standalone,\n * or inline when embedded in a composite view or a nested relationship view. Has an\n * action button. Accepts the optional view fields. (Replaces `isAddressable: false`.)\n */\nexport function notAddressable(overrides?: OperationViewOverrides): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.EMBEDDED, ...overrides };\n}\n\n/**\n * Declare an operation as **API_ONLY** — headless: callable from frontend code\n * as a typed API, with NO rendered interface at all (no page, no embedded view, no\n * action button). Use for operations driven by the system, a workflow, or signup\n * rather than a user form (e.g. auto-created profiles/preferences, engine-authored\n * state, system-managed versions/metadata).\n *\n * Takes NO view overrides by design — a headless operation has no view fields to\n * set, and the registry build fails closed if an `API_ONLY` config carries any.\n * To make an operation headless-by-default across every app, set its\n * `defaultFrontendPosture: ResourceOperationFrontendSurface.API_ONLY` on the\n * resource operation config instead of authoring `apiOnly()` per app.\n */\nexport function apiOnly(): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.API_ONLY };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resource.config.utils.js","sourceRoot":"","sources":["../../../../../src/config/resources/resource.config.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAQzE;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,SAAkC;IAC5D,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkC;IAC/D,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,QAAQ,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,8BAA8B,EAAE,8BAA8B,CAAC,yBAAyB;CAC/C,CAAC","sourcesContent":["/**\n * Shared helpers for resource frontend configuration.\n * Used by domain-oriented preset files (`addressable` / `notAddressable` /\n * `apiOnly` for `views` entries).\n *\n * Prefer importing these from here rather than duplicating per app; layout/template patterns\n * live in domain presets (see `billing.resource-presets.tsx` as reference).\n */\n\nimport type { ResourceOperationFrontendConfig } from '@wildo-ai/saas-frontend-lib';\nimport { UpdateLikeMutationFallbackMode } from '@wildo-ai/saas-frontend-lib';\nimport { ResourceOperationFrontendSurface } from '@wildo-ai/saas-models';\n\n/**\n * Optional view fields an `addressable()` / `notAddressable()` operation may\n * carry. Excludes `surface` — the factory owns it.\n */\ntype OperationViewOverrides = Partial<Omit<ResourceOperationFrontendConfig, 'surface'>>;\n\n/**\n * Declare an operation's frontend surface as **ADDRESSABLE** — a URL-routable\n * view (a deep-linkable page that lives in the navigation area; row-click\n * resolves a route). Has an action button. Accepts the optional view fields\n * (`actionVisibility`, `iconOverride`, layout override, …).\n */\nexport function addressable(overrides?: OperationViewOverrides): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.ADDRESSABLE, ...overrides };\n}\n\n/**\n * Declare an operation's frontend surface as **EMBEDDED** — a non-addressable\n * view (no URL) rendered within a host: an overlay/drill-in when invoked standalone,\n * or inline when embedded in a composite view or a nested relationship view. Has an\n * action button. Accepts the optional view fields. (Replaces `isAddressable: false`.)\n */\nexport function notAddressable(overrides?: OperationViewOverrides): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.EMBEDDED, ...overrides };\n}\n\n/**\n * Declare an operation as **API_ONLY** — headless: callable from frontend code\n * as a typed API, with NO rendered interface at all (no page, no embedded view, no\n * action button). Use for operations driven by the system, a workflow, or signup\n * rather than a user form (e.g. auto-created profiles/preferences, engine-authored\n * state, system-managed versions/metadata).\n *\n * Takes NO view overrides by design — a headless operation has no view fields to\n * set, and the registry build fails closed if an `API_ONLY` config carries any.\n * To make an operation headless-by-default across every app, set its\n * `defaultFrontendPosture: ResourceOperationFrontendSurface.API_ONLY` on the\n * resource operation config instead of authoring `apiOnly()` per app.\n */\nexport function apiOnly(): ResourceOperationFrontendConfig {\n return { surface: ResourceOperationFrontendSurface.API_ONLY };\n}\n\n/**\n * View fields for a ROW VERB on a resource that has NO field-write operation (no core UPDATE).\n *\n * Such a verb is update-like (`resourceOperationLike: UPDATE` is what gives it its `…/{id}/<verb>` route),\n * and every host runs an update-like verb through the row's RMM by default. A resource with no UPDATE can\n * never have one, so a verb that opens a form failed closed: \"This action failed\", nothing sent. Measured in\n * the browser on an organization OAuth client's `setAutonomousAgents` and `rotate` (#1812).\n * `updateLikeMutationFallbackMode` documents exactly this case; spread this into each such verb's view.\n *\n * The reason is the RESOURCE's rather than the verb's, so declare it on every row verb of such a resource,\n * form-bearing or not. Never on a resource that HAS an UPDATE: there the RMM carries optimistic state and\n * version-conflict detail the direct lane gives up.\n *\n * @example\n * [OrgApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],\n */\nexport const ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE = {\n updateLikeMutationFallbackMode: UpdateLikeMutationFallbackMode.DIRECT_OPERATION_FALLBACK,\n} as const satisfies OperationViewOverrides;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ResourceUIBehavior } from '@wildo-ai/saas-frontend-lib';
|
|
2
|
+
export declare function buildRetentionEnforcementAdminPresets(): Partial<ResourceUIBehavior>;
|
|
3
|
+
export declare const retentionEnforcementAdminPresets: Partial<ResourceUIBehavior>;
|
|
4
|
+
export declare const retentionEnforcementRecordsAdminResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
5
|
+
//# sourceMappingURL=retention-enforcement.resource-presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention-enforcement.resource-presets.d.ts","sourceRoot":"","sources":["../../../../../src/config/resources/retention-enforcement.resource-presets.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAwDtE,wBAAgB,qCAAqC,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAsDnF;AAED,eAAO,MAAM,gCAAgC,6BAA0C,CAAC;AACxF,eAAO,MAAM,kDAAkD,gGAAqE,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DisplayField, DisplayLayout, ResourceHeaderTitle, SummaryLayout, SummaryMeta, resourceUIBehavior } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
+
import { BadgeSemanticVariant, DisplayChromeMode, EditChromeMode, EnumDisplayMode } from '@wildo-ai/zod-decorators';
|
|
4
|
+
import { LabellingTypes } from '@wildo-ai/presets-components-models';
|
|
5
|
+
import { CalendarClock } from 'lucide-react';
|
|
6
|
+
import { CoreResourceType as R, CoreResourceOperation as Op, RetentionEnforcementOutcome, RetentionEnforcementRecordSchema, retentionEnforcementRecordsResourceConfiguration_InitializationFactory as retentionEnforcementRecordsFactory, } from '@wildo-ai/saas-models';
|
|
7
|
+
import { addressable, notAddressable } from './resource.config.utils.js';
|
|
8
|
+
/*
|
|
9
|
+
* One run of one resource, in the order an operator asks it: which class and period applied and from which start
|
|
10
|
+
* point, the cutoff it computed, what it deleted and the window of their retention start, what a hold or a statute
|
|
11
|
+
* kept, how it ended and why, and which run it belongs to. Every row empty for most runs hides.
|
|
12
|
+
*/
|
|
13
|
+
function RetentionEnforcementDisplayTemplate() {
|
|
14
|
+
return (_jsxs(DisplayLayout, { children: [_jsx(DisplayField, { name: "retentionClass" }), _jsx(DisplayField, { name: "retentionDaysApplied" }), _jsx(DisplayField, { name: "startPoint" }), _jsx(DisplayField, { name: "cutoff" }), _jsx(DisplayField, { name: "deletedCount" }), _jsx(DisplayField, { name: "oldestDeletedStartedAt" }), _jsx(DisplayField, { name: "newestDeletedStartedAt" }), _jsx(DisplayField, { name: "heldSkippedCount" }), _jsx(DisplayField, { name: "statutoryRestrictedCount" }), _jsx(DisplayField, { name: "reachedRunCeiling" }), _jsx(DisplayField, { name: "failureStage" }), _jsx(DisplayField, { name: "skipReason" }), _jsx(DisplayField, { name: "sweptAt" }), _jsx(DisplayField, { name: "runRef" })] }));
|
|
15
|
+
}
|
|
16
|
+
/* A card in a list grouped by the DAY the sweep ran: the resource (the title), the outcome badge, the class and the count deleted. */
|
|
17
|
+
function RetentionEnforcementSummaryTemplate() {
|
|
18
|
+
return (_jsx(SummaryLayout, { children: _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "outcome" }), _jsx(DisplayField, { name: "retentionClass" }), _jsx(DisplayField, { name: "deletedCount" })] }) }));
|
|
19
|
+
}
|
|
20
|
+
const hideWhenEmpty = { display: { hideWhenEmpty: true } };
|
|
21
|
+
const labelledOnCard = { summaryOverride: { chromeMode: DisplayChromeMode.INLINE } };
|
|
22
|
+
export function buildRetentionEnforcementAdminPresets() {
|
|
23
|
+
return {
|
|
24
|
+
[R.RETENTION_ENFORCEMENT_RECORDS]: resourceUIBehavior(retentionEnforcementRecordsFactory, RetentionEnforcementRecordSchema, ({ schema }) => ({
|
|
25
|
+
icon: CalendarClock,
|
|
26
|
+
// A run of one resource is named by the resource it swept — by that resource's OWN title from the label tree
|
|
27
|
+
// (`resources.<type>.header.title`), never a humanized identifier. A missing title answers the raw type, which
|
|
28
|
+
// looks missing and gets authored (`display-text-comes-from-i18n.md`).
|
|
29
|
+
getFrontendResourceLabel: ({ currentObject, t }) => {
|
|
30
|
+
const key = `${LabellingTypes.RESOURCES}.${currentObject.resourceType}.header.title`;
|
|
31
|
+
const resolved = t(key);
|
|
32
|
+
return resolved === key ? currentObject.resourceType : resolved;
|
|
33
|
+
},
|
|
34
|
+
layout: {
|
|
35
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
36
|
+
header: () => (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "outcome", hideLabel: true, hideDescription: true, className: "w-auto" })] })),
|
|
37
|
+
display: RetentionEnforcementDisplayTemplate,
|
|
38
|
+
summary: RetentionEnforcementSummaryTemplate,
|
|
39
|
+
},
|
|
40
|
+
fields: {
|
|
41
|
+
// The colour carries the outcome: a failed run is the one an operator must act on.
|
|
42
|
+
outcome: schema.shape.outcome.enumUI({
|
|
43
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
44
|
+
values: {
|
|
45
|
+
[RetentionEnforcementOutcome.COMPLETED]: { color: BadgeSemanticVariant.SUCCESS },
|
|
46
|
+
[RetentionEnforcementOutcome.DEFERRED_BY_CEILING]: { color: BadgeSemanticVariant.INFO },
|
|
47
|
+
[RetentionEnforcementOutcome.FAILED]: { color: BadgeSemanticVariant.DESTRUCTIVE },
|
|
48
|
+
[RetentionEnforcementOutcome.SKIPPED]: { color: BadgeSemanticVariant.SECONDARY },
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
retentionClass: schema.shape.retentionClass.enumUI(labelledOnCard),
|
|
52
|
+
deletedCount: schema.shape.deletedCount.numberUI(labelledOnCard),
|
|
53
|
+
// Present only for some runs: a skip has no period or cutoff, a run that deleted nothing has no window,
|
|
54
|
+
// and the hold and statutory counts are absent when nothing measured them.
|
|
55
|
+
retentionDaysApplied: schema.shape.retentionDaysApplied.numberUI(hideWhenEmpty),
|
|
56
|
+
cutoff: schema.shape.cutoff.dateUI(hideWhenEmpty),
|
|
57
|
+
oldestDeletedStartedAt: schema.shape.oldestDeletedStartedAt.dateUI(hideWhenEmpty),
|
|
58
|
+
newestDeletedStartedAt: schema.shape.newestDeletedStartedAt.dateUI(hideWhenEmpty),
|
|
59
|
+
heldSkippedCount: schema.shape.heldSkippedCount.numberUI(hideWhenEmpty),
|
|
60
|
+
statutoryRestrictedCount: schema.shape.statutoryRestrictedCount.numberUI(hideWhenEmpty),
|
|
61
|
+
failureStage: schema.shape.failureStage.enumUI(hideWhenEmpty),
|
|
62
|
+
skipReason: schema.shape.skipReason.enumUI(hideWhenEmpty),
|
|
63
|
+
},
|
|
64
|
+
views: [
|
|
65
|
+
[Op.LIST, addressable({ collectionDisplayConfig: { quickFilterField: 'outcome', temporalGroupField: 'sweptAt' } })],
|
|
66
|
+
// Row click → the run in the companion drawer.
|
|
67
|
+
[Op.READ, notAddressable()],
|
|
68
|
+
],
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export const retentionEnforcementAdminPresets = buildRetentionEnforcementAdminPresets();
|
|
73
|
+
export const retentionEnforcementRecordsAdminResourceUIBehavior = retentionEnforcementAdminPresets[R.RETENTION_ENFORCEMENT_RECORDS];
|
|
74
|
+
//# sourceMappingURL=retention-enforcement.resource-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention-enforcement.resource-presets.js","sourceRoot":"","sources":["../../../../../src/config/resources/retention-enforcement.resource-presets.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Retention enforcement (#1636) — the operator's read-only view of whether each declared retention period is\n * being enforced: one row per sweep run and bound resource, with what was deleted, what a hold kept and how the\n * run ended.\n *\n * ADMIN only, and read-only: the sweep writes every row, so there is no form and no action. A LIST grouped by\n * the day the sweep ran, with an outcome quick-filter so a FAILED run is one click away, and the row detail in\n * the drawer as one flat list of facts.\n *\n * Surfaced in the Settings Hub by the `application-retention-enforcement` (administration) destination.\n */\nimport React from 'react';\nimport type { ResourceUIBehavior } from '@wildo-ai/saas-frontend-lib';\nimport { DisplayField, DisplayLayout, ResourceHeaderTitle, SummaryLayout, SummaryMeta, resourceUIBehavior } from '@wildo-ai/saas-frontend-lib';\nimport { BadgeSemanticVariant, DisplayChromeMode, EditChromeMode, EnumDisplayMode } from '@wildo-ai/zod-decorators';\nimport { LabellingTypes } from '@wildo-ai/presets-components-models';\nimport { CalendarClock } from 'lucide-react';\nimport {\n CoreResourceType as R,\n CoreResourceOperation as Op,\n RetentionEnforcementOutcome,\n RetentionEnforcementRecordSchema,\n retentionEnforcementRecordsResourceConfiguration_InitializationFactory as retentionEnforcementRecordsFactory,\n} from '@wildo-ai/saas-models';\nimport { addressable, notAddressable } from './resource.config.utils';\n\n/*\n * One run of one resource, in the order an operator asks it: which class and period applied and from which start\n * point, the cutoff it computed, what it deleted and the window of their retention start, what a hold or a statute\n * kept, how it ended and why, and which run it belongs to. Every row empty for most runs hides.\n */\nfunction RetentionEnforcementDisplayTemplate(): React.JSX.Element {\n return (\n <DisplayLayout>\n <DisplayField name=\"retentionClass\" />\n <DisplayField name=\"retentionDaysApplied\" />\n <DisplayField name=\"startPoint\" />\n <DisplayField name=\"cutoff\" />\n <DisplayField name=\"deletedCount\" />\n <DisplayField name=\"oldestDeletedStartedAt\" />\n <DisplayField name=\"newestDeletedStartedAt\" />\n <DisplayField name=\"heldSkippedCount\" />\n <DisplayField name=\"statutoryRestrictedCount\" />\n <DisplayField name=\"reachedRunCeiling\" />\n <DisplayField name=\"failureStage\" />\n <DisplayField name=\"skipReason\" />\n <DisplayField name=\"sweptAt\" />\n <DisplayField name=\"runRef\" />\n </DisplayLayout>\n );\n}\n\n/* A card in a list grouped by the DAY the sweep ran: the resource (the title), the outcome badge, the class and the count deleted. */\nfunction RetentionEnforcementSummaryTemplate(): React.JSX.Element {\n return (\n <SummaryLayout>\n <SummaryMeta>\n <DisplayField name=\"outcome\" />\n <DisplayField name=\"retentionClass\" />\n <DisplayField name=\"deletedCount\" />\n </SummaryMeta>\n </SummaryLayout>\n );\n}\n\nconst hideWhenEmpty = { display: { hideWhenEmpty: true } } as const;\nconst labelledOnCard = { summaryOverride: { chromeMode: DisplayChromeMode.INLINE } } as const;\n\nexport function buildRetentionEnforcementAdminPresets(): Partial<ResourceUIBehavior> {\n return {\n [R.RETENTION_ENFORCEMENT_RECORDS]: resourceUIBehavior(retentionEnforcementRecordsFactory, RetentionEnforcementRecordSchema, ({ schema }) => ({\n icon: CalendarClock,\n // A run of one resource is named by the resource it swept — by that resource's OWN title from the label tree\n // (`resources.<type>.header.title`), never a humanized identifier. A missing title answers the raw type, which\n // looks missing and gets authored (`display-text-comes-from-i18n.md`).\n getFrontendResourceLabel: ({ currentObject, t }) => {\n const key = `${LabellingTypes.RESOURCES}.${currentObject.resourceType}.header.title`;\n const resolved = t(key);\n return resolved === key ? currentObject.resourceType : resolved;\n },\n layout: {\n defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },\n header: () => (\n <div className=\"flex min-w-0 flex-wrap items-center gap-field\">\n <ResourceHeaderTitle />\n <DisplayField name=\"outcome\" hideLabel hideDescription className=\"w-auto\" />\n </div>\n ),\n display: RetentionEnforcementDisplayTemplate,\n summary: RetentionEnforcementSummaryTemplate,\n },\n fields: {\n // The colour carries the outcome: a failed run is the one an operator must act on.\n outcome: schema.shape.outcome.enumUI({\n display: { displayMode: EnumDisplayMode.BADGE },\n values: {\n [RetentionEnforcementOutcome.COMPLETED]: { color: BadgeSemanticVariant.SUCCESS },\n [RetentionEnforcementOutcome.DEFERRED_BY_CEILING]: { color: BadgeSemanticVariant.INFO },\n [RetentionEnforcementOutcome.FAILED]: { color: BadgeSemanticVariant.DESTRUCTIVE },\n [RetentionEnforcementOutcome.SKIPPED]: { color: BadgeSemanticVariant.SECONDARY },\n },\n }),\n retentionClass: schema.shape.retentionClass.enumUI(labelledOnCard),\n deletedCount: schema.shape.deletedCount.numberUI(labelledOnCard),\n // Present only for some runs: a skip has no period or cutoff, a run that deleted nothing has no window,\n // and the hold and statutory counts are absent when nothing measured them.\n retentionDaysApplied: schema.shape.retentionDaysApplied.numberUI(hideWhenEmpty),\n cutoff: schema.shape.cutoff.dateUI(hideWhenEmpty),\n oldestDeletedStartedAt: schema.shape.oldestDeletedStartedAt.dateUI(hideWhenEmpty),\n newestDeletedStartedAt: schema.shape.newestDeletedStartedAt.dateUI(hideWhenEmpty),\n heldSkippedCount: schema.shape.heldSkippedCount.numberUI(hideWhenEmpty),\n statutoryRestrictedCount: schema.shape.statutoryRestrictedCount.numberUI(hideWhenEmpty),\n failureStage: schema.shape.failureStage.enumUI(hideWhenEmpty),\n skipReason: schema.shape.skipReason.enumUI(hideWhenEmpty),\n },\n views: [\n [Op.LIST, addressable({ collectionDisplayConfig: { quickFilterField: 'outcome', temporalGroupField: 'sweptAt' } })],\n // Row click → the run in the companion drawer.\n [Op.READ, notAddressable()],\n ],\n })),\n };\n}\n\nexport const retentionEnforcementAdminPresets = buildRetentionEnforcementAdminPresets();\nexport const retentionEnforcementRecordsAdminResourceUIBehavior = retentionEnforcementAdminPresets[R.RETENTION_ENFORCEMENT_RECORDS]!;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Security & Compliance — Resource frontend presets
|
|
3
3
|
*
|
|
4
|
-
* Domain: ORG_API_KEYS, AUDIT_LOGS, SIEM (polymorphic),
|
|
4
|
+
* Domain: ORG_API_KEYS, OAUTH_CLIENTS_ORGANIZATION, AUDIT_LOGS, SIEM (polymorphic),
|
|
5
5
|
* SSO_CONFIG (poly), SSO_CONNECTIONS (poly), SCIM_PROVISIONING (poly), SCIM_TOKENS (poly)
|
|
6
6
|
*
|
|
7
7
|
* SIEM layout JSX lives in this file next to `layout.refs` + `fields` so section chrome
|
|
@@ -24,6 +24,8 @@ export declare const securityMainPresets: Partial<ResourceUIBehavior>;
|
|
|
24
24
|
export declare const securityAdminPresets: Partial<ResourceUIBehavior>;
|
|
25
25
|
export declare const orgApiKeysMainResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
26
26
|
export declare const orgApiKeysAdminResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
27
|
+
export declare const orgOAuthClientsMainResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
28
|
+
export declare const orgOAuthClientsAdminResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
27
29
|
export declare const auditLogsMainResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
28
30
|
export declare const applicationAuditLogsAdminResourceUIBehavior: import("@wildo-ai/saas-frontend-lib").ResourceUIBehaviorConfig<any, any, import("zod").ZodAny>;
|
|
29
31
|
//# sourceMappingURL=security.resource-presets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.resource-presets.d.ts","sourceRoot":"","sources":["../../../../../src/config/resources/security.resource-presets.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"security.resource-presets.d.ts","sourceRoot":"","sources":["../../../../../src/config/resources/security.resource-presets.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAywBtE,wBAAgB,wBAAwB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CA0xBtE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuTxG;AAED,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAC9D,eAAO,MAAM,oBAAoB,6BAAiD,CAAC;AAEnF,eAAO,MAAM,gCAAgC,gGAAuC,CAAC;AACrF,eAAO,MAAM,iCAAiC,gGAAwC,CAAC;AACvF,eAAO,MAAM,qCAAqC,gGAAqD,CAAC;AACxG,eAAO,MAAM,sCAAsC,gGAAsD,CAAC;AAC1G,eAAO,MAAM,+BAA+B,gGAAqC,CAAC;AAClF,eAAO,MAAM,2CAA2C,gGAAkD,CAAC"}
|