@seamapi/react 0.17.0 → 0.19.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 +23 -0
- package/lib/seam/access-codes/use-access-code.d.ts +3 -6
- package/lib/seam/access-codes/use-access-code.js +4 -19
- package/lib/seam/access-codes/use-access-code.js.map +1 -1
- package/lib/seam/access-codes/use-access-codes.d.ts +1 -5
- package/lib/seam/access-codes/use-access-codes.js +2 -1
- package/lib/seam/access-codes/use-access-codes.js.map +1 -1
- package/lib/seam/devices/use-device.d.ts +2 -2
- package/lib/seam/devices/use-device.js.map +1 -1
- package/lib/seam/devices/use-devices.js +2 -1
- package/lib/seam/devices/use-devices.js.map +1 -1
- package/lib/sort-by.d.ts +5 -0
- package/lib/sort-by.js +9 -0
- package/lib/sort-by.js.map +1 -0
- package/lib/ui/AccessCodeDetails/AccessCodeDetails.d.ts +4 -2
- package/lib/ui/AccessCodeDetails/AccessCodeDetails.js +11 -10
- package/lib/ui/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
- package/lib/ui/AccessCodeDetails/AccessCodeDevice.d.ts +4 -2
- package/lib/ui/AccessCodeDetails/AccessCodeDevice.js +3 -6
- package/lib/ui/AccessCodeDetails/AccessCodeDevice.js.map +1 -1
- package/lib/ui/AccessCodeTable/AccessCodeTable.d.ts +2 -1
- package/lib/ui/AccessCodeTable/AccessCodeTable.js +15 -10
- package/lib/ui/AccessCodeTable/AccessCodeTable.js.map +1 -1
- package/lib/ui/AccessCodeTable/AccessCodeTableContent.d.ts +1 -0
- package/lib/ui/AccessCodeTable/AccessCodeTableContent.js +2 -2
- package/lib/ui/AccessCodeTable/AccessCodeTableContent.js.map +1 -1
- package/lib/ui/Button.d.ts +1 -1
- package/lib/ui/DeviceDetails/DeviceDetails.d.ts +3 -1
- package/lib/ui/DeviceDetails/DeviceDetails.js +12 -14
- package/lib/ui/DeviceDetails/DeviceDetails.js.map +1 -1
- package/lib/ui/DeviceDetails/DeviceModel.js +1 -1
- package/lib/ui/DeviceDetails/DeviceModel.js.map +1 -1
- package/lib/ui/DeviceTable/DeviceTable.d.ts +1 -1
- package/lib/ui/DeviceTable/DeviceTable.js +18 -8
- package/lib/ui/DeviceTable/DeviceTable.js.map +1 -1
- package/lib/ui/Table/TableCell.d.ts +1 -1
- package/lib/ui/Table/TableCell.js +2 -2
- package/lib/ui/Table/TableCell.js.map +1 -1
- package/lib/ui/TextField/SearchTextField.d.ts +1 -1
- package/lib/ui/TextField/SearchTextField.js +2 -2
- package/lib/ui/TextField/SearchTextField.js.map +1 -1
- package/lib/ui/device/BatteryStatus.d.ts +1 -1
- package/lib/ui/layout/ContentHeader.d.ts +1 -0
- package/lib/ui/layout/ContentHeader.js +3 -5
- package/lib/ui/layout/ContentHeader.js.map +1 -1
- package/package.json +2 -5
- package/src/lib/seam/access-codes/use-access-code.ts +18 -29
- package/src/lib/seam/access-codes/use-access-codes.ts +8 -10
- package/src/lib/seam/devices/use-device.ts +4 -1
- package/src/lib/seam/devices/use-devices.ts +2 -4
- package/src/lib/sort-by.ts +11 -0
- package/src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx +28 -18
- package/src/lib/ui/AccessCodeDetails/AccessCodeDevice.tsx +11 -6
- package/src/lib/ui/AccessCodeTable/AccessCodeTable.tsx +29 -14
- package/src/lib/ui/AccessCodeTable/AccessCodeTableContent.tsx +4 -7
- package/src/lib/ui/Button.tsx +1 -1
- package/src/lib/ui/DeviceDetails/DeviceDetails.tsx +22 -18
- package/src/lib/ui/DeviceDetails/DeviceModel.tsx +1 -1
- package/src/lib/ui/DeviceTable/DeviceTable.tsx +39 -10
- package/src/lib/ui/Table/TableCell.tsx +2 -4
- package/src/lib/ui/TextField/SearchTextField.tsx +2 -2
- package/src/lib/ui/device/BatteryStatus.tsx +2 -2
- package/src/lib/ui/device/LockStatus.tsx +1 -1
- package/src/lib/ui/device/OnlineStatus.tsx +1 -1
- package/src/lib/ui/layout/ContentHeader.tsx +7 -7
- package/lib/NavigationProvider.d.ts +0 -27
- package/lib/NavigationProvider.js +0 -36
- package/lib/NavigationProvider.js.map +0 -1
- package/lib/NavigationView.d.ts +0 -5
- package/lib/NavigationView.js +0 -25
- package/lib/NavigationView.js.map +0 -1
- package/src/lib/NavigationProvider.tsx +0 -86
- package/src/lib/NavigationView.tsx +0 -32
package/README.md
CHANGED
|
@@ -66,6 +66,29 @@ Load the font from Google Fonts by placing the following in the `<head>` tag:
|
|
|
66
66
|
|
|
67
67
|
[Source Sans Pro]: https://fonts.google.com/specimen/Source+Sans+Pro
|
|
68
68
|
|
|
69
|
+
### Content Security Policy (CSP)
|
|
70
|
+
|
|
71
|
+
By self hosting the recommended fonts (or choosing not to use them),
|
|
72
|
+
and proxying the Seam API endpoint, the components are compatible with this strict CSP:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
default-src 'self'; img-src 'self' https://connect.getseam.com
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The `img-src` is required as some components display device images from the Seam API.
|
|
79
|
+
|
|
80
|
+
When using the default endpoint, include `connect-src` with
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
connect-src 'self' https://connect.getseam.com
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
When serving the fonts from Google Fonts, include `font-src` and `style-src` with
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
font-src 'self' https://fonts.gstatic.com; style-src 'self' https://fonts.googleapis.com
|
|
90
|
+
```
|
|
91
|
+
|
|
69
92
|
## Development and Testing
|
|
70
93
|
|
|
71
94
|
### Quickstart
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { AccessCode, AccessCodeGetRequest } from 'seamapi';
|
|
2
|
+
import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
|
|
2
3
|
export type UseAccessCodeParams = AccessCodeGetRequest | string;
|
|
3
|
-
export type UseAccessCodeData = AccessCode;
|
|
4
|
-
export declare function useAccessCode(params: UseAccessCodeParams):
|
|
5
|
-
export declare function useFakeAccessCode(_params: UseAccessCodeParams): {
|
|
6
|
-
isLoading: boolean;
|
|
7
|
-
data: AccessCode;
|
|
8
|
-
};
|
|
4
|
+
export type UseAccessCodeData = AccessCode | null;
|
|
5
|
+
export declare function useAccessCode(params: UseAccessCodeParams): UseSeamQueryResult<'accessCode', UseAccessCodeData>;
|
|
@@ -1,32 +1,17 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
|
-
import { DateTime } from 'luxon';
|
|
3
|
-
import { v4 as uuid } from 'uuid';
|
|
4
2
|
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
5
3
|
export function useAccessCode(params) {
|
|
6
|
-
const { client } = useSeamClient();
|
|
7
4
|
const normalizedParams = typeof params === 'string' ? { access_code_id: params } : params;
|
|
8
|
-
|
|
5
|
+
const { client } = useSeamClient();
|
|
6
|
+
const { data, ...rest } = useQuery({
|
|
9
7
|
enabled: client != null,
|
|
10
|
-
queryKey: ['
|
|
8
|
+
queryKey: ['access_codes', 'get', normalizedParams],
|
|
11
9
|
queryFn: async () => {
|
|
12
10
|
if (client == null)
|
|
13
11
|
return null;
|
|
14
12
|
return await client?.accessCodes.get(normalizedParams);
|
|
15
13
|
},
|
|
16
14
|
});
|
|
17
|
-
}
|
|
18
|
-
export function useFakeAccessCode(_params) {
|
|
19
|
-
const accessCode = {
|
|
20
|
-
access_code_id: uuid(),
|
|
21
|
-
type: 'time_bound',
|
|
22
|
-
starts_at: DateTime.now().minus({ days: 2 }).toISO() ?? '',
|
|
23
|
-
ends_at: DateTime.now().plus({ days: 1 }).toISO() ?? '',
|
|
24
|
-
code: '1234',
|
|
25
|
-
created_at: DateTime.now().toISO() ?? '',
|
|
26
|
-
device_id: 'some_device_id',
|
|
27
|
-
status: 'set',
|
|
28
|
-
name: 'Guest - Kranz',
|
|
29
|
-
};
|
|
30
|
-
return { isLoading: false, data: accessCode };
|
|
15
|
+
return { ...rest, accessCode: data };
|
|
31
16
|
}
|
|
32
17
|
//# sourceMappingURL=use-access-code.js.map
|
|
@@ -1 +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;
|
|
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;AAQhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,aAAa,CAC3B,MAA2B;IAE3B,MAAM,gBAAgB,GACpB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAElE,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,KAAK,EAAE,gBAAgB,CAAC;QACnD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,MAAM,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACxD,CAAC;KACF,CAAC,CAAA;IACF,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import type { AccessCode } from 'seamapi';
|
|
1
|
+
import type { AccessCode, AccessCodesListRequest } from 'seamapi';
|
|
2
2
|
import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
|
|
3
3
|
export type UseAccessCodesParams = AccessCodesListRequest | string;
|
|
4
4
|
export type UseAccessCodesData = AccessCode[];
|
|
5
5
|
export declare function useAccessCodes(params: UseAccessCodesParams): UseSeamQueryResult<'accessCodes', UseAccessCodesData>;
|
|
6
|
-
interface AccessCodesListRequest {
|
|
7
|
-
device_id: string;
|
|
8
|
-
}
|
|
9
|
-
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
2
|
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
|
+
import { byCreatedAt } from '../../../lib/sort-by.js';
|
|
3
4
|
export function useAccessCodes(params) {
|
|
4
5
|
const normalizedParams = typeof params === 'string' ? { device_id: params } : params;
|
|
5
6
|
const { client } = useSeamClient();
|
|
@@ -10,7 +11,7 @@ export function useAccessCodes(params) {
|
|
|
10
11
|
if (client == null)
|
|
11
12
|
return [];
|
|
12
13
|
const accessCodes = await client?.accessCodes.list(normalizedParams);
|
|
13
|
-
return accessCodes.sort(
|
|
14
|
+
return accessCodes.sort(byCreatedAt);
|
|
14
15
|
},
|
|
15
16
|
});
|
|
16
17
|
return { ...rest, accessCodes: data };
|
|
@@ -1 +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;
|
|
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;AAQhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C,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,CAAC,WAAW,CAAC,CAAA;QACtC,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AACvC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { CommonDeviceProperties, Device, DeviceGetRequest
|
|
1
|
+
import type { CommonDeviceProperties, Device, DeviceGetRequest } from 'seamapi';
|
|
2
2
|
import type { UseSeamQueryResult } from '../../../lib/seam/use-seam-query-result.js';
|
|
3
3
|
export type UseDeviceParams = DeviceGetRequest | string;
|
|
4
4
|
export type UseDeviceData = Device<CommonDeviceProperties> | null;
|
|
5
5
|
export declare function useDevice(params: DeviceGetRequest): UseSeamQueryResult<'device', UseDeviceData>;
|
|
6
6
|
export declare function useFakeDevice(_params: DeviceGetRequest): {
|
|
7
7
|
isLoading: boolean;
|
|
8
|
-
device:
|
|
8
|
+
device: UseDeviceData;
|
|
9
9
|
};
|
|
@@ -1 +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;
|
|
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;IAIrD,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,5 +1,6 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
2
|
import { useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
|
+
import { byCreatedAt } from '../../../lib/sort-by.js';
|
|
3
4
|
export function useDevices(params) {
|
|
4
5
|
const { client } = useSeamClient();
|
|
5
6
|
const { data, ...rest } = useQuery({
|
|
@@ -9,7 +10,7 @@ export function useDevices(params) {
|
|
|
9
10
|
if (client == null)
|
|
10
11
|
return [];
|
|
11
12
|
const devices = await client?.devices.list(params);
|
|
12
|
-
return devices.sort(
|
|
13
|
+
return devices.sort(byCreatedAt);
|
|
13
14
|
},
|
|
14
15
|
});
|
|
15
16
|
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,EAAE,MAAM,uBAAuB,CAAA;AAShD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;
|
|
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;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C,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,CAAC,WAAW,CAAC,CAAA;QAClC,CAAC;KACF,CACF,CAAA;IAED,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC"}
|
package/lib/sort-by.d.ts
ADDED
package/lib/sort-by.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
export const byCreatedAt = (a, b) => {
|
|
3
|
+
const t1 = DateTime.fromISO(a.created_at);
|
|
4
|
+
const t2 = DateTime.fromISO(b.created_at);
|
|
5
|
+
if (!t1.isValid || !t2.isValid)
|
|
6
|
+
return 0;
|
|
7
|
+
return t1.toMillis() - t2.toMillis();
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=sort-by.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-by.js","sourceRoot":"","sources":["../src/lib/sort-by.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAyB,EACzB,CAAyB,EACjB,EAAE;IACV,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO;QAAE,OAAO,CAAC,CAAA;IACxC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { AccessCode } from 'seamapi';
|
|
1
2
|
export interface AccessCodeDetailsProps {
|
|
2
|
-
|
|
3
|
+
accessCode: AccessCode;
|
|
4
|
+
onBack?: () => void;
|
|
3
5
|
}
|
|
4
|
-
export
|
|
6
|
+
export declare function AccessCodeDetails({ accessCode, onBack, }: AccessCodeDetailsProps): JSX.Element;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { DateTime } from 'luxon';
|
|
3
|
-
import {
|
|
4
|
-
import AccessCodeDevice from '../../../lib/ui/AccessCodeDetails/AccessCodeDevice.js';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { AccessCodeDevice } from '../../../lib/ui/AccessCodeDetails/AccessCodeDevice.js';
|
|
5
|
+
import { DeviceDetails } from '../../../lib/ui/DeviceDetails/DeviceDetails.js';
|
|
5
6
|
import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
|
|
6
|
-
export
|
|
7
|
-
const { isLoading, data: accessCode } = useFakeAccessCode({
|
|
8
|
-
access_code_id: accessCodeId,
|
|
9
|
-
});
|
|
10
|
-
if (isLoading || !accessCode) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
7
|
+
export function AccessCodeDetails({ accessCode, onBack, }) {
|
|
13
8
|
const name = accessCode.name ?? t.fallbackName;
|
|
14
|
-
|
|
9
|
+
const [selectedDevice, selectDevice] = useState(null);
|
|
10
|
+
if (selectedDevice != null) {
|
|
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 }) })] })] })] }));
|
|
15
16
|
}
|
|
16
17
|
function ScheduleInfo({ accessCode }) {
|
|
17
18
|
if (accessCode.type === 'ongoing') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessCodeDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AccessCodeDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeDetails/AccessCodeDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CommonDeviceProperties, Device } from 'seamapi';
|
|
2
|
+
export declare function AccessCodeDevice({ deviceId, onSelectDevice, }: {
|
|
2
3
|
deviceId: string;
|
|
3
|
-
|
|
4
|
+
onSelectDevice: (device: Device<CommonDeviceProperties>) => void;
|
|
5
|
+
}): JSX.Element | null;
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useNavigation } from '../../../lib/NavigationProvider.js';
|
|
3
2
|
import { isLockDevice } from '../../../lib/seam/devices/types.js';
|
|
4
3
|
import { useFakeDevice } from '../../../lib/seam/devices/use-device.js';
|
|
5
4
|
import { Button } from '../../../lib/ui/Button.js';
|
|
6
5
|
import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
|
|
7
6
|
import { getDeviceModel } from '../../../lib/ui/DeviceDetails/DeviceModel.js';
|
|
8
7
|
import { TextButton } from '../../../lib/ui/TextButton.js';
|
|
9
|
-
export
|
|
8
|
+
export function AccessCodeDevice({ deviceId, onSelectDevice, }) {
|
|
10
9
|
// TODO: Replace with `useDevice()` once ready
|
|
11
10
|
const { isLoading, device } = useFakeDevice({ device_id: deviceId });
|
|
12
|
-
|
|
13
|
-
// TODO: Do we want to return a skeleton loader here instead?
|
|
14
|
-
if (isLoading || !device || !isLockDevice(device)) {
|
|
11
|
+
if (isLoading || device == null || !isLockDevice(device)) {
|
|
15
12
|
return null;
|
|
16
13
|
}
|
|
17
14
|
const model = getDeviceModel(device);
|
|
18
15
|
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: () => {
|
|
19
|
-
|
|
16
|
+
onSelectDevice(device);
|
|
20
17
|
}, children: t.deviceDetails })] }), _jsx(Button, { children: "Unlock" })] }));
|
|
21
18
|
}
|
|
22
19
|
const t = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessCodeDevice.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeDetails/AccessCodeDevice.tsx"],"names":[],"mappings":";
|
|
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,IAAI,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACxD,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,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
2
3
|
import { AccessCodeKeyIcon } from '../../../lib/icons/AccessCodeKey.js';
|
|
3
|
-
import { useNavigation } from '../../../lib/NavigationProvider.js';
|
|
4
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';
|
|
7
8
|
import { TableBody } from '../../../lib/ui/Table/TableBody.js';
|
|
@@ -15,14 +16,18 @@ export function AccessCodeTable(props) {
|
|
|
15
16
|
const { accessCodes } = useAccessCodes({
|
|
16
17
|
device_id: props.deviceId,
|
|
17
18
|
});
|
|
18
|
-
const {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const { onBack } = props;
|
|
20
|
+
const [selectedAccessCode, selectAccessCode] = useState(null);
|
|
21
|
+
if (selectedAccessCode != null) {
|
|
22
|
+
return (_jsx(AccessCodeDetails, { accessCode: selectedAccessCode, onBack: () => {
|
|
23
|
+
selectAccessCode(null);
|
|
24
|
+
} }));
|
|
25
|
+
}
|
|
26
|
+
if (accessCodes == null) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
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: () => {
|
|
30
|
+
selectAccessCode(code);
|
|
26
31
|
}, 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))) })] }));
|
|
27
32
|
}
|
|
28
33
|
const t = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessCodeTable.js","sourceRoot":"","sources":["../../../src/lib/ui/AccessCodeTable/AccessCodeTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
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,IAAI,IAAI,EAAE;QAC9B,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,WAAW,IAAI,IAAI,EAAE;QACvB,OAAO,IAAI,CAAA;KACZ;IAED,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,GAAG,KAdrC,IAAI,CAAC,cAAc,CAef,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
|
|
@@ -10,8 +10,8 @@ import { TableTitle } from '../../../lib/ui/Table/TableTitle.js';
|
|
|
10
10
|
import { Caption } from '../../../lib/ui/typography/Caption.js';
|
|
11
11
|
import { Title } from '../../../lib/ui/typography/Title.js';
|
|
12
12
|
export function AccessCodeTableContent(props) {
|
|
13
|
-
const { accessCodes } = props;
|
|
14
|
-
return (_jsxs("div", { className: 'seam-access-code-table', children: [_jsx(ContentHeader, {}), _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))) })] }));
|
|
15
15
|
}
|
|
16
16
|
const t = {
|
|
17
17
|
accessCodes: 'Access Codes',
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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,GAAG,KAV7B,IAAI,CAAC,cAAc,CAWvB,CACZ,CAAC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,WAAW,EAAE,cAAc;CAC5B,CAAA"}
|
package/lib/ui/Button.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ interface ButtonProps {
|
|
|
4
4
|
size?: 'small' | 'medium' | 'large';
|
|
5
5
|
disabled?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function Button({ variant, children, size, disabled, }: ButtonProps):
|
|
7
|
+
export declare function Button({ variant, children, size, disabled, }: ButtonProps): JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type CommonDeviceProperties, type Device } from 'seamapi';
|
|
1
2
|
export interface DeviceDetailsProps {
|
|
2
|
-
|
|
3
|
+
device: Device<CommonDeviceProperties>;
|
|
4
|
+
onBack?: () => void;
|
|
3
5
|
}
|
|
4
6
|
export declare function DeviceDetails(props: DeviceDetailsProps): JSX.Element | null;
|
|
@@ -1,37 +1,35 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import {} from 'seamapi';
|
|
2
3
|
import { ChevronRightIcon } from '../../../lib/icons/ChevronRight.js';
|
|
3
|
-
import { useNavigation } from '../../../lib/NavigationProvider.js';
|
|
4
4
|
import { useAccessCodes } from '../../../lib/seam/access-codes/use-access-codes.js';
|
|
5
5
|
import { isLockDevice } from '../../../lib/seam/devices/types.js';
|
|
6
|
-
import {
|
|
6
|
+
import { AccessCodeTable } from '../../../lib/ui/AccessCodeTable/AccessCodeTable.js';
|
|
7
7
|
import { Button } from '../../../lib/ui/Button.js';
|
|
8
8
|
import { BatteryStatus } from '../../../lib/ui/device/BatteryStatus.js';
|
|
9
9
|
import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
|
|
10
10
|
import { OnlineStatus } from '../../../lib/ui/device/OnlineStatus.js';
|
|
11
11
|
import { DeviceModel } from '../../../lib/ui/DeviceDetails/DeviceModel.js';
|
|
12
12
|
import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
|
|
13
|
+
import useToggle from '../../../lib/use-toggle.js';
|
|
13
14
|
export function DeviceDetails(props) {
|
|
14
|
-
const {
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const { device, onBack } = props;
|
|
16
|
+
const [accessCodesOpen, toggleAccessCodesOpen] = useToggle();
|
|
17
|
+
const { isLoading, accessCodes } = useAccessCodes({
|
|
18
|
+
device_id: device.device_id,
|
|
17
19
|
});
|
|
18
|
-
|
|
19
|
-
device_id: deviceId,
|
|
20
|
-
});
|
|
21
|
-
const isLoading = isLoadingDevice || isLoadingAccessCodes;
|
|
22
|
-
const { show } = useNavigation();
|
|
23
|
-
if (isLoading || !device) {
|
|
20
|
+
if (isLoading) {
|
|
24
21
|
return null;
|
|
25
22
|
}
|
|
23
|
+
if (accessCodesOpen) {
|
|
24
|
+
return (_jsx(AccessCodeTable, { deviceId: device.device_id, onBack: toggleAccessCodesOpen }));
|
|
25
|
+
}
|
|
26
26
|
if (!isLockDevice(device)) {
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
const lockStatus = device.properties.locked ? t.locked : t.unlocked;
|
|
30
30
|
const accessCodeCount = accessCodes?.length;
|
|
31
31
|
const accessCodeLength = device.properties?.schlage_metadata?.access_code_length;
|
|
32
|
-
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: [_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: ()
|
|
33
|
-
show({ name: 'access_code_table', deviceId: device.device_id });
|
|
34
|
-
}, 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 })] })] })] }));
|
|
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: toggleAccessCodesOpen, 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 })] })] })] }));
|
|
35
33
|
}
|
|
36
34
|
function AccessCodeLength(props) {
|
|
37
35
|
const { accessCodeLength } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DeviceDetails.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
export function DeviceModel({ device }) {
|
|
3
3
|
const model = getDeviceModel(device);
|
|
4
|
-
if (
|
|
4
|
+
if (model == null) {
|
|
5
5
|
return null;
|
|
6
6
|
}
|
|
7
7
|
return (_jsxs(_Fragment, { children: [_jsxs("span", { className: 'seam-label', children: [t.model, ":"] }), ' ', _jsx("div", { className: 'seam-device-model', children: model })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceModel.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceModel.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAoB;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,
|
|
1
|
+
{"version":3,"file":"DeviceModel.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceDetails/DeviceModel.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAoB;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,8BACE,gBAAM,SAAS,EAAC,YAAY,aAAE,CAAC,CAAC,KAAK,SAAS,EAAC,GAAG,EAClD,cAAK,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAO,IAC/C,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,UAAU,GACC,EAAsB,EAAE;IACnC,OAAO,CACL,UAAU,EAAE,eAAe,EAAE,KAAK;QAClC,UAAU,EAAE,gBAAgB,EAAE,KAAK;QACnC,CAAC,CAAC,aAAa,CAChB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,GAAG;IACR,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,cAAc;CAC9B,CAAA"}
|
|
@@ -3,5 +3,5 @@ export type DeviceTableProps = Props & UseDevicesParams;
|
|
|
3
3
|
interface Props {
|
|
4
4
|
onBack?: () => void;
|
|
5
5
|
}
|
|
6
|
-
export declare function DeviceTable({ onBack, ...props }: DeviceTableProps):
|
|
6
|
+
export declare function DeviceTable({ onBack, ...props }: DeviceTableProps): JSX.Element | null;
|
|
7
7
|
export {};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useState } from 'react';
|
|
3
3
|
import { isLockDevice } from '../../../lib/seam/devices/types.js';
|
|
4
4
|
import { useDevices, } from '../../../lib/seam/devices/use-devices.js';
|
|
5
5
|
import { BatteryStatus } from '../../../lib/ui/device/BatteryStatus.js';
|
|
6
6
|
import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
|
|
7
7
|
import { LockStatus } from '../../../lib/ui/device/LockStatus.js';
|
|
8
8
|
import { OnlineStatus } from '../../../lib/ui/device/OnlineStatus.js';
|
|
9
|
+
import { DeviceDetails } from '../../../lib/ui/DeviceDetails/DeviceDetails.js';
|
|
9
10
|
import { getDeviceModel } from '../../../lib/ui/DeviceDetails/DeviceModel.js';
|
|
10
11
|
import { ContentHeader } from '../../../lib/ui/layout/ContentHeader.js';
|
|
11
12
|
import { TableBody } from '../../../lib/ui/Table/TableBody.js';
|
|
@@ -17,22 +18,31 @@ import { Caption } from '../../../lib/ui/typography/Caption.js';
|
|
|
17
18
|
import { Title } from '../../../lib/ui/typography/Title.js';
|
|
18
19
|
export function DeviceTable({ onBack, ...props }) {
|
|
19
20
|
const { devices, isLoading, isError, error } = useDevices(props);
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
21
|
+
const [selectedDevice, selectDevice] = useState(null);
|
|
22
|
+
if (selectedDevice != null) {
|
|
23
|
+
return (_jsx(DeviceDetails, { device: selectedDevice, onBack: () => {
|
|
24
|
+
selectDevice(null);
|
|
25
|
+
} }));
|
|
26
|
+
}
|
|
27
|
+
if (isLoading) {
|
|
22
28
|
return _jsx("p", { children: "..." });
|
|
23
|
-
|
|
29
|
+
}
|
|
30
|
+
if (isError) {
|
|
24
31
|
return _jsx("p", { children: error?.message });
|
|
25
|
-
|
|
32
|
+
}
|
|
33
|
+
if (devices == null) {
|
|
26
34
|
return null;
|
|
35
|
+
}
|
|
27
36
|
const deviceCount = devices.length;
|
|
28
|
-
return (_jsxs("div", { className: 'seam-device-table', children: [_jsx(ContentHeader, {}), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.devices, " ", _jsxs(Caption, { children: ["(", deviceCount, ")"] })] }) }), _jsx(TableBody, { children: devices.map((device) => (_jsx(DeviceRow, { device: device, onClick: () => {
|
|
29
|
-
|
|
37
|
+
return (_jsxs("div", { className: 'seam-device-table', children: [_jsx(ContentHeader, { onBack: onBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.devices, " ", _jsxs(Caption, { children: ["(", deviceCount, ")"] })] }) }), _jsx(TableBody, { children: devices.map((device) => (_jsx(DeviceRow, { device: device, onClick: () => {
|
|
38
|
+
selectDevice(device);
|
|
30
39
|
} }, device.device_id))) })] }));
|
|
31
40
|
}
|
|
32
41
|
function DeviceRow(props) {
|
|
33
42
|
const { device, onClick } = props;
|
|
34
|
-
if (!isLockDevice(device))
|
|
43
|
+
if (!isLockDevice(device)) {
|
|
35
44
|
return null;
|
|
45
|
+
}
|
|
36
46
|
const deviceModel = getDeviceModel(device) ?? t.unknownLock;
|
|
37
47
|
return (_jsxs(TableRow, { onClick: onClick, children: [_jsx(TableCell, { className: 'seam-image-cell', children: _jsx(DeviceImage, { device: device }) }), _jsxs(TableCell, { className: 'seam-body-cell', children: [_jsx(Title, { children: device.properties.name }), _jsxs("div", { className: 'seam-bottom', children: [_jsx("span", { className: 'seam-device-model', children: deviceModel }), _jsxs("div", { className: 'seam-device-statuses', children: [_jsx(OnlineStatus, { device: device }), _jsx(BatteryStatus, { device: device }), _jsx(LockStatus, { device: device })] })] })] })] }, device.device_id));
|
|
38
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceTable.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceTable/DeviceTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DeviceTable.js","sourceRoot":"","sources":["../../../src/lib/ui/DeviceTable/DeviceTable.tsx"],"names":[],"mappings":"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"}
|