refact api merge with Api
parent
1f062eeca1
commit
5be138ae63
@ -1,35 +0,0 @@
|
||||
import useSWR from "swr"
|
||||
import qs from "query-string"
|
||||
|
||||
export function useUsers(user, params) {
|
||||
const { data, error } = useSWR([
|
||||
`/users?${qs.stringify(params)}`, user.accessToken
|
||||
])
|
||||
|
||||
return [
|
||||
data,
|
||||
error,
|
||||
]
|
||||
}
|
||||
|
||||
export function useProducts(user, params) {
|
||||
const { data, error } = useSWR([
|
||||
`/products?${qs.stringify(params)}`, user.accessToken
|
||||
])
|
||||
|
||||
return [
|
||||
data,
|
||||
error,
|
||||
]
|
||||
}
|
||||
|
||||
export function useCategories(user, params) {
|
||||
const { data, error } = useSWR([
|
||||
`/categories?${qs.stringify(params)}`, user.accessToken
|
||||
])
|
||||
|
||||
return [
|
||||
data,
|
||||
error
|
||||
]
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
import useSWR from "swr"
|
||||
import qs from "query-string"
|
||||
|
||||
export function useSales(user, params) {
|
||||
const { data, error } = useSWR([
|
||||
`/sales?${qs.stringify(params)}`, user.accessToken
|
||||
])
|
||||
|
||||
return [
|
||||
data,
|
||||
error
|
||||
]
|
||||
}
|
@ -1,5 +1,140 @@
|
||||
import { useState } from "react"
|
||||
import {
|
||||
Button,
|
||||
Alert,
|
||||
AlertIcon,
|
||||
Table,
|
||||
Thead,
|
||||
Tr,
|
||||
Td,
|
||||
Th,
|
||||
Tbody,
|
||||
Menu,
|
||||
MenuItem,
|
||||
MenuButton,
|
||||
MenuList,
|
||||
useToast,
|
||||
} from "@chakra-ui/react"
|
||||
import { Link } from "react-router-dom"
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
|
||||
import { mutate } from 'swr'
|
||||
import qs from "query-string"
|
||||
import {
|
||||
Breadcrumb,
|
||||
Card,
|
||||
Loading,
|
||||
Pagination,
|
||||
useDebounce,
|
||||
AlertDialog,
|
||||
SearchInput,
|
||||
useModalState,
|
||||
} from "../../components/Common"
|
||||
import { useUsers, deleteUser } from "./Api"
|
||||
import { useAuth } from "../../context/AppContext"
|
||||
|
||||
export default function List() {
|
||||
const { user } = useAuth()
|
||||
const toast = useToast()
|
||||
|
||||
const [page, setPage] = useState(1)
|
||||
const [search, setSearch] = useState('')
|
||||
const q = useDebounce(search, 600)
|
||||
const params = { page, q }
|
||||
const [data, error] = useUsers(user, params)
|
||||
|
||||
const [isOpen, toggle, selected] = useModalState(false)
|
||||
|
||||
const handleDelete = async () => {
|
||||
await deleteUser(selected.id, user.accessToken)
|
||||
.then((res) => {
|
||||
toast({
|
||||
title: res.status,
|
||||
description: "item dihapus",
|
||||
status: "success",
|
||||
position: "top-right",
|
||||
duration: 4000,
|
||||
isClosable: true
|
||||
})
|
||||
mutate([`/users?${qs.stringify(params)}`, user.accessToken])
|
||||
})
|
||||
.catch((err) => {
|
||||
toast({
|
||||
title: err.status,
|
||||
description: err.message,
|
||||
status: "error",
|
||||
position: "top-right",
|
||||
duration: 4000,
|
||||
isClosable: true
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if(error) {
|
||||
return (
|
||||
<Alert status="error">
|
||||
<AlertIcon />
|
||||
{error.message}
|
||||
</Alert>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div>Penjualan</div>
|
||||
<>
|
||||
<Breadcrumb main={["/users", "pengguna"]}/>
|
||||
<Card>
|
||||
<Button as={Link} to="/users/create" size="md" mb="3">
|
||||
tambah
|
||||
</Button>
|
||||
<SearchInput setter={[search, setSearch]}/>
|
||||
{data ? (
|
||||
<>
|
||||
<Table variant="simple" mt="2" mb="4">
|
||||
<Thead>
|
||||
<Tr>
|
||||
<Th>nama</Th>
|
||||
<Th>email</Th>
|
||||
<Th>role</Th>
|
||||
<Th></Th>
|
||||
</Tr>
|
||||
</Thead>
|
||||
<Tbody>
|
||||
{data.users.map((auser) => auser.id !== user.id && (
|
||||
<Tr key={auser.id}>
|
||||
<Td>{auser.name}</Td>
|
||||
<Td>{auser.email}</Td>
|
||||
<Td>{auser.role}</Td>
|
||||
<Td isNumeric>
|
||||
<Menu>
|
||||
<MenuButton as={Button}>
|
||||
<FontAwesomeIcon icon="ellipsis-v"/>
|
||||
</MenuButton>
|
||||
<MenuList>
|
||||
<MenuItem as={Link} to={`/users/${auser.id}/edit`}>ubah</MenuItem>
|
||||
<MenuItem
|
||||
onClick={() => {
|
||||
toggle(auser)
|
||||
}}
|
||||
>
|
||||
hapus
|
||||
</MenuItem>
|
||||
</MenuList>
|
||||
</Menu>
|
||||
</Td>
|
||||
</Tr>
|
||||
))}
|
||||
</Tbody>
|
||||
</Table>
|
||||
<Pagination page={page} setPage={setPage} totalPages={data.meta.totalPages}/>
|
||||
</>
|
||||
) : (
|
||||
<Loading/>
|
||||
)}
|
||||
</Card>
|
||||
<AlertDialog
|
||||
isOpen={isOpen}
|
||||
onClose={handleDelete}
|
||||
toggle={() => toggle()}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue