Commit c1a57457 by Arjun Jhukal

updated the meta for site dynamic

parent d64c3642
...@@ -5,15 +5,36 @@ import ProviderWrapper from "./ProviderWrapper"; ...@@ -5,15 +5,36 @@ import ProviderWrapper from "./ProviderWrapper";
import { AgeChecker } from "./AgeChecker"; import { AgeChecker } from "./AgeChecker";
import TopLoader from "./TopLoader"; import TopLoader from "./TopLoader";
import React from "react"; import React from "react";
import { pageSEO } from "@/serverApi/game";
export const metadata: Metadata = { const metadata: Metadata = {
title: "Sweepstake", title: "Sweepstake",
description: "Sweepstake - Online Gaming Platform", description: "Sweepstake - Online Gaming Platform",
icons: { icons: {
icon: "/assets/images/logo.png", icon: "/assets/images/logo.png",
}, },
}; };
export async function generateMetadata(): Promise<Metadata> {
try {
const response = await pageSEO();
const seoData = response;
console.log(response);
return {
title: seoData?.data?.site_name || metadata.title,
description: seoData?.data?.description || metadata.description,
openGraph: {
title: seoData?.data?.site_name || seoData?.data?.site_name || metadata.title,
description: seoData?.data?.description || seoData?.data?.description || metadata.description,
images: seoData?.data?.logo ? [seoData.logo] : ["/assets/images/logo.png"],
},
icons: seoData?.favicon || metadata.icons,
};
} catch (error) {
console.error("SEO metadata fetch failed:", error);
return metadata;
}
}
const inter = Inter({ const inter = Inter({
subsets: ['latin'], subsets: ['latin'],
fallback: ['sans-serif'], fallback: ['sans-serif'],
......
...@@ -37,7 +37,7 @@ export default function SiteSetting() { ...@@ -37,7 +37,7 @@ export default function SiteSetting() {
title: usp.title, title: usp.title,
description: usp.description, description: usp.description,
icon: null, icon: null,
icon_url: usp.icon_url icon_url: usp.icon
})) }))
} : SiteInitialRequest, } : SiteInitialRequest,
enableReinitialize: true, enableReinitialize: true,
...@@ -106,7 +106,7 @@ export default function SiteSetting() { ...@@ -106,7 +106,7 @@ export default function SiteSetting() {
const handleAddUSP = () => { const handleAddUSP = () => {
formik.setFieldValue("unique_selling_points", [ formik.setFieldValue("unique_selling_points", [
...formik.values.unique_selling_points, ...formik.values.unique_selling_points,
{ title: "", description: "", icon: null }, { title: "", description: "", icon: null, icon_url: "" },
]); ]);
}; };
...@@ -192,81 +192,93 @@ export default function SiteSetting() { ...@@ -192,81 +192,93 @@ export default function SiteSetting() {
</div> </div>
<div className="form__fields p-6 lg:p-10 space-y-6"> <div className="form__fields p-6 lg:p-10 space-y-6">
{formik.values.unique_selling_points.map((usp, index) => ( {formik.values.unique_selling_points.map((usp, index) => {
<div console.log(usp);
key={index} return (
className="grid gap-4 lg:gap-6 md:grid-cols-2 lg:grid-cols-3 items-start relative border border-gray rounded-lg p-4" <div
> key={index}
{formik.values.unique_selling_points.length > 1 && ( className="grid gap-4 lg:gap-6 md:grid-cols-2 lg:grid-cols-3 items-start relative border border-gray rounded-lg p-4"
<IconButton >
onClick={() => handleRemoveUSP(index)} {formik.values.unique_selling_points.length > 1 && (
className="!absolute !top-2 !right-2 !text-red-500 !justify-end !z-[9]" <IconButton
> onClick={() => handleRemoveUSP(index)}
<CloseCircle size={18} /> className="!absolute !top-2 !right-2 !text-red-500 !justify-end !z-[9]"
</IconButton> >
)} <CloseCircle size={18} />
</IconButton>
)}
{/* USP Title */} {/* USP Title */}
<div className="input__field"> <div className="input__field">
<InputLabel>USP Title<span className="text-red-500">*</span></InputLabel> <InputLabel>USP Title<span className="text-red-500">*</span></InputLabel>
<OutlinedInput <OutlinedInput
fullWidth fullWidth
name={`unique_selling_points[${index}].title`} name={`unique_selling_points[${index}].title`}
placeholder="Enter USP Title" placeholder="Enter USP Title"
value={usp.title} value={usp.title}
onChange={formik.handleChange} onChange={formik.handleChange}
onBlur={formik.handleBlur} onBlur={formik.handleBlur}
/> />
<span className="error"> <span className="error">
{formik.touched.unique_selling_points?.[index]?.title && {formik.touched.unique_selling_points?.[index]?.title &&
(formik.errors.unique_selling_points?.[index] as any)?.title (formik.errors.unique_selling_points?.[index] as any)?.title
? (formik.errors.unique_selling_points?.[index] as any).title ? (formik.errors.unique_selling_points?.[index] as any).title
: ""} : ""}
</span> </span>
</div> </div>
{/* USP Description */} {/* USP Description */}
<div className="input__field"> <div className="input__field">
<InputLabel>USP Description<span className="text-red-500">*</span></InputLabel> <InputLabel>USP Description<span className="text-red-500">*</span></InputLabel>
<OutlinedInput <OutlinedInput
fullWidth fullWidth
name={`unique_selling_points[${index}].description`} name={`unique_selling_points[${index}].description`}
placeholder="Enter USP Description" placeholder="Enter USP Description"
value={usp.description} value={usp.description}
onChange={formik.handleChange} onChange={formik.handleChange}
onBlur={formik.handleBlur} onBlur={formik.handleBlur}
/> />
<span className="error"> <span className="error">
{formik.touched.unique_selling_points?.[index]?.description && {formik.touched.unique_selling_points?.[index]?.description &&
(formik.errors.unique_selling_points?.[index] as any)?.description (formik.errors.unique_selling_points?.[index] as any)?.description
? (formik.errors.unique_selling_points?.[index] as any).description ? (formik.errors.unique_selling_points?.[index] as any).description
: ""} : ""}
</span> </span>
</div> </div>
{/* USP Icon */} {/* USP Icon */}
<div className="input__field"> <div className="input__field">
<InputFile <InputFile
name={`unique_selling_points[${index}].icon`} name={`unique_selling_points[${index}].icon`}
label="USP Icon" label="USP Icon"
value={usp.icon || null} value={usp.icon || null}
onChange={(file: File | File[] | null) => onChange={(file: File | File[] | null) =>
formik.setFieldValue(`unique_selling_points[${index}].icon`, file) formik.setFieldValue(`unique_selling_points[${index}].icon`, file)
} }
onBlur={() => formik.setFieldTouched(`unique_selling_points[${index}].icon`, true)} onBlur={() => formik.setFieldTouched(`unique_selling_points[${index}].icon`, true)}
serverFile={data?.data?.unique_selling_points[index]?.icon} serverFile={typeof usp.icon_url === "string" ? usp.icon_url : ""}
/> // handle remove icon (server file)
<span className="error"> onRemoveServerFile={() => {
{formik.touched.unique_selling_points?.[index]?.icon && const updatedUSPs = [...formik.values.unique_selling_points];
(formik.errors.unique_selling_points?.[index] as any)?.icon updatedUSPs[index] = {
? (formik.errors.unique_selling_points?.[index] as any).icon ...updatedUSPs[index],
: ""} icon_url: "",
</span> };
formik.setFieldValue("unique_selling_points", updatedUSPs);
}}
/>
<span className="error">
{formik.touched.unique_selling_points?.[index]?.icon &&
(formik.errors.unique_selling_points?.[index] as any)?.icon
? (formik.errors.unique_selling_points?.[index] as any).icon
: ""}
</span>
</div>
</div> </div>
</div> )
))} })}
<Button variant="text" color="primary" onClick={handleAddUSP} className="!p-0"> <Button variant="text" color="primary" onClick={handleAddUSP} className="!p-0 !text-title !max-w-fit">
+ Add More USP + Add More USP
</Button> </Button>
</div> </div>
......
...@@ -8,6 +8,9 @@ export async function getAllGames(): Promise<GameResponseProps> { ...@@ -8,6 +8,9 @@ export async function getAllGames(): Promise<GameResponseProps> {
export async function getSubGames(): Promise<any> { export async function getSubGames(): Promise<any> {
return serverBaseQuery("/api/general/home/sub-games"); return serverBaseQuery("/api/general/home/sub-games");
} }
export async function pageSEO(): Promise<any> {
return serverBaseQuery("/api/general/home/seo");
}
export async function getUsp(): Promise<any> { export async function getUsp(): Promise<any> {
return serverBaseQuery("/api/general/home/usp"); return serverBaseQuery("/api/general/home/usp");
} }
...@@ -31,6 +34,7 @@ export async function getUserGameCredentials(): Promise<CredentialsResponseProps ...@@ -31,6 +34,7 @@ export async function getUserGameCredentials(): Promise<CredentialsResponseProps
withAuth: true, withAuth: true,
}); });
} }
export async function getUserGameBalance(): Promise<CredentialsResponseProps> { export async function getUserGameBalance(): Promise<CredentialsResponseProps> {
const cookieStore = await cookies(); const cookieStore = await cookies();
const access_token = cookieStore.get("access_token")?.value; const access_token = cookieStore.get("access_token")?.value;
......
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