diff --git a/src/providers/pond/backpackAPI.tsx b/src/providers/pond/backpackAPI.tsx index ff16fd6..0c05589 100644 --- a/src/providers/pond/backpackAPI.tsx +++ b/src/providers/pond/backpackAPI.tsx @@ -1,3 +1,4 @@ +import { AxiosResponse } from "axios"; import { useHTTP } from "hooks"; import { pond } from "protobuf-ts/pond"; import { createContext, PropsWithChildren, useContext } from "react"; @@ -19,27 +20,58 @@ export default function BackpackProvider(props: PropsWithChildren) { const addBackpack = (backpack: pond.Backpack) => { const url = pondURL("/backpacks"); - return post(url, backpack); + return new Promise((resolve, reject) => { + post(url, backpack).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) }; const updateBackpack = (backpackID: number | Long, backpack: pond.Backpack) => { const url = pondURL("/backpacks/" + backpackID); - return put(url, backpack); + return new Promise((resolve, reject) => { + put(url, backpack).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) }; const removeBackpack = (backpackID: number | Long) => { const url = pondURL("/backpacks/" + backpackID); - return del(url); + return new Promise((resolve, reject) => { + return del(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) + }; const getBackpack = (backpackID: number | Long) => { const url = pondURL("/backpacks/" + backpackID); - return get(url); + return new Promise((resolve, reject) => { + return get(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) }; const listBackpacks = () => { const url = pondURL("/backpacks"); - return get(url); + return new Promise((resolve, reject) => { + return get(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) }; return ( diff --git a/src/providers/pond/binAPI.tsx b/src/providers/pond/binAPI.tsx index e3ffdbb..c9eaf22 100644 --- a/src/providers/pond/binAPI.tsx +++ b/src/providers/pond/binAPI.tsx @@ -1,7 +1,7 @@ import { useHTTP, usePermissionAPI } from "hooks"; import { createContext, PropsWithChildren, useContext } from "react"; import { pond } from "protobuf-ts/pond"; -import { or } from "utils/types"; +import { has, or } from "utils/types"; import { User, binScope } from "models"; import { pondURL } from "./pond"; import { AxiosResponse } from "axios"; @@ -35,7 +35,7 @@ export interface IBinAPIContext { component: string, preferences: pond.BinComponentPreferences ) => Promise>; - getBinPageData: (binKey: string, userKey: string, showErrors?: boolean) => Promise; + getBinPageData: (binKey: string, userKey: string, showErrors?: boolean) => Promise>; listBins: ( limit: number, offset: number, @@ -131,38 +131,80 @@ export default function BinProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState(); const addBin = (bin: pond.BinSettings) => { - if (as) return post(pondURL("/bins?as=" + as), bin); - return post(pondURL("/bins"), bin); + const url = "/bins" + (as ? "?as=" + as : "") + return new Promise>((resolve, reject)=>{ + post(pondURL(url), bin).then(resp => { + resp.data = pond.AddBinResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateBin = (key: string, bin: pond.BinSettings) => { - if (as) return put(pondURL("/bins/" + key + "?as=" + as), bin); - return put(pondURL("/bins/" + key), bin); + const url = "/bins/" + key + (as ? "?as=" + as : "") + return new Promise>((resolve, reject)=>{ + put(pondURL(url), bin).then(resp => { + resp.data = pond.UpdateBinResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const bulkBinUpdate = (bins: pond.BinSettings[]) => { - if (as) - return put(pondURL("/bulkBins/update?as=" + as), { bins: bins }); - return put(pondURL("/bulkBins/update"), { bins: bins }); + let url = "/bulkBins/update" + if (as) url = url + "?as=" + as + return new Promise>((resolve, reject)=>{ + put(pondURL(url), { bins: bins }).then(resp => { + resp.data = pond.BulkBinUpdateResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateBinStatus = (key: string, binStatus: pond.BinStatus) => { - if (as) - return put( - pondURL("/bins/" + key + "/status?as=" + as), - binStatus - ); - return put(pondURL("/bins/" + key + "/status"), binStatus); + let url = "/bins/" + key + "/status" + if (as) url = url + "?as=" + as + return new Promise>((resolve, reject)=>{ + put(pondURL(url), binStatus).then(resp=>{ + resp.data = pond.UpdateBinStatusResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err=>{ + return reject(err) + }) + }) }; const removeBin = (key: string) => { - if (as) return del(pondURL("/bins/" + key + "?as=" + as)); - return del(pondURL("/bins/" + key)); + let url = "/bins/" + key + if (as) url = url + "?as=" + as + return new Promise>((resolve, reject) => { + del(pondURL(url)).then(resp => { + resp.data = pond.RemoveBinResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getBin = (key: string) => { - if (as) return get(pondURL("/bins/" + key + "?as=" + as)); - return get(pondURL("/bins/" + key)); + const url = "/bins/" + key + (as ? "?as=" + as : "") + return new Promise>((resolve, reject)=>{ + get(pondURL(url)) + .then(resp => { + resp.data = pond.Bin.fromObject(resp.data) + resolve(resp) + }) + .catch(err => { + reject(err) + }) + }) }; const addComponent = ( @@ -181,19 +223,40 @@ export default function BinProvider(props: PropsWithChildren) { } else if (preferences) { url = url + "?binPref=" + preferences.type + "&fillNode=" + preferences.node; } - return post(pondURL(url)); + return new Promise>((resolve, reject)=>{ + post(pondURL(url)).then(resp => { + resp.data = pond.AddBinComponentResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeComponent = (bin: string, component: string) => { let url = "/bins/" + bin + "/removeComponent/" + component; if (as) url = url + "?as=" + as; - return post(pondURL(url)); + return new Promise>((resolve, reject)=>{ + post(pondURL(url)).then(resp => { + resp.data = pond.RemoveBinComponentResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeAllComponents = (bin: string) => { let url = "/bins/" + bin + "/removeAllComponents"; if (as) url = url + "?as=" + as; - return post(pondURL(url)); + return new Promise>((resolve, reject)=>{ + post(pondURL(url)).then(resp => { + resp.data = pond.RemoveAllBinComponentsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateComponentPreferences = ( @@ -207,21 +270,33 @@ export default function BinProvider(props: PropsWithChildren) { preferences: Object; } let body: request = { preferences: pond.BinComponentPreferences.toObject(preferences) }; - return put(pondURL(url), body); + return new Promise>((resolve,reject)=>{ + put(pondURL(url), body).then(resp => { + resp.data = pond.UpdateBinComponentPreferencesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getBinPageData = (binKey: string, userKey: string, showErrors = true) => { - return get( - pondURL( - "/bins/" + - binKey + - "/users/" + - userKey + - "?as=" + - as + - (showErrors ? "&showErrors=true" : "&showErrors=false") - ) - ); + const url = "/bins/" + + binKey + + "/users/" + + userKey + + (showErrors ? "?showErrors=true" : "?showErrors=false") + + (as ? "&as=" + as : "") + return new Promise>((resolve, reject)=>{ + get(pondURL(url)) + .then(resp => { + resp.data = pond.GetBinPageDataResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + + }) }; const listBins = ( @@ -236,23 +311,30 @@ export default function BinProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return get( - pondURL( - "/bins" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&by=" + or(orderBy, "key")) + - (numerical ? "&numerical=true" : "") + - (as ? "&as=" + as : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (search ? "&search=" + search : "") + - (keys ? "&keys=" + keys.join(",") : "") + - (types ? "&types=" + types.join(",") : "") - ) - ); + return new Promise>((resolve, reject)=>{ + get( + pondURL( + "/bins" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&by=" + or(orderBy, "key")) + + (numerical ? "&numerical=true" : "") + + (as ? "&as=" + as : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (search ? "&search=" + search : "") + + (keys ? "&keys=" + keys.join(",") : "") + + (types ? "&types=" + types.join(",") : "") + ) + ).then(resp => { + resp.data = pond.ListBinsResponse.fromObject(resp.data); + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listBinsAndData = ( @@ -266,22 +348,27 @@ export default function BinProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return get( - pondURL( - "/binsAndData" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&by=" + or(orderBy, "key")) + - (as ? "&as=" + as : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (search ? "&search=" + search : "") + - (keys ? "&keys=" + keys.join(",") : "") + - (types ? "&types=" + types.join(",") : "") - ) - ); + const url = "/binsAndData" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&by=" + or(orderBy, "key")) + + (as ? "&as=" + as : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (search ? "&search=" + search : "") + + (keys ? "&keys=" + keys.join(",") : "") + + (types ? "&types=" + types.join(",") : "") + + return new Promise>((resolve, reject)=>{ + get(pondURL(url)).then(resp => { + resp.data = pond.ListBinsAndDataResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listBinStatus = ( @@ -293,24 +380,39 @@ export default function BinProvider(props: PropsWithChildren) { order?: "asc" | "desc", asRoot?: boolean ) => { - return get( - pondURL( - "/bins/" + - key + - "/status" + - dateRange(startDate, endDate) + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - (asRoot ? "&asRoot=" + asRoot.toString() : "") - ) - ); + const url = "/bins/" + + key + + "/status" + + dateRange(startDate, endDate) + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + return new Promise>((resolve, reject)=>{ + get( + pondURL(url) + ).then(resp => { + resp.data = pond.ListBinStatusResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listBinComponents = (key: string) => { - return get(pondURL("/bins/" + key + "/components")); + return new Promise>((resolve, reject)=>{ + get(pondURL("/bins/" + key + "/components")) + .then(resp => { + resp.data = pond.ListBinComponentsResponse.fromObject(resp.data) + return resolve(resp) + }) + .catch(err => { + return reject(err) + }) + }) }; const listBinComponentsMeasurements = ( @@ -319,31 +421,54 @@ export default function BinProvider(props: PropsWithChildren) { end: string, showErrors = false ) => { - return get( - pondURL( - "/bins/" + - key + - "/components/measurements?start=" + - start + - "&end=" + - end + - "&as=" + - as + - (showErrors ? "&showErrors=true" : "&showErrors=false") - ) - ); + let url = "/bins/" + + key + + "/components/measurements?start=" + + start + + "&end=" + + end + + (as ? "&as=" + as : "") + + (showErrors ? "&showErrors=true" : "&showErrors=false") + + return new Promise>((resolve, reject) => { + get(pondURL(url)) + .then(resp => { + resp.data = pond.ListBinComponentsMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }) + .catch(err => { + return reject(err) + }) + } + ) }; const listHistory = (id: string, limit: number, offset: number) => { - return get( - pondURL("/bins/" + id + "/history?limit=" + limit + "&offset=" + offset) - ); + let url = "/bins/" + id + "/history?limit=" + limit + "&offset=" + offset + return new Promise>((resolve, reject)=>{ + get( + pondURL(url) + ).then(resp => { + resp.data = pond.ListBinHistoryResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listHistoryBetween = (id: string, limit: number, start: string, end: string) => { - return get( - pondURL("/bins/" + id + "/historyBetween?limit=" + limit + "&start=" + start + "&end=" + end) - ); + let url = "/bins/" + id + "/historyBetween?limit=" + limit + "&start=" + start + "&end=" + end + return new Promise>((resolve, reject)=>{ + get( + pondURL(url) + ).then(resp => { + resp.data = pond.ListBinHistoryResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateBinPermissions = (key: string, users: User[]) => { @@ -351,16 +476,21 @@ export default function BinProvider(props: PropsWithChildren) { }; const getBinMetrics = (search?: string) => { + let url = "/metrics/bins" + (search ? "?search=" + search : "") if (as) { - if (search) - return get( - pondURL("/metrics/bins/?search=" + search + "&as=" + as) - ); - return get(pondURL("/metrics/bins/?as=" + as)); + if (search){ + url = "/metrics/bins/?search=" + search + "&as=" + as + } + url = "/metrics/bins/?as=" + as; } - return get( - pondURL("/metrics/bins" + (search ? "?search=" + search : "")) - ); + return new Promise>((resolve, reject)=>{ + get(pondURL(url)).then(resp => { + resp.data = pond.GetBinMetricsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listBinLiters = ( @@ -373,62 +503,58 @@ export default function BinProvider(props: PropsWithChildren) { pressure: string, fan?: string ) => { - if (as) { - return get( - pondURL( - "/bins/" + - key + - "/liters?start=" + - start + - "&end=" + - end + - "&moisture=" + - moisture + - "&plenum=" + - plenum + - "&cable=" + - cable + - "&pressure=" + - pressure + - (fan ? "&fan=" + fan : "") + - "&as=" + - as - ) - ); - } - return get( - pondURL( - "/bins/" + - key + - "/liters?start=" + - start + - "&end=" + - end + - "&moisture=" + - moisture + - "&plenum=" + - plenum + - "&cable=" + - cable + - "&pressure=" + - pressure + - (fan ? "&fan=" + fan : "") - ) - ); + const url = "/bins/" + + key + + "/liters?start=" + + start + + "&end=" + + end + + "&moisture=" + + moisture + + "&plenum=" + + plenum + + "&cable=" + + cable + + "&pressure=" + + pressure + + (fan ? "&fan=" + fan : "") + + (as ? "&as=" + as : "") + + return new Promise>((resolve, reject)=>{ + get(pondURL(url)) + .then(resp => { + resp.data = pond.ListBinLiterResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listBinPrefs = (key: string) => { - return get( - pondURL("/bins/" + key + "/componentPreferences?as=" + as) - ); + const url = "/bins/" + key + "/componentPreferences?as=" + as + return new Promise>((resolve, reject)=>{ + get(pondURL(url)) + .then(resp => { + resp.data = pond.ListBinComponentPreferencesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateTopNodes = (key: string, newTopNodes: pond.NewTopNode[]) => { let body: pond.TopNodeList = pond.TopNodeList.create({ newTopNodes: newTopNodes }); - return post( - pondURL("/bins/" + key + "/updateTopNodes" + (as ? "?as=" + as : "")), - body - ); + let url = "/bins/" + key + "/updateTopNodes" + (as ? "?as=" + as : "") + return new Promise>((resolve,response) => { + post(pondURL(url),body).then(resp => { + resp.data = pond.UpdateTopNodesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return response(err) + }) + }) }; const listBinMeasurements = ( @@ -460,7 +586,15 @@ export default function BinProvider(props: PropsWithChildren) { (types ? "&types=" + types : "") + (showErrors ? "&showErrors=true" : "&showErrors=false") ); - return get(url); + return new Promise>((resolve, reject) => { + get(url) + .then(resp => { + resp.data = pond.ListObjectMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/componentAPI.tsx b/src/providers/pond/componentAPI.tsx index 6811ca1..59e0494 100644 --- a/src/providers/pond/componentAPI.tsx +++ b/src/providers/pond/componentAPI.tsx @@ -18,7 +18,7 @@ export interface IComponentAPIContext { url: string, componentKey: string ) => Promise; - add: (device: number, settings: pond.ComponentSettings) => Promise; + add: (device: number, settings: pond.ComponentSettings) => Promise>; addMultiComponents: ( device: number, components: pond.MultiComponentSettings @@ -28,9 +28,9 @@ export interface IComponentAPIContext { settings: pond.ComponentSettings, keys?: string[], types?: string[] - ) => Promise; - remove: (device: number, component: string, keys?: string[], types?: string[]) => Promise; - get: (device: number, component: string, keys?: string[], types?: string[]) => Promise; + ) => Promise>; + remove: (device: number, component: string, keys?: string[], types?: string[]) => Promise>; + get: (device: number, component: string, keys?: string[], types?: string[]) => Promise>; list: ( device: number | string, demo?: boolean, @@ -70,7 +70,7 @@ export interface IComponentAPIContext { keys?: string[], types?: string[] ) => //exportMeasurements?: boolean - Promise; + Promise>; sampleMeasurements: ( device: number | string, component: string, @@ -80,7 +80,7 @@ export interface IComponentAPIContext { demo?: boolean, keys?: string[], types?: string[] - ) => Promise; + ) => Promise>; sampleUnitMeasurements: ( device: number | string, component: string, @@ -148,19 +148,29 @@ export default function ComponentProvider(props: PropsWithChildren) { }; const addComponent = (device: number, settings: pond.ComponentSettings) => { - if (as) return post(pondURL(`/devices/${device}/components?as=${as}`), settings); - const url = pondURL("/devices/" + device + "/components?"); - return post(url, settings); + let url = "/devices/" + device + "/components" + if (as) url = url + `?as=${as}` + return new Promise>((resolve, reject) => { + post(pondURL(url), settings).then(resp => { + resp.data = pond.AddComponentResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const addMultiComponents = (device: number, components: pond.MultiComponentSettings) => { - if (as) - return post( - pondURL(`/devices/${device}/multiComponents?as=${as}`), - components - ); - const url = pondURL("/devices/" + device + "/multiComponents?"); - return post(url, components); + let url = "/devices/" + device + "/multiComponents" + if (as) url = url + `?as=${as}` + return new Promise>((resolve, reject)=>{ + post(pondURL(url), components).then(resp => { + resp.data = pond.AddMultiComponentsResponse.fromObject(resp.data) + resolve(resp) + }).catch(err => { + reject(err) + }) + }) }; const updateComponent = ( @@ -183,7 +193,14 @@ export default function ComponentProvider(props: PropsWithChildren) { ("&types=" + t) + (as ? "&as=" + as : "") ); - return put(url, settings); + return new Promise>((resolve, reject)=>{ + put(url, settings).then(resp => { + resp.data = pond.UpdateComponentResponse.fromObject(resp.data) + resolve(resp) + }).catch(err => { + reject(err) + }) + }) }; const removeComponent = ( @@ -205,7 +222,14 @@ export default function ComponentProvider(props: PropsWithChildren) { ("&types=" + t) + (as ? "&as=" + as : "") ); - return del(url); + return new Promise>((resolve, reject) => { + del(url).then(resp => { + resp.data = pond.RemoveComponentResponse.fromObject(resp) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getComponent = (device: number, component: string, keys?: string[], types?: string[]) => { @@ -222,7 +246,14 @@ export default function ComponentProvider(props: PropsWithChildren) { ("&types=" + t) + (as ? "&as=" + as : "") ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.Component.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listComponents = ( @@ -250,13 +281,26 @@ export default function ComponentProvider(props: PropsWithChildren) { (comprehensive ? "&comprehensive=" + comprehensive.toString() : ""), demo ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListComponentsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listComponentsForObject = (keys: string[], types: string[]) => { - return get( - pondURL("/components/forObject?keys=" + keys + "&types=" + types + (as ? "&as=" + as : "")) - ); + let url = pondURL("/components/forObject?keys=" + keys + "&types=" + types + (as ? "&as=" + as : "")) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListComponentsResponse.fromObject(resp.data) + resolve(resp) + }).catch(err => { + reject(err) + }) + }) }; const listComponentCardData = ( @@ -284,7 +328,14 @@ export default function ComponentProvider(props: PropsWithChildren) { (types ? "&types=" + types : "&types=" + ["device"]), demo ); - return get(url); + return new Promise>((resolve,reject)=>{ + get(url).then(resp => { + resp.data = pond.ListComponentCardDataResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listHistory = ( @@ -295,20 +346,26 @@ export default function ComponentProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return get( - pondURL( - "/devices/" + - deviceId + - "/components/" + - componentKey + - "/history?limit=" + - limit + - "&offset=" + - offset + - (keys ? "&keys=" + keys : "&keys=" + [deviceId.toString()]) + - (types ? "&types=" + types : "&types=" + ["device"]) - ) - ); + let url = pondURL( + "/devices/" + + deviceId + + "/components/" + + componentKey + + "/history?limit=" + + limit + + "&offset=" + + offset + + (keys ? "&keys=" + keys : "&keys=" + [deviceId.toString()]) + + (types ? "&types=" + types : "&types=" + ["device"]) + ) + return new Promise>((resolve,reject) => { + get(url).then(resp => { + resp.data = pond.ListComponentHistoryResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listMeasurements = ( @@ -346,7 +403,14 @@ export default function ComponentProvider(props: PropsWithChildren) { (types ? "&types=" + types : "&types=" + ["device"]), demo ); - return get(url); + return new Promise>((resolve,reject) => { + return get(url).then(resp => { + resp.data = pond.ListMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const sampleMeasurements = ( @@ -373,7 +437,14 @@ export default function ComponentProvider(props: PropsWithChildren) { (types ? "&types=" + types : "&types=" + ["device"]), demo ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.SampleMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const sampleUnitMeasurements = ( @@ -402,7 +473,14 @@ export default function ComponentProvider(props: PropsWithChildren) { (showErrors ? "&showErrors=true" : "&showErrors=false"), demo ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.SampleUnitMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateComponentPreferences = ( @@ -421,7 +499,13 @@ export default function ComponentProvider(props: PropsWithChildren) { (keys ? "?keys=" + keys : "?keys=" + [id.toString()]) + (types ? "&types=" + types : "&types=" + ["device"]) ); - return put(url, preferences); + return new Promise((resolve, reject) => { + put(url, preferences).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listUnitMeasurements = ( @@ -456,7 +540,14 @@ export default function ComponentProvider(props: PropsWithChildren) { (types ? "&types=" + types : "&types=" + ["device"]) + (showErrors ? "&showErrors=true" : "&showErrors=false") ); - return get(url); + return new Promise>((resolve,reject) => { + get(url).then(resp => { + resp.data = pond.ListUnitMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/deviceAPI.tsx b/src/providers/pond/deviceAPI.tsx index 4db910a..d422c59 100644 --- a/src/providers/pond/deviceAPI.tsx +++ b/src/providers/pond/deviceAPI.tsx @@ -8,18 +8,19 @@ import { AxiosResponse } from "axios"; import { useGlobalState } from "providers"; import moment from "moment"; import { or } from "utils/types"; +import { reject, result } from "lodash"; export interface IDeviceAPIContext { - add: (name: string, description: string, backpack: pond.BackpackSettings) => Promise; - update: (id: number, settings: pond.DeviceSettings) => Promise; - remove: (id: number) => Promise; - get: (id: number | string, demo?: boolean, keys?: string[], types?: string[]) => Promise; + add: (name: string, description: string, backpack: pond.BackpackSettings) => Promise>; + update: (id: number, settings: pond.DeviceSettings) => Promise>; + remove: (id: number) => Promise>; + get: (id: number | string, demo?: boolean, keys?: string[], types?: string[]) => Promise> getPageData: ( id: number | string, keys?: string[], types?: string[] ) => Promise>; - getMulti: (ids: number[] | string[]) => Promise; + getMulti: (ids: number[] | string[]) => Promise>; getGeoJson: (id: number | string, demo?: boolean) => Promise; getMultiGeoJson: (ids: number[] | string[]) => Promise; list: ( @@ -66,7 +67,7 @@ export interface IDeviceAPIContext { preferences: pond.DeviceComponentPreferences, keys?: string[], types?: string[] - ) => Promise; + ) => Promise>; listDeviceComponentPreferences: ( id: number | string, keys?: string[], @@ -77,7 +78,7 @@ export interface IDeviceAPIContext { status: pond.DeviceStatus, keys?: string[], types?: string[] - ) => Promise; + ) => Promise>; sync: (id: number) => Promise; clearPending: (id: number) => Promise; pause: (id: number) => Promise; @@ -149,8 +150,16 @@ export default function DeviceProvider(props: PropsWithChildren) { const [{ as, team }] = useGlobalState(); const add = (name: string, description: string, backpack: pond.BackpackSettings) => { - if (as) return post(pondURL("/devices?as=" + as), { name, description, backpack }); - return post(pondURL("/devices"), { name, description, backpack }); + let url = pondURL("/devices") + if (as) url = pondURL("/devices?as=" + as) + return new Promise>((resolve, reject) => { + post(url, { name, description, backpack }).then(resp => { + resp.data = pond.AddDeviceResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getDevice = ( @@ -159,42 +168,43 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - if (as && !(types && types.length > 0 && types[0] === "team")) - return get( - pondURL( - "/devices/" + - id + - "?as=" + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : ""), - demo - ) - ); - const url = pondURL( + let url = pondURL( "/devices/" + - id + - (keys ? "?keys=" + keys.toString() : "") + + id + + (as ? "?as=" + as : "") + + (keys ? "&keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : ""), demo ); - return get(url); + return new Promise>((resolve, response) => { + get(url).then(resp => { + resp.data = pond.Device.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const statistics = ( keys?: string[], types?: string[] ) => { + let url = pondURL("/deviceStatistics"); if (types && types.length > 0 && types[0] === "team") - return get( - pondURL( - "/deviceStatistics/" + - (keys ? "?keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); - const url = pondURL("/deviceStatistics"); - return get(url); + url = pondURL( + "/deviceStatistics/" + + (keys ? "?keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetDeviceStatisticsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getDevicePageData = ( @@ -202,30 +212,42 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ): Promise> => { - if (as && !(types && types.length > 0 && types[0] === "team")) - return get( - pondURL( - "/devicePageData/" + - id + - "?as=" + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); - const url = pondURL( + let url = pondURL( "/devicePageData/" + id + (keys ? "?keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : "") ); - return get(url); + if (as && !(types && types.length > 0 && types[0] === "team")) { + pondURL( + "/devicePageData/" + + id + + "?as=" + + as + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + } + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetDevicePageDataResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getDeviceGeoJSON = (id: number | string, demo: boolean = false) => { - if (as) return get(pondURL("/devices/" + id + "/geojson?as=" + as, demo)); - const url = pondURL("/devices/" + id + "/geojson", demo); - return get(url); + let url = pondURL("/devices/" + id + "/geojson", demo); + if (as) url = pondURL("/devices/" + id + "/geojson?as=" + as, demo) + return new Promise((resolve, reject) => { + get(url).catch(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getMulti = (ids: number[] | string[]) => { @@ -237,8 +259,15 @@ export default function DeviceProvider(props: PropsWithChildren) { idString = idString + "," + id; } }); - if (as) return get(pondURL("/multidevices?devices=" + idString + "&as=" + as)); - return get(pondURL("/multidevices?devices=" + idString)); + let url = pondURL("/multidevices?devices=" + idString + (as ? "&as=" + as : "")) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetMultiDeviceResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getMultiDevicesGeoJSON = (ids: number[] | string[]) => { @@ -250,8 +279,14 @@ export default function DeviceProvider(props: PropsWithChildren) { idString = idString + "," + id; } }); - if (as) return get(pondURL("/geojson/devices?devices=" + idString + "&as=" + as)); - return get(pondURL("/geojson/devices?devices=" + idString)); + let url = pondURL("/geojson/devices?devices=" + idString + (as ? "&as=" + as : "")) + return new Promise((resolve, reject) => { + get(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const list = ( @@ -288,7 +323,14 @@ export default function DeviceProvider(props: PropsWithChildren) { (keys ? "&keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : "") ); - return get(url); + return new Promise>((resolve, reject)=>{ + get(url).then(resp => { + resp.data = pond.ListDevicesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }); + }) }; const listForUser = ( @@ -307,45 +349,83 @@ export default function DeviceProvider(props: PropsWithChildren) { (keys ? "&keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : "") ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListDevicesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const remove = (id: number) => { - if (as) return del(pondURL("/devices/" + id + "?as=" + as)); - const url = pondURL("/devices/" + id); - return del(url); + const url = pondURL("/devices/" + id + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + del(url).then(resp => { + resp.data = pond.RemoveDeviceResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const update = (id: number, settings: pond.DeviceSettings) => { - if (as) return put(pondURL(`/devices/${id}/update?as=${as}`), settings); - const url = pondURL("/devices/" + id + "/update"); - return put(url, settings); + const url = pondURL("/devices/" + id + "/update" + (as ? "?as=" + as : "")); + return new Promise>((resolve, reject) => { + put(url, settings).then(resp => { + resp.data = pond.UpdateDeviceResponse.fromObject(resp) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const claim = (id: number | Long, body: any) => { - return put(pondURL("/devices/" + id), body); + return new Promise((resolve, reject) => { + put(pondURL("/devices/" + id), body).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listHistory = (id: number, limit: number, offset: number) => { - return get(pondURL("/devices/" + id + "/history?limit=" + limit + "&offset=" + offset)); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + id + "/history?limit=" + limit + "&offset=" + offset)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; + const listCompleteHistory = ( id: number, limit: number, offset: number, filters?: pond.ObjectType[] ) => { - return get( - pondURL( - "/devices/" + - id + - "/completehistory?limit=" + - limit + - "&offset=" + - offset + - (filters ? "&sources=" + filters.toString() : "") - ) - ); + let url = pondURL( + "/devices/" + + id + + "/completehistory?limit=" + + limit + + "&offset=" + + offset + + (filters ? "&sources=" + filters.toString() : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListCompleteHistoryResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateDevicePermissions = (id: number | string, users: User[]) => { @@ -358,18 +438,22 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return put( - pondURL( - "/devices/" + - id + - "/preferences" + - "?as=" + - or(as, "") + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ), - preferences - ); + let url = pondURL( + "/devices/" + + id + + "/preferences" + + "?as=" + + or(as, "") + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise((resolve, reject) => { + put(url,preferences).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateComponentPreferences = ( @@ -379,20 +463,25 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return put( - pondURL( - "/devices/" + - id + - "/components/" + - component + - "/componentPreferences" + - "?as=" + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ), - preferences - ); + let url = pondURL( + "/devices/" + + id + + "/components/" + + component + + "/componentPreferences" + + "?as=" + + as + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + put(url, preferences).then(resp => { + resp.data = pond.UpdateDeviceComponentPreferencesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listDeviceComponentPreferences = ( @@ -400,16 +489,22 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return get( - pondURL( - "/devices/" + - id + - "/componentPreferences?as=" + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); + let url = pondURL( + "/devices/" + + id + + "/componentPreferences?as=" + + as + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListDeviceComponentPreferencesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateStatus = ( @@ -418,52 +513,93 @@ export default function DeviceProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return put( - pondURL( - "/devices/" + - id + - "/updateStatus" + - "?as=" + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ), - status - ); + let url = pondURL( + "/devices/" + + id + + "/updateStatus" + + "?as=" + + as + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + put(url, status).then(resp => { + resp.data = pond.UpdateDeviceStatusResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const sync = (id: number) => { - return post(pondURL("/devices/" + id + "/sync"), {}); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/sync"), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const clearPending = (id: number) => { - return post(pondURL("/devices/" + id + "/clearPending"), {}); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/clearPending"), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const pause = (id: number) => { - return post(pondURL("/devices/" + id + "/pause"), {}); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/pause"), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const bulkPause = (ids: number[], setPaused: boolean) => { - return post( - pondURL( - "/bulkPauseDevices?ids=" + - ids.toString() + - (setPaused ? "&pause=" + setPaused.toString() : "") - ), - {} - ); + let url = pondURL( + "/bulkPauseDevices?ids=" + + ids.toString() + + (setPaused ? "&pause=" + setPaused.toString() : "") + ) + return new Promise>((resolve, reject) => { + post(url,{}).then(resp => { + resp.data = pond.BulkPauseDeviceResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const bulkChangeDataCaps = (ids: number[], newCap: number) => { - return post( - pondURL("/bulkChangeDataCap?ids=" + ids.toString() + "&dataCap=" + newCap), - {} - ); + return new Promise>((resolve, reject) => { + post( + pondURL("/bulkChangeDataCap?ids=" + ids.toString() + "&dataCap=" + newCap), + {} + ).then(resp => { + resp.data = pond.BulkChangeDataCapsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const resume = (id: number) => { - return post(pondURL("/devices/" + id + "/resume"), {}); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/resume"), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getUpgradeStatus = (id: number, keys?: string[], types?: string[]) => { @@ -472,15 +608,33 @@ export default function DeviceProvider(props: PropsWithChildren) { a = as ? a + "&keys=" + keys + "&types=" + types : "?keys=" + keys + "&types=" + types; } let url = pondURL("/devices/" + id + "/firmware" + a); - return get(url); + return new Promise((resolve, reject) => { + get(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const loadBackpack = (id: number, backpack: number) => { - return put(pondURL("/devices/" + id + "/load/" + backpack), {}); + return new Promise((resolve, reject) => { + put(pondURL("/devices/" + id + "/load/" + backpack), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const setTags = (id: number, tags: string[]) => { - return put(pondURL("/devices/" + id + "/tags"), { tags }); + return new Promise((resolve, reject) => { + put(pondURL("/devices/" + id + "/tags"), { tags }).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const setWifi = ( @@ -494,31 +648,73 @@ export default function DeviceProvider(props: PropsWithChildren) { if (keys && keys.length > 0 && types && types.length > 0) { a = as ? a + "&keys=" + keys + "&types=" + types : "?keys=" + keys + "&types=" + types; } - return put(pondURL("/devices/" + id + "/wifi" + a), { gateway, password }); + return new Promise((resolve, reject) => { + put(pondURL("/devices/" + id + "/wifi" + a), { gateway, password }).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const tag = (id: number, tag: string) => { - return put(pondURL("/devices/" + id + "/tags/" + tag), {}); + return new Promise((resolve, reject) => { + put(pondURL("/devices/" + id + "/tags/" + tag), {}).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const untag = (id: number, tag: string) => { - return del(pondURL("/devices/" + id + "/tags/" + tag)); + return new Promise((resolve, reject) => { + del(pondURL("/devices/" + id + "/tags/" + tag)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getDatacap = (id: number) => { - return get(pondURL("/devices/" + id + "/datacap/")); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + id + "/datacap/")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const isOverLimit = (id: number) => { - return get(pondURL("/devices/" + id + "/overlimit/")); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + id + "/overlimit/")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const isPaused = (id: number) => { - return get(pondURL("/devices/" + id + "/paused/")); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + id + "/paused/")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const setDatacap = (id: number, newCap: number) => { - return post(pondURL("/devices/" + id + "/datacap?limit=" + newCap)); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/datacap?limit=" + newCap)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getDataUsage = (id: number, start?: any) => { @@ -527,7 +723,13 @@ export default function DeviceProvider(props: PropsWithChildren) { } else { start = ""; } - return get(pondURL("/devices/" + id + "/usage/" + start)); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + id + "/usage/" + start)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; // const listJSONMeasurements = ( @@ -591,26 +793,57 @@ export default function DeviceProvider(props: PropsWithChildren) { // }; const listSimpleJSON = (device: number) => { - return get(pondURL("/devices/" + device + "/measurements/exportSimple")); + return new Promise((resolve, reject) => { + get(pondURL("/devices/" + device + "/measurements/exportSimple")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const resetQuackCount = (id: number) => { - return post(pondURL("/devices/" + id + "/resetCounts")); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/resetCounts")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const resetQuackCountTx = (id: number) => { - return post(pondURL("/devices/" + id + "/resetCountTx")); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/resetCountTx")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const resetQuackCountTx1000 = (id: number) => { - return post(pondURL("/devices/" + id + "/partialResetCountTx")); + return new Promise((resolve, reject) => { + post(pondURL("/devices/" + id + "/partialResetCountTx")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const linearMutation = (id: number, mutation: pond.LinearMutation) => { - return post( - pondURL("/devices/" + id + "/linearMutation"), - mutation - ); + return new Promise>((resolve, reject) => { + post( + pondURL("/devices/" + id + "/linearMutation"), + mutation + ).then(resp => { + resp.data = pond.DeviceLinearMutationResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const buyData = ( @@ -625,7 +858,13 @@ export default function DeviceProvider(props: PropsWithChildren) { if (source) url = url + "&source=" + source; if (keys) url = url + "&keys=" + keys; if (types) url = url + "&types=" + types; - return put(pondURL(url)); + return new Promise((resolve, reject) => { + put(pondURL(url)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/gateAPI.tsx b/src/providers/pond/gateAPI.tsx index 6e82812..7d4acdf 100644 --- a/src/providers/pond/gateAPI.tsx +++ b/src/providers/pond/gateAPI.tsx @@ -72,10 +72,15 @@ export default function GateProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState(); const addGate = (name: string, settings: pond.GateSettings) => { - if (as) { - return post(pondURL("/gates?name=" + name + "&as=" + as), settings); - } - return post(pondURL("/gates?name=" + name + "&as=" + as), settings); + let url = pondURL("/gates?name=" + name + (as ? "&as=" + as : "")) + return new Promise>((resolve, reject) => { + post(url, settings).then(resp => { + resp.data = pond.AddGateResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listGates = ( @@ -93,53 +98,76 @@ export default function GateProvider(props: PropsWithChildren) { let asText = ""; if (as) asText = "&as=" + as; if (specificUser) asText = "&as=" + specificUser; - return get( - pondURL( - "/gates?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + (order ? order : "asc")) + - ("&by=" + (orderBy ? orderBy : "key")) + - (numerical ? "&numerical=true" : "") + - (search ? "&search=" + search : "") + - (pcaStatus ? "&getPCA=" + pcaStatus.toString() : "") + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") + - asText - ) - ); + let url = pondURL( + "/gates?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + (order ? order : "asc")) + + ("&by=" + (orderBy ? orderBy : "key")) + + (numerical ? "&numerical=true" : "") + + (search ? "&search=" + search : "") + + (pcaStatus ? "&getPCA=" + pcaStatus.toString() : "") + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + + asText + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListGatesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateGate = (key: string, name: string, settings: pond.GateSettings) => { - if (as) { - return put( - pondURL("/gates/" + key + "?as=" + as + "&name=" + name), - settings - ); - } - return put(pondURL("/gates/" + key + "?name=" + name), settings); + let url = pondURL("/gates/" + key + "?name=" + name + (as ? "&as=" + as : "")) + return new Promise>((resolve, reject) => { + put(url, settings).then(resp => { + resp.data = pond.UpdateGateResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeGate = (key: string) => { - if (as) { - return del(pondURL("/gates/" + key + "?as=" + as)); - } - return del(pondURL("/gates/" + key + "?as=" + as)); + let url = pondURL("/gates/" + key + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + del(url).then(resp => { + resp.data = pond.RemoveGateResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getGate = (key: string) => { - if (as) { - return get(pondURL("/gates/" + key + "?as=" + as)); - } - return get(pondURL("/gates/" + key)); + let url = pondURL("/gates/" + key + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetGateResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getGatePageData = (key: string) => { - if (as) { - return get(pondURL("/gatePage/" + key + "?as=" + as)); - } - return get(pondURL("/gatePage/" + key)); + let url = pondURL("/gatePage/" + key + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetGatePageDataResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateLink = ( @@ -149,21 +177,21 @@ export default function GateProvider(props: PropsWithChildren) { objectType: string, permissions: string[] ) => { - if (as) - return post(pondURL(`/gates/` + parentID + `/link?as=${as}`), { + let url = pondURL(`/gates/` + parentID + "/link" + (as ? `?as=${as}` : "")) + return new Promise((resolve, reject) => { + post(url, { Key: objectID, Type: objectType, Parent: parentID, ParentType: parentType, Permissions: permissions - }); - return post(pondURL(`/gates/` + parentID + `/link`), { - Key: objectID, - Type: objectType, - Parent: parentID, - ParentType: parentType, - Permissions: permissions - }); + }).then(resp => { + resolve(resp) + }).catch(err => { + reject(err) + }) + }) + }; const updatePrefs = ( @@ -174,38 +202,27 @@ export default function GateProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - if (as) { - return put( - pondURL( - `/gatePrefs/` + - gateKey + - "?childType=" + - childType + - "&childKey=" + - childKey + - "&gatePreference=" + - gatePref + - `&as=` + - as + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); - } - return put( - pondURL( - `/gatePrefs/` + - gateKey + - "?childType=" + - childType + - "&childKey=" + - childKey + - "&gatePreference=" + - gatePref + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); + let url = pondURL( + `/gatePrefs/` + + gateKey + + "?childType=" + + childType + + "&childKey=" + + childKey + + "&gatePreference=" + + gatePref + + (as ? `&as=` + as : "") + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + put(url).then(resp => { + resp.data = pond.UpdateGatePreferencesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listGateAirflow = ( @@ -218,31 +235,43 @@ export default function GateProvider(props: PropsWithChildren) { keys?: string[], types?: string[] ) => { - return get( - pondURL( - "/gates/" + - gate + - "/airflow?device=" + - device + - "&ambient=" + - ambientComponent + - "&pressure=" + - pressureComponent + - "&start=" + - start + - "&end=" + - end + - (as ? "&as=" + as : "") + - (keys ? "&keys=" + keys.toString() : "") + - (types ? "&types=" + types.toString() : "") - ) - ); + let url = pondURL( + "/gates/" + + gate + + "/airflow?device=" + + device + + "&ambient=" + + ambientComponent + + "&pressure=" + + pressureComponent + + "&start=" + + start + + "&end=" + + end + + (as ? "&as=" + as : "") + + (keys ? "&keys=" + keys.toString() : "") + + (types ? "&types=" + types.toString() : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListGateAirflowResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listGateMeasurements = (key: string, start: string, end: string) => { - return get( - pondURL("/gates/" + key + "/measurements?start=" + start + "&end=" + end + "&as=" + as) - ); + let url = pondURL("/gates/" + key + "/measurements?start=" + start + "&end=" + end + "&as=" + as) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListGateMeasurementsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/groupAPI.tsx b/src/providers/pond/groupAPI.tsx index 6d3a610..cb6437e 100644 --- a/src/providers/pond/groupAPI.tsx +++ b/src/providers/pond/groupAPI.tsx @@ -30,7 +30,7 @@ export interface IGroupAPIContext { asRoot?: boolean, keys?: string[], types?: string[], - ) => Promise; + ) => Promise>; listGroupDevices: ( id: number, limit: number, @@ -53,35 +53,75 @@ export default function GroupProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState(); const addGroup = (group: pond.GroupSettings) => { - if (as) return post(pondURL("/groups?as=" + as), group); - return post(pondURL("/groups"), group); + let url = pondURL("/groups") + if (as) url = pondURL("/groups?as=" + as) + return new Promise((resolve, reject) => { + post(url, group).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const addDevice = (group: number, device: number) => { let url = "/groups/" + group + "/devices/" + device + "/add"; - if (as) return post(pondURL(url + as), group); - return post(pondURL(url), group); + if (as) url = pondURL(url + as) + return new Promise((resolve, reject) => { + post(pondURL(url), group).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeDevice = (group: number, device: number) => { let url = "/groups/" + group + "/devices/" + device + "/remove"; - if (as) return post(pondURL(url + as), group); - return post(pondURL(url), group); + if (as) url = pondURL(url + as) + return new Promise((resolve, reject) => { + post(pondURL(url), group).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateGroup = (id: number, group: pond.GroupSettings) => { - if (as) return put(pondURL("/groups/" + id + "?as=" + as), group); - return put(pondURL("/groups/" + id), group); + let url = pondURL("/groups/" + id) + if (as) url = pondURL("/groups/" + id + "?as=" + as) + return new Promise((resolve, reject) => { + put(url, group).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeGroup = (id: number) => { - if (as) return del(pondURL("/groups/" + id + "?as=" + as)); - return del(pondURL("/groups/" + id)); + let url = pondURL("/groups/" + id) + if (as) url = pondURL("/groups/" + id + "?as=" + as) + return new Promise((resolve, reject) => { + del(url).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getGroup = (id: number) => { + let url = pondURL("/groups/" + id) if (as) return get(pondURL("/groups/" + id + "?as=" + as)); - return get(pondURL("/groups/" + id)); + return new Promise((resolve, reject) => { + get(url).then(resp => { + resolve(resp) + }).catch(err => { + reject(err) + }) + }) }; const getGroupAndPermissions = ( @@ -102,7 +142,14 @@ export default function GroupProvider(props: PropsWithChildren) { (keys ? "?keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : "") } - return get(pondURL(url)); + return new Promise>((resolve, reject) => { + get(pondURL(url)).then(resp => { + resp.data = pond.GetGroupAndPermissionsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getGroupPermissions = ( @@ -148,26 +195,32 @@ export default function GroupProvider(props: PropsWithChildren) { types = types? types : getContextTypes(); types.forEach((type, index) => { if (type === "group") { - types.splice(index, 1) - keys.splice(index, 1) + types && types.splice(index, 1) + keys && keys.splice(index, 1) } }) - return get( - pondURL( - "/groups" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&orderBy=" + or(orderBy, "id")) + - (search ? "&search=" + search : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (as ? "&as=" + as.toString() : "") + - (keys.length > 0 ? "&keys=" + keys : "") + - (types.length > 0 ? "&types=" + types : "") - ) - ); + let url = pondURL( + "/groups" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&orderBy=" + or(orderBy, "id")) + + (search ? "&search=" + search : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (as ? "&as=" + as.toString() : "") + + (keys.length > 0 ? "&keys=" + keys : "") + + (types.length > 0 ? "&types=" + types : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListGroupsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listGroupDevices = ( @@ -178,21 +231,27 @@ export default function GroupProvider(props: PropsWithChildren) { search?: string, comprehensive: boolean = false ) => { - return get( - pondURL( - "/groups/" + - id + - "/devices?limit=" + - limit + - "&offset=" + - offset + - "&order=" + - order + - (search ? "&search=" + search : "") + - (comprehensive ? "&comprehensive=" + comprehensive.toString() : "") + - (as ? "&as=" + as.toString() : "") - ) - ); + let url = pondURL( + "/groups/" + + id + + "/devices?limit=" + + limit + + "&offset=" + + offset + + "&order=" + + order + + (search ? "&search=" + search : "") + + (comprehensive ? "&comprehensive=" + comprehensive.toString() : "") + + (as ? "&as=" + as.toString() : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.GetMultiDeviceResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateGroupPermissions = (id: number, users: User[]) => { diff --git a/src/providers/pond/interactionsAPI.tsx b/src/providers/pond/interactionsAPI.tsx index a99f638..16e7293 100644 --- a/src/providers/pond/interactionsAPI.tsx +++ b/src/providers/pond/interactionsAPI.tsx @@ -10,19 +10,19 @@ import { has } from "utils/types"; import { pondURL } from "./pond"; export interface IInteractionsAPIContext { - addInteraction: (device: number, settings: pond.IInteractionSettings) => Promise; - addMultiInteractions: (device: number, settings: pond.MultiInteractionSettings) => Promise; + addInteraction: (device: number, settings: pond.IInteractionSettings) => Promise>; + addMultiInteractions: (device: number, settings: pond.MultiInteractionSettings) => Promise>; addInteractionToComponents: ( fullComponentLocations: string[], settings: pond.IInteractionSettings ) => Promise>; - updateInteraction: (device: number, settings: pond.IInteractionSettings) => Promise; + updateInteraction: (device: number, settings: pond.IInteractionSettings) => Promise>; updateInteractionPondSettings: ( device: number, interaction: string, settings: pond.IInteractionPondSettings - ) => Promise; - removeInteraction: (device: number, interaction: string) => Promise; + ) => Promise>; + removeInteraction: (device: number, interaction: string) => Promise>; listInteractionsByDevice: (device: number | string, demo?: boolean) => Promise; listInteractionsByComponent: ( device: number, @@ -59,10 +59,17 @@ export default function InteractionProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState(); const addInteraction = (device: number, settings: pond.IInteractionSettings) => { - return post( - pondURL("/devices/" + device + "/interactions" + (as ? "?as=" + as : "")), - sanitizeInteraction(settings) - ); + return new Promise>((resolve, reject) => { + post( + pondURL("/devices/" + device + "/interactions" + (as ? "?as=" + as : "")), + sanitizeInteraction(settings) + ).then(resp => { + resp.data = pond.AddInteractionResponse.fromObject(resp) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; /** @@ -75,37 +82,52 @@ export default function InteractionProvider(props: PropsWithChildren) { fullComponentLocations: string[], settings: pond.IInteractionSettings ) => { - return post( - pondURL( - "/interactions/forComponents/" + - "?componentIds=" + - fullComponentLocations.toString() + - (as ? "&as=" + as : "") - ), - sanitizeInteraction(settings) - ); + let url = pondURL( + "/interactions/forComponents/" + + "?componentIds=" + + fullComponentLocations.toString() + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + post(url,sanitizeInteraction(settings)).then(resp => { + resp.data = pond.AddInteractionToComponentsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const addMultiInteractions = (device: number, settings: pond.MultiInteractionSettings) => { - return post( - pondURL("/devices/" + device + "/interactions/multi" + (as ? "?as=" + as : "")), - settings - ); + let url = pondURL("/devices/" + device + "/interactions/multi" + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + post(url,settings).then(resp => { + resp.data = pond.AddMultiInteractionsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateInteraction = (device: number, settings: pond.IInteractionSettings) => { - return put( - pondURL( - "/devices/" + - device + - "/interactions?keys=" + - [device] + - "&types=" + - ["device"] + - (as ? "&as=" + as : "") - ), - sanitizeInteraction(settings) - ); + let url = pondURL( + "/devices/" + + device + + "/interactions?keys=" + + [device] + + "&types=" + + ["device"] + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + put(url,sanitizeInteraction(settings)).then(resp => { + resp.data = pond.UpdateInteractionResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateInteractionPondSettings = ( @@ -113,26 +135,38 @@ export default function InteractionProvider(props: PropsWithChildren) { interaction: string, settings: pond.IInteractionPondSettings ) => { - return put( - pondURL( - "/devices/" + - device + - "/interactions/" + - interaction + - "/interactionPondSettings?keys=" + - [device] + - "&types=" + - ["device"] + - (as ? "&as=" + as : "") - ), - sanitizeInteraction(settings) - ); + let url = pondURL( + "/devices/" + + device + + "/interactions/" + + interaction + + "/interactionPondSettings?keys=" + + [device] + + "&types=" + + ["device"] + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + put(url, sanitizeInteraction(settings)).then(resp => { + resp.data = pond.UpdateInteractionPondSettingsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeInteraction = (device: number, interaction: string) => { - return del( - pondURL("/devices/" + device + "/interactions/" + interaction + (as ? "?as=" + as : "")) - ); + let url = pondURL("/devices/" + device + "/interactions/" + interaction + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + del(url).then(resp => { + resp.data = pond.RemoveInteractionResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) + }; const listInteractionsByDevice = ( @@ -223,10 +257,15 @@ export default function InteractionProvider(props: PropsWithChildren) { const setAlertInteractions = ( alerts: pond.AlertData[] ): Promise> => { - return post( - pondURL("/interactions/setAlerts" + (as ? "?as=" + as : "")), - { data: alerts } - ); + let url = pondURL("/interactions/setAlerts" + (as ? "?as=" + as : "")) + return new Promise>((resolve, reject) => { + post(url, { data: alerts }).then(resp => { + resp.data = pond.SetAlertInteractionsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/noteAPI.tsx b/src/providers/pond/noteAPI.tsx index 229fab0..8280ac4 100644 --- a/src/providers/pond/noteAPI.tsx +++ b/src/providers/pond/noteAPI.tsx @@ -6,7 +6,7 @@ import { pondURL } from "./pond"; export interface INoteAPIContext { addNote: (note: pond.NoteSettings, attachments?: string[]) => Promise; - getNote: (noteID: string) => Promise; + getNote: (noteID: string) => Promise>; updateNote: (note: pond.NoteSettings) => Promise; listNotes: ( limit: number, @@ -38,22 +38,45 @@ export default function NoteProvider(props: PropsWithChildren) { const { get, del, post, put } = useHTTP(); const addNote = (note: pond.NoteSettings, attachments?: string[]) => { - return post( - pondURL("/notes" + (attachments ? "?attachments=" + attachments.toString() : "")), - note - ); + let url = pondURL("/notes" + (attachments ? "?attachments=" + attachments.toString() : "")) + return new Promise((resolve, reject) => { + post(url, note).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getNote = (noteID: string) => { - return get(pondURL("/notes/" + noteID)); + return new Promise>((resolve, reject) => { + get(pondURL("/notes/" + noteID)).then(resp => { + resp.data = pond.Note.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateNote = (note: pond.NoteSettings) => { - return put(pondURL("/notes/"), note); + return new Promise((resolve, reject) => { + put(pondURL("/notes/"), note).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeNote = (key: string) => { - return del(pondURL("/notes/" + key)); + return new Promise((resolve, reject) => { + del(pondURL("/notes/" + key)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listNotes = ( @@ -65,20 +88,26 @@ export default function NoteProvider(props: PropsWithChildren) { asRoot?: boolean, as?: string ) => { - return get( - pondURL( - "/notes" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + (order ? order : "asc")) + - ("&by=" + (orderBy ? orderBy : "key")) + - (search ? "&search=" + search : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (as ? "&as=" + as : "") - ) - ); + let url = pondURL( + "/notes" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + (order ? order : "asc")) + + ("&by=" + (orderBy ? orderBy : "key")) + + (search ? "&search=" + search : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListNotesResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listChats = ( @@ -90,20 +119,26 @@ export default function NoteProvider(props: PropsWithChildren) { asRoot?: boolean, as?: string ) => { - return get( - pondURL( - "/chats" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + (order ? order : "asc")) + - ("&by=" + (orderBy ? orderBy : "key")) + - (search ? "&search=" + search : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (as ? "&as=" + as : "") - ) - ); + let url = pondURL( + "/chats" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + (order ? order : "asc")) + + ("&by=" + (orderBy ? orderBy : "key")) + + (search ? "&search=" + search : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListChatsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/notificationAPI.tsx b/src/providers/pond/notificationAPI.tsx index 452dd17..2b23adb 100644 --- a/src/providers/pond/notificationAPI.tsx +++ b/src/providers/pond/notificationAPI.tsx @@ -47,20 +47,26 @@ export default function NotificationProvider(props: PropsWithChildren) { as?: string, asRoot?: boolean ) => { - return get( - pondURL( - "/notifications" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&by=" + or(orderBy, "key")) + - (as ? "&as=" + as : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (search ? "&search=" + search : "") - ) - ); + let url = pondURL( + "/notifications" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&by=" + or(orderBy, "key")) + + (as ? "&as=" + as : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (search ? "&search=" + search : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListNotificationsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listObjectNotifications = ( @@ -73,30 +79,41 @@ export default function NotificationProvider(props: PropsWithChildren) { search?: string, as?: string ) => { - return get( - pondURL( - "/object/notifications" + - "?objectKey=" + - key + - "&objectType=" + - type + - "&limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&by=" + or(orderBy, "key")) + - (search ? "&search=" + search : "") + - (as ? "&as=" + as : "") - ) - ); + let url = pondURL( + "/object/notifications" + + "?objectKey=" + + key + + "&objectType=" + + type + + "&limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&by=" + or(orderBy, "key")) + + (search ? "&search=" + search : "") + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListObjectNotificationsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const hideNotification = (keys: string[]) => { - return put( - pondURL("/notifications/hide"), - pond.NotificationKeys.create({ keys: keys }) - ); + let url = pondURL("/notifications/hide") + return new Promise>((resolve, reject) => { + put(url,pond.NotificationKeys.create({ keys: keys })).then(resp => { + resp.data = pond.HideNotificationResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/permissionAPI.tsx b/src/providers/pond/permissionAPI.tsx index 06e4ac1..2311afd 100644 --- a/src/providers/pond/permissionAPI.tsx +++ b/src/providers/pond/permissionAPI.tsx @@ -45,11 +45,23 @@ export default function PermissionProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState(); const getPermissions = (user: string, scope: Scope) => { - return get(pondURL("/users/" + user + "/permissions" + objectQueryParams(scope))); + return new Promise((resolve, reject) => { + get(pondURL("/users/" + user + "/permissions" + objectQueryParams(scope))).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removePermissions = (user: string, scope: Scope) => { - return del(pondURL("/users/" + user + "/permissions" + objectQueryParams(scope))); + return new Promise((resolve, reject) => { + del(pondURL("/users/" + user + "/permissions" + objectQueryParams(scope))).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updatePermissions = (scope: Scope, users: User[] | Team[]) => { @@ -67,7 +79,13 @@ export default function PermissionProvider(props: PropsWithChildren) { permissions: user.permissions.map(permission => permissionToString(permission)) }); }); - return put(pondURL("/" + scope.kind + "s/" + scope.key + "/permissions"), body); + return new Promise((resolve, reject) => { + put(pondURL("/" + scope.kind + "s/" + scope.key + "/permissions"), body).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const shareObject = ( @@ -78,10 +96,16 @@ export default function PermissionProvider(props: PropsWithChildren) { ) => { let sql = "/" + scope.kind + "s/" + scope.key + "/share"; if (as && useImitation) sql = sql + "?as=" + as; - return post(pondURL(sql), { - email: email, - permissions: permissions.map(permission => permissionToString(permission)) - }); + return new Promise((resolve, reject) => { + post(pondURL(sql), { + email: email, + permissions: permissions.map(permission => permissionToString(permission)) + }).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateRelativePermissions = ( @@ -91,44 +115,80 @@ export default function PermissionProvider(props: PropsWithChildren) { ) => { let sql = "/updateRelativePermissions"; if (as) sql = sql + "?as=" + as; - return put(pondURL(sql), { - parent: parentScope.key, - parentType: parentScope.kind, - child: childScope.key, - childType: childScope.kind, - permissions: permissions.map(permission => permissionToString(permission)) - }); + return new Promise((resolve, reject) => { + + put(pondURL(sql), { + parent: parentScope.key, + parentType: parentScope.kind, + child: childScope.key, + childType: childScope.kind, + permissions: permissions.map(permission => permissionToString(permission)) + }).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const shareObjectByKey = (scope: Scope, key: string, permissions: pond.Permission[]) => { - if (as) - return post(pondURL(`/${scope.kind}s/${scope.key}/shareByKey?as=${as}`), { + let url = pondURL("/" + scope.kind + "s/" + scope.key + "/shareByKey") + if (as) url = pondURL(`/${scope.kind}s/${scope.key}/shareByKey?as=${as}`) + return new Promise((resolve, reject) => { + + post(url, { key: key, permissions: permissions.map(permission => permissionToString(permission)) - }); - return post(pondURL("/" + scope.kind + "s/" + scope.key + "/shareByKey"), { - key: key, - permissions: permissions.map(permission => permissionToString(permission)) - }); + }).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const addShareableLink = (scope: Scope, expiration: string) => { let shareBody: pond.ShareableLinkSettings = pond.ShareableLinkSettings.create({ expiration: expiration }); - return post(pondURL("/" + scope.kind + "s/" + scope.key + "/links"), shareBody); + return new Promise((resolve, reject) => { + return post(pondURL("/" + scope.kind + "s/" + scope.key + "/links"), shareBody).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeShareableLink = (scope: Scope, code: string) => { - return del(pondURL("/" + scope.kind + "s/" + scope.key + "/links/" + code)); + return new Promise((resolve, reject) => { + del(pondURL("/" + scope.kind + "s/" + scope.key + "/links/" + code)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listShareableLinks = (scope: Scope) => { - return get(pondURL("/" + scope.kind + "s/" + scope.key + "/links")); + return new Promise((resolve, reject) => { + get(pondURL("/" + scope.kind + "s/" + scope.key + "/links")).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getShareableLink = (scope: Scope, code: string) => { - return get(pondURL("/" + scope.kind + "s/" + scope.key + "/links/" + code)); + return new Promise((resolve, reject) => { + get(pondURL("/" + scope.kind + "s/" + scope.key + "/links/" + code)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) + }; return ( diff --git a/src/providers/pond/tagAPI.tsx b/src/providers/pond/tagAPI.tsx index 2552bd6..06522eb 100644 --- a/src/providers/pond/tagAPI.tsx +++ b/src/providers/pond/tagAPI.tsx @@ -3,6 +3,7 @@ import { pond } from "protobuf-ts/pond"; import { createContext, PropsWithChildren, useContext } from "react"; import { pondURL } from "./pond"; import { useGlobalState } from "providers/StateContainer"; +import { AxiosResponse } from "axios"; export interface ITagAPIContext { addTag: (tag: pond.TagSettings) => Promise; @@ -31,19 +32,43 @@ export default function TagProvider(props: PropsWithChildren) { const [{ as }] = useGlobalState() const addTag = (tag: pond.TagSettings) => { - return post(pondURL("/tags"), tag); + return new Promise((resolve, reject) => { + post(pondURL("/tags"), tag).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateTag = (tagID: string, tag: pond.TagSettings) => { - return put(pondURL("/tags/" + tagID), tag); + return new Promise((resolve, reject) => { + put(pondURL("/tags/" + tagID), tag).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const removeTag = (tagID: string) => { - return del(pondURL("/tags/" + tagID)); + return new Promise((resolve, reject) => { + del(pondURL("/tags/" + tagID)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const getTag = (tagID: string) => { - return get(pondURL("/tags/" + tagID)); + return new Promise((resolve, reject)=>{ + get(pondURL("/tags/" + tagID)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; // const listTags = () => { @@ -76,7 +101,14 @@ export default function TagProvider(props: PropsWithChildren) { (keys ? "&keys=" + keys.toString() : "") + (types ? "&types=" + types.toString() : "") ); - return get(url); + return new Promise>((resolve, reject) => { + get(url).then(resp => { + resp.data = pond.ListTagsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return ( diff --git a/src/providers/pond/teamAPI.tsx b/src/providers/pond/teamAPI.tsx index e17e31b..d0b2f1b 100644 --- a/src/providers/pond/teamAPI.tsx +++ b/src/providers/pond/teamAPI.tsx @@ -44,7 +44,14 @@ export default function TeamProvider(props: PropsWithChildren) { //const [{ team }] = useGlobalState(); const addTeam = (team: pond.TeamSettings) => { - return post(pondURL("/team"), team); + return new Promise>((resolve, reject) => { + post(pondURL("/team"), team).then(resp => { + resp.data = pond.AddTeamResponse.fromObject(resp.data) + resolve(resp) + }).catch(err => { + reject(err) + }) + }) }; const getTeam = (id: string, scope?: Scope): Promise => { @@ -60,14 +67,28 @@ export default function TeamProvider(props: PropsWithChildren) { }; const removeTeam = (key: string) => { - return del(pondURL("/teams/" + key)); + return new Promise>((resolve, reject) => { + del(pondURL("/teams/" + key)).then(resp => { + resp.data = pond.RemoveTeamResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updateTeam = (key: string, team: pond.TeamSettings, asRoot?: boolean) => { - return put( - pondURL("/teams/" + key + (asRoot ? "?asRoot=" + asRoot.toString() : "")), - team - ); + return new Promise>((resolve, reject) => { + put( + pondURL("/teams/" + key + (asRoot ? "?asRoot=" + asRoot.toString() : "")), + team + ).then(resp => { + resp.data = pond.UpdateTeamResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const updatePreferences = ( @@ -76,7 +97,13 @@ export default function TeamProvider(props: PropsWithChildren) { // keys?: string[], // types?: string[] ) => { - return put(pondURL("/teams/" + key + "/preferences"), preferences); + return new Promise((resolve, reject) => { + put(pondURL("/teams/" + key + "/preferences"), preferences).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listTeams = ( @@ -89,32 +116,49 @@ export default function TeamProvider(props: PropsWithChildren) { as?: string ) => { //let asText = team ? "&as=" + team.key() : ""; - return get( - pondURL( - "/teams" + - "?limit=" + - limit + - "&offset=" + - offset + - ("&order=" + or(order, "asc")) + - ("&by=" + or(orderBy, "key")) + - (search ? "&search=" + search : "") + - (asRoot ? "&asRoot=" + asRoot.toString() : "") + - (as ? "&as=" + as : "") - ) - ); + let url = pondURL( + "/teams" + + "?limit=" + + limit + + "&offset=" + + offset + + ("&order=" + or(order, "asc")) + + ("&by=" + or(orderBy, "key")) + + (search ? "&search=" + search : "") + + (asRoot ? "&asRoot=" + asRoot.toString() : "") + + (as ? "&as=" + as : "") + ) + return new Promise>((resolve, reject)=>{ + get(url).then(resp => { + resp.data = pond.ListTeamsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listAllTeams = () => { - //let asText = team ? "&as=" + team.key() : ""; - return get(pondURL("/allTeams")); + return new Promise>((resolve, reject) => { + get(pondURL("/allTeams")).then(resp => { + resp.data = pond.ListTeamsResponse.fromObject(resp.data) + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; const listObjectTeams = (scope: Scope, as?: string) => { - if (as) { - return get(pondURL(`/${scope.kind}s/${scope.key}/teams?as=${as}`)); - } - return get(pondURL("/" + scope.kind + "s/" + scope.key + "/teams")); + let url = "/" + scope.kind + "s/" + scope.key + "/teams" + if (as) url = `/${scope.kind}s/${scope.key}/teams?as=${as}` + return new Promise((resolve, reject) => { + get(pondURL(url)).then(resp => { + return resolve(resp) + }).catch(err => { + return reject(err) + }) + }) }; return (