import axios from 'axios' import { NextPageContext } from 'next' export interface IResponseItems { items: T[] nextPage: number prevPage: number } export async function requestGet(url: string, defaultResponse: T): Promise { try { const res = await axios.get(url) return res.data } catch (e) { return defaultResponse } } /** * This wrapper prevents fetching api request in static export mode and production environment * because nextjs call getInitialProps on the client side * * @param {*} fn */ export function wrapInitialProps(fn: (ctx: NextPageContext) => void) { return async (ctx: NextPageContext) => { if (process.env.NODE_ENV === 'production' && process.browser) { return window['__NEXT_DATA__'].props.pageProps; } return fn(ctx) } } export function createApiUrl(path: string) { return `https://api.tmshv.com/hudozka${path}` } export function apiGet(factory: (response: I) => O) { return async (url: string, defaultResponse: O) => { const res = await requestGet(url, null) if (!res) { return defaultResponse } return factory(res) } }