@seamapi/react 0.16.1 → 0.18.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.
Files changed (188) hide show
  1. package/README.md +28 -2
  2. package/index.css +294 -69
  3. package/index.css.map +1 -1
  4. package/index.min.css +1 -1
  5. package/index.min.css.map +1 -1
  6. package/lib/icons/LockLocked.d.ts +2 -0
  7. package/lib/icons/LockLocked.js +5 -0
  8. package/lib/icons/LockLocked.js.map +1 -0
  9. package/lib/icons/LockUnlocked.d.ts +2 -0
  10. package/lib/icons/LockUnlocked.js +5 -0
  11. package/lib/icons/LockUnlocked.js.map +1 -0
  12. package/lib/seam/access-codes/use-access-code.d.ts +4 -0
  13. package/lib/seam/access-codes/use-access-code.js +16 -0
  14. package/lib/seam/access-codes/use-access-code.js.map +1 -0
  15. package/lib/seam/access-codes/use-access-codes.d.ts +9 -0
  16. package/lib/seam/access-codes/use-access-codes.js +18 -0
  17. package/lib/seam/access-codes/use-access-codes.js.map +1 -0
  18. package/lib/seam/devices/types.d.ts +2 -0
  19. package/lib/seam/devices/types.js +2 -0
  20. package/lib/seam/devices/types.js.map +1 -0
  21. package/lib/seam/devices/use-device.d.ts +9 -0
  22. package/lib/seam/devices/use-device.js +56 -0
  23. package/lib/seam/devices/use-device.js.map +1 -0
  24. package/lib/seam/devices/use-devices.d.ts +4 -9
  25. package/lib/seam/devices/use-devices.js +2 -1
  26. package/lib/seam/devices/use-devices.js.map +1 -1
  27. package/lib/seam/index.d.ts +4 -1
  28. package/lib/seam/index.js +4 -1
  29. package/lib/seam/index.js.map +1 -1
  30. package/lib/seam/use-seam-client.js +3 -3
  31. package/lib/seam/use-seam-client.js.map +1 -1
  32. package/lib/seam/use-seam-query-result.js.map +1 -0
  33. package/lib/ui/AccessCodeDetails/AccessCodeDetails.d.ts +6 -0
  34. package/lib/ui/AccessCodeDetails/AccessCodeDetails.js +64 -0
  35. package/lib/ui/AccessCodeDetails/AccessCodeDetails.js.map +1 -0
  36. package/lib/ui/AccessCodeDetails/AccessCodeDevice.d.ts +5 -0
  37. package/lib/ui/AccessCodeDetails/AccessCodeDevice.js +23 -0
  38. package/lib/ui/AccessCodeDetails/AccessCodeDevice.js.map +1 -0
  39. package/lib/ui/AccessCodeTable/AccessCodeTable.d.ts +1 -1
  40. package/lib/ui/AccessCodeTable/AccessCodeTable.js +19 -5
  41. package/lib/ui/AccessCodeTable/AccessCodeTable.js.map +1 -1
  42. package/lib/ui/AccessCodeTable/AccessCodeTableContent.d.ts +1 -1
  43. package/lib/ui/AccessCodeTable/AccessCodeTableContent.js +7 -3
  44. package/lib/ui/AccessCodeTable/AccessCodeTableContent.js.map +1 -1
  45. package/lib/ui/AccessCodeTable/CodeDetails.js +1 -1
  46. package/lib/ui/AccessCodeTable/CodeDetails.js.map +1 -1
  47. package/lib/ui/Button.d.ts +8 -0
  48. package/lib/ui/Button.js +8 -0
  49. package/lib/ui/Button.js.map +1 -0
  50. package/lib/ui/DeviceDetails/DeviceDetails.d.ts +4 -3
  51. package/lib/ui/DeviceDetails/DeviceDetails.js +25 -9
  52. package/lib/ui/DeviceDetails/DeviceDetails.js.map +1 -1
  53. package/lib/ui/DeviceDetails/DeviceModel.d.ts +7 -0
  54. package/lib/ui/DeviceDetails/DeviceModel.js +18 -0
  55. package/lib/ui/DeviceDetails/DeviceModel.js.map +1 -0
  56. package/lib/ui/DeviceTable/DeviceTable.d.ts +7 -0
  57. package/lib/ui/DeviceTable/DeviceTable.js +49 -0
  58. package/lib/ui/DeviceTable/DeviceTable.js.map +1 -0
  59. package/lib/ui/IconButton.js +1 -1
  60. package/lib/ui/IconButton.js.map +1 -1
  61. package/lib/ui/Table/TableRow.d.ts +3 -1
  62. package/lib/ui/Table/TableRow.js +1 -1
  63. package/lib/ui/Table/TableRow.js.map +1 -1
  64. package/lib/ui/TextButton.d.ts +7 -0
  65. package/lib/ui/TextButton.js +5 -0
  66. package/lib/ui/TextButton.js.map +1 -0
  67. package/lib/ui/TextField/SearchTextField.d.ts +1 -1
  68. package/lib/ui/TextField/SearchTextField.js +1 -1
  69. package/lib/ui/TextField/SearchTextField.js.map +1 -1
  70. package/lib/ui/device/BatteryStatus.d.ts +5 -0
  71. package/lib/ui/{DeviceDetails → device}/BatteryStatus.js +5 -6
  72. package/lib/ui/device/BatteryStatus.js.map +1 -0
  73. package/lib/ui/{DeviceDetails → device}/DeviceImage.d.ts +2 -1
  74. package/lib/ui/{DeviceDetails → device}/DeviceImage.js +2 -2
  75. package/lib/ui/device/DeviceImage.js.map +1 -0
  76. package/lib/ui/device/LockStatus.d.ts +5 -0
  77. package/lib/ui/device/LockStatus.js +19 -0
  78. package/lib/ui/device/LockStatus.js.map +1 -0
  79. package/lib/ui/device/OnlineStatus.d.ts +5 -0
  80. package/lib/ui/{DeviceDetails → device}/OnlineStatus.js +4 -5
  81. package/lib/ui/device/OnlineStatus.js.map +1 -0
  82. package/lib/ui/index.d.ts +3 -1
  83. package/lib/ui/index.js +3 -1
  84. package/lib/ui/index.js.map +1 -1
  85. package/lib/ui/layout/ContentHeader.d.ts +2 -2
  86. package/lib/ui/layout/ContentHeader.js +5 -1
  87. package/lib/ui/layout/ContentHeader.js.map +1 -1
  88. package/package.json +4 -5
  89. package/src/icons/lock-locked.svg +8 -0
  90. package/src/icons/lock-unlocked.svg +9 -0
  91. package/src/lib/icons/LockLocked.tsx +32 -0
  92. package/src/lib/icons/LockUnlocked.tsx +34 -0
  93. package/src/lib/seam/access-codes/use-access-code.ts +24 -0
  94. package/src/lib/seam/access-codes/use-access-codes.ts +39 -0
  95. package/src/lib/seam/devices/types.ts +5 -0
  96. package/src/lib/seam/devices/use-device.ts +79 -0
  97. package/src/lib/seam/devices/use-devices.ts +13 -8
  98. package/src/lib/seam/index.ts +4 -1
  99. package/src/lib/seam/use-seam-client.ts +3 -3
  100. package/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx +154 -0
  101. package/src/lib/ui/AccessCodeDetails/AccessCodeDevice.tsx +49 -0
  102. package/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx +33 -12
  103. package/src/lib/ui/AccessCodeTable/AccessCodeTableContent.tsx +8 -11
  104. package/src/lib/ui/AccessCodeTable/CodeDetails.tsx +1 -1
  105. package/src/lib/ui/Button.tsx +26 -0
  106. package/src/lib/ui/DeviceDetails/DeviceDetails.tsx +49 -22
  107. package/src/lib/ui/DeviceDetails/DeviceModel.tsx +34 -0
  108. package/src/lib/ui/DeviceTable/DeviceTable.tsx +110 -0
  109. package/src/lib/ui/IconButton.tsx +1 -1
  110. package/src/lib/ui/Table/TableRow.tsx +8 -2
  111. package/src/lib/ui/TextButton.tsx +15 -0
  112. package/src/lib/ui/TextField/SearchTextField.tsx +1 -1
  113. package/src/lib/ui/{DeviceDetails → device}/BatteryStatus.tsx +12 -14
  114. package/src/lib/ui/device/DeviceImage.tsx +15 -0
  115. package/src/lib/ui/device/LockStatus.tsx +46 -0
  116. package/src/lib/ui/{DeviceDetails → device}/OnlineStatus.tsx +15 -11
  117. package/src/lib/ui/index.ts +3 -1
  118. package/src/lib/ui/layout/ContentHeader.tsx +9 -4
  119. package/src/styles/_access-code-details.scss +121 -0
  120. package/src/styles/_access-code-table.scss +34 -38
  121. package/src/styles/_buttons.scss +125 -8
  122. package/src/styles/_colors.scss +30 -0
  123. package/src/styles/_device-details.scss +21 -10
  124. package/src/styles/_device-table.scss +63 -0
  125. package/src/styles/_icons.scss +9 -0
  126. package/src/styles/_inputs.scss +3 -1
  127. package/src/styles/_layout.scss +5 -1
  128. package/src/styles/_main.scss +8 -14
  129. package/src/styles/_tables.scss +6 -0
  130. package/src/styles/_typography.scss +18 -2
  131. package/lib/hooks/use-access-codes.d.ts +0 -5
  132. package/lib/hooks/use-access-codes.js +0 -16
  133. package/lib/hooks/use-access-codes.js.map +0 -1
  134. package/lib/hooks/use-device.d.ts +0 -5
  135. package/lib/hooks/use-device.js +0 -17
  136. package/lib/hooks/use-device.js.map +0 -1
  137. package/lib/hooks/use-devices.d.ts +0 -1
  138. package/lib/hooks/use-devices.js +0 -2
  139. package/lib/hooks/use-devices.js.map +0 -1
  140. package/lib/hooks/use-seam-client.d.ts +0 -1
  141. package/lib/hooks/use-seam-client.js +0 -2
  142. package/lib/hooks/use-seam-client.js.map +0 -1
  143. package/lib/seam/devices/index.d.ts +0 -1
  144. package/lib/seam/devices/index.js +0 -2
  145. package/lib/seam/devices/index.js.map +0 -1
  146. package/lib/types/use-seam-query-result.js.map +0 -1
  147. package/lib/ui/AccessCodeTable/index.d.ts +0 -2
  148. package/lib/ui/AccessCodeTable/index.js +0 -3
  149. package/lib/ui/AccessCodeTable/index.js.map +0 -1
  150. package/lib/ui/DeviceDetails/BatteryStatus.d.ts +0 -4
  151. package/lib/ui/DeviceDetails/BatteryStatus.js.map +0 -1
  152. package/lib/ui/DeviceDetails/DeviceImage.js.map +0 -1
  153. package/lib/ui/DeviceDetails/ModelStatus.d.ts +0 -4
  154. package/lib/ui/DeviceDetails/ModelStatus.js +0 -13
  155. package/lib/ui/DeviceDetails/ModelStatus.js.map +0 -1
  156. package/lib/ui/DeviceDetails/OnlineStatus.d.ts +0 -4
  157. package/lib/ui/DeviceDetails/OnlineStatus.js.map +0 -1
  158. package/lib/ui/DeviceDetails/index.d.ts +0 -5
  159. package/lib/ui/DeviceDetails/index.js +0 -6
  160. package/lib/ui/DeviceDetails/index.js.map +0 -1
  161. package/lib/ui/DeviceManager/DeviceManager.d.ts +0 -6
  162. package/lib/ui/DeviceManager/DeviceManager.js +0 -24
  163. package/lib/ui/DeviceManager/DeviceManager.js.map +0 -1
  164. package/lib/ui/DeviceManager/index.d.ts +0 -1
  165. package/lib/ui/DeviceManager/index.js +0 -2
  166. package/lib/ui/DeviceManager/index.js.map +0 -1
  167. package/lib/ui/Table/index.d.ts +0 -5
  168. package/lib/ui/Table/index.js +0 -6
  169. package/lib/ui/Table/index.js.map +0 -1
  170. package/lib/ui/TextField/index.d.ts +0 -2
  171. package/lib/ui/TextField/index.js +0 -3
  172. package/lib/ui/TextField/index.js.map +0 -1
  173. package/src/lib/hooks/use-access-codes.ts +0 -21
  174. package/src/lib/hooks/use-device.ts +0 -26
  175. package/src/lib/hooks/use-devices.ts +0 -1
  176. package/src/lib/hooks/use-seam-client.ts +0 -1
  177. package/src/lib/seam/devices/index.ts +0 -1
  178. package/src/lib/ui/AccessCodeTable/index.ts +0 -2
  179. package/src/lib/ui/DeviceDetails/DeviceImage.tsx +0 -12
  180. package/src/lib/ui/DeviceDetails/ModelStatus.tsx +0 -25
  181. package/src/lib/ui/DeviceDetails/index.ts +0 -5
  182. package/src/lib/ui/DeviceManager/DeviceManager.tsx +0 -52
  183. package/src/lib/ui/DeviceManager/index.ts +0 -1
  184. package/src/lib/ui/Table/index.ts +0 -5
  185. package/src/lib/ui/TextField/index.ts +0 -2
  186. /package/lib/{types → seam}/use-seam-query-result.d.ts +0 -0
  187. /package/lib/{types → seam}/use-seam-query-result.js +0 -0
  188. /package/src/lib/{types → seam}/use-seam-query-result.ts +0 -0
@@ -0,0 +1,16 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
3
+ export function useAccessCode(params) {
4
+ const { client } = useSeamClient();
5
+ const normalizedParams = typeof params === 'string' ? { access_code_id: params } : params;
6
+ return useQuery({
7
+ enabled: client != null,
8
+ queryKey: ['access_code', 'get', normalizedParams],
9
+ queryFn: async () => {
10
+ if (client == null)
11
+ return null;
12
+ return await client?.accessCodes.get(normalizedParams);
13
+ },
14
+ });
15
+ }
16
+ //# sourceMappingURL=use-access-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-access-code.js","sourceRoot":"","sources":["../../../src/lib/seam/access-codes/use-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAK3D,MAAM,UAAU,aAAa,CAAC,MAA2B;IACvD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAElC,MAAM,gBAAgB,GACpB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAElE,OAAO,QAAQ,CAAC;QACd,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAClD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAE/B,OAAO,MAAM,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACxD,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AccessCode } from 'seamapi';
2
+ import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
3
+ export type UseAccessCodesParams = AccessCodesListRequest | string;
4
+ export type UseAccessCodesData = AccessCode[];
5
+ export declare function useAccessCodes(params: UseAccessCodesParams): UseSeamQueryResult<'accessCodes', UseAccessCodesData>;
6
+ interface AccessCodesListRequest {
7
+ device_id: string;
8
+ }
9
+ export {};
@@ -0,0 +1,18 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
3
+ export function useAccessCodes(params) {
4
+ const normalizedParams = typeof params === 'string' ? { device_id: params } : params;
5
+ const { client } = useSeamClient();
6
+ const { data, ...rest } = useQuery({
7
+ enabled: client != null,
8
+ queryKey: ['access_codes', 'list', normalizedParams],
9
+ queryFn: async () => {
10
+ if (client == null)
11
+ return [];
12
+ const accessCodes = await client?.accessCodes.list(normalizedParams);
13
+ return accessCodes.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
14
+ },
15
+ });
16
+ return { ...rest, accessCodes: data };
17
+ }
18
+ //# sourceMappingURL=use-access-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-access-codes.js","sourceRoot":"","sources":["../../../src/lib/seam/access-codes/use-access-codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,cAAc,CAC5B,MAA4B;IAE5B,MAAM,gBAAgB,GACpB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAE7D,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC;QACpD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC7B,MAAM,WAAW,GAAG,MAAM,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YACpE,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CACtE,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommonDeviceProperties, Device, LockDevice } from 'seamapi';
2
+ export declare const isLockDevice: (device: Device<CommonDeviceProperties, string> | LockDevice) => device is LockDevice;
@@ -0,0 +1,2 @@
1
+ export const isLockDevice = (device) => 'locked' in device.properties;
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAA2D,EACrC,EAAE,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { CommonDeviceProperties, Device, DeviceGetRequest, LockDevice } from 'seamapi';
2
+ import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
3
+ export type UseDeviceParams = DeviceGetRequest | string;
4
+ export type UseDeviceData = Device<CommonDeviceProperties> | null;
5
+ export declare function useDevice(params: DeviceGetRequest): UseSeamQueryResult<'device', UseDeviceData>;
6
+ export declare function useFakeDevice(_params: DeviceGetRequest): {
7
+ isLoading: boolean;
8
+ device: LockDevice;
9
+ };
@@ -0,0 +1,56 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
3
+ export function useDevice(params) {
4
+ const normalizedParams = typeof params === 'string' ? { device_id: params } : params;
5
+ const { client } = useSeamClient();
6
+ const { data, ...rest } = useQuery({
7
+ enabled: client != null,
8
+ queryKey: ['devices', 'get', normalizedParams],
9
+ queryFn: async () => {
10
+ if (client == null)
11
+ return null;
12
+ return await client?.devices.get(normalizedParams);
13
+ },
14
+ });
15
+ return { ...rest, device: data };
16
+ }
17
+ export function useFakeDevice(_params) {
18
+ const device = {
19
+ device_id: 'f9a9ab36-9e14-4390-a88c-b4c78304c6aa',
20
+ device_type: 'august_lock',
21
+ capabilities_supported: ['access_code', 'lock'],
22
+ properties: {
23
+ locked: true,
24
+ online: true,
25
+ door_open: false,
26
+ manufacturer: 'august',
27
+ battery_level: 0.9999532347993827,
28
+ serial_number: '00000004-992d-45a0-bea1-9128fdcd8d12',
29
+ august_metadata: {
30
+ lock_id: 'lock-1',
31
+ house_id: 'house-1',
32
+ lock_name: 'FRONT DOOR',
33
+ has_keypad: true,
34
+ house_name: 'My House',
35
+ },
36
+ supported_code_lengths: [6],
37
+ name: 'FRONT DOOR',
38
+ battery: {
39
+ level: 0.9999532347993827,
40
+ status: 'full',
41
+ },
42
+ image_url: 'https://connect.getseam.com/assets/images/devices/august_wifi-smart-lock-3rd-gen_silver_front.png',
43
+ },
44
+ location: {
45
+ timezone: 'America/Los_Angeles',
46
+ location_name: 'My House',
47
+ },
48
+ connected_account_id: '6fc0f854-cb5a-461a-af93-e543ce1f730f',
49
+ workspace_id: 'a9598de8-e627-4d01-b119-61ab7b9e07bd',
50
+ created_at: '2023-05-08T22:37:24.206Z',
51
+ errors: [],
52
+ warnings: [],
53
+ };
54
+ return { isLoading: false, device };
55
+ }
56
+ //# sourceMappingURL=use-device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-device.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAUhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,SAAS,CACvB,MAAwB;IAExB,MAAM,gBAAgB,GACpB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAE7D,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAC9C,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,MAAM,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACpD,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,MAAM,MAAM,GAAe;QACzB,SAAS,EAAE,sCAAsC;QACjD,WAAW,EAAE,aAAa;QAC1B,sBAAsB,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/C,UAAU,EAAE;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,QAAQ;YACtB,aAAa,EAAE,kBAAkB;YACjC,aAAa,EAAE,sCAAsC;YACrD,eAAe,EAAE;gBACf,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,YAAY;gBACvB,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,UAAU;aACvB;YACD,sBAAsB,EAAE,CAAC,CAAC,CAAC;YAC3B,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE;gBACP,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,MAAM;aACf;YACD,SAAS,EACP,mGAAmG;SACtG;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,qBAAqB;YAC/B,aAAa,EAAE,UAAU;SAC1B;QACD,oBAAoB,EAAE,sCAAsC;QAC5D,YAAY,EAAE,sCAAsC;QACpD,UAAU,EAAE,0BAA0B;QACtC,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACb,CAAA;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACrC,CAAC"}
@@ -1,10 +1,5 @@
1
- import { type UseQueryResult } from '@tanstack/react-query';
2
- import type { DevicesListRequest, DevicesListResponse, SeamError } from 'seamapi';
1
+ import type { CommonDeviceProperties, Device, DevicesListRequest } from 'seamapi';
2
+ import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
3
3
  export type UseDevicesParams = DevicesListRequest;
4
- export type UseDevicesData = DevicesListResponse['devices'];
5
- type Result = UseQueryResult<UseDevicesData, SeamError>;
6
- type UseDevicesResult = Omit<Result, 'data'> & {
7
- devices: Result['data'];
8
- };
9
- export declare function useDevices(params: DevicesListRequest): UseDevicesResult;
10
- export {};
4
+ export type UseDevicesData = Array<Device<CommonDeviceProperties>>;
5
+ export declare function useDevices(params?: UseDevicesParams): UseSeamQueryResult<'devices', UseDevicesData>;
@@ -8,7 +8,8 @@ export function useDevices(params) {
8
8
  queryFn: async () => {
9
9
  if (client == null)
10
10
  return [];
11
- return await client?.devices.list(params);
11
+ const devices = await client?.devices.list(params);
12
+ return devices.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
12
13
  },
13
14
  });
14
15
  return { ...rest, devices: data };
@@ -1 +1 @@
1
- {"version":3,"file":"use-devices.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-devices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,uBAAuB,CAAA;AAOrE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAS3D,MAAM,UAAU,UAAU,CAAC,MAA0B;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAChC;QACE,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QACrC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC7B,OAAO,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3C,CAAC;KACF,CACF,CAAA;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"use-devices.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-devices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAShD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,UAAU,CACxB,MAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAChC;QACE,OAAO,EAAE,MAAM,IAAI,IAAI;QACvB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QACrC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC7B,MAAM,OAAO,GAAG,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClD,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CACtE,CAAA;QACH,CAAC;KACF,CACF,CAAA;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC"}
@@ -1,2 +1,5 @@
1
- export * from './devices/index.js';
1
+ export * from './access-codes/use-access-code.js';
2
+ export * from './access-codes/use-access-codes.js';
3
+ export * from './devices/use-device.js';
4
+ export * from './devices/use-devices.js';
2
5
  export * from './use-seam-client.js';
package/lib/seam/index.js CHANGED
@@ -1,3 +1,6 @@
1
- export * from './devices/index.js';
1
+ export * from './access-codes/use-access-code.js';
2
+ export * from './access-codes/use-access-codes.js';
3
+ export * from './devices/use-device.js';
4
+ export * from './devices/use-devices.js';
2
5
  export * from './use-seam-client.js';
3
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/seam/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/seam/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA;AACjD,cAAc,oCAAoC,CAAA;AAClD,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA"}
@@ -57,9 +57,9 @@ This is not recommended because the client session is now bound to this machine
57
57
  if (userIdentifierKey != null) {
58
58
  return userIdentifierKey;
59
59
  }
60
- const fingerprintValue = globalThis?.localStorage?.getItem('seam_user_fingerprint') ??
60
+ const fingerprint = globalThis?.localStorage?.getItem('seam_user_fingerprint') ??
61
61
  `fingerprint_${uuidv4()}`;
62
- globalThis?.localStorage?.setItem('seam_user_fingerprint', fingerprintValue);
63
- return fingerprintValue;
62
+ globalThis?.localStorage?.setItem('seam_user_fingerprint', fingerprint);
63
+ return fingerprint;
64
64
  }
65
65
  //# sourceMappingURL=use-seam-client.js.map
@@ -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,qBAAqB,CAAA;AAEpD,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,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,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,gBAAgB,GACpB,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC;QAC1D,eAAe,MAAM,EAAE,EAAE,CAAA;IAE3B,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAA;IAE5E,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
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,qBAAqB,CAAA;AAEpD,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,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,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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-seam-query-result.js","sourceRoot":"","sources":["../../src/lib/seam/use-seam-query-result.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { AccessCode } from 'seamapi';
2
+ export interface AccessCodeDetailsProps {
3
+ accessCode: AccessCode;
4
+ onBack?: () => void;
5
+ }
6
+ export declare function AccessCodeDetails({ accessCode, onBack, }: AccessCodeDetailsProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DateTime } from 'luxon';
3
+ import { useState } from 'react';
4
+ import { AccessCodeDevice } from '../../../lib/ui/AccessCodeDetails/AccessCodeDevice.js';
5
+ import { DeviceDetails } from '../../../lib/ui/DeviceDetails/DeviceDetails.js';
6
+ import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
7
+ export function AccessCodeDetails({ accessCode, onBack, }) {
8
+ const name = accessCode.name ?? t.fallbackName;
9
+ const [selectedDevice, selectDevice] = useState(null);
10
+ if (selectedDevice) {
11
+ return (_jsx(DeviceDetails, { device: selectedDevice, onBack: () => {
12
+ selectDevice(null);
13
+ } }));
14
+ }
15
+ return (_jsxs("div", { className: 'seam-access-code-details', children: [_jsx(ContentHeader, { title: 'Access code', onBack: onBack }), _jsxs("div", { className: 'seam-summary', children: [_jsxs("div", { className: 'seam-top', children: [_jsx("span", { className: 'seam-label', children: t.accessCode }), _jsx("h5", { className: 'seam-access-code-name', children: name }), _jsx("div", { className: 'seam-code', children: accessCode.code }), _jsx("div", { className: 'seam-duration', children: _jsx(Duration, { accessCode: accessCode }) })] }), _jsx(AccessCodeDevice, { deviceId: accessCode.device_id, onSelectDevice: selectDevice })] }), _jsxs("div", { className: 'seam-details', children: [_jsxs("div", { className: 'seam-row', children: [_jsxs("div", { className: 'seam-heading', children: [t.id, ":"] }), _jsx("div", { className: 'seam-content', children: accessCode.access_code_id })] }), _jsxs("div", { className: 'seam-row', children: [_jsxs("div", { className: 'seam-heading', children: [t.created, ":"] }), _jsx("div", { className: 'seam-content', children: formatDate(accessCode.created_at) })] }), _jsxs("div", { className: 'seam-row seam-schedule', children: [_jsxs("div", { className: 'seam-heading', children: [t.timing, ":"] }), _jsx("div", { className: 'seam-content', children: _jsx(ScheduleInfo, { accessCode: accessCode }) })] })] })] }));
16
+ }
17
+ function ScheduleInfo({ accessCode }) {
18
+ if (accessCode.type === 'ongoing') {
19
+ return _jsx("span", { children: t.ongoing });
20
+ }
21
+ return (_jsxs("div", { className: 'seam-times', children: [_jsxs("div", { children: [_jsx("div", { className: 'seam-label', children: t.start }), _jsx("div", { className: 'seam-date', children: formatDate(accessCode.starts_at) }), _jsx("div", { className: 'seam-time', children: formatTime(accessCode.starts_at) })] }), _jsxs("div", { children: [_jsx("div", { className: 'seam-label', children: t.end }), _jsx("div", { className: 'seam-date', children: formatDate(accessCode.ends_at) }), _jsx("div", { className: 'seam-time', children: formatTime(accessCode.ends_at) })] })] }));
22
+ }
23
+ function Duration(props) {
24
+ const { accessCode } = props;
25
+ if (accessCode.type === 'ongoing') {
26
+ return (_jsxs("span", { children: [_jsx("span", { className: 'seam-label', children: "Active" }), " (ongoing)"] }));
27
+ }
28
+ const hasStarted = new Date(accessCode.starts_at).valueOf() < Date.now();
29
+ if (hasStarted) {
30
+ return (_jsxs("span", { children: [_jsx("span", { className: 'seam-label', children: "Active" }), " until", ' ', formatDurationDate(accessCode.ends_at), " at", ' ', formatTime(accessCode.ends_at)] }));
31
+ }
32
+ return (_jsxs("span", { children: ["Starts ", formatDurationDate(accessCode.starts_at), " as", ' ', formatTime(accessCode.starts_at)] }));
33
+ }
34
+ function formatDurationDate(date) {
35
+ return DateTime.fromISO(date).toLocaleString({
36
+ month: 'short',
37
+ day: 'numeric',
38
+ });
39
+ }
40
+ function formatTime(date) {
41
+ return DateTime.fromISO(date).toLocaleString({
42
+ hour: 'numeric',
43
+ minute: '2-digit',
44
+ });
45
+ }
46
+ function formatDate(date) {
47
+ return DateTime.fromISO(date).toLocaleString({
48
+ weekday: 'short',
49
+ month: 'long',
50
+ day: 'numeric',
51
+ year: 'numeric',
52
+ });
53
+ }
54
+ const t = {
55
+ accessCode: 'Access code',
56
+ fallbackName: 'Code',
57
+ id: 'ID',
58
+ created: 'Created',
59
+ timing: 'Timing',
60
+ ongoing: 'Ongoing',
61
+ start: 'Start',
62
+ end: 'End',
63
+ };
64
+ //# sourceMappingURL=AccessCodeDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessCodeDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CommonDeviceProperties, Device } from 'seamapi';
2
+ export declare function AccessCodeDevice({ deviceId, onSelectDevice, }: {
3
+ deviceId: string;
4
+ onSelectDevice: (device: Device<CommonDeviceProperties>) => void;
5
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isLockDevice } from '../../../lib/seam/devices/types.js';
3
+ import { useFakeDevice } from '../../../lib/seam/devices/use-device.js';
4
+ import { Button } from '../../../lib/ui/Button.js';
5
+ import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
6
+ import { getDeviceModel } from '../../../lib/ui/DeviceDetails/DeviceModel.js';
7
+ import { TextButton } from '../../../lib/ui/TextButton.js';
8
+ export function AccessCodeDevice({ deviceId, onSelectDevice, }) {
9
+ // TODO: Replace with `useDevice()` once ready
10
+ const { isLoading, device } = useFakeDevice({ device_id: deviceId });
11
+ // TODO: Do we want to return a skeleton loader here instead?
12
+ if (isLoading || !device || !isLockDevice(device)) {
13
+ return null;
14
+ }
15
+ const model = getDeviceModel(device);
16
+ return (_jsxs("div", { className: 'seam-access-code-device', children: [_jsx("div", { className: 'seam-device-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-body', children: [_jsx("div", { className: 'seam-model', children: model }), _jsx(TextButton, { onClick: () => {
17
+ onSelectDevice(device);
18
+ }, children: t.deviceDetails })] }), _jsx(Button, { children: "Unlock" })] }));
19
+ }
20
+ const t = {
21
+ deviceDetails: 'Device details',
22
+ };
23
+ //# sourceMappingURL=AccessCodeDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessCodeDevice.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeDetails/AccessCodeDevice.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,cAAc,GAIf;IACC,+CAA+C;IAC/C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEpE,6DAA6D;IAC7D,IAAI,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACjD,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAEpC,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,cAAK,SAAS,EAAC,mBAAmB,YAChC,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,GAC3B,EACN,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,YAAY,YAAE,KAAK,GAAO,EACzC,KAAC,UAAU,IACT,OAAO,EAAE,GAAG,EAAE;4BACZ,cAAc,CAAC,MAAM,CAAC,CAAA;wBACxB,CAAC,YAEA,CAAC,CAAC,aAAa,GACL,IACT,EACN,KAAC,MAAM,yBAAgB,IACnB,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,aAAa,EAAE,gBAAgB;CAChC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  export declare function AccessCodeTable(props: {
2
2
  deviceId: string;
3
- onClickBack?: () => void;
3
+ onBack?: () => void;
4
4
  }): JSX.Element;
@@ -1,19 +1,33 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TableBody, TableCell, TableHeader, TableRow, TableTitle, } from '../../../lib/ui/Table/index.js';
3
- import { useAccessCodes } from '../../../lib/hooks/use-access-codes.js';
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
4
3
  import { AccessCodeKeyIcon } from '../../../lib/icons/AccessCodeKey.js';
4
+ import { useAccessCodes } from '../../../lib/seam/access-codes/use-access-codes.js';
5
+ import { AccessCodeDetails } from '../../../lib/ui/AccessCodeDetails/AccessCodeDetails.js';
5
6
  import { CodeDetails } from '../../../lib/ui/AccessCodeTable/CodeDetails.js';
6
7
  import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
8
+ import { TableBody } from '../../../lib/ui/Table/TableBody.js';
9
+ import { TableCell } from '../../../lib/ui/Table/TableCell.js';
10
+ import { TableHeader } from '../../../lib/ui/Table/TableHeader.js';
11
+ import { TableRow } from '../../../lib/ui/Table/TableRow.js';
12
+ import { TableTitle } from '../../../lib/ui/Table/TableTitle.js';
7
13
  import { Caption } from '../../../lib/ui/typography/Caption.js';
8
14
  import { Title } from '../../../lib/ui/typography/Title.js';
9
15
  export function AccessCodeTable(props) {
10
16
  const { accessCodes } = useAccessCodes({
11
17
  device_id: props.deviceId,
12
18
  });
13
- const { onClickBack } = props;
19
+ const { onBack } = props;
20
+ const [selectedAccessCode, selectAccessCode] = useState(null);
21
+ if (selectedAccessCode) {
22
+ return (_jsx(AccessCodeDetails, { accessCode: selectedAccessCode, onBack: () => {
23
+ selectAccessCode(null);
24
+ } }));
25
+ }
14
26
  if (!accessCodes)
15
27
  return _jsx(_Fragment, { children: null });
16
- return (_jsxs("div", { className: 'seam-access-code-table', children: [_jsx(ContentHeader, { onClickBack: onClickBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.accessCodes, " ", _jsxs(Caption, { children: ["(", accessCodes.length, ")"] })] }) }), _jsx(TableBody, { children: accessCodes.map((code) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: 'seam-icon-cell', children: _jsx("div", { children: _jsx(AccessCodeKeyIcon, {}) }) }), _jsxs(TableCell, { className: 'seam-name-cell', children: [_jsx(Title, { children: code.name }), _jsx(CodeDetails, { accessCode: code })] }), _jsx(TableCell, { className: 'seam-action-cell' })] }, code.access_code_id))) })] }));
28
+ return (_jsxs("div", { className: 'seam-access-code-table', children: [_jsx(ContentHeader, { onBack: onBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.accessCodes, " ", _jsxs(Caption, { children: ["(", accessCodes.length, ")"] })] }) }), _jsx(TableBody, { children: accessCodes.map((code) => (_jsxs(TableRow, { onClick: () => {
29
+ selectAccessCode(code);
30
+ }, children: [_jsx(TableCell, { className: 'seam-icon-cell', children: _jsx("div", { children: _jsx(AccessCodeKeyIcon, {}) }) }), _jsxs(TableCell, { className: 'seam-name-cell', children: [_jsx(Title, { children: code.name }), _jsx(CodeDetails, { accessCode: code })] }), _jsx(TableCell, { className: 'seam-action-cell' })] }, code.access_code_id))) })] }));
17
31
  }
18
32
  const t = {
19
33
  accessCodes: 'Access Codes',
@@ -1 +1 @@
1
- {"version":3,"file":"AccessCodeTable.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/AccessCodeTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,MAAM,UAAU,eAAe,CAAC,KAG/B;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC;QACrC,SAAS,EAAE,KAAK,CAAC,QAAQ;KAC1B,CAAC,CAAA;IACF,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE7B,IAAI,CAAC,WAAW;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAA;IAEpC,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,aAAa,IAAC,WAAW,EAAE,WAAW,GAAI,EAC3C,KAAC,WAAW,cACV,MAAC,UAAU,eACR,CAAC,CAAC,WAAW,OAAE,MAAC,OAAO,oBAAG,WAAW,CAAC,MAAM,SAAY,IAC9C,GACD,EACd,KAAC,SAAS,cACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,MAAC,QAAQ,eACP,KAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,YACnC,wBACE,KAAC,iBAAiB,KAAG,GACjB,GACI,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,cAAE,IAAI,CAAC,IAAI,GAAS,EAC1B,KAAC,WAAW,IAAC,UAAU,EAAE,IAAI,GAAI,IACvB,EACZ,KAAC,SAAS,IAAC,SAAS,EAAC,kBAAkB,GAI3B,KAdC,IAAI,CAAC,cAAc,CAevB,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
1
+ {"version":3,"file":"AccessCodeTable.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/AccessCodeTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,MAAM,UAAU,eAAe,CAAC,KAG/B;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC;QACrC,SAAS,EAAE,KAAK,CAAC,QAAQ;KAC1B,CAAC,CAAA;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAExB,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CACrD,IAAI,CACL,CAAA;IAED,IAAI,kBAAkB,EAAE;QACtB,OAAO,CACL,KAAC,iBAAiB,IAChB,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,GAAG,EAAE;gBACX,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC,GACD,CACH,CAAA;KACF;IAED,IAAI,CAAC,WAAW;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAA;IAEpC,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,WAAW,cACV,MAAC,UAAU,eACR,CAAC,CAAC,WAAW,OAAE,MAAC,OAAO,oBAAG,WAAW,CAAC,MAAM,SAAY,IAC9C,GACD,EACd,KAAC,SAAS,cACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,MAAC,QAAQ,IAEP,OAAO,EAAE,GAAG,EAAE;wBACZ,gBAAgB,CAAC,IAAI,CAAC,CAAA;oBACxB,CAAC,aAED,KAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,YACnC,wBACE,KAAC,iBAAiB,KAAG,GACjB,GACI,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,cAAE,IAAI,CAAC,IAAI,GAAS,EAC1B,KAAC,WAAW,IAAC,UAAU,EAAE,IAAI,GAAI,IACvB,EACZ,KAAC,SAAS,IAAC,SAAS,EAAC,kBAAkB,GAI3B,KAlBP,IAAI,CAAC,cAAc,CAmBf,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { AccessCode } from 'seamapi';
2
2
  export interface AccessCodeTableContentProps {
3
3
  accessCodes: AccessCode[];
4
- onClickBack?: () => void;
4
+ onBack?: () => void;
5
5
  }
6
6
  export declare function AccessCodeTableContent(props: AccessCodeTableContentProps): JSX.Element;
@@ -1,13 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { TableBody, TableCell, TableHeader, TableRow, TableTitle, } from '../../../lib/ui/Table/index.js';
3
2
  import { AccessCodeKeyIcon } from '../../../lib/icons/AccessCodeKey.js';
4
3
  import { CodeDetails } from '../../../lib/ui/AccessCodeTable/CodeDetails.js';
5
4
  import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
5
+ import { TableBody } from '../../../lib/ui/Table/TableBody.js';
6
+ import { TableCell } from '../../../lib/ui/Table/TableCell.js';
7
+ import { TableHeader } from '../../../lib/ui/Table/TableHeader.js';
8
+ import { TableRow } from '../../../lib/ui/Table/TableRow.js';
9
+ import { TableTitle } from '../../../lib/ui/Table/TableTitle.js';
6
10
  import { Caption } from '../../../lib/ui/typography/Caption.js';
7
11
  import { Title } from '../../../lib/ui/typography/Title.js';
8
12
  export function AccessCodeTableContent(props) {
9
- const { accessCodes, onClickBack } = props;
10
- return (_jsxs("div", { className: 'seam-access-code-table', children: [_jsx(ContentHeader, { onClickBack: onClickBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.accessCodes, " ", _jsxs(Caption, { children: ["(", accessCodes.length, ")"] })] }) }), _jsx(TableBody, { children: accessCodes.map((code) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: 'seam-icon-cell', children: _jsx("div", { children: _jsx(AccessCodeKeyIcon, {}) }) }), _jsxs(TableCell, { className: 'seam-name-cell', children: [_jsx(Title, { children: code.name }), _jsx(CodeDetails, { accessCode: code })] }), _jsx(TableCell, { className: 'seam-action-cell' })] }, code.access_code_id))) })] }));
13
+ const { accessCodes, onBack } = props;
14
+ return (_jsxs("div", { className: 'seam-access-code-table', children: [_jsx(ContentHeader, { onBack: onBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.accessCodes, " ", _jsxs(Caption, { children: ["(", accessCodes.length, ")"] })] }) }), _jsx(TableBody, { children: accessCodes.map((code) => (_jsxs(TableRow, { children: [_jsx(TableCell, { className: 'seam-icon-cell', children: _jsx("div", { children: _jsx(AccessCodeKeyIcon, {}) }) }), _jsxs(TableCell, { className: 'seam-name-cell', children: [_jsx(Title, { children: code.name }), _jsx(CodeDetails, { accessCode: code })] }), _jsx(TableCell, { className: 'seam-action-cell' })] }, code.access_code_id))) })] }));
11
15
  }
12
16
  const t = {
13
17
  accessCodes: 'Access Codes',
@@ -1 +1 @@
1
- {"version":3,"file":"AccessCodeTableContent.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/AccessCodeTableContent.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,MAAM,UAAU,sBAAsB,CACpC,KAAkC;IAElC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE1C,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,aAAa,IAAC,WAAW,EAAE,WAAW,GAAI,EAC3C,KAAC,WAAW,cACV,MAAC,UAAU,eACR,CAAC,CAAC,WAAW,OAAE,MAAC,OAAO,oBAAG,WAAW,CAAC,MAAM,SAAY,IAC9C,GACD,EACd,KAAC,SAAS,cACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,MAAC,QAAQ,eACP,KAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,YACnC,wBACE,KAAC,iBAAiB,KAAG,GACjB,GACI,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,cAAE,IAAI,CAAC,IAAI,GAAS,EAC1B,KAAC,WAAW,IAAC,UAAU,EAAE,IAAI,GAAI,IACvB,EACZ,KAAC,SAAS,IAAC,SAAS,EAAC,kBAAkB,GAI3B,KAdC,IAAI,CAAC,cAAc,CAevB,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
1
+ {"version":3,"file":"AccessCodeTableContent.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/AccessCodeTableContent.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAOlD,MAAM,UAAU,sBAAsB,CACpC,KAAkC;IAElC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAErC,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,WAAW,cACV,MAAC,UAAU,eACR,CAAC,CAAC,WAAW,OAAE,MAAC,OAAO,oBAAG,WAAW,CAAC,MAAM,SAAY,IAC9C,GACD,EACd,KAAC,SAAS,cACP,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,MAAC,QAAQ,eACP,KAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,YACnC,wBACE,KAAC,iBAAiB,KAAG,GACjB,GACI,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,cAAE,IAAI,CAAC,IAAI,GAAS,EAC1B,KAAC,WAAW,IAAC,UAAU,EAAE,IAAI,GAAI,IACvB,EACZ,KAAC,SAAS,IAAC,SAAS,EAAC,kBAAkB,GAI3B,KAdC,IAAI,CAAC,cAAc,CAevB,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
@@ -3,7 +3,7 @@ import { DateTime } from 'luxon';
3
3
  import { DotDivider } from '../../../lib/ui/layout/DotDivider.js';
4
4
  export function CodeDetails(props) {
5
5
  const { accessCode } = props;
6
- return (_jsxs("div", { className: 'seam-access-code-details', children: ["Unit 110", _jsx(DotDivider, {}), _jsx(Duration, { accessCode: accessCode }), _jsx(DotDivider, {}), t.code, ": ", accessCode.code] }));
6
+ return (_jsxs("div", { className: 'seam-code-details', children: ["Unit 110", _jsx(DotDivider, {}), _jsx(Duration, { accessCode: accessCode }), _jsx(DotDivider, {}), t.code, ": ", accessCode.code] }));
7
7
  }
8
8
  function Duration(props) {
9
9
  const { accessCode } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"CodeDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/CodeDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,UAAU,WAAW,CAAC,KAAiC;IAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAE5B,OAAO,CACL,eAAK,SAAS,EAAC,0BAA0B,yBAEvC,KAAC,UAAU,KAAG,EACd,KAAC,QAAQ,IAAC,UAAU,EAAE,UAAU,GAAI,EACpC,KAAC,UAAU,KAAG,EACb,CAAC,CAAC,IAAI,QAAI,UAAU,CAAC,IAAI,IACtB,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiC;IACjD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QACjC,OAAO,CACL,2BACG,CAAC,CAAC,IAAI,QAAI,CAAC,CAAC,KAAK,IACb,CACR,CAAA;KACF;IAED,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACxE,IAAI,UAAU,EAAE;QACd,OAAO,CACL,2BACG,CAAC,CAAC,IAAI,QAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,IACzC,CACR,CAAA;KACF;IAED,OAAO,CACL,2BACG,CAAC,CAAC,MAAM,QAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IACxC,CACR,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;QAC3C,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;KACf,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,GAAG;IACR,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACf,CAAA"}
1
+ {"version":3,"file":"CodeDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/CodeDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,UAAU,WAAW,CAAC,KAAiC;IAC3D,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAE5B,OAAO,CACL,eAAK,SAAS,EAAC,mBAAmB,yBAEhC,KAAC,UAAU,KAAG,EACd,KAAC,QAAQ,IAAC,UAAU,EAAE,UAAU,GAAI,EACpC,KAAC,UAAU,KAAG,EACb,CAAC,CAAC,IAAI,QAAI,UAAU,CAAC,IAAI,IACtB,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiC;IACjD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QACjC,OAAO,CACL,2BACG,CAAC,CAAC,IAAI,QAAI,CAAC,CAAC,KAAK,IACb,CACR,CAAA;KACF;IAED,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACxE,IAAI,UAAU,EAAE;QACd,OAAO,CACL,2BACG,CAAC,CAAC,IAAI,QAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,IACzC,CACR,CAAA;KACF;IAED,OAAO,CACL,2BACG,CAAC,CAAC,MAAM,QAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IACxC,CACR,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;QAC3C,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;KACf,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,GAAG;IACR,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACf,CAAA"}
@@ -0,0 +1,8 @@
1
+ interface ButtonProps {
2
+ children?: string;
3
+ variant?: 'solid' | 'outline' | 'neutral';
4
+ size?: 'small' | 'medium' | 'large';
5
+ disabled?: boolean;
6
+ }
7
+ export declare function Button({ variant, children, size, disabled, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ export function Button({ variant = 'outline', children, size = 'medium', disabled, }) {
4
+ return (_jsx("button", { className: classNames(`seam-btn seam-btn-${variant} seam-btn-${size}`, {
5
+ 'seam-btn-disabled': disabled,
6
+ }), disabled: disabled, children: children }));
7
+ }
8
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/lib/ui/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AASnC,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,GAAG,SAAS,EACnB,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,QAAQ,GACI;IACZ,OAAO,CACL,iBACE,SAAS,EAAE,UAAU,CAAC,qBAAqB,OAAO,aAAa,IAAI,EAAE,EAAE;YACrE,mBAAmB,EAAE,QAAQ;SAC9B,CAAC,EACF,QAAQ,EAAE,QAAQ,YAEjB,QAAQ,GACF,CACV,CAAA;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
- import { type LockDevice } from 'seamapi';
1
+ import { type CommonDeviceProperties, type Device } from 'seamapi';
2
2
  export interface DeviceDetailsProps {
3
- device: LockDevice;
3
+ device: Device<CommonDeviceProperties>;
4
+ onBack?: () => void;
4
5
  }
5
- export declare function DeviceDetails(props: DeviceDetailsProps): JSX.Element;
6
+ export declare function DeviceDetails(props: DeviceDetailsProps): JSX.Element | null;
@@ -1,22 +1,35 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import {} from 'seamapi';
3
3
  import { ChevronRightIcon } from '../../../lib/icons/ChevronRight.js';
4
+ import { useAccessCodes } from '../../../lib/seam/access-codes/use-access-codes.js';
5
+ import { isLockDevice } from '../../../lib/seam/devices/types.js';
4
6
  import { AccessCodeTable } from '../../../lib/ui/AccessCodeTable/AccessCodeTable.js';
5
- import { BatteryStatus } from '../../../lib/ui/DeviceDetails/BatteryStatus.js';
6
- import { DeviceImage } from '../../../lib/ui/DeviceDetails/DeviceImage.js';
7
- import { ModelStatus } from '../../../lib/ui/DeviceDetails/ModelStatus.js';
8
- import { OnlineStatus } from '../../../lib/ui/DeviceDetails/OnlineStatus.js';
7
+ import { Button } from '../../../lib/ui/Button.js';
8
+ import { BatteryStatus } from '../../../lib/ui/device/BatteryStatus.js';
9
+ import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
10
+ import { OnlineStatus } from '../../../lib/ui/device/OnlineStatus.js';
11
+ import { DeviceModel } from '../../../lib/ui/DeviceDetails/DeviceModel.js';
9
12
  import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
10
13
  import useToggle from '../../../lib/use-toggle.js';
11
14
  export function DeviceDetails(props) {
12
- const { device } = props;
13
- const lockStatus = device.properties.locked ? t.locked : t.unlocked;
14
- const accessCodeLength = device.properties?.schlage_metadata?.access_code_length;
15
+ const { device, onBack } = props;
15
16
  const [showingAccessCodes, toggleAccessCodes] = useToggle();
17
+ const { isLoading, accessCodes } = useAccessCodes({
18
+ device_id: device.device_id,
19
+ });
20
+ if (isLoading) {
21
+ return null;
22
+ }
16
23
  if (showingAccessCodes) {
17
- return (_jsx(AccessCodeTable, { deviceId: device.device_id, onClickBack: toggleAccessCodes }));
24
+ return (_jsx(AccessCodeTable, { deviceId: device.device_id, onBack: toggleAccessCodes }));
18
25
  }
19
- return (_jsxs("div", { className: 'seam-device-details', children: [_jsx(ContentHeader, { title: 'Device' }), _jsxs("div", { className: 'seam-body', children: [_jsx("div", { className: 'seam-summary', children: _jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.device }), _jsx("h4", { className: 'seam-device-name', children: device.properties.name }), _jsxs("div", { className: 'seam-properties', children: [_jsx(OnlineStatus, { device: device }), _jsx(BatteryStatus, { device: device }), _jsx(ModelStatus, { device: device })] })] })] }) }), _jsx("div", { className: 'seam-box', children: _jsxs("div", { className: 'seam-content seam-access-codes', onClick: toggleAccessCodes, children: [_jsxs("span", { className: 'seam-value', children: ["49 ", t.accessCodes] }), _jsx(ChevronRightIcon, {})] }) }), _jsxs("div", { className: 'seam-box', children: [_jsxs("div", { className: 'seam-content', children: [_jsx("span", { className: 'seam-label', children: t.lockStatus }), _jsx("span", { className: 'seam-value', children: lockStatus })] }), _jsx(AccessCodeLength, { accessCodeLength: accessCodeLength })] })] })] }));
26
+ if (!isLockDevice(device)) {
27
+ return null;
28
+ }
29
+ const lockStatus = device.properties.locked ? t.locked : t.unlocked;
30
+ const accessCodeCount = accessCodes?.length;
31
+ const accessCodeLength = device.properties?.schlage_metadata?.access_code_length;
32
+ return (_jsxs("div", { className: 'seam-device-details', children: [_jsx(ContentHeader, { title: 'Device', onBack: onBack }), _jsxs("div", { className: 'seam-body', children: [_jsx("div", { className: 'seam-summary', children: _jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.device }), _jsx("h4", { className: 'seam-device-name', children: device.properties.name }), _jsxs("div", { className: 'seam-properties', children: [_jsxs("span", { className: 'seam-label', children: [t.status, ":"] }), ' ', _jsx(OnlineStatus, { device: device }), _jsxs("span", { className: 'seam-label', children: [t.power, ":"] }), ' ', _jsx(BatteryStatus, { device: device }), _jsx(DeviceModel, { device: device })] })] })] }) }), _jsx("div", { className: 'seam-box', children: _jsxs("div", { className: 'seam-content seam-access-codes', onClick: toggleAccessCodes, children: [_jsxs("span", { className: 'seam-value', children: [accessCodeCount, " ", t.accessCodes] }), _jsx(ChevronRightIcon, {})] }) }), _jsxs("div", { className: 'seam-box', children: [_jsxs("div", { className: 'seam-content seam-lock-status', children: [_jsxs("div", { children: [_jsx("span", { className: 'seam-label', children: t.lockStatus }), _jsx("span", { className: 'seam-value', children: lockStatus })] }), _jsx("div", { className: 'seam-right', children: _jsx(Button, { size: 'small', children: t.unlock }) })] }), _jsx(AccessCodeLength, { accessCodeLength: accessCodeLength })] })] })] }));
20
33
  }
21
34
  function AccessCodeLength(props) {
22
35
  const { accessCodeLength } = props;
@@ -27,11 +40,14 @@ function AccessCodeLength(props) {
27
40
  }
28
41
  const t = {
29
42
  device: 'Device',
43
+ unlock: 'Unlock',
30
44
  locked: 'Locked',
31
45
  unlocked: 'Unlocked',
32
46
  accessCodes: 'access codes',
33
47
  codeLength: 'Code length',
34
48
  digits: 'digits',
35
49
  lockStatus: 'Lock status',
50
+ status: 'Status',
51
+ power: 'Power',
36
52
  };
37
53
  //# sourceMappingURL=DeviceDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAmB,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAMzC,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAExB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IAEnE,MAAM,gBAAgB,GACpB,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,CAAA;IAEzD,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,GAAG,SAAS,EAAE,CAAA;IAE3D,IAAI,kBAAkB,EAAE;QACtB,OAAO,CACL,KAAC,eAAe,IACd,QAAQ,EAAE,MAAM,CAAC,SAAS,EAC1B,WAAW,EAAE,iBAAiB,GAC9B,CACH,CAAA;KACF;IAED,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,aAAa,IAAC,KAAK,EAAC,QAAQ,GAAG,EAChC,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,cAAc,YAC3B,eAAK,SAAS,EAAC,cAAc,aAC3B,cAAK,SAAS,EAAC,YAAY,YACzB,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,GAC3B,EACN,eAAK,SAAS,EAAC,WAAW,aACxB,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,MAAM,GAAQ,EAC9C,aAAI,SAAS,EAAC,kBAAkB,YAAE,MAAM,CAAC,UAAU,CAAC,IAAI,GAAM,EAC9D,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,EAChC,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,IAC3B,IACF,IACF,GACF,EACN,cAAK,SAAS,EAAC,UAAU,YACvB,eACE,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,iBAAiB,aAE1B,gBAAM,SAAS,EAAC,YAAY,oBAAK,CAAC,CAAC,WAAW,IAAQ,EACtD,KAAC,gBAAgB,KAAG,IAChB,GACF,EAEN,eAAK,SAAS,EAAC,UAAU,aACvB,eAAK,SAAS,EAAC,cAAc,aAC3B,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,UAAU,GAAQ,EAClD,eAAM,SAAS,EAAC,YAAY,YAAE,UAAU,GAAQ,IAC5C,EACN,KAAC,gBAAgB,IAAC,gBAAgB,EAAE,gBAAgB,GAAI,IACpD,IACF,IACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAEzB;IACC,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;IAClC,IAAI,gBAAgB,IAAI,IAAI,EAAE;QAC5B,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,eAAK,SAAS,EAAC,sCAAsC,aACnD,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,UAAU,GAAQ,EAClD,gBAAM,SAAS,EAAC,YAAY,aACzB,gBAAgB,OAAG,CAAC,CAAC,MAAM,IACvB,IACH,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,aAAa;CAC1B,CAAA"}
1
+ {"version":3,"file":"DeviceDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceDetails.tsx"],"names":[],"mappings":"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"}