free table editor uses useEditorData

This commit is contained in:
Jan Prochazka
2020-12-03 17:42:36 +01:00
parent 5df650bc51
commit dc6093e4fc
5 changed files with 58 additions and 64 deletions

View File

@@ -1,9 +1,7 @@
import React from 'react';
import { createGridCache, createChangeSet, createGridConfig, createFreeTableModel } from 'dbgate-datalib';
import { createFreeTableModel } from 'dbgate-datalib';
import useUndoReducer from '../utility/useUndoReducer';
import usePropsCompare from '../utility/usePropsCompare';
import { useSetOpenedTabs, useUpdateDatabaseForTab } from '../utility/globalState';
import TableDataGrid from '../datagrid/TableDataGrid';
import { useSetOpenedTabs } from '../utility/globalState';
import useGridConfig from '../utility/useGridConfig';
import FreeTableGrid from '../freetable/FreeTableGrid';
import SaveArchiveModal from '../modals/SaveArchiveModal';
@@ -12,46 +10,28 @@ import axios from '../utility/axios';
import LoadingInfo from '../widgets/LoadingInfo';
import { changeTab } from '../utility/common';
import ErrorInfo from '../widgets/ErrorInfo';
import useEditorData from '../utility/useEditorData';
export default function FreeDataTab({ archiveFolder, archiveFile, tabVisible, toolbarPortalRef, tabid, initialData }) {
export default function FreeDataTab({ archiveFolder, archiveFile, tabVisible, toolbarPortalRef, tabid, initialArgs }) {
const [config, setConfig] = useGridConfig(tabid);
const [modelState, dispatchModel] = useUndoReducer(createFreeTableModel());
const storageKey = `tabdata_freetable_${tabid}`;
const saveFileModalState = useModalState();
const setOpenedTabs = useSetOpenedTabs();
const [isLoading, setIsLoading] = React.useState(false);
const [errorMessage, setErrorMessage] = React.useState(null);
const handleLoadInitialData = async () => {
setIsLoading(true);
try {
const resp = await axios.post('runners/load-reader', initialData);
// @ts-ignore
dispatchModel({ type: 'reset', value: resp.data });
setIsLoading(false);
} catch (err) {
setIsLoading(false);
const errorMessage = (err && err.response && err.response.data && err.response.data.error) || 'Loading failed';
setErrorMessage(errorMessage);
console.error(err.response);
}
};
const { initialData, setEditorData, errorMessage, isLoading } = useEditorData({
tabid,
loadFromArgs:
initialArgs && initialArgs.functionName
? () => axios.post('runners/load-reader', initialArgs).then((x) => x.data)
: null,
});
React.useEffect(() => {
const existingData = localStorage.getItem(storageKey);
if (existingData) {
const value = JSON.parse(existingData);
// @ts-ignore
dispatchModel({ type: 'reset', value });
} else if (initialData) {
if (initialData.functionName) handleLoadInitialData();
// @ts-ignore
else dispatchModel({ type: 'reset', value: initialData });
}
}, []);
// @ts-ignore
if (initialData) dispatchModel({ type: 'reset', value: initialData });
}, [initialData]);
React.useEffect(() => {
localStorage.setItem(storageKey, JSON.stringify(modelState.value));
setEditorData(modelState.value);
}, [modelState]);
const handleSave = async (folder, file) => {
@@ -81,12 +61,7 @@ export default function FreeDataTab({ archiveFolder, archiveFile, tabVisible, to
toolbarPortalRef={toolbarPortalRef}
onSave={() => saveFileModalState.open()}
/>
<SaveArchiveModal
modalState={saveFileModalState}
folder={archiveFolder}
file={archiveFile}
onSave={handleSave}
/>
<SaveArchiveModal modalState={saveFileModalState} folder={archiveFolder} file={archiveFile} onSave={handleSave} />
</>
);
}