Build page Ticket management
This commit is contained in:
		
							parent
							
								
									4fd24d2407
								
							
						
					
					
						commit
						64d3bc72f0
					
				| 
						 | 
					@ -49,6 +49,21 @@ class TicketController extends Controller
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->searchRequest(
 | 
				
			||||||
 | 
					            builder: $tickets,
 | 
				
			||||||
 | 
					            value: $request->get('search'),
 | 
				
			||||||
 | 
					            fields: [
 | 
				
			||||||
 | 
					                'users.name',
 | 
				
			||||||
 | 
					                "start_date",
 | 
				
			||||||
 | 
					                "startPeriod.c_name",
 | 
				
			||||||
 | 
					                "end_date",
 | 
				
			||||||
 | 
					                "endPeriod.c_name",
 | 
				
			||||||
 | 
					                "typeReason.c_name",
 | 
				
			||||||
 | 
					                'status',
 | 
				
			||||||
 | 
					                "reason",
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $responseData = array_merge(
 | 
					        $responseData = array_merge(
 | 
				
			||||||
            $tickets
 | 
					            $tickets
 | 
				
			||||||
                ->join('users', 'tickets.user_id', '=', 'users.id')
 | 
					                ->join('users', 'tickets.user_id', '=', 'users.id')
 | 
				
			||||||
| 
						 | 
					@ -111,8 +126,58 @@ class TicketController extends Controller
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->searchRequest(
 | 
				
			||||||
 | 
					            builder: $tickets,
 | 
				
			||||||
 | 
					            value: $request->get('search'),
 | 
				
			||||||
 | 
					            fields: [
 | 
				
			||||||
 | 
					                'users.name',
 | 
				
			||||||
 | 
					                "start_date",
 | 
				
			||||||
 | 
					                "startPeriod.c_name",
 | 
				
			||||||
 | 
					                "end_date",
 | 
				
			||||||
 | 
					                "endPeriod.c_name",
 | 
				
			||||||
 | 
					                "typeReason.c_name",
 | 
				
			||||||
 | 
					                'status',
 | 
				
			||||||
 | 
					                "reason",
 | 
				
			||||||
 | 
					                "admin_note"
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($request->typeReason != '') {
 | 
				
			||||||
 | 
					            $tickets = $tickets->where('tickets.type', '=', $request->typeReason);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if ($request->statusFilter != '') {
 | 
				
			||||||
 | 
					            $tickets = $tickets->where('tickets.status', '=', $request->statusFilter);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $responseData = array_merge(
 | 
					        $responseData = array_merge(
 | 
				
			||||||
            $tickets->orderBy('created_at', 'desc')->paginate($request->get('per_page'))->toArray(),
 | 
					            $tickets
 | 
				
			||||||
 | 
					                ->join('users', 'tickets.user_id', '=', 'users.id')
 | 
				
			||||||
 | 
					                ->leftJoin("categories as startPeriod", function ($join) {
 | 
				
			||||||
 | 
					                    $join->on('start_period', '=', 'startPeriod.c_code');
 | 
				
			||||||
 | 
					                    $join->on('startPeriod.c_type', DB::raw("CONCAT('TIME_TYPE')"));
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                ->leftJoin("categories as endPeriod", function ($join) {
 | 
				
			||||||
 | 
					                    $join->on('end_period', '=', 'endPeriod.c_code');
 | 
				
			||||||
 | 
					                    $join->on('endPeriod.c_type', DB::raw("CONCAT('TIME_TYPE')"));
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                ->leftJoin("categories as typeReason", function ($join) {
 | 
				
			||||||
 | 
					                    $join->on('type', '=', 'typeReason.c_code');
 | 
				
			||||||
 | 
					                    $join->on('typeReason.c_type', DB::raw("CONCAT('REASON')"));
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                ->leftJoin("categories as statusTickets", function ($join) {
 | 
				
			||||||
 | 
					                    $join->on('status', '=', 'statusTickets.c_code');
 | 
				
			||||||
 | 
					                    $join->on('statusTickets.c_type', DB::raw("CONCAT('STATUS_TICKETS')"));
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					                ->select(
 | 
				
			||||||
 | 
					                    'users.name as user_name',
 | 
				
			||||||
 | 
					                    'users.email',
 | 
				
			||||||
 | 
					                    'tickets.*',
 | 
				
			||||||
 | 
					                    'startPeriod.c_name as startPeriodName',
 | 
				
			||||||
 | 
					                    'endPeriod.c_name as endPeriodName',
 | 
				
			||||||
 | 
					                    'typeReason.c_name as typeReasonName',
 | 
				
			||||||
 | 
					                    'statusTickets.c_name as statusTicketsName',
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                ->orderBy('tickets.created_at', 'desc')->paginate($request->get('per_page'))->toArray(),
 | 
				
			||||||
            ['status' => true]
 | 
					            ['status' => true]
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -210,7 +275,7 @@ class TicketController extends Controller
 | 
				
			||||||
            return response()->json(['message' => "Ticket not found", 'status' => false]);
 | 
					            return response()->json(['message' => "Ticket not found", 'status' => false]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $results = $this->getAllPeriod($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period);
 | 
					        $results = $this->getAllPeriod($ticket->start_date, $ticket->start_period, $ticket->end_date, $ticket->end_period);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        // $admin->id != user_id of ticket ---> continue
 | 
					        // $admin->id != user_id of ticket ---> continue
 | 
				
			||||||
        // Confirm
 | 
					        // Confirm
 | 
				
			||||||
        // Add records to the notes table like function Timekeeping.addNoteForUser() based on the $results array
 | 
					        // Add records to the notes table like function Timekeeping.addNoteForUser() based on the $results array
 | 
				
			||||||
| 
						 | 
					@ -251,6 +316,7 @@ class TicketController extends Controller
 | 
				
			||||||
            $ticket['updated_by'] = $admin->name;
 | 
					            $ticket['updated_by'] = $admin->name;
 | 
				
			||||||
            $ticket['admin_note'] = $admin_note;
 | 
					            $ticket['admin_note'] = $admin_note;
 | 
				
			||||||
            $ticket['status'] = 'REFUSED';
 | 
					            $ticket['status'] = 'REFUSED';
 | 
				
			||||||
 | 
					            $ticket->save();
 | 
				
			||||||
            return response()->json(['message' => "refused", 'status' => true]);
 | 
					            return response()->json(['message' => "refused", 'status' => true]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -78,6 +78,8 @@ export const getLeaveManagement = API_URL + 'v1/admin/leave-management'
 | 
				
			||||||
export const updateNoteLeave = API_URL + 'v1/admin/leave-management/saveNoteLeave'
 | 
					export const updateNoteLeave = API_URL + 'v1/admin/leave-management/saveNoteLeave'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//Tickets
 | 
					//Tickets
 | 
				
			||||||
 | 
					export const getTickets = API_URL + 'v1/admin/ticket/all'
 | 
				
			||||||
export const getTicketsOfUser = API_URL + 'v1/admin/ticket/getByUserId'
 | 
					export const getTicketsOfUser = API_URL + 'v1/admin/ticket/getByUserId'
 | 
				
			||||||
export const deleteTicket = API_URL + 'v1/admin/ticket/delete'
 | 
					export const deleteTicket = API_URL + 'v1/admin/ticket/delete'
 | 
				
			||||||
export const addTicket = API_URL + 'v1/admin/ticket/create'
 | 
					export const addTicket = API_URL + 'v1/admin/ticket/create'
 | 
				
			||||||
 | 
					export const handleTicket = API_URL + 'v1/admin/ticket/handle-ticket'
 | 
				
			||||||
| 
						 | 
					@ -64,6 +64,12 @@ interface DataTimeType {
 | 
				
			||||||
  c_name: string
 | 
					  c_name: string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface FilterInfo {
 | 
				
			||||||
 | 
					  key: string
 | 
				
			||||||
 | 
					  name: string
 | 
				
			||||||
 | 
					  type: string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Tickets = () => {
 | 
					const Tickets = () => {
 | 
				
			||||||
  const [listTickets, setListTiskets] = useState<TListTickets>({
 | 
					  const [listTickets, setListTiskets] = useState<TListTickets>({
 | 
				
			||||||
    data: [],
 | 
					    data: [],
 | 
				
			||||||
| 
						 | 
					@ -127,7 +133,7 @@ const Tickets = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'start_date',
 | 
					      name: 'start_date',
 | 
				
			||||||
      size: '11%',
 | 
					      size: '8%',
 | 
				
			||||||
      header: 'From Date',
 | 
					      header: 'From Date',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return moment(row.start_date).format('DD/MM/YYYY')
 | 
					        return moment(row.start_date).format('DD/MM/YYYY')
 | 
				
			||||||
| 
						 | 
					@ -140,7 +146,7 @@ const Tickets = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'end_date',
 | 
					      name: 'end_date',
 | 
				
			||||||
      size: '10%',
 | 
					      size: '8%',
 | 
				
			||||||
      header: 'End Date',
 | 
					      header: 'End Date',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return moment(row.end_date).format('DD/MM/YYYY')
 | 
					        return moment(row.end_date).format('DD/MM/YYYY')
 | 
				
			||||||
| 
						 | 
					@ -153,7 +159,7 @@ const Tickets = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'reason',
 | 
					      name: 'reason',
 | 
				
			||||||
      size: '20%',
 | 
					      size: '15%',
 | 
				
			||||||
      header: 'Notes',
 | 
					      header: 'Notes',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
| 
						 | 
					@ -178,7 +184,7 @@ const Tickets = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'status',
 | 
					      name: 'status',
 | 
				
			||||||
      size: '8%',
 | 
					      size: '5%',
 | 
				
			||||||
      header: 'Status',
 | 
					      header: 'Status',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        switch (row.status) {
 | 
					        switch (row.status) {
 | 
				
			||||||
| 
						 | 
					@ -193,6 +199,31 @@ const Tickets = () => {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: 'admin_note',
 | 
				
			||||||
 | 
					      size: '15%',
 | 
				
			||||||
 | 
					      header: 'Admin Notes',
 | 
				
			||||||
 | 
					      render: (row: any) => {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					          <HoverCard width={280} shadow="md">
 | 
				
			||||||
 | 
					            <HoverCard.Target>
 | 
				
			||||||
 | 
					              <Text fz={'sm'}>
 | 
				
			||||||
 | 
					                {row.admin_note !== null &&
 | 
				
			||||||
 | 
					                row.admin_note !== '' &&
 | 
				
			||||||
 | 
					                row.admin_note.length > 25
 | 
				
			||||||
 | 
					                  ? row.admin_note.slice(0, 25) + '...'
 | 
				
			||||||
 | 
					                  : row.admin_note}
 | 
				
			||||||
 | 
					              </Text>
 | 
				
			||||||
 | 
					            </HoverCard.Target>
 | 
				
			||||||
 | 
					            <HoverCard.Dropdown>
 | 
				
			||||||
 | 
					              <Textarea size="sm" autosize>
 | 
				
			||||||
 | 
					                {row.admin_note}
 | 
				
			||||||
 | 
					              </Textarea>
 | 
				
			||||||
 | 
					            </HoverCard.Dropdown>
 | 
				
			||||||
 | 
					          </HoverCard>
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: '#',
 | 
					      name: '#',
 | 
				
			||||||
      size: '5%',
 | 
					      size: '5%',
 | 
				
			||||||
| 
						 | 
					@ -215,23 +246,7 @@ const Tickets = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const filterInfo = [
 | 
					  const filterInfo: FilterInfo[] = []
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      key: 'reason',
 | 
					 | 
				
			||||||
      name: 'Notes',
 | 
					 | 
				
			||||||
      type: 'text',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      key: 'start_date',
 | 
					 | 
				
			||||||
      name: 'From Date',
 | 
					 | 
				
			||||||
      type: 'date',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      key: 'end_date',
 | 
					 | 
				
			||||||
      name: 'End Date',
 | 
					 | 
				
			||||||
      type: 'date',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const getAllTickets = async () => {
 | 
					  const getAllTickets = async () => {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,40 +1,28 @@
 | 
				
			||||||
import {
 | 
					import { getListMaster, getTickets, handleTicket } from '@/api/Admin'
 | 
				
			||||||
  addTicket,
 | 
					 | 
				
			||||||
  deleteTicket,
 | 
					 | 
				
			||||||
  getListMaster,
 | 
					 | 
				
			||||||
  getTicketsOfUser,
 | 
					 | 
				
			||||||
} from '@/api/Admin'
 | 
					 | 
				
			||||||
import { DataTablePagination } from '@/components/DataTable/DataTable'
 | 
					import { DataTablePagination } from '@/components/DataTable/DataTable'
 | 
				
			||||||
import { Xdelete, create } from '@/rtk/helpers/CRUD'
 | 
					import { create } from '@/rtk/helpers/CRUD'
 | 
				
			||||||
import { get } from '@/rtk/helpers/apiService'
 | 
					import { get } from '@/rtk/helpers/apiService'
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  Badge,
 | 
					  Badge,
 | 
				
			||||||
  Box,
 | 
					  Box,
 | 
				
			||||||
  Button,
 | 
					  Button,
 | 
				
			||||||
  Dialog,
 | 
					 | 
				
			||||||
  Group,
 | 
					 | 
				
			||||||
  HoverCard,
 | 
					  HoverCard,
 | 
				
			||||||
  Modal,
 | 
					  Modal,
 | 
				
			||||||
  Select,
 | 
					  Select,
 | 
				
			||||||
  Text,
 | 
					  Text,
 | 
				
			||||||
  Textarea,
 | 
					  Textarea,
 | 
				
			||||||
} from '@mantine/core'
 | 
					} from '@mantine/core'
 | 
				
			||||||
import { DateInput } from '@mantine/dates'
 | 
					 | 
				
			||||||
import { useForm } from '@mantine/form'
 | 
					import { useForm } from '@mantine/form'
 | 
				
			||||||
import { notifications } from '@mantine/notifications'
 | 
					import { notifications } from '@mantine/notifications'
 | 
				
			||||||
import { IconTrash } from '@tabler/icons-react'
 | 
					import { IconCheckbox, IconSquareXFilled } from '@tabler/icons-react'
 | 
				
			||||||
import moment from 'moment'
 | 
					import moment from 'moment'
 | 
				
			||||||
import { useEffect, useState } from 'react'
 | 
					import { useEffect, useState } from 'react'
 | 
				
			||||||
import classes from './TicketsManagement.module.css'
 | 
					import classes from './TicketsManagement.module.css'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type TTickets = {
 | 
					type TTickets = {
 | 
				
			||||||
  id: number
 | 
					  ticket_id: number
 | 
				
			||||||
  start_period: string
 | 
					  admin_note: string
 | 
				
			||||||
  end_period: string
 | 
					  action: string
 | 
				
			||||||
  type: string
 | 
					 | 
				
			||||||
  start_date: Date
 | 
					 | 
				
			||||||
  end_date: Date
 | 
					 | 
				
			||||||
  reason: string
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type TListTickets = {
 | 
					type TListTickets = {
 | 
				
			||||||
| 
						 | 
					@ -52,13 +40,13 @@ interface User {
 | 
				
			||||||
  updated_at: string | null
 | 
					  updated_at: string | null
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface DataReason {
 | 
					interface FilterInfo {
 | 
				
			||||||
  id: number
 | 
					  key: string
 | 
				
			||||||
  c_code: string
 | 
					  name: string
 | 
				
			||||||
  c_name: string
 | 
					  type: string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface DataTimeType {
 | 
					interface DataReason {
 | 
				
			||||||
  id: number
 | 
					  id: number
 | 
				
			||||||
  c_code: string
 | 
					  c_code: string
 | 
				
			||||||
  c_name: string
 | 
					  c_name: string
 | 
				
			||||||
| 
						 | 
					@ -70,10 +58,11 @@ const TicketsManagement = () => {
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  const [action, setAction] = useState('')
 | 
					  const [action, setAction] = useState('')
 | 
				
			||||||
  const [item, setItem] = useState({ id: 0 })
 | 
					  const [item, setItem] = useState({ id: 0 })
 | 
				
			||||||
  const [activeBtn, setActiveBtn] = useState(false)
 | 
					 | 
				
			||||||
  const [disableBtn, setDisableBtn] = useState(false)
 | 
					  const [disableBtn, setDisableBtn] = useState(false)
 | 
				
			||||||
 | 
					  const [filter, setFilter] = useState({
 | 
				
			||||||
  const [dataTimeType, setDataTimeType] = useState<DataTimeType[]>([])
 | 
					    typeReason: '',
 | 
				
			||||||
 | 
					    statusFilter: '',
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
  const [dataReason, setDataReason] = useState<DataReason[]>([])
 | 
					  const [dataReason, setDataReason] = useState<DataReason[]>([])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const getListMasterByType = async (type: string) => {
 | 
					  const getListMasterByType = async (type: string) => {
 | 
				
			||||||
| 
						 | 
					@ -97,11 +86,6 @@ const TicketsManagement = () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  useEffect(() => {
 | 
					  useEffect(() => {
 | 
				
			||||||
    const fetchData = async () => {
 | 
					    const fetchData = async () => {
 | 
				
			||||||
      const resultTimeType = await getListMasterByType('TIME_TYPE')
 | 
					 | 
				
			||||||
      setDataTimeType(
 | 
					 | 
				
			||||||
        resultTimeType.filter((item: DataTimeType) => item.c_code !== 'ALL'),
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const resultReason = await getListMasterByType('REASON')
 | 
					      const resultReason = await getListMasterByType('REASON')
 | 
				
			||||||
      setDataReason(resultReason)
 | 
					      setDataReason(resultReason)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -127,7 +111,7 @@ const TicketsManagement = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'start_date',
 | 
					      name: 'start_date',
 | 
				
			||||||
      size: '11%',
 | 
					      size: '8%',
 | 
				
			||||||
      header: 'From Date',
 | 
					      header: 'From Date',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return moment(row.start_date).format('DD/MM/YYYY')
 | 
					        return moment(row.start_date).format('DD/MM/YYYY')
 | 
				
			||||||
| 
						 | 
					@ -140,7 +124,7 @@ const TicketsManagement = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'end_date',
 | 
					      name: 'end_date',
 | 
				
			||||||
      size: '10%',
 | 
					      size: '8%',
 | 
				
			||||||
      header: 'End Date',
 | 
					      header: 'End Date',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return moment(row.end_date).format('DD/MM/YYYY')
 | 
					        return moment(row.end_date).format('DD/MM/YYYY')
 | 
				
			||||||
| 
						 | 
					@ -153,7 +137,7 @@ const TicketsManagement = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'reason',
 | 
					      name: 'reason',
 | 
				
			||||||
      size: '20%',
 | 
					      size: '15%',
 | 
				
			||||||
      header: 'Notes',
 | 
					      header: 'Notes',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
| 
						 | 
					@ -178,7 +162,7 @@ const TicketsManagement = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: 'status',
 | 
					      name: 'status',
 | 
				
			||||||
      size: '8%',
 | 
					      size: '5%',
 | 
				
			||||||
      header: 'Status',
 | 
					      header: 'Status',
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        switch (row.status) {
 | 
					        switch (row.status) {
 | 
				
			||||||
| 
						 | 
					@ -193,6 +177,31 @@ const TicketsManagement = () => {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: 'admin_note',
 | 
				
			||||||
 | 
					      size: '15%',
 | 
				
			||||||
 | 
					      header: 'Admin Notes',
 | 
				
			||||||
 | 
					      render: (row: any) => {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					          <HoverCard width={280} shadow="md">
 | 
				
			||||||
 | 
					            <HoverCard.Target>
 | 
				
			||||||
 | 
					              <Text fz={'sm'}>
 | 
				
			||||||
 | 
					                {row.admin_note !== null &&
 | 
				
			||||||
 | 
					                row.admin_note !== '' &&
 | 
				
			||||||
 | 
					                row.admin_note.length > 25
 | 
				
			||||||
 | 
					                  ? row.admin_note.slice(0, 25) + '...'
 | 
				
			||||||
 | 
					                  : row.admin_note}
 | 
				
			||||||
 | 
					              </Text>
 | 
				
			||||||
 | 
					            </HoverCard.Target>
 | 
				
			||||||
 | 
					            <HoverCard.Dropdown>
 | 
				
			||||||
 | 
					              <Textarea size="sm" autosize>
 | 
				
			||||||
 | 
					                {row.admin_note}
 | 
				
			||||||
 | 
					              </Textarea>
 | 
				
			||||||
 | 
					            </HoverCard.Dropdown>
 | 
				
			||||||
 | 
					          </HoverCard>
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name: '#',
 | 
					      name: '#',
 | 
				
			||||||
      size: '5%',
 | 
					      size: '5%',
 | 
				
			||||||
| 
						 | 
					@ -200,11 +209,22 @@ const TicketsManagement = () => {
 | 
				
			||||||
      render: (row: any) => {
 | 
					      render: (row: any) => {
 | 
				
			||||||
        return row.status === 'WAITING' ? (
 | 
					        return row.status === 'WAITING' ? (
 | 
				
			||||||
          <Box className={classes.optionIcon}>
 | 
					          <Box className={classes.optionIcon}>
 | 
				
			||||||
            <IconTrash
 | 
					            <IconCheckbox
 | 
				
			||||||
 | 
					              className={classes.editIcon}
 | 
				
			||||||
 | 
					              onClick={() => {
 | 
				
			||||||
 | 
					                setAction('confirm')
 | 
				
			||||||
 | 
					                setItem(row)
 | 
				
			||||||
 | 
					                form.reset()
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					              width={20}
 | 
				
			||||||
 | 
					              height={20}
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <IconSquareXFilled
 | 
				
			||||||
              className={classes.deleteIcon}
 | 
					              className={classes.deleteIcon}
 | 
				
			||||||
              onClick={() => {
 | 
					              onClick={() => {
 | 
				
			||||||
                setAction('delete')
 | 
					                setAction('refuse')
 | 
				
			||||||
                setItem(row)
 | 
					                setItem(row)
 | 
				
			||||||
 | 
					                form.reset()
 | 
				
			||||||
              }}
 | 
					              }}
 | 
				
			||||||
              width={20}
 | 
					              width={20}
 | 
				
			||||||
              height={20}
 | 
					              height={20}
 | 
				
			||||||
| 
						 | 
					@ -215,28 +235,53 @@ const TicketsManagement = () => {
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const filterInfo = [
 | 
					  const filterInfo: FilterInfo[] = [
 | 
				
			||||||
    {
 | 
					    // {
 | 
				
			||||||
      key: 'reason',
 | 
					    //   key: 'users.name',
 | 
				
			||||||
      name: 'Notes',
 | 
					    //   name: 'User',
 | 
				
			||||||
      type: 'text',
 | 
					    //   type: 'text',
 | 
				
			||||||
    },
 | 
					    // },
 | 
				
			||||||
    {
 | 
					    // {
 | 
				
			||||||
      key: 'start_date',
 | 
					    //   key: 'start_date',
 | 
				
			||||||
      name: 'From Date',
 | 
					    //   name: 'From Date',
 | 
				
			||||||
      type: 'date',
 | 
					    //   type: 'date',
 | 
				
			||||||
    },
 | 
					    // },
 | 
				
			||||||
    {
 | 
					    // {
 | 
				
			||||||
      key: 'end_date',
 | 
					    //   key: 'startPeriod.c_name',
 | 
				
			||||||
      name: 'End Date',
 | 
					    //   name: 'Start Period',
 | 
				
			||||||
      type: 'date',
 | 
					    //   type: 'text',
 | 
				
			||||||
    },
 | 
					    // },
 | 
				
			||||||
 | 
					    // {
 | 
				
			||||||
 | 
					    //   key: 'end_date',
 | 
				
			||||||
 | 
					    //   name: 'End Date',
 | 
				
			||||||
 | 
					    //   type: 'date',
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
 | 
					    // {
 | 
				
			||||||
 | 
					    //   key: 'endPeriod.c_name',
 | 
				
			||||||
 | 
					    //   name: 'End Period',
 | 
				
			||||||
 | 
					    //   type: 'text',
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
 | 
					    // {
 | 
				
			||||||
 | 
					    //   key: 'typeReason.c_name',
 | 
				
			||||||
 | 
					    //   name: 'Reason',
 | 
				
			||||||
 | 
					    //   type: 'text',
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
 | 
					    // {
 | 
				
			||||||
 | 
					    //   key: 'status',
 | 
				
			||||||
 | 
					    //   name: 'Status',
 | 
				
			||||||
 | 
					    //   type: 'text',
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const getAllTickets = async () => {
 | 
					  const getAllTickets = async () => {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      const searchParams = new URLSearchParams(window.location.search)
 | 
					      const searchParams = new URLSearchParams(window.location.search)
 | 
				
			||||||
      const params = {}
 | 
					      console.log(searchParams, 'searchParams')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const params = {
 | 
				
			||||||
 | 
					        typeReason: filter.typeReason,
 | 
				
			||||||
 | 
					        statusFilter: filter.statusFilter,
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      for (const [key, value] of searchParams.entries()) {
 | 
					      for (const [key, value] of searchParams.entries()) {
 | 
				
			||||||
        if (key === 'page' && value === '') {
 | 
					        if (key === 'page' && value === '') {
 | 
				
			||||||
| 
						 | 
					@ -245,8 +290,9 @@ const TicketsManagement = () => {
 | 
				
			||||||
          Object.assign(params, { [`${key}`]: value })
 | 
					          Object.assign(params, { [`${key}`]: value })
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      console.log(params, 'params')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const res = await get(getTicketsOfUser, params)
 | 
					      const res = await get(getTickets, params)
 | 
				
			||||||
      if (res.status) {
 | 
					      if (res.status) {
 | 
				
			||||||
        setListTiskets(res)
 | 
					        setListTiskets(res)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -259,18 +305,14 @@ const TicketsManagement = () => {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const handleCreate = async (values: TTickets) => {
 | 
					  const handleSave = async (values: TTickets) => {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      const res = await create(
 | 
					      const res = await create(
 | 
				
			||||||
        addTicket,
 | 
					        handleTicket,
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          // time_string: moment(values.time_string).format('YYYY-MM-DD HH:mm:ss'),
 | 
					          ticket_id: item.id,
 | 
				
			||||||
          start_date: moment(values.start_date).format('YYYY-MM-DD'),
 | 
					          action: action,
 | 
				
			||||||
          start_period: values.start_period,
 | 
					          admin_note: values.admin_note,
 | 
				
			||||||
          end_date: moment(values.end_date).format('YYYY-MM-DD'),
 | 
					 | 
				
			||||||
          end_period: values.end_period,
 | 
					 | 
				
			||||||
          type: values.type,
 | 
					 | 
				
			||||||
          reason: values.reason,
 | 
					 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        getAllTickets,
 | 
					        getAllTickets,
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
| 
						 | 
					@ -283,27 +325,15 @@ const TicketsManagement = () => {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const handleDelete = async (id: number) => {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      await Xdelete(deleteTicket, { ticket_id: id }, getAllTickets)
 | 
					 | 
				
			||||||
    } catch (error) {
 | 
					 | 
				
			||||||
      console.log(error)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  useEffect(() => {
 | 
					  useEffect(() => {
 | 
				
			||||||
    getAllTickets()
 | 
					    getAllTickets()
 | 
				
			||||||
  }, [])
 | 
					  }, [filter])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const form = useForm({
 | 
					  const form = useForm({
 | 
				
			||||||
    initialValues: {
 | 
					    initialValues: {
 | 
				
			||||||
      id: 0,
 | 
					      ticket_id: 0,
 | 
				
			||||||
      start_date: new Date(),
 | 
					      action: '',
 | 
				
			||||||
      start_period: '',
 | 
					      admin_note: '',
 | 
				
			||||||
      end_date: new Date(),
 | 
					 | 
				
			||||||
      end_period: '',
 | 
					 | 
				
			||||||
      type: '',
 | 
					 | 
				
			||||||
      reason: '',
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -314,172 +344,94 @@ const TicketsManagement = () => {
 | 
				
			||||||
          <Text>Admin/</Text>
 | 
					          <Text>Admin/</Text>
 | 
				
			||||||
          Tickets Management
 | 
					          Tickets Management
 | 
				
			||||||
        </h3>
 | 
					        </h3>
 | 
				
			||||||
        <Button
 | 
					 | 
				
			||||||
          m={5}
 | 
					 | 
				
			||||||
          onClick={() => {
 | 
					 | 
				
			||||||
            setAction('add')
 | 
					 | 
				
			||||||
            form.reset()
 | 
					 | 
				
			||||||
          }}
 | 
					 | 
				
			||||||
        >
 | 
					 | 
				
			||||||
          + Add
 | 
					 | 
				
			||||||
        </Button>
 | 
					 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <Box p={20}>
 | 
					      <Box display={'flex'} p={15}>
 | 
				
			||||||
 | 
					        <Box style={{ display: 'flex', flexFlow: 'column' }} w={'40%'}>
 | 
				
			||||||
 | 
					          <Box w="100%" display={'flex'}>
 | 
				
			||||||
 | 
					            <Select
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              w="50%"
 | 
				
			||||||
 | 
					              value={filter.typeReason}
 | 
				
			||||||
 | 
					              size="xs"
 | 
				
			||||||
 | 
					              label="Reason"
 | 
				
			||||||
 | 
					              data={dataReason.map((user) => ({
 | 
				
			||||||
 | 
					                value: user.c_code.toString(),
 | 
				
			||||||
 | 
					                label: user.c_name,
 | 
				
			||||||
 | 
					              }))}
 | 
				
			||||||
 | 
					              onChange={(e) => {
 | 
				
			||||||
 | 
					                setFilter({ ...filter, typeReason: e! })
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					            ></Select>
 | 
				
			||||||
 | 
					            <Select
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              w="50%"
 | 
				
			||||||
 | 
					              value={filter.statusFilter}
 | 
				
			||||||
 | 
					              size="xs"
 | 
				
			||||||
 | 
					              ml={'sm'}
 | 
				
			||||||
 | 
					              label="Status"
 | 
				
			||||||
 | 
					              data={[
 | 
				
			||||||
 | 
					                { value: 'WAITING', label: 'WAITING' },
 | 
				
			||||||
 | 
					                { value: 'CONFIRM', label: 'CONFIRM' },
 | 
				
			||||||
 | 
					                { value: 'REFUSED', label: 'REFUSED' },
 | 
				
			||||||
 | 
					              ]}
 | 
				
			||||||
 | 
					              onChange={(e) => {
 | 
				
			||||||
 | 
					                setFilter({ ...filter, statusFilter: e! })
 | 
				
			||||||
 | 
					              }}
 | 
				
			||||||
 | 
					            ></Select>
 | 
				
			||||||
 | 
					          </Box>
 | 
				
			||||||
 | 
					        </Box>
 | 
				
			||||||
 | 
					      </Box>
 | 
				
			||||||
 | 
					      <Box>
 | 
				
			||||||
        {listTickets.data.length > 0 && (
 | 
					        {listTickets.data.length > 0 && (
 | 
				
			||||||
          <DataTablePagination
 | 
					          <DataTablePagination
 | 
				
			||||||
            filterInfo={filterInfo}
 | 
					            filterInfo={filterInfo}
 | 
				
			||||||
            data={listTickets}
 | 
					            data={listTickets}
 | 
				
			||||||
            columns={columns}
 | 
					            columns={columns}
 | 
				
			||||||
            // searchInput
 | 
					            searchInput
 | 
				
			||||||
            size=""
 | 
					            size=""
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
        )}
 | 
					        )}
 | 
				
			||||||
      </Box>
 | 
					      </Box>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      {/* Add/Edit User modal */}
 | 
					 | 
				
			||||||
      <Modal
 | 
					      <Modal
 | 
				
			||||||
        opened={action === 'add' || action === 'edit'}
 | 
					        opened={action === 'confirm' || action === 'refuse'}
 | 
				
			||||||
        onClose={() => {
 | 
					        onClose={() => {
 | 
				
			||||||
          setAction('')
 | 
					          setAction('')
 | 
				
			||||||
          form.reset()
 | 
					          form.reset()
 | 
				
			||||||
        }}
 | 
					        }}
 | 
				
			||||||
        title={
 | 
					        title={
 | 
				
			||||||
          <Text pl={'sm'} fw={700} fz={'lg'}>
 | 
					          <Text pl={'sm'} fw={700} fz={'lg'}>
 | 
				
			||||||
            {action === 'add' && 'Add Ticket'}
 | 
					            {action === 'confirm' ? 'Confirm Ticket' : 'Refuse Ticket'}
 | 
				
			||||||
          </Text>
 | 
					          </Text>
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      >
 | 
					      >
 | 
				
			||||||
        <form
 | 
					        <form
 | 
				
			||||||
          onSubmit={form.onSubmit(async (values) => {
 | 
					          onSubmit={form.onSubmit(async (values) => {
 | 
				
			||||||
            setDisableBtn(true)
 | 
					            setDisableBtn(true)
 | 
				
			||||||
            action === 'add' && (await handleCreate(values))
 | 
					            await handleSave(values)
 | 
				
			||||||
            setDisableBtn(false)
 | 
					            setDisableBtn(false)
 | 
				
			||||||
          })}
 | 
					          })}
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          <Box pl={'md'} pr={'md'}>
 | 
					          <Box pl={'md'} pr={'md'}>
 | 
				
			||||||
            <Box display={'flex'}>
 | 
					 | 
				
			||||||
              <Box style={{ display: 'flex', flexFlow: 'column' }} w={'40%'}>
 | 
					 | 
				
			||||||
                <DateInput
 | 
					 | 
				
			||||||
                  required
 | 
					 | 
				
			||||||
                  mb={'md'}
 | 
					 | 
				
			||||||
                  label={'From Date'}
 | 
					 | 
				
			||||||
                  value={new Date(form.values.start_date)}
 | 
					 | 
				
			||||||
                  valueFormat="DD/MM/YYYY"
 | 
					 | 
				
			||||||
                  onChange={(e) => form.setFieldValue('start_date', e!)}
 | 
					 | 
				
			||||||
                ></DateInput>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Select
 | 
					 | 
				
			||||||
                  required
 | 
					 | 
				
			||||||
                  mb={'md'}
 | 
					 | 
				
			||||||
                  label={'Start Period'}
 | 
					 | 
				
			||||||
                  data={dataTimeType.map((item) => {
 | 
					 | 
				
			||||||
                    return { value: item.c_code.toString(), label: item.c_name }
 | 
					 | 
				
			||||||
                  })}
 | 
					 | 
				
			||||||
                  value={form.values.start_period}
 | 
					 | 
				
			||||||
                  error={form.errors.start_period}
 | 
					 | 
				
			||||||
                  onChange={(e) => form.setFieldValue('start_period', e!)}
 | 
					 | 
				
			||||||
                />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Select
 | 
					 | 
				
			||||||
                  required
 | 
					 | 
				
			||||||
                  mb={'md'}
 | 
					 | 
				
			||||||
                  searchable
 | 
					 | 
				
			||||||
                  label="Type"
 | 
					 | 
				
			||||||
                  data={dataReason.map((user) => ({
 | 
					 | 
				
			||||||
                    value: user.c_code.toString(),
 | 
					 | 
				
			||||||
                    label: user.c_name,
 | 
					 | 
				
			||||||
                  }))}
 | 
					 | 
				
			||||||
                  value={form.values.type}
 | 
					 | 
				
			||||||
                  error={form.errors.type}
 | 
					 | 
				
			||||||
                  onChange={(e) => form.setFieldValue('type', e!)}
 | 
					 | 
				
			||||||
                />
 | 
					 | 
				
			||||||
              </Box>
 | 
					 | 
				
			||||||
              <Box
 | 
					 | 
				
			||||||
                style={{ display: 'flex', flexFlow: 'column' }}
 | 
					 | 
				
			||||||
                w={'20%'}
 | 
					 | 
				
			||||||
              ></Box>
 | 
					 | 
				
			||||||
              <Box style={{ display: 'flex', flexFlow: 'column' }} w={'40%'}>
 | 
					 | 
				
			||||||
                <DateInput
 | 
					 | 
				
			||||||
                  required
 | 
					 | 
				
			||||||
                  mb={'md'}
 | 
					 | 
				
			||||||
                  label={'End Date'}
 | 
					 | 
				
			||||||
                  value={new Date(form.values.end_date)}
 | 
					 | 
				
			||||||
                  valueFormat="DD/MM/YYYY"
 | 
					 | 
				
			||||||
                  onChange={(e) => form.setFieldValue('end_date', e!)}
 | 
					 | 
				
			||||||
                ></DateInput>
 | 
					 | 
				
			||||||
                <Select
 | 
					 | 
				
			||||||
                  required
 | 
					 | 
				
			||||||
                  mb={'md'}
 | 
					 | 
				
			||||||
                  label={'End Period'}
 | 
					 | 
				
			||||||
                  data={dataTimeType.map((item) => {
 | 
					 | 
				
			||||||
                    return { value: item.c_code.toString(), label: item.c_name }
 | 
					 | 
				
			||||||
                  })}
 | 
					 | 
				
			||||||
                  value={form.values.end_period}
 | 
					 | 
				
			||||||
                  error={form.errors.end_period}
 | 
					 | 
				
			||||||
                  onChange={(e) => form.setFieldValue('end_period', e!)}
 | 
					 | 
				
			||||||
                />
 | 
					 | 
				
			||||||
              </Box>
 | 
					 | 
				
			||||||
            </Box>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <Textarea
 | 
					            <Textarea
 | 
				
			||||||
              label="Reason"
 | 
					              label="Admin Notes"
 | 
				
			||||||
              required
 | 
					              required
 | 
				
			||||||
              value={form.values.reason}
 | 
					              value={form.values.admin_note}
 | 
				
			||||||
              onChange={(e) => form.setFieldValue('reason', e.target.value)}
 | 
					              onChange={(e) => form.setFieldValue('admin_note', e.target.value)}
 | 
				
			||||||
            />
 | 
					            />
 | 
				
			||||||
            <Box ta={'center'}>
 | 
					            <Box ta={'center'}>
 | 
				
			||||||
              {action === 'add' && (
 | 
					              <Button
 | 
				
			||||||
                <Button
 | 
					                mt={'lg'}
 | 
				
			||||||
                  mt={'lg'}
 | 
					                bg={'green'}
 | 
				
			||||||
                  bg={'green'}
 | 
					                type="submit"
 | 
				
			||||||
                  type="submit"
 | 
					                disabled={disableBtn}
 | 
				
			||||||
                  disabled={disableBtn}
 | 
					              >
 | 
				
			||||||
                >
 | 
					                Save
 | 
				
			||||||
                  Create
 | 
					              </Button>
 | 
				
			||||||
                </Button>
 | 
					 | 
				
			||||||
              )}
 | 
					 | 
				
			||||||
            </Box>
 | 
					            </Box>
 | 
				
			||||||
          </Box>
 | 
					          </Box>
 | 
				
			||||||
        </form>
 | 
					        </form>
 | 
				
			||||||
      </Modal>
 | 
					      </Modal>
 | 
				
			||||||
 | 
					 | 
				
			||||||
      <Dialog
 | 
					 | 
				
			||||||
        className={classes.dialog}
 | 
					 | 
				
			||||||
        opened={action === 'delete'}
 | 
					 | 
				
			||||||
        withCloseButton
 | 
					 | 
				
			||||||
        onClose={() => setAction('')}
 | 
					 | 
				
			||||||
        size="lg"
 | 
					 | 
				
			||||||
        radius="md"
 | 
					 | 
				
			||||||
        position={{ top: 30, right: 10 }}
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <Text className={classes.dialogText} size="sm" mb="xs" fw={500}>
 | 
					 | 
				
			||||||
          Do you want to delete this record?
 | 
					 | 
				
			||||||
          <Group justify="center" m={10}>
 | 
					 | 
				
			||||||
            <Button
 | 
					 | 
				
			||||||
              disabled={activeBtn}
 | 
					 | 
				
			||||||
              fw={700}
 | 
					 | 
				
			||||||
              size="xs"
 | 
					 | 
				
			||||||
              variant="light"
 | 
					 | 
				
			||||||
              onClick={async () => {
 | 
					 | 
				
			||||||
                setActiveBtn(true)
 | 
					 | 
				
			||||||
                await handleDelete(item.id)
 | 
					 | 
				
			||||||
                setActiveBtn(false)
 | 
					 | 
				
			||||||
                setAction('')
 | 
					 | 
				
			||||||
              }}
 | 
					 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
              Yes
 | 
					 | 
				
			||||||
            </Button>
 | 
					 | 
				
			||||||
            <Button
 | 
					 | 
				
			||||||
              fw={700}
 | 
					 | 
				
			||||||
              size="xs"
 | 
					 | 
				
			||||||
              variant="light"
 | 
					 | 
				
			||||||
              onClick={() => setAction('')}
 | 
					 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
              Cancel
 | 
					 | 
				
			||||||
            </Button>
 | 
					 | 
				
			||||||
          </Group>
 | 
					 | 
				
			||||||
        </Text>
 | 
					 | 
				
			||||||
      </Dialog>
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue