Commit 330ac706 by Arjun Jhukal

updated the fixes for the loading delay replaced the button with link to enforce prefetching

parent 262351f4
import { PATH } from '@/routes/PATH';
import { List, ListItem, ListItemButton, ListItemIcon, ListItemText } from '@mui/material'
import { ArrowSwapHorizontal, Game, Notification, Paperclip2, Setting, Setting2, StatusUp, UserSearch } from '@wandersonalwes/iconsax-react'
import { usePathname, useRouter } from 'next/navigation'
import React from 'react'
"use client";
import { PATH } from "@/routes/PATH";
import Link from "next/link";
import {
List,
ListItem,
ListItemIcon,
ListItemText,
} from "@mui/material";
import {
ArrowSwapHorizontal,
Game,
Notification,
Paperclip2,
Setting2,
StatusUp,
UserSearch,
} from "@wandersonalwes/iconsax-react";
import { usePathname } from "next/navigation";
import React from "react";
export default function AdminMenu({ open }: { open: boolean }) {
const router = useRouter();
const pathname = usePathname();
return (
<List>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
pathname === "/" ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.DASHBOARD.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<StatusUp />
</ListItemIcon>
<ListItemText
primary="Dashboard"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
pathname === "/transactions" ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.TRANSACTIONS.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<ArrowSwapHorizontal />
</ListItemIcon>
<ListItemText
primary="Transactions"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
const menuItems = [
{
label: "Dashboard",
icon: <StatusUp size={18} />,
href: PATH.DASHBOARD.ROOT,
active: pathname === PATH.DASHBOARD.ROOT,
},
{
label: "Transactions",
icon: <ArrowSwapHorizontal size={18} />,
href: PATH.ADMIN.TRANSACTIONS.ROOT,
active: pathname.startsWith(PATH.ADMIN.TRANSACTIONS.ROOT),
},
{
label: "Games",
icon: <Game size={18} />,
href: PATH.ADMIN.GAMES.ROOT,
active: [
PATH.ADMIN.GAMES.ROOT,
PATH.ADMIN.GAMES.ADD_GAME.ROOT,
"/edit-game"
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.GAMES.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Game />
</ListItemIcon>
<ListItemText
primary="Games"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
"/edit-game",
].some((p) => pathname.startsWith(p)),
},
{
label: "Players",
icon: <UserSearch size={18} />,
href: PATH.ADMIN.PLAYERS.ROOT,
active: [
PATH.ADMIN.PLAYERS.ROOT,
PATH.ADMIN.PLAYERS.ADD_PLAYER.ROOT,
"/edit-player"
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.PLAYERS.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<UserSearch />
</ListItemIcon>
<ListItemText
primary="Players"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
PATH.ADMIN.MENUS.ROOT,
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.MENUS.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Paperclip2 />
</ListItemIcon>
<ListItemText
primary="Menus"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
PATH.ADMIN.PAGES.ROOT,
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.PAGES.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Paperclip2 />
</ListItemIcon>
<ListItemText
primary="Pages"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
PATH.ADMIN.NOTIFICATIONS.ROOT,
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.NOTIFICATIONS.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Notification />
</ListItemIcon>
<ListItemText
primary="Notifications"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
PATH.ADMIN.SETTINGS.ROOT,
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.SETTINGS.ROOT) }}
"/edit-player",
].some((p) => pathname.startsWith(p)),
},
{
label: "Menus",
icon: <Paperclip2 size={18} />,
href: PATH.ADMIN.MENUS.ROOT,
active: pathname.startsWith(PATH.ADMIN.MENUS.ROOT),
},
{
label: "Pages",
icon: <Paperclip2 size={18} />,
href: PATH.ADMIN.PAGES.ROOT,
active: pathname.startsWith(PATH.ADMIN.PAGES.ROOT),
},
{
label: "Notifications",
icon: <Notification size={18} />,
href: PATH.ADMIN.NOTIFICATIONS.ROOT,
active: pathname.startsWith(PATH.ADMIN.NOTIFICATIONS.ROOT),
},
{
label: "Settings",
icon: <Setting2 size={18} />,
href: PATH.ADMIN.SETTINGS.ROOT,
active: pathname.startsWith(PATH.ADMIN.SETTINGS.ROOT),
},
];
return (
<List>
{menuItems.map(({ label, icon, href, active }, idx) => (
<ListItem key={idx}>
<Link
href={href}
className={`flex gap-2 items-center px-4 py-2 ${open ? "expanded" : "collapsed"
} ${active ? "active__menu" : ""}`}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Setting2 />
{icon}
</ListItemIcon>
<ListItemText
primary="Settings"
primary={label}
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</Link>
</ListItem>
{/* <ListItem>
<ListItemButton
className={[
open ? "expanded" : "collapsed",
[
PATH.ADMIN.SETTINGS.ROOT,
].some(path => pathname.startsWith(path)) ? "active" : ""
].join(" ")}
onClick={() => { router.push(PATH.ADMIN.SETTINGS.ROOT) }}
>
<ListItemIcon className={open ? "expanded" : "collapsed"}>
<Setting2 />
</ListItemIcon>
<ListItemText
primary="Packs"
className={open ? "expanded" : "collapsed"}
/>
</ListItemButton>
</ListItem> */}
))}
</List>
)
);
}
......@@ -16,6 +16,18 @@ export default function SiteSetting() {
const [updateSetting, { isLoading }] = useUpdateSettingMutation();
const { data } = useGetSettingsQuery();
const [serverFiles, setServerFiles] = React.useState({
favicon: data?.data?.favicon || "",
logo: data?.data?.logo || ""
})
React.useEffect(() => {
setServerFiles({
favicon: data?.data?.favicon || "",
logo: data?.data?.logo || ""
})
}, [data]);
const formik = useFormik({
initialValues: data ? {
site_name: data?.data?.site_name,
......@@ -31,13 +43,13 @@ export default function SiteSetting() {
enableReinitialize: true,
validationSchema: Yup.object({
favicon: Yup.mixed().required("Favicon is required"),
logo: Yup.mixed().required("Logo is required"),
// logo: Yup.mixed().required("Logo is required"),
site_name: Yup.string().required("Website title is required"),
unique_selling_points: Yup.array().of(
Yup.object({
title: Yup.string().required("USP title is required"),
description: Yup.string().required("USP description is required"),
icon: Yup.mixed().required("USP icon is required"),
// icon: Yup.mixed().required("USP icon is required"),
})
),
}),
......@@ -49,10 +61,10 @@ export default function SiteSetting() {
if (values.logo) formData.append("logo", values.logo);
if (data?.data?.logo) {
formData.append("logo_url", data.data.logo)
formData.append("logo_url", serverFiles.logo)
}
if (data?.data?.favicon) {
formData.append("logo_url", data.data.favicon)
formData.append("favicon_url", serverFiles.favicon)
}
formData.append("site_name", values.site_name);
......@@ -104,6 +116,13 @@ export default function SiteSetting() {
formik.setFieldValue("unique_selling_points", updated);
};
const handleServerFileRemoval = (field: "favicon" | "logo", fileUrl?: string) => {
setServerFiles((prev) => ({
...prev,
[field]: fileUrl,
}));
};
return (
<form onSubmit={formik.handleSubmit}>
{/* Site Setting */}
......@@ -140,7 +159,8 @@ export default function SiteSetting() {
value={formik.values.favicon || null}
onChange={(file: File | File[] | null) => formik.setFieldValue("favicon", file)}
onBlur={() => formik.setFieldTouched("favicon", true)}
serverFile={!formik.values.favicon ? data?.data?.favicon : ""}
serverFile={!formik.values.favicon ? serverFiles?.favicon : ""}
onRemoveServerFile={() => handleServerFileRemoval("favicon", "")}
/>
<span className="error">
{formik.touched.favicon && formik.errors.favicon ? formik.errors.favicon : ""}
......@@ -155,7 +175,8 @@ export default function SiteSetting() {
value={formik.values.logo || null}
onChange={(file: File | File[] | null) => formik.setFieldValue("logo", file)}
onBlur={() => formik.setFieldTouched("logo", true)}
serverFile={!formik.values.logo ? data?.data?.logo : ""}
serverFile={!formik.values.logo ? serverFiles?.logo : ""}
onRemoveServerFile={() => handleServerFileRemoval("logo", "")}
/>
<span className="error">
{formik.touched.logo && formik.errors.logo ? formik.errors.logo : ""}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment