Skip to content

Commit

Permalink
feat: store erros with useState
Browse files Browse the repository at this point in the history
  • Loading branch information
neindochoh committed Dec 13, 2023
1 parent 18cc29c commit 3d8113c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
21 changes: 11 additions & 10 deletions src/hooks/useCell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,45 +70,45 @@ function _errorToProblem(e: unknown): Problem {
};
}

function _handleError(e: unknown) {
throw _errorToProblem(e);
}

const generationIdSelector = (d: Dataset) => d.generationID;

function useCell(
columnKey: string,
row: number,
fetchDelay = 0
): unknown | null | undefined {
): [unknown | null | undefined, Problem | undefined] {
const generationId = useDataset(generationIdSelector);
const dtype = useDataset((d) => d.columnsByKey[columnKey].type);

const localValue = useDataset((d) => d.columnData[columnKey][row]);

const [remoteValue, setRemoteValue] = useState<unknown | null>();
const [problem, setProblem] = useState<Problem>();

useEffect(() => {
if (!dtype.lazy) return;
_getCell(columnKey, row, generationId, dtype.binary, fetchDelay)
.then((v: unknown) => {
setRemoteValue(v);
setProblem(undefined);
})
.catch(_handleError);
.catch((e) => setProblem(_errorToProblem(e)));
}, [columnKey, row, generationId, dtype, fetchDelay]);

return dtype.lazy ? localValue : remoteValue;
return [dtype.lazy ? localValue : remoteValue, problem];
}

export function useRow(
row: number,
columnKeys: Array<string>,
fetchDelay = 0
): Record<string, unknown> | undefined {
): [Record<string, unknown> | undefined, Problem | undefined] {
const generationId = useDataset(generationIdSelector);
const columnsByKey = useDataset((d) => d.columnsByKey);
const columnData = useDataset((d) => d.columnData);

const [values, setValues] = useState<Record<string, unknown>>();
const [problem, setProblem] = useState<Problem>();

useEffect(() => {
const promises = columnKeys.map((key) => {
Expand All @@ -126,11 +126,12 @@ export function useRow(
keyedValues[columnKeys[i]] = v[i];
}
setValues(keyedValues);
setProblem(undefined);
})
.catch(_handleError);
.catch((e) => setProblem(_errorToProblem(e)));
}, [row, columnKeys, generationId, columnsByKey, columnData, fetchDelay]);

return values;
return [values, problem];
}

export default useCell;
11 changes: 8 additions & 3 deletions src/lenses/useCellValues.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { useRow } from '../hooks/useCell';
import { Problem } from '../types';

function useCellValues(rowIndex: number, columnKeys: string[], deferLoading = false) {
function useCellValues(
rowIndex: number,
columnKeys: string[],
deferLoading = false
): [unknown[] | undefined, Problem | undefined] {
const fetchDelay = deferLoading ? 200 : 0;
const values = useRow(rowIndex, columnKeys, fetchDelay);
const [values, problem] = useRow(rowIndex, columnKeys, fetchDelay);
return [
values === undefined ? values : columnKeys.map((key) => values[key]),
undefined,
problem,
];
}

Expand Down

0 comments on commit 3d8113c

Please sign in to comment.