@seamapi/react 1.22.0 → 1.24.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 (58) hide show
  1. package/README.md +1 -1
  2. package/dist/elements.js +4998 -4842
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +3 -0
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.min.css +1 -1
  7. package/dist/index.min.css.map +1 -1
  8. package/lib/icons/TriangleWarningOutline.d.ts +2 -0
  9. package/lib/icons/TriangleWarningOutline.js +3 -0
  10. package/lib/icons/TriangleWarningOutline.js.map +1 -0
  11. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.d.ts +2 -1
  12. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +3 -3
  13. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  14. package/lib/seam/components/AccessCodeDetails/AccessCodeDevice.d.ts +2 -1
  15. package/lib/seam/components/AccessCodeDetails/AccessCodeDevice.js +8 -6
  16. package/lib/seam/components/AccessCodeDetails/AccessCodeDevice.js.map +1 -1
  17. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.d.ts +10 -0
  18. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.js +29 -0
  19. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.js.map +1 -0
  20. package/lib/seam/components/AccessCodeTable/AccessCodeTable.d.ts +2 -1
  21. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +30 -10
  22. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  23. package/lib/seam/components/DeviceDetails/DeviceDetails.d.ts +2 -1
  24. package/lib/seam/components/DeviceDetails/DeviceDetails.js +2 -2
  25. package/lib/seam/components/DeviceDetails/DeviceDetails.js.map +1 -1
  26. package/lib/seam/components/DeviceDetails/LockDeviceDetails.d.ts +1 -0
  27. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js +4 -4
  28. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js.map +1 -1
  29. package/lib/seam/components/DeviceTable/DeviceHealthBar.d.ts +3 -2
  30. package/lib/seam/components/DeviceTable/DeviceHealthBar.js +23 -11
  31. package/lib/seam/components/DeviceTable/DeviceHealthBar.js.map +1 -1
  32. package/lib/seam/components/DeviceTable/DeviceRow.js +19 -1
  33. package/lib/seam/components/DeviceTable/DeviceRow.js.map +1 -1
  34. package/lib/seam/components/DeviceTable/DeviceTable.d.ts +2 -1
  35. package/lib/seam/components/DeviceTable/DeviceTable.js +7 -3
  36. package/lib/seam/components/DeviceTable/DeviceTable.js.map +1 -1
  37. package/lib/ui/device/OnlineStatus.js +14 -4
  38. package/lib/ui/device/OnlineStatus.js.map +1 -1
  39. package/lib/version.d.ts +1 -1
  40. package/lib/version.js +1 -1
  41. package/package.json +1 -1
  42. package/src/lib/icons/TriangleWarningOutline.tsx +18 -0
  43. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.element.ts +1 -0
  44. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +4 -0
  45. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDevice.tsx +23 -10
  46. package/src/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.tsx +68 -0
  47. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.element.ts +1 -0
  48. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +47 -6
  49. package/src/lib/seam/components/DeviceDetails/DeviceDetails.element.ts +1 -0
  50. package/src/lib/seam/components/DeviceDetails/DeviceDetails.tsx +3 -0
  51. package/src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx +14 -9
  52. package/src/lib/seam/components/DeviceTable/DeviceHealthBar.tsx +49 -19
  53. package/src/lib/seam/components/DeviceTable/DeviceRow.tsx +48 -9
  54. package/src/lib/seam/components/DeviceTable/DeviceTable.element.ts +1 -0
  55. package/src/lib/seam/components/DeviceTable/DeviceTable.tsx +17 -2
  56. package/src/lib/ui/device/OnlineStatus.tsx +23 -7
  57. package/src/lib/version.ts +1 -1
  58. package/src/styles/_device-table.scss +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"LockDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LockDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  /// <reference types="react" />
2
2
  import type { UseDevicesData } from '../../../../lib/seam/devices/use-devices.js';
3
+ export type AccountFilter = 'account_issues';
3
4
  export type DeviceFilter = 'device_issues';
4
5
  interface DeviceHealthBarProps {
5
6
  devices: Array<UseDevicesData[number]>;
6
- filter: DeviceFilter | null;
7
- onFilterSelect: (filter: DeviceFilter | null) => void;
7
+ filter: AccountFilter | DeviceFilter | null;
8
+ onFilterSelect: (filter: AccountFilter | DeviceFilter | null) => void;
8
9
  }
9
10
  export declare function DeviceHealthBar({ devices, filter, onFilterSelect, }: DeviceHealthBarProps): JSX.Element;
10
11
  export {};
@@ -1,28 +1,40 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CheckIcon } from '../../../../lib/icons/Check.js';
3
3
  import { ExclamationCircleOutlineIcon } from '../../../../lib/icons/ExclamationCircleOutline.js';
4
+ import { OnlineStatusAccountOfflineIcon } from '../../../../lib/icons/OnlineStatusAccountOffline.js';
4
5
  import { TableFilterBar } from '../../../../lib/ui/Table/TableFilterBar/TableFilterBar.js';
5
6
  import { TableFilterItem } from '../../../../lib/ui/Table/TableFilterBar/TableFilterItem.js';
6
7
  export function DeviceHealthBar({ devices, filter, onFilterSelect, }) {
7
- const erroredDevices = devices.filter((device) => device.errors.length > 0);
8
- const issueCount = erroredDevices.length;
8
+ const erroredAccounts = devices.filter((device) => {
9
+ return (device.errors.filter((error) => 'is_connected_account_error' in error)
10
+ .length > 0);
11
+ });
12
+ const erroredDevices = devices.filter((device) => {
13
+ return (device.errors.filter((error) => 'is_device_error' in error).length > 0);
14
+ });
15
+ const accountIssueCount = erroredAccounts.length;
16
+ const deviceIssueCount = erroredDevices.length;
9
17
  const toggle = (target) => () => {
10
18
  const newFilter = target === filter ? null : target;
11
19
  onFilterSelect(newFilter);
12
20
  };
13
- const isPlural = issueCount === 0 || issueCount > 1;
14
- const label = isPlural
15
- ? `${issueCount} ${t.deviceIssues}`
16
- : `${issueCount} ${t.deviceIssue}`;
17
- if (issueCount === 0) {
18
- return (_jsx(TableFilterBar, { filterCleared: true, children: _jsxs(TableFilterItem, { children: [_jsx(CheckIcon, {}), t.devicesOk] }) }));
21
+ const deviceLabel = deviceIssueCount > 0
22
+ ? `${deviceIssueCount} ${t.deviceIssues}`
23
+ : `${deviceIssueCount} ${t.deviceIssue}`;
24
+ const accountLabel = accountIssueCount > 0
25
+ ? `${accountIssueCount} ${t.accountIssues}`
26
+ : `${accountIssueCount} ${t.accountIssue}`;
27
+ if (accountIssueCount === 0 && deviceIssueCount === 0) {
28
+ return (_jsx(TableFilterBar, { filterCleared: true, children: _jsxs(TableFilterItem, { children: [_jsx(CheckIcon, {}), t.devicesAndAccountsOk] }) }));
19
29
  }
20
- return (_jsx(TableFilterBar, { filterCleared: filter == null, onFilterClear: () => {
30
+ return (_jsxs(TableFilterBar, { filterCleared: filter == null, onFilterClear: () => {
21
31
  onFilterSelect(null);
22
- }, children: _jsxs(TableFilterItem, { onClick: toggle('device_issues'), selected: filter === 'device_issues', children: [_jsx(ExclamationCircleOutlineIcon, {}), label] }) }));
32
+ }, children: [deviceIssueCount > 0 && (_jsxs(TableFilterItem, { onClick: toggle('device_issues'), selected: filter === 'device_issues', children: [_jsx(ExclamationCircleOutlineIcon, {}), deviceLabel] })), accountIssueCount > 0 && (_jsxs(TableFilterItem, { onClick: toggle('account_issues'), selected: filter === 'account_issues', children: [_jsx(OnlineStatusAccountOfflineIcon, {}), accountLabel] }))] }));
23
33
  }
24
34
  const t = {
25
- devicesOk: 'Devices OK',
35
+ devicesAndAccountsOk: 'Devices & accounts OK',
36
+ accountIssue: 'account issue',
37
+ accountIssues: 'account issues',
26
38
  deviceIssue: 'device issue',
27
39
  deviceIssues: 'device issues',
28
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceHealthBar.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceHealthBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAA;AAEpF,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAA;AAUhF,MAAM,UAAU,eAAe,CAAC,EAC9B,OAAO,EACP,MAAM,EACN,cAAc,GACO;IACrB,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3E,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAA;IAExC,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,GAAG,EAAE;QAC5C,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;QACnD,cAAc,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,UAAU,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC,YAAY,EAAE;QACnC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAEpC,IAAI,UAAU,KAAK,CAAC,EAAE;QACpB,OAAO,CACL,KAAC,cAAc,IAAC,aAAa,kBAC3B,MAAC,eAAe,eACd,KAAC,SAAS,KAAG,EACZ,CAAC,CAAC,SAAS,IACI,GACH,CAClB,CAAA;KACF;IAED,OAAO,CACL,KAAC,cAAc,IACb,aAAa,EAAE,MAAM,IAAI,IAAI,EAC7B,aAAa,EAAE,GAAG,EAAE;YAClB,cAAc,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC,YAED,MAAC,eAAe,IACd,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,EAChC,QAAQ,EAAE,MAAM,KAAK,eAAe,aAEpC,KAAC,4BAA4B,KAAG,EAC/B,KAAK,IACU,GACH,CAClB,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;CAC9B,CAAA"}
1
+ {"version":3,"file":"DeviceHealthBar.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceHealthBar.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
2
3
  import { BatteryStatus } from '../../../../lib/ui/device/BatteryStatus.js';
3
4
  import { DeviceImage } from '../../../../lib/ui/device/DeviceImage.js';
4
5
  import { LockStatus } from '../../../../lib/ui/device/LockStatus.js';
@@ -7,6 +8,23 @@ import { TableCell } from '../../../../lib/ui/Table/TableCell.js';
7
8
  import { TableRow } from '../../../../lib/ui/Table/TableRow.js';
8
9
  import { Title } from '../../../../lib/ui/typography/Title.js';
9
10
  export function DeviceRow({ device, onClick, }) {
10
- 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, { className: 'seam-truncated-text', children: device.properties.name }), _jsxs("div", { className: 'seam-bottom', children: [_jsx("span", { className: 'seam-device-model', children: device.properties.model.display_name }), _jsxs("div", { className: 'seam-device-statuses', children: [_jsx(OnlineStatus, { device: device }), _jsx(BatteryStatus, { device: device }), _jsx(LockStatus, { device: device })] })] })] })] }, device.device_id));
11
+ const opacityClass = isAccountOffline(device) || isDeviceOffline(device)
12
+ ? 'seam-offline-fade'
13
+ : undefined;
14
+ return (_jsxs(TableRow, { onClick: onClick, children: [_jsx(TableCell, { className: classNames('seam-image-cell', opacityClass), children: _jsx(DeviceImage, { device: device }) }), _jsxs(TableCell, { className: 'seam-body-cell', children: [_jsx(Title, { className: classNames('seam-truncated-text', opacityClass), children: device.properties.name }), _jsxs("div", { className: 'seam-bottom', children: [_jsx("span", { className: classNames('seam-device-model', opacityClass), children: device.properties.model.display_name }), _jsx(DeviceStatuses, { device: device })] })] })] }));
11
15
  }
16
+ function DeviceStatuses({ device }) {
17
+ if (isAccountOffline(device) || isDeviceOffline(device)) {
18
+ return (_jsx("div", { className: 'seam-device-statuses', children: _jsx(OnlineStatus, { device: device }) }));
19
+ }
20
+ return (_jsxs("div", { className: 'seam-device-statuses', children: [_jsx(OnlineStatus, { device: device }), _jsx(BatteryStatus, { device: device }), _jsx(LockStatus, { device: device })] }));
21
+ }
22
+ const isAccountOffline = (device) => {
23
+ return (device.errors.filter((error) => error.error_code === 'account_disconnected')
24
+ .length > 0);
25
+ };
26
+ const isDeviceOffline = (device) => {
27
+ return (device.errors.filter((error) => error.error_code === 'device_disconnected')
28
+ .length > 0);
29
+ };
12
30
  //# sourceMappingURL=DeviceRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceRow.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceRow.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAalD,MAAM,UAAU,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,GACQ;IACf,OAAO,CACL,MAAC,QAAQ,IAAwB,OAAO,EAAE,OAAO,aAC/C,KAAC,SAAS,IAAC,SAAS,EAAC,iBAAiB,YACpC,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,GACrB,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB,YAAE,MAAM,CAAC,UAAU,CAAC,IAAI,GAAS,EACvE,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAM,SAAS,EAAC,mBAAmB,YAChC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,GAChC,EACP,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,EAChC,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,IAC1B,IACF,IACI,KAhBC,MAAM,CAAC,SAAS,CAiBpB,CACZ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"DeviceRow.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceRow.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAMnC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAalD,MAAM,UAAU,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,GACQ;IACf,MAAM,YAAY,GAChB,gBAAgB,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC;QACjD,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,SAAS,CAAA;IACf,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,aACxB,KAAC,SAAS,IAAC,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,YAC/D,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,GACrB,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,IAAC,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE,YAAY,CAAC,YAC9D,MAAM,CAAC,UAAU,CAAC,IAAI,GACjB,EACR,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAM,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,YAAY,CAAC,YAC3D,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,GAChC,EACP,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,IAC9B,IACI,IACH,CACZ,CAAA;AACH,CAAC;AAMD,SAAS,cAAc,CAAC,EAAE,MAAM,EAAuB;IACrD,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;QACvD,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,YACnC,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,GAC5B,CACP,CAAA;KACF;IACD,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,EAChC,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,IAC1B,CACP,CAAA;AACH,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAA8B,EAAW,EAAE;IACnE,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,sBAAsB,CAAC;SACzE,MAAM,GAAG,CAAC,CACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,MAA8B,EAAW,EAAE;IAClE,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,qBAAqB,CAAC;SACxE,MAAM,GAAG,CAAC,CACd,CAAA;AACH,CAAC,CAAA"}
@@ -4,6 +4,7 @@ type Device = UseDevicesData[number];
4
4
  export interface DeviceTableProps {
5
5
  deviceIds?: string[];
6
6
  connectedAccountIds?: string[];
7
+ disableLockUnlock?: boolean;
7
8
  deviceFilter?: (device: Device, searchInputValue: string) => boolean;
8
9
  deviceComparator?: (deviceA: Device, deviceB: Device) => number;
9
10
  onDeviceClick?: (deviceId: string) => void;
@@ -11,5 +12,5 @@ export interface DeviceTableProps {
11
12
  onBack?: () => void;
12
13
  className?: string;
13
14
  }
14
- export declare function DeviceTable({ deviceIds, connectedAccountIds, onDeviceClick, preventDefaultOnDeviceClick, onBack, deviceFilter, deviceComparator, className, }?: DeviceTableProps): JSX.Element;
15
+ export declare function DeviceTable({ deviceIds, connectedAccountIds, disableLockUnlock, onDeviceClick, preventDefaultOnDeviceClick, onBack, deviceFilter, deviceComparator, className, }?: DeviceTableProps): JSX.Element;
15
16
  export {};
@@ -20,7 +20,7 @@ const defaultDeviceFilter = (device, searchInputValue) => {
20
20
  return true;
21
21
  return new RegExp(value, 'i').test(device.properties.name ?? '');
22
22
  };
23
- export function DeviceTable({ deviceIds, connectedAccountIds, onDeviceClick = () => { }, preventDefaultOnDeviceClick = false, onBack, deviceFilter = defaultDeviceFilter, deviceComparator = compareByCreatedAtDesc, className, } = {}) {
23
+ export function DeviceTable({ deviceIds, connectedAccountIds, disableLockUnlock = false, onDeviceClick = () => { }, preventDefaultOnDeviceClick = false, onBack, deviceFilter = defaultDeviceFilter, deviceComparator = compareByCreatedAtDesc, className, } = {}) {
24
24
  const { devices, isLoading, isError, error } = useDevices({
25
25
  device_ids: deviceIds,
26
26
  connected_account_ids: connectedAccountIds,
@@ -40,7 +40,7 @@ export function DeviceTable({ deviceIds, connectedAccountIds, onDeviceClick = ()
40
40
  if (selectedDeviceId != null) {
41
41
  return (_jsx(DeviceDetails, { className: className, deviceId: selectedDeviceId, onBack: () => {
42
42
  setSelectedDeviceId(null);
43
- } }));
43
+ }, disableLockUnlock: disableLockUnlock }));
44
44
  }
45
45
  if (isLoading) {
46
46
  return _jsx("p", { className: className, children: "..." });
@@ -60,8 +60,12 @@ function Content(props) {
60
60
  if (filter === null) {
61
61
  return true;
62
62
  }
63
+ if (filter === 'account_issues') {
64
+ return (device.errors.filter((error) => 'is_connected_account_error' in error)
65
+ .length > 0);
66
+ }
63
67
  if (filter === 'device_issues') {
64
- return device.errors.length > 0;
68
+ return (device.errors.filter((error) => 'is_device_error' in error).length > 0);
65
69
  }
66
70
  return true;
67
71
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceTable.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeviceTable.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceTable/DeviceTable.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,20 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { OnlineStatusAccountOfflineIcon } from '../../../lib/icons/OnlineStatusAccountOffline.js';
2
3
  import { OnlineStatusDeviceOfflineIcon } from '../../../lib/icons/OnlineStatusDeviceOffline.js';
3
4
  import { OnlineStatusOnlineIcon } from '../../../lib/icons/OnlineStatusOnline.js';
4
5
  export function OnlineStatus(props) {
5
- const { device: { properties: { online }, }, } = props;
6
- return (_jsx("div", { className: 'seam-online-status', children: _jsx(Content, { isOnline: online }) }));
6
+ const { device } = props;
7
+ const isAccountOffline = device.errors.filter((error) => error.error_code === 'account_disconnected')
8
+ .length > 0;
9
+ if (isAccountOffline) {
10
+ return _jsx(AccountOfflineContent, {});
11
+ }
12
+ return (_jsxs("div", { className: 'seam-online-status', children: [isAccountOffline && _jsx(OnlineStatusAccountOfflineIcon, {}), _jsx(DeviceOnlineContent, { isOnline: device.properties.online })] }));
13
+ }
14
+ function AccountOfflineContent() {
15
+ return (_jsxs("div", { className: 'seam-online-status', children: [_jsx(OnlineStatusAccountOfflineIcon, {}), _jsx("span", { className: 'seam-text-danger', children: t.accountOffline })] }));
7
16
  }
8
- function Content(props) {
17
+ function DeviceOnlineContent(props) {
9
18
  const { isOnline } = props;
10
19
  if (isOnline) {
11
20
  return (_jsxs(_Fragment, { children: [_jsx(OnlineStatusOnlineIcon, {}), _jsx("span", { className: 'seam-status-text', children: t.online })] }));
@@ -14,6 +23,7 @@ function Content(props) {
14
23
  }
15
24
  const t = {
16
25
  online: 'Online',
26
+ accountOffline: 'Account Offline',
17
27
  deviceOffline: 'Device Offline',
18
28
  };
19
29
  //# sourceMappingURL=OnlineStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/lib/ui/device/OnlineStatus.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAMxE,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EACJ,MAAM,EAAE,EACN,UAAU,EAAE,EAAE,MAAM,EAAE,GACvB,GACF,GAAG,KAAK,CAAA;IAET,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,KAAC,OAAO,IAAC,QAAQ,EAAE,MAAM,GAAI,GACzB,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAA4B;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC1B,IAAI,QAAQ,EAAE;QACZ,OAAO,CACL,8BACE,KAAC,sBAAsB,KAAG,EAC1B,eAAM,SAAS,EAAC,kBAAkB,YAAE,CAAC,CAAC,MAAM,GAAQ,IACnD,CACJ,CAAA;KACF;IAED,OAAO,CACL,8BACE,KAAC,6BAA6B,KAAG,EACjC,eAAM,SAAS,EAAC,kBAAkB,YAAE,CAAC,CAAC,aAAa,GAAQ,IAC1D,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,gBAAgB;CAChC,CAAA"}
1
+ {"version":3,"file":"OnlineStatus.js","sourceRoot":"","sources":["../../../src/lib/ui/device/OnlineStatus.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAA;AACxF,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAA;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAMxE,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAExB,MAAM,gBAAgB,GACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,sBAAsB,CAAC;SACzE,MAAM,GAAG,CAAC,CAAA;IAEf,IAAI,gBAAgB,EAAE;QACpB,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACjC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,aAChC,gBAAgB,IAAI,KAAC,8BAA8B,KAAG,EACvD,KAAC,mBAAmB,IAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAI,IACvD,CACP,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,aACjC,KAAC,8BAA8B,KAAG,EAClC,eAAM,SAAS,EAAC,kBAAkB,YAAE,CAAC,CAAC,cAAc,GAAQ,IACxD,CACP,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA4B;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC1B,IAAI,QAAQ,EAAE;QACZ,OAAO,CACL,8BACE,KAAC,sBAAsB,KAAG,EAC1B,eAAM,SAAS,EAAC,kBAAkB,YAAE,CAAC,CAAC,MAAM,GAAQ,IACnD,CACJ,CAAA;KACF;IAED,OAAO,CACL,8BACE,KAAC,6BAA6B,KAAG,EACjC,eAAM,SAAS,EAAC,kBAAkB,YAAE,CAAC,CAAC,aAAa,GAAQ,IAC1D,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,iBAAiB;IACjC,aAAa,EAAE,gBAAgB;CAChC,CAAA"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const seamapiReactVersion = "1.22.0";
1
+ declare const seamapiReactVersion = "1.24.0";
2
2
  export default seamapiReactVersion;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.22.0';
1
+ const seamapiReactVersion = '1.24.0';
2
2
  export default seamapiReactVersion;
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/react",
3
- "version": "1.22.0",
3
+ "version": "1.24.0",
4
4
  "description": "Seam Components.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -0,0 +1,18 @@
1
+ import type { SVGProps } from 'react'
2
+ export const TriangleWarningOutlineIcon = (
3
+ props: SVGProps<SVGSVGElement>
4
+ ): JSX.Element => (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width={24}
8
+ height={24}
9
+ fill='none'
10
+ {...props}
11
+ >
12
+ <path
13
+ fill='#FF9800'
14
+ d='m12 6.49 7.53 13.01H4.47L12 6.49Zm0-3.99-11 19h22l-11-19Z'
15
+ />
16
+ <path fill='#FF9800' d='M13 16.5h-2v2h2v-2ZM13 10.5h-2v5h2v-5Z' />
17
+ </svg>
18
+ )
@@ -6,6 +6,7 @@ export const name = 'seam-access-code-details'
6
6
 
7
7
  export const props: ElementProps<AccessCodeDetailsProps> = {
8
8
  accessCodeId: 'string',
9
+ disableLockUnlock: 'boolean',
9
10
  onBack: 'function',
10
11
  className: 'string',
11
12
  }
@@ -18,12 +18,14 @@ import { useIsDateInPast } from 'lib/ui/use-is-date-in-past.js'
18
18
  export interface AccessCodeDetailsProps {
19
19
  accessCodeId: string
20
20
  onBack?: () => void
21
+ disableLockUnlock?: boolean
21
22
  className?: string
22
23
  }
23
24
 
24
25
  export function AccessCodeDetails({
25
26
  accessCodeId,
26
27
  onBack,
28
+ disableLockUnlock = false,
27
29
  className,
28
30
  }: AccessCodeDetailsProps): JSX.Element | null {
29
31
  const { accessCode } = useAccessCode(accessCodeId)
@@ -43,6 +45,7 @@ export function AccessCodeDetails({
43
45
  onBack={() => {
44
46
  selectDevice(null)
45
47
  }}
48
+ disableLockUnlock={disableLockUnlock}
46
49
  />
47
50
  )
48
51
  }
@@ -80,6 +83,7 @@ export function AccessCodeDetails({
80
83
 
81
84
  <AccessCodeDevice
82
85
  deviceId={accessCode.device_id}
86
+ disableLockUnlock={disableLockUnlock}
83
87
  onSelectDevice={selectDevice}
84
88
  />
85
89
  </div>
@@ -8,12 +8,16 @@ import { TextButton } from 'lib/ui/TextButton.js'
8
8
 
9
9
  export function AccessCodeDevice({
10
10
  deviceId,
11
+ disableLockUnlock,
11
12
  onSelectDevice,
12
13
  }: {
13
14
  deviceId: string
15
+ disableLockUnlock: boolean
14
16
  onSelectDevice: (deviceId: string) => void
15
17
  }): JSX.Element | null {
16
- const { isLoading, device } = useDevice({ device_id: deviceId })
18
+ const { isLoading, device } = useDevice({
19
+ device_id: deviceId,
20
+ })
17
21
 
18
22
  if (isLoading) {
19
23
  return null
@@ -27,14 +31,21 @@ export function AccessCodeDevice({
27
31
  return null
28
32
  }
29
33
 
30
- return <Content device={device} onSelectDevice={onSelectDevice} />
34
+ return (
35
+ <Content
36
+ device={device}
37
+ disableLockUnlock={disableLockUnlock}
38
+ onSelectDevice={onSelectDevice}
39
+ />
40
+ )
31
41
  }
32
42
 
33
43
  function Content(props: {
34
44
  device: LockDevice
45
+ disableLockUnlock: boolean
35
46
  onSelectDevice: (deviceId: string) => void
36
47
  }): JSX.Element {
37
- const { device, onSelectDevice } = props
48
+ const { device, disableLockUnlock, onSelectDevice } = props
38
49
  const toggleLock = useToggleLock(device)
39
50
 
40
51
  const toggleLockLabel = device.properties.locked ? t.unlock : t.lock
@@ -54,13 +65,15 @@ function Content(props: {
54
65
  {t.deviceDetails}
55
66
  </TextButton>
56
67
  </div>
57
- <Button
58
- onClick={() => {
59
- toggleLock.mutate()
60
- }}
61
- >
62
- {toggleLockLabel}
63
- </Button>
68
+ {!disableLockUnlock && (
69
+ <Button
70
+ onClick={() => {
71
+ toggleLock.mutate()
72
+ }}
73
+ >
74
+ {toggleLockLabel}
75
+ </Button>
76
+ )}
64
77
  </div>
65
78
  )
66
79
  }
@@ -0,0 +1,68 @@
1
+ import { CheckIcon } from 'lib/icons/Check.js'
2
+ import { ExclamationCircleOutlineIcon } from 'lib/icons/ExclamationCircleOutline.js'
3
+ import type { UseAccessCodesData } from 'lib/seam/access-codes/use-access-codes.js'
4
+ import { TableFilterBar } from 'lib/ui/Table/TableFilterBar/TableFilterBar.js'
5
+ import { TableFilterItem } from 'lib/ui/Table/TableFilterBar/TableFilterItem.js'
6
+
7
+ export type AccessCodeFilter = 'access_code_issues'
8
+
9
+ interface AccessCodeHealthBarProps {
10
+ accessCodes: Array<UseAccessCodesData[number]>
11
+ filter: AccessCodeFilter | null
12
+ onFilterSelect: (filter: AccessCodeFilter | null) => void
13
+ }
14
+
15
+ export function AccessCodeHealthBar({
16
+ accessCodes,
17
+ filter,
18
+ onFilterSelect,
19
+ }: AccessCodeHealthBarProps): JSX.Element {
20
+ const codesWithIssues = accessCodes.filter(
21
+ ({ errors, warnings }) => errors.length > 0 || warnings.length > 0
22
+ )
23
+ const issueCount = codesWithIssues.length
24
+
25
+ const toggle = (target: AccessCodeFilter) => () => {
26
+ const newFilter = target === filter ? null : target
27
+ onFilterSelect(newFilter)
28
+ }
29
+
30
+ const isPlural = issueCount === 0 || issueCount > 1
31
+ const label = isPlural
32
+ ? `${issueCount} ${t.accessCodeIssues}`
33
+ : `${issueCount} ${t.accessCodeIssue}`
34
+
35
+ if (issueCount === 0) {
36
+ return (
37
+ <TableFilterBar filterCleared>
38
+ <TableFilterItem>
39
+ <CheckIcon />
40
+ {t.accessCodesOk}
41
+ </TableFilterItem>
42
+ </TableFilterBar>
43
+ )
44
+ }
45
+
46
+ return (
47
+ <TableFilterBar
48
+ filterCleared={filter == null}
49
+ onFilterClear={() => {
50
+ onFilterSelect(null)
51
+ }}
52
+ >
53
+ <TableFilterItem
54
+ onClick={toggle('access_code_issues')}
55
+ selected={filter === 'access_code_issues'}
56
+ >
57
+ <ExclamationCircleOutlineIcon />
58
+ {label}
59
+ </TableFilterItem>
60
+ </TableFilterBar>
61
+ )
62
+ }
63
+
64
+ const t = {
65
+ accessCodesOk: 'Access codes OK',
66
+ accessCodeIssue: 'access code issue',
67
+ accessCodeIssues: 'access code issues',
68
+ }
@@ -6,6 +6,7 @@ export const name = 'seam-access-code-table'
6
6
 
7
7
  export const props: ElementProps<AccessCodeTableProps> = {
8
8
  deviceId: 'string',
9
+ disableLockUnlock: 'boolean',
9
10
  accessCodeFilter: 'function',
10
11
  accessCodeComparator: 'function',
11
12
  onAccessCodeClick: 'function',
@@ -5,11 +5,16 @@ import { compareByCreatedAtDesc } from 'lib/dates.js'
5
5
  import { AccessCodeKeyIcon } from 'lib/icons/AccessCodeKey.js'
6
6
  import { CopyIcon } from 'lib/icons/Copy.js'
7
7
  import { ExclamationCircleOutlineIcon } from 'lib/icons/ExclamationCircleOutline.js'
8
+ import { TriangleWarningOutlineIcon } from 'lib/icons/TriangleWarningOutline.js'
8
9
  import {
9
10
  useAccessCodes,
10
11
  type UseAccessCodesData,
11
12
  } from 'lib/seam/access-codes/use-access-codes.js'
12
13
  import { AccessCodeDetails } from 'lib/seam/components/AccessCodeDetails/AccessCodeDetails.js'
14
+ import {
15
+ type AccessCodeFilter,
16
+ AccessCodeHealthBar,
17
+ } from 'lib/seam/components/AccessCodeTable/AccessCodeHealthBar.js'
13
18
  import { CodeDetails } from 'lib/seam/components/AccessCodeTable/CodeDetails.js'
14
19
  import { copyToClipboard } from 'lib/ui/clipboard.js'
15
20
  import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
@@ -27,6 +32,7 @@ import { Title } from 'lib/ui/typography/Title.js'
27
32
 
28
33
  export interface AccessCodeTableProps {
29
34
  deviceId: string
35
+ disableLockUnlock?: boolean
30
36
  accessCodeFilter?: (
31
37
  accessCode: AccessCode,
32
38
  searchInputValue: string
@@ -49,11 +55,16 @@ const defaultAccessCodeFilter = (
49
55
  ): boolean => {
50
56
  const value = searchInputValue.trim()
51
57
  if (value === '') return true
52
- return new RegExp(value, 'i').test(accessCode.name ?? '')
58
+ const searchRegex = new RegExp(value, 'i')
59
+ return (
60
+ searchRegex.test(accessCode?.name ?? '') ||
61
+ searchRegex.test(accessCode?.code ?? '')
62
+ )
53
63
  }
54
64
 
55
65
  export function AccessCodeTable({
56
66
  deviceId,
67
+ disableLockUnlock = false,
57
68
  onAccessCodeClick = () => {},
58
69
  preventDefaultOnAccessCodeClick = false,
59
70
  onBack,
@@ -100,6 +111,7 @@ export function AccessCodeTable({
100
111
  onBack={() => {
101
112
  setSelectedAccessCodeId(null)
102
113
  }}
114
+ disableLockUnlock={disableLockUnlock}
103
115
  />
104
116
  )
105
117
  }
@@ -132,6 +144,21 @@ function Content(props: {
132
144
  onAccessCodeClick: (accessCodeId: string) => void
133
145
  }): JSX.Element {
134
146
  const { accessCodes, onAccessCodeClick } = props
147
+ const [filter, setFilter] = useState<AccessCodeFilter | null>(null)
148
+
149
+ const filteredAccessCodes = useMemo(() => {
150
+ if (filter === null) {
151
+ return accessCodes
152
+ }
153
+
154
+ if (filter === 'access_code_issues') {
155
+ return accessCodes.filter((accessCode) => {
156
+ return accessCode.errors.length > 0 || accessCode.warnings.length > 0
157
+ })
158
+ }
159
+
160
+ return accessCodes
161
+ }, [accessCodes, filter])
135
162
 
136
163
  if (accessCodes.length === 0) {
137
164
  return <EmptyPlaceholder>{t.noAccessCodesMessage}</EmptyPlaceholder>
@@ -139,7 +166,12 @@ function Content(props: {
139
166
 
140
167
  return (
141
168
  <>
142
- {accessCodes.map((accessCode) => (
169
+ <AccessCodeHealthBar
170
+ accessCodes={accessCodes}
171
+ filter={filter}
172
+ onFilterSelect={setFilter}
173
+ />
174
+ {filteredAccessCodes.map((accessCode) => (
143
175
  <AccessCodeRow
144
176
  key={accessCode.access_code_id}
145
177
  accessCode={accessCode}
@@ -158,14 +190,18 @@ function AccessCodeRow(props: {
158
190
  }): JSX.Element {
159
191
  const { onClick, accessCode } = props
160
192
 
161
- const errorCount = accessCode.errors?.length ?? 0
193
+ const errorCount = accessCode.errors.length
194
+ const warningCount = accessCode.warnings.length
162
195
  const isPlural = errorCount === 0 || errorCount > 1
163
- const issueIconTitle = isPlural
196
+ const errorIconTitle = isPlural
164
197
  ? `${errorCount} ${t.codeIssues}`
165
198
  : `${errorCount} ${t.codeIssue}`
199
+ const warningIconTitle = isPlural
200
+ ? `${warningCount} ${t.codeIssues}`
201
+ : `${warningCount} ${t.codeIssue}`
166
202
 
167
203
  return (
168
- <TableRow key={accessCode.access_code_id} onClick={onClick}>
204
+ <TableRow onClick={onClick}>
169
205
  <TableCell className='seam-icon-cell'>
170
206
  <div>
171
207
  <AccessCodeKeyIcon />
@@ -177,10 +213,15 @@ function AccessCodeRow(props: {
177
213
  </TableCell>
178
214
  <TableCell className='seam-action-cell'>
179
215
  {errorCount > 0 && (
180
- <div className='seam-code-issue-icon-wrap' title={issueIconTitle}>
216
+ <div className='seam-code-issue-icon-wrap' title={errorIconTitle}>
181
217
  <ExclamationCircleOutlineIcon />
182
218
  </div>
183
219
  )}
220
+ {errorCount === 0 && warningCount > 0 && (
221
+ <div className='seam-code-issue-icon-wrap' title={warningIconTitle}>
222
+ <TriangleWarningOutlineIcon />
223
+ </div>
224
+ )}
184
225
  <MoreActionsMenu
185
226
  menuProps={{
186
227
  backgroundProps: {
@@ -6,6 +6,7 @@ export const name = 'seam-device-details'
6
6
 
7
7
  export const props: ElementProps<DeviceDetailsProps> = {
8
8
  deviceId: 'string',
9
+ disableLockUnlock: 'boolean',
9
10
  onBack: 'function',
10
11
  className: 'string',
11
12
  }
@@ -5,12 +5,14 @@ import { useDevice } from 'lib/seam/devices/use-device.js'
5
5
 
6
6
  export interface DeviceDetailsProps {
7
7
  deviceId: string
8
+ disableLockUnlock?: boolean
8
9
  onBack?: () => void
9
10
  className?: string
10
11
  }
11
12
 
12
13
  export function DeviceDetails({
13
14
  deviceId,
15
+ disableLockUnlock = false,
14
16
  onBack,
15
17
  className,
16
18
  }: DeviceDetailsProps): JSX.Element | null {
@@ -27,6 +29,7 @@ export function DeviceDetails({
27
29
  <LockDeviceDetails
28
30
  className={className}
29
31
  device={device}
32
+ disableLockUnlock={disableLockUnlock}
30
33
  onBack={onBack}
31
34
  />
32
35
  )