fix(ui): fix metadata display issue

This commit is contained in:
psychedelicious 2024-03-01 09:57:26 +11:00
parent bbbd18f119
commit 8b03af391a
3 changed files with 16 additions and 10 deletions

View File

@ -18,7 +18,7 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
const [value, setValue] = useState<T | typeof MetadataParsePendingToken | typeof MetadataParseFailedToken>(
MetadataParsePendingToken
);
const [renderedValue, setRenderedValue] = useState<React.ReactNode>(Pending);
const [renderedValueInternal, setRenderedValueInternal] = useState<React.ReactNode>(null);
useEffect(() => {
const _parse = async () => {
@ -39,26 +39,32 @@ export const useMetadataItem = <T,>(metadata: unknown, handlers: MetadataHandler
useEffect(() => {
const _renderValue = async () => {
if (value === MetadataParsePendingToken) {
setRenderedValue(Pending);
setRenderedValueInternal(null);
return;
}
if (value === MetadataParseFailedToken) {
setRenderedValue(Failed);
setRenderedValueInternal(null);
return;
}
const rendered = await handlers.renderValue(value);
if (typeof rendered === 'string') {
setRenderedValue(<Text>{rendered}</Text>);
return;
}
setRenderedValue(rendered);
setRenderedValueInternal(rendered);
};
_renderValue();
}, [handlers, value]);
const renderedValue = useMemo(() => {
if (value === MetadataParsePendingToken) {
return <Pending />;
}
if (value === MetadataParseFailedToken) {
return <Failed />;
}
return <Text>{renderedValueInternal}</Text>;
}, [renderedValueInternal, value]);
const onRecall = useCallback(() => {
if (!handlers.recall || value === MetadataParsePendingToken || value === MetadataParseFailedToken) {
return null;

View File

@ -4,7 +4,7 @@ import type { O } from 'ts-toolbelt';
/**
* Renders a value of type T as a React node.
*/
export type MetadataRenderValueFunc<T> = (value: T) => Promise<React.ReactNode>;
export type MetadataRenderValueFunc<T> = (value: T) => Promise<string>;
/**
* Gets the label of the current metadata item as a string.

View File

@ -150,7 +150,7 @@ const buildRecallItem =
}
};
const resolveToString = (value: unknown) => new Promise<React.ReactNode>((resolve) => resolve(String(value)));
const resolveToString = (value: unknown) => new Promise<string>((resolve) => resolve(String(value)));
const buildHandlers: BuildMetadataHandlers = ({
getLabel,