/*! Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ import { ApiPaginatedOperationName, EntityTypes, GetOperationEntity } from '@ada/api/client/types'; import { BaseTable, BaseTableProps } from './BaseTable'; import { ErrorBoundary } from '../errors'; import { UseListAllOperation } from '$api/hooks/generator'; import { useI18nContext } from '$strings'; import React, { useMemo } from 'react'; export interface AllQueryResultTableProps< OName extends ApiPaginatedOperationName, THook extends (...args: any[]) => any = UseListAllOperation, THookResult extends any = ReturnType, OEntity extends EntityTypes | false = GetOperationEntity extends never ? false : GetOperationEntity, > extends Omit, 'errorText' | 'items'> { readonly allQueryResult: THookResult; readonly errorText?: string | ((error: any) => string | undefined); } export type ConstrainedAllQueryResultTableProps = Omit< AllQueryResultTableProps, 'allQueryResult' | 'columnDefinitions' >; export const AllQueryResultTable = ({ allQueryResult, errorText: errorTextProp, ...props }: AllQueryResultTableProps) => { const { LL } = useI18nContext(); const [items, queryInfo] = allQueryResult; // TODO: create generic error handling for list table results const queryResultError = queryInfo.error; const errorText = useMemo(() => { if (queryResultError == null) return undefined; if (errorTextProp) { if (typeof errorTextProp === 'function') { return errorTextProp(queryResultError); } return errorTextProp; } if (queryResultError.message) { return LL.VIEW.error.failedToFetchDetailed({ details: queryResultError.message }); } return LL.VIEW.error.failedToFetch(); }, [errorTextProp, queryResultError]); return ( ); };