diff options
Diffstat (limited to 'src/hooks/useAPIClient.ts')
-rw-r--r-- | src/hooks/useAPIClient.ts | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/hooks/useAPIClient.ts b/src/hooks/useAPIClient.ts index a27453e..b36cfec 100644 --- a/src/hooks/useAPIClient.ts +++ b/src/hooks/useAPIClient.ts @@ -1,4 +1,5 @@ import useSWR, { responseInterface } from 'swr'; +import _ from 'lodash'; import { get } from '../requests'; type Response<T> = responseInterface<T, Error>; @@ -16,6 +17,19 @@ export interface Product { const fetcher = (endpoint: string) => get(endpoint).then(response => response.data); -export const useProducts = (): Response<Product[]> => { - return useSWR('/products', fetcher); +export const useProducts = (options = {}): Response<Product[]> => { + return useSWR('/products', fetcher, options); }; + +export const useProduct = (_id: string): Response<Product> => { + const { data: preloadedProducts } = useProducts({ revalidateOnMount: false }); + const result = useSWR(`/products/${_id}`, fetcher); + if (!result.data && result.isValidating) { + // If we are waiting for the first result, check if we can maybe + // get the data from already cached list for the time-being + const product = _.find(preloadedProducts, { _id }); + return { ...result, data: product }; + } + return result; +}; + |