{"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;;;;"}