'use client' import { Button } from "@heroui/button"; import { Card, Checkbox, CheckboxGroup, Divider, Input, Radio, RadioGroup, Select, SelectItem, Slider, Switch, Tab, Table, Tabs, Textarea, User } from "@heroui/react"; import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { TimesIcon } from "@/components/icons"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { close, error, loading } from "@/config/swal"; import Swal from 'sweetalert2'; import withReactContent from 'sweetalert2-react-content'; import dynamic from 'next/dynamic'; import { useForm } from "react-hook-form"; import * as z from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import parse from 'html-react-parser'; export default function CreateMagazineForm() { const router = useRouter(); const JoditEditor = dynamic(() => import('jodit-react'), { ssr: false }); const MySwal = withReactContent(Swal); const [isVisible, setIsVisible] = useState(false); const [tabs, setTabs] = useState("personal-info") const editor = useRef(null); const [content, setContent] = useState(''); const handleTab = (tab: any) => { setTabs(tab); }; let [files, setFiles] = useState([]); const removeFile = (name: string) => { const arrayFile: File[] = []; for (const element of files) { if (element.name !== name) { arrayFile.push(element); } } setFiles(arrayFile); }; const handleFileChange = (event: any) => { const newFiles: FileList | null = event.target.files; if (newFiles) { const allowedExtensions = ['.doc', '.docx', '.pdf', '.ppt', '.pptx', '.xlsx', '.csv']; let temp: File[] = [...files]; // Salin file-file yang sudah ada for (let i = 0; i < newFiles.length; i++) { const file = newFiles[i]; const fileExtension = file.name.split('.').pop()?.toLowerCase(); if (fileExtension && allowedExtensions.includes(`.${fileExtension}`)) { temp.push(file); } else { alert('Format file tidak valid. Hanya file .doc, .docx, .ppt, .pptx, .xlsx, .csv atau .pdf yang diperbolehkan.'); } } setFiles(temp); } }; const toggleVisibility = () => setIsVisible(!isVisible); const validationSchema = z.object({ title: z.string().min(1, { message: "Required" }), slug: z.string().min(1, { message: "Required" }), }); const formOptions = { resolver: zodResolver(validationSchema) }; type ArticleSchema = z.infer; const { register, handleSubmit, formState: { errors }, formState, setValue } = useForm(formOptions); const save = async (data: any) => { const parsedContent = parse(content); console.log(parsedContent); const request = { title: data.title, slug: data.slug, articleBody: data.articleBody, status: 1, }; console.log(request); // loading(); // // const res = await saveManualContext(request); // if (res.error) { // error(res.message); // return false; // } close(); successSubmit("/admin/magazine") } async function onSubmit(data: any) { MySwal.fire({ title: "Save Data", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Save", }).then((result) => { if (result.isConfirmed) { save(data); } }); } function successSubmit(redirect: string) { MySwal.fire({ title: 'Sukses', icon: 'success', confirmButtonColor: '#3085d6', confirmButtonText: 'OK', }).then((result) => { if (result.isConfirmed) { router.push(redirect); } }); } return (
<>
} /> {errors.title?.message && (

{errors.title?.message}

)}
} /> {errors.slug?.message && (

{errors.slug?.message}

)}

Description

setContent(newContent)} className="dark:text-black" />

Upload File (Opsional)

Support file format in word, excel, ppt and pdf

{files?.length > 0 && files?.map((list: File) => ( )) }
{" "}
) }