diff --git a/src/components/DesaSetting.tsx b/src/components/DesaSetting.tsx index 938cd96..f6457d8 100644 --- a/src/components/DesaSetting.tsx +++ b/src/components/DesaSetting.tsx @@ -206,9 +206,12 @@ export default function DesaSetting({ permissions }: { permissions: JsonValue[] { v.name == "TTD" ? - { setViewImg(v.value); setOpenedPreview(true); }} underline="always"> - Lihat - + v.value ? + { setViewImg(v.value); setOpenedPreview(true); }} underline="always"> + Lihat + + : + "-" : v.value } diff --git a/src/components/KategoriPengaduan.tsx b/src/components/KategoriPengaduan.tsx index 0f85343..99b0fab 100644 --- a/src/components/KategoriPengaduan.tsx +++ b/src/components/KategoriPengaduan.tsx @@ -329,7 +329,7 @@ export default function KategoriPengaduan({ permissions }: { permissions: JsonVa size="sm" style={{ boxShadow: "0 0 8px rgba(0,255,200,0.2)" }} onClick={() => chooseEdit({ data: v })} - disabled={!permissions.includes("setting.kategori_pengaduan.edit")} + disabled={!permissions.includes("setting.kategori_pengaduan.edit") || v.id == "lainnya"} > @@ -344,7 +344,7 @@ export default function KategoriPengaduan({ permissions }: { permissions: JsonVa setDataDelete(v.id); openDelete(); }} - disabled={!permissions.includes("setting.kategori_pengaduan.delete")} + disabled={!permissions.includes("setting.kategori_pengaduan.delete") || v.id == "lainnya"} > diff --git a/src/components/PermissionRole.tsx b/src/components/PermissionRole.tsx index 7218355..38a49c1 100644 --- a/src/components/PermissionRole.tsx +++ b/src/components/PermissionRole.tsx @@ -1,5 +1,5 @@ import { groupPermissions } from "@/lib/groupPermission"; -import { Button, Stack, Text } from "@mantine/core"; +import { Anchor, Flex, Stack, Text } from "@mantine/core"; import { useState } from "react"; interface Node { @@ -14,7 +14,7 @@ function RenderNode({ node }: { node: Node }) { return ( {/* Title */} - - {node.label} + - {node.label} {/* Children */} {sub.map((child: any, i) => ( @@ -24,6 +24,22 @@ function RenderNode({ node }: { node: Node }) { ); } +function RenderNode2({ node }: { node: Node }) { + const sub = Object.values(node.children || {}); + + return ( + + {/* Title */} + {node.label}, + + {/* Children */} + {sub.map((child: any, i) => ( + + ))} + + ); +} + export default function PermissionRole({ permissions }: { permissions: string[] }) { const [showAll, setShowAll] = useState(false); if (!permissions?.length) return -; @@ -32,7 +48,7 @@ export default function PermissionRole({ permissions }: { permissions: string[] const rootNodes = Object.values(groups); return ( - + { showAll ? rootNodes.map((node: any, idx) => ( @@ -40,18 +56,12 @@ export default function PermissionRole({ permissions }: { permissions: string[] )) : rootNodes.slice(0, 2).map((node: any, idx) => ( - + )) } - + ); } diff --git a/src/components/PermissionTree.tsx b/src/components/PermissionTree.tsx index d1147a7..e422dda 100644 --- a/src/components/PermissionTree.tsx +++ b/src/components/PermissionTree.tsx @@ -169,7 +169,7 @@ export default function PermissionTree({ return ( Hak Akses - {permissionConfig.menus.map((menu: Node) => ( + {permissionConfig.menus.filter((menu: Node) => !menu.key.startsWith("api") && !menu.key.startsWith("credential")).map((menu: Node) => ( ))} diff --git a/src/components/UserRoleSetting.tsx b/src/components/UserRoleSetting.tsx index 08778c9..fbc1976 100644 --- a/src/components/UserRoleSetting.tsx +++ b/src/components/UserRoleSetting.tsx @@ -18,10 +18,18 @@ import { IconEdit, IconPlus, IconTrash } from "@tabler/icons-react"; import type { JsonValue } from "generated/prisma/runtime/library"; import { useState } from "react"; import useSWR from "swr"; +import listMenu from "../lib/listPermission.json"; import notification from "./notificationGlobal"; import PermissionRole from "./PermissionRole"; import PermissionTree from "./PermissionTree"; +interface MenuNode { + key: string; + label: string; + default: boolean; + children?: MenuNode[]; +} + export default function UserRoleSetting({ permissions }: { permissions: JsonValue[] }) { const [btnDisable, setBtnDisable] = useState(true); const [btnLoading, setBtnLoading] = useState(false); @@ -179,6 +187,27 @@ export default function UserRoleSetting({ permissions }: { permissions: JsonValu } } + function buildOrderList(menus: MenuNode[]): string[] { + const list: string[] = []; + + const traverse = (nodes: MenuNode[]) => { + nodes.forEach((node) => { + list.push(node.key); + if (node.children) traverse(node.children); + }); + }; + + traverse(menus); + return list; + } + + function sortByJsonOrder(arrayData: string[]): string[] { + const orderList = buildOrderList(listMenu.menus); + + return arrayData.sort((a, b) => { + return orderList.indexOf(a) - orderList.indexOf(b); + }); + } useShallowEffect(() => { if (dataEdit.name.length > 0) { @@ -212,7 +241,7 @@ export default function UserRoleSetting({ permissions }: { permissions: JsonValu { - setDataEdit({ ...dataEdit, permissions: permissions as never[] }); + setDataEdit({ ...dataEdit, permissions: sortByJsonOrder(permissions) as never[] }); }} /> @@ -263,7 +292,7 @@ export default function UserRoleSetting({ permissions }: { permissions: JsonValu { - setDataTambah({ ...dataTambah, permissions: permissions as never[] }); + setDataTambah({ ...dataTambah, permissions: sortByJsonOrder(permissions) as never[] }); }} /> @@ -346,11 +375,11 @@ export default function UserRoleSetting({ permissions }: { permissions: JsonValu {list.length > 0 ? ( list?.map((v: any) => ( - {v.name} + {v.name} - + chooseEdit({ data: v })} - disabled={!permissions.includes('setting.user_role.edit')} + disabled={!permissions.includes('setting.user_role.edit') || v.id == "developer"} > @@ -373,7 +402,7 @@ export default function UserRoleSetting({ permissions }: { permissions: JsonValu setDataDelete(v.id); openDelete(); }} - disabled={!permissions.includes('setting.user_role.delete')} + disabled={!permissions.includes('setting.user_role.delete') || v.id == "developer"} > diff --git a/src/components/UserSetting.tsx b/src/components/UserSetting.tsx index 65e7acc..6d0a067 100644 --- a/src/components/UserSetting.tsx +++ b/src/components/UserSetting.tsx @@ -107,19 +107,19 @@ export default function UserSetting({ permissions }: { permissions: JsonValue[] async function handleEdit() { try { setBtnLoading(true); - const res = await apiFetch.api.pengaduan.category.update.post(dataEdit); + const res = await apiFetch.api.user.update.post(dataEdit); if (res.status === 200) { mutate(); close(); notification({ title: "Success", - message: "Your category have been saved", + message: "Your data have been saved", type: "success", }); } else { notification({ title: "Error", - message: "Failed to edit category", + message: "Failed to edit user", type: "error", }); } @@ -127,7 +127,7 @@ export default function UserSetting({ permissions }: { permissions: JsonValue[] console.error(error); notification({ title: "Error", - message: "Failed to edit category", + message: "Failed to edit user2", type: "error", }); } finally { @@ -222,9 +222,10 @@ export default function UserSetting({ permissions }: { permissions: JsonValue[] overlayProps={{ backgroundOpacity: 0.55, blur: 3 }} > - + onValidation({ kat: "name", @@ -234,6 +235,51 @@ export default function UserSetting({ permissions }: { permissions: JsonValue[] } /> + + onValidation({ + kat: "phone", + value: e.target.value, + aksi: "edit", + }) + } + /> + + + + onValidation({ + kat: "email", + value: e.target.value, + aksi: "edit", + }) + } + /> +