@seamapi/react 1.35.0 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/elements.js +3880 -3856
- package/dist/elements.js.map +1 -1
- package/lib/seam/SeamProvider.js +16 -12
- package/lib/seam/SeamProvider.js.map +1 -1
- package/lib/seam/access-codes/use-create-access-code.js +3 -4
- package/lib/seam/access-codes/use-create-access-code.js.map +1 -1
- package/lib/seam/connect-webviews/use-create-connect-webview.js +3 -4
- package/lib/seam/connect-webviews/use-create-connect-webview.js.map +1 -1
- package/lib/seam/devices/use-toggle-lock.js +3 -4
- package/lib/seam/devices/use-toggle-lock.js.map +1 -1
- package/lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.d.ts +5 -0
- package/lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js +29 -0
- package/lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js.map +1 -0
- package/lib/seam/use-seam-client.d.ts +3 -0
- package/lib/seam/use-seam-client.js +12 -0
- package/lib/seam/use-seam-client.js.map +1 -1
- package/lib/ui/RadioField/RadioField.d.ts +1 -1
- package/lib/ui/RadioField/RadioField.js +2 -2
- package/lib/ui/RadioField/RadioField.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +2 -2
- package/src/elements.ts +1 -1
- package/src/lib/seam/SeamProvider.tsx +27 -16
- package/src/lib/seam/access-codes/use-create-access-code.ts +2 -5
- package/src/lib/seam/connect-webviews/use-create-connect-webview.ts +2 -5
- package/src/lib/seam/devices/use-toggle-lock.ts +2 -5
- package/src/lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.ts +53 -0
- package/src/lib/seam/use-seam-client.ts +15 -0
- package/src/lib/ui/RadioField/RadioField.tsx +6 -5
- package/src/lib/version.ts +1 -1
package/lib/seam/SeamProvider.js
CHANGED
|
@@ -63,11 +63,7 @@ const createSeamContextValue = (options) => {
|
|
|
63
63
|
const defaultSeamContextValue = createDefaultSeamContextValue();
|
|
64
64
|
export const seamContext = createContext(defaultSeamContextValue);
|
|
65
65
|
export function useSeamContext() {
|
|
66
|
-
|
|
67
|
-
if (context == null) {
|
|
68
|
-
throw new Error('useSeamContext must be used inside a <SeamProvider/>');
|
|
69
|
-
}
|
|
70
|
-
return context;
|
|
66
|
+
return useContext(seamContext);
|
|
71
67
|
}
|
|
72
68
|
const isSeamProviderPropsWithClient = (props) => {
|
|
73
69
|
if (!('client' in props))
|
|
@@ -75,8 +71,9 @@ const isSeamProviderPropsWithClient = (props) => {
|
|
|
75
71
|
const { client } = props;
|
|
76
72
|
if (client == null)
|
|
77
73
|
return false;
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
const otherNonNullProps = Object.values(props).filter((v) => v != null);
|
|
75
|
+
if (otherNonNullProps.length > 0) {
|
|
76
|
+
throw new InvalidSeamProviderProps(`The client prop cannot be used with ${otherNonNullProps.join(' or ')}.`);
|
|
80
77
|
}
|
|
81
78
|
return true;
|
|
82
79
|
};
|
|
@@ -87,10 +84,10 @@ const isSeamProviderPropsWithPublishableKey = (props) => {
|
|
|
87
84
|
if (publishableKey == null)
|
|
88
85
|
return false;
|
|
89
86
|
if ('client' in props && props.client != null) {
|
|
90
|
-
throw new
|
|
87
|
+
throw new InvalidSeamProviderProps('The client prop cannot be used with the publishableKey prop.');
|
|
91
88
|
}
|
|
92
89
|
if ('clientSessionToken' in props && props.clientSessionToken != null) {
|
|
93
|
-
throw new
|
|
90
|
+
throw new InvalidSeamProviderProps('The clientSessionToken prop cannot be used with the publishableKey prop.');
|
|
94
91
|
}
|
|
95
92
|
return true;
|
|
96
93
|
};
|
|
@@ -101,14 +98,21 @@ const isSeamProviderPropsWithClientSessionToken = (props) => {
|
|
|
101
98
|
if (clientSessionToken == null)
|
|
102
99
|
return false;
|
|
103
100
|
if ('client' in props && props.client != null) {
|
|
104
|
-
throw new
|
|
101
|
+
throw new InvalidSeamProviderProps('The client prop cannot be used with the clientSessionToken prop.');
|
|
105
102
|
}
|
|
106
103
|
if ('publishableKey' in props && props.publishableKey != null) {
|
|
107
|
-
throw new
|
|
104
|
+
throw new InvalidSeamProviderProps('The publishableKey prop cannot be used with the clientSessionToken prop.');
|
|
108
105
|
}
|
|
109
106
|
if ('userIdentifierKey' in props && props.userIdentifierKey != null) {
|
|
110
|
-
throw new
|
|
107
|
+
throw new InvalidSeamProviderProps('The userIdentifierKey prop cannot be used with the clientSessionToken prop.');
|
|
111
108
|
}
|
|
112
109
|
return true;
|
|
113
110
|
};
|
|
111
|
+
class InvalidSeamProviderProps extends Error {
|
|
112
|
+
constructor(message) {
|
|
113
|
+
super(`SeamProvider received invalid props: ${message}`);
|
|
114
|
+
this.name = this.constructor.name;
|
|
115
|
+
Error.captureStackTrace(this, this.constructor);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
114
118
|
//# sourceMappingURL=SeamProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeamProvider.js","sourceRoot":"","sources":["../../src/lib/seam/SeamProvider.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SeamProvider.js","sourceRoot":"","sources":["../../src/lib/seam/SeamProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { useMutation, useQueryClient, } from '@tanstack/react-query';
|
|
2
|
-
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
2
|
+
import { NullSeamClientError, useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
3
|
export function useCreateAccessCode() {
|
|
4
4
|
const { client } = useSeamClient();
|
|
5
5
|
const queryClient = useQueryClient();
|
|
6
6
|
return useMutation({
|
|
7
7
|
mutationFn: async (mutationParams) => {
|
|
8
|
-
if (client === null)
|
|
9
|
-
throw new
|
|
10
|
-
}
|
|
8
|
+
if (client === null)
|
|
9
|
+
throw new NullSeamClientError();
|
|
11
10
|
return await client.accessCodes.create(mutationParams);
|
|
12
11
|
},
|
|
13
12
|
onSuccess: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-create-access-code.js","sourceRoot":"","sources":["../../../src/lib/seam/access-codes/use-create-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"use-create-access-code.js","sourceRoot":"","sources":["../../../src/lib/seam/access-codes/use-create-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAMhF,MAAM,UAAU,mBAAmB;IAKjC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,cAAiD,EAAE,EAAE;YACtE,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACxD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,KAAK,WAAW,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9D,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { useMutation } from '@tanstack/react-query';
|
|
2
|
-
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
2
|
+
import { NullSeamClientError, useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
3
|
export function useCreateConnectWebview({ willNavigateToWebview = false, } = {}) {
|
|
4
4
|
const { client } = useSeamClient();
|
|
5
5
|
return useMutation({
|
|
6
6
|
mutationFn: async (mutationParams) => {
|
|
7
|
-
if (client
|
|
8
|
-
throw new
|
|
9
|
-
}
|
|
7
|
+
if (client === null)
|
|
8
|
+
throw new NullSeamClientError();
|
|
10
9
|
return await client.connectWebviews.create(mutationParams);
|
|
11
10
|
},
|
|
12
11
|
onSuccess: ({ url }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-create-connect-webview.js","sourceRoot":"","sources":["../../../src/lib/seam/connect-webviews/use-create-connect-webview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"use-create-connect-webview.js","sourceRoot":"","sources":["../../../src/lib/seam/connect-webviews/use-create-connect-webview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAShF,MAAM,UAAU,uBAAuB,CAAC,EACtC,qBAAqB,GAAG,KAAK,MACI,EAAE;IAKnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAElC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EACf,cAAqD,EACrD,EAAE;YACF,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QAC5D,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YACrB,IAAI,qBAAqB,IAAI,GAAG,IAAI,IAAI,EAAE;gBACxC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAA;aAC/B;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { useMutation, useQueryClient, } from '@tanstack/react-query';
|
|
2
2
|
import { isLockDevice, } from 'seamapi';
|
|
3
|
-
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
|
+
import { NullSeamClientError, useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
4
4
|
export function useToggleLock({ device_id: deviceId, properties: { locked }, }) {
|
|
5
5
|
const { client } = useSeamClient();
|
|
6
6
|
const queryClient = useQueryClient();
|
|
7
7
|
return useMutation({
|
|
8
8
|
mutationFn: async () => {
|
|
9
|
-
if (client
|
|
10
|
-
throw new
|
|
11
|
-
}
|
|
9
|
+
if (client === null)
|
|
10
|
+
throw new NullSeamClientError();
|
|
12
11
|
const toggle = locked ? client.locks.unlockDoor : client.locks.lockDoor;
|
|
13
12
|
return await toggle(deviceId);
|
|
14
13
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-toggle-lock.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-toggle-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAGL,YAAY,GAGb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"use-toggle-lock.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-toggle-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAGL,YAAY,GAGb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhF,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EAAE,QAAQ,EACnB,UAAU,EAAE,EAAE,MAAM,EAAE,GACX;IAKX,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAA8C;QAC9D,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAA;YACvE,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EACvB,CAAC,OAAO,EAAE,EAAE;gBACV,IAAI,OAAO,IAAI,IAAI,EAAE;oBACnB,OAAM;iBACP;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAA;oBAC9C,IAAI,QAAQ,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;wBACpC,OAAO;4BACL,GAAG,MAAM;4BACT,UAAU,EAAE;gCACV,GAAG,MAAM,CAAC,UAAU;gCACpB,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;6BAClC;yBACF,CAAA;qBACF;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAC3C,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE;oBAClB,OAAM;iBACP;gBAED,OAAO;oBACL,GAAG,MAAM;oBACT,UAAU,EAAE;wBACV,GAAG,MAAM,CAAC,UAAU;wBACpB,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM;qBAClC;iBACF,CAAA;YACH,CAAC,CACF,CAAA;QACH,CAAC;QACD,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,MAAM,WAAW,CAAC,iBAAiB,CAAC;gBAClC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;aAC9B,CAAC,CAAA;YACF,MAAM,WAAW,CAAC,iBAAiB,CAAC;gBAClC,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;aACtD,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ClimateSettingSchedule, ClimateSettingSchedulesListRequest } from 'seamapi';
|
|
2
|
+
import type { UseSeamQueryResult } from '../../../../lib/seam/use-seam-query-result.js';
|
|
3
|
+
export type UseClimateSettingSchedulesParams = ClimateSettingSchedulesListRequest;
|
|
4
|
+
export type UseClimateSettingSchedulesData = ClimateSettingSchedule[];
|
|
5
|
+
export declare function useClimateSettingSchedules(params: UseClimateSettingSchedulesParams): UseSeamQueryResult<'climateSettingSchedules', UseClimateSettingSchedulesData>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { useSeamClient } from '../../../../lib/seam/use-seam-client.js';
|
|
3
|
+
export function useClimateSettingSchedules(params) {
|
|
4
|
+
const { client } = useSeamClient();
|
|
5
|
+
const queryClient = useQueryClient();
|
|
6
|
+
const { data, ...rest } = useQuery({
|
|
7
|
+
enabled: client != null,
|
|
8
|
+
queryKey: ['thermostats', 'climate_setting_schedules', 'list', params],
|
|
9
|
+
queryFn: async () => {
|
|
10
|
+
if (client == null)
|
|
11
|
+
return [];
|
|
12
|
+
return await client.thermostats.climateSettingSchedules.list(params);
|
|
13
|
+
},
|
|
14
|
+
onSuccess: (schedules) => {
|
|
15
|
+
// Prime cache for each schedule.
|
|
16
|
+
for (const schedule of schedules) {
|
|
17
|
+
queryClient.setQueryData([
|
|
18
|
+
'climate_setting_schedules',
|
|
19
|
+
'get',
|
|
20
|
+
{
|
|
21
|
+
climate_setting_schedule_id: schedule.climate_setting_schedule_id,
|
|
22
|
+
},
|
|
23
|
+
], schedule);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
return { ...rest, climateSettingSchedules: data };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=use-climate-setting-schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-climate-setting-schedules.js","sourceRoot":"","sources":["../../../../src/lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQhE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAO3D,MAAM,UAAU,0BAA0B,CACxC,MAAwC;IAKxC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,aAAa,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,CAAC;QACtE,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC7B,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtE,CAAC;QACD,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;YACvB,iCAAiC;YACjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAChC,WAAW,CAAC,YAAY,CACtB;oBACE,2BAA2B;oBAC3B,KAAK;oBACL;wBACE,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B;qBAClE;iBACF,EACD,QAAQ,CACT,CAAA;aACF;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAA;AACnD,CAAC"}
|
|
@@ -47,6 +47,18 @@ export function useSeamClient() {
|
|
|
47
47
|
});
|
|
48
48
|
return { client: data ?? null, isLoading, isError, error };
|
|
49
49
|
}
|
|
50
|
+
export class NullSeamClientError extends Error {
|
|
51
|
+
constructor() {
|
|
52
|
+
super([
|
|
53
|
+
'Attempted to use a null Seam client.',
|
|
54
|
+
'Either a hook using useSeamClient was called outside of a SeamProvider,',
|
|
55
|
+
'or there was an error when creating the Seam client in useSeamClient,',
|
|
56
|
+
'or useSeamClient is still loading the client.',
|
|
57
|
+
].join(' '));
|
|
58
|
+
this.name = this.constructor.name;
|
|
59
|
+
Error.captureStackTrace(this, this.constructor);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
50
62
|
function useUserIdentifierKeyOrFingerprint(userIdentifierKey) {
|
|
51
63
|
useEffect(() => {
|
|
52
64
|
if (userIdentifierKey != null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-seam-client.js","sourceRoot":"","sources":["../../src/lib/seam/use-seam-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,MAAM,UAAU,aAAa;IAM3B,MAAM,EACJ,MAAM,EACN,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,GAAG,OAAO,EACX,GAAG,cAAc,EAAE,CAAA;IACpB,MAAM,iBAAiB,GAAG,iCAAiC,CACzD,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAC5D,CAAA;IAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAO;QACzD,QAAQ,EAAE;YACR,QAAQ;YACR;gBACE,MAAM;gBACN,aAAa;gBACb,cAAc;gBACd,iBAAiB;gBACjB,kBAAkB;aACnB;SACF;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAA;YAEjC,IAAI,kBAAkB,IAAI,IAAI,EAAE;gBAC9B,OAAO,IAAI,IAAI,CAAC;oBACd,GAAG,aAAa;oBAChB,MAAM,EAAE,SAAS;oBACjB,kBAAkB;iBACnB,CAAC,CAAA;aACH;YAED,IAAI,cAAc,IAAI,IAAI,EAAE;gBAC1B,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAA;aACF;YAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC;gBAC3C,GAAG,aAAa;gBAChB,cAAc;gBACd,iBAAiB;aAClB,CAAC,CAAA;YAEF,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI,EAAE;gBAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;aACrD;YAED,OAAO,IAAI,IAAI,CAAC;gBACd,GAAG,aAAa;gBAChB,MAAM,EAAE,SAAS;gBACjB,kBAAkB,EAAE,GAAG,CAAC,cAAc,CAAC,KAAK;aAC7C,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC5D,CAAC;AAED,SAAS,iCAAiC,CACxC,iBAAqC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB,IAAI,IAAI;YAAE,OAAM;QACrC,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC;;8GAE6F,CAAC,CAAA;IAC7G,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,IAAI,iBAAiB,IAAI,IAAI,EAAE;QAC7B,OAAO,iBAAiB,CAAA;KACzB;IAED,MAAM,WAAW,GACf,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC;QAC1D,eAAe,MAAM,EAAE,EAAE,CAAA;IAE3B,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAA;IAEvE,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"use-seam-client.js","sourceRoot":"","sources":["../../src/lib/seam/use-seam-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ interface RadioOption<Value> {
|
|
|
9
9
|
label: string;
|
|
10
10
|
value: Value;
|
|
11
11
|
}
|
|
12
|
-
type RadioFieldContext<Value extends string> = Omit<RadioFieldProps<Value>, 'options'> |
|
|
12
|
+
type RadioFieldContext<Value extends string> = Omit<RadioFieldProps<Value>, 'options'> | null;
|
|
13
13
|
export declare function RadioField<Value extends string>({ value, onChange, name, options, }: RadioFieldProps<Value>): JSX.Element;
|
|
14
14
|
export declare function useRadioField<Value extends string>(): NonNullable<RadioFieldContext<Value>>;
|
|
15
15
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useContext } from 'react';
|
|
3
3
|
import { Radio } from '../../../lib/ui/RadioField/Radio.js';
|
|
4
|
-
const radioFieldContext = createContext(
|
|
4
|
+
const radioFieldContext = createContext(null);
|
|
5
5
|
export function RadioField({ value, onChange, name, options, }) {
|
|
6
6
|
const { Provider } = radioFieldContext;
|
|
7
7
|
return (_jsx(Provider, { value: {
|
|
@@ -12,7 +12,7 @@ export function RadioField({ value, onChange, name, options, }) {
|
|
|
12
12
|
}
|
|
13
13
|
export function useRadioField() {
|
|
14
14
|
const context = useContext(radioFieldContext);
|
|
15
|
-
if (context ===
|
|
15
|
+
if (context === null) {
|
|
16
16
|
throw new Error('useRadioField must be used within a <RadioField/>');
|
|
17
17
|
}
|
|
18
18
|
return context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioField.js","sourceRoot":"","sources":["../../../src/lib/ui/RadioField/RadioField.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"RadioField.js","sourceRoot":"","sources":["../../../src/lib/ui/RadioField/RadioField.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAmBlD,MAAM,iBAAiB,GAAG,aAAa,CAAyB,IAAI,CAAC,CAAA;AAErE,MAAM,UAAU,UAAU,CAAuB,EAC/C,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,OAAO,GACgB;IACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAA;IACtC,OAAO,CACL,KAAC,QAAQ,IACP,KAAK,EAAE;YACL,KAAK;YACL,QAAQ;YACR,IAAI;SACL,YAED,cAAK,SAAS,EAAC,kBAAkB,YAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CACxC,KAAC,KAAK,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAO,KAAK,CAAI,CAClD,CAAC,GACE,GACG,CACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAG3B,MAAM,OAAO,GAAG,UAAU,CAA2B,iBAAiB,CAAC,CAAA;IACvE,IAAI,OAAO,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;KACrE;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiReactVersion = "1.
|
|
1
|
+
declare const seamapiReactVersion = "1.36.0";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seamapi/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.36.0",
|
|
4
4
|
"description": "Seam Components.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
"eslint-config-standard": "^17.1.0",
|
|
160
160
|
"eslint-config-standard-jsx": "^11.0.0",
|
|
161
161
|
"eslint-config-standard-react": "^13.0.0",
|
|
162
|
-
"eslint-config-standard-with-typescript": "^
|
|
162
|
+
"eslint-config-standard-with-typescript": "^37.0.0",
|
|
163
163
|
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
164
164
|
"eslint-plugin-storybook": "^0.6.11",
|
|
165
165
|
"eslint-plugin-unused-imports": "^2.0.0",
|
package/src/elements.ts
CHANGED
|
@@ -14,7 +14,7 @@ for (const key of Object.keys(elementDefinitions)) {
|
|
|
14
14
|
const elementDefinition = elementDefinitions[key]
|
|
15
15
|
|
|
16
16
|
if (elementDefinition == null) {
|
|
17
|
-
throw new Error(`Missing element
|
|
17
|
+
throw new Error(`Missing element definition for ${key}`)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const { name, Component, props } = elementDefinition
|
|
@@ -150,13 +150,7 @@ const defaultSeamContextValue = createDefaultSeamContextValue()
|
|
|
150
150
|
export const seamContext = createContext<SeamContext>(defaultSeamContextValue)
|
|
151
151
|
|
|
152
152
|
export function useSeamContext(): SeamContext {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (context == null) {
|
|
156
|
-
throw new Error('useSeamContext must be used inside a <SeamProvider/>')
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return context
|
|
153
|
+
return useContext(seamContext)
|
|
160
154
|
}
|
|
161
155
|
|
|
162
156
|
const isSeamProviderPropsWithClient = (
|
|
@@ -167,8 +161,11 @@ const isSeamProviderPropsWithClient = (
|
|
|
167
161
|
const { client } = props
|
|
168
162
|
if (client == null) return false
|
|
169
163
|
|
|
170
|
-
|
|
171
|
-
|
|
164
|
+
const otherNonNullProps = Object.values(props).filter((v) => v != null)
|
|
165
|
+
if (otherNonNullProps.length > 0) {
|
|
166
|
+
throw new InvalidSeamProviderProps(
|
|
167
|
+
`The client prop cannot be used with ${otherNonNullProps.join(' or ')}.`
|
|
168
|
+
)
|
|
172
169
|
}
|
|
173
170
|
|
|
174
171
|
return true
|
|
@@ -183,12 +180,14 @@ const isSeamProviderPropsWithPublishableKey = (
|
|
|
183
180
|
if (publishableKey == null) return false
|
|
184
181
|
|
|
185
182
|
if ('client' in props && props.client != null) {
|
|
186
|
-
throw new
|
|
183
|
+
throw new InvalidSeamProviderProps(
|
|
184
|
+
'The client prop cannot be used with the publishableKey prop.'
|
|
185
|
+
)
|
|
187
186
|
}
|
|
188
187
|
|
|
189
188
|
if ('clientSessionToken' in props && props.clientSessionToken != null) {
|
|
190
|
-
throw new
|
|
191
|
-
'
|
|
189
|
+
throw new InvalidSeamProviderProps(
|
|
190
|
+
'The clientSessionToken prop cannot be used with the publishableKey prop.'
|
|
192
191
|
)
|
|
193
192
|
}
|
|
194
193
|
|
|
@@ -205,18 +204,30 @@ const isSeamProviderPropsWithClientSessionToken = (
|
|
|
205
204
|
if (clientSessionToken == null) return false
|
|
206
205
|
|
|
207
206
|
if ('client' in props && props.client != null) {
|
|
208
|
-
throw new
|
|
207
|
+
throw new InvalidSeamProviderProps(
|
|
208
|
+
'The client prop cannot be used with the clientSessionToken prop.'
|
|
209
|
+
)
|
|
209
210
|
}
|
|
210
211
|
|
|
211
212
|
if ('publishableKey' in props && props.publishableKey != null) {
|
|
212
|
-
throw new
|
|
213
|
-
'
|
|
213
|
+
throw new InvalidSeamProviderProps(
|
|
214
|
+
'The publishableKey prop cannot be used with the clientSessionToken prop.'
|
|
214
215
|
)
|
|
215
216
|
}
|
|
216
217
|
|
|
217
218
|
if ('userIdentifierKey' in props && props.userIdentifierKey != null) {
|
|
218
|
-
throw new
|
|
219
|
+
throw new InvalidSeamProviderProps(
|
|
220
|
+
'The userIdentifierKey prop cannot be used with the clientSessionToken prop.'
|
|
221
|
+
)
|
|
219
222
|
}
|
|
220
223
|
|
|
221
224
|
return true
|
|
222
225
|
}
|
|
226
|
+
|
|
227
|
+
class InvalidSeamProviderProps extends Error {
|
|
228
|
+
constructor(message: string) {
|
|
229
|
+
super(`SeamProvider received invalid props: ${message}`)
|
|
230
|
+
this.name = this.constructor.name
|
|
231
|
+
Error.captureStackTrace(this, this.constructor)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -10,7 +10,7 @@ import type {
|
|
|
10
10
|
SeamError,
|
|
11
11
|
} from 'seamapi'
|
|
12
12
|
|
|
13
|
-
import { useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
13
|
+
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
14
14
|
|
|
15
15
|
export type UseCreateAccessCodeParams = never
|
|
16
16
|
export type UseCreateAccessCodeData = AccessCode
|
|
@@ -30,10 +30,7 @@ export function useCreateAccessCode(): UseMutationResult<
|
|
|
30
30
|
AccessCodeCreateRequest
|
|
31
31
|
>({
|
|
32
32
|
mutationFn: async (mutationParams: UseCreateAccessCodeMutationParams) => {
|
|
33
|
-
if (client === null)
|
|
34
|
-
throw new Error('Missing seam client')
|
|
35
|
-
}
|
|
36
|
-
|
|
33
|
+
if (client === null) throw new NullSeamClientError()
|
|
37
34
|
return await client.accessCodes.create(mutationParams)
|
|
38
35
|
},
|
|
39
36
|
onSuccess: () => {
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
SeamError,
|
|
7
7
|
} from 'seamapi'
|
|
8
8
|
|
|
9
|
-
import { useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
9
|
+
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
10
10
|
|
|
11
11
|
export interface UseCreateConnectWebviewParams {
|
|
12
12
|
willNavigateToWebview?: boolean
|
|
@@ -32,10 +32,7 @@ export function useCreateConnectWebview({
|
|
|
32
32
|
mutationFn: async (
|
|
33
33
|
mutationParams: UseCreateConnectWebviewMutationParams
|
|
34
34
|
) => {
|
|
35
|
-
if (client
|
|
36
|
-
throw new Error('Missing seam client')
|
|
37
|
-
}
|
|
38
|
-
|
|
35
|
+
if (client === null) throw new NullSeamClientError()
|
|
39
36
|
return await client.connectWebviews.create(mutationParams)
|
|
40
37
|
},
|
|
41
38
|
onSuccess: ({ url }) => {
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
type SeamError,
|
|
12
12
|
} from 'seamapi'
|
|
13
13
|
|
|
14
|
-
import { useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
14
|
+
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
15
15
|
|
|
16
16
|
export function useToggleLock({
|
|
17
17
|
device_id: deviceId,
|
|
@@ -26,10 +26,7 @@ export function useToggleLock({
|
|
|
26
26
|
|
|
27
27
|
return useMutation<{ actionAttempt: ActionAttempt }, SeamError>({
|
|
28
28
|
mutationFn: async () => {
|
|
29
|
-
if (client
|
|
30
|
-
throw new Error('Missing seam client')
|
|
31
|
-
}
|
|
32
|
-
|
|
29
|
+
if (client === null) throw new NullSeamClientError()
|
|
33
30
|
const toggle = locked ? client.locks.unlockDoor : client.locks.lockDoor
|
|
34
31
|
return await toggle(deviceId)
|
|
35
32
|
},
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
|
2
|
+
import type {
|
|
3
|
+
ClimateSettingSchedule,
|
|
4
|
+
ClimateSettingSchedulesListRequest,
|
|
5
|
+
ClimateSettingSchedulesListResponse,
|
|
6
|
+
SeamError,
|
|
7
|
+
} from 'seamapi'
|
|
8
|
+
|
|
9
|
+
import { useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
10
|
+
import type { UseSeamQueryResult } from 'lib/seam/use-seam-query-result.js'
|
|
11
|
+
|
|
12
|
+
export type UseClimateSettingSchedulesParams =
|
|
13
|
+
ClimateSettingSchedulesListRequest
|
|
14
|
+
export type UseClimateSettingSchedulesData = ClimateSettingSchedule[]
|
|
15
|
+
|
|
16
|
+
export function useClimateSettingSchedules(
|
|
17
|
+
params: UseClimateSettingSchedulesParams
|
|
18
|
+
): UseSeamQueryResult<
|
|
19
|
+
'climateSettingSchedules',
|
|
20
|
+
UseClimateSettingSchedulesData
|
|
21
|
+
> {
|
|
22
|
+
const { client } = useSeamClient()
|
|
23
|
+
const queryClient = useQueryClient()
|
|
24
|
+
|
|
25
|
+
const { data, ...rest } = useQuery<
|
|
26
|
+
ClimateSettingSchedulesListResponse['climate_setting_schedules'],
|
|
27
|
+
SeamError
|
|
28
|
+
>({
|
|
29
|
+
enabled: client != null,
|
|
30
|
+
queryKey: ['thermostats', 'climate_setting_schedules', 'list', params],
|
|
31
|
+
queryFn: async () => {
|
|
32
|
+
if (client == null) return []
|
|
33
|
+
return await client.thermostats.climateSettingSchedules.list(params)
|
|
34
|
+
},
|
|
35
|
+
onSuccess: (schedules) => {
|
|
36
|
+
// Prime cache for each schedule.
|
|
37
|
+
for (const schedule of schedules) {
|
|
38
|
+
queryClient.setQueryData(
|
|
39
|
+
[
|
|
40
|
+
'climate_setting_schedules',
|
|
41
|
+
'get',
|
|
42
|
+
{
|
|
43
|
+
climate_setting_schedule_id: schedule.climate_setting_schedule_id,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
schedule
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
return { ...rest, climateSettingSchedules: data }
|
|
53
|
+
}
|
|
@@ -71,6 +71,21 @@ export function useSeamClient(): {
|
|
|
71
71
|
return { client: data ?? null, isLoading, isError, error }
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
export class NullSeamClientError extends Error {
|
|
75
|
+
constructor() {
|
|
76
|
+
super(
|
|
77
|
+
[
|
|
78
|
+
'Attempted to use a null Seam client.',
|
|
79
|
+
'Either a hook using useSeamClient was called outside of a SeamProvider,',
|
|
80
|
+
'or there was an error when creating the Seam client in useSeamClient,',
|
|
81
|
+
'or useSeamClient is still loading the client.',
|
|
82
|
+
].join(' ')
|
|
83
|
+
)
|
|
84
|
+
this.name = this.constructor.name
|
|
85
|
+
Error.captureStackTrace(this, this.constructor)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
74
89
|
function useUserIdentifierKeyOrFingerprint(
|
|
75
90
|
userIdentifierKey: string | undefined
|
|
76
91
|
): string {
|
|
@@ -14,11 +14,12 @@ interface RadioOption<Value> {
|
|
|
14
14
|
value: Value
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
type RadioFieldContext<Value extends string> =
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
type RadioFieldContext<Value extends string> = Omit<
|
|
18
|
+
RadioFieldProps<Value>,
|
|
19
|
+
'options'
|
|
20
|
+
> | null
|
|
20
21
|
|
|
21
|
-
const radioFieldContext = createContext<RadioFieldContext<any>>(
|
|
22
|
+
const radioFieldContext = createContext<RadioFieldContext<any>>(null)
|
|
22
23
|
|
|
23
24
|
export function RadioField<Value extends string>({
|
|
24
25
|
value,
|
|
@@ -48,7 +49,7 @@ export function useRadioField<Value extends string>(): NonNullable<
|
|
|
48
49
|
RadioFieldContext<Value>
|
|
49
50
|
> {
|
|
50
51
|
const context = useContext<RadioFieldContext<Value>>(radioFieldContext)
|
|
51
|
-
if (context ===
|
|
52
|
+
if (context === null) {
|
|
52
53
|
throw new Error('useRadioField must be used within a <RadioField/>')
|
|
53
54
|
}
|
|
54
55
|
return context
|
package/src/lib/version.ts
CHANGED