You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

129 regels
3.6 KiB

  1. "use client";
  2. import { TeamResult } from "@/app/api/team";
  3. import SearchBox, { Criterion } from "../SearchBox";
  4. import { useCallback, useMemo, useState } from "react";
  5. import { useTranslation } from "react-i18next";
  6. import SearchResults, { Column } from "../SearchResults/index";
  7. import EditNote from "@mui/icons-material/EditNote";
  8. import DeleteIcon from '@mui/icons-material/Delete';
  9. import { deleteStaff } from "@/app/api/staff/actions";
  10. import { useRouter } from "next/navigation";
  11. import ConfirmModal from "./ConfirmDeleteModal";
  12. import { deleteTeam } from "@/app/api/team/actions";
  13. interface Props {
  14. team: TeamResult[];
  15. }
  16. type SearchQuery = Partial<Omit<TeamResult, "id">>;
  17. type SearchParamNames = keyof SearchQuery;
  18. const TeamSearch: React.FC<Props> = ({ team }) => {
  19. const { t } = useTranslation();
  20. const [filteredTeam, setFilteredTeam] = useState(team);
  21. const [data, setData] = useState<TeamResult>();
  22. const [isOpen, setIsOpen] = useState(false);
  23. const router = useRouter();
  24. const searchCriteria: Criterion<SearchParamNames>[] = useMemo(
  25. () => [
  26. {
  27. label: t("Team Name"),
  28. paramName: "name",
  29. type: "text",
  30. },
  31. {
  32. label: t("Team Code"),
  33. paramName: "code",
  34. type: "text",
  35. },
  36. {
  37. label: t("Team Description"),
  38. paramName: "description",
  39. type: "text",
  40. },
  41. ],
  42. [t],
  43. );
  44. const onTeamClick = useCallback((team: TeamResult) => {
  45. console.log(team);
  46. const id = team.id
  47. router.push(`/settings/team/edit?id=${id}`);
  48. }, [router, t]);
  49. // const onDeleteClick = useCallback((team: TeamResult) => {
  50. // console.log(team);
  51. // deleteTeam
  52. // }, [router, t]);
  53. const onDeleteClick = (team: TeamResult) => {
  54. console.log(team);
  55. setData(team)
  56. setIsOpen(!isOpen)
  57. };
  58. const onConfirm = useCallback(async (team: TeamResult) => {
  59. console.log(team);
  60. if (data)
  61. await deleteTeam(data)
  62. setIsOpen(false)
  63. window.location.reload;
  64. }, [deleteTeam, data]);
  65. const onCancel = useCallback(() => {
  66. setIsOpen(false)
  67. }, []);
  68. const columns = useMemo<Column<TeamResult>[]>(
  69. () => [
  70. {
  71. name: "action",
  72. label: t("Edit"),
  73. onClick: onTeamClick,
  74. buttonIcon: <EditNote />,
  75. },
  76. { name: "name", label: t("Name") },
  77. { name: "code", label: t("Code") },
  78. { name: "description", label: t("description") },
  79. {
  80. name: "action",
  81. label: t("Delete"),
  82. onClick: onDeleteClick,
  83. buttonIcon: <DeleteIcon />,
  84. },
  85. ],
  86. [t],
  87. );
  88. return (
  89. <>
  90. <SearchBox
  91. criteria={searchCriteria}
  92. onSearch={(query) => {
  93. // setFilteredStaff(
  94. // staff.filter(
  95. // (s) =>
  96. // s.staffId.toLowerCase().includes(query.staffId.toLowerCase()) &&
  97. // s.name.toLowerCase().includes(query.name.toLowerCase())
  98. // // (query.team === "All" || s.team === query.team) &&
  99. // // (query.category === "All" || s.category === query.category) &&
  100. // // (query.team === "All" || s.team === query.team),
  101. // )
  102. // )
  103. }}
  104. />
  105. <SearchResults<TeamResult> items={filteredTeam} columns={columns} />
  106. <ConfirmModal
  107. isOpen={isOpen}
  108. onConfirm={onConfirm}
  109. onCancel={onCancel}
  110. />
  111. </>
  112. );
  113. };
  114. export default TeamSearch;