@seamapi/react 3.0.2 → 3.1.1

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 (60) hide show
  1. package/README.md +2 -2
  2. package/dist/elements.js +7485 -7348
  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/seam/access-codes/use-delete-access-code.js +9 -0
  9. package/lib/seam/access-codes/use-delete-access-code.js.map +1 -1
  10. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.d.ts +5 -2
  11. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +65 -10
  12. package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
  13. package/lib/seam/components/AccessCodeTable/AccessCodeMenu.d.ts +1 -0
  14. package/lib/seam/components/AccessCodeTable/AccessCodeMenu.js +13 -5
  15. package/lib/seam/components/AccessCodeTable/AccessCodeMenu.js.map +1 -1
  16. package/lib/seam/components/AccessCodeTable/AccessCodeRow.d.ts +2 -1
  17. package/lib/seam/components/AccessCodeTable/AccessCodeRow.js +10 -5
  18. package/lib/seam/components/AccessCodeTable/AccessCodeRow.js.map +1 -1
  19. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +40 -24
  20. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  21. package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js +5 -5
  22. package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js.map +1 -1
  23. package/lib/seam/thermostats/temperature-bounds.d.ts +1 -2
  24. package/lib/seam/thermostats/temperature-bounds.js +0 -16
  25. package/lib/seam/thermostats/temperature-bounds.js.map +1 -1
  26. package/lib/seam/thermostats/thermostat-device.d.ts +1 -3
  27. package/lib/seam/thermostats/thermostat-device.js.map +1 -1
  28. package/lib/seam/thermostats/use-cool-thermostat.js +0 -2
  29. package/lib/seam/thermostats/use-cool-thermostat.js.map +1 -1
  30. package/lib/seam/thermostats/use-heat-cool-thermostat.js +0 -2
  31. package/lib/seam/thermostats/use-heat-cool-thermostat.js.map +1 -1
  32. package/lib/seam/thermostats/use-heat-thermostat.js +0 -2
  33. package/lib/seam/thermostats/use-heat-thermostat.js.map +1 -1
  34. package/lib/seam/thermostats/use-set-thermostat-off.js +0 -2
  35. package/lib/seam/thermostats/use-set-thermostat-off.js.map +1 -1
  36. package/lib/ui/ClimateSettingForm/set-point-bounds.js +3 -3
  37. package/lib/ui/ClimateSettingForm/set-point-bounds.js.map +1 -1
  38. package/lib/ui/Menu/Menu.d.ts +2 -1
  39. package/lib/ui/Menu/Menu.js +2 -1
  40. package/lib/ui/Menu/Menu.js.map +1 -1
  41. package/lib/version.d.ts +1 -1
  42. package/lib/version.js +1 -1
  43. package/package.json +3 -3
  44. package/src/lib/seam/access-codes/use-delete-access-code.ts +15 -0
  45. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.element.ts +3 -0
  46. package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +169 -71
  47. package/src/lib/seam/components/AccessCodeTable/AccessCodeMenu.tsx +34 -13
  48. package/src/lib/seam/components/AccessCodeTable/AccessCodeRow.tsx +24 -9
  49. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +62 -53
  50. package/src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx +5 -5
  51. package/src/lib/seam/thermostats/temperature-bounds.ts +1 -26
  52. package/src/lib/seam/thermostats/thermostat-device.ts +0 -4
  53. package/src/lib/seam/thermostats/use-cool-thermostat.ts +0 -2
  54. package/src/lib/seam/thermostats/use-heat-cool-thermostat.ts +0 -2
  55. package/src/lib/seam/thermostats/use-heat-thermostat.ts +0 -2
  56. package/src/lib/seam/thermostats/use-set-thermostat-off.ts +0 -2
  57. package/src/lib/ui/ClimateSettingForm/set-point-bounds.ts +3 -3
  58. package/src/lib/ui/Menu/Menu.tsx +3 -0
  59. package/src/lib/version.ts +1 -1
  60. package/src/styles/_seam-table.scss +4 -0
@@ -1,12 +1,10 @@
1
1
  import type { Device } from '@seamapi/types/connect';
2
2
  export type ThermostatDevice = Omit<Device, 'properties'> & {
3
- properties: Device['properties'] & Required<Pick<Device['properties'], 'temperature_celsius' | 'temperature_fahrenheit' | 'is_heating' | 'is_cooling' | 'is_fan_running' | 'is_cooling_available' | 'is_heating_available' | 'available_hvac_mode_settings' | 'fan_mode_setting' | 'current_climate_setting'>>;
3
+ properties: Device['properties'] & Required<Pick<Device['properties'], 'temperature_celsius' | 'temperature_fahrenheit' | 'is_heating' | 'is_cooling' | 'is_fan_running' | 'available_hvac_mode_settings' | 'fan_mode_setting' | 'current_climate_setting'>>;
4
4
  };
5
5
  export type FanModeSetting = ThermostatDevice['properties']['fan_mode_setting'];
6
6
  export type HvacModeSetting = ThermostatDevice['properties']['available_hvac_mode_settings'][number];
7
7
  export interface ClimateSetting {
8
- automatic_heating_enabled?: boolean;
9
- automatic_cooling_enabled?: boolean;
10
8
  hvac_mode_setting?: HvacModeSetting;
11
9
  cooling_set_point_celsius?: number;
12
10
  heating_set_point_celsius?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"thermostat-device.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/thermostat-device.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAc,EACc,EAAE,CAAC,gBAAgB,IAAI,MAAM,CAAC,UAAU,CAAA"}
1
+ {"version":3,"file":"thermostat-device.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/thermostat-device.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAc,EACc,EAAE,CAAC,gBAAgB,IAAI,MAAM,CAAC,UAAU,CAAA"}
@@ -42,8 +42,6 @@ const getUpdatedDevice = (device, variables) => {
42
42
  current_climate_setting: {
43
43
  ...properties.current_climate_setting,
44
44
  hvac_mode_setting: 'cool',
45
- automatic_heating_enabled: false,
46
- automatic_cooling_enabled: true,
47
45
  heating_set_point_celsius: undefined,
48
46
  heating_set_point_fahrenheit: undefined,
49
47
  cooling_set_point_celsius: getCoolingSetPointCelsius(variables, device),
@@ -1 +1 @@
1
- {"version":3,"file":"use-cool-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-cool-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAqBhF,MAAM,UAAU,iBAAiB;IAK/B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAA6C,EACrC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,MAAM;oBACzB,yBAAyB,EAAE,KAAK;oBAChC,yBAAyB,EAAE,IAAI;oBAC/B,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"use-cool-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-cool-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAqBhF,MAAM,UAAU,iBAAiB;IAK/B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAA6C,EACrC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,MAAM;oBACzB,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -42,8 +42,6 @@ const getUpdatedDevice = (device, variables) => {
42
42
  current_climate_setting: {
43
43
  ...properties.current_climate_setting,
44
44
  hvac_mode_setting: 'heat_cool',
45
- automatic_heating_enabled: true,
46
- automatic_cooling_enabled: true,
47
45
  heating_set_point_celsius: getHeatingSetPointCelsius(variables, device),
48
46
  heating_set_point_fahrenheit: getHeatingSetPointFahrenheit(variables, device),
49
47
  cooling_set_point_celsius: getCoolingSetPointCelsius(variables, device),
@@ -1 +1 @@
1
- {"version":3,"file":"use-heat-cool-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-heat-cool-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAyBhF,MAAM,UAAU,qBAAqB;IAKnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAAiD,EACzC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,WAAW;oBAC9B,yBAAyB,EAAE,IAAI;oBAC/B,yBAAyB,EAAE,IAAI;oBAC/B,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;oBACD,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"use-heat-cool-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-heat-cool-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAyBhF,MAAM,UAAU,qBAAqB;IAKnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAAiD,EACzC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,WAAW;oBAC9B,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;oBACD,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -42,8 +42,6 @@ const getUpdatedDevice = (device, variables) => {
42
42
  current_climate_setting: {
43
43
  ...properties.current_climate_setting,
44
44
  hvac_mode_setting: 'heat',
45
- automatic_heating_enabled: true,
46
- automatic_cooling_enabled: false,
47
45
  cooling_set_point_celsius: undefined,
48
46
  cooling_set_point_fahrenheit: undefined,
49
47
  heating_set_point_celsius: getHeatingSetPointCelsius(variables, device),
@@ -1 +1 @@
1
- {"version":3,"file":"use-heat-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-heat-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAqBhF,MAAM,UAAU,iBAAiB;IAK/B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAA6C,EACrC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,MAAM;oBACzB,yBAAyB,EAAE,IAAI;oBAC/B,yBAAyB,EAAE,KAAK;oBAChC,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"use-heat-thermostat.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-heat-thermostat.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAqBhF,MAAM,UAAU,iBAAiB;IAK/B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5C,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC5C,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,MAAc,EACd,SAA6C,EACrC,EAAE;IACV,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,MAAM;oBACzB,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,yBAAyB,CAClD,SAAS,EACT,MAAM,CACP;oBACD,4BAA4B,EAAE,4BAA4B,CACxD,SAAS,EACT,MAAM,CACP;iBACF;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -43,8 +43,6 @@ const getUpdatedDevice = (device) => {
43
43
  is_heating: false,
44
44
  current_climate_setting: {
45
45
  ...properties.current_climate_setting,
46
- automatic_cooling_enabled: false,
47
- automatic_heating_enabled: false,
48
46
  hvac_mode_setting: 'off',
49
47
  heating_set_point_celsius: undefined,
50
48
  heating_set_point_fahrenheit: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"use-set-thermostat-off.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-set-thermostat-off.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAkBhF,MAAM,UAAU,mBAAmB;IAKjC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACzC,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBACjC,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE;IAClD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,cAAc,EAAE,KAAK;gBACrB,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,KAAK;gBACjB,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,yBAAyB,EAAE,KAAK;oBAChC,yBAAyB,EAAE,KAAK;oBAChC,iBAAiB,EAAE,KAAK;oBACxB,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;iBACxC;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"use-set-thermostat-off.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-set-thermostat-off.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAkBhF,MAAM,UAAU,mBAAmB;IAKjC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACzC,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;oBACjC,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE;IAClD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAC7B,IACE,yBAAyB,IAAI,UAAU;QACvC,UAAU,CAAC,uBAAuB,IAAI,IAAI,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,cAAc,EAAE,KAAK;gBACrB,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,KAAK;gBACjB,uBAAuB,EAAE;oBACvB,GAAG,UAAU,CAAC,uBAAuB;oBACrC,iBAAiB,EAAE,KAAK;oBACxB,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;oBACvC,yBAAyB,EAAE,SAAS;oBACpC,4BAA4B,EAAE,SAAS;iBACxC;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -1,15 +1,15 @@
1
1
  export const getSetPointBounds = (device) => {
2
2
  const { properties } = device;
3
3
  const setPointBounds = {};
4
- if (properties.is_cooling_available) {
4
+ if (properties.available_hvac_mode_settings.includes('cool')) {
5
5
  setPointBounds.minCool = properties.min_cooling_set_point_fahrenheit;
6
6
  setPointBounds.maxCool = properties.max_cooling_set_point_fahrenheit;
7
7
  }
8
- if (properties.is_heating_available) {
8
+ if (properties.available_hvac_mode_settings.includes('heat')) {
9
9
  setPointBounds.minHeat = properties.min_heating_set_point_fahrenheit;
10
10
  setPointBounds.maxHeat = properties.max_heating_set_point_fahrenheit;
11
11
  }
12
- if (properties.is_cooling_available && properties.is_heating_available) {
12
+ if (properties.available_hvac_mode_settings.includes('heat_cool')) {
13
13
  setPointBounds.delta = properties.min_heating_cooling_delta_fahrenheit;
14
14
  }
15
15
  return setPointBounds;
@@ -1 +1 @@
1
- {"version":3,"file":"set-point-bounds.js","sourceRoot":"","sources":["../../../src/lib/ui/ClimateSettingForm/set-point-bounds.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAkB,EAAE;IAC5E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAE7B,MAAM,cAAc,GAAmB,EAAE,CAAA;IAEzC,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;QACpC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;QACpE,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;IACtE,CAAC;IAED,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;QACpC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;QACpE,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;IACtE,CAAC;IAED,IAAI,UAAU,CAAC,oBAAoB,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;QACvE,cAAc,CAAC,KAAK,GAAG,UAAU,CAAC,oCAAoC,CAAA;IACxE,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"set-point-bounds.js","sourceRoot":"","sources":["../../../src/lib/ui/ClimateSettingForm/set-point-bounds.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAkB,EAAE;IAC5E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAE7B,MAAM,cAAc,GAAmB,EAAE,CAAA;IAEzC,IAAI,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;QACpE,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;IACtE,CAAC;IAED,IAAI,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;QACpE,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,gCAAgC,CAAA;IACtE,CAAC;IAED,IAAI,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,cAAc,CAAC,KAAK,GAAG,UAAU,CAAC,oCAAoC,CAAA;IACxE,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA"}
@@ -9,10 +9,11 @@ export interface MenuProps extends PropsWithChildren {
9
9
  backgroundProps?: Partial<{
10
10
  className?: string;
11
11
  }>;
12
+ onClose?: () => void;
12
13
  }
13
14
  interface MenuContext {
14
15
  close: () => void;
15
16
  }
16
- export declare function Menu({ verticalOffset, horizontalOffset, edgeOffset, children, renderButton, backgroundProps, }: MenuProps): JSX.Element | null;
17
+ export declare function Menu({ verticalOffset, horizontalOffset, edgeOffset, children, renderButton, backgroundProps, onClose, }: MenuProps): JSX.Element | null;
17
18
  export declare function useMenu(): MenuContext;
18
19
  export {};
@@ -6,7 +6,7 @@ import { seamComponentsClassName } from '../../../lib/seam/SeamProvider.js';
6
6
  const menuContext = createContext({
7
7
  close: () => { },
8
8
  });
9
- export function Menu({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, children, renderButton, backgroundProps, }) {
9
+ export function Menu({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5, children, renderButton, backgroundProps, onClose, }) {
10
10
  const { Provider } = menuContext;
11
11
  const [documentEl, setDocumentEl] = useState(null);
12
12
  const [bodyEl, setBodyEl] = useState(null);
@@ -23,6 +23,7 @@ export function Menu({ verticalOffset = 5, horizontalOffset = 0, edgeOffset = 5,
23
23
  setBodyEl(bodyElements[0]);
24
24
  }, [setDocumentEl]);
25
25
  const handleClose = () => {
26
+ onClose?.();
26
27
  setAnchorEl(null);
27
28
  };
28
29
  const handleOpen = (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/Menu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/lib/ui/Menu/Menu.tsx"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const seamapiReactVersion = "3.0.2";
1
+ declare const seamapiReactVersion = "3.1.1";
2
2
  export default seamapiReactVersion;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '3.0.2';
1
+ const seamapiReactVersion = '3.1.1';
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": "3.0.2",
3
+ "version": "3.1.1",
4
4
  "description": "Seam Components.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -127,7 +127,7 @@
127
127
  }
128
128
  },
129
129
  "dependencies": {
130
- "@seamapi/http": "^1.0.0",
130
+ "@seamapi/http": "^1.2.0",
131
131
  "@tanstack/react-query": "^5.27.5",
132
132
  "classnames": "^2.3.2",
133
133
  "luxon": "^3.3.0",
@@ -144,7 +144,7 @@
144
144
  "@rxfork/r2wc-react-to-web-component": "^2.4.0",
145
145
  "@seamapi/fake-devicedb": "^1.6.1",
146
146
  "@seamapi/fake-seam-connect": "^1.69.1",
147
- "@seamapi/types": "^1.199.0",
147
+ "@seamapi/types": "^1.228.0",
148
148
  "@storybook/addon-designs": "^7.0.1",
149
149
  "@storybook/addon-essentials": "^7.0.2",
150
150
  "@storybook/addon-links": "^7.0.2",
@@ -2,6 +2,7 @@ import type {
2
2
  AccessCodesDeleteParams,
3
3
  SeamHttpApiError,
4
4
  } from '@seamapi/http/connect'
5
+ import type { AccessCode } from '@seamapi/types/connect'
5
6
  import {
6
7
  useMutation,
7
8
  type UseMutationResult,
@@ -42,6 +43,20 @@ export function useDeleteAccessCode(): UseMutationResult<
42
43
  ],
43
44
  })
44
45
  void queryClient.invalidateQueries({ queryKey: ['access_codes', 'list'] })
46
+
47
+ queryClient.setQueryData<AccessCode | null>(
48
+ ['access_codes', 'get', { access_code_id: variables.access_code_id }],
49
+ (accessCode) => {
50
+ if (accessCode == null) {
51
+ return
52
+ }
53
+
54
+ return {
55
+ ...accessCode,
56
+ status: 'removing',
57
+ }
58
+ }
59
+ )
45
60
  },
46
61
  })
47
62
  }
@@ -7,6 +7,9 @@ export const name = 'seam-access-code-details'
7
7
  export const props: ElementProps<AccessCodeDetailsProps> = {
8
8
  accessCodeId: 'string',
9
9
  onEdit: 'object',
10
+ preventDefaultOnEdit: 'boolean',
11
+ onDelete: 'object',
12
+ preventDefaultOnDelete: 'boolean',
10
13
  }
11
14
 
12
15
  export { AccessCodeDetails as Component } from './AccessCodeDetails.js'
@@ -1,7 +1,7 @@
1
1
  import type { AccessCode } from '@seamapi/types/connect'
2
2
  import classNames from 'classnames'
3
3
  import { DateTime } from 'luxon'
4
- import { useState } from 'react'
4
+ import { useCallback, useEffect, useState } from 'react'
5
5
 
6
6
  import { CopyIcon } from 'lib/icons/Copy.js'
7
7
  import { useAccessCode } from 'lib/seam/access-codes/use-access-code.js'
@@ -12,6 +12,7 @@ import {
12
12
  withRequiredCommonProps,
13
13
  } from 'lib/seam/components/common-props.js'
14
14
  import { NestedDeviceDetails } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
15
+ import { NestedEditAccessCodeForm } from 'lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js'
15
16
  import {
16
17
  accessCodeErrorFilter,
17
18
  accessCodeWarningFilter,
@@ -22,11 +23,15 @@ import { Button } from 'lib/ui/Button.js'
22
23
  import { copyToClipboard } from 'lib/ui/clipboard.js'
23
24
  import { IconButton } from 'lib/ui/IconButton.js'
24
25
  import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
26
+ import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
25
27
  import { useIsDateInPast } from 'lib/ui/use-is-date-in-past.js'
26
28
 
27
29
  export interface AccessCodeDetailsProps extends CommonProps {
28
30
  accessCodeId: string
29
- onEdit: () => void
31
+ onEdit?: () => void
32
+ preventDefaultOnEdit?: boolean
33
+ onDelete?: () => void
34
+ preventDefaultOnDelete?: boolean
30
35
  }
31
36
 
32
37
  export const NestedAccessCodeDetails =
@@ -35,6 +40,9 @@ export const NestedAccessCodeDetails =
35
40
  export function AccessCodeDetails({
36
41
  accessCodeId,
37
42
  onEdit,
43
+ preventDefaultOnEdit = false,
44
+ onDelete,
45
+ preventDefaultOnDelete = false,
38
46
  errorFilter = () => true,
39
47
  warningFilter = () => true,
40
48
  disableCreateAccessCode = false,
@@ -52,12 +60,72 @@ export function AccessCodeDetails({
52
60
  const { accessCode } = useAccessCode({ access_code_id: accessCodeId })
53
61
  const [selectedDeviceId, selectDevice] = useState<string | null>(null)
54
62
  const { mutate: deleteCode, isPending: isDeleting } = useDeleteAccessCode()
63
+ const [editFormOpen, setEditFormOpen] = useState<boolean>(false)
64
+
65
+ const [accessCodeResult, setAccessCodeResult] = useState<
66
+ 'updated' | 'deleted' | null
67
+ >(null)
68
+ const [snackbarMessage, setSnackbarMessage] = useState<string>('')
69
+
70
+ // Circumvent Snackbar bug that causes it to switch to default message
71
+ // while the dismiss animation is playing
72
+ useEffect(() => {
73
+ if (accessCodeResult !== null) {
74
+ setSnackbarMessage(accessCodeResultToMessage(accessCodeResult))
75
+ }
76
+ }, [accessCodeResult])
77
+
78
+ const handleEdit = useCallback((): void => {
79
+ onEdit?.()
80
+ if (preventDefaultOnEdit) return
81
+ setEditFormOpen(true)
82
+ }, [onEdit, preventDefaultOnEdit, setEditFormOpen])
83
+
84
+ const handleDelete = useCallback((): void => {
85
+ onDelete?.()
86
+ if (preventDefaultOnDelete) return
87
+ if (accessCode == null) return
88
+ deleteCode(
89
+ { access_code_id: accessCode.access_code_id },
90
+ {
91
+ onSuccess: () => {
92
+ setAccessCodeResult('deleted')
93
+ },
94
+ }
95
+ )
96
+ }, [accessCode, deleteCode, onDelete, preventDefaultOnDelete])
55
97
 
56
98
  if (accessCode == null) {
57
99
  return null
58
100
  }
59
101
 
60
102
  const name = accessCode.name ?? t.fallbackName
103
+ const isAccessCodeBeingRemoved = accessCode.status === 'removing'
104
+
105
+ if (editFormOpen) {
106
+ return (
107
+ <NestedEditAccessCodeForm
108
+ accessCodeId={accessCode.access_code_id}
109
+ errorFilter={errorFilter}
110
+ warningFilter={warningFilter}
111
+ disableLockUnlock={disableLockUnlock}
112
+ disableCreateAccessCode={disableCreateAccessCode}
113
+ disableEditAccessCode={disableEditAccessCode}
114
+ disableDeleteAccessCode={disableDeleteAccessCode}
115
+ disableResourceIds={disableResourceIds}
116
+ disableConnectedAccountInformation={disableConnectedAccountInformation}
117
+ disableClimateSettingSchedules={disableClimateSettingSchedules}
118
+ onBack={() => {
119
+ setEditFormOpen(false)
120
+ }}
121
+ onSuccess={() => {
122
+ setAccessCodeResult('updated')
123
+ setEditFormOpen(false)
124
+ }}
125
+ className={className}
126
+ />
127
+ )
128
+ }
61
129
 
62
130
  if (selectedDeviceId != null) {
63
131
  return (
@@ -96,92 +164,114 @@ export function AccessCodeDetails({
96
164
  variant: 'warning' as const,
97
165
  message: warning.message,
98
166
  })),
167
+
168
+ ...(isAccessCodeBeingRemoved
169
+ ? [
170
+ {
171
+ variant: 'warning' as const,
172
+ message: t.warningRemoving,
173
+ },
174
+ ]
175
+ : []),
99
176
  ]
100
177
 
101
178
  return (
102
- <div className={classNames('seam-access-code-details', className)}>
103
- <ContentHeader title='Access code' onBack={onBack} />
104
- <div className='seam-summary'>
105
- <div
106
- className={classNames(
107
- 'seam-top',
108
- alerts.length > 0 && 'seam-top-has-alerts'
109
- )}
110
- >
111
- <span className='seam-label'>{t.accessCode}</span>
112
- <h5 className='seam-access-code-name'>{name}</h5>
113
- <div className='seam-code'>
114
- <span>{accessCode.code}</span>
115
- <IconButton
116
- onClick={() => {
117
- void copyToClipboard(accessCode.code ?? '')
118
- }}
119
- >
120
- <CopyIcon />
121
- </IconButton>
122
- </div>
123
- <div className='seam-duration'>
124
- <Duration accessCode={accessCode} />
125
- </div>
126
- </div>
127
- <Alerts alerts={alerts} className='seam-alerts-padded' />
128
- <AccessCodeDevice
129
- deviceId={accessCode.device_id}
130
- disableLockUnlock={disableLockUnlock}
131
- onSelectDevice={selectDevice}
132
- />
133
- </div>
134
- {(!disableEditAccessCode || !disableDeleteAccessCode) && (
135
- <div className='seam-actions'>
136
- {!disableEditAccessCode && (
137
- <Button size='small' onClick={onEdit} disabled={isDeleting}>
138
- {t.editCode}
139
- </Button>
140
- )}
141
- {!disableDeleteAccessCode && (
142
- <Button
143
- size='small'
144
- onClick={() => {
145
- deleteCode({ access_code_id: accessCode.access_code_id })
146
- }}
147
- disabled={isDeleting}
148
- >
149
- {t.deleteCode}
150
- </Button>
151
- )}
152
- </div>
153
- )}
154
- <div className='seam-details'>
155
- {!disableResourceIds && (
156
- <div className='seam-row'>
157
- <div className='seam-heading'>{t.id}:</div>
158
- <div className='seam-content seam-code-id'>
159
- <span>{accessCode.access_code_id}</span>
179
+ <>
180
+ <Snackbar
181
+ variant='success'
182
+ message={snackbarMessage}
183
+ visible={accessCodeResult != null}
184
+ autoDismiss
185
+ onClose={() => {
186
+ setAccessCodeResult(null)
187
+ }}
188
+ />
189
+ <div className={classNames('seam-access-code-details', className)}>
190
+ <ContentHeader title='Access code' onBack={onBack} />
191
+ <div className='seam-summary'>
192
+ <div
193
+ className={classNames(
194
+ 'seam-top',
195
+ alerts.length > 0 && 'seam-top-has-alerts'
196
+ )}
197
+ >
198
+ <span className='seam-label'>{t.accessCode}</span>
199
+ <h5 className='seam-access-code-name'>{name}</h5>
200
+ <div className='seam-code'>
201
+ <span>{accessCode.code}</span>
160
202
  <IconButton
161
203
  onClick={() => {
162
- void copyToClipboard(accessCode.access_code_id)
204
+ void copyToClipboard(accessCode.code ?? '')
163
205
  }}
164
206
  >
165
207
  <CopyIcon />
166
208
  </IconButton>
167
209
  </div>
210
+ <div className='seam-duration'>
211
+ <Duration accessCode={accessCode} />
212
+ </div>
213
+ </div>
214
+ <Alerts alerts={alerts} className='seam-alerts-padded' />
215
+ <AccessCodeDevice
216
+ deviceId={accessCode.device_id}
217
+ disableLockUnlock={disableLockUnlock}
218
+ onSelectDevice={selectDevice}
219
+ />
220
+ </div>
221
+ {(!disableEditAccessCode || !disableDeleteAccessCode) && (
222
+ <div className='seam-actions'>
223
+ {!disableEditAccessCode && (
224
+ <Button
225
+ size='small'
226
+ onClick={handleEdit}
227
+ disabled={isAccessCodeBeingRemoved || isDeleting}
228
+ >
229
+ {t.editCode}
230
+ </Button>
231
+ )}
232
+ {!disableDeleteAccessCode && (
233
+ <Button
234
+ size='small'
235
+ onClick={handleDelete}
236
+ disabled={isAccessCodeBeingRemoved || isDeleting}
237
+ >
238
+ {t.deleteCode}
239
+ </Button>
240
+ )}
168
241
  </div>
169
242
  )}
170
- <div className='seam-row'>
171
- <div className='seam-heading'>{t.created}:</div>
172
- <div className='seam-content'>
173
- {formatDate(accessCode.created_at)}
243
+ <div className='seam-details'>
244
+ {!disableResourceIds && (
245
+ <div className='seam-row'>
246
+ <div className='seam-heading'>{t.id}:</div>
247
+ <div className='seam-content seam-code-id'>
248
+ <span>{accessCode.access_code_id}</span>
249
+ <IconButton
250
+ onClick={() => {
251
+ void copyToClipboard(accessCode.access_code_id)
252
+ }}
253
+ >
254
+ <CopyIcon />
255
+ </IconButton>
256
+ </div>
257
+ </div>
258
+ )}
259
+ <div className='seam-row'>
260
+ <div className='seam-heading'>{t.created}:</div>
261
+ <div className='seam-content'>
262
+ {formatDate(accessCode.created_at)}
263
+ </div>
174
264
  </div>
175
- </div>
176
265
 
177
- <div className='seam-row seam-schedule'>
178
- <div className='seam-heading'>{t.timing}:</div>
179
- <div className='seam-content'>
180
- <ScheduleInfo accessCode={accessCode} />
266
+ <div className='seam-row seam-schedule'>
267
+ <div className='seam-heading'>{t.timing}:</div>
268
+ <div className='seam-content'>
269
+ <ScheduleInfo accessCode={accessCode} />
270
+ </div>
181
271
  </div>
182
272
  </div>
183
273
  </div>
184
- </div>
274
+ </>
185
275
  )
186
276
  }
187
277
 
@@ -266,6 +356,11 @@ const formatDate = (date: string): string =>
266
356
  year: 'numeric',
267
357
  })
268
358
 
359
+ const accessCodeResultToMessage = (result: 'updated' | 'deleted'): string => {
360
+ if (result === 'deleted') return t.accessCodeDeleted
361
+ return t.accessCodeUpdated
362
+ }
363
+
269
364
  const t = {
270
365
  accessCode: 'Access code',
271
366
  fallbackName: 'Code',
@@ -282,4 +377,7 @@ const t = {
282
377
  at: 'at',
283
378
  editCode: 'Edit code',
284
379
  deleteCode: 'Delete code',
380
+ warningRemoving: 'This access code is currently being removed.',
381
+ accessCodeUpdated: 'Access code updated',
382
+ accessCodeDeleted: 'Access code is being removed',
285
383
  }