@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
57 lines (56 loc) • 1.67 kB
JavaScript
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