From ad479e2b452d2b17e7b56d05f7ed1a487c06372e Mon Sep 17 00:00:00 2001 From: csawatzky Date: Tue, 5 Aug 2025 10:34:20 -0600 Subject: [PATCH] added in the device preset stuff for bin modes since it was missed in the initial update to the new platform --- src/device/presets/devicePresetCard.tsx | 108 ++++++++--------- src/providers/pond/devicePresetAPI.tsx | 150 ++++++++++++++++++++++++ src/providers/pond/pond.tsx | 8 +- 3 files changed, 210 insertions(+), 56 deletions(-) create mode 100644 src/providers/pond/devicePresetAPI.tsx diff --git a/src/device/presets/devicePresetCard.tsx b/src/device/presets/devicePresetCard.tsx index b01def2..2839df3 100644 --- a/src/device/presets/devicePresetCard.tsx +++ b/src/device/presets/devicePresetCard.tsx @@ -6,7 +6,7 @@ import { DialogActions, DialogContent, DialogTitle, - Grid, + Grid2 as Grid, InputAdornment, MenuItem, Slider, @@ -19,7 +19,7 @@ import { DevicePreset } from "models/DevicePreset"; import { ObjectTypeString } from "objects/ObjectDescriber"; import { pond } from "protobuf-ts/pond"; import { useSnackbar } from "providers"; -// import { useDevicePresetAPI } from "providers/pond/devicePresetAPI"; +import { useDevicePresetAPI } from "providers/pond/devicePresetAPI"; import React, { useEffect, useState } from "react"; import { getTemperatureUnit } from "utils"; @@ -43,7 +43,7 @@ export default function DevicePresetCard(props: Props) { removeCallback, updateCallback } = props; - // const devicePresetAPI = useDevicePresetAPI(); + const devicePresetAPI = useDevicePresetAPI(); const [presetName, setPresetName] = useState(""); const [presetType, setPresetType] = useState(1); const [controllerType, setControllerType] = useState(1); @@ -81,22 +81,22 @@ export default function DevicePresetCard(props: Props) { p.settings.temperature = tempC; p.settings.humidity = hum; - // devicePresetAPI - // .addDevicePreset(p.name, p.settings, objectKey, typestring) - // .then(resp => { - // //get the temp key from the preset - // let temp = p.key; - // //update the key in the preset with the key that came back from the add - // p.key = resp.data.key; - // //use the callback function passing in the preset and the temp key - // if (addCallback) { - // addCallback(p, temp); - // } - // openSnack("New preset saved"); - // }) - // .catch(err => { - // openSnack("Failed to save new preset"); - // }); + devicePresetAPI + .addDevicePreset(p.name, p.settings, objectKey, typestring) + .then(resp => { + //get the temp key from the preset + let temp = p.key; + //update the key in the preset with the key that came back from the add + p.key = resp.data.key; + //use the callback function passing in the preset and the temp key + if (addCallback) { + addCallback(p, temp); + } + openSnack("New preset saved"); + }) + .catch(err => { + openSnack("Failed to save new preset"); + }); }; const updatePreset = () => { @@ -108,32 +108,32 @@ export default function DevicePresetCard(props: Props) { newPreset.settings.temperature = tempC; newPreset.settings.humidity = hum; - // devicePresetAPI - // .updateDevicePreset(newPreset.key, newPreset.name, newPreset.settings) - // .then(resp => { - // if (updateCallback) { - // updateCallback(oldPreset, newPreset); - // } - // openSnack("Preset Updated"); - // }) - // .catch(err => { - // openSnack("There was a problem updating the preset"); - // }); + devicePresetAPI + .updateDevicePreset(newPreset.key, newPreset.name, newPreset.settings) + .then(resp => { + if (updateCallback) { + updateCallback(oldPreset, newPreset); + } + openSnack("Preset Updated"); + }) + .catch(err => { + openSnack("There was a problem updating the preset"); + }); }; const removePreset = () => { - // devicePresetAPI - // .removeDevicePreset(preset.key) - // .then(resp => { - // openSnack("Preset has been deleted"); - // setOpenDeleteConfirmation(false); - // if (removeCallback) { - // removeCallback(preset); - // } - // }) - // .catch(err => { - // openSnack("There was a problem deleting this preset"); - // }); + devicePresetAPI + .removeDevicePreset(preset.key) + .then(resp => { + openSnack("Preset has been deleted"); + setOpenDeleteConfirmation(false); + if (removeCallback) { + removeCallback(preset); + } + }) + .catch(err => { + openSnack("There was a problem deleting this preset"); + }); }; const deleteConfirmation = () => { @@ -192,7 +192,7 @@ export default function DevicePresetCard(props: Props) { {deleteConfirmation()} - + - + {presetType !== pond.PresetType.PRESET_TYPE_UNKNOWN && controllerType !== pond.ControllerType.CONTROLLER_TYPE_UNKNOWN && ( @@ -216,7 +216,7 @@ export default function DevicePresetCard(props: Props) { )} - + {/* type */} - + {/* controller type */} {/* temp slider */} {isMobile ? ( - + ) : ( - + Temperature - + - + + ) : ( - + Humidity - + - + Promise>; + //list + listDevicePresets: ( + limit: number, + offset: number, + order?: "asc" | "desc", + orderBy?: string, + search?: string, + keys?: string[], + types?: string[] + ) => Promise>; + //update + updateDevicePreset: ( + key: string, + name: string, + settings: pond.DevicePresetSettings + ) => Promise>; + + //remove + removeDevicePreset: (key: string) => Promise>; + + //get + getDevicePreset: (key: string) => Promise>; +} + +export const DevicePresetAPIcontext = createContext( + {} as IDevicePresetInterface +); + +interface Props {} + +export default function DevicePresetProvider(props: PropsWithChildren) { + const { children } = props; + const { get, del, post, put } = useHTTP(); + const [{ as }] = useGlobalState(); + + //add + const addDevicePreset = ( + name: string, + settings: pond.DevicePresetSettings, + parentKey?: string, + parentType?: string + ) => { + let key = ""; + let type = ""; + if (parentKey && parentType) { + key = "&parentKey=" + parentKey; + type = "&parentType=" + parentType; + } + if (as) { + return post( + pondURL("/devicePreset?name=" + name + "&as=" + as + key + type), + settings + ); + } + return post( + pondURL("/devicePreset?name=" + name + key + type), + settings + ); + }; + //list + const listDevicePresets = ( + limit: number, + offset: number, + order?: "asc" | "desc", + orderBy?: string, + search?: string, + keys?: string[], + types?: string[] + ) => { + let asText = ""; + if (as) asText = "&as=" + as; + return get( + pondURL( + "/devicePresets?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + (order ? order : "asc")) + + ("&by=" + (orderBy ? orderBy : "key")) + + (search ? "&search=" + search : "") + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + + asText + ) + ); + }; + //update + const updateDevicePreset = (key: string, name: string, settings: pond.DevicePresetSettings) => { + if (as) { + return put( + pondURL("/devicePreset/" + key + "?as=" + as + "&name=" + name), + settings + ); + } + return put( + pondURL("/devicePreset/" + key + "?name=" + name), + settings + ); + }; + + //remove + const removeDevicePreset = (key: string) => { + if (as) { + return del(pondURL("/devicePreset/" + key + "?as=" + as)); + } + return del(pondURL("/devicePreset/" + key + "?as=" + as)); + }; + + //get + const getDevicePreset = (key: string) => { + if (as) { + return del(pondURL("/devicePreset/" + key + "?as=" + as)); + } + return del(pondURL("/devicePreset/" + key + "?as=" + as)); + }; + return ( + + {children} + + ); +} + +export const useDevicePresetAPI = () => useContext(DevicePresetAPIcontext); diff --git a/src/providers/pond/pond.tsx b/src/providers/pond/pond.tsx index 8e879f9..6402ae4 100644 --- a/src/providers/pond/pond.tsx +++ b/src/providers/pond/pond.tsx @@ -36,6 +36,7 @@ import UsageProvider, { useUsageAPI } from "./usageAPI"; import KeyManagerProvider, { useKeyManagerAPI } from "./keyManagerAPI"; import JohnDeereProvider, { useJohnDeereProxyAPI } from "./johnDeereProxyAPI"; import CNHiProvider, { useCNHiProxyAPI } from "./cnhiProxyAPI"; +import DevicePresetProvider, { useDevicePresetAPI } from "./devicePresetAPI"; // import NoteProvider from "providers/noteAPI"; export const pondURL = (partial: string, demo: boolean = false): string => { @@ -88,7 +89,9 @@ export default function PondProvider(props: PropsWithChildren) { - {children} + + {children} + @@ -163,5 +166,6 @@ export { useUsageAPI, useKeyManagerAPI, useJohnDeereProxyAPI, - useCNHiProxyAPI + useCNHiProxyAPI, + useDevicePresetAPI };