CEC-2152 Add persistent page size for tables (#175)

* Add persistent page size

* Add permissions for sms as well

Co-authored-by: jwu-fisker <jwu@fiskerinc.com>
This commit is contained in:
arpanetus
2022-08-05 17:03:38 +06:00
committed by GitHub
parent 93926d3c01
commit 260a8033bb
15 changed files with 109 additions and 14 deletions

View File

@@ -28,6 +28,7 @@ import useStyles from "../../useStyles";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import { Roles, hasRole } from "../../../utils/roles"; import { Roles, hasRole } from "../../../utils/roles";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -44,9 +45,11 @@ const tableColumns = [
} }
]; ];
const PAGE_SIZE = "CAN_FILTER_TABLE_PAGE_SIZE";
const MainForm = ({ vin }) => { const MainForm = ({ vin }) => {
const classes = useStyles(); const classes = useStyles();
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -14,6 +14,7 @@ import TableHeaderSortable from "../../Table/HeaderSortable";
import { useVehicleContext } from "../../Contexts/VehicleContext"; import { useVehicleContext } from "../../Contexts/VehicleContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -42,10 +43,12 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE = "CAR_ECUS_TABLE_PAGE_SIZE";
const CarECUsTable = ({ vin, token, classes }) => { const CarECUsTable = ({ vin, token, classes }) => {
const [ecus, setECUs] = useState([]); const [ecus, setECUs] = useState([]);
const [total, setTotal] = useState(0); const [total, setTotal] = useState(0);
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("ecu"); const [orderBy, setOrderBy] = useState("ecu");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -19,6 +19,7 @@ import TableHeaderSortable from "../../Table/HeaderSortable";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import ConnectedIcon from "../../Controls/ConnectedIcon"; import ConnectedIcon from "../../Controls/ConnectedIcon";
import ECUList from "../../Controls/ECUList"; import ECUList from "../../Controls/ECUList";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -47,6 +48,8 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE = "CAR_SELECTION_TABLE_PAGE_SIZE";
const CarSelectionTable = (props) => { const CarSelectionTable = (props) => {
const { const {
token, token,
@@ -57,7 +60,7 @@ const CarSelectionTable = (props) => {
onSelect, onSelect,
onSelectAll, onSelectAll,
} = props; } = props;
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("vin"); const [orderBy, setOrderBy] = useState("vin");
const [order, setOrder] = useState("asc"); const [order, setOrder] = useState("asc");

View File

@@ -14,6 +14,7 @@ import TableHeaderSortable from "../../Table/HeaderSortable";
import { useCarUpdatesContext } from "../../Contexts/CarUpdatesContext"; import { useCarUpdatesContext } from "../../Contexts/CarUpdatesContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -34,11 +35,13 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE = "CAR_UPDATE_STATUS_TABLE_PAGE_SIZE";
const CarUpdateStatusTable = ({ carupdateid, token }) => { const CarUpdateStatusTable = ({ carupdateid, token }) => {
const classes = useStyles(); const classes = useStyles();
const [log, setLog] = useState([]); const [log, setLog] = useState([]);
const [logTotal, setLogTotal] = useState(0); const [logTotal, setLogTotal] = useState(0);
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -18,6 +18,7 @@ import {
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -42,9 +43,11 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE = "CAR_UPDATES_TABLE_PAGE_SIZE";
const MainForm = ({ vin, token }) => { const MainForm = ({ vin, token }) => {
const classes = useStyles(); const classes = useStyles();
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -23,6 +23,7 @@ import useStyles from "../../../../useStyles";
import SearchField from "../../../../Controls/SearchField"; import SearchField from "../../../../Controls/SearchField";
import { logger } from "../../../../../services/monitoring"; import { logger } from "../../../../../services/monitoring";
import { Roles, hasRole } from "../../../../../utils/roles"; import { Roles, hasRole } from "../../../../../utils/roles";
import {useLocalStorage} from "../../../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -39,8 +40,10 @@ const tableColumns = [
} }
]; ];
const PAGE_SIZE = "FLEET_STATUS_CAN_FILTER_TABLE_PAGE_SIZE";
const MainForm = ({ name }) => { const MainForm = ({ name }) => {
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -22,6 +22,7 @@ import useStyles from "../../../../useStyles";
import SearchField from "../../../../Controls/SearchField"; import SearchField from "../../../../Controls/SearchField";
import { logger } from "../../../../../services/monitoring"; import { logger } from "../../../../../services/monitoring";
import { Roles, hasRole } from "../../../../../utils/roles"; import { Roles, hasRole } from "../../../../../utils/roles";
import {useLocalStorage} from "../../../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -34,8 +35,10 @@ const tableColumns = [
} }
]; ];
const PAGE_SIZE = "FLEET_STATUS_VEHICLES_TABLE_PAGE_SIZE";
const MainForm = ({ name }) => { const MainForm = ({ name }) => {
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -21,6 +21,7 @@ import { FleetProvider, useFleetContext } from "../../Contexts/FleetContext"
import useStyles from "../../useStyles"; import useStyles from "../../useStyles";
import SearchField from "../../Controls/SearchField"; import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -49,8 +50,10 @@ const tableColumns = [
} }
]; ];
const PAGE_SIZE = "FLEET_TABLE_PAGE_SIZE";
const MainForm = () => { const MainForm = () => {
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("desc"); const [order, setOrder] = useState("desc");

View File

@@ -64,8 +64,8 @@ const menuData = [
{ {
label: "SMS", label: "SMS",
to: "/tools/sms/send", to: "/tools/sms/send",
roles: [], roles: [Roles.CREATE],
}, }
], ],
}, },
]; ];

View File

@@ -28,6 +28,7 @@ import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import ECUList from "../../Controls/ECUList"; import ECUList from "../../Controls/ECUList";
import { Roles, hasRole } from "../../../utils/roles"; import { Roles, hasRole } from "../../../utils/roles";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -56,9 +57,11 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE="MANIFEST_LIST_PAGE_SIZE";
const MainForm = () => { const MainForm = () => {
const classes = useStyles(); const classes = useStyles();
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("id"); const [orderBy, setOrderBy] = useState("id");
const [order, setOrder] = useState("asc"); const [order, setOrder] = useState("asc");

View File

@@ -27,11 +27,14 @@ import useStyles from "../../useStyles";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import ManifestDetails from "../Details"; import ManifestDetails from "../Details";
import {useLocalStorage} from "../../useLocalStorage";
const PAGE_SIZE="MANIFEST_STATUS_PAGE_SIZE";
const MainForm = () => { const MainForm = () => {
const { manifest_id } = useParams(); const { manifest_id } = useParams();
const classes = useStyles(); const classes = useStyles();
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const { getManifests, manifests } = useManifestsContext(); const { getManifests, manifests } = useManifestsContext();
const { const {

View File

@@ -215,7 +215,7 @@ const SiteRoutes = () => {
type={TYPES.PROTECTED} type={TYPES.PROTECTED}
token={token} token={token}
groups={groups} groups={groups}
// roles={[Roles.CREATE]} roles={[Roles.CREATE]}
/> />
<AuthRoute <AuthRoute
path="/suppliers" path="/suppliers"

View File

@@ -16,6 +16,7 @@ import { useStatusContext } from "../../Contexts/StatusContext";
import { LocalDateTimeString } from "../../../utils/dates"; import { LocalDateTimeString } from "../../../utils/dates";
import TableHeaderSortable from "../../Table/HeaderSortable"; import TableHeaderSortable from "../../Table/HeaderSortable";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import {useLocalStorage} from "../../useLocalStorage";
const tableColumns = [ const tableColumns = [
{ {
@@ -48,9 +49,11 @@ const tableColumns = [
}, },
]; ];
const PAGE_SIZE="SUPPLIER_TABLE_PAGE_SIZE";
const SupplierTable = (props) => { const SupplierTable = (props) => {
const { token, classes } = props; const { token, classes } = props;
const [pageSize, setPageSize] = useState(10); const [pageSize, setPageSize] = useLocalStorage(PAGE_SIZE, 10);
const [pageIndex, setPageIndex] = useState(0); const [pageIndex, setPageIndex] = useState(0);
const [orderBy, setOrderBy] = useState("created_at"); const [orderBy, setOrderBy] = useState("created_at");
const [order, setOrder] = useState("asc"); const [order, setOrder] = useState("asc");

View File

@@ -0,0 +1,21 @@
import { useState, useEffect } from "react";
export function getStorageValue(key, defaultValue) {
// getting stored value
const saved = localStorage.getItem(key);
const initial = JSON.parse(saved);
return initial || defaultValue;
}
export const useLocalStorage = (key, defaultValue) => {
const [value, setValue] = useState(() => {
return getStorageValue(key, defaultValue);
});
useEffect(() => {
// storing input name
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
};

View File

@@ -0,0 +1,41 @@
import {getStorageValue, useLocalStorage} from './useLocalStorage'
import {cleanup, render, screen} from "@testing-library/react";
describe('getStorageValue', () => {
it('getting stored value', () => {
let val = getStorageValue('key', 'defaultValue');
expect(val).toBe('defaultValue');
localStorage.setItem('key', JSON.stringify('value'));
val = getStorageValue('key', 'defaultValue');
expect(val).toBe('value');
});
})
describe('useLocalStorage', () => {
beforeEach(() => {
const TestComponent = () => {
const [value, setValue] = useLocalStorage('key2', 'defaultValue');
return (
<div>
<button data-testid="setVal" onClick={() => setValue('newValue')}>Set Value</button>
<div data-testid="val">{value}</div>
</div>
);
}
render(<TestComponent/>);
});
afterEach(() => {
cleanup();
});
it('getting default value and setting it', () => {
expect(screen.getByTestId('val').innerHTML).toEqual('defaultValue');
screen.getByTestId('setVal').click();
expect(screen.getByTestId('val').innerHTML).toEqual('newValue');
});
})