import { useSearchParams } from 'react-router-dom'; import { useEffect, useState } from 'react'; import toast from 'react-hot-toast'; // Components import { HiSquare2Stack } from 'react-icons/hi2'; import { HiTrash } from 'react-icons/hi'; import { StyledOperationTable } from './styled'; import Menus from '../../components/Menus/Menus'; import Table from '../../components/Table'; import Direction from '../../commons/styles/Direction'; import Message from '../../components/Message'; import Search from '../../components/Search'; import SortBy from '../../components/SortBy'; import OrderBy from '../../components/OrderBy'; // Types import { TRoom } from '../../globals/types'; // Constants import { useFetch } from '../../hooks/useFetch'; import { ROOM_PATH } from '../../constants/path'; import { STATUS_CODE } from '../../constants/statusCode'; import { CONFIRM_DELETE, DELETE_SUCCESS } from '../../constants/messages'; import { ROOM_PAGE } from '../../constants/variables'; // Styled import Spinner from '../../commons/styles/Spinner'; // Utils import { sendRequest } from '../../helpers/sendRequest'; interface IRoomRow { room: TRoom; openFormDialog: () => void; setRoom: React.Dispatch>; reload: boolean; setReload: React.Dispatch>; } const RoomRow = ({ room, openFormDialog, setRoom, reload, setReload, }: IRoomRow) => { const handleOnEdit = (room: TRoom) => { setRoom(room); openFormDialog(); }; const handleOnDelete = async (room: TRoom) => { if (confirm(CONFIRM_DELETE)) { const response = await sendRequest( ROOM_PATH + `/${room.id}`, null, 'DELETE', ); if (response.statusCode === STATUS_CODE.OK) { toast.success(DELETE_SUCCESS); // Reload table setReload(!reload); } } }; const { id, name, amount, price, discount, status } = room; // prettier-ignore const statusText = status ? 'Valid' : 'Invalid'; return (
{id}
{name}
{amount}
{price}
{discount}
{statusText}
} onClick={() => handleOnEdit(room)} > Edit } onClick={() => handleOnDelete(room)}> Delete
); }; interface IRoomTable { reload: boolean; setReload: React.Dispatch>; openFormDialog: () => void; setRoom?: React.Dispatch>; } const RoomTable = ({ reload, setReload, openFormDialog, setRoom, }: IRoomTable) => { const [nameSearch, setNameSearch] = useState(''); const [searchParams] = useSearchParams(); const [rooms, setRooms] = useState([]); const sortByValue = searchParams.get('sortBy') ? searchParams.get('sortBy')! : ''; const orderByValue = searchParams.get('orderBy') ? searchParams.get('orderBy')! : ''; const { data, isPending, errorMsg } = useFetch( 'rooms', 'name', nameSearch, sortByValue, orderByValue, reload, ); useEffect(() => { if (data) { setRooms(data); } else { setRooms([]); } if (errorMsg) { console.error(errorMsg); } }, [data, errorMsg]); return ( <> {isPending && } {rooms.length ? (
Id
Name
Amount
Price
Discount
Status
data={rooms} render={(room: TRoom) => ( )} />
) : ( !isPending && No data to show here! )}
); }; export default RoomTable;