@vuu-ui/vuu-utils 2.1.14 → 2.1.15

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.
Files changed (85) hide show
  1. package/cjs/node_modules/@dnd-kit/react/hooks.js +17 -17
  2. package/cjs/node_modules/@dnd-kit/react/hooks.js.map +1 -1
  3. package/cjs/node_modules/@dnd-kit/react/index.js +24 -24
  4. package/cjs/node_modules/@dnd-kit/react/index.js.map +1 -1
  5. package/cjs/node_modules/@dnd-kit/react/sortable.js +5 -5
  6. package/cjs/node_modules/@dnd-kit/react/sortable.js.map +1 -1
  7. package/cjs/packages/vuu-utils/src/ShellContext.js +3 -3
  8. package/cjs/packages/vuu-utils/src/ShellContext.js.map +1 -1
  9. package/cjs/packages/vuu-utils/src/ThemeProvider.js +10 -10
  10. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  11. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js +2 -2
  12. package/cjs/packages/vuu-utils/src/context-definitions/DataContext.js.map +1 -1
  13. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js +4 -4
  14. package/cjs/packages/vuu-utils/src/context-definitions/DataProvider.js.map +1 -1
  15. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js +5 -5
  16. package/cjs/packages/vuu-utils/src/context-definitions/DataSourceProvider.js.map +1 -1
  17. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +3 -3
  18. package/cjs/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -1
  19. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js +5 -5
  20. package/cjs/packages/vuu-utils/src/data-editing/DataEditingProvider.js.map +1 -1
  21. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +12 -15
  22. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -1
  23. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js +52 -130
  24. package/cjs/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -1
  25. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js +1 -32
  26. package/cjs/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -1
  27. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js +15 -23
  28. package/cjs/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -1
  29. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js +3 -2
  30. package/cjs/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
  31. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +3 -3
  32. package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -1
  33. package/cjs/packages/vuu-utils/src/date/date-utils.js +2 -2
  34. package/cjs/packages/vuu-utils/src/date/date-utils.js.map +1 -1
  35. package/cjs/packages/vuu-utils/src/date/formatter.js +2 -2
  36. package/cjs/packages/vuu-utils/src/date/formatter.js.map +1 -1
  37. package/cjs/packages/vuu-utils/src/feature-utils.js +2 -2
  38. package/cjs/packages/vuu-utils/src/feature-utils.js.map +1 -1
  39. package/cjs/packages/vuu-utils/src/index.js +2 -9
  40. package/cjs/packages/vuu-utils/src/index.js.map +1 -1
  41. package/cjs/packages/vuu-utils/src/protocol-message-utils.js +0 -10
  42. package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
  43. package/cjs/packages/vuu-utils/src/react-utils.js +8 -8
  44. package/cjs/packages/vuu-utils/src/react-utils.js.map +1 -1
  45. package/cjs/packages/vuu-utils/src/theme-utils.js +3 -3
  46. package/cjs/packages/vuu-utils/src/theme-utils.js.map +1 -1
  47. package/cjs/packages/vuu-utils/src/useId.js +2 -2
  48. package/cjs/packages/vuu-utils/src/useId.js.map +1 -1
  49. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js +3 -3
  50. package/cjs/packages/vuu-utils/src/useLayoutEffectSkipFirst.js.map +1 -1
  51. package/cjs/packages/vuu-utils/src/useResizeObserver.js +5 -5
  52. package/cjs/packages/vuu-utils/src/useResizeObserver.js.map +1 -1
  53. package/cjs/packages/vuu-utils/src/useStateRef.js +4 -4
  54. package/cjs/packages/vuu-utils/src/useStateRef.js.map +1 -1
  55. package/esm/packages/vuu-utils/src/ThemeProvider.js +2 -2
  56. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  57. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +2 -2
  58. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -1
  59. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +4 -7
  60. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -1
  61. package/esm/packages/vuu-utils/src/data-editing/EditSession.js +53 -130
  62. package/esm/packages/vuu-utils/src/data-editing/EditSession.js.map +1 -1
  63. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js +2 -32
  64. package/esm/packages/vuu-utils/src/data-editing/edit-utils.js.map +1 -1
  65. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js +9 -17
  66. package/esm/packages/vuu-utils/src/data-editing/useEditableTable.js.map +1 -1
  67. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js +1 -0
  68. package/esm/packages/vuu-utils/src/datasource/BaseDataSource.js.map +1 -1
  69. package/esm/packages/vuu-utils/src/feature-utils.js +2 -2
  70. package/esm/packages/vuu-utils/src/feature-utils.js.map +1 -1
  71. package/esm/packages/vuu-utils/src/index.js +3 -3
  72. package/esm/packages/vuu-utils/src/protocol-message-utils.js +1 -6
  73. package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
  74. package/package.json +6 -6
  75. package/types/data-editing/EditButtons.d.ts +1 -1
  76. package/types/data-editing/EditSession.d.ts +6 -30
  77. package/types/data-editing/edit-utils.d.ts +0 -2
  78. package/types/data-editing/useEditableTable.d.ts +1 -1
  79. package/types/filters/filter-utils.d.ts +1 -2
  80. package/types/index.d.ts +2 -3
  81. package/types/protocol-message-utils.d.ts +1 -6
  82. package/cjs/packages/vuu-utils/dist/index.js +0 -6004
  83. package/cjs/packages/vuu-utils/dist/index.js.map +0 -1
  84. package/esm/packages/vuu-utils/dist/index.js +0 -5979
  85. package/esm/packages/vuu-utils/dist/index.js.map +0 -1
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
5
- var __WEBPACK_EXTERNAL_MODULE_clsx__ = require('clsx');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var cx = require('clsx');
6
6
 
7
7
  const DEFAULT_DENSITY = "medium";
8
8
  const DEFAULT_THEME = "salt-theme";
9
9
  const DEFAULT_THEME_MODE = "light";
10
- const ThemeContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext({
10
+ const ThemeContext = React.createContext({
11
11
  density: "high",
12
12
  theme: "vuu",
13
13
  themeMode: "light"
@@ -18,7 +18,7 @@ const DEFAULT_THEME_ATTRIBUTES = [
18
18
  "light"
19
19
  ];
20
20
  const useThemeAttributes = (themeAttributes) => {
21
- const context = __WEBPACK_EXTERNAL_MODULE_react__.useContext(ThemeContext);
21
+ const context = React.useContext(ThemeContext);
22
22
  if (themeAttributes) {
23
23
  return [
24
24
  themeAttributes.themeClass,
@@ -35,9 +35,9 @@ const useThemeAttributes = (themeAttributes) => {
35
35
  return DEFAULT_THEME_ATTRIBUTES;
36
36
  };
37
37
  const createThemedChildren = (children, theme, themeMode, density) => {
38
- if (__WEBPACK_EXTERNAL_MODULE_react__.isValidElement(children)) {
39
- return __WEBPACK_EXTERNAL_MODULE_react__.cloneElement(children, {
40
- className: __WEBPACK_EXTERNAL_MODULE_clsx__(
38
+ if (React.isValidElement(children)) {
39
+ return React.cloneElement(children, {
40
+ className: cx(
41
41
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
42
42
  children.props?.className,
43
43
  `${theme}-theme`,
@@ -67,12 +67,12 @@ const ThemeProvider = ({
67
67
  density: inheritedDensity,
68
68
  themeMode: inheritedThemeMode,
69
69
  theme: inheritedTheme
70
- } = __WEBPACK_EXTERNAL_MODULE_react__.useContext(ThemeContext);
70
+ } = React.useContext(ThemeContext);
71
71
  const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;
72
72
  const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;
73
73
  const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;
74
74
  const themedChildren = applyThemeClasses ? createThemedChildren(children, theme, themeMode, density) : children;
75
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(ThemeContext.Provider, { value: { themeMode, density, theme }, children: themedChildren });
75
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeContext.Provider, { value: { themeMode, density, theme }, children: themedChildren });
76
76
  };
77
77
  ThemeProvider.displayName = "ThemeProvider";
78
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sources":["../../../../../../packages/vuu-utils/src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","cx","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA;AACjC,MAAM,aAAgB,GAAA;AACtB,MAAM,kBAAgC,GAAA;AAYtC,MAAM,eAAeA,+CAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAC;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,6CAAW,YAAY,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA;AAAA,KAClB;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAA,aAAA,EAAgB,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC/B,OAAQ,CAAA;AAAA,KACV;AAAA;AAEF,EAAO,OAAA,wBAAA;AACT;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAAC,gDAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAOC,+CAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAAC,gCAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,gBAAgB,OAAO,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA;AAAA,iDAAA;AAAA,KAEF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT,GAAIH,6CAAW,YAAY,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA;AAEJ,EACE,uBAAAI,iDAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
1
+ {"version":3,"file":"ThemeProvider.js","sources":["../../../../../../packages/vuu-utils/src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA;AACjC,MAAM,aAAgB,GAAA;AACtB,MAAM,kBAAgC,GAAA;AAYtC,MAAM,eAAeA,mBAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAC;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,iBAAW,YAAY,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA;AAAA,KAClB;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAA,aAAA,EAAgB,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC/B,OAAQ,CAAA;AAAA,KACV;AAAA;AAEF,EAAO,OAAA,wBAAA;AACT;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAAC,oBAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAA,EAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,gBAAgB,OAAO,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA;AAAA,iDAAA;AAAA,KAEF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT,GAAIF,iBAAW,YAAY,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA;AAEJ,EACE,uBAAAG,cAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var React = require('react');
4
4
 
5
5
  const getServerAPI = () => {
6
6
  throw Error("no DataProvider has been installed");
@@ -10,7 +10,7 @@ class NullDataSourceConstructor {
10
10
  throw Error("no DataProvider has been installed");
11
11
  }
12
12
  }
13
- const DataContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext({
13
+ const DataContext = React.createContext({
14
14
  isLocalData: false,
15
15
  getServerAPI,
16
16
  VuuDataSource: NullDataSourceConstructor
@@ -1 +1 @@
1
- {"version":3,"file":"DataContext.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataContext.tsx"],"sourcesContent":["import type {\n DataSource,\n DataSourceConstructorProps,\n ServerAPI,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataContextProps {\n VuuDataSource: DataSourceConstructor;\n isLocalData: boolean;\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\" | \"rpcCall\">\n >;\n /**\n * A tableSchema would normally be requested via the serverAPI.\n * schemas can be injected, in which case these 'local' schemas\n * will be returned from the getTableSchema API call.\n * The key is formed from concatenation of module and tableName\n * from VuuTable e.g 'SIMUL:instruments'\n */\n tableSchemas?: Record<string, TableSchema>;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataProvider has been installed\");\n};\n\nexport class NullDataSourceConstructor {\n constructor(_: DataSourceConstructorProps) {\n throw Error(\"no DataProvider has been installed\");\n }\n}\n\nexport const DataContext = createContext<DataContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSourceConstructor as DataSourceConstructor,\n});\n"],"names":["createContext"],"mappings":";;;;AA4BA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,oCAAoC,CAAA;AAClD,CAAA;AAEO,MAAM,yBAA0B,CAAA;AAAA,EACrC,YAAY,CAA+B,EAAA;AACzC,IAAA,MAAM,MAAM,oCAAoC,CAAA;AAAA;AAEpD;AAEO,MAAM,cAAcA,+CAAgC,CAAA;AAAA,EACzD,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA;AACjB,CAAC;;;;;"}
1
+ {"version":3,"file":"DataContext.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataContext.tsx"],"sourcesContent":["import type {\n DataSource,\n DataSourceConstructorProps,\n ServerAPI,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataContextProps {\n VuuDataSource: DataSourceConstructor;\n isLocalData: boolean;\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\" | \"rpcCall\">\n >;\n /**\n * A tableSchema would normally be requested via the serverAPI.\n * schemas can be injected, in which case these 'local' schemas\n * will be returned from the getTableSchema API call.\n * The key is formed from concatenation of module and tableName\n * from VuuTable e.g 'SIMUL:instruments'\n */\n tableSchemas?: Record<string, TableSchema>;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataProvider has been installed\");\n};\n\nexport class NullDataSourceConstructor {\n constructor(_: DataSourceConstructorProps) {\n throw Error(\"no DataProvider has been installed\");\n }\n}\n\nexport const DataContext = createContext<DataContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSourceConstructor as DataSourceConstructor,\n});\n"],"names":["createContext"],"mappings":";;;;AA4BA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,oCAAoC,CAAA;AAClD,CAAA;AAEO,MAAM,yBAA0B,CAAA;AAAA,EACrC,YAAY,CAA+B,EAAA;AACzC,IAAA,MAAM,MAAM,oCAAoC,CAAA;AAAA;AAEpD;AAEO,MAAM,cAAcA,mBAAgC,CAAA;AAAA,EACzD,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA;AACjB,CAAC;;;;;"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
5
  var DataContext = require('./DataContext.js');
6
6
 
7
7
  const DataProvider = ({
@@ -10,9 +10,9 @@ const DataProvider = ({
10
10
  isLocalData = true,
11
11
  VuuDataSource
12
12
  }) => {
13
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(DataContext.DataContext.Provider, { value: { isLocalData, VuuDataSource, getServerAPI }, children });
13
+ return /* @__PURE__ */ jsxRuntime.jsx(DataContext.DataContext.Provider, { value: { isLocalData, VuuDataSource, getServerAPI }, children });
14
14
  };
15
- const useData = () => __WEBPACK_EXTERNAL_MODULE_react__.useContext(DataContext.DataContext);
15
+ const useData = () => React.useContext(DataContext.DataContext);
16
16
 
17
17
  exports.DataProvider = DataProvider;
18
18
  exports.useData = useData;
@@ -1 +1 @@
1
- {"version":3,"file":"DataProvider.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataProvider.tsx"],"sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { DataContext, DataContextProps } from \"./DataContext\";\n\nexport const DataProvider = ({\n children,\n getServerAPI,\n isLocalData = true,\n VuuDataSource,\n}: Omit<DataContextProps, \"isLocalData\"> & {\n children: ReactNode;\n isLocalData?: boolean;\n}) => {\n return (\n <DataContext.Provider value={{ isLocalData, VuuDataSource, getServerAPI }}>\n {children}\n </DataContext.Provider>\n );\n};\n\nexport const useData = () => useContext(DataContext);\n"],"names":["jsx","DataContext","useContext"],"mappings":";;;;;;AAGO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd;AACF,CAGM,KAAA;AACJ,EACE,uBAAAA,iDAAA,CAACC,uBAAY,CAAA,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,WAAa,EAAA,aAAA,EAAe,YAAa,EAAA,EACrE,QACH,EAAA,CAAA;AAEJ;AAEa,MAAA,OAAA,GAAU,MAAMC,4CAAA,CAAWD,uBAAW;;;;;"}
1
+ {"version":3,"file":"DataProvider.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataProvider.tsx"],"sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { DataContext, DataContextProps } from \"./DataContext\";\n\nexport const DataProvider = ({\n children,\n getServerAPI,\n isLocalData = true,\n VuuDataSource,\n}: Omit<DataContextProps, \"isLocalData\"> & {\n children: ReactNode;\n isLocalData?: boolean;\n}) => {\n return (\n <DataContext.Provider value={{ isLocalData, VuuDataSource, getServerAPI }}>\n {children}\n </DataContext.Provider>\n );\n};\n\nexport const useData = () => useContext(DataContext);\n"],"names":["jsx","DataContext","useContext"],"mappings":";;;;;;AAGO,MAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAc,GAAA,IAAA;AAAA,EACd;AACF,CAGM,KAAA;AACJ,EACE,uBAAAA,cAAA,CAACC,uBAAY,CAAA,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,WAAa,EAAA,aAAA,EAAe,YAAa,EAAA,EACrE,QACH,EAAA,CAAA;AAEJ;AAEa,MAAA,OAAA,GAAU,MAAMC,gBAAA,CAAWD,uBAAW;;;;;"}
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
5
 
6
- const DataSourceContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext({
6
+ const DataSourceContext = React.createContext({
7
7
  dataSource: void 0
8
8
  });
9
9
  const DataSourceProvider = ({
10
10
  children,
11
11
  dataSource
12
12
  }) => {
13
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(DataSourceContext.Provider, { value: { dataSource }, children });
13
+ return /* @__PURE__ */ jsxRuntime.jsx(DataSourceContext.Provider, { value: { dataSource }, children });
14
14
  };
15
15
  function useDataSource(throwIfNoDataSource = false) {
16
- const { dataSource } = __WEBPACK_EXTERNAL_MODULE_react__.useContext(DataSourceContext);
16
+ const { dataSource } = React.useContext(DataSourceContext);
17
17
  if (dataSource) {
18
18
  return dataSource;
19
19
  } else if (throwIfNoDataSource) {
@@ -1 +1 @@
1
- {"version":3,"file":"DataSourceProvider.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataSourceProvider.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { createContext, ReactNode, useContext } from \"react\";\n\nexport interface DataSourceContextProps {\n dataSource?: DataSource;\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n dataSource: undefined,\n});\n\nexport const DataSourceProvider = ({\n children,\n dataSource,\n}: {\n children: ReactNode;\n dataSource: DataSource;\n}) => {\n return (\n <DataSourceContext.Provider value={{ dataSource }}>\n {children}\n </DataSourceContext.Provider>\n );\n};\n\nexport function useDataSource(throwIfNoDataSource: true): DataSource;\nexport function useDataSource(\n throwIfNoDataSource: false | undefined,\n): DataSource | undefined;\nexport function useDataSource(throwIfNoDataSource = false) {\n const { dataSource } = useContext(DataSourceContext);\n if (dataSource) {\n return dataSource;\n } else if (throwIfNoDataSource) {\n throw Error(\n `[DataSOurceProvider] useDataSource,no DataSourceProvider has been declared `,\n );\n } else {\n console.warn(\n `[DataSourceProvider] useDataSource: no DataSourceProvider has been declared`,\n );\n }\n}\n"],"names":["createContext","jsx","useContext"],"mappings":";;;;;AAOO,MAAM,oBAAoBA,+CAAsC,CAAA;AAAA,EACrE,UAAY,EAAA,KAAA;AACd,CAAC;AAEM,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAAC,iDAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,UAAA,IAClC,QACH,EAAA,CAAA;AAEJ;AAMgB,SAAA,aAAA,CAAc,sBAAsB,KAAO,EAAA;AACzD,EAAA,MAAM,EAAE,UAAA,EAAe,GAAAC,4CAAA,CAAW,iBAAiB,CAAA;AACnD,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,OAAA,UAAA;AAAA,aACE,mBAAqB,EAAA;AAC9B,IAAM,MAAA,KAAA;AAAA,MACJ,CAAA,2EAAA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAA,2EAAA;AAAA,KACF;AAAA;AAEJ;;;;;;"}
1
+ {"version":3,"file":"DataSourceProvider.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/DataSourceProvider.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { createContext, ReactNode, useContext } from \"react\";\n\nexport interface DataSourceContextProps {\n dataSource?: DataSource;\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n dataSource: undefined,\n});\n\nexport const DataSourceProvider = ({\n children,\n dataSource,\n}: {\n children: ReactNode;\n dataSource: DataSource;\n}) => {\n return (\n <DataSourceContext.Provider value={{ dataSource }}>\n {children}\n </DataSourceContext.Provider>\n );\n};\n\nexport function useDataSource(throwIfNoDataSource: true): DataSource;\nexport function useDataSource(\n throwIfNoDataSource: false | undefined,\n): DataSource | undefined;\nexport function useDataSource(throwIfNoDataSource = false) {\n const { dataSource } = useContext(DataSourceContext);\n if (dataSource) {\n return dataSource;\n } else if (throwIfNoDataSource) {\n throw Error(\n `[DataSOurceProvider] useDataSource,no DataSourceProvider has been declared `,\n );\n } else {\n console.warn(\n `[DataSourceProvider] useDataSource: no DataSourceProvider has been declared`,\n );\n }\n}\n"],"names":["createContext","jsx","useContext"],"mappings":";;;;;AAOO,MAAM,oBAAoBA,mBAAsC,CAAA;AAAA,EACrE,UAAY,EAAA,KAAA;AACd,CAAC;AAEM,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EACE,uBAAAC,cAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,UAAA,IAClC,QACH,EAAA,CAAA;AAEJ;AAMgB,SAAA,aAAA,CAAc,sBAAsB,KAAO,EAAA;AACzD,EAAA,MAAM,EAAE,UAAA,EAAe,GAAAC,gBAAA,CAAW,iBAAiB,CAAA;AACnD,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,OAAA,UAAA;AAAA,aACE,mBAAqB,EAAA;AAC9B,IAAM,MAAA,KAAA;AAAA,MACJ,CAAA,2EAAA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAA,2EAAA;AAAA,KACF;AAAA;AAEJ;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var React = require('react');
4
4
 
5
- const WorkspaceContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext({
5
+ const WorkspaceContext = React.createContext({
6
6
  getApplicationSettings: () => void 0,
7
7
  layoutMetadata: [],
8
8
  saveLayout: () => void 0,
@@ -11,7 +11,7 @@ const WorkspaceContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext({
11
11
  loadLayoutById: () => void 0
12
12
  });
13
13
  const usePlaceholderJSON = () => {
14
- const { layoutPlaceholderJSON } = __WEBPACK_EXTERNAL_MODULE_react__.useContext(WorkspaceContext);
14
+ const { layoutPlaceholderJSON } = React.useContext(WorkspaceContext);
15
15
  return layoutPlaceholderJSON;
16
16
  };
17
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceContext.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/WorkspaceContext.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport {\n ApplicationSetting,\n ApplicationSettings,\n LayoutJSON\n} from \"../json-types\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"../layout-types\";\n\nexport interface WorkspaceContextProps {\n layoutMetadata: LayoutMetadata[];\n layoutPlaceholderJSON?: LayoutJSON;\n getApplicationSettings: (\n key?: keyof ApplicationSettings\n ) => ApplicationSettings | ApplicationSetting | undefined;\n loadLayoutById: (id: string) => void;\n saveApplicationSettings: (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => void;\n saveLayout: (n: LayoutMetadataDto) => void;\n saveApplicationLayout: (layout: LayoutJSON) => void;\n workspaceJSON?: LayoutJSON | LayoutJSON[];\n}\n\nexport const WorkspaceContext = React.createContext<WorkspaceContextProps>({\n getApplicationSettings: () => undefined,\n layoutMetadata: [],\n saveLayout: () => undefined,\n saveApplicationLayout: () => undefined,\n saveApplicationSettings: () => undefined,\n loadLayoutById: () => undefined\n});\n\nexport const usePlaceholderJSON = () => {\n const { layoutPlaceholderJSON } = useContext(WorkspaceContext);\n return layoutPlaceholderJSON;\n};\n"],"names":["React","useContext"],"mappings":";;;;AAwBa,MAAA,gBAAA,GAAmBA,kCAAM,aAAqC,CAAA;AAAA,EACzE,wBAAwB,MAAM,KAAA,CAAA;AAAA,EAC9B,gBAAgB,EAAC;AAAA,EACjB,YAAY,MAAM,KAAA,CAAA;AAAA,EAClB,uBAAuB,MAAM,KAAA,CAAA;AAAA,EAC7B,yBAAyB,MAAM,KAAA,CAAA;AAAA,EAC/B,gBAAgB,MAAM,KAAA;AACxB,CAAC;AAEM,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM,EAAE,qBAAA,EAA0B,GAAAC,4CAAA,CAAW,gBAAgB,CAAA;AAC7D,EAAO,OAAA,qBAAA;AACT;;;;;"}
1
+ {"version":3,"file":"WorkspaceContext.js","sources":["../../../../../../../packages/vuu-utils/src/context-definitions/WorkspaceContext.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport {\n ApplicationSetting,\n ApplicationSettings,\n LayoutJSON\n} from \"../json-types\";\nimport { LayoutMetadata, LayoutMetadataDto } from \"../layout-types\";\n\nexport interface WorkspaceContextProps {\n layoutMetadata: LayoutMetadata[];\n layoutPlaceholderJSON?: LayoutJSON;\n getApplicationSettings: (\n key?: keyof ApplicationSettings\n ) => ApplicationSettings | ApplicationSetting | undefined;\n loadLayoutById: (id: string) => void;\n saveApplicationSettings: (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings\n ) => void;\n saveLayout: (n: LayoutMetadataDto) => void;\n saveApplicationLayout: (layout: LayoutJSON) => void;\n workspaceJSON?: LayoutJSON | LayoutJSON[];\n}\n\nexport const WorkspaceContext = React.createContext<WorkspaceContextProps>({\n getApplicationSettings: () => undefined,\n layoutMetadata: [],\n saveLayout: () => undefined,\n saveApplicationLayout: () => undefined,\n saveApplicationSettings: () => undefined,\n loadLayoutById: () => undefined\n});\n\nexport const usePlaceholderJSON = () => {\n const { layoutPlaceholderJSON } = useContext(WorkspaceContext);\n return layoutPlaceholderJSON;\n};\n"],"names":["useContext"],"mappings":";;;;AAwBa,MAAA,gBAAA,GAAmB,MAAM,aAAqC,CAAA;AAAA,EACzE,wBAAwB,MAAM,KAAA,CAAA;AAAA,EAC9B,gBAAgB,EAAC;AAAA,EACjB,YAAY,MAAM,KAAA,CAAA;AAAA,EAClB,uBAAuB,MAAM,KAAA,CAAA;AAAA,EAC7B,yBAAyB,MAAM,KAAA,CAAA;AAAA,EAC/B,gBAAgB,MAAM,KAAA;AACxB,CAAC;AAEM,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM,EAAE,qBAAA,EAA0B,GAAAA,gBAAA,CAAW,gBAAgB,CAAA;AAC7D,EAAO,OAAA,qBAAA;AACT;;;;;"}
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
5
 
6
- const DataEditingContext = __WEBPACK_EXTERNAL_MODULE_react__.createContext(void 0);
6
+ const DataEditingContext = React.createContext(void 0);
7
7
  const DataEditingProvider = ({
8
8
  children,
9
9
  editSession
10
10
  }) => {
11
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(DataEditingContext.Provider, { value: editSession, children });
11
+ return /* @__PURE__ */ jsxRuntime.jsx(DataEditingContext.Provider, { value: editSession, children });
12
12
  };
13
13
  function useEditSession(throwIfUnavailable = false) {
14
- const editSession = __WEBPACK_EXTERNAL_MODULE_react__.useContext(DataEditingContext);
14
+ const editSession = React.useContext(DataEditingContext);
15
15
  if (editSession === void 0) {
16
16
  if (throwIfUnavailable) {
17
17
  throw Error(
@@ -1 +1 @@
1
- {"version":3,"file":"DataEditingProvider.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/DataEditingProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from \"react\";\nimport { EditSession } from \"./EditSession\";\n\nconst DataEditingContext = createContext<EditSession | undefined>(undefined);\n\nexport const DataEditingProvider = ({\n children,\n editSession,\n}: {\n children: ReactNode;\n editSession: EditSession;\n}) => {\n return (\n <DataEditingContext.Provider value={editSession}>\n {children}\n </DataEditingContext.Provider>\n );\n};\n\nexport function useEditSession(\n throwIfUnavailable?: false,\n): EditSession | undefined;\nexport function useEditSession(throwIfUnavailable: true): EditSession;\nexport function useEditSession(throwIfUnavailable = false) {\n const editSession = useContext(DataEditingContext);\n if (editSession === undefined) {\n if (throwIfUnavailable) {\n throw Error(\n \"[useEditSession] no DataEditingContext in scope. You need to enclose editable component(s) with DataEditingProvider\",\n );\n }\n } else {\n return editSession;\n }\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;AAGA,MAAM,kBAAA,GAAqBA,gDAAuC,KAAS,CAAA,CAAA;AAEpE,MAAM,sBAAsB,CAAC;AAAA,EAClC,QAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,yEACG,kBAAmB,CAAA,QAAA,EAAnB,EAA4B,KAAA,EAAO,aACjC,QACH,EAAA,CAAA;AAEJ;AAMgB,SAAA,cAAA,CAAe,qBAAqB,KAAO,EAAA;AACzD,EAAM,MAAA,WAAA,GAAcC,6CAAW,kBAAkB,CAAA;AACjD,EAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAM,MAAA,KAAA;AAAA,QACJ;AAAA,OACF;AAAA;AACF,GACK,MAAA;AACL,IAAO,OAAA,WAAA;AAAA;AAEX;;;;;"}
1
+ {"version":3,"file":"DataEditingProvider.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/DataEditingProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from \"react\";\nimport { EditSession } from \"./EditSession\";\n\nconst DataEditingContext = createContext<EditSession | undefined>(undefined);\n\nexport const DataEditingProvider = ({\n children,\n editSession,\n}: {\n children: ReactNode;\n editSession: EditSession;\n}) => {\n return (\n <DataEditingContext.Provider value={editSession}>\n {children}\n </DataEditingContext.Provider>\n );\n};\n\nexport function useEditSession(\n throwIfUnavailable?: false,\n): EditSession | undefined;\nexport function useEditSession(throwIfUnavailable: true): EditSession;\nexport function useEditSession(throwIfUnavailable = false) {\n const editSession = useContext(DataEditingContext);\n if (editSession === undefined) {\n if (throwIfUnavailable) {\n throw Error(\n \"[useEditSession] no DataEditingContext in scope. You need to enclose editable component(s) with DataEditingProvider\",\n );\n }\n } else {\n return editSession;\n }\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;AAGA,MAAM,kBAAA,GAAqBA,oBAAuC,KAAS,CAAA,CAAA;AAEpE,MAAM,sBAAsB,CAAC;AAAA,EAClC,QAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,sCACG,kBAAmB,CAAA,QAAA,EAAnB,EAA4B,KAAA,EAAO,aACjC,QACH,EAAA,CAAA;AAEJ;AAMgB,SAAA,cAAA,CAAe,qBAAqB,KAAO,EAAA;AACzD,EAAM,MAAA,WAAA,GAAcC,iBAAW,kBAAkB,CAAA;AACjD,EAAA,IAAI,gBAAgB,KAAW,CAAA,EAAA;AAC7B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAM,MAAA,KAAA;AAAA,QACJ;AAAA,OACF;AAAA;AACF,GACK,MAAA;AACL,IAAO,OAAA,WAAA;AAAA;AAEX;;;;;"}
@@ -1,32 +1,29 @@
1
1
  'use strict';
2
2
 
3
- var __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__ = require('react/jsx-runtime');
4
- var __WEBPACK_EXTERNAL_MODULE__salt_ds_core__ = require('@salt-ds/core');
5
- var __WEBPACK_EXTERNAL_MODULE_react__ = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var React = require('react');
6
6
 
7
7
  const EditButtons = ({
8
8
  editSession,
9
9
  onCancel,
10
10
  onSave
11
11
  }) => {
12
- const [editState, setEditState] = __WEBPACK_EXTERNAL_MODULE_react__.useState("clean");
13
- const handleSave = __WEBPACK_EXTERNAL_MODULE_react__.useCallback(() => {
14
- onSave(editState === "stale");
15
- }, [editState, onSave]);
16
- __WEBPACK_EXTERNAL_MODULE_react__.useMemo(() => {
12
+ const [editState, setEditState] = React.useState("clean");
13
+ React.useMemo(() => {
17
14
  editSession?.on("editState", setEditState);
18
15
  }, [editSession]);
19
- return /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsxs(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.Fragment, { children: [
20
- /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(
21
- __WEBPACK_EXTERNAL_MODULE__salt_ds_core__.Button,
16
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17
+ /* @__PURE__ */ jsxRuntime.jsx(
18
+ core.Button,
22
19
  {
23
- disabled: editState === "clean" || editState === "invalid",
24
- onClick: handleSave,
20
+ disabled: editState === "clean",
21
+ onClick: onSave,
25
22
  sentiment: "accented",
26
- children: editState === "stale" ? "Save (force)" : "Save"
23
+ children: "Save"
27
24
  }
28
25
  ),
29
- /* @__PURE__ */ __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime__.jsx(__WEBPACK_EXTERNAL_MODULE__salt_ds_core__.Button, { onClick: onCancel, children: "Cancel" })
26
+ /* @__PURE__ */ jsxRuntime.jsx(core.Button, { onClick: onCancel, children: "Cancel" })
30
27
  ] });
31
28
  };
32
29
 
@@ -1 +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, useMemo, useState } from \"react\";\n\nexport interface EditButtonProps {\n editSession?: EditSession;\n onCancel: () => void;\n onSave: (force?: boolean) => void;\n}\n\nexport const EditButtons = ({\n editSession,\n onCancel,\n onSave,\n}: EditButtonProps) => {\n const [editState, setEditState] = useState<EditState>(\"clean\");\n\n const handleSave = useCallback(() => {\n onSave(editState === \"stale\");\n }, [editState, onSave]);\n\n useMemo(() => {\n editSession?.on(\"editState\", setEditState);\n }, [editSession]);\n\n return (\n <>\n <Button\n disabled={editState === \"clean\" || editState === \"invalid\"}\n onClick={handleSave}\n sentiment=\"accented\"\n >\n {editState === \"stale\" ? \"Save (force)\" : \"Save\"}\n </Button>\n <Button onClick={onCancel}>Cancel</Button>\n </>\n );\n};\n"],"names":["useState","useCallback","useMemo","jsxs","Fragment","jsx","Button"],"mappings":";;;;;;AAUO,MAAM,cAAc,CAAC;AAAA,EAC1B,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAuB,KAAA;AACrB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,2CAAoB,OAAO,CAAA;AAE7D,EAAM,MAAA,UAAA,GAAaC,8CAAY,MAAM;AACnC,IAAA,MAAA,CAAO,cAAc,OAAO,CAAA;AAAA,GAC3B,EAAA,CAAC,SAAW,EAAA,MAAM,CAAC,CAAA;AAEtB,EAAAC,yCAAA,CAAQ,MAAM;AACZ,IAAa,WAAA,EAAA,EAAA,CAAG,aAAa,YAAY,CAAA;AAAA,GAC3C,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEIC,kDAAA,CAAAC,sDAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAC,iDAAA;AAAA,MAACC,gDAAA;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,QAAA,EAAA,SAAA,KAAc,UAAU,cAAiB,GAAA;AAAA;AAAA,KAC5C;AAAA,oBACCD,iDAAA,CAAAC,gDAAA,EAAA,EAAO,OAAS,EAAA,QAAA,EAAU,QAAM,EAAA,QAAA,EAAA;AAAA,GACnC,EAAA,CAAA;AAEJ;;;;"}
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 { useMemo, useState } from \"react\";\n\nexport interface EditButtonProps {\n editSession?: EditSession;\n onCancel: () => void;\n onSave: () => void;\n}\n\nexport const EditButtons = ({\n editSession,\n onCancel,\n onSave,\n}: EditButtonProps) => {\n const [editState, setEditState] = useState<EditState>(\"clean\");\n\n useMemo(() => {\n editSession?.on(\"editState\", setEditState);\n }, [editSession]);\n\n return (\n <>\n <Button\n disabled={editState === \"clean\"}\n onClick={onSave}\n sentiment=\"accented\"\n >\n Save\n </Button>\n <Button onClick={onCancel}>Cancel</Button>\n </>\n );\n};\n"],"names":["useState","useMemo","jsxs","Fragment","jsx","Button"],"mappings":";;;;;;AAUO,MAAM,cAAc,CAAC;AAAA,EAC1B,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAuB,KAAA;AACrB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAoB,OAAO,CAAA;AAE7D,EAAAC,aAAA,CAAQ,MAAM;AACZ,IAAa,WAAA,EAAA,EAAA,CAAG,aAAa,YAAY,CAAA;AAAA,GAC3C,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEIC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACC,WAAA;AAAA,MAAA;AAAA,QACC,UAAU,SAAc,KAAA,OAAA;AAAA,QACxB,OAAS,EAAA,MAAA;AAAA,QACT,SAAU,EAAA,UAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,oBACCD,cAAA,CAAAC,WAAA,EAAA,EAAO,OAAS,EAAA,QAAA,EAAU,QAAM,EAAA,QAAA,EAAA;AAAA,GACnC,EAAA,CAAA;AAEJ;;;;"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var eventEmitter = require('../event-emitter.js');
4
- var index = require('../../dist/index.js');
5
4
 
6
5
  var __typeError = (msg) => {
7
6
  throw TypeError(msg);
@@ -10,28 +9,26 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
10
9
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
11
10
  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);
12
11
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
- var _rowEdits, _editCount, _invalidCount, _sourceTableDataSource, _sessionDataSource, _inEditMode;
14
- class StaleUpdateError extends Error {
15
- }
12
+ var _active, _rowEdits, _editCount, _sourceTableDataSource, _sessionDataSource, _inEditMode;
16
13
  class EditSession extends eventEmitter.EventEmitter {
17
14
  constructor(dataSource) {
18
15
  super();
16
+ __privateAdd(this, _active, false);
19
17
  /**
20
18
  * Row key => row edits
21
19
  */
22
20
  __privateAdd(this, _rowEdits, /* @__PURE__ */ new Map());
23
21
  __privateAdd(this, _editCount, 0);
24
- __privateAdd(this, _invalidCount, 0);
25
22
  __privateAdd(this, _sourceTableDataSource);
26
23
  __privateAdd(this, _sessionDataSource);
27
24
  __privateAdd(this, _inEditMode, false);
28
25
  __privateSet(this, _sourceTableDataSource, dataSource);
29
- dataSource.on("remote-update-during-local-edit", (rows) => {
30
- console.log(
31
- `source table updated via another channel, whilst we have an inline edit session in progress`,
32
- { rows }
33
- );
34
- });
26
+ }
27
+ get active() {
28
+ return __privateGet(this, _active);
29
+ }
30
+ set active(isActive) {
31
+ __privateSet(this, _active, isActive);
35
32
  }
36
33
  get editCount() {
37
34
  return __privateGet(this, _editCount);
@@ -47,51 +44,22 @@ class EditSession extends eventEmitter.EventEmitter {
47
44
  }
48
45
  }
49
46
  }
50
- get invalidCount() {
51
- return __privateGet(this, _invalidCount);
52
- }
53
- set invalidCount(val) {
54
- if (val !== __privateGet(this, _invalidCount)) {
55
- const oldCount = __privateGet(this, _invalidCount);
56
- __privateSet(this, _invalidCount, val);
57
- if (val === 0) {
58
- this.emit("editState", __privateGet(this, _editCount) === 0 ? "clean" : "dirty");
59
- } else if (oldCount === 0) {
60
- this.emit("editState", "invalid");
61
- }
62
- }
63
- }
64
47
  clear() {
65
48
  __privateGet(this, _rowEdits).clear();
66
49
  __privateSet(this, _editCount, 0);
67
- __privateSet(this, _inEditMode, false);
68
50
  }
69
51
  async begin(editSessionMode) {
70
- try {
71
- __privateSet(this, _inEditMode, true);
72
- const sessionDataSource = await __privateGet(this, _sourceTableDataSource)?.beginEditSession?.(editSessionMode);
73
- __privateSet(this, _sessionDataSource, sessionDataSource);
74
- return sessionDataSource;
75
- } catch (e) {
76
- __privateSet(this, _inEditMode, false);
77
- }
52
+ __privateSet(this, _inEditMode, true);
53
+ const sessionDataSource = await __privateGet(this, _sourceTableDataSource)?.beginEditSession?.(editSessionMode);
54
+ __privateSet(this, _sessionDataSource, sessionDataSource);
55
+ return sessionDataSource;
78
56
  }
79
57
  get dataSource() {
80
58
  return __privateGet(this, _sessionDataSource) ?? __privateGet(this, _sourceTableDataSource);
81
59
  }
82
- async end(saveChanges = false, force = false) {
83
- try {
84
- if (__privateGet(this, _inEditMode)) {
85
- await this.dataSource?.endEditSession?.(saveChanges, force);
86
- this.clear();
87
- }
88
- } catch (e) {
89
- if (e instanceof StaleUpdateError) {
90
- this.emit("editState", "stale");
91
- } else {
92
- console.error(`[EditSession] ${e.message}`);
93
- }
94
- }
60
+ async end(saveChanges = false) {
61
+ await this.dataSource?.endEditSession?.(saveChanges);
62
+ this.clear();
95
63
  }
96
64
  get inEditMode() {
97
65
  return __privateGet(this, _inEditMode);
@@ -99,111 +67,65 @@ class EditSession extends eventEmitter.EventEmitter {
99
67
  get editState() {
100
68
  return this.editCount === 0 ? "clean" : "dirty";
101
69
  }
102
- getRowEdits(key) {
70
+ // TODO how do we deal with the '_edited' pattern
71
+ edit(key, columnName, originalValue, newValue) {
103
72
  const rowEditDetails = __privateGet(this, _rowEdits).get(key);
104
73
  if (rowEditDetails) {
105
- return rowEditDetails;
106
- } else {
107
- const rowEditDetails2 = {
108
- cellEdits: /* @__PURE__ */ new Map()
109
- };
110
- __privateGet(this, _rowEdits).set(key, rowEditDetails2);
111
- return rowEditDetails2;
112
- }
113
- }
114
- storeCellEdit(cellEdits, column, originalValue, editedValue, isValid) {
115
- const cellEdit = cellEdits.get(column);
116
- if (cellEdit) {
117
- if (isValid && cellEdit.isValid === false) {
118
- cellEdit.isValid = true;
119
- this.invalidCount -= 1;
120
- }
121
- return cellEdit;
122
- } else {
123
- const cellEdit2 = {
124
- originalValue,
125
- editedValue,
126
- isValid
127
- };
128
- cellEdits.set(column, cellEdit2);
129
- this.editCount = __privateGet(this, _editCount) + 1;
130
- return cellEdit2;
131
- }
132
- }
133
- /**
134
- * Apply incremental edit(s) to edit control value. Used for TextInput, where multiple
135
- * edits may follow in sequence before value finally committed.
136
- *
137
- * @param key value for edited Row
138
- * @param columnName
139
- * @param originalValue
140
- * @param newValue
141
- */
142
- edit(key, columnName, originalValue, newValue) {
143
- const { cellEdits } = this.getRowEdits(key);
144
- const cellEdit = cellEdits.get(columnName);
145
- if (cellEdit) {
146
- if (newValue === cellEdit.originalValue) {
147
- if (cellEdits.size === 1) {
148
- __privateGet(this, _rowEdits).delete(key);
74
+ const { cellEdits } = rowEditDetails;
75
+ const cellEdit = cellEdits.get(columnName);
76
+ if (cellEdit) {
77
+ if (newValue === cellEdit.originalValue) {
78
+ if (cellEdits.size === 1) {
79
+ __privateGet(this, _rowEdits).delete(key);
80
+ } else {
81
+ cellEdits.delete(columnName);
82
+ }
83
+ this.editCount = __privateGet(this, _editCount) - 1;
149
84
  } else {
150
- cellEdits.delete(columnName);
85
+ cellEdit.editedValue = newValue;
151
86
  }
152
- this.editCount = __privateGet(this, _editCount) - 1;
153
87
  } else {
154
- cellEdit.editedValue = newValue;
88
+ cellEdits.set(columnName, {
89
+ originalValue,
90
+ editedValue: newValue
91
+ });
92
+ this.editCount = __privateGet(this, _editCount) + 1;
155
93
  }
156
94
  } else {
157
- cellEdits.set(columnName, {
158
- originalValue,
159
- editedValue: newValue
95
+ __privateGet(this, _rowEdits).set(key, {
96
+ cellEdits: /* @__PURE__ */ new Map([
97
+ [columnName, { originalValue, editedValue: newValue }]
98
+ ])
160
99
  });
161
100
  this.editCount = __privateGet(this, _editCount) + 1;
162
101
  }
163
102
  }
164
- async commit(key, columnName, originalValue, typedValue, isValid) {
165
- const rowEditDetails = this.getRowEdits(key);
166
- if (isValid) {
103
+ async commit(key, columnName, typedValue) {
104
+ const rowEditDetails = __privateGet(this, _rowEdits).get(key);
105
+ if (rowEditDetails) {
167
106
  const { cellEdits } = rowEditDetails;
168
- const cellEdit = this.storeCellEdit(
169
- cellEdits,
170
- columnName,
171
- originalValue,
172
- typedValue,
173
- isValid
174
- );
175
- const response = await this.dataSource?.editCell?.(
176
- key,
177
- columnName,
178
- typedValue
179
- );
180
- if (index.isRpcError(response)) {
181
- cellEdit.isValid = false;
182
- this.invalidCount += 1;
183
- }
184
- return response;
185
- } else {
186
- if (rowEditDetails) {
187
- const { cellEdits } = rowEditDetails;
188
- const cellEditValues = cellEdits.get(columnName);
189
- if (cellEditValues && cellEditValues.isValid !== false) {
190
- cellEditValues.isValid = false;
191
- this.invalidCount += 1;
107
+ const cellEditValues = cellEdits.get(columnName);
108
+ if (cellEditValues) {
109
+ try {
110
+ this.dataSource?.editCell?.(key, columnName, typedValue);
111
+ } catch (e) {
112
+ console.error(e);
192
113
  }
193
114
  }
194
- console.log(
195
- `[EditSession] key ${key}, column ${columnName} is valid ? ${isValid} `
196
- );
115
+ } else {
116
+ return {
117
+ errorMessage: "CHANGE_REVERTED",
118
+ type: "ERROR_RESULT"
119
+ };
197
120
  }
198
121
  }
199
122
  }
123
+ _active = new WeakMap();
200
124
  _rowEdits = new WeakMap();
201
125
  _editCount = new WeakMap();
202
- _invalidCount = new WeakMap();
203
126
  _sourceTableDataSource = new WeakMap();
204
127
  _sessionDataSource = new WeakMap();
205
128
  _inEditMode = new WeakMap();
206
129
 
207
130
  exports.EditSession = EditSession;
208
- exports.StaleUpdateError = StaleUpdateError;
209
131
  //# sourceMappingURL=EditSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditSession.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/EditSession.tsx"],"sourcesContent":["import { DataSource, EditSessionMode } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\nimport { isRpcError } from \"../../dist/index.mjs\";\n\nexport type EditState = \"clean\" | \"dirty\" | \"invalid\" | \"stale\";\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n isValid?: 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 #editCount = 0;\n #invalidCount = 0;\n #sourceTableDataSource?: DataSource;\n #sessionDataSource?: DataSource;\n #inEditMode = false;\n\n constructor(dataSource: DataSource) {\n super();\n this.#sourceTableDataSource = dataSource;\n\n dataSource.on(\"remote-update-during-local-edit\", (rows) => {\n console.log(\n `source table updated via another channel, whilst we have an inline edit session in progress`,\n { rows },\n );\n });\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) {\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 clear() {\n this.#rowEdits.clear();\n this.#editCount = 0;\n this.#inEditMode = false;\n }\n\n async begin(editSessionMode?: EditSessionMode) {\n try {\n this.#inEditMode = true;\n const sessionDataSource =\n await this.#sourceTableDataSource?.beginEditSession?.(editSessionMode);\n\n this.#sessionDataSource = sessionDataSource;\n\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 await this.dataSource?.endEditSession?.(saveChanges, force);\n this.clear();\n }\n } catch (e) {\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;\n }\n\n get editState(): EditState {\n return this.editCount === 0 ? \"clean\" : \"dirty\";\n }\n\n getRowEdits(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 (isValid && cellEdit.isValid === false) {\n cellEdit.isValid = true;\n this.invalidCount -= 1;\n }\n return cellEdit;\n } else {\n const cellEdit = {\n originalValue,\n editedValue,\n isValid,\n };\n cellEdits.set(column, cellEdit);\n this.editCount = this.#editCount + 1;\n return cellEdit;\n }\n }\n\n /**\n * Apply incremental edit(s) to edit control value. Used for TextInput, where multiple\n * edits may follow in sequence before value finally committed.\n *\n * @param key value for edited Row\n * @param columnName\n * @param originalValue\n * @param newValue\n */\n edit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n newValue: VuuRowDataItemType,\n ) {\n const { cellEdits } = this.getRowEdits(key);\n const cellEdit = cellEdits.get(columnName);\n if (cellEdit) {\n if (newValue === cellEdit.originalValue) {\n if (cellEdits.size === 1) {\n this.#rowEdits.delete(key);\n } else {\n // re-editing a cell had removed the edit\n cellEdits.delete(columnName);\n }\n this.editCount = this.#editCount - 1;\n } else {\n cellEdit.editedValue = newValue;\n }\n } else {\n cellEdits.set(columnName, {\n originalValue,\n editedValue: newValue,\n });\n this.editCount = this.#editCount + 1;\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 const rowEditDetails = this.getRowEdits(key);\n\n if (isValid) {\n const { cellEdits } = rowEditDetails;\n const cellEdit = this.storeCellEdit(\n cellEdits,\n columnName,\n originalValue,\n typedValue,\n isValid,\n );\n\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 response;\n } else {\n if (rowEditDetails) {\n const { cellEdits } = rowEditDetails;\n const cellEditValues = cellEdits.get(columnName);\n if (cellEditValues && cellEditValues.isValid !== false) {\n cellEditValues.isValid = false;\n this.invalidCount += 1;\n }\n }\n console.log(\n `[EditSession] key ${key}, column ${columnName} is valid ? ${isValid} `,\n );\n }\n }\n}\n"],"names":["EventEmitter","rowEditDetails","cellEdit","isRpcError"],"mappings":"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"}
1
+ {"version":3,"file":"EditSession.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/EditSession.tsx"],"sourcesContent":["import { DataSource, EditSessionMode } from \"@vuu-ui/vuu-data-types\";\nimport type {\n RpcResultError,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { EventEmitter } from \"../event-emitter\";\n\nexport type EditState = \"clean\" | \"dirty\";\n\ntype CellEdit = {\n originalValue: VuuRowDataItemType;\n editedValue: VuuRowDataItemType;\n};\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 #active = false;\n /**\n * Row key => row edits\n */\n #rowEdits = new Map<string, RowEditDetails>();\n #editCount = 0;\n #sourceTableDataSource?: DataSource;\n #sessionDataSource?: DataSource;\n #inEditMode = false;\n\n constructor(dataSource: DataSource) {\n super();\n this.#sourceTableDataSource = dataSource;\n }\n\n get active() {\n return this.#active;\n }\n set active(isActive: boolean) {\n this.#active = isActive;\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) {\n this.emit(\"editState\", \"clean\");\n } else if (oldCount === 0) {\n this.emit(\"editState\", \"dirty\");\n }\n }\n }\n\n clear() {\n this.#rowEdits.clear();\n this.#editCount = 0;\n }\n\n async begin(editSessionMode?: EditSessionMode) {\n this.#inEditMode = true;\n\n const sessionDataSource =\n await this.#sourceTableDataSource?.beginEditSession?.(editSessionMode);\n\n this.#sessionDataSource = sessionDataSource;\n\n return sessionDataSource;\n }\n\n get dataSource() {\n return this.#sessionDataSource ?? this.#sourceTableDataSource;\n }\n\n async end(saveChanges = false) {\n await this.dataSource?.endEditSession?.(saveChanges);\n this.clear();\n }\n\n get inEditMode() {\n return this.#inEditMode;\n }\n\n get editState(): EditState {\n return this.editCount === 0 ? \"clean\" : \"dirty\";\n }\n\n // TODO how do we deal with the '_edited' pattern\n edit(\n key: string,\n columnName: string,\n originalValue: VuuRowDataItemType,\n newValue: VuuRowDataItemType,\n ) {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n const { cellEdits } = rowEditDetails;\n const cellEdit = cellEdits.get(columnName);\n if (cellEdit) {\n if (newValue === cellEdit.originalValue) {\n if (cellEdits.size === 1) {\n this.#rowEdits.delete(key);\n } else {\n // re-editing a cell had removed the edit\n cellEdits.delete(columnName);\n }\n this.editCount = this.#editCount - 1;\n } else {\n cellEdit.editedValue = newValue;\n }\n } else {\n // row has already been edited, but this column has not\n cellEdits.set(columnName, {\n originalValue,\n editedValue: newValue,\n });\n this.editCount = this.#editCount + 1;\n }\n } else {\n this.#rowEdits.set(key, {\n cellEdits: new Map([\n [columnName, { originalValue, editedValue: newValue }],\n ]),\n });\n this.editCount = this.#editCount + 1;\n }\n }\n\n async commit(\n key: string,\n columnName: string,\n typedValue: string | number | boolean,\n ) {\n const rowEditDetails = this.#rowEdits.get(key);\n if (rowEditDetails) {\n const { cellEdits } = rowEditDetails;\n const cellEditValues = cellEdits.get(columnName);\n if (cellEditValues) {\n try {\n this.dataSource?.editCell?.(key, columnName, typedValue);\n } catch (e) {\n // ??\n console.error(e);\n }\n }\n } else {\n return {\n errorMessage: \"CHANGE_REVERTED\",\n type: \"ERROR_RESULT\",\n } as RpcResultError;\n }\n }\n}\n"],"names":["EventEmitter"],"mappings":"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"}