@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
1 lines • 3.38 kB
Source Map (JSON)
{"version":3,"file":"model-editor.cjs","sources":["../../src/context/model-editor.ts"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n ReactNode,\n} from \"react\";\nimport update from \"immutability-helper\";\nimport h from \"@macrostrat/hyper\";\n\nconst ModelEditorContext = createContext(null);\n\ninterface ModelEditorProviderProps {\n model: any;\n onConfirmChanges: (model: any) => void;\n onDelete: (model: any) => void;\n logUpdates?: boolean;\n alwaysConfirm?: boolean;\n children: ReactNode;\n}\n\nfunction ModelEditorProvider(props: ModelEditorProviderProps) {\n /*\n Context to assist with editing a model\n */\n let { model, logUpdates = false, children, alwaysConfirm = false } = props;\n\n console.warn(`Using the ModelEditorContext from\n @macrostrat/column-components is deprecated.\n Please use the equivalent class from\n @macrostrat/ui-components instead.`);\n\n const [editedModel, setState] = useState(model);\n // Our model can be initially null, but we want the edited model\n // to take on the first non-null value\n const confirmChanges = () => props.onConfirmChanges(editedModel);\n\n // Zero out edited model when model prop changes\n\n const revertChanges = useCallback(() => {\n if (model == editedModel) return;\n if (alwaysConfirm && editedModel != null) {\n console.log(\"Confirming model changes\");\n confirmChanges();\n }\n setState(model);\n }, [model]);\n\n useEffect(() => {\n revertChanges();\n }, [model]);\n\n const updateModel = useCallback(\n function (spec) {\n const v = update(editedModel, spec);\n if (logUpdates) {\n console.log(v);\n }\n return setState(v);\n },\n [logUpdates, editedModel],\n );\n\n const deleteModel = function () {\n setState(null);\n return props.onDelete(model);\n };\n\n const hasChanges = () => model === editedModel;\n\n const value = {\n model,\n editedModel,\n updateModel,\n deleteModel,\n hasChanges,\n revertChanges,\n confirmChanges,\n };\n return h(ModelEditorContext.Provider, { value }, children);\n}\n\nconst useModelEditor = () => useContext(ModelEditorContext);\n\nexport { ModelEditorProvider, ModelEditorContext, useModelEditor };\n"],"names":["createContext","useState","useCallback","useEffect","update","h","useContext"],"mappings":";;;;;;;;AAWA,MAAM,qBAAqBA,MAAAA,cAAc,IAAI;AAW7C,SAAS,oBAAoB,OAAiC;AAI5D,MAAI,EAAE,OAAO,aAAa,OAAO,UAAU,gBAAgB,UAAU;AAErE,UAAQ,KAAK;AAAA;AAAA;AAAA,uCAGwB;AAErC,QAAM,CAAC,aAAa,QAAQ,IAAIC,MAAAA,SAAS,KAAK;AAG9C,QAAM,iBAAiB,MAAM,MAAM,iBAAiB,WAAW;AAI/D,QAAM,gBAAgBC,MAAAA,YAAY,MAAM;AACtC,QAAI,SAAS,YAAa;AAC1B,QAAI,iBAAiB,eAAe,MAAM;AACxC,cAAQ,IAAI,0BAA0B;AACtC,qBAAA;AAAA,IACF;AACA,aAAS,KAAK;AAAA,EAChB,GAAG,CAAC,KAAK,CAAC;AAEVC,QAAAA,UAAU,MAAM;AACd,kBAAA;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,cAAcD,MAAAA;AAAAA,IAClB,SAAU,MAAM;AACd,YAAM,IAAIE,gBAAAA,QAAO,aAAa,IAAI;AAClC,UAAI,YAAY;AACd,gBAAQ,IAAI,CAAC;AAAA,MACf;AACA,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,CAAC,YAAY,WAAW;AAAA,EAAA;AAG1B,QAAM,cAAc,WAAY;AAC9B,aAAS,IAAI;AACb,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAEA,QAAM,aAAa,MAAM,UAAU;AAEnC,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF,SAAOC,WAAAA,QAAE,mBAAmB,UAAU,EAAE,MAAA,GAAS,QAAQ;AAC3D;AAEA,MAAM,iBAAiB,MAAMC,MAAAA,WAAW,kBAAkB;;;;"}