diff options
Diffstat (limited to 'src/hooks')
| -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; +}; +  |