Skip to content

Commit

Permalink
feat: raise and convert api errors in useCell
Browse files Browse the repository at this point in the history
  • Loading branch information
neindochoh committed Dec 13, 2023
1 parent 79d4169 commit 18cc29c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
40 changes: 29 additions & 11 deletions src/hooks/useCell.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { useEffect, useState } from 'react';
import api from '../api';
import { Dataset, useDataset } from '../stores/dataset';
import { Problem, isProblem } from '../types';

interface CachedCell {
generationId: number;
Expand Down Expand Up @@ -58,6 +59,21 @@ function _getCell(
return cell.promise;
}

function _errorToProblem(e: unknown): Problem {
if (isProblem(e)) {
return e;
}
return {
type: 'unknown',
title: 'Error',
detail: `{e}`,
};
}

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

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

function useCell(
Expand All @@ -73,11 +89,11 @@ function useCell(
const [remoteValue, setRemoteValue] = useState<unknown | null>();
useEffect(() => {
if (!dtype.lazy) return;
_getCell(columnKey, row, generationId, dtype.binary, fetchDelay).then(
(v: any) => {
_getCell(columnKey, row, generationId, dtype.binary, fetchDelay)
.then((v: unknown) => {
setRemoteValue(v);
}
);
})
.catch(_handleError);
}, [columnKey, row, generationId, dtype, fetchDelay]);

return dtype.lazy ? localValue : remoteValue;
Expand All @@ -103,13 +119,15 @@ export function useRow(
return Promise.resolve(columnData[key][row]);
}
});
Promise.all(promises).then((v) => {
const keyedValues: Record<string, unknown> = {};
for (let i = 0; i < columnKeys.length; ++i) {
keyedValues[columnKeys[i]] = v[i];
}
setValues(keyedValues);
});
Promise.all(promises)
.then((v) => {
const keyedValues: Record<string, unknown> = {};
for (let i = 0; i < columnKeys.length; ++i) {
keyedValues[columnKeys[i]] = v[i];
}
setValues(keyedValues);
})
.catch(_handleError);
}, [row, columnKeys, generationId, columnsByKey, columnData, fetchDelay]);

return values;
Expand Down
6 changes: 6 additions & 0 deletions src/types/problem.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import _ from 'lodash';

export interface Problem {
type: string;
title: string;
detail?: string;
instance?: string;
}

export function isProblem(error: unknown): error is Problem {
return _.isObject(error) && 'type' in error && 'title' in error;
}

0 comments on commit 18cc29c

Please sign in to comment.