@cxtms/cx-schema 1.9.256 → 1.9.258
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/package.json +1 -1
- package/schemas/components/field-collection.json +19 -0
- package/schemas/components/planner.json +1 -1
- package/schemas/schema.graphql +1 -0
- package/skills/cxtms-developer/ref-entity-dispatch-routing.md +2 -0
- package/skills/cxtms-module-builder/ref-components-forms.md +6 -1
- package/skills/cxtms-module-builder/ref-components-specialized.md +2 -0
package/package.json
CHANGED
|
@@ -316,6 +316,25 @@
|
|
|
316
316
|
]
|
|
317
317
|
}
|
|
318
318
|
},
|
|
319
|
+
"itemGroups": {
|
|
320
|
+
"type": "object",
|
|
321
|
+
"required": ["key"],
|
|
322
|
+
"properties": {
|
|
323
|
+
"key": {
|
|
324
|
+
"type": "string",
|
|
325
|
+
"description": "Template resolved per visible row. Consecutive rows with the same non-empty key form a visual group."
|
|
326
|
+
},
|
|
327
|
+
"headerTemplate": {
|
|
328
|
+
"type": "object",
|
|
329
|
+
"description": "Component rendered once above the grouped accordion rows. Receives group and collection variables."
|
|
330
|
+
},
|
|
331
|
+
"accent": {
|
|
332
|
+
"description": "Templated group-frame color: CSS color, palette path, or palette name."
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
"additionalProperties": false,
|
|
336
|
+
"description": "Visually joins adjacent accordion rows with matching keys without reordering or bucketing them."
|
|
337
|
+
},
|
|
319
338
|
"layout": {
|
|
320
339
|
"type": "string",
|
|
321
340
|
"enum": ["list", "grid", "accordion"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"http://json-schema.org/draft-07/schema#","title":"Planner Component","type":"object","required":["component","props"],"properties":{"component":{"const":"planner"},"name":{"type":"string"},"props":{"type":"object","required":["queries","rows","columns","itemTemplate"],"properties":{"height":{},"refreshHandler":{"type":"string"},"debug":{"type":"boolean"},"options":{"type":"object","properties":{"enableVirtualization":{"type":"boolean"},"virtualizeThreshold":{"type":"number"},"estimatedRowHeight":{"type":"number"}},"additionalProperties":true},"queries":{"type":"array","minItems":1,"items":{"type":"object","required":["name","query"],"properties":{"name":{"type":"string"},"query":{"type":"object"},"itemsPath":{"type":"string"},"parentAs":{"type":"string"},"mapping":{"type":"object"}},"additionalProperties":true}},"rows":{"type":"object","required":["groupBy","headerWidth"],"properties":{"groupBy":{"type":"string"},"fromQuery":{"type":"string"},"key":{"type":"string"},"label":{},"orderBy":{"type":"array"},"unassigned":{"type":"object"},"headerWidth":{"type":"number"}},"additionalProperties":true},"columns":{"type":"object","required":["width"],"properties":{"orderBy":{"type":"array"},"appendEmpty":{"type":"boolean","description":"Keep one trailing empty slot beyond the largest group."},"label":{},"width":{"type":"number"}},"additionalProperties":true},"rowHeaderTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemTemplate":{"$ref":"../schemas.json#/definitions/component"},"emptyCellTemplate":{"$ref":"../schemas.json#/definitions/component"},"summaryComponent":{"$ref":"../schemas.json#/definitions/component"},"emptyStateTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemAccent":{},"dragSource":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"data":{},"canDrag":{}},"additionalProperties":false},"events":{"type":"object","additionalProperties":{"$ref":"../schemas.json#/definitions/actionsList"}}},"additionalProperties":true}},"additionalProperties":true}
|
|
1
|
+
{"$schema":"http://json-schema.org/draft-07/schema#","title":"Planner Component","type":"object","required":["component","props"],"properties":{"component":{"const":"planner"},"name":{"type":"string"},"props":{"type":"object","required":["queries","rows","columns","itemTemplate"],"properties":{"height":{},"refreshHandler":{"type":"string"},"debug":{"type":"boolean"},"options":{"type":"object","properties":{"enableVirtualization":{"type":"boolean"},"virtualizeThreshold":{"type":"number"},"estimatedRowHeight":{"type":"number"}},"additionalProperties":true},"queries":{"type":"array","minItems":1,"items":{"type":"object","required":["name","query"],"properties":{"name":{"type":"string"},"query":{"type":"object"},"itemsPath":{"type":"string"},"parentAs":{"type":"string"},"mapping":{"type":"object"}},"additionalProperties":true}},"rows":{"type":"object","required":["groupBy","headerWidth"],"properties":{"groupBy":{"type":"string"},"fromQuery":{"type":"string"},"key":{"type":"string"},"label":{},"orderBy":{"type":"array"},"unassigned":{"type":"object"},"headerWidth":{"type":"number"}},"additionalProperties":true},"columns":{"type":"object","required":["width"],"properties":{"orderBy":{"type":"array"},"appendEmpty":{"type":"boolean","description":"Keep one trailing empty slot beyond the largest group."},"label":{},"width":{"type":"number"}},"additionalProperties":true},"rowHeaderTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemTemplate":{"$ref":"../schemas.json#/definitions/component"},"emptyCellTemplate":{"$ref":"../schemas.json#/definitions/component"},"summaryComponent":{"$ref":"../schemas.json#/definitions/component"},"emptyStateTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemAccent":{},"itemGroups":{"type":"object","required":["key"],"properties":{"key":{"type":"string"},"headerTemplate":{"$ref":"../schemas.json#/definitions/component"},"accent":{},"dotsMenu":{"type":"object"}},"additionalProperties":false},"dragSource":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"data":{},"canDrag":{}},"additionalProperties":false},"events":{"type":"object","additionalProperties":{"$ref":"../schemas.json#/definitions/actionsList"}}},"additionalProperties":true}},"additionalProperties":true}
|
package/schemas/schema.graphql
CHANGED
|
@@ -11084,6 +11084,7 @@ type orderMoveLeg {
|
|
|
11084
11084
|
orderMoveLegStatus: orderMoveLegStatus
|
|
11085
11085
|
startDate: DateTime
|
|
11086
11086
|
endDate: DateTime
|
|
11087
|
+
getAddress(idPropertyName: String!): contactAddress
|
|
11087
11088
|
trackingEvents: [trackingEvent!]
|
|
11088
11089
|
customValues: MapOfObject
|
|
11089
11090
|
isDeleted: Boolean!
|
|
@@ -162,6 +162,7 @@ Vertical-specific routing details belong in `customValues`.
|
|
|
162
162
|
| `startDate` | `DateTime?` | UTC start |
|
|
163
163
|
| `endDate` | `DateTime?` | UTC end |
|
|
164
164
|
| `customValues` | `Dictionary` | Location, event, appointment, and metric data |
|
|
165
|
+
| `getAddress(idPropertyName)` | `ContactAddress?` | Resolves a contact-address ID from the named `customValues` property; tenant-scoped through the parent move |
|
|
165
166
|
| `trackingEvents` | `[TrackingEvent]` | Leg-level milestones |
|
|
166
167
|
|
|
167
168
|
Entity-trigger payloads load the status navigation before mapping when necessary. This
|
|
@@ -184,6 +185,7 @@ are appended and omitted existing records are not deleted.
|
|
|
184
185
|
|
|
185
186
|
- Queries: `dispatchRouteStatus`, `dispatchRouteStatuses`, `dispatchRouteStopStatus`, `dispatchRouteStopStatuses`, `dispatchRouteTemplate`, `dispatchRouteTemplates`, `dispatchRoute`, `dispatchRoutes`.
|
|
186
187
|
- Order move queries: `orderMove`, `orderMoves`, `orderMoveStatus`, `orderMoveStatuses`, `orderMoveLegStatus`, and `orderMoveLegStatuses`.
|
|
188
|
+
- Order-move legs expose `getAddress(idPropertyName: String!)` to resolve an integer contact-address ID from the named `customValues` property. Missing or invalid values return `null`, and cross-organization addresses are never returned.
|
|
187
189
|
- Nested order resolvers: `getOrderMoves(filter, orderBy)` returns pending or statusless moves (defaulted to sequence order), while `getOrderMove(filter, orderBy)` returns the first matching pending or statusless move. Moves whose status stage is no longer `Pending` are excluded.
|
|
188
190
|
- Order move mutations create, sparse-update, and soft-delete moves; create/update accepts nested `orderMoveLegs`, reconciled by ID and array order. Omitted or `isDeleted: true` legs are soft-deleted, new already-deleted legs are ignored, and only active legs consume sequence positions.
|
|
189
191
|
- `createOrderMoveLeg`, `updateOrderMoveLeg`, and `deleteOrderMoveLeg` manage one leg without resending the parent move. Create requires `orderMoveId`, appends after the last active leg when `sequence` is omitted, and accepts name, status, dates, and custom values. Update takes a sparse values map; delete is soft. Each operation is organization-scoped through the parent move.
|
|
@@ -605,6 +605,7 @@ When `options.allowRemove` is enabled and the item count is above `minItems`, re
|
|
|
605
605
|
| `groupMode` | `boolean` | `false` | Enable grouping |
|
|
606
606
|
| `groupBy` | `string` | — | Field path to group by |
|
|
607
607
|
| `groups` | `{key, label, icon?}[]` | — | Group definitions |
|
|
608
|
+
| `itemGroups` | `{key, headerTemplate?, accent?}` | — | In accordion layout, join consecutive rows whose templated key is equal and non-empty |
|
|
608
609
|
| `showIndex` | `boolean` | `false` | Show item index |
|
|
609
610
|
| `showDragHandle` | `boolean` | `false` | Show drag handles |
|
|
610
611
|
| `showMoveButtons` | `boolean` | `false` | Show up/down move buttons for accessible reordering; requires `options.allowReorder` |
|
|
@@ -685,6 +686,8 @@ Grouped collections can render groups in multiple columns. Use a fixed `groupCol
|
|
|
685
686
|
|
|
686
687
|
Accordion collections support `itemHeaderFields` for interactive fields that remain visible while a row is collapsed. The header fields share `item`, `index`, `collection`, and field-name prefixing with `itemTemplate`; wrap them in a `layout` for grid sizing. Use `rowVariant: flat` and `nestedVariant: rail` or `none` to reduce card chrome in nested collections.
|
|
687
688
|
|
|
689
|
+
`itemGroups` is separate from `groupMode`: it preserves order and frames only adjacent runs of two or more matching keys. Its header and accent templates receive `group = { key, items, size, startIndex, endIndex }` and `collection`; grouped row templates additionally receive `groupPosition` and `groupOffset`.
|
|
690
|
+
|
|
688
691
|
For `datetime`, `time`, and `select-async` fields, `displayMode: readEdit` renders the current value as text until clicked. Date/time fields stay in edit mode while their calendar popup is open and return to text when it closes; other fields return on blur.
|
|
689
692
|
|
|
690
693
|
```yaml
|
|
@@ -729,7 +732,9 @@ Headless barcode/keyboard scanner listener. Captures rapid keystrokes and fires
|
|
|
729
732
|
| `maxBarcodes` | `number` | — | Mobile: maximum accepted scans in continuous mode |
|
|
730
733
|
| `onScan` | `action[]` | — | **Required.** Action on scan detection |
|
|
731
734
|
|
|
732
|
-
**Renders:** Nothing (empty fragment). Web listens on `document`
|
|
735
|
+
**Renders:** Nothing (empty fragment). Web listens on `document` keydown, ignores form controls
|
|
736
|
+
and non-printable keys, and derives letters, unshifted digits, minus, and period from physical
|
|
737
|
+
key codes to avoid keyboard-layout transformations. Other printable keys use `event.key`. Mobile supports
|
|
733
738
|
native HID scanners with a hidden-input fallback and shares camera-scanner deduplication rules.
|
|
734
739
|
|
|
735
740
|
**Scan data:** `result: { data: string, format: 'input' }`
|
|
@@ -473,6 +473,8 @@ Set `columns.appendEmpty: true` to render one trailing empty ordinal slot beyond
|
|
|
473
473
|
|
|
474
474
|
Set `props.dragSource` to make planner cards draggable between lanes. It uses the shared `type`, optional `data`, and optional templated `canDrag` contract; target cells receive the payload through `dragItem` and `dragType`. Native dragging is desktop-only, so keep a click-driven equivalent.
|
|
475
475
|
|
|
476
|
+
Use `props.itemGroups` to join consecutive cards with the same non-empty templated `key` into one framed block. Optional `headerTemplate`, `accent`, and `dotsMenu` render at group level. Group templates receive `{ key, items, size, startIndex, endIndex }`; card templates receive `group`, `groupPosition`, and `groupOffset`. A grouped drag exposes the complete group to the drop action as `dragGroup` while preserving the individual `dragItem`.
|
|
477
|
+
|
|
476
478
|
## timeline-grid
|
|
477
479
|
|
|
478
480
|
CSS Grid-based timeline with swim lanes, drill-down, and virtual scrolling.
|