@asteby/metacore-runtime-react 49.9.0 → 49.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/business/line-items-editor.js +2 -2
- package/dist/business/line-product-cell.js +1 -1
- package/dist/dynamic-columns-shim.d.ts +17 -2
- package/dist/dynamic-columns-shim.d.ts.map +1 -1
- package/dist/dynamic-columns.d.ts +17 -2
- package/dist/dynamic-columns.d.ts.map +1 -1
- package/dist/dynamic-columns.js +37 -4
- package/dist/dynamic-kanban.d.ts +10 -0
- package/dist/dynamic-kanban.d.ts.map +1 -1
- package/dist/dynamic-kanban.js +9 -8
- package/dist/dynamic-table.d.ts +26 -2
- package/dist/dynamic-table.d.ts.map +1 -1
- package/dist/dynamic-table.js +17 -7
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/permissions-context.d.ts +64 -3
- package/dist/permissions-context.d.ts.map +1 -1
- package/dist/permissions-context.js +52 -6
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/document-editor-inline-selects.test.tsx +7 -7
- package/src/__tests__/dynamic-table-default-sort-bulk-ctx.test.tsx +195 -0
- package/src/__tests__/image-cell-basepath.test.tsx +72 -0
- package/src/__tests__/permissions-allowed-roles.test.tsx +104 -0
- package/src/__tests__/row-action-predicate.test.tsx +172 -0
- package/src/business/line-items-editor.tsx +8 -5
- package/src/business/line-product-cell.tsx +1 -1
- package/src/dynamic-columns-shim.ts +17 -1
- package/src/dynamic-columns.tsx +52 -4
- package/src/dynamic-kanban.tsx +27 -5
- package/src/dynamic-table.tsx +38 -8
- package/src/index.ts +5 -0
- package/src/permissions-context.tsx +99 -4
- package/src/types.ts +8 -0
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ export { PURGE_ADDON_MESSAGE, isAddonFrontendCacheUrl, purgeAddonFrontendCache,
|
|
|
47
47
|
export { AddonLayoutProvider, useAddonLayout, useAddonLayoutControl, useDeclareAddonLayout, } from './addon-layout-context';
|
|
48
48
|
export * from './slot';
|
|
49
49
|
export * from './capability-gate';
|
|
50
|
-
export { PermissionsProvider, useCan, usePermissionsActive, makeCan, capabilityForActionKey, modelCapability, gateTableMetadata, resolveRowActions, } from './permissions-context';
|
|
50
|
+
export { PermissionsProvider, useCan, usePermissionsActive, useRoleGate, isActionAllowedForRoles, makeCan, capabilityForActionKey, modelCapability, gateTableMetadata, resolveRowActions, } from './permissions-context';
|
|
51
51
|
export { ApprovalPinDialog, approvalErrorMessage, } from './approval-pin-dialog';
|
|
52
52
|
export { ApprovalGateProvider, useApprovalGate, approvalCapability, approvalRequiredInfo, approvalGateAvailable, APPROVAL_PARKED_EVENT, APPROVAL_DECIDED_EVENT, } from './approval-gate';
|
|
53
53
|
export { useSupervisor, withApproval, } from './supervised-action';
|
|
@@ -79,7 +79,7 @@ export { RealtimeProvider, useRealtimeClient, useRealtimeDefault, useRealtime, u
|
|
|
79
79
|
export { ADDON_MANIFEST_CHANGED_TYPE, wireHotSwapInvalidation, useManifestHotSwapSubscriber, } from './manifest-hotswap-subscriber';
|
|
80
80
|
export { useHotSwapReload, applyHotSwapReload, withVersionParam, clearFederationContainer, shortenHash, } from './hotswap-reload-policy';
|
|
81
81
|
export * from './dynamic-icon';
|
|
82
|
-
export { defaultGetDynamicColumns, makeDefaultGetDynamicColumns, relationKeyFor, resolveAvatarSrc, resolveMissingActorLabel, resolveActorDisplayName, resolveRelationLabel, } from './dynamic-columns';
|
|
82
|
+
export { defaultGetDynamicColumns, makeDefaultGetDynamicColumns, relationKeyFor, resolveAvatarSrc, resolveImageSrc, resolveMissingActorLabel, resolveActorDisplayName, resolveRelationLabel, } from './dynamic-columns';
|
|
83
83
|
export { humanizeToken, localizeFieldLabel, translateMetadataLabel } from './dynamic-columns-helpers';
|
|
84
84
|
export { UrlChip, FileChip, ImageThumbnail, MediaValue, RichText, linkifyText, classifyUrl, isImageUrl, isFileUrl, ensureHref, smartUrlLabel, fileNameFromUrl, splitTrailingPunct, } from './rich-url';
|
|
85
85
|
export { ImageStack, OptionBadge, statusColorFor, useIsDarkTheme, } from './display-value';
|
|
@@ -7,14 +7,71 @@ export interface PermissionsProviderProps {
|
|
|
7
7
|
permissions: string[];
|
|
8
8
|
/** Superrole bypass — admins/owners see everything, no filtering at all. */
|
|
9
9
|
isAdmin: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Roles of the current user (e.g. `['doctor']`), used ONLY to honour the
|
|
12
|
+
* per-action `allowedRoles` declared in table metadata. Opt-in: while this
|
|
13
|
+
* is `undefined` (and `loading` is not set) role filtering is OFF and
|
|
14
|
+
* `allowedRoles` is ignored, exactly as before this prop existed. Once the
|
|
15
|
+
* host passes an array (even `[]` = "resolved, no roles") the filter is
|
|
16
|
+
* fail-closed: an action with a non-empty `allowedRoles` that shares no
|
|
17
|
+
* role with the user is hidden.
|
|
18
|
+
*
|
|
19
|
+
* Pass a referentially stable array (`useMemo`, or a value straight from a
|
|
20
|
+
* store): the table rebuilds its columns when `roles` / `superRoles` change
|
|
21
|
+
* identity, so an inline `roles={[role]}` recreates them on every render.
|
|
22
|
+
*/
|
|
23
|
+
roles?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Roles that bypass `allowedRoles` entirely (the host's superroles, e.g.
|
|
26
|
+
* `['admin', 'super_admin']`). Default `[]` = no role bypasses. `isAdmin`
|
|
27
|
+
* also bypasses. Same stable-reference advice as `roles`.
|
|
28
|
+
*/
|
|
29
|
+
superRoles?: string[];
|
|
30
|
+
/**
|
|
31
|
+
* The host is still hydrating the session roles. While true no action is
|
|
32
|
+
* hidden by `allowedRoles` (avoids a flash of missing actions); set it back
|
|
33
|
+
* to false once `roles` is resolved.
|
|
34
|
+
*/
|
|
35
|
+
rolesLoading?: boolean;
|
|
10
36
|
children: React.ReactNode;
|
|
11
37
|
}
|
|
38
|
+
/** Resolved role-gating state shared with the table surfaces. */
|
|
39
|
+
export interface RoleGate {
|
|
40
|
+
/** User roles; `undefined` while unresolved. */
|
|
41
|
+
roles?: string[];
|
|
42
|
+
superRoles: string[];
|
|
43
|
+
loading: boolean;
|
|
44
|
+
isAdmin: boolean;
|
|
45
|
+
}
|
|
12
46
|
/**
|
|
13
47
|
* Builds the capability predicate from a raw permission list. Pure — exported
|
|
14
48
|
* so hosts/tests can evaluate permissions outside React.
|
|
15
49
|
*/
|
|
16
50
|
export declare function makeCan(permissions: string[], isAdmin: boolean): CanFn;
|
|
17
|
-
export declare function PermissionsProvider({ permissions, isAdmin, children }: PermissionsProviderProps): React.JSX.Element;
|
|
51
|
+
export declare function PermissionsProvider({ permissions, isAdmin, roles, superRoles, rolesLoading, children, }: PermissionsProviderProps): React.JSX.Element;
|
|
52
|
+
/**
|
|
53
|
+
* Role-gating state of the nearest <PermissionsProvider>, or `null` when none
|
|
54
|
+
* is mounted (no provider → no role filtering, legacy behaviour).
|
|
55
|
+
*/
|
|
56
|
+
export declare function useRoleGate(): RoleGate | null;
|
|
57
|
+
/**
|
|
58
|
+
* Whether `action` is visible for the user under `gate`. Pure.
|
|
59
|
+
*
|
|
60
|
+
* UX ONLY: this hides buttons, it does not authorize anything. The backend
|
|
61
|
+
* remains the authority and must enforce the same `allowedRoles` on execution.
|
|
62
|
+
*
|
|
63
|
+
* Rules:
|
|
64
|
+
* - no gate (no provider) → visible (unchanged behaviour).
|
|
65
|
+
* - action without `allowedRoles` (or empty) → visible. Reads both the
|
|
66
|
+
* camelCase `allowedRoles` and the snake_case `allowed_roles` wire forms.
|
|
67
|
+
* - `gate.loading` → visible (don't flash-hide while the session hydrates).
|
|
68
|
+
* - `gate.roles === undefined` and not loading → the host did not opt in to
|
|
69
|
+
* role gating → visible.
|
|
70
|
+
* - `gate.isAdmin` or any user role in `gate.superRoles` → visible.
|
|
71
|
+
* - otherwise visible only if the user shares a role with `allowedRoles`
|
|
72
|
+
* (fail-closed: `roles: []` sees none of the restricted actions).
|
|
73
|
+
*/
|
|
74
|
+
export declare function isActionAllowedForRoles(action: ActionDefinition, gate: RoleGate | null): boolean;
|
|
18
75
|
/**
|
|
19
76
|
* Returns the capability predicate. Without a <PermissionsProvider> ancestor
|
|
20
77
|
* it returns an always-true function — existing hosts that never mount the
|
|
@@ -41,10 +98,14 @@ export declare function modelCapability(model: string, actionKey: string): strin
|
|
|
41
98
|
* actions so individual entries can be dropped; `tx` resolves their labels
|
|
42
99
|
* (defaults to the Spanish fallbacks used by the column factory).
|
|
43
100
|
*
|
|
101
|
+
* When `roleGate` is given, actions declaring `allowedRoles` are also dropped
|
|
102
|
+
* for users outside those roles (see `isActionAllowedForRoles`; UX only, the
|
|
103
|
+
* backend stays the authority).
|
|
104
|
+
*
|
|
44
105
|
* Pure + idempotent. Callers should only invoke it when a provider is active
|
|
45
106
|
* (`usePermissionsActive()`), otherwise pass the metadata through untouched.
|
|
46
107
|
*/
|
|
47
|
-
export declare function gateTableMetadata(metadata: TableMetadata, model: string, can: CanFn, tx?: (i18nKey: string, fallback: string) => string): TableMetadata;
|
|
108
|
+
export declare function gateTableMetadata(metadata: TableMetadata, model: string, can: CanFn, tx?: (i18nKey: string, fallback: string) => string, roleGate?: RoleGate | null): TableMetadata;
|
|
48
109
|
/**
|
|
49
110
|
* Resolves the per-row (`placement: 'row'`) action list for a model exactly the
|
|
50
111
|
* way DynamicTable's action column does, so the kanban card menu shows the SAME
|
|
@@ -58,5 +119,5 @@ export declare function gateTableMetadata(metadata: TableMetadata, model: string
|
|
|
58
119
|
*
|
|
59
120
|
* Pure. `tx` resolves the trio's i18n labels (defaults to the Spanish fallbacks).
|
|
60
121
|
*/
|
|
61
|
-
export declare function resolveRowActions(metadata: TableMetadata, model: string, can: CanFn, permissionsActive: boolean, tx?: (i18nKey: string, fallback: string) => string): ActionDefinition[];
|
|
122
|
+
export declare function resolveRowActions(metadata: TableMetadata, model: string, can: CanFn, permissionsActive: boolean, tx?: (i18nKey: string, fallback: string) => string, roleGate?: RoleGate | null): ActionDefinition[];
|
|
62
123
|
//# sourceMappingURL=permissions-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions-context.d.ts","sourceRoot":"","sources":["../src/permissions-context.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAA6C,MAAM,OAAO,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM9D,uEAAuE;AACvE,MAAM,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;AAEnD,MAAM,WAAW,wBAAwB;IACrC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAMD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,CAKtE;
|
|
1
|
+
{"version":3,"file":"permissions-context.d.ts","sourceRoot":"","sources":["../src/permissions-context.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAA6C,MAAM,OAAO,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM9D,uEAAuE;AACvE,MAAM,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAA;AAEnD,MAAM,WAAW,wBAAwB;IACrC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACrB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACnB;AAMD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,CAKtE;AASD,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,OAAO,EACP,KAAK,EACL,UAAqB,EACrB,YAAoB,EACpB,QAAQ,GACX,EAAE,wBAAwB,qBAW1B;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAE7C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAShG;AAED;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,KAAK,CAE9B;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExE;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,KAAK,EACV,EAAE,GAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAmC,EAC9E,QAAQ,GAAE,QAAQ,GAAG,IAAW,GACjC,aAAa,CAkCf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,KAAK,EACV,iBAAiB,EAAE,OAAO,EAC1B,EAAE,GAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAmC,EAC9E,QAAQ,GAAE,QAAQ,GAAG,IAAW,GACjC,gBAAgB,EAAE,CAkBpB"}
|
|
@@ -39,9 +39,51 @@ export function makeCan(permissions, isAdmin) {
|
|
|
39
39
|
}
|
|
40
40
|
const ALWAYS_ALLOW = () => true;
|
|
41
41
|
const PermissionsContext = createContext(null);
|
|
42
|
-
|
|
42
|
+
const RoleGateContext = createContext(null);
|
|
43
|
+
const NO_ROLES = [];
|
|
44
|
+
export function PermissionsProvider({ permissions, isAdmin, roles, superRoles = NO_ROLES, rolesLoading = false, children, }) {
|
|
43
45
|
const can = useMemo(() => makeCan(permissions, isAdmin), [permissions, isAdmin]);
|
|
44
|
-
|
|
46
|
+
const roleGate = useMemo(() => ({ roles, superRoles, loading: rolesLoading, isAdmin }), [roles, superRoles, rolesLoading, isAdmin]);
|
|
47
|
+
return (_jsx(PermissionsContext.Provider, { value: can, children: _jsx(RoleGateContext.Provider, { value: roleGate, children: children }) }));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Role-gating state of the nearest <PermissionsProvider>, or `null` when none
|
|
51
|
+
* is mounted (no provider → no role filtering, legacy behaviour).
|
|
52
|
+
*/
|
|
53
|
+
export function useRoleGate() {
|
|
54
|
+
return useContext(RoleGateContext);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether `action` is visible for the user under `gate`. Pure.
|
|
58
|
+
*
|
|
59
|
+
* UX ONLY: this hides buttons, it does not authorize anything. The backend
|
|
60
|
+
* remains the authority and must enforce the same `allowedRoles` on execution.
|
|
61
|
+
*
|
|
62
|
+
* Rules:
|
|
63
|
+
* - no gate (no provider) → visible (unchanged behaviour).
|
|
64
|
+
* - action without `allowedRoles` (or empty) → visible. Reads both the
|
|
65
|
+
* camelCase `allowedRoles` and the snake_case `allowed_roles` wire forms.
|
|
66
|
+
* - `gate.loading` → visible (don't flash-hide while the session hydrates).
|
|
67
|
+
* - `gate.roles === undefined` and not loading → the host did not opt in to
|
|
68
|
+
* role gating → visible.
|
|
69
|
+
* - `gate.isAdmin` or any user role in `gate.superRoles` → visible.
|
|
70
|
+
* - otherwise visible only if the user shares a role with `allowedRoles`
|
|
71
|
+
* (fail-closed: `roles: []` sees none of the restricted actions).
|
|
72
|
+
*/
|
|
73
|
+
export function isActionAllowedForRoles(action, gate) {
|
|
74
|
+
if (!gate)
|
|
75
|
+
return true;
|
|
76
|
+
const declared = action.allowedRoles ?? action.allowed_roles;
|
|
77
|
+
if (!declared || declared.length === 0)
|
|
78
|
+
return true;
|
|
79
|
+
if (gate.loading || gate.roles === undefined)
|
|
80
|
+
return true;
|
|
81
|
+
if (gate.isAdmin)
|
|
82
|
+
return true;
|
|
83
|
+
const userRoles = gate.roles;
|
|
84
|
+
if (userRoles.some((r) => gate.superRoles.includes(r)))
|
|
85
|
+
return true;
|
|
86
|
+
return userRoles.some((r) => declared.includes(r));
|
|
45
87
|
}
|
|
46
88
|
/**
|
|
47
89
|
* Returns the capability predicate. Without a <PermissionsProvider> ancestor
|
|
@@ -90,10 +132,14 @@ const DEFAULT_TRIO = [
|
|
|
90
132
|
* actions so individual entries can be dropped; `tx` resolves their labels
|
|
91
133
|
* (defaults to the Spanish fallbacks used by the column factory).
|
|
92
134
|
*
|
|
135
|
+
* When `roleGate` is given, actions declaring `allowedRoles` are also dropped
|
|
136
|
+
* for users outside those roles (see `isActionAllowedForRoles`; UX only, the
|
|
137
|
+
* backend stays the authority).
|
|
138
|
+
*
|
|
93
139
|
* Pure + idempotent. Callers should only invoke it when a provider is active
|
|
94
140
|
* (`usePermissionsActive()`), otherwise pass the metadata through untouched.
|
|
95
141
|
*/
|
|
96
|
-
export function gateTableMetadata(metadata, model, can, tx = (_k, fallback) => fallback) {
|
|
142
|
+
export function gateTableMetadata(metadata, model, can, tx = (_k, fallback) => fallback, roleGate = null) {
|
|
97
143
|
const allowed = (key) => can(modelCapability(model, key));
|
|
98
144
|
const explicit = metadata.actions ?? [];
|
|
99
145
|
const hasExplicit = (metadata.hasActions ?? explicit.length > 0) && explicit.length > 0;
|
|
@@ -107,7 +153,7 @@ export function gateTableMetadata(metadata, model, can, tx = (_k, fallback) => f
|
|
|
107
153
|
icon: a.icon,
|
|
108
154
|
}))
|
|
109
155
|
: [];
|
|
110
|
-
const actions = base.filter((a) => allowed(a.key));
|
|
156
|
+
const actions = base.filter((a) => allowed(a.key) && isActionAllowedForRoles(a, roleGate));
|
|
111
157
|
return {
|
|
112
158
|
...metadata,
|
|
113
159
|
actions,
|
|
@@ -135,8 +181,8 @@ export function gateTableMetadata(metadata, model, can, tx = (_k, fallback) => f
|
|
|
135
181
|
*
|
|
136
182
|
* Pure. `tx` resolves the trio's i18n labels (defaults to the Spanish fallbacks).
|
|
137
183
|
*/
|
|
138
|
-
export function resolveRowActions(metadata, model, can, permissionsActive, tx = (_k, fallback) => fallback) {
|
|
139
|
-
const gated = permissionsActive ? gateTableMetadata(metadata, model, can, tx) : metadata;
|
|
184
|
+
export function resolveRowActions(metadata, model, can, permissionsActive, tx = (_k, fallback) => fallback, roleGate = null) {
|
|
185
|
+
const gated = permissionsActive ? gateTableMetadata(metadata, model, can, tx, roleGate) : metadata;
|
|
140
186
|
const explicit = gated.actions ?? [];
|
|
141
187
|
const hasExplicit = (gated.hasActions ?? explicit.length > 0) && explicit.length > 0;
|
|
142
188
|
const base = hasExplicit
|
package/dist/types.d.ts
CHANGED
|
@@ -844,6 +844,14 @@ export interface ActionDefinition {
|
|
|
844
844
|
/** Multi-step wizard form; when present the dispatcher renders a wizard. */
|
|
845
845
|
steps?: ActionStep[];
|
|
846
846
|
requiresState?: string[];
|
|
847
|
+
/**
|
|
848
|
+
* Roles allowed to see/run this action. Empty/absent = unrestricted. Only
|
|
849
|
+
* filters the UI when the host mounts <PermissionsProvider roles={...}>
|
|
850
|
+
* (see `isActionAllowedForRoles`); the backend remains the authority.
|
|
851
|
+
*/
|
|
852
|
+
allowedRoles?: string[];
|
|
853
|
+
/** snake_case wire form of `allowedRoles`, read as a fallback. */
|
|
854
|
+
allowed_roles?: string[];
|
|
847
855
|
/**
|
|
848
856
|
* Manifest `supervisor_policy`: the action needs the on-the-spot
|
|
849
857
|
* authorization of a supervisor for that policy (`general.approve_<policy>`).
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAInD;gCACgC;AAChC,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IAC9B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAA;IAClE,uEAAuE;IACvE,cAAc,CAAC,EAAE,yBAAyB,CAAA;IAC1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;CAChD;AAED,oEAAoE;AACpE,MAAM,WAAW,yBAAyB;IACtC,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yFAAyF;IACzF,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,gDAAgD;IAChD,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAA;IACnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,oEAAoE;IACpE,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,gFAAgF;IAChF,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxF;AAED,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,gGAAgG;IAChG,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qFAAqF;IACrF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAChC,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAA;IACd,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IAClC,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC7C;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC3D,CAAA;CACJ;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC1D;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,IAAI,EAAE,aAAa,GAAG,cAAc,CAAA;IACpC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAA;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEjF,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EACE,MAAM,GACN,QAAQ,GACR,MAAM,GAGN,UAAU,GACV,WAAW,GACX,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,qBAAqB,GACrB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,eAAe,GACf,OAAO,GAEP,aAAa,GAEb,KAAK,GACL,MAAM,GACN,OAAO,GACP,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,QAAQ,GACR,MAAM,GACN,OAAO,GACP,MAAM,GACN,eAAe,GACf,SAAS,GACT,MAAM,GAKN,UAAU,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAA;IAC7F,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3E;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,yEAAyE;IACzE,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;IACrC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,eAAe,EAAE,CAAA;IAC/B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAA;IACxC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAID,MAAM,MAAM,WAAW,GACjB,MAAM,GACN,UAAU,GACV,UAAU,GACV,OAAO,GACP,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,MAAM,CAAA;AAEZ;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACvB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACb,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;IACrB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;IACrC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;IAC7B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,yEAAyE;IACzE,aAAa,CAAC,EAAE,YAAY,CAAA;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAA;IAClC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;IAC7B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAC/B,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC1B,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAA;IACX,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAA;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAChC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CAChB;AAKD,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;IACzB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACtC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IAClC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAChC"}
|
package/package.json
CHANGED
|
@@ -47,17 +47,17 @@ describe('DocumentLinesGrid — select de producto en la celda', () => {
|
|
|
47
47
|
const input = screen.getByRole('combobox', { name: 'Buscar producto' })
|
|
48
48
|
const td = input.closest('td')!
|
|
49
49
|
expect(td).toBeTruthy()
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
// ese renglón aún no llena (cantidad, precio…), así no se corta.
|
|
50
|
+
// Ocupa SOLO su columna: no invade Cant./Precio/Desc.; el renglón vacío
|
|
51
|
+
// tiene una celda por columna del encabezado.
|
|
53
52
|
const row = td.closest('tr')!
|
|
54
53
|
expect(row.getAttribute('data-slot')).toBe('line-draft-row')
|
|
55
54
|
const columns = document.querySelectorAll('[data-slot="line-items-editor"] thead th').length
|
|
56
|
-
expect(td.colSpan).toBe(
|
|
57
|
-
expect(row.children.length).toBe(
|
|
58
|
-
|
|
55
|
+
expect(td.colSpan).toBe(1)
|
|
56
|
+
expect(row.children.length).toBe(columns)
|
|
57
|
+
expect(row.firstElementChild).toBe(td)
|
|
58
|
+
// Placeholder corto que cabe, sin tooltip nativo del navegador.
|
|
59
59
|
expect(input.getAttribute('placeholder')).toBe('Buscar producto…')
|
|
60
|
-
expect(input.
|
|
60
|
+
expect(input.hasAttribute('title')).toBe(false)
|
|
61
61
|
})
|
|
62
62
|
|
|
63
63
|
it('la lista sale en un portal fuera del contenedor con overflow y Enter elige y pasa a «Cant.»', async () => {
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
//
|
|
3
|
+
// DynamicTable `defaultSort` + bulk ctx `actions` / `can`:
|
|
4
|
+
// 1. `defaultSort` seeds the first request (sortBy/order); `desc` omitted
|
|
5
|
+
// means asc; without it nothing is sent; a `?sortBy=` in the URL wins when
|
|
6
|
+
// enableUrlSync is on. (Changing it from the header menu is plain
|
|
7
|
+
// TanStack sorting state and is not exercised here: the Radix menu does
|
|
8
|
+
// not open reliably under happy-dom.)
|
|
9
|
+
// 2. The bulk context handed to `extraBulkActions` exposes `actions` (the
|
|
10
|
+
// metadata actions) and `can(key)`: all allowed without a provider,
|
|
11
|
+
// filtered by capability inside a PermissionsProvider.
|
|
12
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
13
|
+
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'
|
|
14
|
+
|
|
15
|
+
vi.mock('@tanstack/react-router', () => ({
|
|
16
|
+
useNavigate: () => () => {},
|
|
17
|
+
}))
|
|
18
|
+
const I18N = {
|
|
19
|
+
t: (_k: string, o?: { defaultValue?: string; count?: number; total?: number }) => {
|
|
20
|
+
if (o?.defaultValue && o.count != null && o.total != null) {
|
|
21
|
+
return o.defaultValue.replace('{{count}}', String(o.count)).replace('{{total}}', String(o.total))
|
|
22
|
+
}
|
|
23
|
+
return o?.defaultValue ?? _k
|
|
24
|
+
},
|
|
25
|
+
i18n: { language: 'es' },
|
|
26
|
+
}
|
|
27
|
+
vi.mock('react-i18next', () => ({ useTranslation: () => I18N }))
|
|
28
|
+
|
|
29
|
+
import { DynamicTable } from '../dynamic-table'
|
|
30
|
+
import { makeDefaultGetDynamicColumns } from '../dynamic-columns'
|
|
31
|
+
import { ApiProvider, type ApiClient } from '../api-context'
|
|
32
|
+
import { PermissionsProvider } from '../permissions-context'
|
|
33
|
+
import { useMetadataCache } from '../metadata-cache'
|
|
34
|
+
import type { TableMetadata } from '../types'
|
|
35
|
+
|
|
36
|
+
afterEach(cleanup)
|
|
37
|
+
|
|
38
|
+
const getDynamicColumns = makeDefaultGetDynamicColumns()
|
|
39
|
+
|
|
40
|
+
function meta(): TableMetadata {
|
|
41
|
+
return {
|
|
42
|
+
title: 'Issues',
|
|
43
|
+
endpoint: '/data/issue',
|
|
44
|
+
columns: [
|
|
45
|
+
{ key: 'title', label: 'Title', type: 'text', sortable: true, filterable: false, searchable: true },
|
|
46
|
+
],
|
|
47
|
+
actions: [
|
|
48
|
+
{ key: 'approve', name: 'approve', label: 'Aprobar', icon: 'Check', class: '', type: 'custom' },
|
|
49
|
+
{ key: 'reject', name: 'reject', label: 'Rechazar', icon: 'X', class: '', type: 'custom' },
|
|
50
|
+
],
|
|
51
|
+
perPageOptions: [10, 20, 50],
|
|
52
|
+
defaultPerPage: 10,
|
|
53
|
+
searchPlaceholder: 'Buscar...',
|
|
54
|
+
enableCRUDActions: false,
|
|
55
|
+
hasActions: true,
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function fakeApi(total: number): ApiClient {
|
|
60
|
+
const ok = (data: unknown) => ({ data: { success: true, data, meta: { total } } })
|
|
61
|
+
return {
|
|
62
|
+
get: vi.fn(async (url: string, cfg?: any) => {
|
|
63
|
+
if (url.startsWith('/metadata/table/')) return ok(meta())
|
|
64
|
+
if (url.endsWith('/facets')) return ok([])
|
|
65
|
+
const p = cfg?.params?.page ?? 1
|
|
66
|
+
const size = cfg?.params?.per_page ?? 10
|
|
67
|
+
const rows: Array<{ id: number; title: string }> = []
|
|
68
|
+
for (let i = (p - 1) * size; i < Math.min(p * size, total); i++) rows.push({ id: i + 1, title: `Issue ${i + 1}` })
|
|
69
|
+
return ok(rows)
|
|
70
|
+
}),
|
|
71
|
+
post: vi.fn(async () => ok(null)),
|
|
72
|
+
put: vi.fn(async () => ok(null)),
|
|
73
|
+
delete: vi.fn(async () => ok(null)),
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function selectFirstRow() {
|
|
78
|
+
await screen.findAllByText('Issue 1')
|
|
79
|
+
const boxes = screen.getAllByRole('checkbox')
|
|
80
|
+
fireEvent.click(boxes[1]) // [0] is the select-all header checkbox
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
describe('DynamicTable defaultSort', () => {
|
|
85
|
+
beforeEach(() => {
|
|
86
|
+
localStorage.clear(); sessionStorage.clear()
|
|
87
|
+
window.history.replaceState({}, '', '/')
|
|
88
|
+
useMetadataCache.getState().setMetadata('issue', meta())
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('sends the default sort on the first request', async () => {
|
|
92
|
+
const api = fakeApi(5)
|
|
93
|
+
render(
|
|
94
|
+
<ApiProvider client={api}>
|
|
95
|
+
<DynamicTable model="issue" enableUrlSync={false} getDynamicColumns={getDynamicColumns} defaultSort={{ id: 'title', desc: true }} />
|
|
96
|
+
</ApiProvider>,
|
|
97
|
+
)
|
|
98
|
+
await screen.findAllByText('Issue 1')
|
|
99
|
+
const calls = (api.get as any).mock.calls.filter((c: any[]) => !String(c[0]).startsWith('/metadata') && !String(c[0]).endsWith('/facets'))
|
|
100
|
+
expect(calls.length).toBeGreaterThan(0)
|
|
101
|
+
for (const c of calls) {
|
|
102
|
+
expect(c[1].params.sortBy).toBe('title')
|
|
103
|
+
expect(c[1].params.order).toBe('desc')
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('defaultSort without desc is asc; no defaultSort sends no sortBy', async () => {
|
|
108
|
+
const a = fakeApi(5)
|
|
109
|
+
const { unmount } = render(
|
|
110
|
+
<ApiProvider client={a}>
|
|
111
|
+
<DynamicTable model="issue" enableUrlSync={false} getDynamicColumns={getDynamicColumns} defaultSort={{ id: 'title' }} />
|
|
112
|
+
</ApiProvider>,
|
|
113
|
+
)
|
|
114
|
+
await screen.findAllByText('Issue 1')
|
|
115
|
+
const listCall = (a.get as any).mock.calls.find((c: any[]) => c[1]?.params?.page)
|
|
116
|
+
expect(listCall[1].params.order).toBe('asc')
|
|
117
|
+
unmount()
|
|
118
|
+
const b = fakeApi(5)
|
|
119
|
+
render(
|
|
120
|
+
<ApiProvider client={b}>
|
|
121
|
+
<DynamicTable model="issue" enableUrlSync={false} getDynamicColumns={getDynamicColumns} />
|
|
122
|
+
</ApiProvider>,
|
|
123
|
+
)
|
|
124
|
+
await screen.findAllByText('Issue 1')
|
|
125
|
+
const call = (b.get as any).mock.calls.find((c: any[]) => c[1]?.params?.page)
|
|
126
|
+
expect(call[1].params.sortBy).toBeUndefined()
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it('a URL sortBy wins over defaultSort when enableUrlSync is on', async () => {
|
|
130
|
+
window.history.replaceState({}, '', '/?sortBy=id&order=asc')
|
|
131
|
+
const api = fakeApi(5)
|
|
132
|
+
render(
|
|
133
|
+
<ApiProvider client={api}>
|
|
134
|
+
<DynamicTable model="issue" getDynamicColumns={getDynamicColumns} defaultSort={{ id: 'title', desc: true }} />
|
|
135
|
+
</ApiProvider>,
|
|
136
|
+
)
|
|
137
|
+
await screen.findAllByText('Issue 1')
|
|
138
|
+
const lists = (api.get as any).mock.calls.filter((c: any[]) => c[1]?.params?.page)
|
|
139
|
+
for (const c of lists) {
|
|
140
|
+
// never the default; (a pre-adoption request without sort is pre-existing behavior)
|
|
141
|
+
expect(c[1].params.sortBy).not.toBe('title')
|
|
142
|
+
}
|
|
143
|
+
await waitFor(() => {
|
|
144
|
+
const all = (api.get as any).mock.calls.filter((c: any[]) => c[1]?.params?.page)
|
|
145
|
+
expect(all[all.length - 1][1].params).toMatchObject({ sortBy: 'id', order: 'asc' })
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
describe('DynamicTable bulk context actions / can', () => {
|
|
151
|
+
beforeEach(() => {
|
|
152
|
+
localStorage.clear(); sessionStorage.clear()
|
|
153
|
+
useMetadataCache.getState().setMetadata('issue', meta())
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
function Probe({ seen }: { seen: { keys: string[]; approve: boolean; reject: boolean }[] }) {
|
|
157
|
+
return (
|
|
158
|
+
<DynamicTable
|
|
159
|
+
model="issue" enableUrlSync={false} getDynamicColumns={getDynamicColumns}
|
|
160
|
+
extraBulkActions={(ctx) => {
|
|
161
|
+
seen.push({ keys: ctx.actions.map((a) => a.key), approve: ctx.can('approve'), reject: ctx.can('reject') })
|
|
162
|
+
return <span>Barra</span>
|
|
163
|
+
}}
|
|
164
|
+
/>
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
it('without a provider exposes all actions and can() is true', async () => {
|
|
169
|
+
const seen: any[] = []
|
|
170
|
+
render(<ApiProvider client={fakeApi(5)}><Probe seen={seen} /></ApiProvider>)
|
|
171
|
+
await selectFirstRow()
|
|
172
|
+
await screen.findByText('Barra')
|
|
173
|
+
const last = seen[seen.length - 1]
|
|
174
|
+
expect(last.keys).toEqual(['approve', 'reject'])
|
|
175
|
+
expect(last.approve).toBe(true)
|
|
176
|
+
expect(last.reject).toBe(true)
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
it('with a provider filters actions and can() by capability', async () => {
|
|
180
|
+
const seen: any[] = []
|
|
181
|
+
render(
|
|
182
|
+
<ApiProvider client={fakeApi(5)}>
|
|
183
|
+
<PermissionsProvider permissions={['issue.approve']} isAdmin={false}>
|
|
184
|
+
<Probe seen={seen} />
|
|
185
|
+
</PermissionsProvider>
|
|
186
|
+
</ApiProvider>,
|
|
187
|
+
)
|
|
188
|
+
await selectFirstRow()
|
|
189
|
+
await screen.findByText('Barra')
|
|
190
|
+
const last = seen[seen.length - 1]
|
|
191
|
+
expect(last.keys).toEqual(['approve'])
|
|
192
|
+
expect(last.approve).toBe(true)
|
|
193
|
+
expect(last.reject).toBe(false)
|
|
194
|
+
})
|
|
195
|
+
})
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
//
|
|
3
|
+
// Columnas `type: 'image'` respetan `basePath` con el mismo contrato que
|
|
4
|
+
// resolveAvatarSrc, y `normalizeImagePath` (host) corre antes de resolver.
|
|
5
|
+
import { afterEach, describe, expect, it } from 'vitest'
|
|
6
|
+
import { cleanup, render } from '@testing-library/react'
|
|
7
|
+
import { makeDefaultGetDynamicColumns, resolveImageSrc, type DynamicColumnsHelpers } from '../dynamic-columns'
|
|
8
|
+
import type { TableMetadata } from '../types'
|
|
9
|
+
|
|
10
|
+
afterEach(cleanup)
|
|
11
|
+
|
|
12
|
+
function renderImage(
|
|
13
|
+
value: string,
|
|
14
|
+
colExtra: Record<string, unknown>,
|
|
15
|
+
helpers: DynamicColumnsHelpers,
|
|
16
|
+
): string | null {
|
|
17
|
+
const meta = {
|
|
18
|
+
title: 't',
|
|
19
|
+
endpoint: '/x',
|
|
20
|
+
columns: [{ key: 'photo', label: 'Foto', type: 'image', ...colExtra }],
|
|
21
|
+
actions: [],
|
|
22
|
+
perPageOptions: [10],
|
|
23
|
+
defaultPerPage: 10,
|
|
24
|
+
searchPlaceholder: '',
|
|
25
|
+
enableCRUDActions: false,
|
|
26
|
+
hasActions: false,
|
|
27
|
+
} as unknown as TableMetadata
|
|
28
|
+
const cols = makeDefaultGetDynamicColumns({ getImageUrl: (p) => p, ...helpers })(meta)
|
|
29
|
+
const col = cols.find((c) => (c as { accessorKey?: string }).accessorKey === 'photo' || c.id === 'photo')
|
|
30
|
+
if (!col || typeof col.cell !== 'function') throw new Error('columna image no encontrada')
|
|
31
|
+
const node = (col.cell as (ctx: unknown) => React.ReactNode)({ row: { original: { photo: value } } })
|
|
32
|
+
const { container } = render(<>{node}</>)
|
|
33
|
+
return container.querySelector('img')?.getAttribute('src') ?? null
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe('image + basePath', () => {
|
|
37
|
+
it('filename suelto -> apiBaseUrl + basePath + filename', () => {
|
|
38
|
+
expect(renderImage('a.png', { basePath: '/storage/' }, { apiBaseUrl: 'https://api.x' })).toBe(
|
|
39
|
+
'https://api.x/storage/a.png',
|
|
40
|
+
)
|
|
41
|
+
})
|
|
42
|
+
it('URL absoluta intacta', () => {
|
|
43
|
+
expect(renderImage('https://cdn.x/a.png', { basePath: '/storage/' }, { apiBaseUrl: 'https://api.x' })).toBe(
|
|
44
|
+
'https://cdn.x/a.png',
|
|
45
|
+
)
|
|
46
|
+
})
|
|
47
|
+
it('ruta absoluta intacta', () => {
|
|
48
|
+
expect(renderImage('/files/a.png', { basePath: '/storage/' }, { apiBaseUrl: 'https://api.x' })).toBe(
|
|
49
|
+
'/files/a.png',
|
|
50
|
+
)
|
|
51
|
+
})
|
|
52
|
+
it('sin basePath: comportamiento actual (valor tal cual)', () => {
|
|
53
|
+
expect(renderImage('a.png', {}, { apiBaseUrl: 'https://api.x' })).toBe('a.png')
|
|
54
|
+
})
|
|
55
|
+
it('normalizeImagePath se aplica antes de resolver', () => {
|
|
56
|
+
const normalizeImagePath = (raw: string) => raw.replace('/storage/public/', '/storage/')
|
|
57
|
+
expect(renderImage('/storage/public/a.png', { basePath: '/storage/' }, { normalizeImagePath })).toBe(
|
|
58
|
+
'/storage/a.png',
|
|
59
|
+
)
|
|
60
|
+
})
|
|
61
|
+
it('normalizeImagePath puede convertir en filename y aplicar basePath', () => {
|
|
62
|
+
expect(
|
|
63
|
+
renderImage('public:a.png', { basePath: '/storage/' }, { normalizeImagePath: (r) => r.replace('public:', '') }),
|
|
64
|
+
).toBe('/storage/a.png')
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
describe('resolveImageSrc', () => {
|
|
69
|
+
it('sin normalize ni basePath devuelve el valor', () => {
|
|
70
|
+
expect(resolveImageSrc({ key: 'k', label: 'k', type: 'image' } as never, 'a.png')).toBe('a.png')
|
|
71
|
+
})
|
|
72
|
+
})
|