diff --git a/app/apis/common/get-categories.ts b/app/apis/common/get-categories.ts new file mode 100644 index 0000000..e1cab30 --- /dev/null +++ b/app/apis/common/get-categories.ts @@ -0,0 +1,25 @@ +import { z } from 'zod' + +import { HttpServer, type THttpServer } from '~/libs/http-server' + +const categorySchema = z.object({ + data: z.array( + z.object({ + id: z.string(), + code: z.string(), + name: z.string(), + }), + ), +}) + +export type TCategorySchema = z.infer + +export const getCategories = async (parameters?: THttpServer) => { + try { + const { data } = await HttpServer(parameters).get(`/api/category`) + return categorySchema.parse(data) + } catch (error) { + // eslint-disable-next-line unicorn/no-useless-promise-resolve-reject + return Promise.reject(error) + } +} diff --git a/app/layouts/news/header-menu-mobile.tsx b/app/layouts/news/header-menu-mobile.tsx index 1b9607e..5260584 100644 --- a/app/layouts/news/header-menu-mobile.tsx +++ b/app/layouts/news/header-menu-mobile.tsx @@ -1,14 +1,18 @@ import { useState } from 'react' import { Link } from 'react-router' +import type { TCategorySchema } from '~/apis/common/get-categories' import { CloseIcon } from '~/components/icons/close' import { MenuIcon } from '~/components/icons/menu' import { useNewsContext } from '~/contexts/news' import { HeaderSearch } from '~/layouts/news/header-search' -import { MENU } from './menu' +type THeaderMenuMobile = { + menu?: TCategorySchema['data'] +} -export default function HeaderMenuMobile() { +export default function HeaderMenuMobile(properties: THeaderMenuMobile) { + const { menu } = properties const [isMenuOpen, setIsMenuOpen] = useState(false) const { setIsLoginOpen } = useNewsContext() @@ -38,19 +42,19 @@ export default function HeaderMenuMobile() { {/* List Menu */}