UNPKG

@macrostrat/column-components

Version:

React rendering primitives for stratigraphic columns

57 lines (56 loc) 1.67 kB
import { createContext, useState, useCallback, useEffect, useContext } from "react"; import update from "immutability-helper"; import h from "@macrostrat/hyper"; const ModelEditorContext = createContext(null); function ModelEditorProvider(props) { let { model, logUpdates = false, children, alwaysConfirm = false } = props; console.warn(`Using the ModelEditorContext from @macrostrat/column-components is deprecated. Please use the equivalent class from @macrostrat/ui-components instead.`); const [editedModel, setState] = useState(model); const confirmChanges = () => props.onConfirmChanges(editedModel); const revertChanges = useCallback(() => { if (model == editedModel) return; if (alwaysConfirm && editedModel != null) { console.log("Confirming model changes"); confirmChanges(); } setState(model); }, [model]); useEffect(() => { revertChanges(); }, [model]); const updateModel = useCallback( function(spec) { const v = update(editedModel, spec); if (logUpdates) { console.log(v); } return setState(v); }, [logUpdates, editedModel] ); const deleteModel = function() { setState(null); return props.onDelete(model); }; const hasChanges = () => model === editedModel; const value = { model, editedModel, updateModel, deleteModel, hasChanges, revertChanges, confirmChanges }; return h(ModelEditorContext.Provider, { value }, children); } const useModelEditor = () => useContext(ModelEditorContext); export { ModelEditorContext, ModelEditorProvider, useModelEditor }; //# sourceMappingURL=model-editor.js.map