import { Button, FormControl, FormLabel, Heading, Input, VStack, HStack, Box, Select, SelectContent, SelectIcon, SelectListbox, SelectOption, SelectOptionIndicator, SelectOptionText, SelectPlaceholder, SelectTrigger, SelectValue, Tag, TagLabel, TagCloseButton, Checkbox, } from "@hope-ui/solid" import { MaybeLoading } from "~/components" import { useFetch, useRouter, useT } from "~/hooks" import { handleResp, notify } from "~/utils" import { createStore } from "solid-js/store" import { For, Show, onMount } from "solid-js" import { UserPermissions } from "~/types" import { Permission, getPermissionDetail, createPermission, updatePermission, } from "~/utils/api" interface PermissionForm { name: string description: string permission: number path_pattern: string } const PermissionForm = () => { const t = useT() const { params, back } = useRouter() const { id } = params const [permission, setPermission] = createStore({ name: "", description: "", permission: 0, path_pattern: "/**", }) const [permissionLoading, loadPermission] = useFetch(() => getPermissionDetail(parseInt(id)), ) const initData = async () => { if (id) { const resp = await loadPermission() handleResp(resp, (data) => { setPermission({ name: data.name, description: data.description, permission: data.permission, path_pattern: data.path_pattern, }) }) } } onMount(() => { initData() }) const validateForm = () => { if (!permission.name.trim()) { notify.error( t("permissions.config.permissions_name") + t("global.required"), ) return false } return true } const [okLoading, ok] = useFetch(async () => { if (!validateForm()) { return Promise.reject() } if (id) { return updatePermission({ ...permission, id: parseInt(id), }) } return createPermission(permission) }) const getSelectedPermissions = () => { return UserPermissions.filter( (_, i) => ((permission.permission >> i) & 1) === 1, ) } const togglePermission = (index: number) => { const bit = 1 << index setPermission("permission", permission.permission ^ bit) } return ( {id ? t("global.edit") : t("global.add")} {t("permissions.config.permissions_name")} setPermission("name", e.currentTarget.value)} /> {t("permissions.config.permissions_description")} setPermission("description", e.currentTarget.value) } /> {t("permissions.config.permissions_permissions")} ) } export default PermissionForm