From 286a8e69461b9a2adcea32cc69502703e7801713 Mon Sep 17 00:00:00 2001 From: Rama Priyanto Date: Thu, 27 Feb 2025 18:09:32 +0700 Subject: [PATCH] feat:ads page admin, fix scheduling publish, edit created time --- app/(admin)/admin/advertise/page.tsx | 290 +++++++++ app/(admin)/admin/user-level/page.tsx | 2 +- .../form/article/create-article-form.tsx | 27 +- components/form/article/edit-article-form.tsx | 115 +++- components/form/form-master-user-edit.tsx | 197 ++++-- components/form/form-master-user.tsx | 295 ++++----- components/form/login.tsx | 9 +- components/icons.tsx | 22 +- components/icons/sidebar-icon.tsx | 20 + components/landing/NewsTicker.tsx | 8 +- components/layout/navbar/NavbarHumas.tsx | 4 +- components/layout/sidebar/sidebar-mobile.tsx | 167 ++++- components/layout/sidebar/sidebar.tsx | 15 + components/main/detail/list-news.tsx | 4 +- .../table/advertise/advertise-table.tsx | 613 ++++++++++++++++++ components/table/article-table.tsx | 30 +- .../master-categories/categories-table.tsx | 7 +- config/site.ts | 20 +- service/article.ts | 9 + service/master-user.ts | 2 +- services/user-levels/user-levels-service.ts | 4 +- 21 files changed, 1545 insertions(+), 315 deletions(-) create mode 100644 app/(admin)/admin/advertise/page.tsx create mode 100644 components/table/advertise/advertise-table.tsx diff --git a/app/(admin)/admin/advertise/page.tsx b/app/(admin)/admin/advertise/page.tsx new file mode 100644 index 0000000..e9b192e --- /dev/null +++ b/app/(admin)/admin/advertise/page.tsx @@ -0,0 +1,290 @@ +"use client"; +import { AddIcon, CloudUploadIcon, TimesIcon } from "@/components/icons"; +import AdvertiseTable from "@/components/table/advertise/advertise-table"; + +import { + Button, + Card, + Chip, + Input, + Modal, + ModalBody, + ModalContent, + ModalFooter, + ModalHeader, + Switch, + Textarea, + useDisclosure, +} from "@heroui/react"; +import Link from "next/link"; +import { useRouter } from "next/navigation"; +import * as z from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { Controller, useForm } from "react-hook-form"; +import { Fragment, useEffect, useState } from "react"; +import Swal from "sweetalert2"; +import withReactContent from "sweetalert2-react-content"; + +import { useDropzone } from "react-dropzone"; +import { close, error, loading } from "@/config/swal"; +import Image from "next/image"; + +const createArticleSchema = z.object({ + title: z.string().min(2, { + message: "Judul harus diisi", + }), + url: z.string().min(2, { + message: "Link harus diisi", + }), + description: z.string().min(2, { + message: "Deskripsi harus diisi", + }), +}); + +export default function BasicPage() { + const { isOpen, onOpen, onOpenChange, onClose } = useDisclosure(); + const MySwal = withReactContent(Swal); + + const [refresh, setRefresh] = useState(false); + const [isHeader, setIsHeader] = useState(false); + + const [files, setFiles] = useState([]); + + const formOptions = { + resolver: zodResolver(createArticleSchema), + defaultValues: { title: "", description: "", url: "" }, + }; + + const { getRootProps, getInputProps } = useDropzone({ + onDrop: (acceptedFiles) => { + setFiles(acceptedFiles.map((file) => Object.assign(file))); + }, + maxFiles: 1, + accept: { + "image/*": [], + }, + }); + type UserSettingSchema = z.infer; + const { + control, + handleSubmit, + formState: { errors }, + } = useForm(formOptions); + + const onSubmit = async (values: z.infer) => { + loading(); + const formData = { + title: values.title, + description: values.description, + isHeader: isHeader, + url: values.url, + }; + console.log("dataas", formData); + close(); + // setRefresh(!refresh); + // MySwal.fire({ + // title: "Sukses", + // icon: "success", + // confirmButtonColor: "#3085d6", + // confirmButtonText: "OK", + // }).then((result) => { + // if (result.isConfirmed) { + // } + // }); + }; + + const handleRemoveFile = (file: File) => { + const uploadedFiles = files; + const filtered = uploadedFiles.filter((i) => i.name !== file.name); + setFiles([...filtered]); + }; + + return ( +
+
+
+ + +
+
+ + + {() => ( + <> + + Advertise + + +
+
+

Judul

+ ( + + )} + /> + {errors?.title && ( +

+ {errors.title?.message} +

+ )} +
+
+

Deskripsi

+ ( +