diff --git a/src/device/DevicesSummary.tsx b/src/device/DevicesSummary.tsx index 186a1eb..2e87f05 100644 --- a/src/device/DevicesSummary.tsx +++ b/src/device/DevicesSummary.tsx @@ -33,11 +33,11 @@ const useStyles = makeStyles((theme: Theme) => { }); interface Props { - setSearch: React.Dispatch>, + setFieldContains: React.Dispatch>>, } export default function DevicesSummary(props: Props) { - const { setSearch } = props; + const { setFieldContains } = props; const deviceAPI = useDeviceAPI() const theme = useTheme() const classes = useStyles() @@ -66,16 +66,16 @@ export default function DevicesSummary(props: Props) { useEffect(() => { switch (selected) { case "total": - setSearch(""); + setFieldContains(new Map()); break; case "active": - setSearch("DEVICE_STATE_OK"); + setFieldContains(new Map([["state", "DEVICE_STATE_OK"]])); break; case "warning": - setSearch("DEVICE_STATE_LOW_POWER"); + setFieldContains(new Map([["state", "DEVICE_STATE_LOW_POWER"]])); break; case "offline": - setSearch("DEVICE_STATE_MISSING"); + setFieldContains(new Map([["state", "DEVICE_STATE_MISSING"]])); break; } }, [selected]) diff --git a/src/pages/Devices.tsx b/src/pages/Devices.tsx index db672bf..70828af 100644 --- a/src/pages/Devices.tsx +++ b/src/pages/Devices.tsx @@ -110,6 +110,8 @@ export default function Devices() { >(undefined); const [groupSettingsIsOpen, setGroupSettingsIsOpen] = useState(false); + const [fieldContains, setFieldContains] = useState>(new Map()) + const updateGroups = (newGroups: Group[]) => { setGroups(newGroups); }; @@ -204,7 +206,8 @@ export default function Devices() { undefined, undefined, getKeys(), - getTypes() + getTypes(), + fieldContains, ).then(resp => { let newDevices: Device[] = [] resp.data.devices.forEach(device => { @@ -222,12 +225,16 @@ export default function Devices() { useEffect(() => { loadDevices() - }, [limit, page, order, orderBy, search, tab]) + }, [limit, page, order, orderBy, fieldContains, tab]) useEffect(() => { loadGroups() }, [groupLimit, groupPage, orderGroup, orderGroupBy, searchGroup]) + useEffect(() => { + console.log(search) + }, [search]) + const handleChange = (event: any) => { setLimit(event.target.value); }; @@ -465,7 +472,7 @@ export default function Devices() { } onClick={() => openGroupSettings(undefined, "add")} /> - + title={} subtitle={subtitle} diff --git a/src/providers/pond/deviceAPI.tsx b/src/providers/pond/deviceAPI.tsx index 881315d..e09f20c 100644 --- a/src/providers/pond/deviceAPI.tsx +++ b/src/providers/pond/deviceAPI.tsx @@ -8,7 +8,7 @@ import { AxiosResponse } from "axios"; import { useGlobalState } from "providers"; import moment from "moment"; import { or } from "utils/types"; -import { reject, result } from "lodash"; +// import { reject, result } from "lodash"; export interface IDeviceAPIContext { add: (name: string, description: string, backpack: pond.BackpackSettings) => Promise>; @@ -36,7 +36,8 @@ export interface IDeviceAPIContext { comprehensive?: boolean, withMeasurements?: boolean, keys?: string[], - types?: string[] + types?: string[], + fieldContains?: Map, ) => Promise>; listForUser: ( asRoot: boolean, @@ -302,7 +303,8 @@ export default function DeviceProvider(props: PropsWithChildren) { comprehensive?: boolean, withMeasurements?: boolean, keys?: string[], - types?: string[] + types?: string[], + fieldContains?: Map, ) => { const url = pondURL( "/devices" + @@ -321,7 +323,8 @@ export default function DeviceProvider(props: PropsWithChildren) { (comprehensive ? "&comprehensive=" + comprehensive.toString() : "") + (withMeasurements ? "&measurements=" + withMeasurements.toString() : "") + (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") + (types ? "&types=" + types.toString() : "") + + (fieldContains ? "&fieldContains=" + JSON.stringify(Object.fromEntries(fieldContains)) : "") ); return new Promise>((resolve, reject)=>{ get(url).then(resp => {