import { createStandaloneToast, Text, Box, Heading, Image, HStack, Center, Button, Flex, Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalFooter, FormControl, FormLabel, FormHelperText, Input, FormErrorMessage, VStack, Textarea, Divider } from "@chakra-ui/react" import Card from "components/card" import Nav from "layouts/nav/nav" import PageContainer from "layouts/page-container" import Sidebar from "layouts/sidebar/sidebar" import React, { useEffect, useState } from "react" import editorLinks from "src/data/editor-links" import { requestApi } from "utils/axios/request" import { useDisclosure } from "@chakra-ui/react" import { Field, Form, Formik } from "formik" import { config } from "utils/config" import TextArticleCard from "components/articles/text-article-card" import { Article } from "src/types/posts" var validator = require('validator'); const toast = createStandaloneToast() const newPost:Article = { title: '', url: '', cover: ''} const ArticlesPage = () => { const [posts, setPosts] = useState([]) const [currentPost, setCurrentPost] = useState(newPost) useEffect(() => { getPosts() }, []) const getPosts = () => { requestApi.get(`/editor/articles`).then((res) => setPosts(res.data)).catch(_ => setPosts([])) } const { isOpen, onOpen, onClose } = useDisclosure() function validateTitle(value) { console.log(value) let error if (!value?.trim()) { error = "标题不能为空" } return error } function validateUrl(value) { let error if (!validator.isURL(value)) { error = "URL格式不合法" } return error } function validateBrief(value) { let error if (value && value.length > config.posts.briefMaxLen) { error = `文本长度不能超过${config.posts.briefMaxLen}` } return error } const submitArticle = async (values, _) => { await requestApi.post(`/editor/article`, values) onClose() toast({ description: "提交成功", status: "success", duration: 2000, isClosable: true, }) setCurrentPost(newPost) } const editArticle = (ar: Article) => { setCurrentPost(ar) onOpen() } const onDeleteArticle = () => { getPosts() toast({ description: "删除成功", status: "success", duration: 2000, isClosable: true, }) } return ( <>