feat:form add expert,list popup

This commit is contained in:
Anang Yusman 2025-06-14 09:15:59 +08:00
parent 45a7ec116a
commit 0f2fd15e8c
8 changed files with 287 additions and 29 deletions

View File

@ -299,6 +299,18 @@ export default function AddExpertForm() {
</FormItem>
)}
/>
<input
type="text"
name="usernamefake"
autoComplete="username"
hidden
/>
<input
type="password"
name="passwordfake"
autoComplete="new-password"
hidden
/>
<FormField
control={form.control}
name="email"

View File

@ -60,15 +60,16 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { listDataMedia } from "@/service/broadcast/broadcast";
import { listDataMedia, listDataPopUp } from "@/service/broadcast/broadcast";
import { listEnableCategory } from "@/service/content/content";
import { Checkbox } from "@/components/ui/checkbox";
import { close, loading } from "@/config/swal";
import { Link } from "@/i18n/routing";
import { data } from "jquery";
import { useToast } from "@/components/ui/use-toast";
import { setBanner } from "@/service/settings/settings";
import { setBanner, setPopUp } from "@/service/settings/settings";
import { id } from "date-fns/locale";
import CustomPagination from "@/components/table/custom-pagination";
const ContentListPopUp = () => {
const router = useRouter();
@ -129,7 +130,7 @@ const ContentListPopUp = () => {
async function fetchData() {
try {
loading();
const res = await listDataMedia(
const res = await listDataPopUp(
page - 1,
showData,
"",
@ -203,7 +204,7 @@ const ContentListPopUp = () => {
const handleBanner = async (ids: number[]) => {
try {
await Promise.all(ids.map((id) => setBanner(id, true)));
await Promise.all(ids.map((id) => setPopUp(id, true)));
toast({
title: "Sukses",
description: `${ids.length} item berhasil dijadikan banner.`,
@ -369,7 +370,7 @@ const ContentListPopUp = () => {
</div>
{selectedItems.length > 0 && (
<Button color="primary" onClick={() => handleBanner(selectedItems)}>
Jadikan Banner
Jadikan PopUp
</Button>
)}
</div>
@ -398,10 +399,15 @@ const ContentListPopUp = () => {
</div>
))}
</div>
<div className="flex justify-center mt-6">
<div className="border rounded px-3 py-1 text-sm text-gray-600">
1
</div>
<div className="mt-3">
{data && data?.length > 0 ? (
<CustomPagination
totalPage={totalPage}
onPageChange={(data) => setPage(data)}
/>
) : (
<p>No Data</p>
)}
</div>
</div>
</>

View File

@ -2,7 +2,11 @@ import { formatDateToIndonesian, shimmer, toBase64 } from "@/utils/globals";
import React, { useEffect, useRef, useState } from "react";
import "swiper/css/bundle";
import "swiper/css/navigation";
import { getHeroData, listStaticBanner } from "@/service/landing/landing";
import {
getHeroData,
listPopUp,
listStaticBanner,
} from "@/service/landing/landing";
import Link from "next/link";
import { useParams, usePathname, useRouter } from "next/navigation";
import {
@ -93,7 +97,7 @@ const HeroModal = ({
}, []);
const initFetch = async () => {
const response = await listStaticBanner(
const response = await listPopUp(
group === "mabes"
? ""
: group === "polda" && poldaName && String(poldaName)?.length > 1
@ -101,21 +105,15 @@ const HeroModal = ({
: group === "satker" && satkerName && String(satkerName)?.length > 1
? "satker-" + satkerName
: "",
locale == "en"
locale == "en"
);
const banners =
response?.data?.data?.map((item: any) => {
const media = item?.mediaUpload;
if (media?.fileType) {
media.fileTypeId = media.fileType.id;
}
return media;
}) || [];
const banners = response?.data?.data || [];
console.log("banner Modal", banners);
setHeroData(banners);
};
return (
<div className="fixed inset-0 flex items-center justify-center backdrop-brightness-50 z-50 ">
<div className="relative dark:bg-gray-900 rounded-lg w-[90%] md:w-[600px] p-4 shadow-none">
@ -311,7 +309,7 @@ const HeroNew = (props: { group?: string }) => {
String(satkerName)?.length > 1
? "satker-" + satkerName
: "",
locale == "en"
locale == "en"
);
for (let i = 0; i < resStatic?.data?.data?.length; i++) {
const media = resStatic?.data.data[i]?.mediaUpload;

View File

@ -535,10 +535,10 @@ const LoginForm = () => {
</div>
<Button
type="submit"
type="button"
fullWidth
// onClick={handleEmailValidation}
// disabled={isPending}
onClick={handleEmailValidation}
disabled={isPending}
>
Selanjutnya
</Button>

View File

@ -2383,11 +2383,231 @@ export function getMenuList(pathname: string, t: any): Group[] {
},
];
}
} else if (Number(roleId) == 4 && Number(levelNumber) == 3) {
menusSelected = [
{
groupLabel: t("apps"),
id: "dashboard",
menus: [
{
id: "dashboard",
href: "/dashboard",
label: t("dashboard"),
active: pathname.includes("/dashboard"),
icon: "material-symbols:dashboard",
submenus: [],
},
],
},
{
groupLabel: "",
id: "content",
menus: [
{
id: "content",
href: "/contributor/content/image",
label: t("content"),
active: pathname.includes("/content"),
icon: "line-md:youtube",
submenus: [
{
href: "/contributor/content/image",
label: t("image"),
active: pathname.includes("/content/image"),
icon: "ic:outline-image",
children: [],
},
{
href: "/contributor/content/video",
label: t("video"),
active: pathname.includes("/content/video"),
icon: "line-md:youtube",
children: [],
},
{
href: "/contributor/content/teks",
label: t("text"),
active: pathname.includes("/content/teks"),
icon: "heroicons:document",
children: [],
},
{
href: "/contributor/content/audio",
label: t("audio"),
active: pathname.includes("/content/audio"),
icon: "heroicons:share",
children: [],
},
// {
// href: "/contributor/content/spit",
// label: "spit",
// active: pathname.includes("/content/spit"),
// icon: "heroicons:credit-card",
// children: [],
// },
// {
// href: "/contributor/content/nulis-ai",
// label: "nulis ai",
// active: pathname.includes("/content/nulisai"),
// icon: "heroicons:credit-card",
// children: [],
// },
],
},
],
},
{
groupLabel: "",
id: "agenda-setting",
menus: [
{
id: "agenda-setting",
href: "/contributor/agenda-setting",
label: t("agenda-setting"),
active: pathname.includes("/agenda-setting"),
icon: "iconoir:journal-page",
submenus: [],
},
],
},
{
groupLabel: "",
id: "planning",
menus: [
{
id: "planning",
href: "/contributor/planning",
label: t("planning"),
active: pathname.includes("/planning"),
icon: "pajamas:planning",
submenus: [
{
href: "/contributor/planning/mediahub",
label: "mediaHub",
active: pathname.includes("/planning/mediahub"),
icon: "heroicons:arrow-trending-up",
children: [],
},
{
href: "/contributor/planning/medsos-mediahub",
label: "medsos mediahub",
active: pathname.includes("/planning/medsos-mediahub"),
icon: "heroicons:shopping-cart",
children: [],
},
],
},
],
},
{
groupLabel: "",
id: "task",
menus: [
{
id: "task",
href: "/contributor/task",
label: t("task"),
active: pathname.includes("/task"),
icon: "fluent:clipboard-task-add-24-regular",
submenus: [],
},
],
},
{
groupLabel: "",
id: "schedule",
menus: [
{
id: "schedule",
href: "/contributor/schedule",
label: t("schedule"),
active: pathname.includes("/schedule"),
icon: "uil:schedule",
submenus: [
{
href: "/contributor/schedule/press-conference",
label: t("press-conference"),
active: pathname.includes("/schedule/press-conference"),
icon: "heroicons:arrow-trending-up",
children: [],
},
{
href: "/contributor/schedule/event",
label: t("event"),
active: pathname.includes("/schedule/event"),
icon: "heroicons:shopping-cart",
children: [],
},
{
href: "/contributor/schedule/press-release",
label: t("press-release"),
active: pathname.includes("/schedule/press-release"),
icon: "heroicons:shopping-cart",
children: [],
},
],
},
],
},
{
groupLabel: "",
id: "blog",
menus: [
{
id: "blog",
href: "/contributor/blog",
label: t("blog"),
active: pathname.includes("/blog"),
icon: "fluent:clipboard-text-32-regular",
submenus: [],
},
],
},
{
groupLabel: "",
id: "curatedcontent",
menus: [
{
id: "curatedcontent",
href: "/shared/curated-content",
label: t("curated-content"),
active: pathname.includes("/curated-content"),
icon: "pixelarticons:calendar-text",
submenus: [],
},
],
},
{
groupLabel: "",
id: "communication",
menus: [
{
id: "communication",
href: "/shared/communication",
label: t("communication"),
active: pathname.includes("/communication"),
icon: "token:chat",
submenus: [],
},
],
},
{
groupLabel: "",
id: "contest",
menus: [
{
id: "contest",
href: "/shared/contest",
label: t("contest"),
active: pathname.includes("/contest"),
icon: "ic:outline-emoji-events",
submenus: [],
},
],
},
];
} else if (
(Number(roleId) == 3 ||
Number(roleId) == 4 ||
Number(roleId) == 14 ||
Number(roleId) == 15) &&
(Number(roleId) == 3 || Number(roleId) == 14 || Number(roleId) == 15) &&
Number(levelNumber) == 3
) {
if (Number(userParentLevelId) != 761) {

View File

@ -19,7 +19,7 @@ export async function listDataMedia(
export async function listDataAdvertisements(
page: number,
limit: string,
search: string,
search: string
) {
const name = search || "";
const url = `advertisements/pagination?title=${search}&enablePage=1&sortBy=createdAt&sort=desc&size=${limit}&page=${page}`;
@ -99,3 +99,15 @@ export async function saveMediaBlastBroadcast(data: any) {
const url = `media/blast/broadcast`;
return httpPostInterceptor(url, data);
}
export async function listDataPopUp(
page: number,
limit: string,
search: string,
categoryFilter: string,
statusFilter: string
) {
const name = search || "";
const url = `media/interstitial/pagination?isForAdmin=true&title=${name}&enablePage=1&sortBy=createdAt&sort=desc&size=${limit}&page=${page}&typeId=1&categoryId=${categoryFilter}&statusId=${statusFilter}`;
return httpGetInterceptor(url);
}

View File

@ -45,6 +45,11 @@ export async function listStaticBanner(
return httpGetInterceptor(url);
}
export async function listPopUp(group: any = "", isInt: Boolean = false) {
const url = `media/public/interstitial?group=${group}&isInt=${isInt}`;
return httpGetInterceptor(url);
}
export async function getPublicCategoryData(
group: any = "",
type: string = "",

View File

@ -147,3 +147,8 @@ export async function deleteAdvertisements(id: string | number) {
const url = `advertisements?id=${id}`;
return httpDeleteInterceptor(url);
}
export async function setPopUp(id: number, status: boolean) {
const url = `media/interstitial?id=${id}&status=${status}`;
return httpPostInterceptor(url);
}