@asteby/metacore-runtime-react 45.3.0 → 46.0.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 +23 -0
- package/dist/action-modal-dispatcher.d.ts.map +1 -1
- package/dist/action-modal-dispatcher.js +25 -4
- package/dist/dynamic-kanban.d.ts +62 -4
- package/dist/dynamic-kanban.d.ts.map +1 -1
- package/dist/dynamic-kanban.js +158 -27
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/supervised-action.d.ts +27 -0
- package/dist/supervised-action.d.ts.map +1 -0
- package/dist/supervised-action.js +42 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/dynamic-kanban.test.tsx +141 -0
- package/src/__tests__/supervised-action.test.tsx +100 -0
- package/src/action-modal-dispatcher.tsx +27 -3
- package/src/dynamic-kanban.tsx +197 -19
- package/src/index.ts +11 -0
- package/src/supervised-action.ts +67 -0
- package/src/types.ts +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @asteby/metacore-runtime-react
|
|
2
2
|
|
|
3
|
+
## 46.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- e0ad13c: Acciones con `supervisor_policy` (POS-2 / PER-2): `ActionMetadata.supervisorPolicy` (servido por el host) hace que los modales de acción (confirmación, formulario y wizard) pidan el PIN del supervisor con `useSupervisor().authorize()` antes de despachar y manden la autorización como `approval_id` (`withApproval`). Quien tiene `general.approve_<política>` no ve el diálogo. Los modales federados usan el mismo hook.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [e0ad13c]
|
|
12
|
+
- @asteby/metacore-sdk@3.12.0
|
|
13
|
+
|
|
14
|
+
## 45.4.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- 6c9c85f: DynamicKanban: tableros por referencia y tarjeta configurable desde el manifest.
|
|
19
|
+
|
|
20
|
+
- `group_by` sobre una columna referencia (técnico, rampa, responsable...) sin `stages` ni `options` ahora arma un carril por registro referenciado (mismo endpoint de opciones que los selects del formulario), sin transiciones: arrastrar una tarjeta a otro carril la reasigna. Antes el tablero salía sin carriles.
|
|
21
|
+
- Nueva prop `groupBy` (el `?group_by=` de la entrada de navegación): un modelo puede ofrecer varios tableros (por etapa, por técnico, por rampa) aunque el host proyecte un solo `group_by` por modelo. Agrupar por la columna de etapa (`stage_field`, nuevo campo opcional del metadata) conserva la máquina de etapas; por otra columna la descarta y deshabilita las personalizaciones por-org de etapa (carriles propios, overrides, orden, automatizaciones).
|
|
22
|
+
- La tarjeta se diseña con el `display_config` de las columnas: `card_title: true` elige el título y `card: true` cada campo, en orden de columna; con eso la tarjeta muestra todos los campos marcados (sin el tope de 3). Sin marcas, el comportamiento anterior no cambia.
|
|
23
|
+
- `display_config.overdue: true` (con `overdue_unless: { campo: [valores] }` opcional) pinta en rojo una fecha vencida en la tarjeta, p. ej. la hora prometida de una orden que aún no se entrega.
|
|
24
|
+
- Nuevos helpers puros exportados: `isCardOverdue`, `refLaneSource`, `withRefLanes`, `withGroupBy`; `selectCardColumns` devuelve además `explicit`.
|
|
25
|
+
|
|
3
26
|
## 45.3.0
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-modal-dispatcher.d.ts","sourceRoot":"","sources":["../src/action-modal-dispatcher.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"action-modal-dispatcher.d.ts","sourceRoot":"","sources":["../src/action-modal-dispatcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ import { clearFieldErrorTree, formatFieldErrorsDescription, labelsForValidationF
|
|
|
28
28
|
import { validationCatalog } from './validation-catalog';
|
|
29
29
|
import { useApi } from './api-context';
|
|
30
30
|
import { useReasonPrompt } from './reason-prompt';
|
|
31
|
+
import { useSupervisor, withApproval } from './supervised-action';
|
|
31
32
|
import { buildRelationFilterParams } from './dynamic-relation-helpers';
|
|
32
33
|
import { DynamicIcon } from './dynamic-icon';
|
|
33
34
|
import { DynamicLineItems } from './dynamic-line-items';
|
|
@@ -524,6 +525,7 @@ function ConfirmActionDialog({ open, onOpenChange, action, model, record, endpoi
|
|
|
524
525
|
// Actions listed in the model's `reason_required.actions` (cancel, void…)
|
|
525
526
|
// answer 422 errors.reason without a motive; the prompt asks and retries.
|
|
526
527
|
const reasonPrompt = useReasonPrompt();
|
|
528
|
+
const supervisor = useSupervisor();
|
|
527
529
|
// `action.label` is an addon-contributed i18n key; its locale bundle loads
|
|
528
530
|
// asynchronously, so translate at render (defaultValue keeps an already
|
|
529
531
|
// localized label unchanged).
|
|
@@ -532,10 +534,14 @@ function ConfirmActionDialog({ open, onOpenChange, action, model, record, endpoi
|
|
|
532
534
|
setExecuting(true);
|
|
533
535
|
try {
|
|
534
536
|
const url = buildActionUrl(endpoint, model, record.id, action.key);
|
|
537
|
+
// Supervisor PIN first (action.supervisorPolicy); null = cancelled.
|
|
538
|
+
const auth = await supervisor.authorize({ label, supervisorPolicy: action.supervisorPolicy }, { model, recordId: String(record.id) });
|
|
539
|
+
if (!auth)
|
|
540
|
+
return;
|
|
535
541
|
const res = await reasonPrompt.run({
|
|
536
542
|
title: label,
|
|
537
543
|
description: t('actions.reason_desc', { defaultValue: 'Esta acción pide el motivo. Queda en la bitácora del documento.' }),
|
|
538
|
-
request: (reason) => api.post(url, reason ? { reason } : {}),
|
|
544
|
+
request: (reason) => api.post(url, withApproval(reason ? { reason } : {}, auth)),
|
|
539
545
|
});
|
|
540
546
|
// Operator cancelled the reason prompt: nothing ran.
|
|
541
547
|
if (!res)
|
|
@@ -566,6 +572,7 @@ function GenericActionModal({ open, onOpenChange, action, model, record, endpoin
|
|
|
566
572
|
const tl = (s) => t(s, { defaultValue: s });
|
|
567
573
|
const api = useApi();
|
|
568
574
|
const reasonPrompt = useReasonPrompt();
|
|
575
|
+
const supervisor = useSupervisor();
|
|
569
576
|
const branchGate = useBranchCreateGate();
|
|
570
577
|
const [formData, setFormData] = useState({});
|
|
571
578
|
const [executing, setExecuting] = useState(false);
|
|
@@ -746,10 +753,13 @@ function GenericActionModal({ open, onOpenChange, action, model, record, endpoin
|
|
|
746
753
|
payload = { ...payload, branch_id: branchId };
|
|
747
754
|
}
|
|
748
755
|
const url = buildActionUrl(endpoint, model, record?.id, action.key);
|
|
756
|
+
const auth = await supervisor.authorize({ label: tl(action.label), supervisorPolicy: action.supervisorPolicy }, { model, recordId: record?.id != null ? String(record.id) : undefined });
|
|
757
|
+
if (!auth)
|
|
758
|
+
return;
|
|
749
759
|
const res = await reasonPrompt.run({
|
|
750
760
|
title: tl(action.label),
|
|
751
761
|
description: t('actions.reason_desc', { defaultValue: 'Esta acción pide el motivo. Queda en la bitácora del documento.' }),
|
|
752
|
-
request: (reason) => api.post(url, reason ? { ...payload, reason } : payload),
|
|
762
|
+
request: (reason) => api.post(url, withApproval(reason ? { ...payload, reason } : payload, auth)),
|
|
753
763
|
});
|
|
754
764
|
if (!res)
|
|
755
765
|
return;
|
|
@@ -835,6 +845,8 @@ function WizardActionModal({ open, onOpenChange, action, model, record, endpoint
|
|
|
835
845
|
const { t, i18n } = useTranslation();
|
|
836
846
|
const tl = (s) => t(s, { defaultValue: s });
|
|
837
847
|
const api = useApi();
|
|
848
|
+
const reasonPrompt = useReasonPrompt();
|
|
849
|
+
const supervisor = useSupervisor();
|
|
838
850
|
const steps = action.steps ?? [];
|
|
839
851
|
const [stepIndex, setStepIndex] = useState(0);
|
|
840
852
|
const [formData, setFormData] = useState({});
|
|
@@ -880,7 +892,16 @@ function WizardActionModal({ open, onOpenChange, action, model, record, endpoint
|
|
|
880
892
|
setExecuting(true);
|
|
881
893
|
try {
|
|
882
894
|
const url = buildActionUrl(endpoint, model, record?.id, action.key);
|
|
883
|
-
const
|
|
895
|
+
const auth = await supervisor.authorize({ label: tl(action.label), supervisorPolicy: action.supervisorPolicy }, { model, recordId: record?.id != null ? String(record.id) : undefined });
|
|
896
|
+
if (!auth)
|
|
897
|
+
return;
|
|
898
|
+
const res = await reasonPrompt.run({
|
|
899
|
+
title: tl(action.label),
|
|
900
|
+
description: t('actions.reason_desc', { defaultValue: 'Esta acción pide el motivo. Queda en la bitácora del documento.' }),
|
|
901
|
+
request: (reason) => api.post(url, withApproval(reason ? { ...formData, reason } : formData, auth)),
|
|
902
|
+
});
|
|
903
|
+
if (!res)
|
|
904
|
+
return;
|
|
884
905
|
if (res.data.success) {
|
|
885
906
|
toastServerSuccess(res.data, { t });
|
|
886
907
|
onOpenChange(false);
|
|
@@ -904,7 +925,7 @@ function WizardActionModal({ open, onOpenChange, action, model, record, endpoint
|
|
|
904
925
|
resolveWidget(field) === 'textarea' ||
|
|
905
926
|
resolveWidget(field) === 'richtext';
|
|
906
927
|
return (_jsxs(FieldCell, { fullWidth: fullWidth, children: [_jsx(FieldLabel, { htmlFor: field.key, required: field.required, children: tl(field.label) }), renderField(field, formData[field.key], (v) => updateField(field.key, v), formData, record)] }, field.key));
|
|
907
|
-
}) }) }), _jsxs(DialogFooter, { className: "shrink-0", children: [stepIndex > 0 ? (_jsx(Button, { variant: "outline", onClick: goBack, disabled: executing, children: t('common.back', { defaultValue: 'Atrás' }) })) : (_jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), disabled: executing, children: t('common.cancel') })), isLast ? (_jsxs(Button, { onClick: submit, disabled: executing, style: action.color ? { backgroundColor: action.color, color: 'white' } : undefined, children: [executing ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : _jsx(DynamicIcon, { name: action.icon, className: "mr-2 h-4 w-4" }), tl(action.label)] })) : (_jsx(Button, { onClick: goNext, disabled: executing, style: action.color ? { backgroundColor: action.color, color: 'white' } : undefined, children: t('common.next', { defaultValue: 'Siguiente' }) }))] })] }) }));
|
|
928
|
+
}) }) }), _jsxs(DialogFooter, { className: "shrink-0", children: [stepIndex > 0 ? (_jsx(Button, { variant: "outline", onClick: goBack, disabled: executing, children: t('common.back', { defaultValue: 'Atrás' }) })) : (_jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), disabled: executing, children: t('common.cancel') })), isLast ? (_jsxs(Button, { onClick: submit, disabled: executing, style: action.color ? { backgroundColor: action.color, color: 'white' } : undefined, children: [executing ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : _jsx(DynamicIcon, { name: action.icon, className: "mr-2 h-4 w-4" }), tl(action.label)] })) : (_jsx(Button, { onClick: goNext, disabled: executing, style: action.color ? { backgroundColor: action.color, color: 'white' } : undefined, children: t('common.next', { defaultValue: 'Siguiente' }) }))] }), reasonPrompt.dialog] }) }));
|
|
908
929
|
}
|
|
909
930
|
function seedOptionFromRecord(field, value, record) {
|
|
910
931
|
if (!record || !field.key.endsWith('_id'))
|
package/dist/dynamic-kanban.d.ts
CHANGED
|
@@ -60,15 +60,63 @@ export declare function applyLaneTotalsOnMove<T extends {
|
|
|
60
60
|
*/
|
|
61
61
|
export declare function formatLaneCount(shown: number, loaded: number, serverTotal: number | null, laneActive: boolean): string;
|
|
62
62
|
/**
|
|
63
|
-
* Picks the columns shown on a card: a `title` column
|
|
64
|
-
*
|
|
65
|
-
* the
|
|
66
|
-
*
|
|
63
|
+
* Picks the columns shown on a card: a `title` column and the secondary fields.
|
|
64
|
+
* Excludes the group_by column (it's the lane itself) and any column hidden
|
|
65
|
+
* from the table view (visibility modal/list, or `hidden`).
|
|
66
|
+
*
|
|
67
|
+
* A model can lay its card out explicitly through the columns' manifest
|
|
68
|
+
* `display_config`: `card_title: true` picks the title, `card: true` marks each
|
|
69
|
+
* field the card shows, in column order (`explicit` is then true and ALL the
|
|
70
|
+
* flagged fields are shown — the card is no longer capped at `maxFields`).
|
|
71
|
+
* Without any flag the legacy heuristic applies: the first searchable / text
|
|
72
|
+
* column is the title and the next `maxFields` visible columns are the fields.
|
|
67
73
|
*/
|
|
68
74
|
export declare function selectCardColumns(metadata: TableMetadata, maxFields?: number): {
|
|
69
75
|
title: ColumnDefinition | null;
|
|
70
76
|
fields: ColumnDefinition[];
|
|
77
|
+
explicit: boolean;
|
|
71
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* Whether a card's date field is past due — the SDK paints it as a warning.
|
|
81
|
+
* A column opts in with `display_config.overdue: true`; the optional
|
|
82
|
+
* `display_config.overdue_unless` (`{ <field>: [values…] }`) exempts cards whose
|
|
83
|
+
* row matches (a work order already delivered is never late). Pure — exported
|
|
84
|
+
* for unit tests.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isCardOverdue(card: any, col: ColumnDefinition, now?: number): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* The metadata regrouped by another column (a nav entry's `group_by`). A model
|
|
89
|
+
* can serve several boards over the same records — by stage, by technician, by
|
|
90
|
+
* bay — but the host projects ONE `group_by` per model, so the entry's own wins.
|
|
91
|
+
* The stage machine (stages, transitions, smart lanes) belongs to the model's
|
|
92
|
+
* stage column (`stage_field`; older hosts that do not serve it: the served
|
|
93
|
+
* group_by): grouping by it keeps the machine, grouping by anything else drops
|
|
94
|
+
* it and the lanes come from the new column. Returns the SAME object when there
|
|
95
|
+
* is nothing to change (no override, the served group_by already, or a column the
|
|
96
|
+
* model does not have). Pure — exported for unit tests.
|
|
97
|
+
*/
|
|
98
|
+
export declare function withGroupBy(metadata: TableMetadata | null, groupBy: string | undefined): TableMetadata | null;
|
|
99
|
+
/**
|
|
100
|
+
* Whether the board's lanes must come from the group_by column's REFERENCE
|
|
101
|
+
* (one lane per technician, per bay, per owner…): the metadata declares no
|
|
102
|
+
* stages, the column has no inline options, but it points at a record list.
|
|
103
|
+
* Pure — exported for unit tests.
|
|
104
|
+
*/
|
|
105
|
+
export declare function refLaneSource(metadata: TableMetadata | null): {
|
|
106
|
+
ref?: string;
|
|
107
|
+
endpoint?: string;
|
|
108
|
+
} | null;
|
|
109
|
+
/**
|
|
110
|
+
* The metadata with one lane per resolved option of a reference group_by column
|
|
111
|
+
* (labels ordered alphabetically). No transitions are declared, so a card can
|
|
112
|
+
* be dragged to any lane — i.e. re-assigned to another technician / bay.
|
|
113
|
+
* Returns the metadata untouched when there are no options. Pure.
|
|
114
|
+
*/
|
|
115
|
+
export declare function withRefLanes(metadata: TableMetadata, options: {
|
|
116
|
+
value: string | number;
|
|
117
|
+
label: string;
|
|
118
|
+
color?: string | null;
|
|
119
|
+
}[]): TableMetadata;
|
|
72
120
|
/**
|
|
73
121
|
* The value a card cell should render for a column — same resolution the
|
|
74
122
|
* table's cells apply. An FK column (`<rel>_id`) prefers the backend-resolved
|
|
@@ -208,6 +256,16 @@ export interface DynamicKanbanProps {
|
|
|
208
256
|
timeZone?: string;
|
|
209
257
|
/** ISO 4217 currency for money card fields (org config). */
|
|
210
258
|
currency?: string;
|
|
259
|
+
/**
|
|
260
|
+
* Column to group the board by, when the host's nav entry asks for one
|
|
261
|
+
* (`?group_by=`): a model can offer several boards over the same records —
|
|
262
|
+
* by stage, by technician, by bay. Absent or equal to the served
|
|
263
|
+
* `group_by` → the model's own stage machine. Otherwise the lanes come from
|
|
264
|
+
* that column (its options, or its referenced records) with no transitions,
|
|
265
|
+
* and the per-org stage customisations (custom lanes, overrides, lane order,
|
|
266
|
+
* automations) are off: they belong to the stage column.
|
|
267
|
+
*/
|
|
268
|
+
groupBy?: string;
|
|
211
269
|
/**
|
|
212
270
|
* Static equality filters always applied to the board (never shown as a
|
|
213
271
|
* removable chip). Same contract as DynamicTable's `defaultFilters`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-kanban.d.ts","sourceRoot":"","sources":["../src/dynamic-kanban.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAqH9B,OAAO,EAEH,qBAAqB,EACrB,qBAAqB,EACxB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"dynamic-kanban.d.ts","sourceRoot":"","sources":["../src/dynamic-kanban.tsx"],"names":[],"mappings":"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"}
|
package/dist/dynamic-kanban.js
CHANGED
|
@@ -26,6 +26,7 @@ import { useFlipAnimation } from './use-flip-animation';
|
|
|
26
26
|
import { PortalDragOverlay } from './portal-drag-overlay';
|
|
27
27
|
import { objectLabel } from './dynamic-relation-helpers';
|
|
28
28
|
import { useMetadataCache } from './metadata-cache';
|
|
29
|
+
import { useOptionsResolver } from './use-options-resolver';
|
|
29
30
|
import { ActivityValueRenderer } from './activity-value-renderer';
|
|
30
31
|
import { isColumnVisibleInTable } from './column-visibility';
|
|
31
32
|
import { aggregateOf, formatAggregateTotal, isRowActionVisible, relationKeyFor, RowActionMenuItem, } from './dynamic-columns';
|
|
@@ -173,11 +174,22 @@ export function formatLaneCount(shown, loaded, serverTotal, laneActive) {
|
|
|
173
174
|
}
|
|
174
175
|
return String(shown);
|
|
175
176
|
}
|
|
177
|
+
/** Reads a boolean-ish opt-in from a column's `styleConfig` (`display_config`). */
|
|
178
|
+
function cardFlag(col, key) {
|
|
179
|
+
const v = col.styleConfig?.[key];
|
|
180
|
+
return v === true || v === 'true' || v === 1;
|
|
181
|
+
}
|
|
176
182
|
/**
|
|
177
|
-
* Picks the columns shown on a card: a `title` column
|
|
178
|
-
*
|
|
179
|
-
* the
|
|
180
|
-
*
|
|
183
|
+
* Picks the columns shown on a card: a `title` column and the secondary fields.
|
|
184
|
+
* Excludes the group_by column (it's the lane itself) and any column hidden
|
|
185
|
+
* from the table view (visibility modal/list, or `hidden`).
|
|
186
|
+
*
|
|
187
|
+
* A model can lay its card out explicitly through the columns' manifest
|
|
188
|
+
* `display_config`: `card_title: true` picks the title, `card: true` marks each
|
|
189
|
+
* field the card shows, in column order (`explicit` is then true and ALL the
|
|
190
|
+
* flagged fields are shown — the card is no longer capped at `maxFields`).
|
|
191
|
+
* Without any flag the legacy heuristic applies: the first searchable / text
|
|
192
|
+
* column is the title and the next `maxFields` visible columns are the fields.
|
|
181
193
|
*/
|
|
182
194
|
export function selectCardColumns(metadata, maxFields = 3) {
|
|
183
195
|
const groupBy = metadata.group_by;
|
|
@@ -185,14 +197,110 @@ export function selectCardColumns(metadata, maxFields = 3) {
|
|
|
185
197
|
!c.hidden &&
|
|
186
198
|
isColumnVisibleInTable(c) &&
|
|
187
199
|
c.key !== 'id');
|
|
188
|
-
const
|
|
200
|
+
const flagged = visible.filter((c) => cardFlag(c, 'card'));
|
|
201
|
+
const flaggedTitle = visible.find((c) => cardFlag(c, 'card_title'));
|
|
202
|
+
const explicit = flagged.length > 0 || !!flaggedTitle;
|
|
203
|
+
const title = flaggedTitle ??
|
|
204
|
+
visible.find((c) => c.searchable) ??
|
|
189
205
|
visible.find((c) => c.type === 'text' || c.cellStyle === 'truncate-text') ??
|
|
190
206
|
visible[0] ??
|
|
191
207
|
null;
|
|
192
|
-
const fields =
|
|
193
|
-
.filter((c) => c.key !== title?.key)
|
|
194
|
-
.slice(0, maxFields);
|
|
195
|
-
return { title, fields };
|
|
208
|
+
const fields = explicit
|
|
209
|
+
? flagged.filter((c) => c.key !== title?.key)
|
|
210
|
+
: visible.filter((c) => c.key !== title?.key).slice(0, maxFields);
|
|
211
|
+
return { title, fields, explicit };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Whether a card's date field is past due — the SDK paints it as a warning.
|
|
215
|
+
* A column opts in with `display_config.overdue: true`; the optional
|
|
216
|
+
* `display_config.overdue_unless` (`{ <field>: [values…] }`) exempts cards whose
|
|
217
|
+
* row matches (a work order already delivered is never late). Pure — exported
|
|
218
|
+
* for unit tests.
|
|
219
|
+
*/
|
|
220
|
+
export function isCardOverdue(card, col, now = Date.now()) {
|
|
221
|
+
if (!cardFlag(col, 'overdue'))
|
|
222
|
+
return false;
|
|
223
|
+
const raw = card?.[col.key];
|
|
224
|
+
if (raw === null || raw === undefined || raw === '')
|
|
225
|
+
return false;
|
|
226
|
+
const at = typeof raw === 'number' ? raw : Date.parse(String(raw));
|
|
227
|
+
if (!Number.isFinite(at) || at >= now)
|
|
228
|
+
return false;
|
|
229
|
+
const unless = col.styleConfig?.overdue_unless;
|
|
230
|
+
if (unless && typeof unless === 'object') {
|
|
231
|
+
for (const [field, values] of Object.entries(unless)) {
|
|
232
|
+
const list = Array.isArray(values) ? values : [values];
|
|
233
|
+
if (list.map(String).includes(String(card?.[field] ?? '')))
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The metadata regrouped by another column (a nav entry's `group_by`). A model
|
|
241
|
+
* can serve several boards over the same records — by stage, by technician, by
|
|
242
|
+
* bay — but the host projects ONE `group_by` per model, so the entry's own wins.
|
|
243
|
+
* The stage machine (stages, transitions, smart lanes) belongs to the model's
|
|
244
|
+
* stage column (`stage_field`; older hosts that do not serve it: the served
|
|
245
|
+
* group_by): grouping by it keeps the machine, grouping by anything else drops
|
|
246
|
+
* it and the lanes come from the new column. Returns the SAME object when there
|
|
247
|
+
* is nothing to change (no override, the served group_by already, or a column the
|
|
248
|
+
* model does not have). Pure — exported for unit tests.
|
|
249
|
+
*/
|
|
250
|
+
export function withGroupBy(metadata, groupBy) {
|
|
251
|
+
if (!metadata || !groupBy || groupBy === metadata.group_by)
|
|
252
|
+
return metadata;
|
|
253
|
+
if (!metadata.columns.some((c) => c.key === groupBy))
|
|
254
|
+
return metadata;
|
|
255
|
+
const stageColumn = metadata.stage_field ?? (metadata.stages?.length ? metadata.group_by : undefined);
|
|
256
|
+
if (groupBy === stageColumn)
|
|
257
|
+
return { ...metadata, group_by: groupBy };
|
|
258
|
+
return {
|
|
259
|
+
...metadata,
|
|
260
|
+
group_by: groupBy,
|
|
261
|
+
stages: undefined,
|
|
262
|
+
transitions: undefined,
|
|
263
|
+
smart_lanes: undefined,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Whether the board's lanes must come from the group_by column's REFERENCE
|
|
268
|
+
* (one lane per technician, per bay, per owner…): the metadata declares no
|
|
269
|
+
* stages, the column has no inline options, but it points at a record list.
|
|
270
|
+
* Pure — exported for unit tests.
|
|
271
|
+
*/
|
|
272
|
+
export function refLaneSource(metadata) {
|
|
273
|
+
if (!metadata?.group_by)
|
|
274
|
+
return null;
|
|
275
|
+
if ((metadata.stages?.length ?? 0) > 0)
|
|
276
|
+
return null;
|
|
277
|
+
const col = metadata.columns.find((c) => c.key === metadata.group_by);
|
|
278
|
+
if (!col || (col.options?.length ?? 0) > 0)
|
|
279
|
+
return null;
|
|
280
|
+
if (col.searchEndpoint)
|
|
281
|
+
return { endpoint: col.searchEndpoint };
|
|
282
|
+
if (col.ref)
|
|
283
|
+
return { ref: col.ref };
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* The metadata with one lane per resolved option of a reference group_by column
|
|
288
|
+
* (labels ordered alphabetically). No transitions are declared, so a card can
|
|
289
|
+
* be dragged to any lane — i.e. re-assigned to another technician / bay.
|
|
290
|
+
* Returns the metadata untouched when there are no options. Pure.
|
|
291
|
+
*/
|
|
292
|
+
export function withRefLanes(metadata, options) {
|
|
293
|
+
if (options.length === 0)
|
|
294
|
+
return metadata;
|
|
295
|
+
const stages = [...options]
|
|
296
|
+
.sort((a, b) => String(a.label).localeCompare(String(b.label)))
|
|
297
|
+
.map((o, i) => ({
|
|
298
|
+
key: String(o.value),
|
|
299
|
+
label: String(o.label),
|
|
300
|
+
color: o.color ?? undefined,
|
|
301
|
+
order: i,
|
|
302
|
+
}));
|
|
303
|
+
return { ...metadata, stages };
|
|
196
304
|
}
|
|
197
305
|
/** The all-zeros UUID — a Go zero-value FK serialized as "set" when it isn't. */
|
|
198
306
|
const ZERO_UUID = /^0{8}-0{4}-0{4}-0{4}-0{12}$/;
|
|
@@ -461,7 +569,7 @@ const CARD_FIELD_CANDIDATES = 8;
|
|
|
461
569
|
const CARD_FIELDS_SHOWN = 3;
|
|
462
570
|
/** No card move in flight (a stable empty snapshot). */
|
|
463
571
|
const NO_MOVES = Object.freeze({});
|
|
464
|
-
function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtimeProp, onCardClick, onAction, pageSize = 50, lanePageSize = 25, timeZone: timeZoneProp, currency: currencyProp, defaultFilters, }) {
|
|
572
|
+
function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtimeProp, onCardClick, onAction, pageSize = 50, lanePageSize = 25, timeZone: timeZoneProp, currency: currencyProp, defaultFilters, groupBy: groupByProp, }) {
|
|
465
573
|
const { t, i18n } = useTranslation();
|
|
466
574
|
// The org's timezone/currency: an explicit prop wins, else the app-wide
|
|
467
575
|
// OrgRuntimeProvider (without it, money fell back to USD).
|
|
@@ -480,15 +588,16 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
480
588
|
});
|
|
481
589
|
// Stage automations (Bitrix-style per-lane rules). Degrades to no-op when
|
|
482
590
|
// the host has no `/stage-automations` endpoint — the ⚡ affordance hides.
|
|
483
|
-
const
|
|
591
|
+
const automationsHook = useStageAutomations(model);
|
|
484
592
|
// Custom stages (Bitrix-style user-defined columns). Degrades to no-op when
|
|
485
593
|
// the host has no `/custom-stages` endpoint — the "+ Agregar etapa" column
|
|
486
594
|
// and lane menus simply don't render.
|
|
487
|
-
const
|
|
595
|
+
const customStagesHook = useCustomStages(model);
|
|
488
596
|
// Per-org overrides for DECLARED lanes (rename/recolor/conditions). Degrades
|
|
489
597
|
// to no-op when the host has no `/stage-overrides` endpoint — the ⚙ gear then
|
|
490
598
|
// hides on declared lanes (custom lanes keep it via /custom-stages).
|
|
491
|
-
const
|
|
599
|
+
const stageOverridesHook = useStageOverrides(model);
|
|
600
|
+
const stageLayoutHook = useStageLayout(model);
|
|
492
601
|
// Dialog state: create/edit a stage, and the delete confirmation.
|
|
493
602
|
const [stageDialogOpen, setStageDialogOpen] = useState(false);
|
|
494
603
|
const [editingStage, setEditingStage] = useState(null);
|
|
@@ -508,7 +617,28 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
508
617
|
}, []);
|
|
509
618
|
const { getMetadata, setMetadata: cacheMetadata } = useMetadataCache();
|
|
510
619
|
const cachedMeta = getMetadata(model);
|
|
511
|
-
const [
|
|
620
|
+
const [serverMetadata, setMetadata] = useState(cachedMeta || null);
|
|
621
|
+
// A reference group_by (technician, bay…) has no declared stages: its lanes
|
|
622
|
+
// are the referenced records, resolved through the same options endpoint the
|
|
623
|
+
// form selects use.
|
|
624
|
+
const routedMetadata = useMemo(() => withGroupBy(serverMetadata, groupByProp), [serverMetadata, groupByProp]);
|
|
625
|
+
// Grouped by something other than the stage column: the stage machine is gone.
|
|
626
|
+
const regrouped = (serverMetadata?.stages?.length ?? 0) > 0 && (routedMetadata?.stages?.length ?? 0) === 0;
|
|
627
|
+
const laneSource = useMemo(() => refLaneSource(routedMetadata), [routedMetadata]);
|
|
628
|
+
const { options: laneOptions } = useOptionsResolver({
|
|
629
|
+
modelKey: '',
|
|
630
|
+
fieldKey: 'id',
|
|
631
|
+
ref: laneSource?.ref,
|
|
632
|
+
endpoint: laneSource?.endpoint,
|
|
633
|
+
limit: 200,
|
|
634
|
+
enabled: !!laneSource,
|
|
635
|
+
});
|
|
636
|
+
const metadata = useMemo(() => (routedMetadata && laneSource ? withRefLanes(routedMetadata, laneOptions) : routedMetadata), [routedMetadata, laneSource, laneOptions]);
|
|
637
|
+
// The stage customisations belong to the stage column: off on another grouping.
|
|
638
|
+
const automations = useMemo(() => (regrouped ? { ...automationsHook, available: false } : automationsHook), [regrouped, automationsHook]);
|
|
639
|
+
const customStages = useMemo(() => (regrouped ? { ...customStagesHook, available: false } : customStagesHook), [regrouped, customStagesHook]);
|
|
640
|
+
const stageOverrides = useMemo(() => (regrouped ? { ...stageOverridesHook, available: false } : stageOverridesHook), [regrouped, stageOverridesHook]);
|
|
641
|
+
const stageLayout = useMemo(() => (regrouped ? { ...stageLayoutHook, available: false } : stageLayoutHook), [regrouped, stageLayoutHook]);
|
|
512
642
|
const [records, setRecords] = useState([]);
|
|
513
643
|
const [loading, setLoading] = useState(!cachedMeta);
|
|
514
644
|
const [loadingData, setLoadingData] = useState(true);
|
|
@@ -532,7 +662,6 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
532
662
|
// the metadata (the backend also stamps `stages[]/smart_lanes[].order`, so the
|
|
533
663
|
// board already paints ordered on load — this only backs the live drag + the
|
|
534
664
|
// revert-on-failure). Null → follow the metadata order.
|
|
535
|
-
const stageLayout = useStageLayout(model);
|
|
536
665
|
const [laneOrderOverride, setLaneOrderOverride] = useState(null);
|
|
537
666
|
const laneReorderEnabled = stageLayout.available;
|
|
538
667
|
// Monotonic token for the current board load. Bumped on every fetchData so a
|
|
@@ -969,9 +1098,9 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
969
1098
|
const grouped = useMemo(() => groupByStage(displayRecords, groupByKey, stages), [displayRecords, groupByKey, stages]);
|
|
970
1099
|
// Card fields: a few more candidates than a card shows, so a card whose
|
|
971
1100
|
// first fields are empty shows the next ones that have a value.
|
|
972
|
-
const { title: titleCol, fields: fieldCols } = useMemo(() => metadata
|
|
1101
|
+
const { title: titleCol, fields: fieldCols, explicit: explicitCard, } = useMemo(() => metadata
|
|
973
1102
|
? selectCardColumns(metadata, CARD_FIELD_CANDIDATES)
|
|
974
|
-
: { title: null, fields: [] }, [metadata]);
|
|
1103
|
+
: { title: null, fields: [], explicit: false }, [metadata]);
|
|
975
1104
|
// Columns the lane search scans: the card title + its visible field cells.
|
|
976
1105
|
const searchCols = useMemo(() => [titleCol, ...fieldCols].filter(Boolean), [titleCol, fieldCols]);
|
|
977
1106
|
// Row-placement actions resolved EXACTLY like DynamicTable's action column:
|
|
@@ -1412,7 +1541,7 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
1412
1541
|
extraFilters,
|
|
1413
1542
|
configurable: isConfigurable(stage),
|
|
1414
1543
|
onConfigure: () => openConfigStage(stage),
|
|
1415
|
-
children: loadingData && cards.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { className: "h-20 w-full" }), _jsx(Skeleton, { className: "h-20 w-full" })] })) : cards.length === 0 ? (_jsx("p", { className: "px-1 py-6 text-center text-xs text-muted-foreground", children: t('kanban.emptyLane', { defaultValue: 'Sin tarjetas' }) })) : (cards.map((card) => (_jsx(KanbanCard, { card: card, titleCol: titleCol, fieldCols: fieldCols, actions: rowActions, locale: i18n.language, timeZone: timeZone, currency: currency, onClick: onCardClick, onAction: handleInternalAction, pending: card.id != null && String(card.id) in moveOverrides }, String(card.id))))),
|
|
1544
|
+
children: loadingData && cards.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { className: "h-20 w-full" }), _jsx(Skeleton, { className: "h-20 w-full" })] })) : cards.length === 0 ? (_jsx("p", { className: "px-1 py-6 text-center text-xs text-muted-foreground", children: t('kanban.emptyLane', { defaultValue: 'Sin tarjetas' }) })) : (cards.map((card) => (_jsx(KanbanCard, { card: card, titleCol: titleCol, fieldCols: fieldCols, showAllFields: explicitCard, actions: rowActions, locale: i18n.language, timeZone: timeZone, currency: currency, onClick: onCardClick, onAction: handleInternalAction, pending: card.id != null && String(card.id) in moveOverrides }, String(card.id))))),
|
|
1416
1545
|
};
|
|
1417
1546
|
};
|
|
1418
1547
|
// Props for one smart (virtual) lane — a read-only, filter-defined column.
|
|
@@ -1426,7 +1555,7 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
1426
1555
|
refreshTrigger,
|
|
1427
1556
|
onEdit: openEditStage,
|
|
1428
1557
|
onDelete: openDeleteStage,
|
|
1429
|
-
renderCard: (card) => (_jsx(KanbanCard, { card: card, titleCol: titleCol, fieldCols: fieldCols, actions: rowActions, locale: i18n.language, timeZone: timeZone, currency: currency, onClick: onCardClick, onAction: handleInternalAction, draggable: false })),
|
|
1558
|
+
renderCard: (card) => (_jsx(KanbanCard, { card: card, titleCol: titleCol, fieldCols: fieldCols, showAllFields: explicitCard, actions: rowActions, locale: i18n.language, timeZone: timeZone, currency: currency, onClick: onCardClick, onAction: handleInternalAction, draggable: false })),
|
|
1430
1559
|
});
|
|
1431
1560
|
const showResetOrder = laneReorderEnabled && (stageLayout.hasCustomLayout || !!laneOrderOverride);
|
|
1432
1561
|
return (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", "data-testid": "kanban-filters", children: [_jsxs("div", { className: "relative", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { value: globalFilter, onChange: (e) => setGlobalFilter(e.target.value), placeholder: t('kanban.searchPlaceholder', { defaultValue: 'Buscar...' }), className: "h-8 w-52 pl-8 text-sm" })] }), filterFields.length > 0 && (_jsxs(Sheet, { open: filtersOpen, onOpenChange: setFiltersOpen, children: [_jsx(SheetTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", className: "h-8 gap-1.5", children: [_jsx(ListFilter, { className: "h-3.5 w-3.5" }), t('kanban.filters', { defaultValue: 'Filtros' }), activeFilterCount > 0 && (_jsx(Badge, { variant: "secondary", className: "ml-0.5 h-4 min-w-4 justify-center rounded-full px-1 text-[10px] tabular-nums", children: activeFilterCount }))] }) }), _jsxs(SheetContent, { side: "right", className: "flex w-80 flex-col gap-0 p-0 sm:max-w-sm", children: [_jsx(SheetHeader, { className: "space-y-0 border-b px-4 py-3", children: _jsx(SheetTitle, { className: "text-sm", children: t('kanban.filters', { defaultValue: 'Filtros' }) }) }), _jsxs("div", { className: "flex flex-1 flex-col gap-1 overflow-y-auto px-4 py-3", children: [activeFields.length > 0 && (_jsxs(_Fragment, { children: [_jsx("p", { className: "px-0.5 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: t('kanban.activeFilters', {
|
|
@@ -1449,7 +1578,7 @@ function DynamicKanbanBoard({ model, endpoint, refreshTrigger, realtime: realtim
|
|
|
1449
1578
|
// drop itself is refused in onDragEnd.
|
|
1450
1579
|
droppableDisabled: false, laneProps: buildLaneProps(lane.stage) }, lane.stage.key)) : laneReorderEnabled ? (_jsx(SortableSmartLane, { droppableDisabled: !!activeId, smartProps: buildSmartProps(lane.stage) }, `smart-${lane.stage.key}`)) : (_jsx(SmartLane, { ...buildSmartProps(lane.stage) }, `smart-${lane.stage.key}`))), unassignedStage && (_jsx(DroppableStageLane, {
|
|
1451
1580
|
// "Sin etapa" is not a value a card can be given.
|
|
1452
|
-
droppableDisabled: !!activeId, laneProps: buildLaneProps(unassignedStage) }, UNASSIGNED_LANE)), customStages.available && (_jsx(AddStageColumn, { onClick: openCreateStage }))] }) }), _jsx(PortalDragOverlay, { dropAnimation: DROP_ANIMATION, zIndex: 60, children: activeCard ? (_jsx(CardPreview, { card: activeCard, titleCol: titleCol, fieldCols: fieldCols, locale: i18n.language, timeZone: timeZone, currency: currency, blocked: overBlocked })) : null }), rowActionDialogs] }), customStages.available && (_jsxs(_Fragment, { children: [_jsx(CustomStageDialog, { open: stageDialogOpen, onOpenChange: setStageDialogOpen, model: model, columns: metadata?.columns ?? [], initial: editingStage, nextPosition: nextStagePosition, onCreate: customStages.create, onUpdate: customStages.update }), _jsx(CustomStageDeleteDialog, { open: !!deletingStage, onOpenChange: (o) => {
|
|
1581
|
+
droppableDisabled: !!activeId, laneProps: buildLaneProps(unassignedStage) }, UNASSIGNED_LANE)), customStages.available && (_jsx(AddStageColumn, { onClick: openCreateStage }))] }) }), _jsx(PortalDragOverlay, { dropAnimation: DROP_ANIMATION, zIndex: 60, children: activeCard ? (_jsx(CardPreview, { card: activeCard, titleCol: titleCol, fieldCols: fieldCols, showAllFields: explicitCard, locale: i18n.language, timeZone: timeZone, currency: currency, blocked: overBlocked })) : null }), rowActionDialogs] }), customStages.available && (_jsxs(_Fragment, { children: [_jsx(CustomStageDialog, { open: stageDialogOpen, onOpenChange: setStageDialogOpen, model: model, columns: metadata?.columns ?? [], initial: editingStage, nextPosition: nextStagePosition, onCreate: customStages.create, onUpdate: customStages.update }), _jsx(CustomStageDeleteDialog, { open: !!deletingStage, onOpenChange: (o) => {
|
|
1453
1582
|
if (!o)
|
|
1454
1583
|
setDeletingStage(null);
|
|
1455
1584
|
}, stage: deletingStage, reassignTargets: stages.map((s) => ({
|
|
@@ -1738,11 +1867,13 @@ function LaneFilterButton({ fields, value, onChange, }) {
|
|
|
1738
1867
|
}
|
|
1739
1868
|
// The title + the card's non-empty fields. Shared by the card and the drag
|
|
1740
1869
|
// preview so the lifted card looks exactly like the one on the board.
|
|
1741
|
-
function CardBody({ card, titleCol, fieldCols, locale, timeZone, currency, menu, }) {
|
|
1742
|
-
const fields = visibleCardFields(card, fieldCols, CARD_FIELDS_SHOWN);
|
|
1743
|
-
return (_jsxs(CardContent, { className: "space-y-1.5 p-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("div", { className: "min-w-0 flex-1 break-words text-sm font-medium leading-snug", children: titleCol && !isEmptyCardValue(card, titleCol) ? (_jsx(ActivityValueRenderer, { value: cardCellValue(card, titleCol), col: titleCol, locale: locale, timeZone: timeZone, currency: currency })) : (_jsxs("span", { className: "truncate text-muted-foreground", children: ["#", String(card.id)] })) }), menu] }), fields.map((col) => (_jsxs("div", { className:
|
|
1870
|
+
function CardBody({ card, titleCol, fieldCols, showAllFields, locale, timeZone, currency, menu, }) {
|
|
1871
|
+
const fields = visibleCardFields(card, fieldCols, showAllFields ? fieldCols.length : CARD_FIELDS_SHOWN);
|
|
1872
|
+
return (_jsxs(CardContent, { className: "space-y-1.5 p-3", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("div", { className: "min-w-0 flex-1 break-words text-sm font-medium leading-snug", children: titleCol && !isEmptyCardValue(card, titleCol) ? (_jsx(ActivityValueRenderer, { value: cardCellValue(card, titleCol), col: titleCol, locale: locale, timeZone: timeZone, currency: currency })) : (_jsxs("span", { className: "truncate text-muted-foreground", children: ["#", String(card.id)] })) }), menu] }), fields.map((col) => (_jsxs("div", { className: `flex min-w-0 items-start gap-1.5 text-xs ${isCardOverdue(card, col)
|
|
1873
|
+
? 'font-medium text-destructive'
|
|
1874
|
+
: 'text-muted-foreground'}`, "data-overdue": isCardOverdue(card, col) || undefined, children: [_jsxs("span", { className: "shrink-0 opacity-70", children: [col.label, ":"] }), _jsx("span", { className: "min-w-0 break-words", children: _jsx(ActivityValueRenderer, { value: cardCellValue(card, col), col: col, locale: locale, timeZone: timeZone, currency: currency }) })] }, col.key)))] }));
|
|
1744
1875
|
}
|
|
1745
|
-
function KanbanCard({ card, titleCol, fieldCols, actions, locale, timeZone, currency, onClick, onAction, draggable = true, pending = false, }) {
|
|
1876
|
+
function KanbanCard({ card, titleCol, fieldCols, showAllFields, actions, locale, timeZone, currency, onClick, onAction, draggable = true, pending = false, }) {
|
|
1746
1877
|
const { attributes, listeners, setNodeRef, isDragging } = useDraggable({
|
|
1747
1878
|
id: String(card.id),
|
|
1748
1879
|
data: { type: 'card' },
|
|
@@ -1755,10 +1886,10 @@ function KanbanCard({ card, titleCol, fieldCols, actions, locale, timeZone, curr
|
|
|
1755
1886
|
e.stopPropagation();
|
|
1756
1887
|
onAction(a.key, card);
|
|
1757
1888
|
} }, a.key))) })] })) : null;
|
|
1758
|
-
return (_jsx(Card, { ref: draggable ? setNodeRef : undefined, ...(draggable ? attributes : {}), ...(draggable ? listeners : {}), className: `w-full min-w-0 shrink-0 border-border/70 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-ring ${draggable ? 'cursor-grab active:cursor-grabbing' : 'cursor-default'}`, style: { opacity: isDragging ? 0.4 : 1 }, onClick: () => onClick?.(card), "data-card-id": String(card.id), "data-flip-key": draggable ? String(card.id) : undefined, "aria-busy": pending || undefined, children: _jsx(CardBody, { card: card, titleCol: titleCol, fieldCols: fieldCols, locale: locale, timeZone: timeZone, currency: currency, menu: menu }) }));
|
|
1889
|
+
return (_jsx(Card, { ref: draggable ? setNodeRef : undefined, ...(draggable ? attributes : {}), ...(draggable ? listeners : {}), className: `w-full min-w-0 shrink-0 border-border/70 shadow-sm outline-none focus-visible:ring-2 focus-visible:ring-ring ${draggable ? 'cursor-grab active:cursor-grabbing' : 'cursor-default'}`, style: { opacity: isDragging ? 0.4 : 1 }, onClick: () => onClick?.(card), "data-card-id": String(card.id), "data-flip-key": draggable ? String(card.id) : undefined, "aria-busy": pending || undefined, children: _jsx(CardBody, { card: card, titleCol: titleCol, fieldCols: fieldCols, showAllFields: showAllFields, locale: locale, timeZone: timeZone, currency: currency, menu: menu }) }));
|
|
1759
1890
|
}
|
|
1760
1891
|
// Static preview rendered inside the DragOverlay (no dnd hooks, no menu). It
|
|
1761
1892
|
// fills the overlay box, which dnd-kit sizes to the card being dragged.
|
|
1762
|
-
function CardPreview({ card, titleCol, fieldCols, locale, timeZone, currency, blocked = false, }) {
|
|
1763
|
-
return (_jsx(Card, { className: `h-full w-full shadow-xl transition-[border-color] ${blocked ? 'border-destructive/60' : 'border-primary/40'}`, style: { cursor: blocked ? 'not-allowed' : 'grabbing' }, "data-testid": "kanban-drag-preview", "data-blocked": blocked || undefined, children: _jsx(CardBody, { card: card, titleCol: titleCol, fieldCols: fieldCols, locale: locale, timeZone: timeZone, currency: currency }) }));
|
|
1893
|
+
function CardPreview({ card, titleCol, fieldCols, showAllFields, locale, timeZone, currency, blocked = false, }) {
|
|
1894
|
+
return (_jsx(Card, { className: `h-full w-full shadow-xl transition-[border-color] ${blocked ? 'border-destructive/60' : 'border-primary/40'}`, style: { cursor: blocked ? 'not-allowed' : 'grabbing' }, "data-testid": "kanban-drag-preview", "data-blocked": blocked || undefined, children: _jsx(CardBody, { card: card, titleCol: titleCol, fieldCols: fieldCols, showAllFields: showAllFields, locale: locale, timeZone: timeZone, currency: currency }) }));
|
|
1764
1895
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { parseRuleString, fieldValidationOf, checkValue, validateValues, bagHasE
|
|
|
7
7
|
export { VALIDATION_CATALOGS, validationCatalog, validationMessageKey } from './validation-catalog';
|
|
8
8
|
export { labelForValidationPath, labelsForValidationFields, formatFieldErrorsDescription, clearFieldErrorTree, lineItemErrorsFor, } from './field-validation-ui';
|
|
9
9
|
export * from './dynamic-table';
|
|
10
|
-
export { DynamicKanban, type DynamicKanbanProps, deriveStages, groupByStage, isTransitionAllowed, applyOptimisticMove, applyStageOverrides, laneDeltasFromOverrides, selectCardColumns, visibleCardFields, isEmptyCardValue, nextLaneCoordinates, UNASSIGNED_LANE, } from './dynamic-kanban';
|
|
10
|
+
export { DynamicKanban, type DynamicKanbanProps, deriveStages, groupByStage, isTransitionAllowed, applyOptimisticMove, applyStageOverrides, laneDeltasFromOverrides, selectCardColumns, isCardOverdue, refLaneSource, withGroupBy, withRefLanes, visibleCardFields, isEmptyCardValue, nextLaneCoordinates, UNASSIGNED_LANE, } from './dynamic-kanban';
|
|
11
11
|
export { PortalDragOverlay, type PortalDragOverlayProps } from './portal-drag-overlay';
|
|
12
12
|
export { useStageAutomations, StageAutomationsButton, isTagColumn, automationFieldOptions, groupAutomationsByStage, activeAutomationCount, type StageAutomation, type StageAutomationAction, type StageAutomationActionType, type NewStageAutomation, type UseStageAutomationsResult, type StageAutomationsButtonProps, } from './stage-automations';
|
|
13
13
|
export { useCustomStages, splitCustomStages, mergeLaneStages, resolveSmartLanes, smartLaneParams, cardMatchesStageFilters, customStageFilterFields, isCustomStageDraftValid, slugifyStageKey, emptyCustomStageFilter, AddStageColumn, CustomStageLaneMenu, CustomStageDialog, CustomStageDeleteDialog, StageConditionBuilder, StageConfigDialog, stageFilterOpSymbol, SmartLane, CUSTOM_STAGE_COLORS, CUSTOM_STAGE_FILTER_OPS, type CustomStage, type NewCustomStage, type CustomStageType, type CustomStageFilter, type CustomStageFilterOp, type UseCustomStagesResult, type StageConfigTarget, type StageConfigKind, type StageConditionBuilderProps, type StageConfigDialogProps, } from './custom-stages';
|
|
@@ -38,6 +38,7 @@ export * from './capability-gate';
|
|
|
38
38
|
export { PermissionsProvider, useCan, usePermissionsActive, makeCan, capabilityForActionKey, modelCapability, gateTableMetadata, resolveRowActions, type CanFn, type PermissionsProviderProps, } from './permissions-context';
|
|
39
39
|
export { ApprovalPinDialog, approvalErrorMessage, type ApprovalPinDialogProps, type ApprovalPinSubmit, } from './approval-pin-dialog';
|
|
40
40
|
export { ApprovalGateProvider, useApprovalGate, approvalCapability, approvalRequiredInfo, approvalGateAvailable, APPROVAL_PARKED_EVENT, APPROVAL_DECIDED_EVENT, type ApprovalGateValue, type ApprovalGrant, type ApprovalRequiredInfo, type RequestApprovalOptions, } from './approval-gate';
|
|
41
|
+
export { useSupervisor, withApproval, type SupervisedAction, type SupervisorAuthorization, type AuthorizeOptions, } from './supervised-action';
|
|
41
42
|
export { ReasonPromptDialog, useReasonPrompt, reasonRequiredInfo, DEFAULT_REASON_MIN, type ReasonPromptDialogProps, type ReasonPromptApi, type ReasonRequiredInfo, type RunWithReasonOptions, } from './reason-prompt';
|
|
42
43
|
export { useDynamicRowActions, type UseDynamicRowActionsParams, type DynamicRowActions, } from './dynamic-row-actions';
|
|
43
44
|
export { resolveRequiresAddon, setAddonInstallHandler, getAddonInstallHandler, requiresAddonName, useRequiresAddonLabel, RequiresAddonLock, RequiresAddonDialog, type RequiresAddon, type RequiresAddonDialogProps, } from './requires-addon';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|