master/detail view - handle reload chidlren

This commit is contained in:
Jan Prochazka
2020-05-10 09:38:00 +02:00
parent c6695bba32
commit 9b39677b93
3 changed files with 13 additions and 4 deletions

View File

@@ -391,6 +391,9 @@ export default function DataGridCore(props) {
loadNextData(); loadNextData();
} }
} }
if (props.masterLoadedTime && props.masterLoadedTime > loadedTime) {
display.reload();
}
if (display.cache.refreshTime > loadedTime) { if (display.cache.refreshTime > loadedTime) {
reload(); reload();
} }
@@ -426,10 +429,10 @@ export default function DataGridCore(props) {
}, [jslid]); }, [jslid]);
React.useEffect(() => { React.useEffect(() => {
if (props.onRefSourceRowsChanged) { if (props.onRefSourceRowsChanged && ((loadedRows && loadedRows.length > 0) || isLoadedAll)) {
props.onRefSourceRowsChanged(getSelectedRowData()); props.onRefSourceRowsChanged(getSelectedRowData(), loadedTime);
} }
}, [selectedCells, props.refReloadToken]); }, [selectedCells, props.refReloadToken, loadedRows && loadedRows[0]]);
// const handleCloseInplaceEditor = React.useCallback( // const handleCloseInplaceEditor = React.useCallback(
// mode => { // mode => {

View File

@@ -22,12 +22,14 @@ export default function TableDataGrid({
setConfig = undefined, setConfig = undefined,
cache = undefined, cache = undefined,
setCache = undefined, setCache = undefined,
masterLoadedTime = undefined,
}) { }) {
const [myConfig, setMyConfig] = React.useState(createGridConfig()); const [myConfig, setMyConfig] = React.useState(createGridConfig());
const [childConfig, setChildConfig] = React.useState(createGridConfig()); const [childConfig, setChildConfig] = React.useState(createGridConfig());
const [myCache, setMyCache] = React.useState(createGridCache()); const [myCache, setMyCache] = React.useState(createGridCache());
const [childCache, setChildCache] = React.useState(createGridCache()); const [childCache, setChildCache] = React.useState(createGridCache());
const [refReloadToken, setRefReloadToken] = React.useState(0); const [refReloadToken, setRefReloadToken] = React.useState(0);
const [myLoadedTime, setMyLoadedTime] = React.useState(0);
const connection = useConnectionInfo({ conid }); const connection = useConnectionInfo({ conid });
const [reference, setReference] = React.useState(null); const [reference, setReference] = React.useState(null);
@@ -70,7 +72,8 @@ export default function TableDataGrid({
}, [conid, database, display]); }, [conid, database, display]);
const handleRefSourcedRowsChanged = React.useCallback( const handleRefSourcedRowsChanged = React.useCallback(
(selectedRows) => { (selectedRows, loadedTime) => {
setMyLoadedTime(loadedTime);
if (!reference) return; if (!reference) return;
const filters = { const filters = {
...(config || myConfig).filters, ...(config || myConfig).filters,
@@ -112,6 +115,7 @@ export default function TableDataGrid({
onReferenceClick={setReference} onReferenceClick={setReference}
onRefSourceRowsChanged={reference ? handleRefSourcedRowsChanged : null} onRefSourceRowsChanged={reference ? handleRefSourcedRowsChanged : null}
refReloadToken={refReloadToken.toString()} refReloadToken={refReloadToken.toString()}
masterLoadedTime={masterLoadedTime}
/> />
{reference && ( {reference && (
<TableDataGrid <TableDataGrid
@@ -128,6 +132,7 @@ export default function TableDataGrid({
setConfig={setChildConfig} setConfig={setChildConfig}
cache={childCache} cache={childCache}
setCache={setChildCache} setCache={setChildCache}
masterLoadedTime={myLoadedTime}
/> />
)} )}
</VerticalSplitter> </VerticalSplitter>

View File

@@ -13,4 +13,5 @@ export interface DataGridProps {
onReferenceClick?: (def: GridReferenceDefinition) => void; onReferenceClick?: (def: GridReferenceDefinition) => void;
onRefSourceRowsChanged?: Function; onRefSourceRowsChanged?: Function;
refReloadToken?: string; refReloadToken?: string;
masterLoadedTime?: number
} }