@vuu-ui/vuu-data-editing 3.0.0 → 3.1.0-beta.1

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 (51) hide show
  1. package/package.json +15 -12
  2. package/src/DataEditingProvider.js +13 -0
  3. package/src/EditButtons.js +58 -0
  4. package/src/EditModeProvider.js +18 -0
  5. package/src/EditSession.js +482 -0
  6. package/src/UndoCellRenderer.js +38 -0
  7. package/src/edit-utils.js +47 -0
  8. package/src/editActionRowClassNameGenerator.js +15 -0
  9. package/src/index.js +10 -0
  10. package/src/useCellEdited.js +22 -0
  11. package/src/useEditableTable.js +141 -0
  12. package/cjs/DataEditingProvider.js +0 -28
  13. package/cjs/DataEditingProvider.js.map +0 -1
  14. package/cjs/EditButtons.js +0 -59
  15. package/cjs/EditButtons.js.map +0 -1
  16. package/cjs/EditModeProvider.js +0 -18
  17. package/cjs/EditModeProvider.js.map +0 -1
  18. package/cjs/EditSession.js +0 -564
  19. package/cjs/EditSession.js.map +0 -1
  20. package/cjs/UndoCellRenderer.js +0 -48
  21. package/cjs/UndoCellRenderer.js.map +0 -1
  22. package/cjs/edit-utils.js +0 -52
  23. package/cjs/edit-utils.js.map +0 -1
  24. package/cjs/editActionRowClassNameGenerator.js +0 -25
  25. package/cjs/editActionRowClassNameGenerator.js.map +0 -1
  26. package/cjs/index.js +0 -43
  27. package/cjs/index.js.map +0 -1
  28. package/cjs/useCellEdited.js +0 -29
  29. package/cjs/useCellEdited.js.map +0 -1
  30. package/cjs/useEditableTable.js +0 -145
  31. package/cjs/useEditableTable.js.map +0 -1
  32. package/esm/DataEditingProvider.js +0 -25
  33. package/esm/DataEditingProvider.js.map +0 -1
  34. package/esm/EditButtons.js +0 -57
  35. package/esm/EditButtons.js.map +0 -1
  36. package/esm/EditModeProvider.js +0 -15
  37. package/esm/EditModeProvider.js.map +0 -1
  38. package/esm/EditSession.js +0 -560
  39. package/esm/EditSession.js.map +0 -1
  40. package/esm/UndoCellRenderer.js +0 -43
  41. package/esm/UndoCellRenderer.js.map +0 -1
  42. package/esm/edit-utils.js +0 -45
  43. package/esm/edit-utils.js.map +0 -1
  44. package/esm/editActionRowClassNameGenerator.js +0 -22
  45. package/esm/editActionRowClassNameGenerator.js.map +0 -1
  46. package/esm/index.js +0 -11
  47. package/esm/index.js.map +0 -1
  48. package/esm/useCellEdited.js +0 -27
  49. package/esm/useCellEdited.js.map +0 -1
  50. package/esm/useEditableTable.js +0 -143
  51. package/esm/useEditableTable.js.map +0 -1
@@ -0,0 +1,47 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { formatDate, isInlineEditingSession } from "@vuu-ui/vuu-utils";
3
+ const timeFormatter = formatDate({
4
+ time: "hh:mm:ss"
5
+ });
6
+ const dataRowEditErrors = Symbol("vuuDataRowEditErrors");
7
+ const isEditRowReadOnly = (dataRow)=>"deleteRow" === dataRow.vuu_action;
8
+ const withDataRowEditErrors = (dataRow, errors)=>{
9
+ Object.defineProperty(dataRow, dataRowEditErrors, {
10
+ configurable: true,
11
+ value: errors
12
+ });
13
+ return dataRow;
14
+ };
15
+ const getVuuEditMessage = (dataRow, column, originalValue)=>{
16
+ const editError = dataRow[dataRowEditErrors]?.[column.name];
17
+ if (editError) return editError;
18
+ const vuuMsg = dataRow.vuuMsg;
19
+ if ("string" == typeof vuuMsg && "" !== vuuMsg) {
20
+ const columnMessages = vuuMsg.split(",");
21
+ const msgForCol = columnMessages.find((msg)=>msg.startsWith(`${column.name}:`));
22
+ if (msgForCol) {
23
+ const [, value, updatedValue, ts] = msgForCol.split(":");
24
+ const updateTime = timeFormatter(new Date(parseInt(ts)));
25
+ return /*#__PURE__*/ jsxs("span", {
26
+ children: [
27
+ "Update rejected. Original value ",
28
+ /*#__PURE__*/ jsx("b", {
29
+ children: originalValue
30
+ }),
31
+ " could not be updated to ",
32
+ /*#__PURE__*/ jsx("b", {
33
+ children: value
34
+ }),
35
+ ". It was updated to ",
36
+ /*#__PURE__*/ jsx("b", {
37
+ children: updatedValue
38
+ }),
39
+ " at ",
40
+ updateTime,
41
+ "."
42
+ ]
43
+ });
44
+ }
45
+ }
46
+ };
47
+ export { getVuuEditMessage, isEditRowReadOnly, isInlineEditingSession, withDataRowEditErrors };
@@ -0,0 +1,15 @@
1
+ import { registerComponent } from "@vuu-ui/vuu-utils";
2
+ const EDIT_ACTION_ROW_CLASS_NAME_GENERATOR = "vuu-edit-actions";
3
+ const editActionRowClassNameGenerator = (dataRow)=>{
4
+ switch(dataRow.vuu_action){
5
+ case "addRow":
6
+ return "vuuTableRow-inserted";
7
+ case "deleteRow":
8
+ return "vuuTableRow-deleted";
9
+ }
10
+ };
11
+ registerComponent(EDIT_ACTION_ROW_CLASS_NAME_GENERATOR, {
12
+ fn: editActionRowClassNameGenerator,
13
+ id: EDIT_ACTION_ROW_CLASS_NAME_GENERATOR
14
+ }, "row-class-generator");
15
+ export { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR, editActionRowClassNameGenerator };
package/src/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { DataEditingProvider, useEditSession } from "./DataEditingProvider.js";
2
+ export { useCellEdited } from "./useCellEdited.js";
3
+ export { getVuuEditMessage, isEditRowReadOnly, isInlineEditingSession, withDataRowEditErrors } from "./edit-utils.js";
4
+ export { EditButtons } from "./EditButtons.js";
5
+ export { EditModeProvider, useEditMode } from "./EditModeProvider.js";
6
+ export { EditError, EditSession, SupersededEditError } from "./EditSession.js";
7
+ export { StaleUpdateError } from "@vuu-ui/vuu-utils";
8
+ export { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR, editActionRowClassNameGenerator } from "./editActionRowClassNameGenerator.js";
9
+ export { UNDO_CELL_RENDERER, UndoCellRenderer, getUndoButtonContent, getUndoTooltipContent } from "./UndoCellRenderer.js";
10
+ export { useEditableTable } from "./useEditableTable.js";
@@ -0,0 +1,22 @@
1
+ import { useCallback, useSyncExternalStore } from "react";
2
+ const useCellEdited = (editSession, key, columnName)=>{
3
+ const subscribe = useCallback((onStoreChange)=>{
4
+ if (!editSession) return ()=>void 0;
5
+ const handleCellEditChanged = (changedKey, changedColumnName)=>{
6
+ if (changedKey === key && changedColumnName === columnName) onStoreChange();
7
+ };
8
+ editSession.on("cellEditChanged", handleCellEditChanged);
9
+ return ()=>editSession.removeListener("cellEditChanged", handleCellEditChanged);
10
+ }, [
11
+ columnName,
12
+ editSession,
13
+ key
14
+ ]);
15
+ const getSnapshot = useCallback(()=>editSession?.isCellEdited(key, columnName) ?? false, [
16
+ columnName,
17
+ editSession,
18
+ key
19
+ ]);
20
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
21
+ };
22
+ export { useCellEdited };
@@ -0,0 +1,141 @@
1
+ import { useData, useLayoutEffectSkipFirst } from "@vuu-ui/vuu-utils";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { EditSession } from "./EditSession.js";
4
+ import { EDIT_ACTION_ROW_CLASS_NAME_GENERATOR } from "./editActionRowClassNameGenerator.js";
5
+ const EDIT_ACTION_ROW_CLASS_NAME_GENERATORS = [
6
+ EDIT_ACTION_ROW_CLASS_NAME_GENERATOR
7
+ ];
8
+ const useEditableTable = ({ columns, dataSource: dataSourceProp, deleteMode = "soft", editSessionApi = "createSessionDataSource", copyOption = "All", isEditMode, onCancel, onSave, table })=>{
9
+ const { VuuDataSource } = useData();
10
+ const [selectionCount, setSelectionCount] = useState(0);
11
+ useLayoutEffectSkipFirst(()=>{
12
+ console.warn("[useEditableTable] columns and or table changed");
13
+ }, [
14
+ columns,
15
+ table
16
+ ]);
17
+ const sourceDataSource = useMemo(()=>{
18
+ if (dataSourceProp) return dataSourceProp;
19
+ if (table) return new VuuDataSource({
20
+ columns,
21
+ table
22
+ });
23
+ throw Error("useEditableTable unable to provide DataSource, neither dataSource nor table available as props");
24
+ }, [
25
+ VuuDataSource,
26
+ columns,
27
+ dataSourceProp,
28
+ table
29
+ ]);
30
+ const editSession = useMemo(()=>new EditSession(sourceDataSource, deleteMode, editSessionApi), [
31
+ deleteMode,
32
+ editSessionApi,
33
+ sourceDataSource
34
+ ]);
35
+ const [lifecycle, setLifecycle] = useState(editSession.lifecycle);
36
+ const [editState, setEditState] = useState(editSession.editState);
37
+ const [subscribedSessionDataSource, setSubscribedSessionDataSource] = useState();
38
+ const onCancelRef = useRef(onCancel);
39
+ onCancelRef.current = onCancel;
40
+ const sessionDataSource = "sessionDataSource" in lifecycle ? lifecycle.sessionDataSource : void 0;
41
+ const dataSource = sessionDataSource ?? sourceDataSource;
42
+ const handleCancel = useCallback(async ()=>{
43
+ try {
44
+ await editSession.end();
45
+ setSelectionCount(0);
46
+ onCancel();
47
+ } catch (error) {
48
+ console.error("[useEditableTable] cancel edit session failed", error);
49
+ }
50
+ }, [
51
+ editSession,
52
+ onCancel
53
+ ]);
54
+ const handleSave = useCallback(async (force = false)=>{
55
+ try {
56
+ await editSession.end(true, force);
57
+ setSelectionCount(0);
58
+ onSave();
59
+ } catch (error) {
60
+ console.error("[useEditableTable] save edit session failed", error);
61
+ }
62
+ }, [
63
+ editSession,
64
+ onSave
65
+ ]);
66
+ const handleDelete = useCallback(async ()=>{
67
+ await editSession.deleteSelectedRows();
68
+ }, [
69
+ editSession
70
+ ]);
71
+ const handleUndoRowChange = useCallback((key)=>void editSession.undoRowChange(key), [
72
+ editSession
73
+ ]);
74
+ useEffect(()=>{
75
+ dataSource.on("row-selection", setSelectionCount);
76
+ return ()=>dataSource.removeListener("row-selection", setSelectionCount);
77
+ }, [
78
+ dataSource
79
+ ]);
80
+ useEffect(()=>{
81
+ if (!sessionDataSource) return void setSubscribedSessionDataSource(void 0);
82
+ const handleSubscribed = ()=>setSubscribedSessionDataSource(sessionDataSource);
83
+ setSubscribedSessionDataSource(void 0);
84
+ sessionDataSource.on("subscribed", handleSubscribed);
85
+ if ("subscribed" === sessionDataSource.status && sessionDataSource.tableSchema) handleSubscribed();
86
+ return ()=>sessionDataSource.removeListener("subscribed", handleSubscribed);
87
+ }, [
88
+ sessionDataSource
89
+ ]);
90
+ useEffect(()=>{
91
+ const handleEditState = (nextEditState)=>{
92
+ setEditState(nextEditState);
93
+ };
94
+ const handleLifecycle = (nextLifecycle)=>{
95
+ setLifecycle(nextLifecycle);
96
+ };
97
+ setEditState(editSession.editState);
98
+ setLifecycle(editSession.lifecycle);
99
+ editSession.on("editState", handleEditState);
100
+ editSession.on("lifecycle", handleLifecycle);
101
+ return ()=>{
102
+ editSession.removeListener("editState", handleEditState);
103
+ editSession.removeListener("lifecycle", handleLifecycle);
104
+ };
105
+ }, [
106
+ editSession
107
+ ]);
108
+ useEffect(()=>{
109
+ const transition = isEditMode ? editSession.begin(copyOption) : editSession.end();
110
+ transition.catch((error)=>{
111
+ if (isEditMode) {
112
+ console.error("[useEditableTable] begin edit session failed", error);
113
+ onCancelRef.current();
114
+ } else console.error("[useEditableTable] end edit session failed", error);
115
+ });
116
+ }, [
117
+ copyOption,
118
+ editSession,
119
+ isEditMode
120
+ ]);
121
+ const canCancel = "active" === lifecycle.status || "error" === lifecycle.status && "end" === lifecycle.operation;
122
+ const canSave = canCancel && ("dirty" === editState || "stale" === editState) && 0 === editSession.invalidCount;
123
+ const isEditSessionReady = isEditMode && void 0 !== sessionDataSource && sessionDataSource === editSession.sessionDataSource && subscribedSessionDataSource === sessionDataSource && "subscribed" === sessionDataSource.status && void 0 !== sessionDataSource.tableSchema;
124
+ return {
125
+ canCancel,
126
+ canSave,
127
+ dataSource,
128
+ editSession,
129
+ lifecycle,
130
+ hasSelection: selectionCount > 0,
131
+ isEditSessionReady,
132
+ onCancel: handleCancel,
133
+ onDelete: handleDelete,
134
+ onSave: handleSave,
135
+ onUndoRowChange: handleUndoRowChange,
136
+ rowClassNameGenerators: isEditMode ? EDIT_ACTION_ROW_CLASS_NAME_GENERATORS : void 0,
137
+ sessionDataSource,
138
+ sourceDataSource
139
+ };
140
+ };
141
+ export { useEditableTable };
@@ -1,28 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
-
6
- const DataEditingContext = react.createContext(void 0);
7
- const DataEditingProvider = ({
8
- children,
9
- editSession
10
- }) => {
11
- return /* @__PURE__ */ jsxRuntime.jsx(DataEditingContext.Provider, { value: editSession, children });
12
- };
13
- function useEditSession(throwIfUnavailable = false) {
14
- const editSession = react.useContext(DataEditingContext);
15
- if (editSession === void 0) {
16
- if (throwIfUnavailable) {
17
- throw Error(
18
- "[useEditSession] no DataEditingContext in scope. You need to enclose editable component(s) with DataEditingProvider"
19
- );
20
- }
21
- } else {
22
- return editSession;
23
- }
24
- }
25
-
26
- exports.DataEditingProvider = DataEditingProvider;
27
- exports.useEditSession = useEditSession;
28
- //# sourceMappingURL=DataEditingProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataEditingProvider.js","sources":["../../../packages/vuu-data-editing/src/DataEditingProvider.tsx"],"sourcesContent":["import { createContext, type ReactNode, useContext } from \"react\";\nimport type { 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,59 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var react = require('react');
6
-
7
- const EditButtons = ({
8
- canCancel,
9
- canSave,
10
- confirmCancel,
11
- confirmSave,
12
- editSession,
13
- hasSelection = false,
14
- onCancel,
15
- onDelete,
16
- onSave,
17
- saveLabel = "Save"
18
- }) => {
19
- const [editState, setEditState] = react.useState(
20
- () => editSession?.editState ?? "clean"
21
- );
22
- const handleSave = react.useCallback(async () => {
23
- if (confirmSave) {
24
- const confirmed = await confirmSave();
25
- if (!confirmed) return;
26
- }
27
- onSave(editState === "stale");
28
- }, [confirmSave, editState, onSave]);
29
- const handleCancel = react.useCallback(async () => {
30
- if (confirmCancel) {
31
- const confirmed = await confirmCancel();
32
- if (!confirmed) return;
33
- }
34
- onCancel?.();
35
- }, [confirmCancel, onCancel]);
36
- react.useEffect(() => {
37
- if (editSession) {
38
- setEditState(editSession.editState);
39
- editSession.on("editState", setEditState);
40
- return () => editSession.removeListener("editState", setEditState);
41
- }
42
- }, [editSession]);
43
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
44
- onDelete && /* @__PURE__ */ jsxRuntime.jsx(
45
- core.Button,
46
- {
47
- disabled: !hasSelection,
48
- onClick: onDelete,
49
- sentiment: "negative",
50
- children: "Delete"
51
- }
52
- ),
53
- /* @__PURE__ */ jsxRuntime.jsx(core.Button, { disabled: !canSave, onClick: handleSave, sentiment: "accented", children: editState === "stale" ? `${saveLabel} (force)` : saveLabel }),
54
- onCancel && /* @__PURE__ */ jsxRuntime.jsx(core.Button, { disabled: !canCancel, onClick: handleCancel, children: "Cancel" })
55
- ] });
56
- };
57
-
58
- exports.EditButtons = EditButtons;
59
- //# sourceMappingURL=EditButtons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditButtons.js","sources":["../../../packages/vuu-data-editing/src/EditButtons.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport type { EditState, EditSession } from \"./EditSession\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport interface EditButtonProps {\n canCancel: boolean;\n canSave: boolean;\n editSession?: EditSession;\n hasSelection?: boolean;\n onCancel?: () => void;\n onDelete?: () => void;\n onSave: (force?: boolean) => void;\n saveLabel?: string;\n confirmSave?: () => boolean | Promise<boolean>;\n confirmCancel?: () => boolean | Promise<boolean>;\n}\n\nexport const EditButtons = ({\n canCancel,\n canSave,\n confirmCancel,\n confirmSave,\n editSession,\n hasSelection = false,\n onCancel,\n onDelete,\n onSave,\n saveLabel = \"Save\",\n}: EditButtonProps) => {\n const [editState, setEditState] = useState<EditState>(\n () => editSession?.editState ?? \"clean\",\n );\n\n const handleSave = useCallback(async () => {\n if (confirmSave) {\n const confirmed = await confirmSave();\n if (!confirmed) return;\n }\n onSave(editState === \"stale\");\n }, [confirmSave, editState, onSave]);\n\n const handleCancel = useCallback(async () => {\n if (confirmCancel) {\n const confirmed = await confirmCancel();\n if (!confirmed) return;\n }\n onCancel?.();\n }, [confirmCancel, onCancel]);\n\n useEffect(() => {\n if (editSession) {\n setEditState(editSession.editState);\n editSession.on(\"editState\", setEditState);\n return () => editSession.removeListener(\"editState\", setEditState);\n }\n }, [editSession]);\n\n return (\n <>\n {onDelete && (\n <Button\n disabled={!hasSelection}\n onClick={onDelete}\n sentiment=\"negative\"\n >\n Delete\n </Button>\n )}\n <Button disabled={!canSave} onClick={handleSave} sentiment=\"accented\">\n {editState === \"stale\" ? `${saveLabel} (force)` : saveLabel}\n </Button>\n {onCancel && (\n <Button disabled={!canCancel} onClick={handleCancel}>\n Cancel\n </Button>\n )}\n </>\n );\n};\n"],"names":["useState","useCallback","useEffect","jsxs","Fragment","jsx","Button"],"mappings":";;;;;;AAiBO,MAAM,cAAc,CAAC;AAAA,EAC1B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAe,GAAA,KAAA;AAAA,EACf,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAY,GAAA;AACd,CAAuB,KAAA;AACrB,EAAM,MAAA,CAAC,SAAW,EAAA,YAAY,CAAI,GAAAA,cAAA;AAAA,IAChC,MAAM,aAAa,SAAa,IAAA;AAAA,GAClC;AAEA,EAAM,MAAA,UAAA,GAAaC,kBAAY,YAAY;AACzC,IAAA,IAAI,WAAa,EAAA;AACf,MAAM,MAAA,SAAA,GAAY,MAAM,WAAY,EAAA;AACpC,MAAA,IAAI,CAAC,SAAW,EAAA;AAAA;AAElB,IAAA,MAAA,CAAO,cAAc,OAAO,CAAA;AAAA,GAC3B,EAAA,CAAC,WAAa,EAAA,SAAA,EAAW,MAAM,CAAC,CAAA;AAEnC,EAAM,MAAA,YAAA,GAAeA,kBAAY,YAAY;AAC3C,IAAA,IAAI,aAAe,EAAA;AACjB,MAAM,MAAA,SAAA,GAAY,MAAM,aAAc,EAAA;AACtC,MAAA,IAAI,CAAC,SAAW,EAAA;AAAA;AAElB,IAAW,QAAA,IAAA;AAAA,GACV,EAAA,CAAC,aAAe,EAAA,QAAQ,CAAC,CAAA;AAE5B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,YAAA,CAAa,YAAY,SAAS,CAAA;AAClC,MAAY,WAAA,CAAA,EAAA,CAAG,aAAa,YAAY,CAAA;AACxC,MAAA,OAAO,MAAM,WAAA,CAAY,cAAe,CAAA,WAAA,EAAa,YAAY,CAAA;AAAA;AACnE,GACF,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEKC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,IACC,QAAA,oBAAAC,cAAA;AAAA,MAACC,WAAA;AAAA,MAAA;AAAA,QACC,UAAU,CAAC,YAAA;AAAA,QACX,OAAS,EAAA,QAAA;AAAA,QACT,SAAU,EAAA,UAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,oBAEDD,cAAA,CAAAC,WAAA,EAAA,EAAO,QAAU,EAAA,CAAC,SAAS,OAAS,EAAA,UAAA,EAAY,SAAU,EAAA,UAAA,EACxD,QAAc,EAAA,SAAA,KAAA,OAAA,GAAU,CAAG,EAAA,SAAS,aAAa,SACpD,EAAA,CAAA;AAAA,IACC,QAAA,mCACEA,WAAO,EAAA,EAAA,QAAA,EAAU,CAAC,SAAW,EAAA,OAAA,EAAS,cAAc,QAErD,EAAA,QAAA,EAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ;;;;"}
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
-
6
- const EditModeContext = react.createContext({
7
- isEditMode: false,
8
- setEditMode: () => "EditModeProvider in place"
9
- });
10
- const EditModeProvider = ({ children }) => {
11
- const [isEditMode, setEditMode] = react.useState(false);
12
- return /* @__PURE__ */ jsxRuntime.jsx(EditModeContext.Provider, { value: { isEditMode, setEditMode }, children });
13
- };
14
- const useEditMode = () => react.useContext(EditModeContext);
15
-
16
- exports.EditModeProvider = EditModeProvider;
17
- exports.useEditMode = useEditMode;
18
- //# sourceMappingURL=EditModeProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditModeProvider.js","sources":["../../../packages/vuu-data-editing/src/EditModeProvider.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useState } from \"react\";\n\nexport interface EditModeContextProps {\n isEditMode: boolean;\n setEditMode: (inEditMode: boolean) => void;\n}\n\nconst EditModeContext = createContext<EditModeContextProps>({\n isEditMode: false,\n setEditMode: () => \"EditModeProvider in place\",\n});\n\n/**\n * Implemented as a standalone Provider so that EditMode cna be implemented\n * at higher level than individual edit controls.\n */\nexport const EditModeProvider = ({ children }: { children: ReactNode }) => {\n const [isEditMode, setEditMode] = useState(false);\n return (\n <EditModeContext.Provider value={{ isEditMode, setEditMode }}>\n {children}\n </EditModeContext.Provider>\n );\n};\n\nexport const useEditMode = () => useContext(EditModeContext);\n"],"names":["createContext","useState","jsx","useContext"],"mappings":";;;;;AAOA,MAAM,kBAAkBA,mBAAoC,CAAA;AAAA,EAC1D,UAAY,EAAA,KAAA;AAAA,EACZ,aAAa,MAAM;AACrB,CAAC,CAAA;AAMM,MAAM,gBAAmB,GAAA,CAAC,EAAE,QAAA,EAAwC,KAAA;AACzE,EAAA,MAAM,CAAC,UAAA,EAAY,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAChD,EACE,uBAAAC,cAAA,CAAC,gBAAgB,QAAhB,EAAA,EAAyB,OAAO,EAAE,UAAA,EAAY,WAAY,EAAA,EACxD,QACH,EAAA,CAAA;AAEJ;AAEa,MAAA,WAAA,GAAc,MAAMC,gBAAA,CAAW,eAAe;;;;;"}