@vuu-ui/vuu-data-react 0.13.45 → 0.13.46
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/data-editing/get-data-item-edit-control.js +30 -13
- package/cjs/data-editing/get-data-item-edit-control.js.map +1 -1
- package/cjs/hooks/useRemoteConnection.js +58 -0
- package/cjs/hooks/useRemoteConnection.js.map +1 -0
- package/cjs/hooks/useVuuMenuActions.js +5 -4
- package/cjs/hooks/useVuuMenuActions.js.map +1 -1
- package/cjs/index.js +4 -2
- package/cjs/index.js.map +1 -1
- package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js +6 -0
- package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js.map +1 -0
- package/cjs/lost-connection-indicator/LostConnectionIndicator.js +24 -0
- package/cjs/lost-connection-indicator/LostConnectionIndicator.js.map +1 -0
- package/esm/data-editing/get-data-item-edit-control.js +30 -13
- package/esm/data-editing/get-data-item-edit-control.js.map +1 -1
- package/esm/hooks/useRemoteConnection.js +56 -0
- package/esm/hooks/useRemoteConnection.js.map +1 -0
- package/esm/hooks/useVuuMenuActions.js +5 -4
- package/esm/hooks/useVuuMenuActions.js.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/lost-connection-indicator/LostConnectionIndicator.css.js +4 -0
- package/esm/lost-connection-indicator/LostConnectionIndicator.css.js.map +1 -0
- package/esm/lost-connection-indicator/LostConnectionIndicator.js +22 -0
- package/esm/lost-connection-indicator/LostConnectionIndicator.js.map +1 -0
- package/package.json +15 -14
- package/types/vuu-context-menu/src/ContextMenu.d.ts +10 -0
- package/types/vuu-context-menu/src/ContextMenuProvider.d.ts +16 -0
- package/types/vuu-context-menu/src/index.d.ts +3 -0
- package/types/vuu-context-menu/src/menu-utils.d.ts +17 -0
- package/types/vuu-context-menu/src/useContextMenu.d.ts +10 -0
- package/types/{data-editing → vuu-data-react/src/data-editing}/get-data-item-edit-control.d.ts +9 -1
- package/types/{hooks → vuu-data-react/src/hooks}/index.d.ts +0 -1
- package/types/vuu-data-react/src/hooks/useConnectionStatus.d.ts +6 -0
- package/types/vuu-data-react/src/hooks/useRemoteConnection.d.ts +6 -0
- package/types/{index.d.ts → vuu-data-react/src/index.d.ts} +2 -0
- package/types/vuu-data-react/src/lost-connection-indicator/LostConnectionIndicator.d.ts +1 -0
- package/types/vuu-popups/src/index.d.ts +5 -0
- package/types/vuu-popups/src/notifications/NotificationsCenter.d.ts +5 -0
- package/types/vuu-popups/src/notifications/NotificationsContext.d.ts +36 -0
- package/types/vuu-popups/src/notifications/NotificationsProvider.d.ts +9 -0
- package/types/vuu-popups/src/notifications/ToastNotification.d.ts +7 -0
- package/types/vuu-popups/src/notifications/WorkspaceNotification.d.ts +5 -0
- package/types/vuu-popups/src/notifications/index.d.ts +3 -0
- package/types/vuu-popups/src/popup/Popup.d.ts +12 -0
- package/types/vuu-popups/src/popup/getPositionRelativeToAnchor.d.ts +19 -0
- package/types/vuu-popups/src/popup/index.d.ts +2 -0
- package/types/vuu-popups/src/popup/useAnchoredPosition.d.ts +7 -0
- package/types/vuu-popups/src/popup-menu/PopupMenu.d.ts +45 -0
- package/types/vuu-popups/src/popup-menu/index.d.ts +1 -0
- package/types/vuu-popups/src/popup-menu/usePopupMenu.d.ts +19 -0
- package/types/vuu-popups/src/portal/Portal.d.ts +42 -0
- package/types/vuu-popups/src/portal/index.d.ts +1 -0
- package/types/vuu-popups/src/tooltip/Tooltip.d.ts +15 -0
- package/types/vuu-popups/src/tooltip/index.d.ts +2 -0
- package/types/vuu-popups/src/tooltip/useTooltip.d.ts +19 -0
- package/types/vuu-popups/src/tooltip/useTooltipAnchoredPosition.d.ts +7 -0
- package/types/vuu-ui-controls/src/calendar/Calendar.d.ts +13 -0
- package/types/vuu-ui-controls/src/calendar/index.d.ts +4 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarCarousel.d.ts +3 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarContext.d.ts +8 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarDay.d.ts +14 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarMonth.d.ts +10 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarNavigation.d.ts +16 -0
- package/types/vuu-ui-controls/src/calendar/internal/CalendarWeekHeader.d.ts +3 -0
- package/types/vuu-ui-controls/src/calendar/internal/useFocusManagement.d.ts +9 -0
- package/types/vuu-ui-controls/src/calendar/internal/utils.d.ts +15 -0
- package/types/vuu-ui-controls/src/calendar/useCalendar.d.ts +54 -0
- package/types/vuu-ui-controls/src/calendar/useCalendarDay.d.ts +22 -0
- package/types/vuu-ui-controls/src/calendar/useSelection.d.ts +78 -0
- package/types/vuu-ui-controls/src/column-picker/ColumnPicker.d.ts +7 -0
- package/types/vuu-ui-controls/src/column-picker/ColumnSearch.d.ts +12 -0
- package/types/vuu-ui-controls/src/column-picker/index.d.ts +2 -0
- package/types/vuu-ui-controls/src/common-hooks/index.d.ts +3 -0
- package/types/vuu-ui-controls/src/common-hooks/selectionTypes.d.ts +70 -0
- package/types/vuu-ui-controls/src/common-hooks/use-resize-observer.d.ts +16 -0
- package/types/vuu-ui-controls/src/common-hooks/useControlled.d.ts +24 -0
- package/types/vuu-ui-controls/src/context-panel-provider/ContextPanelProvider.d.ts +17 -0
- package/types/vuu-ui-controls/src/cycle-state-button/CycleStateButton.d.ts +11 -0
- package/types/vuu-ui-controls/src/cycle-state-button/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/date-input/DateInput.d.ts +60 -0
- package/types/vuu-ui-controls/src/date-input/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/date-picker/DatePicker.d.ts +66 -0
- package/types/vuu-ui-controls/src/date-picker/DatePickerContext.d.ts +19 -0
- package/types/vuu-ui-controls/src/date-picker/DatePickerPanel.d.ts +10 -0
- package/types/vuu-ui-controls/src/date-picker/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/drag-drop/DragDropProvider.d.ts +38 -0
- package/types/vuu-ui-controls/src/drag-drop/DragDropState.d.ts +15 -0
- package/types/vuu-ui-controls/src/drag-drop/Draggable.d.ts +13 -0
- package/types/vuu-ui-controls/src/drag-drop/dragDropTypes.d.ts +100 -0
- package/types/vuu-ui-controls/src/drag-drop/drop-target-utils.d.ts +82 -0
- package/types/vuu-ui-controls/src/drag-drop/index.d.ts +6 -0
- package/types/vuu-ui-controls/src/drag-drop/useAutoScroll.d.ts +11 -0
- package/types/vuu-ui-controls/src/drag-drop/useDragDisplacers.d.ts +17 -0
- package/types/vuu-ui-controls/src/drag-drop/useDragDrop.d.ts +2 -0
- package/types/vuu-ui-controls/src/drag-drop/useDragDropCopy.d.ts +6 -0
- package/types/vuu-ui-controls/src/drag-drop/useDragDropIndicator.d.ts +2 -0
- package/types/vuu-ui-controls/src/drag-drop/useDragDropNaturalMovement.d.ts +2 -0
- package/types/vuu-ui-controls/src/drag-drop/useDropIndicator.d.ts +8 -0
- package/types/vuu-ui-controls/src/drag-drop/useGlobalDragDrop.d.ts +11 -0
- package/types/vuu-ui-controls/src/editable/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/editable/useEditableText.d.ts +19 -0
- package/types/vuu-ui-controls/src/editable-label/EditableLabel.d.ts +19 -0
- package/types/vuu-ui-controls/src/editable-label/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/expando-input/ExpandoInput.d.ts +6 -0
- package/types/vuu-ui-controls/src/expando-input/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/icon-button/Icon.d.ts +6 -0
- package/types/vuu-ui-controls/src/icon-button/IconButton.d.ts +6 -0
- package/types/vuu-ui-controls/src/icon-button/ToggleIconButton.d.ts +5 -0
- package/types/vuu-ui-controls/src/icon-button/index.d.ts +3 -0
- package/types/vuu-ui-controls/src/index.d.ts +30 -0
- package/types/vuu-ui-controls/src/instrument-picker/TablePicker.d.ts +10 -0
- package/types/vuu-ui-controls/src/instrument-picker/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/instrument-picker/useTablePicker.d.ts +47 -0
- package/types/vuu-ui-controls/src/measured-container/MeasuredContainer.d.ts +14 -0
- package/types/vuu-ui-controls/src/measured-container/index.d.ts +2 -0
- package/types/vuu-ui-controls/src/measured-container/useMeasuredContainer.d.ts +23 -0
- package/types/vuu-ui-controls/src/measured-container/useResizeObserver.d.ts +15 -0
- package/types/vuu-ui-controls/src/modal-provider/ModalProvider.d.ts +13 -0
- package/types/vuu-ui-controls/src/overflow-container/OverflowContainer.d.ts +15 -0
- package/types/vuu-ui-controls/src/overflow-container/index.d.ts +2 -0
- package/types/vuu-ui-controls/src/overflow-container/overflow-utils.d.ts +48 -0
- package/types/vuu-ui-controls/src/overflow-container/useOverflowContainer.d.ts +19 -0
- package/types/vuu-ui-controls/src/price-ticker/PriceTicker.d.ts +7 -0
- package/types/vuu-ui-controls/src/price-ticker/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/prompt/Prompt.d.ts +48 -0
- package/types/vuu-ui-controls/src/sortable-list/SortableList.d.ts +8 -0
- package/types/vuu-ui-controls/src/split-button/SplitButton.d.ts +11 -0
- package/types/vuu-ui-controls/src/split-button/SplitStateButton.d.ts +5 -0
- package/types/vuu-ui-controls/src/split-button/index.d.ts +2 -0
- package/types/vuu-ui-controls/src/split-button/useSplitButton.d.ts +311 -0
- package/types/vuu-ui-controls/src/table-search/SearchCell.d.ts +2 -0
- package/types/vuu-ui-controls/src/table-search/TableSearch.d.ts +9 -0
- package/types/vuu-ui-controls/src/table-search/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/table-search/useTableSearch.d.ts +15 -0
- package/types/vuu-ui-controls/src/tabs-next/TabBar.d.ts +12 -0
- package/types/vuu-ui-controls/src/tabs-next/TabListNext.d.ts +12 -0
- package/types/vuu-ui-controls/src/tabs-next/TabNext.d.ts +12 -0
- package/types/vuu-ui-controls/src/tabs-next/TabNextAction.d.ts +5 -0
- package/types/vuu-ui-controls/src/tabs-next/TabNextContext.d.ts +12 -0
- package/types/vuu-ui-controls/src/tabs-next/TabNextPanel.d.ts +8 -0
- package/types/vuu-ui-controls/src/tabs-next/TabNextTrigger.d.ts +5 -0
- package/types/vuu-ui-controls/src/tabs-next/TabOverflowList.d.ts +11 -0
- package/types/vuu-ui-controls/src/tabs-next/TabsNext.d.ts +17 -0
- package/types/vuu-ui-controls/src/tabs-next/TabsNextContext.d.ts +21 -0
- package/types/vuu-ui-controls/src/tabs-next/hooks/useCollection.d.ts +18 -0
- package/types/vuu-ui-controls/src/tabs-next/hooks/useFocusOutside.d.ts +2 -0
- package/types/vuu-ui-controls/src/tabs-next/hooks/useOverflow.d.ts +11 -0
- package/types/vuu-ui-controls/src/tabs-next/index.d.ts +7 -0
- package/types/vuu-ui-controls/src/tabstrip/Tab.d.ts +27 -0
- package/types/vuu-ui-controls/src/tabstrip/TabMenu.d.ts +23 -0
- package/types/vuu-ui-controls/src/tabstrip/TabMenuOptions.d.ts +10 -0
- package/types/vuu-ui-controls/src/tabstrip/TabsTypes.d.ts +127 -0
- package/types/vuu-ui-controls/src/tabstrip/Tabstrip.d.ts +2 -0
- package/types/vuu-ui-controls/src/tabstrip/index.d.ts +5 -0
- package/types/vuu-ui-controls/src/tabstrip/tabstrip-dom-utils.d.ts +2 -0
- package/types/vuu-ui-controls/src/tabstrip/useAnimatedSelectionThumb.d.ts +7 -0
- package/types/vuu-ui-controls/src/tabstrip/useKeyboardNavigation.d.ts +29 -0
- package/types/vuu-ui-controls/src/tabstrip/useSelection.d.ts +13 -0
- package/types/vuu-ui-controls/src/tabstrip/useTabstrip.d.ts +55 -0
- package/types/vuu-ui-controls/src/time-input/MaskedInput.d.ts +49 -0
- package/types/vuu-ui-controls/src/time-input/TimeInput.d.ts +5 -0
- package/types/vuu-ui-controls/src/time-input/useTimeInput.d.ts +21 -0
- package/types/vuu-ui-controls/src/toolbar/Toolbar.d.ts +19 -0
- package/types/vuu-ui-controls/src/toolbar/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/toolbar/toolbar-dom-utils.d.ts +3 -0
- package/types/vuu-ui-controls/src/toolbar/useKeyboardNavigation.d.ts +32 -0
- package/types/vuu-ui-controls/src/toolbar/useSelection.d.ts +22 -0
- package/types/vuu-ui-controls/src/toolbar/useToolbar.d.ts +28 -0
- package/types/vuu-ui-controls/src/utils/deprecated-types.d.ts +2 -0
- package/types/vuu-ui-controls/src/utils/escapeRegExp.d.ts +1 -0
- package/types/vuu-ui-controls/src/utils/forwardCallbackProps.d.ts +3 -0
- package/types/vuu-ui-controls/src/utils/index.d.ts +5 -0
- package/types/vuu-ui-controls/src/utils/isOverflowElement.d.ts +1 -0
- package/types/vuu-ui-controls/src/utils/isPlainObject.d.ts +1 -0
- package/types/vuu-ui-controls/src/vuu-date-picker/VuuDatePicker.d.ts +7 -0
- package/types/vuu-ui-controls/src/vuu-date-picker/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/vuu-input/VuuInput.d.ts +18 -0
- package/types/vuu-ui-controls/src/vuu-input/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/vuu-time-picker/VuuTimePicker.d.ts +7 -0
- package/types/vuu-ui-controls/src/vuu-typeahead-input/VuuTypeaheadInput.d.ts +6 -0
- package/types/vuu-ui-controls/src/vuu-typeahead-input/index.d.ts +1 -0
- package/types/vuu-ui-controls/src/vuu-typeahead-input/useVuuTypeaheadInput.d.ts +49 -0
- package/types/vuu-utils/src/Clock.d.ts +20 -0
- package/types/vuu-utils/src/DataWindow.d.ts +39 -0
- package/types/vuu-utils/src/ShellContext.d.ts +11 -0
- package/types/vuu-utils/src/ThemeProvider.d.ts +32 -0
- package/types/vuu-utils/src/array-utils.d.ts +8 -0
- package/types/vuu-utils/src/box-utils.d.ts +24 -0
- package/types/vuu-utils/src/broadcast-channel.d.ts +16 -0
- package/types/vuu-utils/src/column-utils.d.ts +181 -0
- package/types/vuu-utils/src/common-types.d.ts +6 -0
- package/types/vuu-utils/src/component-registry.d.ts +65 -0
- package/types/vuu-utils/src/context-definitions/DataContext.d.ts +18 -0
- package/types/vuu-utils/src/context-definitions/DataProvider.d.ts +7 -0
- package/types/vuu-utils/src/context-definitions/DataSourceProvider.d.ts +12 -0
- package/types/vuu-utils/src/context-definitions/WorkspaceContext.d.ts +17 -0
- package/types/vuu-utils/src/cookie-utils.d.ts +1 -0
- package/types/vuu-utils/src/css-utils.d.ts +1 -0
- package/types/vuu-utils/src/data-utils.d.ts +19 -0
- package/types/vuu-utils/src/datasource/BaseDataSource.d.ts +60 -0
- package/types/vuu-utils/src/datasource/datasource-action-utils.d.ts +7 -0
- package/types/vuu-utils/src/datasource/datasource-filter-utils.d.ts +2 -0
- package/types/vuu-utils/src/datasource/datasource-utils.d.ts +49 -0
- package/types/vuu-utils/src/date/date-utils.d.ts +36 -0
- package/types/vuu-utils/src/date/dateTimePattern.d.ts +8 -0
- package/types/vuu-utils/src/date/formatter.d.ts +4 -0
- package/types/vuu-utils/src/date/index.d.ts +4 -0
- package/types/vuu-utils/src/date/types.d.ts +24 -0
- package/types/vuu-utils/src/debug-utils.d.ts +9 -0
- package/types/vuu-utils/src/event-emitter.d.ts +21 -0
- package/types/vuu-utils/src/feature-utils.d.ts +110 -0
- package/types/vuu-utils/src/filters/filter-utils.d.ts +82 -0
- package/types/vuu-utils/src/filters/filterAsQuery.d.ts +7 -0
- package/types/vuu-utils/src/filters/index.d.ts +2 -0
- package/types/vuu-utils/src/form-utils.d.ts +23 -0
- package/types/vuu-utils/src/formatting-utils.d.ts +14 -0
- package/types/vuu-utils/src/getUniqueId.d.ts +1 -0
- package/types/vuu-utils/src/group-utils.d.ts +10 -0
- package/types/vuu-utils/src/html-utils.d.ts +21 -0
- package/types/vuu-utils/src/index.d.ts +74 -0
- package/types/vuu-utils/src/input-utils.d.ts +2 -0
- package/types/vuu-utils/src/invariant.d.ts +1 -0
- package/types/vuu-utils/src/itemToString.d.ts +2 -0
- package/types/vuu-utils/src/json-types.d.ts +52 -0
- package/types/vuu-utils/src/json-utils.d.ts +6 -0
- package/types/vuu-utils/src/keyboard-utils.d.ts +15 -0
- package/types/vuu-utils/src/keyset.d.ts +16 -0
- package/types/vuu-utils/src/layout-types.d.ts +22 -0
- package/types/vuu-utils/src/list-utils.d.ts +2 -0
- package/types/vuu-utils/src/local-storage-utils.d.ts +3 -0
- package/types/vuu-utils/src/logging-utils.d.ts +45 -0
- package/types/vuu-utils/src/menu-utils.d.ts +6 -0
- package/types/vuu-utils/src/module-utils.d.ts +8 -0
- package/types/vuu-utils/src/moving-window.d.ts +18 -0
- package/types/vuu-utils/src/nanoid/index.d.ts +1 -0
- package/types/vuu-utils/src/perf-utils.d.ts +5 -0
- package/types/vuu-utils/src/promise-utils.d.ts +8 -0
- package/types/vuu-utils/src/protocol-message-utils.d.ts +34 -0
- package/types/vuu-utils/src/range-utils.d.ts +31 -0
- package/types/vuu-utils/src/react-utils.d.ts +8 -0
- package/types/vuu-utils/src/round-decimal.d.ts +1 -0
- package/types/vuu-utils/src/row-utils.d.ts +27 -0
- package/types/vuu-utils/src/selection-utils.d.ts +4 -0
- package/types/vuu-utils/src/shell-layout-types.d.ts +15 -0
- package/types/vuu-utils/src/sort-utils.d.ts +11 -0
- package/types/vuu-utils/src/table-schema-utils.d.ts +3 -0
- package/types/vuu-utils/src/text-utils.d.ts +2 -0
- package/types/vuu-utils/src/tree-types.d.ts +9 -0
- package/types/vuu-utils/src/tree-utils.d.ts +9 -0
- package/types/vuu-utils/src/ts-utils.d.ts +20 -0
- package/types/vuu-utils/src/typeahead-utils.d.ts +1 -0
- package/types/vuu-utils/src/url-utils.d.ts +2 -0
- package/types/vuu-utils/src/useId.d.ts +1 -0
- package/types/vuu-utils/src/useLayoutEffectSkipFirst.d.ts +2 -0
- package/types/vuu-utils/src/useStateRef.d.ts +2 -0
- package/types/vuu-utils/src/user-types.d.ts +4 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/EditForm.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/UnsavedChangesReport.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/edit-rule-validation-checker.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/edit-validation-rules.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/form-edit-state.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/index.d.ts +0 -0
- /package/types/{data-editing → vuu-data-react/src/data-editing}/useEditForm.d.ts +0 -0
- /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/VuuDataSourceProvider.d.ts +0 -0
- /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/index.d.ts +0 -0
- /package/types/{datasource-provider → vuu-data-react/src/datasource-provider}/useAutoLoginToVuuServer.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useLookupValues.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useSessionDataSource.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useTypeaheadSuggestions.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useVisualLinks.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useVuuMenuActions.d.ts +0 -0
- /package/types/{hooks → vuu-data-react/src/hooks}/useVuuTables.d.ts +0 -0
- /package/types/{session-editing-form → vuu-data-react/src/session-editing-form}/SessionEditingForm.d.ts +0 -0
- /package/types/{session-editing-form → vuu-data-react/src/session-editing-form}/index.d.ts +0 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
|
|
5
5
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
+
var vuuFilters = require('@vuu-ui/vuu-filters');
|
|
6
7
|
|
|
7
8
|
const getDataItemEditControl = ({
|
|
8
9
|
InputProps: InputProps2,
|
|
@@ -14,6 +15,7 @@ const getDataItemEditControl = ({
|
|
|
14
15
|
errorMessage,
|
|
15
16
|
onCommit,
|
|
16
17
|
table,
|
|
18
|
+
values,
|
|
17
19
|
variant
|
|
18
20
|
}) => {
|
|
19
21
|
const handleCommitNumber = (evt, value) => {
|
|
@@ -55,19 +57,34 @@ const getDataItemEditControl = ({
|
|
|
55
57
|
}
|
|
56
58
|
);
|
|
57
59
|
} else if (dataDescriptor.serverDataType === "string" && table) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
if (variant === "toggle" && values?.length) {
|
|
61
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
62
|
+
vuuFilters.ToggleFilter,
|
|
63
|
+
{
|
|
64
|
+
className,
|
|
65
|
+
column: dataDescriptor.name,
|
|
66
|
+
"data-edit-control": true,
|
|
67
|
+
onCommit,
|
|
68
|
+
table,
|
|
69
|
+
values,
|
|
70
|
+
value: InputProps2?.inputProps?.value ?? "all"
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
} else {
|
|
74
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
75
|
+
vuuUiControls.VuuTypeaheadInput,
|
|
76
|
+
{
|
|
77
|
+
...InputProps2,
|
|
78
|
+
...TypeaheadProps,
|
|
79
|
+
className,
|
|
80
|
+
column: dataDescriptor.name,
|
|
81
|
+
"data-edit-control": true,
|
|
82
|
+
"data-variant": dataVariant,
|
|
83
|
+
onCommit,
|
|
84
|
+
table
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
71
88
|
}
|
|
72
89
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
73
90
|
vuuUiControls.VuuInput,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-data-item-edit-control.js","sources":["../../../../packages/vuu-data-react/src/data-editing/get-data-item-edit-control.tsx"],"sourcesContent":["import type {\n DataValueDescriptor,\n TableSchemaTable,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuDatePicker,\n VuuInput,\n VuuTimePicker,\n VuuTypeaheadInput,\n VuuTypeaheadInputProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n CommitHandler,\n isDateTimeDataValue,\n isTimeDataValue,\n} from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { asTimeString } from \"@vuu-ui/vuu-utils\";\n\n/**\n * variant can be used to provide a rendering hint to the filter control rendered.\n * 'toggle' for A ToggleButtonGroup, only suitable for up to 3 value choices\n * 'search' to render a search icon and require at least one character to be entered.\n * 'pick' to show a dropdown list, even before any text is entered, best for smaller lists\n */\nexport type FilterControlVariant = \"search\" | \"pick\" | \"toggle\";\nexport interface DataItemEditControlProps {\n InputProps?: Partial<InputProps>;\n TypeaheadProps?: Pick<\n VuuTypeaheadInputProps,\n | \"highlightFirstSuggestion\"\n | \"minCharacterCountToTriggerSuggestions\"\n | \"selectOnTab\"\n >;\n className?: string;\n commitOnBlur?: boolean;\n commitWhenCleared?: boolean;\n /**\n * A table column or form field Descriptor.\n */\n dataDescriptor: DataValueDescriptor;\n errorMessage?: string;\n onCommit: CommitHandler<HTMLElement>;\n table?: TableSchemaTable;\n variant?: FilterControlVariant;\n}\n\nexport type ValidationStatus = \"initial\" | true | string;\n\nexport const getDataItemEditControl = ({\n InputProps,\n TypeaheadProps,\n className,\n commitOnBlur,\n commitWhenCleared,\n dataDescriptor,\n errorMessage,\n onCommit,\n table,\n variant,\n}: DataItemEditControlProps) => {\n const handleCommitNumber: CommitHandler<HTMLElement, number> = (\n evt,\n value,\n ) => {\n onCommit(evt, value.toString());\n };\n\n const dataVariant = variant && variant !== \"toggle\" ? variant : undefined;\n\n if (dataDescriptor.editable === false) {\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n onCommit={onCommit}\n readOnly\n data-edit-control\n />\n );\n } else if (isTimeDataValue(dataDescriptor)) {\n if (InputProps?.inputProps) {\n const { value, onChange } = InputProps.inputProps;\n return (\n <VuuTimePicker\n className={className}\n value={asTimeString(value, true)}\n onChange={onChange}\n onCommit={onCommit}\n data-edit-control\n />\n );\n }\n } else if (isDateTimeDataValue(dataDescriptor)) {\n return (\n <VuuDatePicker\n className={className}\n onCommit={handleCommitNumber}\n data-edit-control\n />\n );\n } else if (dataDescriptor.serverDataType === \"string\" && table) {\n return (\n <VuuTypeaheadInput\n
|
|
1
|
+
{"version":3,"file":"get-data-item-edit-control.js","sources":["../../../../packages/vuu-data-react/src/data-editing/get-data-item-edit-control.tsx"],"sourcesContent":["import type {\n DataValueDescriptor,\n TableSchemaTable,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuDatePicker,\n VuuInput,\n VuuTimePicker,\n VuuTypeaheadInput,\n VuuTypeaheadInputProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n CommitHandler,\n isDateTimeDataValue,\n isTimeDataValue,\n} from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { asTimeString } from \"@vuu-ui/vuu-utils\";\nimport { ToggleFilter } from \"@vuu-ui/vuu-filters\";\n\n/**\n * variant can be used to provide a rendering hint to the filter control rendered.\n * 'toggle' for A ToggleButtonGroup, only suitable for up to 3 value choices\n * 'search' to render a search icon and require at least one character to be entered.\n * 'pick' to show a dropdown list, even before any text is entered, best for smaller lists\n */\nexport type FilterControlVariant = \"search\" | \"pick\" | \"toggle\";\nexport interface DataItemEditControlProps {\n InputProps?: Partial<InputProps>;\n TypeaheadProps?: Pick<\n VuuTypeaheadInputProps,\n | \"highlightFirstSuggestion\"\n | \"minCharacterCountToTriggerSuggestions\"\n | \"selectOnTab\"\n >;\n className?: string;\n commitOnBlur?: boolean;\n commitWhenCleared?: boolean;\n /**\n * A table column or form field Descriptor.\n */\n dataDescriptor: DataValueDescriptor;\n errorMessage?: string;\n onCommit: CommitHandler<HTMLElement>;\n table?: TableSchemaTable;\n /**\n * Where provided, only these values will be offered as suggestions.\n * They will be validated against server with Typeahead service, so\n * unavailable options are not offered.\n * Recommended for toggle filters, not usually necessary for other\n * filter variants.\n */\n values?: string[];\n variant?: FilterControlVariant;\n}\n\nexport type ValidationStatus = \"initial\" | true | string;\n\nexport const getDataItemEditControl = ({\n InputProps,\n TypeaheadProps,\n className,\n commitOnBlur,\n commitWhenCleared,\n dataDescriptor,\n errorMessage,\n onCommit,\n table,\n values,\n variant,\n}: DataItemEditControlProps) => {\n const handleCommitNumber: CommitHandler<HTMLElement, number> = (\n evt,\n value,\n ) => {\n onCommit(evt, value.toString());\n };\n\n const dataVariant = variant && variant !== \"toggle\" ? variant : undefined;\n\n if (dataDescriptor.editable === false) {\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n onCommit={onCommit}\n readOnly\n data-edit-control\n />\n );\n } else if (isTimeDataValue(dataDescriptor)) {\n if (InputProps?.inputProps) {\n const { value, onChange } = InputProps.inputProps;\n return (\n <VuuTimePicker\n className={className}\n value={asTimeString(value, true)}\n onChange={onChange}\n onCommit={onCommit}\n data-edit-control\n />\n );\n }\n } else if (isDateTimeDataValue(dataDescriptor)) {\n return (\n <VuuDatePicker\n className={className}\n onCommit={handleCommitNumber}\n data-edit-control\n />\n );\n } else if (dataDescriptor.serverDataType === \"string\" && table) {\n if (variant === \"toggle\" && values?.length) {\n return (\n <ToggleFilter\n className={className}\n column={dataDescriptor.name}\n data-edit-control\n onCommit={onCommit}\n table={table}\n values={values}\n value={InputProps?.inputProps?.value ?? \"all\"}\n />\n );\n } else {\n return (\n <VuuTypeaheadInput\n {...InputProps}\n {...TypeaheadProps}\n className={className}\n column={dataDescriptor.name}\n data-edit-control\n data-variant={dataVariant}\n onCommit={onCommit}\n table={table}\n />\n );\n }\n }\n\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n className={className}\n commitOnBlur={commitOnBlur}\n commitWhenCleared={commitWhenCleared}\n onCommit={onCommit}\n errorMessage={errorMessage}\n data-edit-control\n />\n );\n};\n"],"names":["InputProps","jsx","VuuInput","isTimeDataValue","VuuTimePicker","asTimeString","isDateTimeDataValue","VuuDatePicker","ToggleFilter","VuuTypeaheadInput"],"mappings":";;;;;;;AA0DO,MAAM,yBAAyB,CAAC;AAAA,EACrC,UAAAA,EAAAA,WAAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAC9B,EAAM,MAAA,kBAAA,GAAyD,CAC7D,GAAA,EACA,KACG,KAAA;AACH,IAAS,QAAA,CAAA,GAAA,EAAK,KAAM,CAAA,QAAA,EAAU,CAAA;AAAA,GAChC;AAEA,EAAA,MAAM,WAAc,GAAA,OAAA,IAAW,OAAY,KAAA,QAAA,GAAW,OAAU,GAAA,KAAA,CAAA;AAEhE,EAAI,IAAA,cAAA,CAAe,aAAa,KAAO,EAAA;AACrC,IACE,uBAAAC,cAAA;AAAA,MAACC,sBAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACP,GAAGF,WAAAA;AAAA,QACJ,QAAA;AAAA,QACA,QAAQ,EAAA,IAAA;AAAA,QACR,mBAAiB,EAAA;AAAA;AAAA,KACnB;AAAA,GAEJ,MAAA,IAAWG,wBAAgB,CAAA,cAAc,CAAG,EAAA;AAC1C,IAAA,IAAIH,aAAY,UAAY,EAAA;AAC1B,MAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAIA,WAAW,CAAA,UAAA;AACvC,MACE,uBAAAC,cAAA;AAAA,QAACG,2BAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,KAAA,EAAOC,qBAAa,CAAA,KAAA,EAAO,IAAI,CAAA;AAAA,UAC/B,QAAA;AAAA,UACA,QAAA;AAAA,UACA,mBAAiB,EAAA;AAAA;AAAA,OACnB;AAAA;AAEJ,GACF,MAAA,IAAWC,4BAAoB,CAAA,cAAc,CAAG,EAAA;AAC9C,IACE,uBAAAL,cAAA;AAAA,MAACM,2BAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,QAAU,EAAA,kBAAA;AAAA,QACV,mBAAiB,EAAA;AAAA;AAAA,KACnB;AAAA,GAEO,MAAA,IAAA,cAAA,CAAe,cAAmB,KAAA,QAAA,IAAY,KAAO,EAAA;AAC9D,IAAI,IAAA,OAAA,KAAY,QAAY,IAAA,MAAA,EAAQ,MAAQ,EAAA;AAC1C,MACE,uBAAAN,cAAA;AAAA,QAACO,uBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,QAAQ,cAAe,CAAA,IAAA;AAAA,UACvB,mBAAiB,EAAA,IAAA;AAAA,UACjB,QAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA,EAAOR,WAAY,EAAA,UAAA,EAAY,KAAS,IAAA;AAAA;AAAA,OAC1C;AAAA,KAEG,MAAA;AACL,MACE,uBAAAC,cAAA;AAAA,QAACQ,+BAAA;AAAA,QAAA;AAAA,UACE,GAAGT,WAAAA;AAAA,UACH,GAAG,cAAA;AAAA,UACJ,SAAA;AAAA,UACA,QAAQ,cAAe,CAAA,IAAA;AAAA,UACvB,mBAAiB,EAAA,IAAA;AAAA,UACjB,cAAc,EAAA,WAAA;AAAA,UACd,QAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA;AAEJ;AAGF,EACE,uBAAAC,cAAA;AAAA,IAACC,sBAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,WAAA;AAAA,MACP,GAAGF,WAAAA;AAAA,MACJ,SAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAiB,EAAA;AAAA;AAAA,GACnB;AAEJ;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
|
|
5
|
+
var react = require('react');
|
|
6
|
+
var vuuPopups = require('@vuu-ui/vuu-popups');
|
|
7
|
+
var LostConnectionIndicator = require('../lost-connection-indicator/LostConnectionIndicator.js');
|
|
8
|
+
|
|
9
|
+
const useRemoteConnection = ({
|
|
10
|
+
serverUrl,
|
|
11
|
+
user
|
|
12
|
+
}) => {
|
|
13
|
+
const { hideNotification, showNotification } = vuuPopups.useNotifications();
|
|
14
|
+
const isConnectedRef = react.useRef(false);
|
|
15
|
+
const handleConnectionStatusChange = react.useCallback(
|
|
16
|
+
(message) => {
|
|
17
|
+
const { current: wasConnected } = isConnectedRef;
|
|
18
|
+
isConnectedRef.current = vuuDataRemote.isConnected(message.connectionStatus);
|
|
19
|
+
if (wasConnected && message.connectionStatus === "disconnected") {
|
|
20
|
+
showNotification({
|
|
21
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(LostConnectionIndicator.LostConnectionIndicator, {}),
|
|
22
|
+
level: "error",
|
|
23
|
+
type: "workspace"
|
|
24
|
+
});
|
|
25
|
+
} else if (!wasConnected && isConnectedRef.current) {
|
|
26
|
+
hideNotification();
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
[hideNotification, showNotification]
|
|
30
|
+
);
|
|
31
|
+
react.useMemo(async () => {
|
|
32
|
+
if (serverUrl) {
|
|
33
|
+
vuuDataRemote.ConnectionManager.on("connection-status", handleConnectionStatusChange);
|
|
34
|
+
const connectionResult = await vuuDataRemote.ConnectionManager.connect({
|
|
35
|
+
token: user.token,
|
|
36
|
+
url: serverUrl,
|
|
37
|
+
username: user.username
|
|
38
|
+
});
|
|
39
|
+
if (connectionResult === "rejected") {
|
|
40
|
+
showNotification({
|
|
41
|
+
level: "error",
|
|
42
|
+
content: "Unable to connect to VUU Server",
|
|
43
|
+
header: "Error",
|
|
44
|
+
type: "toast"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, [
|
|
49
|
+
handleConnectionStatusChange,
|
|
50
|
+
showNotification,
|
|
51
|
+
serverUrl,
|
|
52
|
+
user.token,
|
|
53
|
+
user.username
|
|
54
|
+
]);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
exports.useRemoteConnection = useRemoteConnection;
|
|
58
|
+
//# sourceMappingURL=useRemoteConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRemoteConnection.js","sources":["../../../../packages/vuu-data-react/src/hooks/useRemoteConnection.tsx"],"sourcesContent":["import {\n ConnectionManager,\n WebSocketConnectionState,\n isConnected,\n} from \"@vuu-ui/vuu-data-remote\";\nimport type { VuuUser } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport { LostConnectionIndicator } from \"../lost-connection-indicator/LostConnectionIndicator\";\n\nexport interface RemoteConnectionHookProps {\n serverUrl?: string;\n user: VuuUser;\n}\nexport const useRemoteConnection = ({\n serverUrl,\n user,\n}: RemoteConnectionHookProps) => {\n const { hideNotification, showNotification } = useNotifications();\n\n const isConnectedRef = useRef(false);\n\n const handleConnectionStatusChange = useCallback(\n (message: WebSocketConnectionState) => {\n const { current: wasConnected } = isConnectedRef;\n isConnectedRef.current = isConnected(message.connectionStatus);\n\n if (wasConnected && message.connectionStatus === \"disconnected\") {\n showNotification({\n content: <LostConnectionIndicator />,\n level: \"error\",\n type: \"workspace\",\n });\n } else if (!wasConnected && isConnectedRef.current) {\n hideNotification();\n }\n },\n [hideNotification, showNotification],\n );\n\n useMemo(async () => {\n if (serverUrl) {\n ConnectionManager.on(\"connection-status\", handleConnectionStatusChange);\n const connectionResult = await ConnectionManager.connect({\n token: user.token,\n url: serverUrl,\n username: user.username,\n });\n if (connectionResult === \"rejected\") {\n showNotification({\n level: \"error\",\n content: \"Unable to connect to VUU Server\",\n header: \"Error\",\n type: \"toast\",\n });\n }\n }\n }, [\n handleConnectionStatusChange,\n showNotification,\n serverUrl,\n user.token,\n user.username,\n ]);\n};\n"],"names":["useNotifications","useRef","useCallback","isConnected","LostConnectionIndicator","useMemo","ConnectionManager"],"mappings":";;;;;;;;AAcO,MAAM,sBAAsB,CAAC;AAAA,EAClC,SAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,EAAE,gBAAA,EAAkB,gBAAiB,EAAA,GAAIA,0BAAiB,EAAA;AAEhE,EAAM,MAAA,cAAA,GAAiBC,aAAO,KAAK,CAAA;AAEnC,EAAA,MAAM,4BAA+B,GAAAC,iBAAA;AAAA,IACnC,CAAC,OAAsC,KAAA;AACrC,MAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,cAAA;AAClC,MAAe,cAAA,CAAA,OAAA,GAAUC,yBAAY,CAAA,OAAA,CAAQ,gBAAgB,CAAA;AAE7D,MAAI,IAAA,YAAA,IAAgB,OAAQ,CAAA,gBAAA,KAAqB,cAAgB,EAAA;AAC/D,QAAiB,gBAAA,CAAA;AAAA,UACf,OAAA,iCAAUC,+CAAwB,EAAA,EAAA,CAAA;AAAA,UAClC,KAAO,EAAA,OAAA;AAAA,UACP,IAAM,EAAA;AAAA,SACP,CAAA;AAAA,OACQ,MAAA,IAAA,CAAC,YAAgB,IAAA,cAAA,CAAe,OAAS,EAAA;AAClD,QAAiB,gBAAA,EAAA;AAAA;AACnB,KACF;AAAA,IACA,CAAC,kBAAkB,gBAAgB;AAAA,GACrC;AAEA,EAAAC,aAAA,CAAQ,YAAY;AAClB,IAAA,IAAI,SAAW,EAAA;AACb,MAAkBC,+BAAA,CAAA,EAAA,CAAG,qBAAqB,4BAA4B,CAAA;AACtE,MAAM,MAAA,gBAAA,GAAmB,MAAMA,+BAAA,CAAkB,OAAQ,CAAA;AAAA,QACvD,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,GAAK,EAAA,SAAA;AAAA,QACL,UAAU,IAAK,CAAA;AAAA,OAChB,CAAA;AACD,MAAA,IAAI,qBAAqB,UAAY,EAAA;AACnC,QAAiB,gBAAA,CAAA;AAAA,UACf,KAAO,EAAA,OAAA;AAAA,UACP,OAAS,EAAA,iCAAA;AAAA,UACT,MAAQ,EAAA,OAAA;AAAA,UACR,IAAM,EAAA;AAAA,SACP,CAAA;AAAA;AACH;AACF,GACC,EAAA;AAAA,IACD,4BAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAK,CAAA,KAAA;AAAA,IACL,IAAK,CAAA;AAAA,GACN,CAAA;AACH;;;;"}
|
|
@@ -200,7 +200,7 @@ const useVuuMenuActions = ({
|
|
|
200
200
|
[dataSource]
|
|
201
201
|
);
|
|
202
202
|
const { showDialog, closeDialog, showPrompt } = vuuUiControls.useModal();
|
|
203
|
-
const showNotification = vuuPopups.useNotifications();
|
|
203
|
+
const { showNotification } = vuuPopups.useNotifications();
|
|
204
204
|
const showBulkEditDialog = react.useCallback(
|
|
205
205
|
(ds, table, columns) => {
|
|
206
206
|
const sessionDs = new VuuDataSource({
|
|
@@ -337,9 +337,10 @@ const useVuuMenuActions = ({
|
|
|
337
337
|
action: { message, title = "Success" }
|
|
338
338
|
} = rpcResponse;
|
|
339
339
|
showNotification({
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
header: title
|
|
340
|
+
level: "success",
|
|
341
|
+
content: message,
|
|
342
|
+
header: title,
|
|
343
|
+
type: "toast"
|
|
343
344
|
});
|
|
344
345
|
} else if (vuuUtils.isOpenBulkEditResponse(rpcResponse)) {
|
|
345
346
|
showBulkEditDialog(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVuuMenuActions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport {\n type ContextMenuItemDescriptor,\n isGroupMenuItemDescriptor,\n type MenuActionHandler,\n type MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport {\n DataSource,\n DataSourceRow,\n DataSourceVisualLinkCreatedMessage,\n RpcResponseHandler,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport type {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n LinkDescriptorWithLabel,\n OpenDialogAction,\n VuuDataRowDto,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BulkEditDialog,\n BulkEditPanel,\n isTableLocation,\n} from \"@vuu-ui/vuu-table\";\nimport type {\n ColumnDescriptor,\n TableContextMenuDef,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n dataSourceRowToDataRowDto,\n getLayoutComponent,\n hasShowNotificationAction,\n isActionMessage,\n isCustomComponentActionMessage,\n isOpenBulkEditResponse,\n isSessionTableActionMessage,\n metadataKeys,\n toColumnName,\n useData,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\nimport {\n FormConfig,\n FormFieldDescriptor,\n SessionEditingForm,\n} from \"../session-editing-form\";\nimport { useModal } from \"@vuu-ui/vuu-ui-controls\";\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: MenuActionHandler;\n dataSource?: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\nexport interface VuuCellContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n row: VuuDataRowDto;\n}\nexport interface VuuSelectedRowsContextMenuItemOptions extends VuuMenuItem {\n columns: ColumnDescriptor[];\n}\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (\n options: VuuMenuItem,\n): options is VuuCellContextMenuItemOptions => options.context === \"cell\";\n\nexport const isRowMenu = (\n options: VuuMenuItem,\n): options is VuuRowContextMenuItemOptions => options.context === \"row\";\n\nexport const isSelectionMenu = (\n options: VuuMenuItem,\n): options is VuuSelectedRowsContextMenuItemOptions =>\n options.context === \"selected-rows\";\n\nconst getColumnsFromOptions = (options: unknown) => {\n if (options && typeof options === \"object\" && \"columns\" in options) {\n return options.columns as VuuSelectedRowsContextMenuItemOptions[\"columns\"];\n }\n};\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst { KEY } = metadataKeys;\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: TableContextMenuOptions,\n) => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.column.name,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.column.name]],\n };\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: dataSourceRowToDataRowDto(options.row, options.columnMap),\n rowKey: options.row[KEY],\n };\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n };\n default:\n return menu;\n }\n};\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.column.name;\n }\n\n return true;\n};\n\nconst buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n id: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nconst keyFirst = (c1: FormFieldDescriptor, c2: FormFieldDescriptor) =>\n c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;\n\nconst defaultFormConfig = {\n fields: [],\n key: \"\",\n title: \"\",\n};\n\nconst configFromSchema = (schema?: TableSchema): FormConfig | undefined => {\n if (schema) {\n const { columns, key } = schema;\n return {\n key,\n title: `Parameters for command`,\n fields: columns\n .map((col) => ({\n description: col.name,\n label: col.name,\n name: col.name,\n type: col.serverDataType,\n isKeyField: col.name === key,\n }))\n .sort(keyFirst),\n };\n }\n};\n\nconst getFormConfig = (\n action: OpenDialogAction & { tableSchema: TableSchema },\n) => {\n const { tableSchema: schema } = action;\n const config = configFromSchema(schema) ?? defaultFormConfig;\n\n return {\n config,\n schema,\n };\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n}: VuuMenuActionHookProps): TableContextMenuDef => {\n const { VuuDataSource } = useData();\n const menuBuilder: MenuBuilder<TableMenuLocation, TableContextMenuOptions> =\n useCallback(\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource) {\n const { links, menu } = dataSource;\n const { visualLink } = dataSource;\n\n if (location === \"grid\" && links && !visualLink) {\n links.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n id: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (menu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptorFromVuuMenu(\n menu,\n location,\n options,\n );\n if (isRoot(menu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n } else {\n throw Error(\"useVuuMenuActions no dataSource provided\");\n }\n\n return descriptors;\n },\n [dataSource],\n );\n\n const { showDialog, closeDialog, showPrompt } = useModal();\n const showNotification = useNotifications();\n\n const showBulkEditDialog = useCallback(\n (ds: DataSource, table: VuuTable, columns?: ColumnDescriptor[]) => {\n const sessionDs = new VuuDataSource({\n columns: columns?.map(toColumnName),\n table,\n viewport: table.table,\n });\n\n const handleClose = () => {\n sessionDs.unsubscribe();\n closeDialog();\n };\n\n showDialog(\n <BulkEditDialog\n columns={columns}\n sessionDs={sessionDs}\n parentDs={ds}\n closeDialog={handleClose}\n />,\n \"Bulk Amend\",\n );\n\n return true;\n },\n [VuuDataSource, closeDialog, showDialog],\n );\n\n const showCustomComponentInDialog = useCallback(\n (componentId: string, ds: DataSource, table: VuuTable) => {\n const sessionDs = new VuuDataSource({\n columns: ds.columns,\n table,\n viewport: table.table,\n });\n\n const handleOpenChangePrompt = (open: boolean) => {\n if (!open) {\n ds.unsubscribe();\n }\n };\n\n const Component = getLayoutComponent(componentId);\n showPrompt(<Component dataSource={sessionDs} />, {\n title: \"Confirm operation on selected rows\",\n onOpenChange: handleOpenChangePrompt,\n });\n },\n [VuuDataSource, showPrompt],\n );\n\n const showSessionEditingForm = useCallback(\n (\n ds: DataSource,\n action: OpenDialogAction & { tableSchema: TableSchema },\n ) => {\n const { tableSchema } = action;\n if (tableSchema) {\n const formConfig = getFormConfig(action);\n showDialog(\n <SessionEditingForm {...formConfig} onClose={closeDialog} />,\n \"Set Parameters\",\n );\n }\n\n const sessionDs = ds.createSessionDataSource?.(action.table);\n const handleSubmit = () => {\n sessionDs?.rpcRequest?.({\n params: {},\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"RPC_REQUEST\",\n });\n closeDialog();\n };\n\n const handleChange = (isValid: boolean) => {\n console.log(\"placeholder: \", isValid);\n };\n\n if (sessionDs) {\n showDialog(\n <BulkEditPanel\n sessionDs={sessionDs}\n onSubmit={handleSubmit}\n parentDs={ds}\n onValidationStatusChange={handleChange}\n />,\n \"Multi Row Edit\",\n [\n <Button key=\"cancel\" onClick={closeDialog}>\n Cancel\n </Button>,\n <Button key=\"submit\" onClick={handleSubmit}>\n Save\n </Button>,\n ],\n );\n }\n },\n [closeDialog, showDialog],\n );\n\n const getMenuRpcRequest = (\n options: VuuMenuItem,\n ): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n };\n\n const menuActionHandler = useCallback<MenuActionHandler>(\n (menuItemId, options) => {\n if (clientSideMenuActionHandler?.(menuItemId, options)) {\n return true;\n } else if (menuItemId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as VuuMenuItem);\n\n dataSource\n ?.menuRpcCall(rpcRequest)\n .then((rpcResponse: Omit<VuuRpcResponse, \"requestId\">) => {\n if (rpcResponse) {\n if (onRpcResponse?.(rpcResponse) === true) {\n return true;\n }\n if (isActionMessage(rpcResponse)) {\n if (hasShowNotificationAction(rpcResponse)) {\n const {\n action: { message, title = \"Success\" },\n } = rpcResponse;\n showNotification({\n type: \"success\",\n body: message,\n header: title,\n });\n } else if (isOpenBulkEditResponse(rpcResponse)) {\n showBulkEditDialog(\n dataSource,\n rpcResponse.action.table,\n getColumnsFromOptions(options),\n );\n } else if (isSessionTableActionMessage(rpcResponse)) {\n showSessionEditingForm(dataSource, rpcResponse.action);\n } else if (isCustomComponentActionMessage(rpcResponse)) {\n showCustomComponentInDialog(\n rpcResponse.action.renderComponent,\n dataSource,\n rpcResponse.action.table,\n );\n }\n }\n }\n });\n return true;\n } else if (menuItemId === \"link-table\") {\n if (dataSource) {\n dataSource.visualLink = options as LinkDescriptorWithLabel;\n }\n return true;\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuItemId}`,\n );\n }\n\n return false;\n },\n [\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n showBulkEditDialog,\n showCustomComponentInDialog,\n showNotification,\n showSessionEditingForm,\n ],\n );\n\n return {\n menuBuilder,\n menuActionHandler,\n };\n};\n"],"names":["metadataKeys","dataSourceRowToDataRowDto","getFilterPredicate","useData","useCallback","isTableLocation","isGroupMenuItemDescriptor","useModal","useNotifications","toColumnName","jsx","BulkEditDialog","getLayoutComponent","SessionEditingForm","BulkEditPanel","Button","isActionMessage","hasShowNotificationAction","isOpenBulkEditResponse","isSessionTableActionMessage","isCustomComponentActionMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useVuuMenuActions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport {\n type ContextMenuItemDescriptor,\n isGroupMenuItemDescriptor,\n type MenuActionHandler,\n type MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport {\n DataSource,\n DataSourceRow,\n DataSourceVisualLinkCreatedMessage,\n RpcResponseHandler,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport type {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n LinkDescriptorWithLabel,\n OpenDialogAction,\n VuuDataRowDto,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n BulkEditDialog,\n BulkEditPanel,\n isTableLocation,\n} from \"@vuu-ui/vuu-table\";\nimport type {\n ColumnDescriptor,\n TableContextMenuDef,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n dataSourceRowToDataRowDto,\n getLayoutComponent,\n hasShowNotificationAction,\n isActionMessage,\n isCustomComponentActionMessage,\n isOpenBulkEditResponse,\n isSessionTableActionMessage,\n metadataKeys,\n toColumnName,\n useData,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\nimport {\n FormConfig,\n FormFieldDescriptor,\n SessionEditingForm,\n} from \"../session-editing-form\";\nimport { useModal } from \"@vuu-ui/vuu-ui-controls\";\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: MenuActionHandler;\n dataSource?: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\nexport interface VuuCellContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n row: VuuDataRowDto;\n}\nexport interface VuuSelectedRowsContextMenuItemOptions extends VuuMenuItem {\n columns: ColumnDescriptor[];\n}\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (\n options: VuuMenuItem,\n): options is VuuCellContextMenuItemOptions => options.context === \"cell\";\n\nexport const isRowMenu = (\n options: VuuMenuItem,\n): options is VuuRowContextMenuItemOptions => options.context === \"row\";\n\nexport const isSelectionMenu = (\n options: VuuMenuItem,\n): options is VuuSelectedRowsContextMenuItemOptions =>\n options.context === \"selected-rows\";\n\nconst getColumnsFromOptions = (options: unknown) => {\n if (options && typeof options === \"object\" && \"columns\" in options) {\n return options.columns as VuuSelectedRowsContextMenuItemOptions[\"columns\"];\n }\n};\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst { KEY } = metadataKeys;\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: TableContextMenuOptions,\n) => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.column.name,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.column.name]],\n };\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: dataSourceRowToDataRowDto(options.row, options.columnMap),\n rowKey: options.row[KEY],\n };\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n };\n default:\n return menu;\n }\n};\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0,\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options),\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length,\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.column.name;\n }\n\n return true;\n};\n\nconst buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n id: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options),\n )\n .filter(\n (childMenu) => childMenu !== undefined,\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nconst keyFirst = (c1: FormFieldDescriptor, c2: FormFieldDescriptor) =>\n c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;\n\nconst defaultFormConfig = {\n fields: [],\n key: \"\",\n title: \"\",\n};\n\nconst configFromSchema = (schema?: TableSchema): FormConfig | undefined => {\n if (schema) {\n const { columns, key } = schema;\n return {\n key,\n title: `Parameters for command`,\n fields: columns\n .map((col) => ({\n description: col.name,\n label: col.name,\n name: col.name,\n type: col.serverDataType,\n isKeyField: col.name === key,\n }))\n .sort(keyFirst),\n };\n }\n};\n\nconst getFormConfig = (\n action: OpenDialogAction & { tableSchema: TableSchema },\n) => {\n const { tableSchema: schema } = action;\n const config = configFromSchema(schema) ?? defaultFormConfig;\n\n return {\n config,\n schema,\n };\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n}: VuuMenuActionHookProps): TableContextMenuDef => {\n const { VuuDataSource } = useData();\n const menuBuilder: MenuBuilder<TableMenuLocation, TableContextMenuOptions> =\n useCallback(\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource) {\n const { links, menu } = dataSource;\n const { visualLink } = dataSource;\n\n if (location === \"grid\" && links && !visualLink) {\n links.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n id: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (menu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptorFromVuuMenu(\n menu,\n location,\n options,\n );\n if (isRoot(menu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n } else {\n throw Error(\"useVuuMenuActions no dataSource provided\");\n }\n\n return descriptors;\n },\n [dataSource],\n );\n\n const { showDialog, closeDialog, showPrompt } = useModal();\n const { showNotification } = useNotifications();\n\n const showBulkEditDialog = useCallback(\n (ds: DataSource, table: VuuTable, columns?: ColumnDescriptor[]) => {\n const sessionDs = new VuuDataSource({\n columns: columns?.map(toColumnName),\n table,\n viewport: table.table,\n });\n\n const handleClose = () => {\n sessionDs.unsubscribe();\n closeDialog();\n };\n\n showDialog(\n <BulkEditDialog\n columns={columns}\n sessionDs={sessionDs}\n parentDs={ds}\n closeDialog={handleClose}\n />,\n \"Bulk Amend\",\n );\n\n return true;\n },\n [VuuDataSource, closeDialog, showDialog],\n );\n\n const showCustomComponentInDialog = useCallback(\n (componentId: string, ds: DataSource, table: VuuTable) => {\n const sessionDs = new VuuDataSource({\n columns: ds.columns,\n table,\n viewport: table.table,\n });\n\n const handleOpenChangePrompt = (open: boolean) => {\n if (!open) {\n ds.unsubscribe();\n }\n };\n\n const Component = getLayoutComponent(componentId);\n showPrompt(<Component dataSource={sessionDs} />, {\n title: \"Confirm operation on selected rows\",\n onOpenChange: handleOpenChangePrompt,\n });\n },\n [VuuDataSource, showPrompt],\n );\n\n const showSessionEditingForm = useCallback(\n (\n ds: DataSource,\n action: OpenDialogAction & { tableSchema: TableSchema },\n ) => {\n const { tableSchema } = action;\n if (tableSchema) {\n const formConfig = getFormConfig(action);\n showDialog(\n <SessionEditingForm {...formConfig} onClose={closeDialog} />,\n \"Set Parameters\",\n );\n }\n\n const sessionDs = ds.createSessionDataSource?.(action.table);\n const handleSubmit = () => {\n sessionDs?.rpcRequest?.({\n params: {},\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"RPC_REQUEST\",\n });\n closeDialog();\n };\n\n const handleChange = (isValid: boolean) => {\n console.log(\"placeholder: \", isValid);\n };\n\n if (sessionDs) {\n showDialog(\n <BulkEditPanel\n sessionDs={sessionDs}\n onSubmit={handleSubmit}\n parentDs={ds}\n onValidationStatusChange={handleChange}\n />,\n \"Multi Row Edit\",\n [\n <Button key=\"cancel\" onClick={closeDialog}>\n Cancel\n </Button>,\n <Button key=\"submit\" onClick={handleSubmit}>\n Save\n </Button>,\n ],\n );\n }\n },\n [closeDialog, showDialog],\n );\n\n const getMenuRpcRequest = (\n options: VuuMenuItem,\n ): Omit<VuuRpcMenuRequest, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n };\n\n const menuActionHandler = useCallback<MenuActionHandler>(\n (menuItemId, options) => {\n if (clientSideMenuActionHandler?.(menuItemId, options)) {\n return true;\n } else if (menuItemId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as VuuMenuItem);\n\n dataSource\n ?.menuRpcCall(rpcRequest)\n .then((rpcResponse: Omit<VuuRpcResponse, \"requestId\">) => {\n if (rpcResponse) {\n if (onRpcResponse?.(rpcResponse) === true) {\n return true;\n }\n if (isActionMessage(rpcResponse)) {\n if (hasShowNotificationAction(rpcResponse)) {\n const {\n action: { message, title = \"Success\" },\n } = rpcResponse;\n showNotification({\n level: \"success\",\n content: message,\n header: title,\n type: \"toast\",\n });\n } else if (isOpenBulkEditResponse(rpcResponse)) {\n showBulkEditDialog(\n dataSource,\n rpcResponse.action.table,\n getColumnsFromOptions(options),\n );\n } else if (isSessionTableActionMessage(rpcResponse)) {\n showSessionEditingForm(dataSource, rpcResponse.action);\n } else if (isCustomComponentActionMessage(rpcResponse)) {\n showCustomComponentInDialog(\n rpcResponse.action.renderComponent,\n dataSource,\n rpcResponse.action.table,\n );\n }\n }\n }\n });\n return true;\n } else if (menuItemId === \"link-table\") {\n if (dataSource) {\n dataSource.visualLink = options as LinkDescriptorWithLabel;\n }\n return true;\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuItemId}`,\n );\n }\n\n return false;\n },\n [\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n showBulkEditDialog,\n showCustomComponentInDialog,\n showNotification,\n showSessionEditingForm,\n ],\n );\n\n return {\n menuBuilder,\n menuActionHandler,\n };\n};\n"],"names":["metadataKeys","dataSourceRowToDataRowDto","getFilterPredicate","useData","useCallback","isTableLocation","isGroupMenuItemDescriptor","useModal","useNotifications","toColumnName","jsx","BulkEditDialog","getLayoutComponent","SessionEditingForm","BulkEditPanel","Button","isActionMessage","hasShowNotificationAction","isOpenBulkEditResponse","isSessionTableActionMessage","isCustomComponentActionMessage"],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -7,13 +7,14 @@ var UnsavedChangesReport = require('./data-editing/UnsavedChangesReport.js');
|
|
|
7
7
|
var useEditForm = require('./data-editing/useEditForm.js');
|
|
8
8
|
var formEditState = require('./data-editing/form-edit-state.js');
|
|
9
9
|
var VuuDataSourceProvider = require('./datasource-provider/VuuDataSourceProvider.js');
|
|
10
|
-
var useLookupValues = require('./hooks/useLookupValues.js');
|
|
11
10
|
var useSessionDataSource = require('./hooks/useSessionDataSource.js');
|
|
12
11
|
var useVuuMenuActions = require('./hooks/useVuuMenuActions.js');
|
|
13
12
|
var useVuuTables = require('./hooks/useVuuTables.js');
|
|
14
13
|
var useVisualLinks = require('./hooks/useVisualLinks.js');
|
|
15
14
|
var useTypeaheadSuggestions = require('./hooks/useTypeaheadSuggestions.js');
|
|
16
15
|
var SessionEditingForm = require('./session-editing-form/SessionEditingForm.js');
|
|
16
|
+
var useLookupValues = require('./hooks/useLookupValues.js');
|
|
17
|
+
var useRemoteConnection = require('./hooks/useRemoteConnection.js');
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
|
|
@@ -27,7 +28,6 @@ exports.useEditForm = useEditForm.useEditForm;
|
|
|
27
28
|
exports.CLEAN_FORM = formEditState.CLEAN_FORM;
|
|
28
29
|
exports.buildFormEditState = formEditState.buildFormEditState;
|
|
29
30
|
exports.VuuDataSourceProvider = VuuDataSourceProvider.VuuDataSourceProvider;
|
|
30
|
-
exports.useLookupValues = useLookupValues.useLookupValues;
|
|
31
31
|
exports.useSessionDataSource = useSessionDataSource.useSessionDataSource;
|
|
32
32
|
exports.isRowMenu = useVuuMenuActions.isRowMenu;
|
|
33
33
|
exports.isSelectionMenu = useVuuMenuActions.isSelectionMenu;
|
|
@@ -37,4 +37,6 @@ exports.useVisualLinks = useVisualLinks.useVisualLinks;
|
|
|
37
37
|
exports.getTypeaheadParams = useTypeaheadSuggestions.getTypeaheadParams;
|
|
38
38
|
exports.useTypeaheadSuggestions = useTypeaheadSuggestions.useTypeaheadSuggestions;
|
|
39
39
|
exports.SessionEditingForm = SessionEditingForm.SessionEditingForm;
|
|
40
|
+
exports.useLookupValues = useLookupValues.useLookupValues;
|
|
41
|
+
exports.useRemoteConnection = useRemoteConnection.useRemoteConnection;
|
|
40
42
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var workspaceNotificationCss = ".vuuLostConnectionIndicator {\n\n --spinner-color: var(--vuuSpinner-color, #E23434);\n\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-300);\n justify-content: center;\n\n\n .vuuLostConnectionIndicator-spinner {\n animation: spinner-rounded-comet-anim 1.0s infinite linear;\n width: 75px;\n height: 75px;\n border-radius: 50%;\n background: radial-gradient(farthest-side,var(--spinner-color) 94%,#0000) top/9px 9px no-repeat,\n conic-gradient(#0000 30%,var(--spinner-color));\n mask: radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 0);\n }\n}\n\n@keyframes spinner-rounded-comet-anim {\n 100% {\n transform: rotate(1turn);\n }\n}\n\n\n\n";
|
|
4
|
+
|
|
5
|
+
module.exports = workspaceNotificationCss;
|
|
6
|
+
//# sourceMappingURL=LostConnectionIndicator.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LostConnectionIndicator.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var LostConnectionIndicator$1 = require('./LostConnectionIndicator.css.js');
|
|
7
|
+
|
|
8
|
+
const classBase = "vuuLostConnectionIndicator";
|
|
9
|
+
const LostConnectionIndicator = () => {
|
|
10
|
+
const targetWindow = window.useWindow();
|
|
11
|
+
styles.useComponentCssInjection({
|
|
12
|
+
testId: "vuu-toast-notification",
|
|
13
|
+
css: LostConnectionIndicator$1,
|
|
14
|
+
window: targetWindow
|
|
15
|
+
});
|
|
16
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classBase, children: [
|
|
17
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${classBase}-title`, children: "CONNECTION LOST" }),
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-spinner` }),
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: `${classBase}-status`, children: "RECONNECTING" })
|
|
20
|
+
] });
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.LostConnectionIndicator = LostConnectionIndicator;
|
|
24
|
+
//# sourceMappingURL=LostConnectionIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LostConnectionIndicator.js","sources":["../../../../packages/vuu-data-react/src/lost-connection-indicator/LostConnectionIndicator.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport workspaceNotificationCss from \"./LostConnectionIndicator.css\";\n\nconst classBase = \"vuuLostConnectionIndicator\";\n\nexport const LostConnectionIndicator = () => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toast-notification\",\n css: workspaceNotificationCss,\n window: targetWindow,\n });\n\n return (\n <div className={classBase}>\n <h2 className={`${classBase}-title`}>CONNECTION LOST</h2>\n <div className={`${classBase}-spinner`} />\n <h3 className={`${classBase}-status`}>RECONNECTING</h3>\n </div>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","workspaceNotificationCss","jsxs","jsx"],"mappings":";;;;;;;AAKA,MAAM,SAAY,GAAA,4BAAA;AAEX,MAAM,0BAA0B,MAAM;AAC3C,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,yBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAAC,eAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,SACd,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAU,QAAe,EAAA,iBAAA,EAAA,CAAA;AAAA,oBACnDA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAY,QAAA,CAAA,EAAA,CAAA;AAAA,mCACvC,IAAG,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,WAAW,QAAY,EAAA,cAAA,EAAA;AAAA,GACpD,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { VuuInput, VuuTimePicker, VuuDatePicker, VuuTypeaheadInput } from '@vuu-ui/vuu-ui-controls';
|
|
3
3
|
import { isTimeDataValue, asTimeString, isDateTimeDataValue } from '@vuu-ui/vuu-utils';
|
|
4
|
+
import { ToggleFilter } from '@vuu-ui/vuu-filters';
|
|
4
5
|
|
|
5
6
|
const getDataItemEditControl = ({
|
|
6
7
|
InputProps: InputProps2,
|
|
@@ -12,6 +13,7 @@ const getDataItemEditControl = ({
|
|
|
12
13
|
errorMessage,
|
|
13
14
|
onCommit,
|
|
14
15
|
table,
|
|
16
|
+
values,
|
|
15
17
|
variant
|
|
16
18
|
}) => {
|
|
17
19
|
const handleCommitNumber = (evt, value) => {
|
|
@@ -53,19 +55,34 @@ const getDataItemEditControl = ({
|
|
|
53
55
|
}
|
|
54
56
|
);
|
|
55
57
|
} else if (dataDescriptor.serverDataType === "string" && table) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
if (variant === "toggle" && values?.length) {
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
60
|
+
ToggleFilter,
|
|
61
|
+
{
|
|
62
|
+
className,
|
|
63
|
+
column: dataDescriptor.name,
|
|
64
|
+
"data-edit-control": true,
|
|
65
|
+
onCommit,
|
|
66
|
+
table,
|
|
67
|
+
values,
|
|
68
|
+
value: InputProps2?.inputProps?.value ?? "all"
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
} else {
|
|
72
|
+
return /* @__PURE__ */ jsx(
|
|
73
|
+
VuuTypeaheadInput,
|
|
74
|
+
{
|
|
75
|
+
...InputProps2,
|
|
76
|
+
...TypeaheadProps,
|
|
77
|
+
className,
|
|
78
|
+
column: dataDescriptor.name,
|
|
79
|
+
"data-edit-control": true,
|
|
80
|
+
"data-variant": dataVariant,
|
|
81
|
+
onCommit,
|
|
82
|
+
table
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
69
86
|
}
|
|
70
87
|
return /* @__PURE__ */ jsx(
|
|
71
88
|
VuuInput,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-data-item-edit-control.js","sources":["../../../../packages/vuu-data-react/src/data-editing/get-data-item-edit-control.tsx"],"sourcesContent":["import type {\n DataValueDescriptor,\n TableSchemaTable,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuDatePicker,\n VuuInput,\n VuuTimePicker,\n VuuTypeaheadInput,\n VuuTypeaheadInputProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n CommitHandler,\n isDateTimeDataValue,\n isTimeDataValue,\n} from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { asTimeString } from \"@vuu-ui/vuu-utils\";\n\n/**\n * variant can be used to provide a rendering hint to the filter control rendered.\n * 'toggle' for A ToggleButtonGroup, only suitable for up to 3 value choices\n * 'search' to render a search icon and require at least one character to be entered.\n * 'pick' to show a dropdown list, even before any text is entered, best for smaller lists\n */\nexport type FilterControlVariant = \"search\" | \"pick\" | \"toggle\";\nexport interface DataItemEditControlProps {\n InputProps?: Partial<InputProps>;\n TypeaheadProps?: Pick<\n VuuTypeaheadInputProps,\n | \"highlightFirstSuggestion\"\n | \"minCharacterCountToTriggerSuggestions\"\n | \"selectOnTab\"\n >;\n className?: string;\n commitOnBlur?: boolean;\n commitWhenCleared?: boolean;\n /**\n * A table column or form field Descriptor.\n */\n dataDescriptor: DataValueDescriptor;\n errorMessage?: string;\n onCommit: CommitHandler<HTMLElement>;\n table?: TableSchemaTable;\n variant?: FilterControlVariant;\n}\n\nexport type ValidationStatus = \"initial\" | true | string;\n\nexport const getDataItemEditControl = ({\n InputProps,\n TypeaheadProps,\n className,\n commitOnBlur,\n commitWhenCleared,\n dataDescriptor,\n errorMessage,\n onCommit,\n table,\n variant,\n}: DataItemEditControlProps) => {\n const handleCommitNumber: CommitHandler<HTMLElement, number> = (\n evt,\n value,\n ) => {\n onCommit(evt, value.toString());\n };\n\n const dataVariant = variant && variant !== \"toggle\" ? variant : undefined;\n\n if (dataDescriptor.editable === false) {\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n onCommit={onCommit}\n readOnly\n data-edit-control\n />\n );\n } else if (isTimeDataValue(dataDescriptor)) {\n if (InputProps?.inputProps) {\n const { value, onChange } = InputProps.inputProps;\n return (\n <VuuTimePicker\n className={className}\n value={asTimeString(value, true)}\n onChange={onChange}\n onCommit={onCommit}\n data-edit-control\n />\n );\n }\n } else if (isDateTimeDataValue(dataDescriptor)) {\n return (\n <VuuDatePicker\n className={className}\n onCommit={handleCommitNumber}\n data-edit-control\n />\n );\n } else if (dataDescriptor.serverDataType === \"string\" && table) {\n return (\n <VuuTypeaheadInput\n
|
|
1
|
+
{"version":3,"file":"get-data-item-edit-control.js","sources":["../../../../packages/vuu-data-react/src/data-editing/get-data-item-edit-control.tsx"],"sourcesContent":["import type {\n DataValueDescriptor,\n TableSchemaTable,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuDatePicker,\n VuuInput,\n VuuTimePicker,\n VuuTypeaheadInput,\n VuuTypeaheadInputProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n CommitHandler,\n isDateTimeDataValue,\n isTimeDataValue,\n} from \"@vuu-ui/vuu-utils\";\nimport { InputProps } from \"@salt-ds/core\";\nimport { asTimeString } from \"@vuu-ui/vuu-utils\";\nimport { ToggleFilter } from \"@vuu-ui/vuu-filters\";\n\n/**\n * variant can be used to provide a rendering hint to the filter control rendered.\n * 'toggle' for A ToggleButtonGroup, only suitable for up to 3 value choices\n * 'search' to render a search icon and require at least one character to be entered.\n * 'pick' to show a dropdown list, even before any text is entered, best for smaller lists\n */\nexport type FilterControlVariant = \"search\" | \"pick\" | \"toggle\";\nexport interface DataItemEditControlProps {\n InputProps?: Partial<InputProps>;\n TypeaheadProps?: Pick<\n VuuTypeaheadInputProps,\n | \"highlightFirstSuggestion\"\n | \"minCharacterCountToTriggerSuggestions\"\n | \"selectOnTab\"\n >;\n className?: string;\n commitOnBlur?: boolean;\n commitWhenCleared?: boolean;\n /**\n * A table column or form field Descriptor.\n */\n dataDescriptor: DataValueDescriptor;\n errorMessage?: string;\n onCommit: CommitHandler<HTMLElement>;\n table?: TableSchemaTable;\n /**\n * Where provided, only these values will be offered as suggestions.\n * They will be validated against server with Typeahead service, so\n * unavailable options are not offered.\n * Recommended for toggle filters, not usually necessary for other\n * filter variants.\n */\n values?: string[];\n variant?: FilterControlVariant;\n}\n\nexport type ValidationStatus = \"initial\" | true | string;\n\nexport const getDataItemEditControl = ({\n InputProps,\n TypeaheadProps,\n className,\n commitOnBlur,\n commitWhenCleared,\n dataDescriptor,\n errorMessage,\n onCommit,\n table,\n values,\n variant,\n}: DataItemEditControlProps) => {\n const handleCommitNumber: CommitHandler<HTMLElement, number> = (\n evt,\n value,\n ) => {\n onCommit(evt, value.toString());\n };\n\n const dataVariant = variant && variant !== \"toggle\" ? variant : undefined;\n\n if (dataDescriptor.editable === false) {\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n onCommit={onCommit}\n readOnly\n data-edit-control\n />\n );\n } else if (isTimeDataValue(dataDescriptor)) {\n if (InputProps?.inputProps) {\n const { value, onChange } = InputProps.inputProps;\n return (\n <VuuTimePicker\n className={className}\n value={asTimeString(value, true)}\n onChange={onChange}\n onCommit={onCommit}\n data-edit-control\n />\n );\n }\n } else if (isDateTimeDataValue(dataDescriptor)) {\n return (\n <VuuDatePicker\n className={className}\n onCommit={handleCommitNumber}\n data-edit-control\n />\n );\n } else if (dataDescriptor.serverDataType === \"string\" && table) {\n if (variant === \"toggle\" && values?.length) {\n return (\n <ToggleFilter\n className={className}\n column={dataDescriptor.name}\n data-edit-control\n onCommit={onCommit}\n table={table}\n values={values}\n value={InputProps?.inputProps?.value ?? \"all\"}\n />\n );\n } else {\n return (\n <VuuTypeaheadInput\n {...InputProps}\n {...TypeaheadProps}\n className={className}\n column={dataDescriptor.name}\n data-edit-control\n data-variant={dataVariant}\n onCommit={onCommit}\n table={table}\n />\n );\n }\n }\n\n return (\n <VuuInput\n variant=\"secondary\"\n {...InputProps}\n className={className}\n commitOnBlur={commitOnBlur}\n commitWhenCleared={commitWhenCleared}\n onCommit={onCommit}\n errorMessage={errorMessage}\n data-edit-control\n />\n );\n};\n"],"names":["InputProps"],"mappings":";;;;;AA0DO,MAAM,yBAAyB,CAAC;AAAA,EACrC,UAAAA,EAAAA,WAAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAC9B,EAAM,MAAA,kBAAA,GAAyD,CAC7D,GAAA,EACA,KACG,KAAA;AACH,IAAS,QAAA,CAAA,GAAA,EAAK,KAAM,CAAA,QAAA,EAAU,CAAA;AAAA,GAChC;AAEA,EAAA,MAAM,WAAc,GAAA,OAAA,IAAW,OAAY,KAAA,QAAA,GAAW,OAAU,GAAA,KAAA,CAAA;AAEhE,EAAI,IAAA,cAAA,CAAe,aAAa,KAAO,EAAA;AACrC,IACE,uBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,WAAA;AAAA,QACP,GAAGA,WAAAA;AAAA,QACJ,QAAA;AAAA,QACA,QAAQ,EAAA,IAAA;AAAA,QACR,mBAAiB,EAAA;AAAA;AAAA,KACnB;AAAA,GAEJ,MAAA,IAAW,eAAgB,CAAA,cAAc,CAAG,EAAA;AAC1C,IAAA,IAAIA,aAAY,UAAY,EAAA;AAC1B,MAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAIA,WAAW,CAAA,UAAA;AACvC,MACE,uBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,KAAA,EAAO,YAAa,CAAA,KAAA,EAAO,IAAI,CAAA;AAAA,UAC/B,QAAA;AAAA,UACA,QAAA;AAAA,UACA,mBAAiB,EAAA;AAAA;AAAA,OACnB;AAAA;AAEJ,GACF,MAAA,IAAW,mBAAoB,CAAA,cAAc,CAAG,EAAA;AAC9C,IACE,uBAAA,GAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,QAAU,EAAA,kBAAA;AAAA,QACV,mBAAiB,EAAA;AAAA;AAAA,KACnB;AAAA,GAEO,MAAA,IAAA,cAAA,CAAe,cAAmB,KAAA,QAAA,IAAY,KAAO,EAAA;AAC9D,IAAI,IAAA,OAAA,KAAY,QAAY,IAAA,MAAA,EAAQ,MAAQ,EAAA;AAC1C,MACE,uBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,QAAQ,cAAe,CAAA,IAAA;AAAA,UACvB,mBAAiB,EAAA,IAAA;AAAA,UACjB,QAAA;AAAA,UACA,KAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA,EAAOA,WAAY,EAAA,UAAA,EAAY,KAAS,IAAA;AAAA;AAAA,OAC1C;AAAA,KAEG,MAAA;AACL,MACE,uBAAA,GAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAGA,WAAAA;AAAA,UACH,GAAG,cAAA;AAAA,UACJ,SAAA;AAAA,UACA,QAAQ,cAAe,CAAA,IAAA;AAAA,UACvB,mBAAiB,EAAA,IAAA;AAAA,UACjB,cAAc,EAAA,WAAA;AAAA,UACd,QAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA;AAEJ;AAGF,EACE,uBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,WAAA;AAAA,MACP,GAAGA,WAAAA;AAAA,MACJ,SAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAiB,EAAA;AAAA;AAAA,GACnB;AAEJ;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { isConnected, ConnectionManager } from '@vuu-ui/vuu-data-remote';
|
|
3
|
+
import { useRef, useCallback, useMemo } from 'react';
|
|
4
|
+
import { useNotifications } from '@vuu-ui/vuu-popups';
|
|
5
|
+
import { LostConnectionIndicator } from '../lost-connection-indicator/LostConnectionIndicator.js';
|
|
6
|
+
|
|
7
|
+
const useRemoteConnection = ({
|
|
8
|
+
serverUrl,
|
|
9
|
+
user
|
|
10
|
+
}) => {
|
|
11
|
+
const { hideNotification, showNotification } = useNotifications();
|
|
12
|
+
const isConnectedRef = useRef(false);
|
|
13
|
+
const handleConnectionStatusChange = useCallback(
|
|
14
|
+
(message) => {
|
|
15
|
+
const { current: wasConnected } = isConnectedRef;
|
|
16
|
+
isConnectedRef.current = isConnected(message.connectionStatus);
|
|
17
|
+
if (wasConnected && message.connectionStatus === "disconnected") {
|
|
18
|
+
showNotification({
|
|
19
|
+
content: /* @__PURE__ */ jsx(LostConnectionIndicator, {}),
|
|
20
|
+
level: "error",
|
|
21
|
+
type: "workspace"
|
|
22
|
+
});
|
|
23
|
+
} else if (!wasConnected && isConnectedRef.current) {
|
|
24
|
+
hideNotification();
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
[hideNotification, showNotification]
|
|
28
|
+
);
|
|
29
|
+
useMemo(async () => {
|
|
30
|
+
if (serverUrl) {
|
|
31
|
+
ConnectionManager.on("connection-status", handleConnectionStatusChange);
|
|
32
|
+
const connectionResult = await ConnectionManager.connect({
|
|
33
|
+
token: user.token,
|
|
34
|
+
url: serverUrl,
|
|
35
|
+
username: user.username
|
|
36
|
+
});
|
|
37
|
+
if (connectionResult === "rejected") {
|
|
38
|
+
showNotification({
|
|
39
|
+
level: "error",
|
|
40
|
+
content: "Unable to connect to VUU Server",
|
|
41
|
+
header: "Error",
|
|
42
|
+
type: "toast"
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}, [
|
|
47
|
+
handleConnectionStatusChange,
|
|
48
|
+
showNotification,
|
|
49
|
+
serverUrl,
|
|
50
|
+
user.token,
|
|
51
|
+
user.username
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { useRemoteConnection };
|
|
56
|
+
//# sourceMappingURL=useRemoteConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRemoteConnection.js","sources":["../../../../packages/vuu-data-react/src/hooks/useRemoteConnection.tsx"],"sourcesContent":["import {\n ConnectionManager,\n WebSocketConnectionState,\n isConnected,\n} from \"@vuu-ui/vuu-data-remote\";\nimport type { VuuUser } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { useNotifications } from \"@vuu-ui/vuu-popups\";\nimport { LostConnectionIndicator } from \"../lost-connection-indicator/LostConnectionIndicator\";\n\nexport interface RemoteConnectionHookProps {\n serverUrl?: string;\n user: VuuUser;\n}\nexport const useRemoteConnection = ({\n serverUrl,\n user,\n}: RemoteConnectionHookProps) => {\n const { hideNotification, showNotification } = useNotifications();\n\n const isConnectedRef = useRef(false);\n\n const handleConnectionStatusChange = useCallback(\n (message: WebSocketConnectionState) => {\n const { current: wasConnected } = isConnectedRef;\n isConnectedRef.current = isConnected(message.connectionStatus);\n\n if (wasConnected && message.connectionStatus === \"disconnected\") {\n showNotification({\n content: <LostConnectionIndicator />,\n level: \"error\",\n type: \"workspace\",\n });\n } else if (!wasConnected && isConnectedRef.current) {\n hideNotification();\n }\n },\n [hideNotification, showNotification],\n );\n\n useMemo(async () => {\n if (serverUrl) {\n ConnectionManager.on(\"connection-status\", handleConnectionStatusChange);\n const connectionResult = await ConnectionManager.connect({\n token: user.token,\n url: serverUrl,\n username: user.username,\n });\n if (connectionResult === \"rejected\") {\n showNotification({\n level: \"error\",\n content: \"Unable to connect to VUU Server\",\n header: \"Error\",\n type: \"toast\",\n });\n }\n }\n }, [\n handleConnectionStatusChange,\n showNotification,\n serverUrl,\n user.token,\n user.username,\n ]);\n};\n"],"names":[],"mappings":";;;;;;AAcO,MAAM,sBAAsB,CAAC;AAAA,EAClC,SAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,EAAE,gBAAA,EAAkB,gBAAiB,EAAA,GAAI,gBAAiB,EAAA;AAEhE,EAAM,MAAA,cAAA,GAAiB,OAAO,KAAK,CAAA;AAEnC,EAAA,MAAM,4BAA+B,GAAA,WAAA;AAAA,IACnC,CAAC,OAAsC,KAAA;AACrC,MAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,cAAA;AAClC,MAAe,cAAA,CAAA,OAAA,GAAU,WAAY,CAAA,OAAA,CAAQ,gBAAgB,CAAA;AAE7D,MAAI,IAAA,YAAA,IAAgB,OAAQ,CAAA,gBAAA,KAAqB,cAAgB,EAAA;AAC/D,QAAiB,gBAAA,CAAA;AAAA,UACf,OAAA,sBAAU,uBAAwB,EAAA,EAAA,CAAA;AAAA,UAClC,KAAO,EAAA,OAAA;AAAA,UACP,IAAM,EAAA;AAAA,SACP,CAAA;AAAA,OACQ,MAAA,IAAA,CAAC,YAAgB,IAAA,cAAA,CAAe,OAAS,EAAA;AAClD,QAAiB,gBAAA,EAAA;AAAA;AACnB,KACF;AAAA,IACA,CAAC,kBAAkB,gBAAgB;AAAA,GACrC;AAEA,EAAA,OAAA,CAAQ,YAAY;AAClB,IAAA,IAAI,SAAW,EAAA;AACb,MAAkB,iBAAA,CAAA,EAAA,CAAG,qBAAqB,4BAA4B,CAAA;AACtE,MAAM,MAAA,gBAAA,GAAmB,MAAM,iBAAA,CAAkB,OAAQ,CAAA;AAAA,QACvD,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,GAAK,EAAA,SAAA;AAAA,QACL,UAAU,IAAK,CAAA;AAAA,OAChB,CAAA;AACD,MAAA,IAAI,qBAAqB,UAAY,EAAA;AACnC,QAAiB,gBAAA,CAAA;AAAA,UACf,KAAO,EAAA,OAAA;AAAA,UACP,OAAS,EAAA,iCAAA;AAAA,UACT,MAAQ,EAAA,OAAA;AAAA,UACR,IAAM,EAAA;AAAA,SACP,CAAA;AAAA;AACH;AACF,GACC,EAAA;AAAA,IACD,4BAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAK,CAAA,KAAA;AAAA,IACL,IAAK,CAAA;AAAA,GACN,CAAA;AACH;;;;"}
|
|
@@ -198,7 +198,7 @@ const useVuuMenuActions = ({
|
|
|
198
198
|
[dataSource]
|
|
199
199
|
);
|
|
200
200
|
const { showDialog, closeDialog, showPrompt } = useModal();
|
|
201
|
-
const showNotification = useNotifications();
|
|
201
|
+
const { showNotification } = useNotifications();
|
|
202
202
|
const showBulkEditDialog = useCallback(
|
|
203
203
|
(ds, table, columns) => {
|
|
204
204
|
const sessionDs = new VuuDataSource({
|
|
@@ -335,9 +335,10 @@ const useVuuMenuActions = ({
|
|
|
335
335
|
action: { message, title = "Success" }
|
|
336
336
|
} = rpcResponse;
|
|
337
337
|
showNotification({
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
header: title
|
|
338
|
+
level: "success",
|
|
339
|
+
content: message,
|
|
340
|
+
header: title,
|
|
341
|
+
type: "toast"
|
|
341
342
|
});
|
|
342
343
|
} else if (isOpenBulkEditResponse(rpcResponse)) {
|
|
343
344
|
showBulkEditDialog(
|