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..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,40 +1,25 @@ -import type { - AccessCodesDeleteParams, - 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 export type UseDeleteAccessCodeData = undefined -export type UseDeleteAccessCodeMutationVariables = AccessCodesDeleteParams +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-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..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,22 +1,18 @@ -import type { - AccessCodesUpdateBody, - 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 export type UseUpdateAccessCodeData = undefined export type UseUpdateAccessCodeMutationVariables = Pick< - AccessCodesUpdateBody, + AccessCodesUpdateParameters, | 'device_id' | 'access_code_id' | 'code' @@ -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 f4ee22101..9f38c90f5 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,8 @@ 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..3d85ee5f9 100644 --- a/src/lib/seam/devices/use-device.ts +++ b/src/lib/seam/devices/use-device.ts @@ -1,11 +1,14 @@ -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..8a9f77d75 100644 --- a/src/lib/seam/devices/use-devices.ts +++ b/src/lib/seam/devices/use-devices.ts @@ -1,11 +1,14 @@ -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..92dff5cc6 100644 --- a/src/lib/seam/devices/use-update-device-name.ts +++ b/src/lib/seam/devices/use-update-device-name.ts @@ -1,48 +1,30 @@ -import type { - DevicesGetParams, - DevicesUpdateBody, - 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 export type UseUpdateDeviceNameData = undefined export type UseUpdateDeviceNameMutationVariables = Pick< - DevicesUpdateBody, + DevicesUpdateParameters, 'device_id' | 'name' > -type MutationError = SeamHttpApiError - export function useUpdateDeviceName( - params: DevicesGetParams -): UseMutationResult< - UseUpdateDeviceNameData, - MutationError, - UseUpdateDeviceNameMutationVariables -> { - const { client } = useSeamClient() + params: DevicesUpdateParameters +): 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 ed89b3b0a..5452608ff 100644 --- a/src/lib/seam/events/use-events.ts +++ b/src/lib/seam/events/use-events.ts @@ -1,11 +1,14 @@ -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-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-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..4b2bb114d 100644 --- a/src/lib/seam/thermostats/use-heat-thermostat.ts +++ b/src/lib/seam/thermostats/use-heat-thermostat.ts @@ -1,59 +1,33 @@ -import type { - SeamActionAttemptFailedError, - SeamActionAttemptTimeoutError, - SeamHttpApiError, - ThermostatsHeatBody, -} 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 export type UseHeatThermostatData = undefined export type UseHeatThermostatMutationVariables = Pick< - ThermostatsHeatBody, + ThermostatsHeatParameters, '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 7e3c70d29..440bcf989 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,8 @@ 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..b1fa08982 100644 --- a/src/lib/seam/thermostats/use-set-thermostat-off.ts +++ b/src/lib/seam/thermostats/use-set-thermostat-off.ts @@ -1,52 +1,25 @@ -import type { - SeamActionAttemptFailedError, - SeamActionAttemptTimeoutError, - SeamHttpApiError, - ThermostatsOffBody, -} 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 export type UseSetThermostatOffData = undefined -export type UseSetThermostatOffMutationVariables = ThermostatsOffBody - -type SetThermostatOffActionAttempt = Extract< - ActionAttempt, - { action_type: 'SET_THERMOSTAT_OFF' } -> +export type UseSetThermostatOffMutationVariables = ThermostatsOffParameters -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) => {