123

Updated 5 weeks ago

No models have been pushed.

Readme

import type { ColumnsType } from “antd/es/table”
import React from “react”

import Table from “@/common/Table/Table”
import TableButtonsGroup from “@/common/TableButtonGroup/TableButtonGroup”
import { TableButtonAction } from “@/common/TableButtonGroup/TableButtonGroup.types”
import Text from “@/common/Text/Text”
import LeaveOfAbsenceApproveStatus from “@/pages/LeaveOfAbsence/LeaveOfAbsenceApproveStatus/LeaveOfAbsenceApproveStatus”
import { vars } from “@/styles/vars”
import { DEFAULT_TABLE_PAGE_SIZE, LEAVE_REASON_OPTIONS_PROPS } from “@/utils/constants”

import type { LeaveOfAbsenceRecord } from “../LeaveOfAbsence.types”

type LeaveListTableProps = {
data: LeaveOfAbsenceRecord[]
handleChangePage: (value: number) => void
page: number
totalRecords: number
isLoading: boolean
}

const LeaveOfAbsenceListTable = ({
data,
handleChangePage,
page,
totalRecords,
isLoading,
}: LeaveListTableProps) => {
const getActionButtons = (status: string) => {
switch (status) {
case “Pending”:
return [
{
type: TableButtonAction.Approve,
onClick: () => “abc”,
},
]
case “Approved”:
return [
{
type: TableButtonAction.View,
onClick: () => “abc”,
},
{
type: TableButtonAction.Clear,
onClick: () => “abc”,
},
]
case “Rejected”:
case “Canceled”:
return [
{
type: TableButtonAction.View,
onClick: () => “abc”,
},
]
default:
return []
}
}

const columns: ColumnsType = [
{
title: Ngày bắt đầu,
width: “15%”,
align: “center”,
render: (record: LeaveOfAbsenceRecord) => <>{record?.startDate}</>,
},
{
title: Ngày kết thúc,
width: “15%”,
align: “center”,
render: (record: LeaveOfAbsenceRecord) => <>{record?.endDate}</>,
},
{
title: Tổng nghỉ,
width: “10%”,
align: “center”,
render: (record: LeaveOfAbsenceRecord) => (
<>{record?.totalPaidLeaveDays + record?.totalUnpaidLeaveDays}</>
),
},
{
title: Nhân sự,
width: “15%”,
render: (record: LeaveOfAbsenceRecord) => <>{record?.requester?.name}</>,
},
{
title: Lý do,
width: “20%”,
render: (record: LeaveOfAbsenceRecord) => (
<>{LEAVE_REASON_OPTIONS_PROPS[record?.reason]?.label ?? “-”}</>
),
},

{
  title: <Text color={vars.colors.neutral.darkActive}>Trạng thái</Text>,
  width: "10%",
  align: "center",
  render: (record: LeaveOfAbsenceRecord) => (
    <>
      {record?.approvalStatus ? (
        <LeaveOfAbsenceApproveStatus status={record.approvalStatus} />
      ) : (
        "-"
      )}
    </>
  ),
},
{
  title: <Text color={vars.colors.neutral.darkActive}>Thao tác</Text>,
  align: "center",
  render: (record: LeaveOfAbsenceRecord) => {
    const actionButtons = getActionButtons(record.approvalStatus || "")
    return (
      <div style={{ display: "flex", justifyContent: "center", gap: "8px" }}>
        {actionButtons.map((button, index) => (
          <TableButtonsGroup key={index} buttons={[button]} />
        ))}
      </div>
    )
  },
},

]

return (

)
}

export default LeaveOfAbsenceListTable