@seamapi/react 1.64.0 → 1.65.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 (78) hide show
  1. package/README.md +16 -4
  2. package/dist/elements.js +6684 -6581
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +2 -4
  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/seam/components/AccessCodeDetails/AccessCodeDetails.d.ts +1 -1
  9. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +11 -13
  10. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  11. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.d.ts +4 -1
  12. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.js +3 -2
  13. package/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.js.map +1 -1
  14. package/lib/seam/components/AccessCodeTable/AccessCodeTable.d.ts +1 -1
  15. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +15 -11
  16. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  17. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.d.ts +1 -1
  18. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js +2 -2
  19. package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map +1 -1
  20. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.d.ts +1 -1
  21. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js +12 -7
  22. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js.map +1 -1
  23. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js +11 -4
  24. package/lib/seam/components/DeviceDetails/LockDeviceDetails.js.map +1 -1
  25. package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.d.ts +1 -1
  26. package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js +2 -2
  27. package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js.map +1 -1
  28. package/lib/seam/components/DeviceTable/DeviceHealthBar.d.ts +3 -1
  29. package/lib/seam/components/DeviceTable/DeviceHealthBar.js +4 -3
  30. package/lib/seam/components/DeviceTable/DeviceHealthBar.js.map +1 -1
  31. package/lib/seam/components/DeviceTable/DeviceTable.d.ts +1 -1
  32. package/lib/seam/components/DeviceTable/DeviceTable.js +14 -9
  33. package/lib/seam/components/DeviceTable/DeviceTable.js.map +1 -1
  34. package/lib/seam/components/SupportedDeviceTable/use-device-model.d.ts +7 -0
  35. package/lib/seam/components/SupportedDeviceTable/use-device-model.js +18 -0
  36. package/lib/seam/components/SupportedDeviceTable/use-device-model.js.map +1 -0
  37. package/lib/seam/components/SupportedDeviceTable/use-device-models.d.ts +7 -0
  38. package/lib/seam/components/SupportedDeviceTable/use-device-models.js +17 -0
  39. package/lib/seam/components/SupportedDeviceTable/use-device-models.js.map +1 -0
  40. package/lib/seam/components/SupportedDeviceTable/use-manufacturer.d.ts +7 -0
  41. package/lib/seam/components/SupportedDeviceTable/use-manufacturer.js +18 -0
  42. package/lib/seam/components/SupportedDeviceTable/use-manufacturer.js.map +1 -0
  43. package/lib/seam/components/SupportedDeviceTable/use-manufacturers.d.ts +7 -0
  44. package/lib/seam/components/SupportedDeviceTable/use-manufacturers.js +17 -0
  45. package/lib/seam/components/SupportedDeviceTable/use-manufacturers.js.map +1 -0
  46. package/lib/seam/components/common-props.d.ts +3 -0
  47. package/lib/seam/components/common-props.js.map +1 -1
  48. package/lib/seam/filters.d.ts +8 -0
  49. package/lib/seam/filters.js +16 -0
  50. package/lib/seam/filters.js.map +1 -0
  51. package/lib/telemetry/client.js.map +1 -1
  52. package/lib/ui/Snackbar/Snackbar.d.ts +1 -1
  53. package/lib/ui/Snackbar/Snackbar.js +1 -1
  54. package/lib/ui/Snackbar/Snackbar.js.map +1 -1
  55. package/lib/version.d.ts +1 -1
  56. package/lib/version.js +1 -1
  57. package/package.json +14 -4
  58. package/src/lib/element.tsx +2 -0
  59. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +24 -30
  60. package/src/lib/seam/components/AccessCodeTable/AccessCodeHealthBar.tsx +9 -1
  61. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +32 -5
  62. package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx +4 -0
  63. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx +21 -5
  64. package/src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx +19 -8
  65. package/src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx +4 -0
  66. package/src/lib/seam/components/DeviceTable/DeviceHealthBar.tsx +10 -2
  67. package/src/lib/seam/components/DeviceTable/DeviceTable.tsx +29 -7
  68. package/src/lib/seam/components/SupportedDeviceTable/use-device-model.ts +45 -0
  69. package/src/lib/seam/components/SupportedDeviceTable/use-device-models.ts +43 -0
  70. package/src/lib/seam/components/SupportedDeviceTable/use-manufacturer.ts +45 -0
  71. package/src/lib/seam/components/SupportedDeviceTable/use-manufacturers.ts +43 -0
  72. package/src/lib/seam/components/common-props.tsx +10 -0
  73. package/src/lib/seam/filters.ts +32 -0
  74. package/src/lib/telemetry/client.ts +3 -3
  75. package/src/lib/ui/Snackbar/Snackbar.tsx +2 -2
  76. package/src/lib/version.ts +1 -1
  77. package/src/styles/_device-details.scss +1 -2
  78. package/src/styles/_thermostat.scss +1 -2
@@ -0,0 +1,17 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSeamClient } from '../../../../lib/seam/use-seam-client.js';
3
+ export function useDeviceModels(params) {
4
+ const { client: seam } = useSeamClient();
5
+ const { data, ...rest } = useQuery({
6
+ enabled: seam != null,
7
+ queryKey: ['internal', 'device_models', 'list', params],
8
+ queryFn: async () => {
9
+ if (seam == null)
10
+ return [];
11
+ const { data: { device_models: deviceModels }, } = await seam.client.get('/internal/devicedb/v1/device_models/list', { params });
12
+ return deviceModels;
13
+ },
14
+ });
15
+ return { ...rest, deviceModels: data };
16
+ }
17
+ //# sourceMappingURL=use-device-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-device-models.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/SupportedDeviceTable/use-device-models.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,eAAe,CAC7B,MAA8B;IAE9B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAA;IAExC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,IAAI,IAAI,IAAI;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC;QACvD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,IAAI,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC3B,MAAM,EACJ,IAAI,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GACtC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACvB,0CAA0C,EAC1C,EAAE,MAAM,EAAE,CACX,CAAA;YACD,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;AACxC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Manufacturer, RouteRequestParams } from '@seamapi/types/devicedb';
2
+ import type { UseSeamQueryResult } from '../../../../lib/seam/use-seam-query-result.js';
3
+ export type UseManufacturerParams = ManufacturersGetParams | string;
4
+ export type UseManufacturerData = Manufacturer | null;
5
+ export declare function useManufacturer(params?: UseManufacturerParams): UseSeamQueryResult<'manufacturer', UseManufacturerData>;
6
+ type ManufacturersGetParams = RouteRequestParams<'/v1/manufacturers/get'>;
7
+ 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 useManufacturer(params) {
4
+ const normalizedParams = typeof params === 'string' ? { manufacturer_id: params } : params;
5
+ const { client: seam } = useSeamClient();
6
+ const { data, ...rest } = useQuery({
7
+ enabled: seam != null,
8
+ queryKey: ['internal', 'manufacturers', 'get', normalizedParams],
9
+ queryFn: async () => {
10
+ if (seam == null)
11
+ return null;
12
+ const { data: { manufacturer }, } = await seam.client.get('/internal/devicedb/v1/manufacturers/get', { params: normalizedParams });
13
+ return manufacturer;
14
+ },
15
+ });
16
+ return { ...rest, manufacturer: data };
17
+ }
18
+ //# sourceMappingURL=use-manufacturer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-manufacturer.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/SupportedDeviceTable/use-manufacturer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,eAAe,CAC7B,MAA8B;IAE9B,MAAM,gBAAgB,GACpB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAEnE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAA;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,IAAI,IAAI,IAAI;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAChE,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,IAAI,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC7B,MAAM,EACJ,IAAI,EAAE,EAAE,YAAY,EAAE,GACvB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACvB,yCAAyC,EACzC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAC7B,CAAA;YACD,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;AACxC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Manufacturer, RouteRequestParams } from '@seamapi/types/devicedb';
2
+ import type { UseSeamQueryResult } from '../../../../lib/seam/use-seam-query-result.js';
3
+ export type UseManufacturersParams = ManufacturersListParams;
4
+ export type UseManufacturersData = Manufacturer[];
5
+ export declare function useManufacturers(params?: UseManufacturersParams): UseSeamQueryResult<'manufacturers', UseManufacturersData>;
6
+ type ManufacturersListParams = RouteRequestParams<'/v1/manufacturers/list'>;
7
+ export {};
@@ -0,0 +1,17 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSeamClient } from '../../../../lib/seam/use-seam-client.js';
3
+ export function useManufacturers(params) {
4
+ const { client: seam } = useSeamClient();
5
+ const { data, ...rest } = useQuery({
6
+ enabled: seam != null,
7
+ queryKey: ['internal', 'manufacturers', 'list', params],
8
+ queryFn: async () => {
9
+ if (seam == null)
10
+ return [];
11
+ const { data: { manufacturers }, } = await seam.client.get('/internal/devicedb/v1/manufacturers/list', { params });
12
+ return manufacturers;
13
+ },
14
+ });
15
+ return { ...rest, manufacturers: data };
16
+ }
17
+ //# sourceMappingURL=use-manufacturers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-manufacturers.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/SupportedDeviceTable/use-manufacturers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAM3D,MAAM,UAAU,gBAAgB,CAC9B,MAA+B;IAE/B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAA;IAExC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAGhC;QACA,OAAO,EAAE,IAAI,IAAI,IAAI;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC;QACvD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,IAAI,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAA;YAC3B,MAAM,EACJ,IAAI,EAAE,EAAE,aAAa,EAAE,GACxB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACvB,0CAA0C,EAC1C,EAAE,MAAM,EAAE,CACX,CAAA;YACD,OAAO,aAAa,CAAA;QACtB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAA;AACzC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import type { ComponentType } from 'react';
2
+ import type { AccessCodeError, ConnectedAccountError, DeviceError, SeamWarning } from 'seamapi';
2
3
  export interface RequiredCommonProps {
3
4
  className: string | undefined;
4
5
  onBack: (() => void) | undefined;
6
+ errorFilter: (error: ConnectedAccountError | DeviceError | AccessCodeError) => boolean;
7
+ warningFilter: (warning: SeamWarning) => boolean;
5
8
  disableDeleteAccessCode: boolean | undefined;
6
9
  disableCreateAccessCode: boolean | undefined;
7
10
  disableEditAccessCode: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"common-props.js","sourceRoot":"","sources":["../../../src/lib/seam/components/common-props.tsx"],"names":[],"mappings":";AAcA,MAAM,UAAU,uBAAuB,CAGrC,SAA2B;IAE3B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAA;IAEnE,SAAS,uBAAuB,CAC9B,KAA8B;QAE9B,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAA;IACjC,CAAC;IAED,uBAAuB,CAAC,WAAW,GAAG,2BAA2B,IAAI,GAAG,CAAA;IAExE,OAAO,uBAAuB,CAAA;AAChC,CAAC"}
1
+ {"version":3,"file":"common-props.js","sourceRoot":"","sources":["../../../src/lib/seam/components/common-props.tsx"],"names":[],"mappings":";AAwBA,MAAM,UAAU,uBAAuB,CAGrC,SAA2B;IAE3B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,CAAA;IAEnE,SAAS,uBAAuB,CAC9B,KAA8B;QAE9B,OAAO,KAAC,SAAS,OAAK,KAAK,GAAI,CAAA;IACjC,CAAC;IAED,uBAAuB,CAAC,WAAW,GAAG,2BAA2B,IAAI,GAAG,CAAA;IAExE,OAAO,uBAAuB,CAAA;AAChC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AccessCodeError, ConnectedAccountError, DeviceError, SeamWarning } from 'seamapi';
2
+ type SeamCompositeError = ConnectedAccountError | DeviceError | AccessCodeError;
3
+ export declare const accessCodeErrorFilter: (error: SeamCompositeError) => boolean;
4
+ export declare const accessCodeWarningFilter: (_: SeamWarning) => boolean;
5
+ export declare const deviceErrorFilter: (error: SeamCompositeError) => boolean;
6
+ export declare const deviceWarningFilter: (_: SeamWarning) => boolean;
7
+ export declare const connectedAccountErrorFilter: (error: SeamCompositeError) => boolean;
8
+ export {};
@@ -0,0 +1,16 @@
1
+ export const accessCodeErrorFilter = (error) => {
2
+ return 'is_access_code_error' in error && error.is_access_code_error;
3
+ };
4
+ export const accessCodeWarningFilter = (_) => {
5
+ return true;
6
+ };
7
+ export const deviceErrorFilter = (error) => {
8
+ return 'is_device_error' in error && error.is_device_error;
9
+ };
10
+ export const deviceWarningFilter = (_) => {
11
+ return true;
12
+ };
13
+ export const connectedAccountErrorFilter = (error) => {
14
+ return ('is_connected_account_error' in error && error.is_connected_account_error);
15
+ };
16
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/lib/seam/filters.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAyB,EAAW,EAAE;IAC1E,OAAO,sBAAsB,IAAI,KAAK,IAAI,KAAK,CAAC,oBAAoB,CAAA;AACtE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAc,EAAW,EAAE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAyB,EAAW,EAAE;IACtE,OAAO,iBAAiB,IAAI,KAAK,IAAI,KAAK,CAAC,eAAe,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAc,EAAW,EAAE;IAC7D,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAyB,EAChB,EAAE;IACX,OAAO,CACL,4BAA4B,IAAI,KAAK,IAAI,KAAK,CAAC,0BAA0B,CAC1E,CAAA;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/telemetry/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/telemetry/client.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ interface SnackbarProps {
4
4
  message: string;
5
5
  variant: SnackbarVariant;
6
6
  visible: boolean;
7
- onClose: () => void;
7
+ onClose?: () => void;
8
8
  action?: {
9
9
  label: string;
10
10
  onClick: () => void;
@@ -4,7 +4,7 @@ import { useEffect } from 'react';
4
4
  import { CheckGreenIcon } from '../../../lib/icons/CheckGreen.js';
5
5
  import { CloseWhiteIcon } from '../../../lib/icons/CloseWhite.js';
6
6
  import { ExclamationCircleIcon } from '../../../lib/icons/ExclamationCircle.js';
7
- export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, onClose, }) {
7
+ export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, onClose = () => { }, }) {
8
8
  const { label: actionLabel, onClick: handleActionClick } = action ?? {};
9
9
  useEffect(() => {
10
10
  if (!autoDismiss) {
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAkBtE,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,KAAK,EAC1B,OAAO,GACO;IACd,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;SAChB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,cAAc,CAAC,CAAA;QAElB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1C,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,eACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;gBACrC,uBAAuB,EAAE,OAAO;aACjC,CAAC,aAEF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,EAClC,cAAK,SAAS,EAAC,4BAA4B,YACzC,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,GAC9C,EACN,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,IAAI,IAAI,CACjB,iBACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,iBAAiB,YAE1B,eAAM,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAQ,GAC1D,CACV,EACA,CAAC,kBAAkB,IAAI,CACtB,iBACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;gCACZ,OAAO,EAAE,CAAA;4BACX,CAAC,YAED,KAAC,cAAc,KAAG,GACX,CACV,IACG,IACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,SAAS;YACZ,OAAO,KAAC,cAAc,KAAG,CAAA;QAC3B,KAAK,OAAO;YACV,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACnC;AACH,CAAC"}
1
+ {"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAkBtE,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,KAAK,EAC1B,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,GACJ;IACd,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;SAChB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,cAAc,CAAC,CAAA;QAElB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1C,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,eACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;gBACrC,uBAAuB,EAAE,OAAO;aACjC,CAAC,aAEF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,EAClC,cAAK,SAAS,EAAC,4BAA4B,YACzC,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,GAC9C,EACN,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,IAAI,IAAI,CACjB,iBACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,iBAAiB,YAE1B,eAAM,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAQ,GAC1D,CACV,EACA,CAAC,kBAAkB,IAAI,CACtB,iBACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;gCACZ,OAAO,EAAE,CAAA;4BACX,CAAC,YAED,KAAC,cAAc,KAAG,GACX,CACV,IACG,IACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,SAAS;YACZ,OAAO,KAAC,cAAc,KAAG,CAAA;QAC3B,KAAK,OAAO;YACV,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACnC;AACH,CAAC"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const seamapiReactVersion = "1.64.0";
1
+ declare const seamapiReactVersion = "1.65.0";
2
2
  export default seamapiReactVersion;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.64.0';
1
+ const seamapiReactVersion = '1.65.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.64.0",
3
+ "version": "1.65.0",
4
4
  "description": "Seam Components.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -90,6 +90,8 @@
90
90
  "storybook:docs": "storybook dev --docs --port 6007",
91
91
  "storybook:build": "storybook build",
92
92
  "prestorybook:build": "vite build examples",
93
+ "storybook:update-devicedb-seed": "tsx .storybook/update-devicedb-seed.ts",
94
+ "poststorybook:update-devicedb-seed": "npm run format",
93
95
  "examples": "vite examples --host",
94
96
  "examples:build": "vite build examples",
95
97
  "examples:preview": "vite preview examples",
@@ -107,12 +109,16 @@
107
109
  "npm": ">= 8.1.0"
108
110
  },
109
111
  "peerDependencies": {
112
+ "@seamapi/types": "^1.26.2",
110
113
  "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
111
114
  "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
112
115
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
113
116
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
114
117
  },
115
118
  "peerDependenciesMeta": {
119
+ "@seamapi/types": {
120
+ "optional": true
121
+ },
116
122
  "@types/react": {
117
123
  "optional": true
118
124
  },
@@ -126,7 +132,7 @@
126
132
  "luxon": "^3.3.0",
127
133
  "queue": "^7.0.0",
128
134
  "react-hook-form": "^7.46.1",
129
- "seamapi": "^8.13.0",
135
+ "seamapi": "^8.13.1",
130
136
  "uuid": "^9.0.0"
131
137
  },
132
138
  "devDependencies": {
@@ -134,7 +140,10 @@
134
140
  "@mui/icons-material": "^5.11.16",
135
141
  "@mui/material": "^5.12.2",
136
142
  "@rxfork/r2wc-react-to-web-component": "^2.4.0",
137
- "@seamapi/fake-seam-connect": "^1.17.0",
143
+ "@seamapi/fake-devicedb": "^1.1.0",
144
+ "@seamapi/fake-seam-connect": "^1.32.0",
145
+ "@seamapi/http": "^0.2.1",
146
+ "@seamapi/types": "^1.28.0",
138
147
  "@storybook/addon-designs": "^7.0.1",
139
148
  "@storybook/addon-essentials": "^7.0.2",
140
149
  "@storybook/addon-links": "^7.0.2",
@@ -149,6 +158,7 @@
149
158
  "@types/react": "^18.0.33",
150
159
  "@types/react-dom": "^18.0.11",
151
160
  "@types/uuid": "^9.0.1",
161
+ "@vercel/node": "^3.0.7",
152
162
  "@vitejs/plugin-react": "^4.0.0",
153
163
  "@vitest/coverage-v8": "^0.34.4",
154
164
  "@vitest/ui": "^0.34.4",
@@ -181,7 +191,7 @@
181
191
  "tsconfig-paths-webpack-plugin": "^4.0.1",
182
192
  "tsx": "^3.12.7",
183
193
  "typedoc": "^0.25.1",
184
- "typescript": "~5.1.0",
194
+ "typescript": "^5.2.2",
185
195
  "vite": "^4.2.1",
186
196
  "vite-tsconfig-paths": "^4.0.8",
187
197
  "vitest": "^0.34.4",
@@ -39,6 +39,8 @@ type ProviderProps = Omit<
39
39
  >
40
40
 
41
41
  const commonProps: R2wcProps<CommonProps> = {
42
+ errorFilter: 'object',
43
+ warningFilter: 'object',
42
44
  disableLockUnlock: 'boolean',
43
45
  disableCreateAccessCode: 'boolean',
44
46
  disableEditAccessCode: 'boolean',
@@ -1,12 +1,7 @@
1
1
  import classNames from 'classnames'
2
2
  import { DateTime } from 'luxon'
3
3
  import { useState } from 'react'
4
- import type {
5
- AccessCode,
6
- AccessCodeError,
7
- ConnectedAccountError,
8
- DeviceError,
9
- } from 'seamapi'
4
+ import type { AccessCode } from 'seamapi'
10
5
 
11
6
  import { useComponentTelemetry } from 'lib/telemetry/index.js'
12
7
 
@@ -19,6 +14,10 @@ import {
19
14
  withRequiredCommonProps,
20
15
  } from 'lib/seam/components/common-props.js'
21
16
  import { NestedDeviceDetails } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
17
+ import {
18
+ accessCodeErrorFilter,
19
+ accessCodeWarningFilter,
20
+ } from 'lib/seam/filters.js'
22
21
  import { Alerts } from 'lib/ui/Alert/Alerts.js'
23
22
  import { Button } from 'lib/ui/Button.js'
24
23
  import { copyToClipboard } from 'lib/ui/clipboard.js'
@@ -37,6 +36,8 @@ export const NestedAccessCodeDetails =
37
36
  export function AccessCodeDetails({
38
37
  accessCodeId,
39
38
  onEdit,
39
+ errorFilter = () => true,
40
+ warningFilter = () => true,
40
41
  disableCreateAccessCode = false,
41
42
  disableEditAccessCode = false,
42
43
  disableLockUnlock = false,
@@ -61,6 +62,8 @@ export function AccessCodeDetails({
61
62
  return (
62
63
  <NestedDeviceDetails
63
64
  deviceId={selectedDeviceId}
65
+ errorFilter={errorFilter}
66
+ warningFilter={warningFilter}
64
67
  disableLockUnlock={disableLockUnlock}
65
68
  disableCreateAccessCode={disableCreateAccessCode}
66
69
  disableEditAccessCode={disableEditAccessCode}
@@ -75,14 +78,21 @@ export function AccessCodeDetails({
75
78
  }
76
79
 
77
80
  const alerts = [
78
- ...accessCode.errors.filter(errorFilter).map((error) => ({
79
- variant: 'error' as const,
80
- message: error.message,
81
- })),
82
- ...accessCode.warnings.map((warning) => ({
83
- variant: 'warning' as const,
84
- message: warning.message,
85
- })),
81
+ ...accessCode.errors
82
+ .filter(accessCodeErrorFilter)
83
+ .filter(errorFilter)
84
+ .map((error) => ({
85
+ variant: 'error' as const,
86
+ message: error.message,
87
+ })),
88
+
89
+ ...accessCode.warnings
90
+ .filter(accessCodeWarningFilter)
91
+ .filter(warningFilter)
92
+ .map((warning) => ({
93
+ variant: 'warning' as const,
94
+ message: warning.message,
95
+ })),
86
96
  ]
87
97
 
88
98
  return (
@@ -245,22 +255,6 @@ const formatDate = (date: string): string =>
245
255
  year: 'numeric',
246
256
  })
247
257
 
248
- const errorFilter = (
249
- error: AccessCodeError | DeviceError | ConnectedAccountError
250
- ): boolean => {
251
- if ('is_access_code_error' in error && !error.is_access_code_error)
252
- return true
253
-
254
- if (
255
- error.error_code === 'failed_to_set_on_device' ||
256
- error.error_code === 'failed_to_remove_on_device'
257
- ) {
258
- return true
259
- }
260
-
261
- return false
262
- }
263
-
264
258
  const t = {
265
259
  accessCode: 'Access code',
266
260
  fallbackName: 'Code',
@@ -1,3 +1,5 @@
1
+ import type { AccessCode } from 'seamapi'
2
+
1
3
  import { CheckIcon } from 'lib/icons/Check.js'
2
4
  import { ExclamationCircleOutlineIcon } from 'lib/icons/ExclamationCircleOutline.js'
3
5
  import type { UseAccessCodesData } from 'lib/seam/access-codes/use-access-codes.js'
@@ -8,17 +10,23 @@ export type AccessCodeFilter = 'access_code_issues'
8
10
 
9
11
  interface AccessCodeHealthBarProps {
10
12
  accessCodes: Array<UseAccessCodesData[number]>
13
+ errorFilter: (error: AccessCode['errors'][number]) => boolean
14
+ warningFilter: (warning: AccessCode['warnings'][number]) => boolean
11
15
  filter: AccessCodeFilter | null
12
16
  onFilterSelect: (filter: AccessCodeFilter | null) => void
13
17
  }
14
18
 
15
19
  export function AccessCodeHealthBar({
16
20
  accessCodes,
21
+ errorFilter,
22
+ warningFilter,
17
23
  filter,
18
24
  onFilterSelect,
19
25
  }: AccessCodeHealthBarProps): JSX.Element {
20
26
  const codesWithIssues = accessCodes.filter(
21
- ({ errors, warnings }) => errors.length > 0 || warnings.length > 0
27
+ ({ errors, warnings }) =>
28
+ errors.filter(errorFilter).length > 0 ||
29
+ warnings.filter(warningFilter).length > 0
22
30
  )
23
31
  const issueCount = codesWithIssues.length
24
32
 
@@ -79,6 +79,8 @@ export function AccessCodeTable({
79
79
  onBack,
80
80
  accessCodeFilter = defaultAccessCodeFilter,
81
81
  accessCodeComparator = compareByCreatedAtDesc,
82
+ errorFilter = () => true,
83
+ warningFilter = () => true,
82
84
  heading = t.accessCodes,
83
85
  title = t.accessCodes,
84
86
  className,
@@ -90,7 +92,7 @@ export function AccessCodeTable({
90
92
  }: AccessCodeTableProps): JSX.Element {
91
93
  useComponentTelemetry('AccessCodeTable')
92
94
 
93
- const { accessCodes, isInitialLoading, isError, error } = useAccessCodes({
95
+ const { accessCodes, isInitialLoading, isError, refetch } = useAccessCodes({
94
96
  device_id: deviceId,
95
97
  })
96
98
 
@@ -143,6 +145,8 @@ export function AccessCodeTable({
143
145
  return (
144
146
  <NestedEditAccessCodeForm
145
147
  accessCodeId={selectedEditAccessCodeId}
148
+ errorFilter={errorFilter}
149
+ warningFilter={warningFilter}
146
150
  disableLockUnlock={disableLockUnlock}
147
151
  disableCreateAccessCode={disableCreateAccessCode}
148
152
  disableEditAccessCode={disableEditAccessCode}
@@ -176,6 +180,8 @@ export function AccessCodeTable({
176
180
  onEdit={() => {
177
181
  setSelectedEditAccessCodeId(selectedViewAccessCodeId)
178
182
  }}
183
+ errorFilter={errorFilter}
184
+ warningFilter={warningFilter}
179
185
  disableLockUnlock={disableLockUnlock}
180
186
  disableCreateAccessCode={disableCreateAccessCode}
181
187
  disableEditAccessCode={disableEditAccessCode}
@@ -194,6 +200,8 @@ export function AccessCodeTable({
194
200
  return (
195
201
  <NestedCreateAccessCodeForm
196
202
  deviceId={deviceId}
203
+ errorFilter={errorFilter}
204
+ warningFilter={warningFilter}
197
205
  disableLockUnlock={disableLockUnlock}
198
206
  disableCreateAccessCode={disableCreateAccessCode}
199
207
  disableEditAccessCode={disableEditAccessCode}
@@ -208,10 +216,6 @@ export function AccessCodeTable({
208
216
  )
209
217
  }
210
218
 
211
- if (isError) {
212
- return <p className={className}>{error?.message}</p>
213
- }
214
-
215
219
  return (
216
220
  <>
217
221
  <Snackbar
@@ -264,10 +268,25 @@ export function AccessCodeTable({
264
268
  accessCodes={filteredAccessCodes}
265
269
  onAccessCodeClick={handleAccessCodeClick}
266
270
  onAccessCodeEdit={handleAccessCodeEdit}
271
+ errorFilter={errorFilter}
272
+ warningFilter={warningFilter}
267
273
  disableEditAccessCode={disableEditAccessCode}
268
274
  disableDeleteAccessCode={disableDeleteAccessCode}
269
275
  />
270
276
  </TableBody>
277
+
278
+ <Snackbar
279
+ variant='error'
280
+ visible={isError}
281
+ message={t.fallbackErrorMessage}
282
+ action={{
283
+ label: t.tryAgain,
284
+ onClick: () => {
285
+ void refetch()
286
+ },
287
+ }}
288
+ disableCloseButton
289
+ />
271
290
  </div>
272
291
  </>
273
292
  )
@@ -277,6 +296,8 @@ function Content(props: {
277
296
  accessCodes: Array<UseAccessCodesData[number]>
278
297
  onAccessCodeClick: (accessCodeId: string) => void
279
298
  onAccessCodeEdit: (accessCodeId: string) => void
299
+ errorFilter: (error: AccessCode['errors'][number]) => boolean
300
+ warningFilter: (warning: AccessCode['warnings'][number]) => boolean
280
301
  disableEditAccessCode: boolean
281
302
  disableDeleteAccessCode: boolean
282
303
  }): JSX.Element {
@@ -284,6 +305,8 @@ function Content(props: {
284
305
  accessCodes,
285
306
  onAccessCodeClick,
286
307
  onAccessCodeEdit,
308
+ errorFilter,
309
+ warningFilter,
287
310
  disableEditAccessCode,
288
311
  disableDeleteAccessCode,
289
312
  } = props
@@ -313,6 +336,8 @@ function Content(props: {
313
336
  accessCodes={accessCodes}
314
337
  filter={filter}
315
338
  onFilterSelect={setFilter}
339
+ errorFilter={errorFilter}
340
+ warningFilter={warningFilter}
316
341
  />
317
342
  {filteredAccessCodes.map((accessCode) => (
318
343
  <AccessCodeRow
@@ -338,4 +363,6 @@ const t = {
338
363
  loading: 'Loading access codes',
339
364
  accesCodeUpdated: 'Access code updated',
340
365
  accesCodeCreated: 'Access code created',
366
+ tryAgain: 'Try again',
367
+ fallbackErrorMessage: 'Access codes could not be loaded',
341
368
  }
@@ -33,6 +33,8 @@ export function ClimateSettingScheduleDetails({
33
33
  disableDeleteAccessCode = false,
34
34
  onBack,
35
35
  className,
36
+ errorFilter = () => true,
37
+ warningFilter = () => true,
36
38
  disableCreateAccessCode,
37
39
  disableEditAccessCode,
38
40
  disableResourceIds = false,
@@ -56,6 +58,8 @@ export function ClimateSettingScheduleDetails({
56
58
  return (
57
59
  <NestedDeviceDetails
58
60
  deviceId={selectedDeviceId}
61
+ errorFilter={errorFilter}
62
+ warningFilter={warningFilter}
59
63
  disableLockUnlock={disableLockUnlock}
60
64
  disableCreateAccessCode={disableCreateAccessCode}
61
65
  disableEditAccessCode={disableEditAccessCode}
@@ -17,6 +17,7 @@ import {
17
17
  } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
18
18
  import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
19
19
  import { LoadingToast } from 'lib/ui/LoadingToast/LoadingToast.js'
20
+ import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
20
21
  import { EmptyPlaceholder } from 'lib/ui/Table/EmptyPlaceholder.js'
21
22
  import { TableBody } from 'lib/ui/Table/TableBody.js'
22
23
  import { TableHeader } from 'lib/ui/Table/TableHeader.js'
@@ -66,13 +67,15 @@ export function ClimateSettingScheduleTable({
66
67
  disableDeleteAccessCode = false,
67
68
  onBack,
68
69
  className,
70
+ errorFilter = () => true,
71
+ warningFilter = () => true,
69
72
  disableCreateAccessCode,
70
73
  disableEditAccessCode,
71
74
  disableResourceIds = false,
72
75
  }: ClimateSettingScheduleTableProps): JSX.Element {
73
76
  useComponentTelemetry('ClimateSettingScheduleTable')
74
77
 
75
- const { climateSettingSchedules, isInitialLoading, isError, error } =
78
+ const { climateSettingSchedules, isInitialLoading, isError, refetch } =
76
79
  useClimateSettingSchedules({
77
80
  device_id: deviceId,
78
81
  })
@@ -115,6 +118,8 @@ export function ClimateSettingScheduleTable({
115
118
  return (
116
119
  <NestedClimateSettingScheduleDetails
117
120
  climateSettingScheduleId={selectedViewClimateSettingScheduleId}
121
+ errorFilter={errorFilter}
122
+ warningFilter={warningFilter}
118
123
  disableLockUnlock={disableLockUnlock}
119
124
  disableCreateAccessCode={disableCreateAccessCode}
120
125
  disableEditAccessCode={disableEditAccessCode}
@@ -128,10 +133,6 @@ export function ClimateSettingScheduleTable({
128
133
  )
129
134
  }
130
135
 
131
- if (isError) {
132
- return <p className={className}>{error?.message}</p>
133
- }
134
-
135
136
  return (
136
137
  <div className={classNames('seam-table', className)}>
137
138
  <ContentHeader onBack={onBack} />
@@ -165,6 +166,19 @@ export function ClimateSettingScheduleTable({
165
166
  onClimateSettingScheduleClick={handleClimateSettingScheduleClick}
166
167
  />
167
168
  </TableBody>
169
+
170
+ <Snackbar
171
+ variant='error'
172
+ visible={isError}
173
+ message={t.fallbackErrorMessage}
174
+ action={{
175
+ label: t.tryAgain,
176
+ onClick: () => {
177
+ void refetch()
178
+ },
179
+ }}
180
+ disableCloseButton
181
+ />
168
182
  </div>
169
183
  )
170
184
  }
@@ -201,4 +215,6 @@ const t = {
201
215
  noClimateSettingSchedulesMessage:
202
216
  'Sorry, no climate setting schedules were found',
203
217
  loading: 'Loading schedules',
218
+ tryAgain: 'Try again',
219
+ fallbackErrorMessage: 'Climate settings could not be loaded',
204
220
  }