Skip to content

Commit 55c18ce

Browse files
committed
Update mutation hooks to use useSeamMutation
1 parent 7f56456 commit 55c18ce

12 files changed

+91
-208
lines changed

src/lib/seam/access-codes/use-delete-access-code.ts

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,25 @@
1-
import type {
2-
AccessCodesDeleteParameters,
3-
SeamHttpApiError,
4-
} from '@seamapi/http/connect'
1+
import type { AccessCodesDeleteParameters } from '@seamapi/http/connect'
52
import type { AccessCode } from '@seamapi/types/connect'
6-
import {
7-
useMutation,
8-
type UseMutationResult,
9-
useQueryClient,
10-
} from '@tanstack/react-query'
3+
import { useQueryClient } from '@tanstack/react-query'
114

12-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
5+
import {
6+
useSeamMutation,
7+
type UseSeamMutationResult,
8+
} from '../use-seam-mutation.js'
139

1410
export type UseDeleteAccessCodeParams = never
1511

1612
export type UseDeleteAccessCodeData = undefined
1713

1814
export type UseDeleteAccessCodeMutationVariables = AccessCodesDeleteParameters
1915

20-
export function useDeleteAccessCode(): UseMutationResult<
21-
UseDeleteAccessCodeData,
22-
SeamHttpApiError,
23-
UseDeleteAccessCodeMutationVariables
24-
> {
25-
const { client } = useSeamClient()
16+
export function useDeleteAccessCode(): UseSeamMutationResult<'/access_codes/delete'> {
2617
const queryClient = useQueryClient()
2718

28-
return useMutation<
29-
UseDeleteAccessCodeData,
30-
SeamHttpApiError,
31-
UseDeleteAccessCodeMutationVariables
32-
>({
33-
mutationFn: async (variables) => {
34-
if (client === null) throw new NullSeamClientError()
35-
await client.accessCodes.delete(variables)
36-
},
19+
return useSeamMutation('/access_codes/delete', {
3720
onSuccess: (_data, variables) => {
21+
if (variables == null) return
22+
3823
void queryClient.invalidateQueries({
3924
queryKey: [
4025
'access_codes',

src/lib/seam/access-codes/use-update-access-code.ts

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import type {
2-
AccessCodesUpdateParameters,
3-
SeamHttpApiError,
4-
} from '@seamapi/http/connect'
1+
import type { AccessCodesUpdateParameters } from '@seamapi/http/connect'
52
import type { AccessCode } from '@seamapi/types/connect'
6-
import {
7-
useMutation,
8-
type UseMutationResult,
9-
useQueryClient,
10-
} from '@tanstack/react-query'
3+
import { useQueryClient } from '@tanstack/react-query'
114

12-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
5+
import {
6+
useSeamMutation,
7+
type UseSeamMutationResult,
8+
} from '../use-seam-mutation.js'
139

1410
export type UseUpdateAccessCodeParams = never
1511

@@ -26,24 +22,13 @@ export type UseUpdateAccessCodeMutationVariables = Pick<
2622
| 'type'
2723
>
2824

29-
export function useUpdateAccessCode(): UseMutationResult<
30-
UseUpdateAccessCodeData,
31-
SeamHttpApiError,
32-
UseUpdateAccessCodeMutationVariables
33-
> {
34-
const { client } = useSeamClient()
25+
export function useUpdateAccessCode(): UseSeamMutationResult<'/access_codes/update'> {
3526
const queryClient = useQueryClient()
3627

37-
return useMutation<
38-
UseUpdateAccessCodeData,
39-
SeamHttpApiError,
40-
UseUpdateAccessCodeMutationVariables
41-
>({
42-
mutationFn: async (variables) => {
43-
if (client === null) throw new NullSeamClientError()
44-
await client.accessCodes.update(variables)
45-
},
28+
return useSeamMutation('/access_codes/update', {
4629
onSuccess: (_data, variables) => {
30+
if (variables == null) return
31+
4732
queryClient.setQueryData<AccessCode | null>(
4833
['access_codes', 'get', { access_code_id: variables.access_code_id }],
4934
(accessCode) => {

src/lib/seam/connect-webviews/use-create-connect-webview.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export interface UseCreateConnectWebviewParams {
1414

1515
export type UseCreateConnectWebviewData = ConnectWebview
1616

17-
export type UseCreateConnectWebviewMutationVariables = ConnectWebviewsCreateParameters
17+
export type UseCreateConnectWebviewMutationVariables =
18+
ConnectWebviewsCreateParameters
1819

1920
export function useCreateConnectWebview({
2021
willNavigateToWebview = false,

src/lib/seam/devices/use-device.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import type { DevicesGetParameters, SeamHttpApiError } from '@seamapi/http/connect'
1+
import type {
2+
DevicesGetParameters,
3+
SeamHttpApiError,
4+
} from '@seamapi/http/connect'
25
import type { Device } from '@seamapi/types/connect'
36
import { useQuery } from '@tanstack/react-query'
47

src/lib/seam/devices/use-devices.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import type { DevicesListParameters, SeamHttpApiError } from '@seamapi/http/connect'
1+
import type {
2+
DevicesListParameters,
3+
SeamHttpApiError,
4+
} from '@seamapi/http/connect'
25
import type { Device } from '@seamapi/types/connect'
36
import { useQuery, useQueryClient } from '@tanstack/react-query'
47

src/lib/seam/devices/use-update-device-name.ts

Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import type {
2-
DevicesUpdateParameters,
3-
SeamHttpApiError,
4-
} from '@seamapi/http/connect'
1+
import type { DevicesUpdateParameters } from '@seamapi/http/connect'
52
import type { Device } from '@seamapi/types/connect'
6-
import {
7-
useMutation,
8-
type UseMutationResult,
9-
useQueryClient,
10-
} from '@tanstack/react-query'
3+
import { useQueryClient } from '@tanstack/react-query'
114

12-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
5+
import {
6+
useSeamMutation,
7+
type UseSeamMutationResult,
8+
} from '../use-seam-mutation.js'
139

1410
export type UseUpdateDeviceNameParams = never
1511

@@ -20,28 +16,15 @@ export type UseUpdateDeviceNameMutationVariables = Pick<
2016
'device_id' | 'name'
2117
>
2218

23-
type MutationError = SeamHttpApiError
24-
2519
export function useUpdateDeviceName(
2620
params: DevicesUpdateParameters
27-
): UseMutationResult<
28-
UseUpdateDeviceNameData,
29-
MutationError,
30-
UseUpdateDeviceNameMutationVariables
31-
> {
32-
const { client } = useSeamClient()
21+
): UseSeamMutationResult<'/devices/update'> {
3322
const queryClient = useQueryClient()
3423

35-
return useMutation<
36-
UseUpdateDeviceNameData,
37-
MutationError,
38-
UseUpdateDeviceNameMutationVariables
39-
>({
40-
mutationFn: async (variables) => {
41-
if (client === null) throw new NullSeamClientError()
42-
await client.devices.update(variables)
43-
},
24+
return useSeamMutation('/devices/update', {
4425
onSuccess: (_data, variables) => {
26+
if (variables == null) return
27+
4528
queryClient.setQueryData<Device | null>(
4629
['devices', 'get', params],
4730
(device) => {

src/lib/seam/events/use-events.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import type { EventsListParameters, SeamHttpApiError } from '@seamapi/http/connect'
1+
import type {
2+
EventsListParameters,
3+
SeamHttpApiError,
4+
} from '@seamapi/http/connect'
25
import type { SeamEvent } from '@seamapi/types/connect'
36
import { useQuery, useQueryClient } from '@tanstack/react-query'
47

src/lib/seam/thermostats/use-create-thermostat-climate-preset.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,30 @@
1-
import type {
2-
SeamHttpApiError,
3-
ThermostatsCreateClimatePresetBody,
4-
} from '@seamapi/http/connect'
5-
import {
6-
useMutation,
7-
type UseMutationResult,
8-
useQueryClient,
9-
} from '@tanstack/react-query'
1+
import type { ThermostatsCreateClimatePresetBody } from '@seamapi/http/connect'
2+
import { useQueryClient } from '@tanstack/react-query'
103

114
import type {
125
ThermostatClimatePreset,
136
ThermostatDevice,
147
} from 'lib/seam/thermostats/thermostat-device.js'
158
import { fahrenheitToCelsius } from 'lib/seam/thermostats/unit-conversion.js'
16-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
9+
10+
import {
11+
useSeamMutation,
12+
type UseSeamMutationResult,
13+
} from '../use-seam-mutation.js'
1714

1815
export type UseCreateThermostatClimatePresetParams = never
1916
export type UseCreateThermostatClimatePresetData = undefined
2017

2118
export type UseCreateThermostatClimatePresetVariables =
2219
ThermostatsCreateClimatePresetBody
2320

24-
export function useCreateThermostatClimatePreset(): UseMutationResult<
25-
UseCreateThermostatClimatePresetData,
26-
SeamHttpApiError,
27-
UseCreateThermostatClimatePresetVariables
28-
> {
29-
const { client } = useSeamClient()
21+
export function useCreateThermostatClimatePreset(): UseSeamMutationResult<'/thermostats/create_climate_preset'> {
3022
const queryClient = useQueryClient()
3123

32-
return useMutation<
33-
UseCreateThermostatClimatePresetData,
34-
SeamHttpApiError,
35-
UseCreateThermostatClimatePresetVariables
36-
>({
37-
mutationFn: async (variables) => {
38-
if (client === null) throw new NullSeamClientError()
39-
await client.thermostats.createClimatePreset(variables)
40-
},
24+
return useSeamMutation('/thermostats/create_climate_preset', {
4125
onSuccess: (_data, variables) => {
26+
if (variables == null) return
27+
4228
queryClient.setQueryData<ThermostatDevice | null>(
4329
['devices', 'get', { device_id: variables.device_id }],
4430
(device) => {

src/lib/seam/thermostats/use-delete-thermostat-climate-preset.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
import type {
2-
SeamHttpApiError,
3-
ThermostatsDeleteClimatePresetParams,
4-
} from '@seamapi/http/connect'
5-
import {
6-
useMutation,
7-
type UseMutationResult,
8-
useQueryClient,
9-
} from '@tanstack/react-query'
1+
import type { ThermostatsDeleteClimatePresetParams } from '@seamapi/http/connect'
2+
import { useQueryClient } from '@tanstack/react-query'
103

114
import type { ThermostatDevice } from 'lib/seam/thermostats/thermostat-device.js'
12-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
5+
6+
import {
7+
useSeamMutation,
8+
type UseSeamMutationResult,
9+
} from '../use-seam-mutation.js'
1310

1411
export type UseDeleteThermostatClimatePresetParams = never
1512

@@ -18,24 +15,13 @@ export type UseDeleteThermostatClimatePresetData = undefined
1815
export type UseDeleteThermostatClimatePresetVariables =
1916
ThermostatsDeleteClimatePresetParams
2017

21-
export function useDeleteThermostatClimatePreset(): UseMutationResult<
22-
UseDeleteThermostatClimatePresetData,
23-
SeamHttpApiError,
24-
UseDeleteThermostatClimatePresetVariables
25-
> {
26-
const { client } = useSeamClient()
18+
export function useDeleteThermostatClimatePreset(): UseSeamMutationResult<'/thermostats/delete_climate_preset'> {
2719
const queryClient = useQueryClient()
2820

29-
return useMutation<
30-
UseDeleteThermostatClimatePresetData,
31-
SeamHttpApiError,
32-
UseDeleteThermostatClimatePresetVariables
33-
>({
34-
mutationFn: async (variables) => {
35-
if (client === null) throw new NullSeamClientError()
36-
await client.thermostats.deleteClimatePreset(variables)
37-
},
21+
return useSeamMutation('/thermostats/delete_climate_preset', {
3822
onSuccess: (_data, variables) => {
23+
if (variables == null) return
24+
3925
queryClient.setQueryData<ThermostatDevice | null>(
4026
['devices', 'get', { device_id: variables.device_id }],
4127
(device) => {

src/lib/seam/thermostats/use-heat-thermostat.ts

Lines changed: 12 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
1-
import type {
2-
SeamActionAttemptFailedError,
3-
SeamActionAttemptTimeoutError,
4-
SeamHttpApiError,
5-
ThermostatsHeatParameters,
6-
} from '@seamapi/http/connect'
7-
import type { ActionAttempt, Device } from '@seamapi/types/connect'
8-
import {
9-
useMutation,
10-
type UseMutationResult,
11-
useQueryClient,
12-
} from '@tanstack/react-query'
1+
import type { ThermostatsHeatParameters } from '@seamapi/http/connect'
2+
import type { Device } from '@seamapi/types/connect'
3+
import { useQueryClient } from '@tanstack/react-query'
134

145
import {
156
getHeatingSetPointCelsius,
167
getHeatingSetPointFahrenheit,
178
} from 'lib/seam/thermostats/unit-conversion.js'
18-
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
9+
10+
import {
11+
useSeamMutation,
12+
type UseSeamMutationResult,
13+
} from '../use-seam-mutation.js'
1914

2015
export type UseHeatThermostatParams = never
2116

@@ -26,34 +21,13 @@ export type UseHeatThermostatMutationVariables = Pick<
2621
'device_id' | 'heating_set_point_celsius' | 'heating_set_point_fahrenheit'
2722
>
2823

29-
type HeatThermostatActionAttempt = Extract<
30-
ActionAttempt,
31-
{ action_type: 'SET_HEAT' }
32-
>
33-
34-
type MutationError =
35-
| SeamHttpApiError
36-
| SeamActionAttemptFailedError<HeatThermostatActionAttempt>
37-
| SeamActionAttemptTimeoutError<HeatThermostatActionAttempt>
38-
39-
export function useHeatThermostat(): UseMutationResult<
40-
UseHeatThermostatData,
41-
MutationError,
42-
UseHeatThermostatMutationVariables
43-
> {
44-
const { client } = useSeamClient()
24+
export function useHeatThermostat(): UseSeamMutationResult<'/thermostats/heat'> {
4525
const queryClient = useQueryClient()
4626

47-
return useMutation<
48-
UseHeatThermostatData,
49-
MutationError,
50-
UseHeatThermostatMutationVariables
51-
>({
52-
mutationFn: async (variables) => {
53-
if (client === null) throw new NullSeamClientError()
54-
await client.thermostats.heat(variables)
55-
},
27+
return useSeamMutation('/thermostats/heat', {
5628
onSuccess: (_data, variables) => {
29+
if (variables == null) return
30+
5731
queryClient.setQueryData<Device | null>(
5832
['devices', 'get', { device_id: variables.device_id }],
5933
(device) => {

0 commit comments

Comments
 (0)