diff --git a/app/[locale]/(protected)/admin/add-experts/component/table.tsx b/app/[locale]/(protected)/admin/add-experts/component/table.tsx index 0614ae37..90f87f87 100644 --- a/app/[locale]/(protected)/admin/add-experts/component/table.tsx +++ b/app/[locale]/(protected)/admin/add-experts/component/table.tsx @@ -124,7 +124,6 @@ const AddExpertTable = () => { const handleKeyDown = () => { clearTimeout(typingTimer); - typingTimer = setTimeout(doneTyping, doneTypingInterval); }; async function doneTyping() { diff --git a/app/[locale]/(protected)/admin/broadcast/component/table.tsx b/app/[locale]/(protected)/admin/broadcast/component/table.tsx index 35073096..6d7fcc2d 100644 --- a/app/[locale]/(protected)/admin/broadcast/component/table.tsx +++ b/app/[locale]/(protected)/admin/broadcast/component/table.tsx @@ -69,6 +69,7 @@ import { Link } from "@/i18n/routing"; const BroadcastTable = () => { const router = useRouter(); const searchParams = useSearchParams(); + const [search, setSearch] = React.useState(""); const [showData, setShowData] = React.useState("10"); const [categories, setCategories] = React.useState(); const [dataTable, setDataTable] = React.useState([]); @@ -119,7 +120,6 @@ const BroadcastTable = () => { const handleKeyDown = () => { clearTimeout(typingTimer); - typingTimer = setTimeout(doneTyping, doneTypingInterval); }; async function doneTyping() { @@ -147,7 +147,7 @@ const BroadcastTable = () => { const res = await listDataMedia( page - 1, showData, - "", + search, categoryFilter?.sort().join(","), statusFilter?.sort().join(",") ); @@ -218,6 +218,7 @@ const BroadcastTable = () => { placeholder="Search" onKeyUp={handleKeyUp} onKeyDown={handleKeyDown} + onChange={(e) => setSearch(e.target.value)} className="max-w-[300px]" />
diff --git a/app/[locale]/(protected)/admin/management-user/external/detail/[id]/page.tsx b/app/[locale]/(protected)/admin/management-user/external/detail/[id]/page.tsx new file mode 100644 index 00000000..e72f21c6 --- /dev/null +++ b/app/[locale]/(protected)/admin/management-user/external/detail/[id]/page.tsx @@ -0,0 +1,291 @@ +"use client"; + +import SiteBreadcrumb from "@/components/site-breadcrumb"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; + +import { Button } from "@/components/ui/button"; + +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; + +import { + getUserById, + saveUserInternal, +} from "@/service/management-user/management-user"; +import { useEffect, useState } from "react"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Link, useRouter } from "@/i18n/routing"; + +import Swal from "sweetalert2"; +import withReactContent from "sweetalert2-react-content"; +import { close, error, loading } from "@/config/swal"; +import { useParams } from "next/navigation"; +import { identity } from "@fullcalendar/core/internal"; + +const FormSchema = z.object({ + fullname: z.string({ + required_error: "Required", + }), + username: z.string({ + required_error: "Required", + }), + + identity: z.string({ + required_error: "Required", + }), + address: z.string({ + required_error: "Required", + }), + email: z.string({ + required_error: "Required", + }), + phoneNumber: z.string({ + required_error: "Required", + }), + password: z.string({ + required_error: "Required", + }), + confirmPassword: z.string({ + required_error: "Required", + }), + isValidPassword: z.boolean().refine((val) => val === true, { + message: "Check Password", + }), +}); + +export default function EditUserForm() { + const router = useRouter(); + const params = useParams(); + const id = params?.id; + const MySwal = withReactContent(Swal); + + const form = useForm>({ + resolver: zodResolver(FormSchema), + defaultValues: { + password: "", + confirmPassword: "", + }, + }); + + const passwordVal = form.watch("password"); + const confPasswordVal = form.watch("confirmPassword"); + + useEffect(() => { + initData(); + }, []); + + const initData = async () => { + loading(); + const response = await getUserById(String(id)); + const res = response?.data?.data; + close(); + console.log("res", res); + form.setValue("fullname", res?.fullname); + form.setValue("username", res?.username); + form.setValue("phoneNumber", res?.phoneNumber); + form.setValue("address", res?.address); + form.setValue("email", res?.email); + }; + + async function save(data: z.infer) { + let req: any = { + id: Number(id), + firstName: data.fullname, + username: data.username, + address: data.address, + email: data.email, + identityNumber: data.identity, + password: data.password, + passwordConf: data.confirmPassword, + isDefault: false, + }; + + loading(); + const response = await saveUserInternal(req); + + if (response?.error) { + error(response.message); + return false; + } + + close(); + MySwal.fire({ + title: "Sukses", + icon: "success", + confirmButtonColor: "#3085d6", + confirmButtonText: "Oke", + }).then((result) => { + if (result.isConfirmed) { + router.push("/admin/management-user"); + } + }); + return false; + } + + async function onSubmit(data: z.infer) { + MySwal.fire({ + title: "Simpan Data?", + text: "", + icon: "warning", + showCancelButton: true, + cancelButtonColor: "#d33", + confirmButtonColor: "#3085d6", + confirmButtonText: "Simpan", + }).then((result) => { + if (result.isConfirmed) { + save(data); + } + }); + } + + return ( +
+ +
+ +

Data Pengelola Media Hub

+ + ( + + Nama Lengkap + + + + + + + )} + /> + ( + + Username + + + + + + + )} + /> + + ( + + Nomor Identitas + + + + + + + )} + /> + + ( + + Alamat + +