"use client"; import useSWR from "swr"; import useSWRInfinite from "swr/infinite"; import { useUserStore } from "#/store/auth"; import { useEffect, useState, useCallback } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import { ENDPOINTS } from "#/api/config"; import { Card, Button, Checkbox, TextInput, Textarea, FileInput, Label, Modal, } from "flowbite-react"; import { ReleaseLink } from "#/components/ReleaseLink/ReleaseLink"; import { CropModal } from "#/components/CropModal/CropModal"; const fetcher = async (url: string) => { const res = await fetch(url); if (!res.ok) { const error = new Error( `An error occurred while fetching the data. status: ${res.status}` ); error.message = await res.json(); throw error; } return res.json(); }; export const CreateCollectionPage = () => { const userStore = useUserStore(); const searchParams = useSearchParams(); const router = useRouter(); const [edit, setEdit] = useState(false); const [imageData, setImageData] = useState(null); const [imageUrl, setImageUrl] = useState(null); const [tempImageUrl, setTempImageUrl] = useState(null); const [isPrivate, setIsPrivate] = useState(false); const [collectionInfo, setCollectionInfo] = useState({ title: "", description: "", }); const [stringLength, setStringLength] = useState({ title: 0, description: 0, }); const [addedReleases, setAddedReleases] = useState([]); const [addedReleasesIds, setAddedReleasesIds] = useState([]); const [releasesEditModalOpen, setReleasesEditModalOpen] = useState(false); const [cropModalOpen, setCropModalOpen] = useState(false); const collection_id = searchParams.get("id") || null; const mode = searchParams.get("mode") || null; useEffect(() => { async function _checkMode() { if (mode === "edit" && collection_id) { const res = await fetch( `${ENDPOINTS.collection.base}/${collection_id}?token=${userStore.token}` ); const data = await res.json(); if ( mode === "edit" && userStore.user.id == data.collection.creator.id ) { setEdit(true); } } } if (userStore.user) { _checkMode(); } }, [userStore.user]); const handleFileRead = (e, fileReader) => { const content = fileReader.result; setTempImageUrl(content); }; const handleFilePreview = (file) => { const fileReader = new FileReader(); fileReader.onloadend = (e) => { handleFileRead(e, fileReader); }; fileReader.readAsDataURL(file); }; function handleInput(e) { const regex = /[^a-zA-Zа-яА-Я0-9_.,:()!? \[\]]/g; setCollectionInfo({ ...collectionInfo, [e.target.name]: e.target.value.replace(regex, ""), }); setStringLength({ ...stringLength, [e.target.name]: e.target.value.replace(regex, "").length, }); } function submit(e) { e.preventDefault(); console.log(collectionInfo.title.length); console.log({ ...collectionInfo, private: isPrivate, image: imageData, }); } function _deleteRelease(release: any) { let releasesArray = []; let idsArray = []; for (let i = 0; i < addedReleases.length; i++) { if (addedReleases[i].id != release.id) { releasesArray.push(addedReleases[i]); idsArray.push(addedReleasesIds[i]); } } setAddedReleases(releasesArray); setAddedReleasesIds(idsArray); } return (

{edit ? "Редактирование коллекции" : "Создание коллекции"}

submit(e)} >
handleInput(e)} value={collectionInfo.title} maxLength={60} />

{stringLength.title}/60