@vuu-ui/vuu-utils 2.1.19-beta.2 → 2.1.19-beta.4
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/cjs/node_modules/@dnd-kit/abstract/index.js +1488 -0
- package/cjs/node_modules/@dnd-kit/abstract/index.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/abstract/modifiers.js +85 -0
- package/cjs/node_modules/@dnd-kit/abstract/modifiers.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/collision/dist/index.js +91 -0
- package/cjs/node_modules/@dnd-kit/collision/dist/index.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/dom/index.js +1991 -0
- package/cjs/node_modules/@dnd-kit/dom/index.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/dom/sortable.js +828 -0
- package/cjs/node_modules/@dnd-kit/dom/sortable.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/dom/utilities.js +1389 -0
- package/cjs/node_modules/@dnd-kit/dom/utilities.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/geometry/dist/index.js +310 -0
- package/cjs/node_modules/@dnd-kit/geometry/dist/index.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/react/hooks.js +134 -0
- package/cjs/node_modules/@dnd-kit/react/hooks.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/react/index.js +398 -0
- package/cjs/node_modules/@dnd-kit/react/index.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/react/sortable.js +177 -0
- package/cjs/node_modules/@dnd-kit/react/sortable.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/react/utilities.js +19 -0
- package/cjs/node_modules/@dnd-kit/react/utilities.js.map +1 -0
- package/cjs/node_modules/@dnd-kit/state/dist/index.js +280 -0
- package/cjs/node_modules/@dnd-kit/state/dist/index.js.map +1 -0
- package/cjs/node_modules/@preact/signals-core/dist/signals-core.js +11 -0
- package/cjs/node_modules/@preact/signals-core/dist/signals-core.js.map +1 -0
- package/cjs/packages/vuu-utils/src/Clock.js +62 -0
- package/cjs/packages/vuu-utils/src/Clock.js.map +1 -0
- package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js +80 -0
- package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js.map +1 -0
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js +43 -0
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js.map +1 -0
- package/cjs/packages/vuu-utils/src/ShellContext.js +13 -0
- package/cjs/packages/vuu-utils/src/ShellContext.js.map +1 -0
- package/cjs/packages/vuu-utils/src/ThemeProvider.js +85 -0
- package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +1 -0
- package/cjs/packages/vuu-utils/src/array-utils.js +87 -0
- package/cjs/packages/vuu-utils/src/array-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/box-utils.js +53 -0
- package/cjs/packages/vuu-utils/src/box-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/column-utils.js +1066 -0
- package/cjs/packages/vuu-utils/src/column-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/common-types.js +15 -0
- package/cjs/packages/vuu-utils/src/common-types.js.map +1 -0
- package/cjs/packages/vuu-utils/src/component-registry.js +144 -0
- package/cjs/packages/vuu-utils/src/component-registry.js.map +1 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +21 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +19 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +33 -0
- package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -0
- package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +20 -0
- package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -0
- package/cjs/packages/vuu-utils/src/cookie-utils.js +22 -0
- package/cjs/packages/vuu-utils/src/cookie-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/css-utils.js +9 -0
- package/cjs/packages/vuu-utils/src/css-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js +28 -0
- package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +64 -0
- package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-editing/EditSession.js +314 -0
- package/cjs/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js +37 -0
- package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js +114 -0
- package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -0
- package/cjs/packages/vuu-utils/src/data-utils.js +110 -0
- package/cjs/packages/vuu-utils/src/data-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +317 -0
- package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js +14 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +40 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js +218 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/date/date-utils.js +131 -0
- package/cjs/packages/vuu-utils/src/date/date-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/date/dateTimePattern.js +26 -0
- package/cjs/packages/vuu-utils/src/date/dateTimePattern.js.map +1 -0
- package/cjs/packages/vuu-utils/src/date/formatter.js +82 -0
- package/cjs/packages/vuu-utils/src/date/formatter.js.map +1 -0
- package/cjs/packages/vuu-utils/src/date/types.js +32 -0
- package/cjs/packages/vuu-utils/src/date/types.js.map +1 -0
- package/cjs/packages/vuu-utils/src/debug-utils.js +34 -0
- package/cjs/packages/vuu-utils/src/debug-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/event-emitter.js +113 -0
- package/cjs/packages/vuu-utils/src/event-emitter.js.map +1 -0
- package/cjs/packages/vuu-utils/src/feature-utils.js +139 -0
- package/cjs/packages/vuu-utils/src/feature-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js +182 -0
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js +69 -0
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -0
- package/cjs/packages/vuu-utils/src/form-utils.js +123 -0
- package/cjs/packages/vuu-utils/src/form-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/formatting-utils.js +114 -0
- package/cjs/packages/vuu-utils/src/formatting-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/getUniqueId.js +6 -0
- package/cjs/packages/vuu-utils/src/getUniqueId.js.map +1 -0
- package/cjs/packages/vuu-utils/src/group-utils.js +27 -0
- package/cjs/packages/vuu-utils/src/group-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/html-utils.js +162 -0
- package/cjs/packages/vuu-utils/src/html-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/index.js +481 -0
- package/cjs/packages/vuu-utils/src/index.js.map +1 -0
- package/cjs/packages/vuu-utils/src/input-utils.js +10 -0
- package/cjs/packages/vuu-utils/src/input-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/invariant.js +13 -0
- package/cjs/packages/vuu-utils/src/invariant.js.map +1 -0
- package/cjs/packages/vuu-utils/src/itemToString.js +23 -0
- package/cjs/packages/vuu-utils/src/itemToString.js.map +1 -0
- package/cjs/packages/vuu-utils/src/json-utils.js +105 -0
- package/cjs/packages/vuu-utils/src/json-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/keyboard-utils.js +30 -0
- package/cjs/packages/vuu-utils/src/keyboard-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/keyset.js +72 -0
- package/cjs/packages/vuu-utils/src/keyset.js.map +1 -0
- package/cjs/packages/vuu-utils/src/list-utils.js +11 -0
- package/cjs/packages/vuu-utils/src/list-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/local-storage-utils.js +35 -0
- package/cjs/packages/vuu-utils/src/local-storage-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/logging-utils.js +65 -0
- package/cjs/packages/vuu-utils/src/logging-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/module-utils.js +6 -0
- package/cjs/packages/vuu-utils/src/module-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/nanoid/index.js +22 -0
- package/cjs/packages/vuu-utils/src/nanoid/index.js.map +1 -0
- package/cjs/packages/vuu-utils/src/perf-utils.js +35 -0
- package/cjs/packages/vuu-utils/src/perf-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/promise-utils.js +42 -0
- package/cjs/packages/vuu-utils/src/promise-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js +110 -0
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/range-utils.js +115 -0
- package/cjs/packages/vuu-utils/src/range-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/react-utils.js +72 -0
- package/cjs/packages/vuu-utils/src/react-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/round-decimal.js +131 -0
- package/cjs/packages/vuu-utils/src/round-decimal.js.map +1 -0
- package/cjs/packages/vuu-utils/src/row-utils.js +59 -0
- package/cjs/packages/vuu-utils/src/row-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/selection-utils.js +34 -0
- package/cjs/packages/vuu-utils/src/selection-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/shell-layout-types.js +13 -0
- package/cjs/packages/vuu-utils/src/shell-layout-types.js.map +1 -0
- package/cjs/packages/vuu-utils/src/sort-utils.js +78 -0
- package/cjs/packages/vuu-utils/src/sort-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/table-schema-utils.js +13 -0
- package/cjs/packages/vuu-utils/src/table-schema-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/text-utils.js +21 -0
- package/cjs/packages/vuu-utils/src/text-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/theme-utils.js +36 -0
- package/cjs/packages/vuu-utils/src/theme-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/tree-utils.js +114 -0
- package/cjs/packages/vuu-utils/src/tree-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/ts-utils.js +12 -0
- package/cjs/packages/vuu-utils/src/ts-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/typeahead-utils.js +6 -0
- package/cjs/packages/vuu-utils/src/typeahead-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/url-utils.js +21 -0
- package/cjs/packages/vuu-utils/src/url-utils.js.map +1 -0
- package/cjs/packages/vuu-utils/src/useId.js +9 -0
- package/cjs/packages/vuu-utils/src/useId.js.map +1 -0
- package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +17 -0
- package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -0
- package/cjs/packages/vuu-utils/src/useResizeObserver.js +134 -0
- package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +1 -0
- package/cjs/packages/vuu-utils/src/useStateRef.js +23 -0
- package/cjs/packages/vuu-utils/src/useStateRef.js.map +1 -0
- package/esm/node_modules/@dnd-kit/abstract/index.js +1472 -0
- package/esm/node_modules/@dnd-kit/abstract/index.js.map +1 -0
- package/esm/node_modules/@dnd-kit/abstract/modifiers.js +82 -0
- package/esm/node_modules/@dnd-kit/abstract/modifiers.js.map +1 -0
- package/esm/node_modules/@dnd-kit/collision/dist/index.js +86 -0
- package/esm/node_modules/@dnd-kit/collision/dist/index.js.map +1 -0
- package/esm/node_modules/@dnd-kit/dom/index.js +1977 -0
- package/esm/node_modules/@dnd-kit/dom/index.js.map +1 -0
- package/esm/node_modules/@dnd-kit/dom/sortable.js +822 -0
- package/esm/node_modules/@dnd-kit/dom/sortable.js.map +1 -0
- package/esm/node_modules/@dnd-kit/dom/utilities.js +1344 -0
- package/esm/node_modules/@dnd-kit/dom/utilities.js.map +1 -0
- package/esm/node_modules/@dnd-kit/geometry/dist/index.js +303 -0
- package/esm/node_modules/@dnd-kit/geometry/dist/index.js.map +1 -0
- package/esm/node_modules/@dnd-kit/react/hooks.js +126 -0
- package/esm/node_modules/@dnd-kit/react/hooks.js.map +1 -0
- package/esm/node_modules/@dnd-kit/react/index.js +392 -0
- package/esm/node_modules/@dnd-kit/react/index.js.map +1 -0
- package/esm/node_modules/@dnd-kit/react/sortable.js +175 -0
- package/esm/node_modules/@dnd-kit/react/sortable.js.map +1 -0
- package/esm/node_modules/@dnd-kit/react/utilities.js +17 -0
- package/esm/node_modules/@dnd-kit/react/utilities.js.map +1 -0
- package/esm/node_modules/@dnd-kit/state/dist/index.js +266 -0
- package/esm/node_modules/@dnd-kit/state/dist/index.js.map +1 -0
- package/esm/node_modules/@preact/signals-core/dist/signals-core.js +4 -0
- package/esm/node_modules/@preact/signals-core/dist/signals-core.js.map +1 -0
- package/esm/packages/vuu-utils/src/Clock.js +60 -0
- package/esm/packages/vuu-utils/src/Clock.js.map +1 -0
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js +78 -0
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js.map +1 -0
- package/esm/packages/vuu-utils/src/ScaledDecimal.js +37 -0
- package/esm/packages/vuu-utils/src/ScaledDecimal.js.map +1 -0
- package/esm/packages/vuu-utils/src/ShellContext.js +10 -0
- package/esm/packages/vuu-utils/src/ShellContext.js.map +1 -0
- package/esm/packages/vuu-utils/src/ThemeProvider.js +78 -0
- package/esm/packages/vuu-utils/src/ThemeProvider.js.map +1 -0
- package/esm/packages/vuu-utils/src/array-utils.js +79 -0
- package/esm/packages/vuu-utils/src/array-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/box-utils.js +47 -0
- package/esm/packages/vuu-utils/src/box-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/column-utils.js +978 -0
- package/esm/packages/vuu-utils/src/column-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/common-types.js +13 -0
- package/esm/packages/vuu-utils/src/common-types.js.map +1 -0
- package/esm/packages/vuu-utils/src/component-registry.js +128 -0
- package/esm/packages/vuu-utils/src/component-registry.js.map +1 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataContext.js +18 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js +16 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +29 -0
- package/esm/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -0
- package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +17 -0
- package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -0
- package/esm/packages/vuu-utils/src/cookie-utils.js +19 -0
- package/esm/packages/vuu-utils/src/cookie-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/css-utils.js +7 -0
- package/esm/packages/vuu-utils/src/css-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js +25 -0
- package/esm/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +62 -0
- package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-editing/EditSession.js +310 -0
- package/esm/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-editing/edit-utils.js +34 -0
- package/esm/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js +112 -0
- package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -0
- package/esm/packages/vuu-utils/src/data-utils.js +95 -0
- package/esm/packages/vuu-utils/src/data-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +314 -0
- package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js +8 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-action-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js +38 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js +193 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/date/date-utils.js +121 -0
- package/esm/packages/vuu-utils/src/date/date-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/date/dateTimePattern.js +22 -0
- package/esm/packages/vuu-utils/src/date/dateTimePattern.js.map +1 -0
- package/esm/packages/vuu-utils/src/date/formatter.js +79 -0
- package/esm/packages/vuu-utils/src/date/formatter.js.map +1 -0
- package/esm/packages/vuu-utils/src/date/types.js +26 -0
- package/esm/packages/vuu-utils/src/date/types.js.map +1 -0
- package/esm/packages/vuu-utils/src/debug-utils.js +32 -0
- package/esm/packages/vuu-utils/src/debug-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/event-emitter.js +111 -0
- package/esm/packages/vuu-utils/src/event-emitter.js.map +1 -0
- package/esm/packages/vuu-utils/src/feature-utils.js +125 -0
- package/esm/packages/vuu-utils/src/feature-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/filters/filter-utils.js +159 -0
- package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js +65 -0
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -0
- package/esm/packages/vuu-utils/src/form-utils.js +116 -0
- package/esm/packages/vuu-utils/src/form-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/formatting-utils.js +109 -0
- package/esm/packages/vuu-utils/src/formatting-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/getUniqueId.js +4 -0
- package/esm/packages/vuu-utils/src/getUniqueId.js.map +1 -0
- package/esm/packages/vuu-utils/src/group-utils.js +23 -0
- package/esm/packages/vuu-utils/src/group-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/html-utils.js +145 -0
- package/esm/packages/vuu-utils/src/html-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/index.js +77 -0
- package/esm/packages/vuu-utils/src/index.js.map +1 -0
- package/esm/packages/vuu-utils/src/input-utils.js +7 -0
- package/esm/packages/vuu-utils/src/input-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/invariant.js +11 -0
- package/esm/packages/vuu-utils/src/invariant.js.map +1 -0
- package/esm/packages/vuu-utils/src/itemToString.js +21 -0
- package/esm/packages/vuu-utils/src/itemToString.js.map +1 -0
- package/esm/packages/vuu-utils/src/json-utils.js +103 -0
- package/esm/packages/vuu-utils/src/json-utils.js.map +1 -0
- package/{src → esm/packages/vuu-utils/src}/keyboard-utils.js +3 -1
- package/esm/packages/vuu-utils/src/keyboard-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/keyset.js +70 -0
- package/esm/packages/vuu-utils/src/keyset.js.map +1 -0
- package/esm/packages/vuu-utils/src/list-utils.js +9 -0
- package/esm/packages/vuu-utils/src/list-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/local-storage-utils.js +30 -0
- package/esm/packages/vuu-utils/src/local-storage-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/logging-utils.js +61 -0
- package/esm/packages/vuu-utils/src/logging-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/module-utils.js +4 -0
- package/esm/packages/vuu-utils/src/module-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/nanoid/index.js +20 -0
- package/esm/packages/vuu-utils/src/nanoid/index.js.map +1 -0
- package/esm/packages/vuu-utils/src/perf-utils.js +32 -0
- package/esm/packages/vuu-utils/src/perf-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/promise-utils.js +40 -0
- package/esm/packages/vuu-utils/src/promise-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/protocol-message-utils.js +78 -0
- package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/range-utils.js +108 -0
- package/esm/packages/vuu-utils/src/range-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/react-utils.js +66 -0
- package/esm/packages/vuu-utils/src/react-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/round-decimal.js +127 -0
- package/esm/packages/vuu-utils/src/round-decimal.js.map +1 -0
- package/esm/packages/vuu-utils/src/row-utils.js +54 -0
- package/esm/packages/vuu-utils/src/row-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/selection-utils.js +31 -0
- package/esm/packages/vuu-utils/src/selection-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/shell-layout-types.js +11 -0
- package/esm/packages/vuu-utils/src/shell-layout-types.js.map +1 -0
- package/esm/packages/vuu-utils/src/sort-utils.js +73 -0
- package/esm/packages/vuu-utils/src/sort-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/table-schema-utils.js +11 -0
- package/esm/packages/vuu-utils/src/table-schema-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/text-utils.js +18 -0
- package/esm/packages/vuu-utils/src/text-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/theme-utils.js +34 -0
- package/esm/packages/vuu-utils/src/theme-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/tree-utils.js +108 -0
- package/esm/packages/vuu-utils/src/tree-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/ts-utils.js +8 -0
- package/esm/packages/vuu-utils/src/ts-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/typeahead-utils.js +4 -0
- package/esm/packages/vuu-utils/src/typeahead-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/url-utils.js +18 -0
- package/esm/packages/vuu-utils/src/url-utils.js.map +1 -0
- package/esm/packages/vuu-utils/src/useId.js +7 -0
- package/esm/packages/vuu-utils/src/useId.js.map +1 -0
- package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +15 -0
- package/esm/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -0
- package/esm/packages/vuu-utils/src/useResizeObserver.js +130 -0
- package/esm/packages/vuu-utils/src/useResizeObserver.js.map +1 -0
- package/esm/packages/vuu-utils/src/useStateRef.js +21 -0
- package/esm/packages/vuu-utils/src/useStateRef.js.map +1 -0
- package/package.json +14 -11
- package/types/ThemeProvider.d.ts +4 -4
- package/types/column-utils.d.ts +5 -4
- package/types/data-editing/EditButtons.d.ts +8 -2
- package/types/data-editing/EditSession.d.ts +16 -4
- package/types/data-editing/useEditableTable.d.ts +11 -5
- package/types/data-utils.d.ts +2 -1
- package/types/date/date-utils.d.ts +8 -8
- package/types/feature-utils.d.ts +1 -1
- package/types/filters/filter-utils.d.ts +15 -15
- package/types/formatting-utils.d.ts +1 -1
- package/types/index.d.ts +1 -1
- package/types/protocol-message-utils.d.ts +4 -1
- package/src/Clock.js +0 -43
- package/src/PageVisibilityObserver.js +0 -42
- package/src/ScaledDecimal.js +0 -32
- package/src/ShellContext.js +0 -5
- package/src/ThemeProvider.js +0 -56
- package/src/array-utils.js +0 -51
- package/src/box-utils.js +0 -51
- package/src/broadcast-channel.js +0 -0
- package/src/column-utils.js +0 -790
- package/src/common-types.js +0 -11
- package/src/component-registry.js +0 -83
- package/src/context-definitions/DataContext.js +0 -15
- package/src/context-definitions/DataProvider.js +0 -13
- package/src/context-definitions/DataSourceProvider.js +0 -18
- package/src/context-definitions/WorkspaceContext.js +0 -14
- package/src/cookie-utils.js +0 -15
- package/src/css-utils.js +0 -5
- package/src/data-editing/DataEditingProvider.js +0 -13
- package/src/data-editing/EditButtons.js +0 -32
- package/src/data-editing/EditModeProvider.js +0 -18
- package/src/data-editing/EditSession.js +0 -149
- package/src/data-editing/edit-utils.js +0 -37
- package/src/data-editing/useEditableTable.js +0 -76
- package/src/data-utils.js +0 -55
- package/src/datasource/BaseDataSource.js +0 -233
- package/src/datasource/datasource-action-utils.js +0 -6
- package/src/datasource/datasource-filter-utils.js +0 -27
- package/src/datasource/datasource-utils.js +0 -148
- package/src/date/date-utils.js +0 -80
- package/src/date/dateTimePattern.js +0 -17
- package/src/date/formatter.js +0 -101
- package/src/date/index.js +0 -4
- package/src/date/types.js +0 -27
- package/src/debug-utils.js +0 -25
- package/src/event-emitter.js +0 -78
- package/src/feature-utils.js +0 -86
- package/src/filters/filter-utils.js +0 -136
- package/src/filters/filterAsQuery.js +0 -70
- package/src/filters/index.js +0 -2
- package/src/form-utils.js +0 -69
- package/src/formatting-utils.js +0 -42
- package/src/getUniqueId.js +0 -2
- package/src/group-utils.js +0 -16
- package/src/html-utils.js +0 -108
- package/src/index.js +0 -77
- package/src/input-utils.js +0 -3
- package/src/invariant.js +0 -9
- package/src/itemToString.js +0 -9
- package/src/json-types.js +0 -0
- package/src/json-utils.js +0 -108
- package/src/keyset.js +0 -57
- package/src/layout-types.js +0 -0
- package/src/list-utils.js +0 -5
- package/src/local-storage-utils.js +0 -23
- package/src/logging-utils.js +0 -52
- package/src/module-utils.js +0 -2
- package/src/nanoid/index.js +0 -13
- package/src/perf-utils.js +0 -28
- package/src/promise-utils.js +0 -26
- package/src/protocol-message-utils.js +0 -68
- package/src/range-utils.js +0 -109
- package/src/react-utils.js +0 -64
- package/src/round-decimal.js +0 -83
- package/src/row-utils.js +0 -43
- package/src/selection-utils.js +0 -25
- package/src/shell-layout-types.js +0 -9
- package/src/sort-utils.js +0 -75
- package/src/table-schema-utils.js +0 -11
- package/src/text-utils.js +0 -13
- package/src/theme-utils.js +0 -21
- package/src/tree-types.js +0 -0
- package/src/tree-utils.js +0 -96
- package/src/ts-utils.js +0 -6
- package/src/typeahead-utils.js +0 -4
- package/src/url-utils.js +0 -12
- package/src/useId.js +0 -6
- package/src/useLayoutEffectSkipFirst.js +0 -9
- package/src/useResizeObserver.js +0 -122
- package/src/useStateRef.js +0 -21
- package/src/user-types.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditButtons.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/EditButtons.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport { EditState, EditSession } from \"./EditSession\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport interface EditButtonProps {\n editSession?: EditSession;\n hasSelection?: boolean;\n onCancel?: () => void;\n onDelete?: () => void;\n onAddRows?: () => void;\n onSave: (force?: boolean) => void;\n saveLabel?: string;\n confirmSave?: () => boolean | Promise<boolean>;\n confirmCancel?: () => boolean | Promise<boolean>;\n}\n\nexport const EditButtons = ({\n confirmCancel,\n confirmSave,\n editSession,\n hasSelection = false,\n onAddRows,\n onCancel,\n onDelete,\n onSave,\n saveLabel = \"Save\",\n}: EditButtonProps) => {\n const [editState, setEditState] = useState<EditState>(\"clean\");\n\n const handleSave = useCallback(async () => {\n if (confirmSave) {\n const confirmed = await confirmSave();\n if (!confirmed) return;\n }\n onSave(editState === \"stale\");\n }, [confirmSave, editState, onSave]);\n\n const handleCancel = useCallback(async () => {\n if (confirmCancel) {\n const confirmed = await confirmCancel();\n if (!confirmed) return;\n }\n onCancel?.();\n }, [confirmCancel, onCancel]);\n\n useEffect(() => {\n if (editSession) {\n editSession.on(\"editState\", setEditState);\n return () => editSession.removeListener(\"editState\", setEditState);\n }\n }, [editSession]);\n\n return (\n <>\n {onDelete && (\n <Button\n disabled={!hasSelection}\n onClick={onDelete}\n sentiment=\"negative\"\n >\n Delete\n </Button>\n )}\n {onAddRows && (\n <Button onClick={onAddRows} sentiment=\"neutral\">\n Add Rows\n </Button>\n )}\n <Button\n disabled={editState === \"clean\" || editState === \"invalid\"}\n onClick={handleSave}\n sentiment=\"accented\"\n >\n {editState === \"stale\" ? `${saveLabel} (force)` : saveLabel}\n </Button> \n {onCancel && <Button onClick={handleCancel}>Cancel</Button>}\n </>\n );\n};\n"],"names":[],"mappings":";;;;AAgBO,MAAM,cAAc,CAAC;AAAA,EAC1B,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,KAAA;AAAA,EACf,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAY,GAAA;AACd,CAAuB,KAAA;AACrB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAoB,OAAO,CAAA;AAE7D,EAAM,MAAA,UAAA,GAAa,YAAY,YAAY;AACzC,IAAA,IAAI,WAAa,EAAA;AACf,MAAM,MAAA,SAAA,GAAY,MAAM,WAAY,EAAA;AACpC,MAAA,IAAI,CAAC,SAAW,EAAA;AAAA;AAElB,IAAA,MAAA,CAAO,cAAc,OAAO,CAAA;AAAA,GAC3B,EAAA,CAAC,WAAa,EAAA,SAAA,EAAW,MAAM,CAAC,CAAA;AAEnC,EAAM,MAAA,YAAA,GAAe,YAAY,YAAY;AAC3C,IAAA,IAAI,aAAe,EAAA;AACjB,MAAM,MAAA,SAAA,GAAY,MAAM,aAAc,EAAA;AACtC,MAAA,IAAI,CAAC,SAAW,EAAA;AAAA;AAElB,IAAW,QAAA,IAAA;AAAA,GACV,EAAA,CAAC,aAAe,EAAA,QAAQ,CAAC,CAAA;AAE5B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAa,EAAA;AACf,MAAY,WAAA,CAAA,EAAA,CAAG,aAAa,YAAY,CAAA;AACxC,MAAA,OAAO,MAAM,WAAA,CAAY,cAAe,CAAA,WAAA,EAAa,YAAY,CAAA;AAAA;AACnE,GACF,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEK,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IACC,QAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,UAAU,CAAC,YAAA;AAAA,QACX,OAAS,EAAA,QAAA;AAAA,QACT,SAAU,EAAA,UAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,IAED,6BACE,GAAA,CAAA,MAAA,EAAA,EAAO,SAAS,SAAW,EAAA,SAAA,EAAU,WAAU,QAEhD,EAAA,UAAA,EAAA,CAAA;AAAA,oBAEF,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,SAAc,KAAA,OAAA,IAAW,SAAc,KAAA,SAAA;AAAA,QACjD,OAAS,EAAA,UAAA;AAAA,QACT,SAAU,EAAA,UAAA;AAAA,QAET,QAAc,EAAA,SAAA,KAAA,OAAA,GAAU,CAAG,EAAA,SAAS,CAAa,QAAA,CAAA,GAAA;AAAA;AAAA,KACpD;AAAA,IACC,QAAY,oBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,OAAA,EAAS,cAAc,QAAM,EAAA,QAAA,EAAA;AAAA,GACpD,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { EventEmitter } from '../event-emitter.js';
|
|
2
|
+
import { isRpcError } from '../protocol-message-utils.js';
|
|
3
|
+
|
|
4
|
+
var __typeError = (msg) => {
|
|
5
|
+
throw TypeError(msg);
|
|
6
|
+
};
|
|
7
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
11
|
+
var _rowEdits, _deletedRows, _editCount, _deleteCount, _addCount, _invalidCount, _deleteMode, _sourceTableDataSource, _sessionDataSource, _inEditMode, _endEditModePending;
|
|
12
|
+
const isCopyOption = (mode) => mode === "All" || mode === "Empty" || mode === "Selected";
|
|
13
|
+
class StaleUpdateError extends Error {
|
|
14
|
+
}
|
|
15
|
+
class EditSession extends EventEmitter {
|
|
16
|
+
constructor(dataSource, deleteMode = "soft") {
|
|
17
|
+
super();
|
|
18
|
+
/**
|
|
19
|
+
* Row key => row edits
|
|
20
|
+
*/
|
|
21
|
+
__privateAdd(this, _rowEdits, /* @__PURE__ */ new Map());
|
|
22
|
+
__privateAdd(this, _deletedRows, /* @__PURE__ */ new Set());
|
|
23
|
+
__privateAdd(this, _editCount, 0);
|
|
24
|
+
__privateAdd(this, _deleteCount, 0);
|
|
25
|
+
__privateAdd(this, _addCount, 0);
|
|
26
|
+
__privateAdd(this, _invalidCount, 0);
|
|
27
|
+
__privateAdd(this, _deleteMode);
|
|
28
|
+
__privateAdd(this, _sourceTableDataSource);
|
|
29
|
+
__privateAdd(this, _sessionDataSource);
|
|
30
|
+
__privateAdd(this, _inEditMode, false);
|
|
31
|
+
__privateAdd(this, _endEditModePending, false);
|
|
32
|
+
__privateSet(this, _sourceTableDataSource, dataSource);
|
|
33
|
+
__privateSet(this, _deleteMode, deleteMode);
|
|
34
|
+
}
|
|
35
|
+
get editCount() {
|
|
36
|
+
return __privateGet(this, _editCount);
|
|
37
|
+
}
|
|
38
|
+
set editCount(val) {
|
|
39
|
+
if (val !== __privateGet(this, _editCount)) {
|
|
40
|
+
const oldCount = __privateGet(this, _editCount);
|
|
41
|
+
__privateSet(this, _editCount, val);
|
|
42
|
+
if (val === 0 && __privateGet(this, _deleteCount) === 0 && __privateGet(this, _addCount) === 0) {
|
|
43
|
+
this.emit("editState", "clean");
|
|
44
|
+
} else if (oldCount === 0) {
|
|
45
|
+
this.emit("editState", "dirty");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
get invalidCount() {
|
|
50
|
+
return __privateGet(this, _invalidCount);
|
|
51
|
+
}
|
|
52
|
+
set invalidCount(val) {
|
|
53
|
+
if (val !== __privateGet(this, _invalidCount)) {
|
|
54
|
+
const oldCount = __privateGet(this, _invalidCount);
|
|
55
|
+
__privateSet(this, _invalidCount, val);
|
|
56
|
+
if (val === 0) {
|
|
57
|
+
this.emit("editState", __privateGet(this, _editCount) === 0 ? "clean" : "dirty");
|
|
58
|
+
} else if (oldCount === 0) {
|
|
59
|
+
this.emit("editState", "invalid");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
get deleteCount() {
|
|
64
|
+
return __privateGet(this, _deleteCount);
|
|
65
|
+
}
|
|
66
|
+
set deleteCount(val) {
|
|
67
|
+
if (val !== __privateGet(this, _deleteCount)) {
|
|
68
|
+
const oldCount = __privateGet(this, _deleteCount);
|
|
69
|
+
__privateSet(this, _deleteCount, val);
|
|
70
|
+
if (val === 0 && __privateGet(this, _editCount) === 0 && __privateGet(this, _addCount) === 0) {
|
|
71
|
+
this.emit("editState", "clean");
|
|
72
|
+
} else if (oldCount === 0) {
|
|
73
|
+
this.emit("editState", "dirty");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
get addCount() {
|
|
78
|
+
return __privateGet(this, _addCount);
|
|
79
|
+
}
|
|
80
|
+
set addCount(val) {
|
|
81
|
+
if (val !== __privateGet(this, _addCount)) {
|
|
82
|
+
const oldCount = __privateGet(this, _addCount);
|
|
83
|
+
__privateSet(this, _addCount, val);
|
|
84
|
+
if (val === 0 && __privateGet(this, _editCount) === 0 && __privateGet(this, _deleteCount) === 0) {
|
|
85
|
+
this.emit("editState", "clean");
|
|
86
|
+
} else if (oldCount === 0) {
|
|
87
|
+
this.emit("editState", "dirty");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async deleteSelectedRows() {
|
|
92
|
+
const response = await this.dataSource?.deleteSelectedRows?.(__privateGet(this, _deleteMode));
|
|
93
|
+
if (isRpcError(response)) return;
|
|
94
|
+
const deletedKeys = response?.data?.deletedKeys;
|
|
95
|
+
if (deletedKeys && deletedKeys.length > 0) {
|
|
96
|
+
for (const key of deletedKeys) {
|
|
97
|
+
__privateGet(this, _deletedRows).add(key);
|
|
98
|
+
}
|
|
99
|
+
this.deleteCount = __privateGet(this, _deleteCount) + deletedKeys.length;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
addRows(count = 15, rowData = {}) {
|
|
103
|
+
for (let i = 0; i < count; i++) {
|
|
104
|
+
__privateGet(this, _sourceTableDataSource)?.addRow?.(rowData);
|
|
105
|
+
}
|
|
106
|
+
this.addCount = __privateGet(this, _addCount) + count;
|
|
107
|
+
}
|
|
108
|
+
restoreRows(keys) {
|
|
109
|
+
for (const key of keys) {
|
|
110
|
+
if (__privateGet(this, _deletedRows).has(key)) {
|
|
111
|
+
__privateGet(this, _deletedRows).delete(key);
|
|
112
|
+
this.deleteCount = __privateGet(this, _deleteCount) - 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
hasRowChanges(key) {
|
|
117
|
+
return __privateGet(this, _rowEdits).has(key) || __privateGet(this, _deletedRows).has(key);
|
|
118
|
+
}
|
|
119
|
+
async undoRowChange(key) {
|
|
120
|
+
if (!__privateGet(this, _inEditMode)) return;
|
|
121
|
+
const rowEdits = __privateGet(this, _rowEdits).get(key);
|
|
122
|
+
const wasDeleted = __privateGet(this, _deletedRows).has(key);
|
|
123
|
+
if (!rowEdits?.cellEdits.size && !wasDeleted) return;
|
|
124
|
+
__privateGet(this, _rowEdits).delete(key);
|
|
125
|
+
if (wasDeleted) __privateGet(this, _deletedRows).delete(key);
|
|
126
|
+
const response = await this.dataSource?.undoRowChange?.(key);
|
|
127
|
+
if (isRpcError(response)) {
|
|
128
|
+
if (rowEdits) __privateGet(this, _rowEdits).set(key, rowEdits);
|
|
129
|
+
if (wasDeleted) __privateGet(this, _deletedRows).add(key);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (rowEdits) {
|
|
133
|
+
let validCount = 0;
|
|
134
|
+
let invalidCount = 0;
|
|
135
|
+
for (const [, cellEdit] of rowEdits.cellEdits) {
|
|
136
|
+
if (cellEdit.isValid === false) {
|
|
137
|
+
invalidCount++;
|
|
138
|
+
} else {
|
|
139
|
+
validCount++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
this.editCount = __privateGet(this, _editCount) - validCount;
|
|
143
|
+
this.invalidCount = __privateGet(this, _invalidCount) - invalidCount;
|
|
144
|
+
}
|
|
145
|
+
if (wasDeleted) {
|
|
146
|
+
this.deleteCount = __privateGet(this, _deleteCount) - 1;
|
|
147
|
+
}
|
|
148
|
+
const wasInsertedRow = response?.data?.wasInsertedRow === true;
|
|
149
|
+
if (wasInsertedRow) {
|
|
150
|
+
this.addCount = __privateGet(this, _addCount) - 1;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
clear() {
|
|
154
|
+
__privateGet(this, _rowEdits).clear();
|
|
155
|
+
__privateGet(this, _deletedRows).clear();
|
|
156
|
+
__privateSet(this, _editCount, 0);
|
|
157
|
+
__privateSet(this, _deleteCount, 0);
|
|
158
|
+
__privateSet(this, _addCount, 0);
|
|
159
|
+
__privateSet(this, _invalidCount, 0);
|
|
160
|
+
__privateSet(this, _inEditMode, false);
|
|
161
|
+
__privateSet(this, _endEditModePending, false);
|
|
162
|
+
}
|
|
163
|
+
async begin(mode) {
|
|
164
|
+
try {
|
|
165
|
+
__privateSet(this, _inEditMode, true);
|
|
166
|
+
const sessionDataSource = isCopyOption(mode) ? await __privateGet(this, _sourceTableDataSource)?.createSessionDataSource?.(mode) : await __privateGet(this, _sourceTableDataSource)?.beginEditSession?.(mode);
|
|
167
|
+
__privateSet(this, _sessionDataSource, sessionDataSource);
|
|
168
|
+
return sessionDataSource;
|
|
169
|
+
} catch (e) {
|
|
170
|
+
__privateSet(this, _inEditMode, false);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
get dataSource() {
|
|
174
|
+
return __privateGet(this, _sessionDataSource) ?? __privateGet(this, _sourceTableDataSource);
|
|
175
|
+
}
|
|
176
|
+
async end(saveChanges = false, force = false) {
|
|
177
|
+
try {
|
|
178
|
+
if (__privateGet(this, _inEditMode)) {
|
|
179
|
+
__privateSet(this, _endEditModePending, true);
|
|
180
|
+
await this.dataSource?.endEditSession?.(saveChanges, force);
|
|
181
|
+
this.clear();
|
|
182
|
+
}
|
|
183
|
+
} catch (e) {
|
|
184
|
+
__privateSet(this, _endEditModePending, false);
|
|
185
|
+
if (e instanceof StaleUpdateError) {
|
|
186
|
+
this.emit("editState", "stale");
|
|
187
|
+
} else {
|
|
188
|
+
console.error(`[EditSession] ${e.message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
get inEditMode() {
|
|
193
|
+
return __privateGet(this, _inEditMode) === true && __privateGet(this, _endEditModePending) === false;
|
|
194
|
+
}
|
|
195
|
+
get editState() {
|
|
196
|
+
return this.editCount === 0 && __privateGet(this, _deleteCount) === 0 && __privateGet(this, _addCount) === 0 ? "clean" : "dirty";
|
|
197
|
+
}
|
|
198
|
+
getOrCreateRowEdits(key) {
|
|
199
|
+
const rowEditDetails = __privateGet(this, _rowEdits).get(key);
|
|
200
|
+
if (rowEditDetails) {
|
|
201
|
+
return rowEditDetails;
|
|
202
|
+
} else {
|
|
203
|
+
const rowEditDetails2 = {
|
|
204
|
+
cellEdits: /* @__PURE__ */ new Map()
|
|
205
|
+
};
|
|
206
|
+
__privateGet(this, _rowEdits).set(key, rowEditDetails2);
|
|
207
|
+
return rowEditDetails2;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
storeCellEdit(cellEdits, column, originalValue, editedValue, isValid) {
|
|
211
|
+
const cellEdit = cellEdits.get(column);
|
|
212
|
+
if (cellEdit) {
|
|
213
|
+
if (cellEdit.originalValue === editedValue) {
|
|
214
|
+
cellEdits.delete(column);
|
|
215
|
+
cellEdit.isDeleted = true;
|
|
216
|
+
if (cellEdit.isValid) {
|
|
217
|
+
this.editCount -= 1;
|
|
218
|
+
} else {
|
|
219
|
+
this.invalidCount -= 1;
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
if (isValid && cellEdit.isValid === false) {
|
|
223
|
+
cellEdit.isValid = true;
|
|
224
|
+
cellEdit.editedValue = editedValue;
|
|
225
|
+
__privateSet(this, _invalidCount, __privateGet(this, _invalidCount) - 1);
|
|
226
|
+
this.editCount += 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return cellEdit;
|
|
230
|
+
} else {
|
|
231
|
+
const cellEdit2 = {
|
|
232
|
+
originalValue,
|
|
233
|
+
editedValue,
|
|
234
|
+
isValid
|
|
235
|
+
};
|
|
236
|
+
cellEdits.set(column, cellEdit2);
|
|
237
|
+
if (isValid) {
|
|
238
|
+
this.editCount += 1;
|
|
239
|
+
}
|
|
240
|
+
return cellEdit2;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async commit(key, columnName, originalValue, typedValue, isValid) {
|
|
244
|
+
if (!__privateGet(this, _inEditMode)) {
|
|
245
|
+
throw new Error("No edit session in progress");
|
|
246
|
+
}
|
|
247
|
+
const rowEditDetails = this.getOrCreateRowEdits(key);
|
|
248
|
+
if (isValid) {
|
|
249
|
+
const { cellEdits } = rowEditDetails;
|
|
250
|
+
const cellEdit = this.storeCellEdit(
|
|
251
|
+
cellEdits,
|
|
252
|
+
columnName,
|
|
253
|
+
originalValue,
|
|
254
|
+
typedValue,
|
|
255
|
+
isValid
|
|
256
|
+
);
|
|
257
|
+
if (cellEdit.isDeleted) {
|
|
258
|
+
if (rowEditDetails.cellEdits.size === 0) {
|
|
259
|
+
__privateGet(this, _rowEdits).delete(key);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (this.dataSource?.editCell) {
|
|
263
|
+
const response = await this.dataSource.editCell(
|
|
264
|
+
key,
|
|
265
|
+
columnName,
|
|
266
|
+
typedValue
|
|
267
|
+
);
|
|
268
|
+
if (isRpcError(response)) {
|
|
269
|
+
cellEdit.isValid = false;
|
|
270
|
+
this.invalidCount += 1;
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
editedDuringCurrentSession: cellEdit.originalValue !== typedValue,
|
|
274
|
+
...response
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
const { cellEdits } = rowEditDetails;
|
|
279
|
+
let cellEdit = cellEdits.get(columnName);
|
|
280
|
+
if (cellEdit && cellEdit.isValid !== false) {
|
|
281
|
+
cellEdit.isValid = false;
|
|
282
|
+
this.invalidCount += 1;
|
|
283
|
+
} else if (cellEdit === void 0) {
|
|
284
|
+
cellEdit = this.storeCellEdit(
|
|
285
|
+
cellEdits,
|
|
286
|
+
columnName,
|
|
287
|
+
originalValue,
|
|
288
|
+
typedValue,
|
|
289
|
+
isValid
|
|
290
|
+
);
|
|
291
|
+
this.invalidCount += 1;
|
|
292
|
+
}
|
|
293
|
+
return { editedDuringCurrentSession: false };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
_rowEdits = new WeakMap();
|
|
298
|
+
_deletedRows = new WeakMap();
|
|
299
|
+
_editCount = new WeakMap();
|
|
300
|
+
_deleteCount = new WeakMap();
|
|
301
|
+
_addCount = new WeakMap();
|
|
302
|
+
_invalidCount = new WeakMap();
|
|
303
|
+
_deleteMode = new WeakMap();
|
|
304
|
+
_sourceTableDataSource = new WeakMap();
|
|
305
|
+
_sessionDataSource = new WeakMap();
|
|
306
|
+
_inEditMode = new WeakMap();
|
|
307
|
+
_endEditModePending = new WeakMap();
|
|
308
|
+
|
|
309
|
+
export { EditSession, StaleUpdateError, isCopyOption };
|
|
310
|
+
//# sourceMappingURL=EditSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditSession.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/EditSession.tsx"],"sourcesContent":["import { CopyOption, DataSource, DeleteRowMode, DeleteSelectedRowsResult, EditApi, EditSessionMode, UndoRowChangeResult } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { isRpcError } from \"../protocol-message-utils\";\n\nexport const isCopyOption = (mode?: EditSessionMode | CopyOption): mode is CopyOption =>\n mode === \"All\" || mode === \"Empty\" || mode === \"Selected\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\n\nexport class EditError extends Error {}\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid?: boolean;\n isDeleted?: boolean;\n};\n\n// TODO can add more when when we know what the server implementation of error columns will look like\nexport class StaleUpdateError extends Error {}\n\ntype RowEditDetails = {\n /**\n * Column name => cell edit details\n */\n cellEdits: Map<string, CellEdit>;\n};\n\ntype EditSessionEvents = {\n editState: (editState: EditState) => void;\n};\n\nexport class EditSession extends EventEmitter<EditSessionEvents> {\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #deletedRows = new Set<string>();\n #editCount = 0;\n #deleteCount = 0;\n #addCount = 0;\n #invalidCount = 0;\n #deleteMode: DeleteRowMode;\n #sourceTableDataSource?: EditApi;\n #sessionDataSource?: EditApi;\n #inEditMode = false;\n #endEditModePending = false;\n\n constructor(dataSource: EditApi, deleteMode: DeleteRowMode = \"soft\") {\n super();\n this.#sourceTableDataSource = dataSource;\n this.#deleteMode = deleteMode;\n }\n\n get editCount() {\n return this.#editCount;\n }\n\n set editCount(val: number) {\n if (val !== this.#editCount) {\n const oldCount = this.#editCount;\n this.#editCount = val;\n if (val === 0 && this.#deleteCount === 0 && this.#addCount === 0) {\n this.emit(\"editState\", \"clean\");\n } else if (oldCount === 0) {\n this.emit(\"editState\", \"dirty\");\n }\n }\n }\n\n get invalidCount() {\n return this.#invalidCount;\n }\n\n set invalidCount(val: number) {\n if (val !== this.#invalidCount) {\n const oldCount = this.#invalidCount;\n this.#invalidCount = val;\n if (val === 0) {\n this.emit(\"editState\", this.#editCount === 0 ? \"clean\" : \"dirty\");\n } else if (oldCount === 0) {\n this.emit(\"editState\", \"invalid\");\n }\n }\n }\n\n get deleteCount() {\n return this.#deleteCount;\n }\n\n set deleteCount(val: number) {\n if (val !== this.#deleteCount) {\n const oldCount = this.#deleteCount;\n this.#deleteCount = val;\n if (val === 0 && this.#editCount === 0 && this.#addCount === 0) {\n this.emit(\"editState\", \"clean\");\n } else if (oldCount === 0) {\n this.emit(\"editState\", \"dirty\");\n }\n }\n }\n\n get addCount() {\n return this.#addCount;\n }\n\n set addCount(val: number) {\n if (val !== this.#addCount) {\n const oldCount = this.#addCount;\n this.#addCount = val;\n if (val === 0 && this.#editCount === 0 && this.#deleteCount === 0) {\n this.emit(\"editState\", \"clean\");\n } else if (oldCount === 0) {\n this.emit(\"editState\", \"dirty\");\n }\n }\n }\n\n async deleteSelectedRows(): Promise<void> {\n const response = await this.dataSource?.deleteSelectedRows?.(this.#deleteMode);\n if (isRpcError(response)) return;\n const deletedKeys = (response?.data as DeleteSelectedRowsResult | undefined)\n ?.deletedKeys;\n if (deletedKeys && deletedKeys.length > 0) {\n for (const key of deletedKeys) {\n this.#deletedRows.add(key);\n }\n this.deleteCount = this.#deleteCount + deletedKeys.length;\n }\n }\n\n addRows(\n count = 15,\n rowData: Record<string, VuuRowDataItemType> = {},\n ) {\n for (let i = 0; i < count; i++) {\n this.#sourceTableDataSource?.addRow?.(rowData);\n }\n this.addCount = this.#addCount + count;\n }\n\n restoreRows(keys: string[]) {\n for (const key of keys) {\n if (this.#deletedRows.has(key)) {\n this.#deletedRows.delete(key);\n this.deleteCount = this.#deleteCount - 1;\n }\n }\n }\n\n hasRowChanges(key: string): boolean {\n return this.#rowEdits.has(key) || this.#deletedRows.has(key);\n }\n\n async undoRowChange(key: string): Promise<void> {\n if (!this.#inEditMode) return;\n\n const rowEdits = this.#rowEdits.get(key);\n const wasDeleted = this.#deletedRows.has(key);\n\n if (!rowEdits?.cellEdits.size && !wasDeleted) return;\n\n this.#rowEdits.delete(key);\n if (wasDeleted) this.#deletedRows.delete(key);\n\n const response = await this.dataSource?.undoRowChange?.(key);\n\n if (isRpcError(response)) {\n // Restore on failure\n if (rowEdits) this.#rowEdits.set(key, rowEdits);\n if (wasDeleted) this.#deletedRows.add(key);\n return;\n }\n\n // Update counters after confirmed success\n if (rowEdits) {\n let validCount = 0;\n let invalidCount = 0;\n for (const [, cellEdit] of rowEdits.cellEdits) {\n if (cellEdit.isValid === false) {\n invalidCount++;\n } else {\n validCount++;\n }\n }\n this.editCount = this.#editCount - validCount;\n this.invalidCount = this.#invalidCount - invalidCount;\n }\n if (wasDeleted) {\n this.deleteCount = this.#deleteCount - 1;\n }\n \n // If the server deleted a newly inserted row, decrement addCount\n const wasInsertedRow =\n (response?.data as UndoRowChangeResult | undefined)?.wasInsertedRow === true;\n if (wasInsertedRow) {\n this.addCount = this.#addCount - 1;\n }\n }\n\n clear() {\n this.#rowEdits.clear();\n this.#deletedRows.clear();\n this.#editCount = 0;\n this.#deleteCount = 0;\n this.#addCount = 0;\n this.#invalidCount = 0;\n this.#inEditMode = false;\n this.#endEditModePending = false;\n }\n\n /** @deprecated Pass a `CopyOption` (\"All\" | \"Empty\" | \"Selected\") to use `createSessionDataSource` instead. Long-form `EditSessionMode` values will be removed in a future release. */\n async begin(mode: EditSessionMode): Promise<DataSource | undefined>;\n async begin(mode?: CopyOption): Promise<DataSource | undefined>;\n async begin(mode?: EditSessionMode | CopyOption): Promise<DataSource | undefined> {\n try {\n this.#inEditMode = true;\n const sessionDataSource = isCopyOption(mode)\n ? await this.#sourceTableDataSource?.createSessionDataSource?.(mode)\n : await this.#sourceTableDataSource?.beginEditSession?.(mode);\n\n this.#sessionDataSource = sessionDataSource;\n return sessionDataSource;\n } catch (e) {\n this.#inEditMode = false;\n }\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n async end(saveChanges = false, force = false) {\n try {\n if (this.#inEditMode) {\n this.#endEditModePending = true;\n await this.dataSource?.endEditSession?.(saveChanges, force);\n this.clear();\n }\n } catch (e) {\n this.#endEditModePending = false;\n if (e instanceof StaleUpdateError) {\n this.emit(\"editState\", \"stale\");\n } else {\n console.error(`[EditSession] ${(e as Error).message}`);\n }\n }\n }\n\n get inEditMode() {\n return this.#inEditMode === true && this.#endEditModePending === false;\n }\n\n get editState(): EditState {\n return this.editCount === 0 && this.#deleteCount === 0 && this.#addCount === 0\n ? \"clean\"\n : \"dirty\";\n }\n\n getOrCreateRowEdits(key: string): RowEditDetails {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n return rowEditDetails;\n } else {\n const rowEditDetails = {\n cellEdits: new Map(),\n };\n this.#rowEdits.set(key, rowEditDetails);\n return rowEditDetails;\n }\n }\n\n storeCellEdit(\n cellEdits: Map<string, CellEdit>,\n column: string,\n originalValue: VuuRowDataItemType,\n editedValue: VuuRowDataItemType,\n isValid: boolean,\n ) {\n const cellEdit = cellEdits.get(column);\n if (cellEdit) {\n if (cellEdit.originalValue === editedValue) {\n cellEdits.delete(column);\n cellEdit.isDeleted = true;\n if (cellEdit.isValid) {\n this.editCount -= 1;\n } else {\n this.invalidCount -= 1;\n }\n } else {\n if (isValid && cellEdit.isValid === false) {\n cellEdit.isValid = true;\n cellEdit.editedValue = editedValue;\n // do not trigger the event, save it for the editCount\n this.#invalidCount -= 1;\n this.editCount += 1;\n }\n }\n return cellEdit;\n } else {\n const cellEdit: CellEdit = {\n originalValue,\n editedValue,\n isValid,\n };\n cellEdits.set(column, cellEdit);\n if (isValid) {\n this.editCount += 1;\n }\n return cellEdit;\n }\n }\n\n async commit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n typedValue: string | number | boolean,\n isValid: boolean,\n ) {\n if (!this.#inEditMode) {\n throw new Error(\"No edit session in progress\");\n }\n const rowEditDetails = this.getOrCreateRowEdits(key);\n\n if (isValid) {\n const { cellEdits } = rowEditDetails;\n\n const cellEdit = this.storeCellEdit(\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\n if (cellEdit.isDeleted) {\n if (rowEditDetails.cellEdits.size === 0) {\n this.#rowEdits.delete(key);\n }\n }\n\n if (this.dataSource?.editCell) {\n const response = await this.dataSource.editCell(\n key,\n columnName,\n typedValue,\n );\n if (isRpcError(response)) {\n cellEdit.isValid = false;\n this.invalidCount += 1;\n }\n\n return {\n editedDuringCurrentSession: cellEdit.originalValue !== typedValue,\n ...response,\n };\n }\n } else {\n const { cellEdits } = rowEditDetails;\n let cellEdit = cellEdits.get(columnName);\n if (cellEdit && cellEdit.isValid !== false) {\n cellEdit.isValid = false;\n this.invalidCount += 1;\n } else if (cellEdit === undefined) {\n cellEdit = this.storeCellEdit(\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n this.invalidCount += 1;\n }\n return { editedDuringCurrentSession: false };\n }\n }\n}\n"],"names":["rowEditDetails","cellEdit"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '../date/date-utils.js';
|
|
3
|
+
import '../date/dateTimePattern.js';
|
|
4
|
+
import { formatDate } from '../date/formatter.js';
|
|
5
|
+
|
|
6
|
+
const isInlineEditingSession = (editSessionMode) => editSessionMode.startsWith("inline");
|
|
7
|
+
const timeFormatter = formatDate({ time: "hh:mm:ss" });
|
|
8
|
+
const getVuuEditMessage = (dataRow, column, originalValue) => {
|
|
9
|
+
const vuuMsg = dataRow.vuuMsg;
|
|
10
|
+
if (typeof vuuMsg === "string" && vuuMsg !== "") {
|
|
11
|
+
const columnMessages = vuuMsg.split(",");
|
|
12
|
+
const msgForCol = columnMessages.find(
|
|
13
|
+
(msg) => msg.startsWith(`${column.name}:`)
|
|
14
|
+
);
|
|
15
|
+
if (msgForCol) {
|
|
16
|
+
const [, value, updatedValue, ts] = msgForCol.split(":");
|
|
17
|
+
const updateTime = timeFormatter(new Date(parseInt(ts)));
|
|
18
|
+
return /* @__PURE__ */ jsxs("span", { children: [
|
|
19
|
+
"Update rejected. Original value ",
|
|
20
|
+
/* @__PURE__ */ jsx("b", { children: originalValue }),
|
|
21
|
+
" could not be updated to ",
|
|
22
|
+
/* @__PURE__ */ jsx("b", { children: value }),
|
|
23
|
+
". It was updated to ",
|
|
24
|
+
/* @__PURE__ */ jsx("b", { children: updatedValue }),
|
|
25
|
+
" at ",
|
|
26
|
+
updateTime,
|
|
27
|
+
"."
|
|
28
|
+
] });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { getVuuEditMessage, isInlineEditingSession };
|
|
34
|
+
//# sourceMappingURL=edit-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-utils.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/edit-utils.tsx"],"sourcesContent":["import { EditSessionMode, InlineEditSessionMode } from \"@vuu-ui/vuu-data-types\";\nimport { DataRow, RuntimeColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { formatDate } from \"../date\";\n\nexport const isInlineEditingSession = (\n editSessionMode: EditSessionMode,\n): editSessionMode is InlineEditSessionMode =>\n editSessionMode.startsWith(\"inline\");\n\nconst timeFormatter = formatDate({ time: \"hh:mm:ss\" });\n\nexport const getVuuEditMessage = (\n dataRow: DataRow,\n column: RuntimeColumnDescriptor,\n originalValue: string,\n) => {\n const vuuMsg = dataRow.vuuMsg as string;\n if (typeof vuuMsg === \"string\" && vuuMsg !== \"\") {\n const columnMessages = vuuMsg.split(\",\");\n const msgForCol = columnMessages.find((msg) =>\n msg.startsWith(`${column.name}:`),\n );\n if (msgForCol) {\n const [, value, updatedValue, ts] = msgForCol.split(\":\");\n const updateTime = timeFormatter(new Date(parseInt(ts as string)));\n return (\n <span>\n {\"Update rejected. Original value \"}\n <b>{originalValue}</b>\n {\" could not be updated to \"}\n <b>{value}</b>\n {\". It was updated to \"}\n <b>{updatedValue}</b>\n {\" at \"}\n {updateTime}\n {\".\"}\n </span>\n );\n }\n }\n};\n"],"names":[],"mappings":";;;;;AAIO,MAAM,sBAAyB,GAAA,CACpC,eAEA,KAAA,eAAA,CAAgB,WAAW,QAAQ;AAErC,MAAM,aAAgB,GAAA,UAAA,CAAW,EAAE,IAAA,EAAM,YAAY,CAAA;AAE9C,MAAM,iBAAoB,GAAA,CAC/B,OACA,EAAA,MAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,OAAQ,CAAA,MAAA;AACvB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,MAAA,KAAW,EAAI,EAAA;AAC/C,IAAM,MAAA,cAAA,GAAiB,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AACvC,IAAA,MAAM,YAAY,cAAe,CAAA,IAAA;AAAA,MAAK,CAAC,GACrC,KAAA,GAAA,CAAI,WAAW,CAAG,EAAA,MAAA,CAAO,IAAI,CAAG,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,GAAG,KAAO,EAAA,YAAA,EAAc,EAAE,CAAI,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACvD,MAAA,MAAM,aAAa,aAAc,CAAA,IAAI,KAAK,QAAS,CAAA,EAAY,CAAC,CAAC,CAAA;AACjE,MAAA,4BACG,MACE,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,kCAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAc,EAAA,aAAA,EAAA,CAAA;AAAA,QACjB,2BAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,QACT,sBAAA;AAAA,wBACD,GAAA,CAAC,OAAG,QAAa,EAAA,YAAA,EAAA,CAAA;AAAA,QAChB,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACH,EAAA,CAAA;AAAA;AAEJ;AAEJ;;;;"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useState, useMemo, useCallback, useEffect } from 'react';
|
|
2
|
+
import { useData } from '../context-definitions/DataProvider.js';
|
|
3
|
+
import { useLayoutEffectSkipFirst } from '../useLayoutEffectSkipFirst.js';
|
|
4
|
+
import { EditSession, isCopyOption } from './EditSession.js';
|
|
5
|
+
|
|
6
|
+
const useEditableTable = ({
|
|
7
|
+
addRowsCount = 15,
|
|
8
|
+
columns,
|
|
9
|
+
dataSource: dataSourceProp,
|
|
10
|
+
deleteMode = "soft",
|
|
11
|
+
editSessionMode = "inline-all-rows",
|
|
12
|
+
isEditMode,
|
|
13
|
+
onCancel,
|
|
14
|
+
onSave,
|
|
15
|
+
table
|
|
16
|
+
}) => {
|
|
17
|
+
const { VuuDataSource } = useData();
|
|
18
|
+
const [sessionDataSource, setSessionDataSource] = useState(void 0);
|
|
19
|
+
const [selectionCount, setSelectionCount] = useState(0);
|
|
20
|
+
useLayoutEffectSkipFirst(() => {
|
|
21
|
+
console.warn(`[useEditableTable] columns and or table changed`);
|
|
22
|
+
}, [columns, table]);
|
|
23
|
+
const dataSource = useMemo(() => {
|
|
24
|
+
if (dataSourceProp) {
|
|
25
|
+
return dataSourceProp;
|
|
26
|
+
} else if (table) {
|
|
27
|
+
return new VuuDataSource({ columns, table });
|
|
28
|
+
} else {
|
|
29
|
+
throw Error(
|
|
30
|
+
`useEditableTable unable to provide DataSource, neither dataSource nor table available as props`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}, [VuuDataSource, columns, dataSourceProp, table]);
|
|
34
|
+
const editSession = useMemo(
|
|
35
|
+
() => new EditSession(dataSource, deleteMode),
|
|
36
|
+
// deleteMode is intentionally excluded — changing it mid-session is not supported
|
|
37
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
+
[dataSource]
|
|
39
|
+
);
|
|
40
|
+
const handleCancel = useCallback(async () => {
|
|
41
|
+
try {
|
|
42
|
+
await editSession.end();
|
|
43
|
+
setSessionDataSource(void 0);
|
|
44
|
+
setSelectionCount(0);
|
|
45
|
+
onCancel();
|
|
46
|
+
} catch (e) {
|
|
47
|
+
}
|
|
48
|
+
}, [editSession, onCancel]);
|
|
49
|
+
const handleSave = useCallback(
|
|
50
|
+
async (force = false) => {
|
|
51
|
+
dataSource.resume?.();
|
|
52
|
+
try {
|
|
53
|
+
await editSession.end(true, force);
|
|
54
|
+
if (editSession.inEditMode === false) {
|
|
55
|
+
setSessionDataSource(void 0);
|
|
56
|
+
setSelectionCount(0);
|
|
57
|
+
onSave();
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.log(`[useEditableTable] handleSave ${e.message}`);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
[dataSource, editSession, onSave]
|
|
64
|
+
);
|
|
65
|
+
const handleDelete = useCallback(async () => {
|
|
66
|
+
await editSession.deleteSelectedRows();
|
|
67
|
+
setSelectionCount(0);
|
|
68
|
+
}, [editSession]);
|
|
69
|
+
const handleAddRows = useCallback(() => {
|
|
70
|
+
editSession.addRows(addRowsCount);
|
|
71
|
+
}, [addRowsCount, editSession]);
|
|
72
|
+
const handleUndoRowChange = useCallback(
|
|
73
|
+
(key) => void editSession.undoRowChange(key),
|
|
74
|
+
[editSession]
|
|
75
|
+
);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
const activeDataSource = sessionDataSource ?? dataSource;
|
|
78
|
+
activeDataSource.on("row-selection", setSelectionCount);
|
|
79
|
+
return () => activeDataSource.removeListener("row-selection", setSelectionCount);
|
|
80
|
+
}, [dataSource, sessionDataSource]);
|
|
81
|
+
useMemo(async () => {
|
|
82
|
+
if (isEditMode) {
|
|
83
|
+
try {
|
|
84
|
+
const sessionDataSource2 = isCopyOption(editSessionMode) ? await editSession.begin(editSessionMode) : await editSession.begin(editSessionMode);
|
|
85
|
+
if (sessionDataSource2) {
|
|
86
|
+
setSessionDataSource(sessionDataSource2);
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
console.error(`[useEditableTable] begin edit session failed`, e);
|
|
90
|
+
onCancel();
|
|
91
|
+
}
|
|
92
|
+
} else if (editSession.inEditMode) {
|
|
93
|
+
await editSession.end();
|
|
94
|
+
setSessionDataSource(void 0);
|
|
95
|
+
setSelectionCount(0);
|
|
96
|
+
}
|
|
97
|
+
}, [editSession, editSessionMode, isEditMode, onCancel]);
|
|
98
|
+
return {
|
|
99
|
+
dataSource,
|
|
100
|
+
editSession,
|
|
101
|
+
hasSelection: selectionCount > 0,
|
|
102
|
+
onAddRows: handleAddRows,
|
|
103
|
+
onCancel: handleCancel,
|
|
104
|
+
onDelete: handleDelete,
|
|
105
|
+
onSave: handleSave,
|
|
106
|
+
onUndoRowChange: handleUndoRowChange,
|
|
107
|
+
sessionDataSource
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export { useEditableTable };
|
|
112
|
+
//# sourceMappingURL=useEditableTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEditableTable.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/useEditableTable.ts"],"sourcesContent":["import { CopyOption, DataSource, DeleteRowMode, EditApi, EditSessionMode } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useData } from \"../context-definitions/DataProvider\";\nimport { useLayoutEffectSkipFirst } from \"../useLayoutEffectSkipFirst\";\nimport { EditSession, isCopyOption } from \"./EditSession\";\n\nexport type EditMode = \"edit\" | \"view\";\n\nexport interface EditableTableHookProps {\n /**\n * columns to be included in subscription. If not provided,\n * default will be '*'. Ignored if dataSource prop present.\n */\n columns?: string[];\n dataSource?: DataSource;\n addRowsCount?: number;\n deleteMode?: DeleteRowMode;\n editSessionMode?: EditSessionMode | CopyOption;\n isEditMode: boolean;\n onCancel: () => void;\n onSave: () => void;\n /**\n * If dataSource not provided, new DataSource\n * will be created using table and columns\n */\n table?: VuuTable;\n}\n\nexport const useEditableTable = ({\n addRowsCount = 15,\n columns,\n dataSource: dataSourceProp,\n deleteMode = \"soft\",\n editSessionMode = \"inline-all-rows\" as EditSessionMode | CopyOption,\n isEditMode,\n onCancel,\n onSave,\n table,\n}: EditableTableHookProps) => {\n const { VuuDataSource } = useData();\n const [sessionDataSource, setSessionDataSource] = useState<\n DataSource | undefined\n >(undefined);\n const [selectionCount, setSelectionCount] = useState(0);\n useLayoutEffectSkipFirst(() => {\n console.warn(`[useEditableTable] columns and or table changed`);\n }, [columns, table]);\n\n const dataSource = useMemo(() => {\n if (dataSourceProp) {\n return dataSourceProp;\n } else if (table) {\n return new VuuDataSource({ columns, table });\n } else {\n throw Error(\n `useEditableTable unable to provide DataSource, neither dataSource nor table available as props`,\n );\n }\n }, [VuuDataSource, columns, dataSourceProp, table]);\n\n // The editSession will be made available to all the edit controls in scope\n // by wrapping the edit component with a DataEditingProvider.\n const editSession = useMemo(\n () => new EditSession(dataSource as EditApi, deleteMode),\n // deleteMode is intentionally excluded — changing it mid-session is not supported\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataSource],\n );\n\n const handleCancel = useCallback(async () => {\n try {\n await editSession.end();\n setSessionDataSource(undefined);\n setSelectionCount(0);\n onCancel();\n } catch (e) {\n //\n }\n }, [editSession, onCancel]);\n\n const handleSave = useCallback(\n async (force = false) => {\n dataSource.resume?.();\n try {\n await editSession.end(true, force);\n if (editSession.inEditMode === false) {\n setSessionDataSource(undefined);\n setSelectionCount(0);\n onSave();\n }\n } catch (e) {\n console.log(`[useEditableTable] handleSave ${(e as Error).message}`);\n }\n },\n [dataSource, editSession, onSave],\n );\n\n const handleDelete = useCallback(async () => {\n await editSession.deleteSelectedRows();\n setSelectionCount(0);\n }, [editSession]);\n\n const handleAddRows = useCallback(() => {\n editSession.addRows(addRowsCount);\n }, [addRowsCount, editSession]);\n\n const handleUndoRowChange = useCallback(\n (key: string) => void editSession.undoRowChange(key),\n [editSession],\n );\n\n useEffect(() => {\n const activeDataSource = sessionDataSource ?? dataSource;\n activeDataSource.on(\"row-selection\", setSelectionCount);\n return () => activeDataSource.removeListener(\"row-selection\", setSelectionCount);\n }, [dataSource, sessionDataSource]);\n\n useMemo(async () => {\n if (isEditMode) {\n try {\n const sessionDataSource = isCopyOption(editSessionMode)\n ? await editSession.begin(editSessionMode)\n : await editSession.begin(editSessionMode);\n if (sessionDataSource) {\n setSessionDataSource(sessionDataSource);\n }\n } catch (e) {\n console.error(`[useEditableTable] begin edit session failed`, e);\n onCancel();\n }\n } else if (editSession.inEditMode) {\n await editSession.end();\n setSessionDataSource(undefined);\n setSelectionCount(0);\n }\n }, [editSession, editSessionMode, isEditMode, onCancel]);\n\n return {\n dataSource,\n editSession,\n hasSelection: selectionCount > 0,\n onAddRows: handleAddRows,\n onCancel: handleCancel,\n onDelete: handleDelete,\n onSave: handleSave,\n onUndoRowChange: handleUndoRowChange,\n sessionDataSource,\n };\n};\n"],"names":["sessionDataSource"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const UP1 = "up1";
|
|
2
|
+
const UP2 = "up2";
|
|
3
|
+
const DOWN1 = "down1";
|
|
4
|
+
const DOWN2 = "down2";
|
|
5
|
+
const decimalPattern = /^-?[0-9]*\.[0-9]*$/;
|
|
6
|
+
const JAVA_LONG_MIN = BigInt("-9223372036854775808");
|
|
7
|
+
const JAVA_LONG_MAX = BigInt("9223372036854775807");
|
|
8
|
+
const stringIsValidInt = (val) => parseInt(val, 10).toString() === val;
|
|
9
|
+
const stringIsValidLong = (val) => {
|
|
10
|
+
if (val === "") {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const n = BigInt(val);
|
|
15
|
+
return n <= JAVA_LONG_MAX && n >= JAVA_LONG_MIN;
|
|
16
|
+
} catch (e) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const stringIsValidDecimal = (val) => stringIsValidInt(val) || decimalPattern.test(val);
|
|
21
|
+
const stringIsValidNumber = (val) => stringIsValidInt(val) || stringIsValidDecimal(val);
|
|
22
|
+
const numericTypeOfStringValue = (val) => stringIsValidInt(val) ? "int" : stringIsValidDecimal(val) ? "double" : "NaN";
|
|
23
|
+
const isValidNumber = (n) => typeof n === "number" && isFinite(n);
|
|
24
|
+
const EMPTY = {};
|
|
25
|
+
const shallowEquals = (o1 = EMPTY, o2 = EMPTY) => {
|
|
26
|
+
const props1 = Object.keys(o1);
|
|
27
|
+
const props2 = Object.keys(o2);
|
|
28
|
+
return props1.length === props2.length && props1.every((key) => o1[key] === o2[key]);
|
|
29
|
+
};
|
|
30
|
+
function getMovingValueDirection(newValue, direction, prevValue, decimalPlaces) {
|
|
31
|
+
if (newValue === void 0) {
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
if (!isFinite(newValue) || prevValue === void 0 || direction === void 0) {
|
|
35
|
+
return "";
|
|
36
|
+
} else {
|
|
37
|
+
let diff = newValue - prevValue;
|
|
38
|
+
if (diff) {
|
|
39
|
+
if (typeof decimalPlaces === "number") {
|
|
40
|
+
diff = +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (diff) {
|
|
44
|
+
if (direction === "") {
|
|
45
|
+
if (diff < 0) {
|
|
46
|
+
return DOWN1;
|
|
47
|
+
} else {
|
|
48
|
+
return UP1;
|
|
49
|
+
}
|
|
50
|
+
} else if (diff > 0) {
|
|
51
|
+
if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {
|
|
52
|
+
return UP1;
|
|
53
|
+
} else {
|
|
54
|
+
return UP2;
|
|
55
|
+
}
|
|
56
|
+
} else if (direction === UP1 || direction === UP2 || direction === DOWN2) {
|
|
57
|
+
return DOWN1;
|
|
58
|
+
} else {
|
|
59
|
+
return DOWN2;
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function asInteger(value, defaultValue) {
|
|
67
|
+
if (typeof value === "number") {
|
|
68
|
+
return Number.isInteger(value) ? value : value < 0 ? Math.ceil(value) : Math.floor(value);
|
|
69
|
+
} else {
|
|
70
|
+
const integerValue = parseInt(value ?? "");
|
|
71
|
+
if (!isNaN(integerValue)) {
|
|
72
|
+
return integerValue;
|
|
73
|
+
} else if (typeof defaultValue === "number") {
|
|
74
|
+
return defaultValue;
|
|
75
|
+
}
|
|
76
|
+
throw Error(`parseIndex invalid value ${value}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const dataDescriptorTypeToVuuRowDataItemType = ({
|
|
80
|
+
serverDataType = "string"
|
|
81
|
+
}) => {
|
|
82
|
+
switch (serverDataType) {
|
|
83
|
+
case "double":
|
|
84
|
+
case "int":
|
|
85
|
+
case "long":
|
|
86
|
+
return "number";
|
|
87
|
+
case "boolean":
|
|
88
|
+
return "boolean";
|
|
89
|
+
default:
|
|
90
|
+
return "string";
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export { DOWN1, DOWN2, UP1, UP2, asInteger, dataDescriptorTypeToVuuRowDataItemType, getMovingValueDirection, isValidNumber, numericTypeOfStringValue, shallowEquals, stringIsValidDecimal, stringIsValidInt, stringIsValidLong, stringIsValidNumber };
|
|
95
|
+
//# sourceMappingURL=data-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-utils.js","sources":["../../../../../../packages/vuu-utils/src/data-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\n\nexport type valueChangeDirection = \"up1\" | \"up2\" | \"down1\" | \"down2\" | \"\";\n\nexport const UP1 = \"up1\";\nexport const UP2 = \"up2\";\nexport const DOWN1 = \"down1\";\nexport const DOWN2 = \"down2\";\n\nconst decimalPattern = /^-?[0-9]*\\.[0-9]*$/;\n\nconst JAVA_LONG_MIN = BigInt(\"-9223372036854775808\");\nconst JAVA_LONG_MAX = BigInt(\"9223372036854775807\");\n\nexport const stringIsValidInt = (val: string) =>\n parseInt(val, 10).toString() === val;\n\nexport const stringIsValidLong = (val: string) => {\n if (val === \"\") {\n return false;\n }\n try {\n const n = BigInt(val);\n return n <= JAVA_LONG_MAX && n >= JAVA_LONG_MIN;\n } catch (e) {\n return false;\n }\n};\n\nexport const stringIsValidDecimal = (val: string) =>\n stringIsValidInt(val) || decimalPattern.test(val);\n\nexport const stringIsValidNumber = (val: string) =>\n stringIsValidInt(val) || stringIsValidDecimal(val);\n\nexport const numericTypeOfStringValue = (val: string) =>\n stringIsValidInt(val) ? \"int\" : stringIsValidDecimal(val) ? \"double\" : \"NaN\";\n\nexport const isValidNumber = (n: unknown): n is number =>\n typeof n === \"number\" && isFinite(n);\n\nconst EMPTY = {};\nexport const shallowEquals = (\n o1: { [key: string]: unknown } = EMPTY,\n o2: { [key: string]: unknown } = EMPTY,\n) => {\n const props1 = Object.keys(o1);\n const props2 = Object.keys(o2);\n return (\n props1.length === props2.length &&\n props1.every((key) => o1[key] === o2[key])\n );\n};\n\nexport function getMovingValueDirection(\n newValue?: number,\n direction?: valueChangeDirection,\n prevValue?: number,\n /** the number of decimal places to take into account when highlighting a change */\n decimalPlaces?: number,\n): valueChangeDirection {\n if (newValue === undefined) {\n return \"\";\n }\n if (\n !isFinite(newValue) ||\n prevValue === undefined ||\n direction === undefined\n ) {\n return \"\";\n } else {\n let diff = newValue - prevValue;\n if (diff) {\n // make sure there is still a diff when reduced to number of decimals to be displayed\n if (typeof decimalPlaces === \"number\") {\n diff =\n +newValue.toFixed(decimalPlaces) - +prevValue.toFixed(decimalPlaces);\n }\n }\n\n if (diff) {\n if (direction === \"\") {\n if (diff < 0) {\n return DOWN1;\n } else {\n return UP1;\n }\n } else if (diff > 0) {\n if (direction === DOWN1 || direction === DOWN2 || direction === UP2) {\n return UP1;\n } else {\n return UP2;\n }\n } else if (\n direction === UP1 ||\n direction === UP2 ||\n direction === DOWN2\n ) {\n return DOWN1;\n } else {\n return DOWN2;\n }\n } else {\n return \"\";\n }\n }\n}\n\n/**\n * Convert a value to integer.\n * If value is a number, remove any decimals.\n * If value is a string, parse as integer. If NaN,\n * return defaultValue else throw.\n * If value is integer numeric, return value.\n *\n * @param value\n * @param defaultValue\n * @returns\n */\nexport function asInteger(\n value: number | string | undefined,\n defaultValue?: number,\n): number {\n if (typeof value === \"number\") {\n return Number.isInteger(value)\n ? value\n : value < 0\n ? Math.ceil(value)\n : Math.floor(value);\n } else {\n const integerValue = parseInt(value ?? \"\");\n if (!isNaN(integerValue)) {\n return integerValue;\n } else if (typeof defaultValue === \"number\") {\n return defaultValue;\n }\n throw Error(`parseIndex invalid value ${value}`);\n }\n}\n\nexport const dataDescriptorTypeToVuuRowDataItemType = ({\n serverDataType = \"string\",\n}: DataValueDescriptor): \"string\" | \"number\" | \"boolean\" => {\n switch (serverDataType) {\n case \"double\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n default:\n return \"string\";\n }\n};\n"],"names":[],"mappings":"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"}
|