import { Text, Box, Heading, Image, Center, Button, Flex, VStack, Divider, useToast, FormControl, FormLabel, FormHelperText, Input, FormErrorMessage, HStack, Wrap, useMediaQuery, Avatar, Textarea, Table, Thead, Tr, Th, Tbody, Td, IconButton, useDisclosure, Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalFooter, Select, NumberInput, NumberInputField, NumberInputStepper, NumberIncrementStepper, NumberDecrementStepper, useColorModeValue, StackDivider } from "@chakra-ui/react" import Card from "components/card" import PageContainer from "layouts/page-container" import Sidebar from "layouts/sidebar/sidebar" import React, { useEffect, useState } from "react" import { settingLinks } from "src/data/links" import { requestApi } from "utils/axios/request" import { Org } from "src/types/org" import { Field, Form, Formik } from "formik" import { config } from "configs/config" import { isUsernameChar, usernameInvalidTips } from "utils/user" import { isAdmin } from "utils/role" import userCustomTheme from "theme/user-custom" import { useRouter } from "next/router" import Link from "next/link" const UserOrgsPage = () => { const [orgs, setOrgs]:[Org[],any] = useState([]) const { isOpen, onOpen, onClose } = useDisclosure() const router = useRouter() const stackBorderColor = useColorModeValue(userCustomTheme.borderColor.light, userCustomTheme.borderColor.dark) useEffect(() => { getOrgs() }, []) const getOrgs = async () => { const res = await requestApi.get("/org/byUserID/0") setOrgs(res.data) } const createOrg = async (values:Org) => { await requestApi.post(`/org/create`, values) onClose() router.push(`/${values.username}`) } const onCreateOrg = () => { onOpen() } const validateUsername = async value => { let error if (!value?.trim()) { return "不能为空" } if (value?.length > config.user.usernameMaxLen) { return `长度不能超过${config.user.usernameMaxLen}` } for (const c of value) { if (!isUsernameChar(c)) { return usernameInvalidTips } } const res = await requestApi.get(`/username/exist/${value}`) if (res.data) { return `The name '${value}' is already taken.` } return error } function validateNickname(value) { let error if (!value?.trim()) { error = "不能为空" } if (value?.length > config.user.usernameMaxLen) { error = `长度不能超过${config.user.usernameMaxLen}` } return error } return ( <> 组织管理 } alignItems="left"> { orgs.map(o => {o.nickname} {isAdmin(o.role) ? 'admin' : 'member'} ) } { 新建组织 {(props) => (
{({ field, form }) => ( Username {form.errors.username} )} {({ field, form }) => ( Nickname {form.errors.nickname} )}
)}
}
) } export default UserOrgsPage