| @@ -191,6 +191,7 @@ const RSOverview: React.FC<Props> = ({ records }) => { | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| isAutoPaging={false} | |||
| hasCollapse={false} | |||
| /> | |||
| </> | |||
| ); | |||
| @@ -9,7 +9,7 @@ import { | |||
| GridRowSelectionModel, | |||
| useGridApiRef, | |||
| } from "@mui/x-data-grid"; | |||
| import {MutableRefObject, useCallback, useMemo, useState} from "react"; | |||
| import {MutableRefObject, useCallback, useEffect, useMemo, useState} from "react"; | |||
| import { useFormContext } from "react-hook-form"; | |||
| import { useTranslation } from "react-i18next"; | |||
| import InputDataGrid, { TableRow } from "../InputDataGrid/InputDataGrid"; | |||
| @@ -252,11 +252,69 @@ const ViewByBomDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| [] | |||
| ); | |||
| const [pagingController, setPagingController] = useState({ | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }) | |||
| const [pagingController, setPagingController] = useState([ | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| ]) | |||
| const updatePagingController = (updatedObj) => { | |||
| setPagingController((prevState) => { | |||
| return prevState.map((item, index) => { | |||
| if (index === updatedObj?.index){ | |||
| return { | |||
| ...item, | |||
| pageNum: item.pageNum, | |||
| pageSize: item.pageSize, | |||
| totalCount: item.totalCount, | |||
| }; | |||
| } | |||
| else | |||
| return item | |||
| }); | |||
| }); | |||
| }; | |||
| useEffect(()=>{ | |||
| console.log("[debug] pagingController", pagingController) | |||
| },[]) | |||
| const overallColumns = useMemo<Column<any>[]>( | |||
| () => [ | |||
| @@ -355,12 +413,13 @@ const ViewByBomDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| Overall | |||
| </Typography> | |||
| <EditableSearchResults<FGRecord> | |||
| index={7} | |||
| items={fakeOverallRecords} | |||
| isMockUp={true} | |||
| columns={overallColumns} | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| isAutoPaging={false} | |||
| setPagingController={updatePagingController} | |||
| pagingController={pagingController[7]} | |||
| isAutoPaging={true} | |||
| isHideButton={true} | |||
| isEdit={false} | |||
| /> | |||
| @@ -371,11 +430,12 @@ const ViewByBomDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| {date} | |||
| </Typography> | |||
| <EditableSearchResults<FGRecord> | |||
| index={index} | |||
| items={fakeRecords[index]} // Use the corresponding records for the day | |||
| columns={columns} | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| isAutoPaging={false} | |||
| setPagingController={updatePagingController} | |||
| pagingController={pagingController[index]} | |||
| isAutoPaging={true} | |||
| isHideButton={true} | |||
| isEdit={isEdit} | |||
| /> | |||
| @@ -382,11 +382,65 @@ const ViewByFGDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| [] | |||
| ); | |||
| const [pagingController, setPagingController] = useState({ | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }) | |||
| const [pagingController, setPagingController] = useState([ | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| { | |||
| pageNum: 1, | |||
| pageSize: 10, | |||
| totalCount: 0, | |||
| }, | |||
| ]) | |||
| const updatePagingController = (updatedObj) => { | |||
| setPagingController((prevState) => { | |||
| return prevState.map((item, index) => { | |||
| if (index === updatedObj?.index){ | |||
| return { | |||
| ...item, | |||
| pageNum: item.pageNum, | |||
| pageSize: item.pageSize, | |||
| totalCount: item.totalCount, | |||
| }; | |||
| } | |||
| else | |||
| return item | |||
| }); | |||
| }); | |||
| }; | |||
| const columns = useMemo<Column<any>[]>( | |||
| () => [ | |||
| @@ -507,14 +561,16 @@ const ViewByFGDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| Overall | |||
| </Typography> | |||
| <EditableSearchResults<FGRecord> | |||
| index={7} | |||
| items={fakeOverallRecords} | |||
| isMockUp={true} | |||
| columns={overallColumns} | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| setPagingController={updatePagingController} | |||
| pagingController={pagingController[7]} | |||
| isAutoPaging={false} | |||
| isHideButton={true} | |||
| isEdit={isEdit} | |||
| hasCollapse={true} | |||
| /> | |||
| </Grid> | |||
| {dayPeriod.map((date, index) => ( | |||
| @@ -526,11 +582,12 @@ const ViewByFGDetails: React.FC<Props> = ({ apiRef, isEdit }) => { | |||
| items={fakeRecords[index]} // Use the corresponding records for the day | |||
| isMockUp={true} | |||
| columns={columns} | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| setPagingController={updatePagingController} | |||
| pagingController={pagingController[index]} | |||
| isAutoPaging={false} | |||
| isHideButton={false} | |||
| isEdit={isEdit} | |||
| hasCollapse={true} | |||
| /> | |||
| </Grid> | |||
| ))} | |||
| @@ -99,7 +99,7 @@ const RSSOverview: React.FC<Props> = ({ items }) => { | |||
| // buttonIcon: <EditNote />, | |||
| // }, | |||
| { | |||
| field: "fgName", | |||
| field: "name", | |||
| label: "Finished Goods Name", | |||
| type: 'input', | |||
| }, | |||
| @@ -195,6 +195,7 @@ const RSSOverview: React.FC<Props> = ({ items }) => { | |||
| setPagingController={setPagingController} | |||
| pagingController={pagingController} | |||
| isAutoPaging={false} | |||
| hasCollapse={false} | |||
| /> | |||
| </> | |||
| ); | |||
| @@ -48,12 +48,13 @@ interface Props<T extends ResultWithId> { | |||
| isMockUp?: Boolean, | |||
| columns: Column<T>[], | |||
| noWrapper?: boolean, | |||
| setPagingController: (value: { pageNum: number; pageSize: number; totalCount: number }) => void, | |||
| setPagingController: (value: { pageNum: number; pageSize: number; totalCount: number, index?: number}) => void, | |||
| pagingController: { pageNum: number; pageSize: number; totalCount: number }, | |||
| isAutoPaging: boolean | |||
| } | |||
| function EditableSearchResults<T extends ResultWithId>({ | |||
| index, | |||
| items, | |||
| isMockUp, | |||
| columns, | |||
| @@ -63,6 +64,7 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| isAutoPaging = true, | |||
| isEdit = true, | |||
| isHideButton = false, | |||
| hasCollapse = false, | |||
| }: Props<T>) { | |||
| const [page, setPage] = useState(0); | |||
| const [rowsPerPage, setRowsPerPage] = useState(10); | |||
| @@ -74,13 +76,13 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| },[items]) | |||
| const handleChangePage = (_event: unknown, newPage: number) => { | |||
| setPage(newPage); | |||
| setPagingController({ ...pagingController, pageNum: newPage + 1 }); | |||
| setPagingController({ ...pagingController, pageNum: newPage + 1 }, (index ?? -1)); | |||
| }; | |||
| const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => { | |||
| setRowsPerPage(+event.target.value); | |||
| setPage(0); | |||
| setPagingController({ ...pagingController, pageSize: +event.target.value, pageNum: 1 }); | |||
| setPagingController({ ...pagingController, pageSize: +event.target.value, pageNum: 1 , index: index}); | |||
| }; | |||
| const handleEditClick = (id: number) => { | |||
| @@ -126,7 +128,6 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| const { row } = props; | |||
| const [open, setOpen] = useState(false); | |||
| console.log(row) | |||
| console.log(row.lines) | |||
| return ( | |||
| <> | |||
| <TableRow hover tabIndex={-1} key={row.id}> | |||
| @@ -140,13 +141,15 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| <IconButton disabled={!isEdit} onClick={() => setEditingRowId(null)}> | |||
| <CancelIcon/> | |||
| </IconButton> | |||
| <IconButton | |||
| aria-label="expand row" | |||
| size="small" | |||
| onClick={() => setOpen(!open)} | |||
| { | |||
| hasCollapse && <IconButton | |||
| aria-label="expand row" | |||
| size="small" | |||
| onClick={() => setOpen(!open)} | |||
| > | |||
| {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />} | |||
| </IconButton> | |||
| {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />} | |||
| </IconButton> | |||
| } | |||
| </> | |||
| ) : ( | |||
| <> | |||
| @@ -158,13 +161,15 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| onClick={() => handleDeleteClick(row.id as number)}> | |||
| <DeleteIcon/> | |||
| </IconButton> | |||
| <IconButton | |||
| aria-label="expand row" | |||
| size="small" | |||
| onClick={() => setOpen(!open)} | |||
| { | |||
| hasCollapse && <IconButton | |||
| aria-label="expand row" | |||
| size="small" | |||
| onClick={() => setOpen(!open)} | |||
| > | |||
| {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />} | |||
| {open ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />} | |||
| </IconButton> | |||
| } | |||
| </> | |||
| )} | |||
| </TableCell> | |||
| @@ -220,21 +225,24 @@ function EditableSearchResults<T extends ResultWithId>({ | |||
| })} | |||
| </TableRow> | |||
| <TableRow> | |||
| <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}> | |||
| <Collapse in={open} timeout="auto" unmountOnExit> | |||
| <Table> | |||
| <TableBody> | |||
| <TableRow> | |||
| <TableCell> | |||
| <TempInputGridForMockUp | |||
| stockInLine={row.lines as any[]} | |||
| /> | |||
| </TableCell> | |||
| </TableRow> | |||
| </TableBody> | |||
| </Table> | |||
| </Collapse> | |||
| </TableCell> | |||
| { | |||
| hasCollapse && | |||
| <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}> | |||
| <Collapse in={open} timeout="auto" unmountOnExit> | |||
| <Table> | |||
| <TableBody> | |||
| <TableRow> | |||
| <TableCell> | |||
| <TempInputGridForMockUp | |||
| stockInLine={row.lines as any[]} | |||
| /> | |||
| </TableCell> | |||
| </TableRow> | |||
| </TableBody> | |||
| </Table> | |||
| </Collapse> | |||
| </TableCell> | |||
| } | |||
| </TableRow> | |||
| </> | |||
| ) | |||