FPSMS-frontend
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

161 rinda
4.2 KiB

  1. import { Button, CircularProgress, Grid } from "@mui/material";
  2. import SearchResults, { Column } from "../SearchResults/SearchResults";
  3. import { PickOrderResult } from "@/app/api/pickOrder";
  4. import { useTranslation } from "react-i18next";
  5. import { useCallback, useEffect, useMemo, useState } from "react";
  6. import { isEmpty, upperCase, upperFirst } from "lodash";
  7. import { arrayToDateString } from "@/app/utils/formatUtil";
  8. import {
  9. consolidatePickOrder,
  10. fetchPickOrderClient,
  11. } from "@/app/api/pickOrder/actions";
  12. import useUploadContext from "../UploadProvider/useUploadContext";
  13. interface Props {
  14. filteredPickOrders: PickOrderResult[];
  15. filterArgs: Record<string, any>;
  16. }
  17. const PickOrders: React.FC<Props> = ({ filteredPickOrders, filterArgs }) => {
  18. const { t } = useTranslation("pickOrder");
  19. const [selectedRows, setSelectedRows] = useState<(string | number)[]>([]);
  20. const [filteredPickOrder, setFilteredPickOrder] = useState(
  21. [] as PickOrderResult[],
  22. );
  23. const { setIsUploading } = useUploadContext();
  24. const [isLoading, setIsLoading] = useState(false);
  25. const [pagingController, setPagingController] = useState({
  26. pageNum: 0,
  27. pageSize: 10,
  28. });
  29. const [totalCount, setTotalCount] = useState<number>();
  30. const handleConsolidatedRows = useCallback(async () => {
  31. console.log(selectedRows);
  32. setIsUploading(true);
  33. try {
  34. const res = await consolidatePickOrder(selectedRows as number[]);
  35. if (res) {
  36. console.log(res);
  37. }
  38. } catch {
  39. setIsUploading(false);
  40. }
  41. fetchNewPagePickOrder(pagingController, filterArgs);
  42. setIsUploading(false);
  43. }, [selectedRows, pagingController]);
  44. const fetchNewPagePickOrder = useCallback(
  45. async (
  46. pagingController: Record<string, number>,
  47. filterArgs: Record<string, number>,
  48. ) => {
  49. setIsLoading(true);
  50. const params = {
  51. ...pagingController,
  52. ...filterArgs,
  53. };
  54. const res = await fetchPickOrderClient(params);
  55. if (res) {
  56. console.log(res);
  57. setFilteredPickOrder(res.records);
  58. setTotalCount(res.total);
  59. }
  60. setIsLoading(false);
  61. },
  62. [],
  63. );
  64. useEffect(() => {
  65. fetchNewPagePickOrder(pagingController, filterArgs);
  66. }, [fetchNewPagePickOrder, pagingController, filterArgs]);
  67. const columns = useMemo<Column<PickOrderResult>[]>(
  68. () => [
  69. {
  70. name: "id",
  71. label: "",
  72. type: "checkbox",
  73. disabled: (params) => {
  74. return !isEmpty(params.consoCode);
  75. },
  76. },
  77. {
  78. name: "code",
  79. label: t("Code"),
  80. },
  81. {
  82. name: "consoCode",
  83. label: t("Consolidated Code"),
  84. renderCell: (params) => {
  85. return params.consoCode ?? "";
  86. },
  87. },
  88. {
  89. name: "type",
  90. label: t("type"),
  91. renderCell: (params) => {
  92. return upperCase(params.type);
  93. },
  94. },
  95. {
  96. name: "items",
  97. label: t("Items"),
  98. renderCell: (params) => {
  99. return params.items?.map((i) => i.name).join(", ");
  100. },
  101. },
  102. {
  103. name: "targetDate",
  104. label: t("Target Date"),
  105. renderCell: (params) => {
  106. return arrayToDateString(params.targetDate);
  107. },
  108. },
  109. {
  110. name: "releasedBy",
  111. label: t("Released By"),
  112. },
  113. {
  114. name: "status",
  115. label: t("Status"),
  116. renderCell: (params) => {
  117. return upperFirst(params.status);
  118. },
  119. },
  120. ],
  121. [t],
  122. );
  123. return (
  124. <Grid container rowGap={1}>
  125. <Grid item xs={3}>
  126. <Button
  127. disabled={selectedRows.length < 1}
  128. variant="outlined"
  129. onClick={handleConsolidatedRows}
  130. >
  131. {t("Consolidate")}
  132. </Button>
  133. </Grid>
  134. <Grid item xs={12}>
  135. {isLoading ? (
  136. <CircularProgress size={40} />
  137. ) : (
  138. <SearchResults<PickOrderResult>
  139. items={filteredPickOrder}
  140. columns={columns}
  141. pagingController={pagingController}
  142. setPagingController={setPagingController}
  143. totalCount={totalCount}
  144. checkboxIds={selectedRows!}
  145. setCheckboxIds={setSelectedRows}
  146. />
  147. )}
  148. </Grid>
  149. </Grid>
  150. );
  151. };
  152. export default PickOrders;