import { chakra, Flex, Button, useColorModeValue, Box, useRadioGroup, HStack, Input, Drawer, useDisclosure, DrawerOverlay, DrawerContent, Divider, Heading, Tag as ChakraTag, TagLabel, TagCloseButton } from "@chakra-ui/react" import { useViewportScroll } from "framer-motion" import NextLink from "next/link" import React, { useEffect, useState } from "react" import Logo, { LogoIcon } from "src/components/logo" import RadioCard from "components/radio-card" import { EditMode } from "src/types/editor" import Card from "components/card" import TagInput from "components/tag-input" import { Tag } from "src/types/tag" import { cloneDeep, remove } from "lodash" import { requestApi } from "utils/axios/request" import DarkMode from "components/dark-mode" function HeaderContent(props: any) { const [tags,setTags]:[Tag[],any] = useState([]) const [allTags,setAllTags] = useState([]) const { isOpen, onOpen, onClose } = useDisclosure() useEffect(() => { requestApi.get('/tags').then(res => { setAllTags(res.data) const t = [] props.ar.tags?.forEach(id => { res.data.forEach(tag => { if (tag.id === id) { t.push(tag) } }) }) setTags(t) }) },[props.ar]) const editOptions = [EditMode.Edit, EditMode.Preview] const { getRootProps, getRadioProps } = useRadioGroup({ name: "framework", defaultValue: EditMode.Edit, onChange: (v) => { props.changeEditMode(v) }, }) const group = getRootProps() const addTag = t => { setTags(t) const ids = [] t.forEach(tag => ids.push(tag.id)) props.ar.tags = ids } const removeTag = t => { const newTags = cloneDeep(tags) remove(newTags, tag => tag.id === t.id) setTags(newTags) const ids = [] newTags.forEach(tag => ids.push(tag.id)) props.ar.tags = ids } return ( <> {editOptions.map((value) => { const radio = getRadioProps({ value }) return ( {value} ) })} 文章设置 封面图片 {props.ar.cover = e.target.value; props.onChange()}} mt="4" variant="unstyled" size="sm" placeholder="输入链接,可以用github或postimg.cc当图片存储服务.." focusBorderColor="teal.400"/> 设置标签 {tags.length > 0&& { tags.map(tag => {tag.title} removeTag(tag)}/> ) } } ) } function EditorNav(props) { const ref = React.useRef() const [y, setY] = React.useState(0) const { height = 0 } = ref.current?.getBoundingClientRect() ?? {} const { scrollY } = useViewportScroll() React.useEffect(() => { return scrollY.onChange(() => setY(scrollY.get())) }, [scrollY]) return ( height ? "sm" : undefined} transition="box-shadow 0.2s" pos="fixed" top="0" zIndex="3" bg={useColorModeValue('white','gray.800')} left="0" right="0" borderTop="4px solid" borderTopColor="teal.400" width="full" > ) } export default EditorNav