From 7f5645664f30c4c8dfbc60e7cdfa623466ccc1b4 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Fri, 27 Jun 2025 15:51:18 -0700 Subject: [PATCH 1/2] Replace use of deprecated types --- src/lib/seam/access-codes/use-access-code.ts | 4 ++-- src/lib/seam/access-codes/use-access-codes.ts | 4 ++-- src/lib/seam/access-codes/use-delete-access-code.ts | 4 ++-- src/lib/seam/access-codes/use-generate-access-code-code.ts | 4 ++-- src/lib/seam/access-codes/use-update-access-code.ts | 4 ++-- .../seam/connect-webviews/use-create-connect-webview.ts | 4 ++-- src/lib/seam/connected-accounts/use-connected-account.ts | 4 ++-- src/lib/seam/devices/use-device-providers.ts | 4 ++-- src/lib/seam/devices/use-device.ts | 4 ++-- src/lib/seam/devices/use-devices.ts | 4 ++-- src/lib/seam/devices/use-update-device-name.ts | 7 +++---- src/lib/seam/events/use-events.ts | 4 ++-- src/lib/seam/noise-sensors/use-noise-thresholds.ts | 4 ++-- src/lib/seam/thermostats/use-cool-thermostat.ts | 4 ++-- src/lib/seam/thermostats/use-heat-cool-thermostat.ts | 4 ++-- src/lib/seam/thermostats/use-heat-thermostat.ts | 4 ++-- src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts | 4 ++-- src/lib/seam/thermostats/use-set-thermostat-off.ts | 4 ++-- 18 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/lib/seam/access-codes/use-access-code.ts b/src/lib/seam/access-codes/use-access-code.ts index b1ee269ce..12a597f96 100644 --- a/src/lib/seam/access-codes/use-access-code.ts +++ b/src/lib/seam/access-codes/use-access-code.ts @@ -1,5 +1,5 @@ import type { - AccessCodesGetParams, + AccessCodesGetParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' @@ -8,7 +8,7 @@ import { useQuery } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseAccessCodeParams = AccessCodesGetParams +export type UseAccessCodeParams = AccessCodesGetParameters export type UseAccessCodeData = AccessCode | null diff --git a/src/lib/seam/access-codes/use-access-codes.ts b/src/lib/seam/access-codes/use-access-codes.ts index 8eafc2d6b..508518a00 100644 --- a/src/lib/seam/access-codes/use-access-codes.ts +++ b/src/lib/seam/access-codes/use-access-codes.ts @@ -1,5 +1,5 @@ import type { - AccessCodesListParams, + AccessCodesListParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' @@ -8,7 +8,7 @@ import { useQuery, useQueryClient } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseAccessCodesParams = AccessCodesListParams +export type UseAccessCodesParams = AccessCodesListParameters export type UseAccessCodesData = AccessCode[] diff --git a/src/lib/seam/access-codes/use-delete-access-code.ts b/src/lib/seam/access-codes/use-delete-access-code.ts index d9feaee3d..a87899961 100644 --- a/src/lib/seam/access-codes/use-delete-access-code.ts +++ b/src/lib/seam/access-codes/use-delete-access-code.ts @@ -1,5 +1,5 @@ import type { - AccessCodesDeleteParams, + AccessCodesDeleteParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' @@ -15,7 +15,7 @@ export type UseDeleteAccessCodeParams = never export type UseDeleteAccessCodeData = undefined -export type UseDeleteAccessCodeMutationVariables = AccessCodesDeleteParams +export type UseDeleteAccessCodeMutationVariables = AccessCodesDeleteParameters export function useDeleteAccessCode(): UseMutationResult< UseDeleteAccessCodeData, diff --git a/src/lib/seam/access-codes/use-generate-access-code-code.ts b/src/lib/seam/access-codes/use-generate-access-code-code.ts index 8ad7f5bce..47da1653f 100644 --- a/src/lib/seam/access-codes/use-generate-access-code-code.ts +++ b/src/lib/seam/access-codes/use-generate-access-code-code.ts @@ -1,5 +1,5 @@ import type { - AccessCodesGenerateCodeParams, + AccessCodesGenerateCodeParameters, SeamHttpApiError, } from '@seamapi/http/connect' import { useMutation, type UseMutationResult } from '@tanstack/react-query' @@ -11,7 +11,7 @@ export type UseGenerateAccessCodeCodeParams = never export type UseGenerateAccessCodeCodeData = string export type UseGenerateAccessCodeCodeMutationVariables = - AccessCodesGenerateCodeParams + AccessCodesGenerateCodeParameters export function useGenerateAccessCodeCode(): UseMutationResult< UseGenerateAccessCodeCodeData, diff --git a/src/lib/seam/access-codes/use-update-access-code.ts b/src/lib/seam/access-codes/use-update-access-code.ts index 4dbb2e270..80785553a 100644 --- a/src/lib/seam/access-codes/use-update-access-code.ts +++ b/src/lib/seam/access-codes/use-update-access-code.ts @@ -1,5 +1,5 @@ import type { - AccessCodesUpdateBody, + AccessCodesUpdateParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' @@ -16,7 +16,7 @@ export type UseUpdateAccessCodeParams = never export type UseUpdateAccessCodeData = undefined export type UseUpdateAccessCodeMutationVariables = Pick< - AccessCodesUpdateBody, + AccessCodesUpdateParameters, | 'device_id' | 'access_code_id' | 'code' diff --git a/src/lib/seam/connect-webviews/use-create-connect-webview.ts b/src/lib/seam/connect-webviews/use-create-connect-webview.ts index f4ee22101..3422324f5 100644 --- a/src/lib/seam/connect-webviews/use-create-connect-webview.ts +++ b/src/lib/seam/connect-webviews/use-create-connect-webview.ts @@ -1,5 +1,5 @@ import type { - ConnectWebviewsCreateBody, + ConnectWebviewsCreateParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { ConnectWebview } from '@seamapi/types/connect' @@ -14,7 +14,7 @@ export interface UseCreateConnectWebviewParams { export type UseCreateConnectWebviewData = ConnectWebview -export type UseCreateConnectWebviewMutationVariables = ConnectWebviewsCreateBody +export type UseCreateConnectWebviewMutationVariables = ConnectWebviewsCreateParameters export function useCreateConnectWebview({ willNavigateToWebview = false, diff --git a/src/lib/seam/connected-accounts/use-connected-account.ts b/src/lib/seam/connected-accounts/use-connected-account.ts index b617bb2de..4a912d9a1 100644 --- a/src/lib/seam/connected-accounts/use-connected-account.ts +++ b/src/lib/seam/connected-accounts/use-connected-account.ts @@ -1,5 +1,5 @@ import type { - ConnectedAccountsGetParams, + ConnectedAccountsGetParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { ConnectedAccount } from '@seamapi/types/connect' @@ -8,7 +8,7 @@ import { useQuery } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseConnectedAccountParams = ConnectedAccountsGetParams +export type UseConnectedAccountParams = ConnectedAccountsGetParameters export type UseConnectedAccountData = ConnectedAccount | null diff --git a/src/lib/seam/devices/use-device-providers.ts b/src/lib/seam/devices/use-device-providers.ts index 685005f30..a2cd17a43 100644 --- a/src/lib/seam/devices/use-device-providers.ts +++ b/src/lib/seam/devices/use-device-providers.ts @@ -1,5 +1,5 @@ import type { - DevicesListDeviceProvidersParams, + DevicesListDeviceProvidersParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { DeviceProvider } from '@seamapi/types/connect' @@ -8,7 +8,7 @@ import { useQuery } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseDeviceProvidersParams = DevicesListDeviceProvidersParams +export type UseDeviceProvidersParams = DevicesListDeviceProvidersParameters export type UseDeviceProvidersData = DeviceProvider[] diff --git a/src/lib/seam/devices/use-device.ts b/src/lib/seam/devices/use-device.ts index 70ac48307..ae91154e8 100644 --- a/src/lib/seam/devices/use-device.ts +++ b/src/lib/seam/devices/use-device.ts @@ -1,11 +1,11 @@ -import type { DevicesGetParams, SeamHttpApiError } from '@seamapi/http/connect' +import type { DevicesGetParameters, SeamHttpApiError } from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' import { useQuery } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseDeviceParams = DevicesGetParams +export type UseDeviceParams = DevicesGetParameters export type UseDeviceData = Device | null diff --git a/src/lib/seam/devices/use-devices.ts b/src/lib/seam/devices/use-devices.ts index 3392678f6..c463e5f1a 100644 --- a/src/lib/seam/devices/use-devices.ts +++ b/src/lib/seam/devices/use-devices.ts @@ -1,11 +1,11 @@ -import type { DevicesListParams, SeamHttpApiError } from '@seamapi/http/connect' +import type { DevicesListParameters, SeamHttpApiError } from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' import { useQuery, useQueryClient } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseDevicesParams = DevicesListParams +export type UseDevicesParams = DevicesListParameters export type UseDevicesData = Device[] diff --git a/src/lib/seam/devices/use-update-device-name.ts b/src/lib/seam/devices/use-update-device-name.ts index 8c7d03475..aceef1a20 100644 --- a/src/lib/seam/devices/use-update-device-name.ts +++ b/src/lib/seam/devices/use-update-device-name.ts @@ -1,6 +1,5 @@ import type { - DevicesGetParams, - DevicesUpdateBody, + DevicesUpdateParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' @@ -17,14 +16,14 @@ export type UseUpdateDeviceNameParams = never export type UseUpdateDeviceNameData = undefined export type UseUpdateDeviceNameMutationVariables = Pick< - DevicesUpdateBody, + DevicesUpdateParameters, 'device_id' | 'name' > type MutationError = SeamHttpApiError export function useUpdateDeviceName( - params: DevicesGetParams + params: DevicesUpdateParameters ): UseMutationResult< UseUpdateDeviceNameData, MutationError, diff --git a/src/lib/seam/events/use-events.ts b/src/lib/seam/events/use-events.ts index ed89b3b0a..657e41e61 100644 --- a/src/lib/seam/events/use-events.ts +++ b/src/lib/seam/events/use-events.ts @@ -1,11 +1,11 @@ -import type { EventsListParams, SeamHttpApiError } from '@seamapi/http/connect' +import type { EventsListParameters, SeamHttpApiError } from '@seamapi/http/connect' import type { SeamEvent } from '@seamapi/types/connect' import { useQuery, useQueryClient } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseEventsParams = EventsListParams +export type UseEventsParams = EventsListParameters export type UseEventsData = SeamEvent[] diff --git a/src/lib/seam/noise-sensors/use-noise-thresholds.ts b/src/lib/seam/noise-sensors/use-noise-thresholds.ts index e93fa4247..2a7bcd009 100644 --- a/src/lib/seam/noise-sensors/use-noise-thresholds.ts +++ b/src/lib/seam/noise-sensors/use-noise-thresholds.ts @@ -1,5 +1,5 @@ import type { - NoiseSensorsNoiseThresholdsListParams, + NoiseSensorsNoiseThresholdsListParameters, SeamHttpApiError, } from '@seamapi/http/connect' import type { NoiseThreshold } from '@seamapi/types/connect' @@ -8,7 +8,7 @@ import { useQuery, useQueryClient } from '@tanstack/react-query' import { useSeamClient } from 'lib/seam/use-seam-client.js' import type { UseSeamQueryResultLegacy } from 'lib/seam/use-seam-query-result.js' -export type UseNoiseThresholdsParams = NoiseSensorsNoiseThresholdsListParams +export type UseNoiseThresholdsParams = NoiseSensorsNoiseThresholdsListParameters export type UseNoiseThresholdsData = NoiseThreshold[] diff --git a/src/lib/seam/thermostats/use-cool-thermostat.ts b/src/lib/seam/thermostats/use-cool-thermostat.ts index 6c196d5d6..04ceeb376 100644 --- a/src/lib/seam/thermostats/use-cool-thermostat.ts +++ b/src/lib/seam/thermostats/use-cool-thermostat.ts @@ -2,7 +2,7 @@ import type { SeamActionAttemptFailedError, SeamActionAttemptTimeoutError, SeamHttpApiError, - ThermostatsCoolBody, + ThermostatsCoolParameters, } from '@seamapi/http/connect' import type { ActionAttempt, Device } from '@seamapi/types/connect' import { @@ -22,7 +22,7 @@ export type UseCoolThermostatParams = never export type UseCoolThermostatData = undefined export type UseCoolThermostatMutationVariables = Pick< - ThermostatsCoolBody, + ThermostatsCoolParameters, 'device_id' | 'cooling_set_point_celsius' | 'cooling_set_point_fahrenheit' > diff --git a/src/lib/seam/thermostats/use-heat-cool-thermostat.ts b/src/lib/seam/thermostats/use-heat-cool-thermostat.ts index 2c9cb6591..9b80f70bf 100644 --- a/src/lib/seam/thermostats/use-heat-cool-thermostat.ts +++ b/src/lib/seam/thermostats/use-heat-cool-thermostat.ts @@ -2,7 +2,7 @@ import type { SeamActionAttemptFailedError, SeamActionAttemptTimeoutError, SeamHttpApiError, - ThermostatsHeatCoolBody, + ThermostatsHeatCoolParameters, } from '@seamapi/http/connect' import type { ActionAttempt, Device } from '@seamapi/types/connect' import { @@ -24,7 +24,7 @@ export type UseHeatCoolThermostatParams = never export type UseHeatCoolThermostatData = undefined export type UseHeatCoolThermostatMutationVariables = Pick< - ThermostatsHeatCoolBody, + ThermostatsHeatCoolParameters, | 'device_id' | 'heating_set_point_celsius' | 'heating_set_point_fahrenheit' diff --git a/src/lib/seam/thermostats/use-heat-thermostat.ts b/src/lib/seam/thermostats/use-heat-thermostat.ts index 8e1fccef9..842e75dce 100644 --- a/src/lib/seam/thermostats/use-heat-thermostat.ts +++ b/src/lib/seam/thermostats/use-heat-thermostat.ts @@ -2,7 +2,7 @@ import type { SeamActionAttemptFailedError, SeamActionAttemptTimeoutError, SeamHttpApiError, - ThermostatsHeatBody, + ThermostatsHeatParameters, } from '@seamapi/http/connect' import type { ActionAttempt, Device } from '@seamapi/types/connect' import { @@ -22,7 +22,7 @@ export type UseHeatThermostatParams = never export type UseHeatThermostatData = undefined export type UseHeatThermostatMutationVariables = Pick< - ThermostatsHeatBody, + ThermostatsHeatParameters, 'device_id' | 'heating_set_point_celsius' | 'heating_set_point_fahrenheit' > diff --git a/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts b/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts index 7e3c70d29..d244c48cd 100644 --- a/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts +++ b/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts @@ -2,7 +2,7 @@ import type { SeamActionAttemptFailedError, SeamActionAttemptTimeoutError, SeamHttpApiError, - ThermostatsSetFanModeBody, + ThermostatsSetFanModeParameters, } from '@seamapi/http/connect' import type { ActionAttempt, Device } from '@seamapi/types/connect' import { @@ -17,7 +17,7 @@ export type UseSetThermostatFanModeParams = never export type UseSetThermostatFanModeData = undefined -export type UseSetThermostatFanModeMutationVariables = ThermostatsSetFanModeBody +export type UseSetThermostatFanModeMutationVariables = ThermostatsSetFanModeParameters type SetThermostatFanModeActionAttempt = Extract< ActionAttempt, diff --git a/src/lib/seam/thermostats/use-set-thermostat-off.ts b/src/lib/seam/thermostats/use-set-thermostat-off.ts index 7a36f7d9b..c4f735501 100644 --- a/src/lib/seam/thermostats/use-set-thermostat-off.ts +++ b/src/lib/seam/thermostats/use-set-thermostat-off.ts @@ -2,7 +2,7 @@ import type { SeamActionAttemptFailedError, SeamActionAttemptTimeoutError, SeamHttpApiError, - ThermostatsOffBody, + ThermostatsOffParameters, } from '@seamapi/http/connect' import type { ActionAttempt, Device } from '@seamapi/types/connect' import { @@ -17,7 +17,7 @@ export type UseSetThermostatOffParams = never export type UseSetThermostatOffData = undefined -export type UseSetThermostatOffMutationVariables = ThermostatsOffBody +export type UseSetThermostatOffMutationVariables = ThermostatsOffParameters type SetThermostatOffActionAttempt = Extract< ActionAttempt, From 55c18ce2681b72e6c4a79da875c37508a88e4ab5 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Fri, 27 Jun 2025 16:10:34 -0700 Subject: [PATCH 2/2] Update mutation hooks to use useSeamMutation --- .../access-codes/use-delete-access-code.ts | 35 ++++--------- .../access-codes/use-update-access-code.ts | 35 ++++--------- .../use-create-connect-webview.ts | 3 +- src/lib/seam/devices/use-device.ts | 5 +- src/lib/seam/devices/use-devices.ts | 5 +- .../seam/devices/use-update-device-name.ts | 37 ++++---------- src/lib/seam/events/use-events.ts | 5 +- .../use-create-thermostat-climate-preset.ts | 36 ++++--------- .../use-delete-thermostat-climate-preset.ts | 36 ++++--------- .../seam/thermostats/use-heat-thermostat.ts | 50 +++++-------------- .../use-set-thermostat-fan-mode.ts | 3 +- .../thermostats/use-set-thermostat-off.ts | 49 ++++-------------- 12 files changed, 91 insertions(+), 208 deletions(-) diff --git a/src/lib/seam/access-codes/use-delete-access-code.ts b/src/lib/seam/access-codes/use-delete-access-code.ts index a87899961..0cda9b531 100644 --- a/src/lib/seam/access-codes/use-delete-access-code.ts +++ b/src/lib/seam/access-codes/use-delete-access-code.ts @@ -1,15 +1,11 @@ -import type { - AccessCodesDeleteParameters, - SeamHttpApiError, -} from '@seamapi/http/connect' +import type { AccessCodesDeleteParameters } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import { useQueryClient } from '@tanstack/react-query' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseDeleteAccessCodeParams = never @@ -17,24 +13,13 @@ export type UseDeleteAccessCodeData = undefined export type UseDeleteAccessCodeMutationVariables = AccessCodesDeleteParameters -export function useDeleteAccessCode(): UseMutationResult< - UseDeleteAccessCodeData, - SeamHttpApiError, - UseDeleteAccessCodeMutationVariables -> { - const { client } = useSeamClient() +export function useDeleteAccessCode(): UseSeamMutationResult<'/access_codes/delete'> { const queryClient = useQueryClient() - return useMutation< - UseDeleteAccessCodeData, - SeamHttpApiError, - UseDeleteAccessCodeMutationVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.accessCodes.delete(variables) - }, + return useSeamMutation('/access_codes/delete', { onSuccess: (_data, variables) => { + if (variables == null) return + void queryClient.invalidateQueries({ queryKey: [ 'access_codes', diff --git a/src/lib/seam/access-codes/use-update-access-code.ts b/src/lib/seam/access-codes/use-update-access-code.ts index 80785553a..0b1719501 100644 --- a/src/lib/seam/access-codes/use-update-access-code.ts +++ b/src/lib/seam/access-codes/use-update-access-code.ts @@ -1,15 +1,11 @@ -import type { - AccessCodesUpdateParameters, - SeamHttpApiError, -} from '@seamapi/http/connect' +import type { AccessCodesUpdateParameters } from '@seamapi/http/connect' import type { AccessCode } from '@seamapi/types/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import { useQueryClient } from '@tanstack/react-query' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseUpdateAccessCodeParams = never @@ -26,24 +22,13 @@ export type UseUpdateAccessCodeMutationVariables = Pick< | 'type' > -export function useUpdateAccessCode(): UseMutationResult< - UseUpdateAccessCodeData, - SeamHttpApiError, - UseUpdateAccessCodeMutationVariables -> { - const { client } = useSeamClient() +export function useUpdateAccessCode(): UseSeamMutationResult<'/access_codes/update'> { const queryClient = useQueryClient() - return useMutation< - UseUpdateAccessCodeData, - SeamHttpApiError, - UseUpdateAccessCodeMutationVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.accessCodes.update(variables) - }, + return useSeamMutation('/access_codes/update', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['access_codes', 'get', { access_code_id: variables.access_code_id }], (accessCode) => { diff --git a/src/lib/seam/connect-webviews/use-create-connect-webview.ts b/src/lib/seam/connect-webviews/use-create-connect-webview.ts index 3422324f5..9f38c90f5 100644 --- a/src/lib/seam/connect-webviews/use-create-connect-webview.ts +++ b/src/lib/seam/connect-webviews/use-create-connect-webview.ts @@ -14,7 +14,8 @@ export interface UseCreateConnectWebviewParams { export type UseCreateConnectWebviewData = ConnectWebview -export type UseCreateConnectWebviewMutationVariables = ConnectWebviewsCreateParameters +export type UseCreateConnectWebviewMutationVariables = + ConnectWebviewsCreateParameters export function useCreateConnectWebview({ willNavigateToWebview = false, diff --git a/src/lib/seam/devices/use-device.ts b/src/lib/seam/devices/use-device.ts index ae91154e8..3d85ee5f9 100644 --- a/src/lib/seam/devices/use-device.ts +++ b/src/lib/seam/devices/use-device.ts @@ -1,4 +1,7 @@ -import type { DevicesGetParameters, SeamHttpApiError } from '@seamapi/http/connect' +import type { + DevicesGetParameters, + SeamHttpApiError, +} from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' import { useQuery } from '@tanstack/react-query' diff --git a/src/lib/seam/devices/use-devices.ts b/src/lib/seam/devices/use-devices.ts index c463e5f1a..8a9f77d75 100644 --- a/src/lib/seam/devices/use-devices.ts +++ b/src/lib/seam/devices/use-devices.ts @@ -1,4 +1,7 @@ -import type { DevicesListParameters, SeamHttpApiError } from '@seamapi/http/connect' +import type { + DevicesListParameters, + SeamHttpApiError, +} from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' import { useQuery, useQueryClient } from '@tanstack/react-query' diff --git a/src/lib/seam/devices/use-update-device-name.ts b/src/lib/seam/devices/use-update-device-name.ts index aceef1a20..92dff5cc6 100644 --- a/src/lib/seam/devices/use-update-device-name.ts +++ b/src/lib/seam/devices/use-update-device-name.ts @@ -1,15 +1,11 @@ -import type { - DevicesUpdateParameters, - SeamHttpApiError, -} from '@seamapi/http/connect' +import type { DevicesUpdateParameters } from '@seamapi/http/connect' import type { Device } from '@seamapi/types/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import { useQueryClient } from '@tanstack/react-query' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseUpdateDeviceNameParams = never @@ -20,28 +16,15 @@ export type UseUpdateDeviceNameMutationVariables = Pick< 'device_id' | 'name' > -type MutationError = SeamHttpApiError - export function useUpdateDeviceName( params: DevicesUpdateParameters -): UseMutationResult< - UseUpdateDeviceNameData, - MutationError, - UseUpdateDeviceNameMutationVariables -> { - const { client } = useSeamClient() +): UseSeamMutationResult<'/devices/update'> { const queryClient = useQueryClient() - return useMutation< - UseUpdateDeviceNameData, - MutationError, - UseUpdateDeviceNameMutationVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.devices.update(variables) - }, + return useSeamMutation('/devices/update', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['devices', 'get', params], (device) => { diff --git a/src/lib/seam/events/use-events.ts b/src/lib/seam/events/use-events.ts index 657e41e61..5452608ff 100644 --- a/src/lib/seam/events/use-events.ts +++ b/src/lib/seam/events/use-events.ts @@ -1,4 +1,7 @@ -import type { EventsListParameters, SeamHttpApiError } from '@seamapi/http/connect' +import type { + EventsListParameters, + SeamHttpApiError, +} from '@seamapi/http/connect' import type { SeamEvent } from '@seamapi/types/connect' import { useQuery, useQueryClient } from '@tanstack/react-query' diff --git a/src/lib/seam/thermostats/use-create-thermostat-climate-preset.ts b/src/lib/seam/thermostats/use-create-thermostat-climate-preset.ts index 12600dfd7..85c6290bc 100644 --- a/src/lib/seam/thermostats/use-create-thermostat-climate-preset.ts +++ b/src/lib/seam/thermostats/use-create-thermostat-climate-preset.ts @@ -1,19 +1,16 @@ -import type { - SeamHttpApiError, - ThermostatsCreateClimatePresetBody, -} from '@seamapi/http/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import type { ThermostatsCreateClimatePresetBody } from '@seamapi/http/connect' +import { useQueryClient } from '@tanstack/react-query' import type { ThermostatClimatePreset, ThermostatDevice, } from 'lib/seam/thermostats/thermostat-device.js' import { fahrenheitToCelsius } from 'lib/seam/thermostats/unit-conversion.js' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' + +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseCreateThermostatClimatePresetParams = never export type UseCreateThermostatClimatePresetData = undefined @@ -21,24 +18,13 @@ export type UseCreateThermostatClimatePresetData = undefined export type UseCreateThermostatClimatePresetVariables = ThermostatsCreateClimatePresetBody -export function useCreateThermostatClimatePreset(): UseMutationResult< - UseCreateThermostatClimatePresetData, - SeamHttpApiError, - UseCreateThermostatClimatePresetVariables -> { - const { client } = useSeamClient() +export function useCreateThermostatClimatePreset(): UseSeamMutationResult<'/thermostats/create_climate_preset'> { const queryClient = useQueryClient() - return useMutation< - UseCreateThermostatClimatePresetData, - SeamHttpApiError, - UseCreateThermostatClimatePresetVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.thermostats.createClimatePreset(variables) - }, + return useSeamMutation('/thermostats/create_climate_preset', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['devices', 'get', { device_id: variables.device_id }], (device) => { diff --git a/src/lib/seam/thermostats/use-delete-thermostat-climate-preset.ts b/src/lib/seam/thermostats/use-delete-thermostat-climate-preset.ts index 3af8315e1..aa7144317 100644 --- a/src/lib/seam/thermostats/use-delete-thermostat-climate-preset.ts +++ b/src/lib/seam/thermostats/use-delete-thermostat-climate-preset.ts @@ -1,15 +1,12 @@ -import type { - SeamHttpApiError, - ThermostatsDeleteClimatePresetParams, -} from '@seamapi/http/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import type { ThermostatsDeleteClimatePresetParams } from '@seamapi/http/connect' +import { useQueryClient } from '@tanstack/react-query' import type { ThermostatDevice } from 'lib/seam/thermostats/thermostat-device.js' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' + +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseDeleteThermostatClimatePresetParams = never @@ -18,24 +15,13 @@ export type UseDeleteThermostatClimatePresetData = undefined export type UseDeleteThermostatClimatePresetVariables = ThermostatsDeleteClimatePresetParams -export function useDeleteThermostatClimatePreset(): UseMutationResult< - UseDeleteThermostatClimatePresetData, - SeamHttpApiError, - UseDeleteThermostatClimatePresetVariables -> { - const { client } = useSeamClient() +export function useDeleteThermostatClimatePreset(): UseSeamMutationResult<'/thermostats/delete_climate_preset'> { const queryClient = useQueryClient() - return useMutation< - UseDeleteThermostatClimatePresetData, - SeamHttpApiError, - UseDeleteThermostatClimatePresetVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.thermostats.deleteClimatePreset(variables) - }, + return useSeamMutation('/thermostats/delete_climate_preset', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['devices', 'get', { device_id: variables.device_id }], (device) => { diff --git a/src/lib/seam/thermostats/use-heat-thermostat.ts b/src/lib/seam/thermostats/use-heat-thermostat.ts index 842e75dce..4b2bb114d 100644 --- a/src/lib/seam/thermostats/use-heat-thermostat.ts +++ b/src/lib/seam/thermostats/use-heat-thermostat.ts @@ -1,21 +1,16 @@ -import type { - SeamActionAttemptFailedError, - SeamActionAttemptTimeoutError, - SeamHttpApiError, - ThermostatsHeatParameters, -} from '@seamapi/http/connect' -import type { ActionAttempt, Device } from '@seamapi/types/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import type { ThermostatsHeatParameters } from '@seamapi/http/connect' +import type { Device } from '@seamapi/types/connect' +import { useQueryClient } from '@tanstack/react-query' import { getHeatingSetPointCelsius, getHeatingSetPointFahrenheit, } from 'lib/seam/thermostats/unit-conversion.js' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' + +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseHeatThermostatParams = never @@ -26,34 +21,13 @@ export type UseHeatThermostatMutationVariables = Pick< 'device_id' | 'heating_set_point_celsius' | 'heating_set_point_fahrenheit' > -type HeatThermostatActionAttempt = Extract< - ActionAttempt, - { action_type: 'SET_HEAT' } -> - -type MutationError = - | SeamHttpApiError - | SeamActionAttemptFailedError - | SeamActionAttemptTimeoutError - -export function useHeatThermostat(): UseMutationResult< - UseHeatThermostatData, - MutationError, - UseHeatThermostatMutationVariables -> { - const { client } = useSeamClient() +export function useHeatThermostat(): UseSeamMutationResult<'/thermostats/heat'> { const queryClient = useQueryClient() - return useMutation< - UseHeatThermostatData, - MutationError, - UseHeatThermostatMutationVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.thermostats.heat(variables) - }, + return useSeamMutation('/thermostats/heat', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['devices', 'get', { device_id: variables.device_id }], (device) => { diff --git a/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts b/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts index d244c48cd..440bcf989 100644 --- a/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts +++ b/src/lib/seam/thermostats/use-set-thermostat-fan-mode.ts @@ -17,7 +17,8 @@ export type UseSetThermostatFanModeParams = never export type UseSetThermostatFanModeData = undefined -export type UseSetThermostatFanModeMutationVariables = ThermostatsSetFanModeParameters +export type UseSetThermostatFanModeMutationVariables = + ThermostatsSetFanModeParameters type SetThermostatFanModeActionAttempt = Extract< ActionAttempt, diff --git a/src/lib/seam/thermostats/use-set-thermostat-off.ts b/src/lib/seam/thermostats/use-set-thermostat-off.ts index c4f735501..b1fa08982 100644 --- a/src/lib/seam/thermostats/use-set-thermostat-off.ts +++ b/src/lib/seam/thermostats/use-set-thermostat-off.ts @@ -1,17 +1,11 @@ -import type { - SeamActionAttemptFailedError, - SeamActionAttemptTimeoutError, - SeamHttpApiError, - ThermostatsOffParameters, -} from '@seamapi/http/connect' -import type { ActionAttempt, Device } from '@seamapi/types/connect' -import { - useMutation, - type UseMutationResult, - useQueryClient, -} from '@tanstack/react-query' +import type { ThermostatsOffParameters } from '@seamapi/http/connect' +import type { Device } from '@seamapi/types/connect' +import { useQueryClient } from '@tanstack/react-query' -import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js' +import { + useSeamMutation, + type UseSeamMutationResult, +} from '../use-seam-mutation.js' export type UseSetThermostatOffParams = never @@ -19,34 +13,13 @@ export type UseSetThermostatOffData = undefined export type UseSetThermostatOffMutationVariables = ThermostatsOffParameters -type SetThermostatOffActionAttempt = Extract< - ActionAttempt, - { action_type: 'SET_THERMOSTAT_OFF' } -> - -type MutationError = - | SeamHttpApiError - | SeamActionAttemptFailedError - | SeamActionAttemptTimeoutError - -export function useSetThermostatOff(): UseMutationResult< - UseSetThermostatOffData, - MutationError, - UseSetThermostatOffMutationVariables -> { - const { client } = useSeamClient() +export function useSetThermostatOff(): UseSeamMutationResult<'/thermostats/off'> { const queryClient = useQueryClient() - return useMutation< - UseSetThermostatOffData, - MutationError, - UseSetThermostatOffMutationVariables - >({ - mutationFn: async (variables) => { - if (client === null) throw new NullSeamClientError() - await client.thermostats.off(variables) - }, + return useSeamMutation('/thermostats/off', { onSuccess: (_data, variables) => { + if (variables == null) return + queryClient.setQueryData( ['devices', 'get', { device_id: variables.device_id }], (device) => {