merge next-lib to remote/api

This commit is contained in:
tmshv committed 2023-02-09 19:55:09 +05:00
1 parent 780e9ac0e8
commit 7c8fd851b1
2 files changed
+17 -41

No files matched your search

-40
View File
@@ -1,40 +0,0 @@
import { NextPageContext } from "next"
export interface IResponseItems<T> {
items: T[]
nextPage: number
prevPage: number
}
/**
* 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 type FactoryFunction<I, O> =
| ((response: I) => O)
| ((response: I) => Promise<O>)
export type ApiDefaultResponse<O> = () => O
export function apiGet<I, O>(factory: FactoryFunction<I, O>) {
return async (url: string, getDefaultResponse: ApiDefaultResponse<O>) => {
const res = await fetch(url)
if (res.ok) {
const data = await res.json() as I
return factory(data)
}
return getDefaultResponse()
}
}
+17 -1
View File
@@ -1,9 +1,25 @@
import { apiGet } from "@/next-lib"
import { createHomeCards, createMenu, createPage, createPageUrls } from "@/remote/factory" import { createHomeCards, createMenu, createPage, createPageUrls } from "@/remote/factory"
import { IMenu, IPage, PageCardDto } from "@/types" import { IMenu, IPage, PageCardDto } from "@/types"
const backendUrl = "https://hudozka.tmshv.com" const backendUrl = "https://hudozka.tmshv.com"
export type FactoryFunction<I, O> =
| ((response: I) => O)
| ((response: I) => Promise<O>)
export type ApiDefaultResponse<O> = () => O
export function apiGet<I, O>(factory: FactoryFunction<I, O>) {
return async (url: string, getDefaultResponse: ApiDefaultResponse<O>) => {
const res = await fetch(url)
if (res.ok) {
const data = await res.json() as I
return factory(data)
}
return getDefaultResponse()
}
}
export async function getUrls(): Promise<string[]> { export async function getUrls(): Promise<string[]> {
let urls: string[] = [] let urls: string[] = []
const limit = 100 const limit = 100