@seamapi/react 1.46.3 → 1.46.4

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 (45) hide show
  1. package/README.md +1 -1
  2. package/dist/elements.js +10 -10
  3. package/dist/elements.js.map +1 -1
  4. package/dist/index.css +79 -79
  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/AccessCodeTable/AccessCodeMenu.js +1 -1
  9. package/lib/seam/components/AccessCodeTable/AccessCodeMenu.js.map +1 -1
  10. package/lib/seam/components/AccessCodeTable/AccessCodeRow.js +1 -1
  11. package/lib/seam/components/AccessCodeTable/AccessCodeRow.js.map +1 -1
  12. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +6 -5
  13. package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
  14. package/lib/seam/components/AccessCodeTable/CodeDetails.js +1 -1
  15. package/lib/seam/components/AccessCodeTable/CodeDetails.js.map +1 -1
  16. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.d.ts +5 -0
  17. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.js +30 -0
  18. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.js.map +1 -0
  19. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.d.ts +8 -0
  20. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.js +10 -0
  21. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.js.map +1 -0
  22. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.d.ts +7 -0
  23. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js +38 -0
  24. package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js.map +1 -0
  25. package/lib/seam/components/DeviceTable/DeviceTable.js +1 -1
  26. package/lib/seam/components/DeviceTable/DeviceTable.js.map +1 -1
  27. package/lib/ui/thermostat/ClimateSettingStatus.d.ts +1 -1
  28. package/lib/ui/thermostat/ClimateSettingStatus.js +5 -1
  29. package/lib/ui/thermostat/ClimateSettingStatus.js.map +1 -1
  30. package/lib/version.d.ts +1 -1
  31. package/lib/version.js +1 -1
  32. package/package.json +2 -2
  33. package/src/lib/seam/components/AccessCodeTable/AccessCodeMenu.tsx +1 -1
  34. package/src/lib/seam/components/AccessCodeTable/AccessCodeRow.tsx +2 -2
  35. package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +7 -6
  36. package/src/lib/seam/components/AccessCodeTable/CodeDetails.tsx +1 -1
  37. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.tsx +61 -0
  38. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.tsx +35 -0
  39. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts +13 -0
  40. package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx +93 -0
  41. package/src/lib/seam/components/DeviceTable/DeviceTable.tsx +1 -1
  42. package/src/lib/ui/thermostat/ClimateSettingStatus.tsx +11 -3
  43. package/src/lib/version.ts +1 -1
  44. package/src/styles/_main.scss +2 -2
  45. package/src/styles/{_access-code-table.scss → _seam-table.scss} +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClimateSettingScheduleRow.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAA;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAA;AAOlF,MAAM,UAAU,yBAAyB,CAAC,EACxC,sBAAsB,EACtB,OAAO,GACwB;IAC/B,OAAO,CACL,MAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,aACxB,KAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,YACnC,wBACE,KAAC,0BAA0B,KAAG,GAC1B,GACI,EACZ,MAAC,SAAS,IAAC,SAAS,EAAC,gBAAgB,aACnC,KAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB,YACnC,sBAAsB,CAAC,IAAI,GACtB,EACR,KAAC,6BAA6B,IAC5B,sBAAsB,EAAE,sBAAsB,GAC9C,IACQ,IACH,CACZ,CAAA;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export interface ClimateSettingScheduleTableProps {
3
+ deviceId: string;
4
+ onBack?: () => void;
5
+ className?: string;
6
+ }
7
+ export declare function ClimateSettingScheduleTable({ deviceId, onBack, className, }: ClimateSettingScheduleTableProps): JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import { useClimateSettingSchedules, } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js';
4
+ import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
5
+ import { EmptyPlaceholder } from '../../../../lib/ui/Table/EmptyPlaceholder.js';
6
+ import { TableBody } from '../../../../lib/ui/Table/TableBody.js';
7
+ import { TableHeader } from '../../../../lib/ui/Table/TableHeader.js';
8
+ import { TableTitle } from '../../../../lib/ui/Table/TableTitle.js';
9
+ import { Caption } from '../../../../lib/ui/typography/Caption.js';
10
+ import { ClimateSettingScheduleRow } from './ClimateSettingScheduleRow.js';
11
+ export function ClimateSettingScheduleTable({ deviceId, onBack, className, }) {
12
+ const { climateSettingSchedules, isLoading, isError, error } = useClimateSettingSchedules({
13
+ device_id: deviceId,
14
+ });
15
+ // TODO filtering
16
+ const filteredClimateSettingSchedules = climateSettingSchedules ?? [];
17
+ if (isLoading) {
18
+ return _jsx("p", { className: className, children: "..." });
19
+ }
20
+ if (isError) {
21
+ return _jsx("p", { className: className, children: error?.message });
22
+ }
23
+ return (_jsxs("div", { className: classNames('seam-table', className), children: [_jsx(ContentHeader, { onBack: onBack }), _jsx(TableHeader, { children: _jsxs(TableTitle, { children: [t.climateSettingSchedules, ' ', _jsxs(Caption, { children: ["(", filteredClimateSettingSchedules.length, ")"] })] }) }), _jsx(TableBody, { children: _jsx(Content, { climateSettingSchedules: filteredClimateSettingSchedules, onClimateSettingScheduleClick: () => { } }) })] }));
24
+ }
25
+ function Content(props) {
26
+ const { climateSettingSchedules, onClimateSettingScheduleClick } = props;
27
+ if (climateSettingSchedules.length === 0) {
28
+ return (_jsx(EmptyPlaceholder, { children: t.noClimateSettingSchedulesMessage }));
29
+ }
30
+ return (_jsx(_Fragment, { children: climateSettingSchedules.map((schedule) => (_jsx(ClimateSettingScheduleRow, { climateSettingSchedule: schedule, onClick: () => {
31
+ onClimateSettingScheduleClick(schedule.climate_setting_schedule_id);
32
+ } }, schedule.climate_setting_schedule_id))) }));
33
+ }
34
+ const t = {
35
+ climateSettingSchedules: 'Climate setting schedules',
36
+ noClimateSettingSchedulesMessage: 'Sorry, no climate setting schedules were found',
37
+ };
38
+ //# sourceMappingURL=ClimateSettingScheduleTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClimateSettingScheduleTable.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EACL,0BAA0B,GAE3B,MAAM,iFAAiF,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAQ1E,MAAM,UAAU,2BAA2B,CAAC,EAC1C,QAAQ,EACR,MAAM,EACN,SAAS,GACwB;IACjC,MAAM,EAAE,uBAAuB,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAC1D,0BAA0B,CAAC;QACzB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAA;IAEJ,iBAAiB;IACjB,MAAM,+BAA+B,GAAG,uBAAuB,IAAI,EAAE,CAAA;IAErE,IAAI,SAAS,EAAE;QACb,OAAO,YAAG,SAAS,EAAE,SAAS,oBAAS,CAAA;KACxC;IAED,IAAI,OAAO,EAAE;QACX,OAAO,YAAG,SAAS,EAAE,SAAS,YAAG,KAAK,EAAE,OAAO,GAAK,CAAA;KACrD;IAED,OAAO,CACL,eAAK,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,aACjD,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,EACjC,KAAC,WAAW,cACV,MAAC,UAAU,eACR,CAAC,CAAC,uBAAuB,EAAE,GAAG,EAC/B,MAAC,OAAO,oBAAG,+BAA+B,CAAC,MAAM,SAAY,IAClD,GACD,EACd,KAAC,SAAS,cACR,KAAC,OAAO,IACN,uBAAuB,EAAE,+BAA+B,EACxD,6BAA6B,EAAE,GAAG,EAAE,GAAE,CAAC,GACvC,GACQ,IACR,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAGhB;IACC,MAAM,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,KAAK,CAAA;IAExE,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,CACL,KAAC,gBAAgB,cAAE,CAAC,CAAC,gCAAgC,GAAoB,CAC1E,CAAA;KACF;IAED,OAAO,CACL,4BACG,uBAAuB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACzC,KAAC,yBAAyB,IACxB,sBAAsB,EAAE,QAAQ,EAEhC,OAAO,EAAE,GAAG,EAAE;gBACZ,6BAA6B,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAA;YACrE,CAAC,IAHI,QAAQ,CAAC,2BAA2B,CAIzC,CACH,CAAC,GACD,CACJ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,uBAAuB,EAAE,2BAA2B;IACpD,gCAAgC,EAC9B,gDAAgD;CACnD,CAAA"}
@@ -18,7 +18,7 @@ const defaultDeviceFilter = (device, searchInputValue) => {
18
18
  const value = searchInputValue.trim();
19
19
  if (value === '')
20
20
  return true;
21
- return new RegExp(value, 'i').test(device.properties.name ?? '');
21
+ return device.properties.name.toLowerCase().includes(value);
22
22
  };
23
23
  export function DeviceTable({ deviceIds, connectedAccountIds, disableLockUnlock = false, disableSearch = false, onDeviceClick = () => { }, preventDefaultOnDeviceClick = false, onBack, deviceFilter = defaultDeviceFilter, deviceComparator = compareByCreatedAtDesc, heading = t.devices, title = t.devices, className, } = {}) {
24
24
  const { devices, isLoading, isError, error } = useDevices({
@@ -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,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import type { ClimateSetting } from 'seamapi';
3
3
  interface ClimateSettingStatusProps {
4
- climateSetting: ClimateSetting;
4
+ climateSetting: Partial<ClimateSetting>;
5
5
  temperatureUnit?: 'fahrenheit' | 'celsius';
6
6
  iconPlacement?: 'left' | 'right';
7
7
  }
@@ -4,7 +4,11 @@ import { ThermostatHeatIcon } from '../../../lib/icons/ThermostatHeat.js';
4
4
  import { ThermostatHeatCoolIcon } from '../../../lib/icons/ThermostatHeatCool.js';
5
5
  import { ThermostatOffIcon } from '../../../lib/icons/ThermostatOff.js';
6
6
  export function ClimateSettingStatus({ climateSetting, temperatureUnit = 'fahrenheit', iconPlacement = 'left', }) {
7
- return (_jsxs("div", { className: 'seam-climate-setting-status', children: [iconPlacement === 'left' && (_jsx(ClimateSettingIcon, { mode: climateSetting.hvac_mode_setting })), _jsx(Content, { mode: climateSetting.hvac_mode_setting, coolingSetPoint: climateSetting.cooling_set_point_fahrenheit, heatingSetPoint: climateSetting.heating_set_point_fahrenheit, temperatureUnit: temperatureUnit }), iconPlacement === 'right' && (_jsx(ClimateSettingIcon, { mode: climateSetting.hvac_mode_setting }))] }));
7
+ return (_jsxs("div", { className: 'seam-climate-setting-status', children: [iconPlacement === 'left' && (_jsx(ClimateSettingIcon, { mode: climateSetting.hvac_mode_setting })), _jsx(Content, { mode: climateSetting.hvac_mode_setting, coolingSetPoint: temperatureUnit === 'fahrenheit'
8
+ ? climateSetting.cooling_set_point_fahrenheit
9
+ : climateSetting.cooling_set_point_celsius, heatingSetPoint: temperatureUnit === 'fahrenheit'
10
+ ? climateSetting.heating_set_point_fahrenheit
11
+ : climateSetting.heating_set_point_celsius, temperatureUnit: temperatureUnit }), iconPlacement === 'right' && (_jsx(ClimateSettingIcon, { mode: climateSetting.hvac_mode_setting }))] }));
8
12
  }
9
13
  function ClimateSettingIcon(props) {
10
14
  const { mode } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"ClimateSettingStatus.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/ClimateSettingStatus.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAQ9D,MAAM,UAAU,oBAAoB,CAAC,EACnC,cAAc,EACd,eAAe,GAAG,YAAY,EAC9B,aAAa,GAAG,MAAM,GACI;IAC1B,OAAO,CACL,eAAK,SAAS,EAAC,6BAA6B,aACzC,aAAa,KAAK,MAAM,IAAI,CAC3B,KAAC,kBAAkB,IAAC,IAAI,EAAE,cAAc,CAAC,iBAAiB,GAAI,CAC/D,EACD,KAAC,OAAO,IACN,IAAI,EAAE,cAAc,CAAC,iBAAiB,EACtC,eAAe,EAAE,cAAc,CAAC,4BAA4B,EAC5D,eAAe,EAAE,cAAc,CAAC,4BAA4B,EAC5D,eAAe,EAAE,eAAe,GAChC,EACD,aAAa,KAAK,OAAO,IAAI,CAC5B,KAAC,kBAAkB,IAAC,IAAI,EAAE,cAAc,CAAC,iBAAiB,GAAI,CAC/D,IACG,CACP,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAE3B;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEtB,OAAO,CACL,eAAK,SAAS,EAAC,kCAAkC,aAC9C,IAAI,KAAK,MAAM,IAAI,KAAC,kBAAkB,KAAG,EACzC,IAAI,KAAK,MAAM,IAAI,KAAC,kBAAkB,KAAG,EACzC,IAAI,KAAK,UAAU,IAAI,KAAC,sBAAsB,KAAG,EACjD,IAAI,KAAK,KAAK,IAAI,KAAC,iBAAiB,KAAG,IACpC,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAShB;IACC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACzE,MAAM,kBAAkB,GAAG,eAAe,KAAK,SAAS,CAAA;IACxD,MAAM,kBAAkB,GAAG,eAAe,KAAK,SAAS,CAAA;IACxD,MAAM,IAAI,GACR,eAAe,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAEzE,IAAI,IAAI,KAAK,MAAM,IAAI,kBAAkB;QACvC,OAAO,yBAAO,GAAG,eAAe,GAAG,IAAI,EAAE,GAAQ,CAAA;IAEnD,IAAI,IAAI,KAAK,MAAM,IAAI,kBAAkB;QACvC,OAAO,yBAAO,GAAG,eAAe,GAAG,IAAI,EAAE,GAAQ,CAAA;IAEnD,IAAI,IAAI,KAAK,UAAU,IAAI,kBAAkB,IAAI,kBAAkB;QACjE,OAAO,CACL,yBAAO,GAAG,eAAe,GAAG,IAAI,MAAM,eAAe,GAAG,IAAI,EAAE,GAAQ,CACvE,CAAA;IAEH,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,yBAAO,CAAC,CAAC,GAAG,GAAQ,CAAA;IAE/C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,GAAG;IACR,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,GAAG,EAAE,KAAK;CACX,CAAA"}
1
+ {"version":3,"file":"ClimateSettingStatus.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/ClimateSettingStatus.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAQ9D,MAAM,UAAU,oBAAoB,CAAC,EACnC,cAAc,EACd,eAAe,GAAG,YAAY,EAC9B,aAAa,GAAG,MAAM,GACI;IAC1B,OAAO,CACL,eAAK,SAAS,EAAC,6BAA6B,aACzC,aAAa,KAAK,MAAM,IAAI,CAC3B,KAAC,kBAAkB,IAAC,IAAI,EAAE,cAAc,CAAC,iBAAiB,GAAI,CAC/D,EACD,KAAC,OAAO,IACN,IAAI,EAAE,cAAc,CAAC,iBAAiB,EACtC,eAAe,EACb,eAAe,KAAK,YAAY;oBAC9B,CAAC,CAAC,cAAc,CAAC,4BAA4B;oBAC7C,CAAC,CAAC,cAAc,CAAC,yBAAyB,EAE9C,eAAe,EACb,eAAe,KAAK,YAAY;oBAC9B,CAAC,CAAC,cAAc,CAAC,4BAA4B;oBAC7C,CAAC,CAAC,cAAc,CAAC,yBAAyB,EAE9C,eAAe,EAAE,eAAe,GAChC,EACD,aAAa,KAAK,OAAO,IAAI,CAC5B,KAAC,kBAAkB,IAAC,IAAI,EAAE,cAAc,CAAC,iBAAiB,GAAI,CAC/D,IACG,CACP,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAE3B;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEtB,OAAO,CACL,eAAK,SAAS,EAAC,kCAAkC,aAC9C,IAAI,KAAK,MAAM,IAAI,KAAC,kBAAkB,KAAG,EACzC,IAAI,KAAK,MAAM,IAAI,KAAC,kBAAkB,KAAG,EACzC,IAAI,KAAK,UAAU,IAAI,KAAC,sBAAsB,KAAG,EACjD,IAAI,KAAK,KAAK,IAAI,KAAC,iBAAiB,KAAG,IACpC,CACP,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAShB;IACC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACzE,MAAM,kBAAkB,GAAG,eAAe,KAAK,SAAS,CAAA;IACxD,MAAM,kBAAkB,GAAG,eAAe,KAAK,SAAS,CAAA;IACxD,MAAM,IAAI,GACR,eAAe,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAEzE,IAAI,IAAI,KAAK,MAAM,IAAI,kBAAkB;QACvC,OAAO,yBAAO,GAAG,eAAe,GAAG,IAAI,EAAE,GAAQ,CAAA;IAEnD,IAAI,IAAI,KAAK,MAAM,IAAI,kBAAkB;QACvC,OAAO,yBAAO,GAAG,eAAe,GAAG,IAAI,EAAE,GAAQ,CAAA;IAEnD,IAAI,IAAI,KAAK,UAAU,IAAI,kBAAkB,IAAI,kBAAkB;QACjE,OAAO,CACL,yBAAO,GAAG,eAAe,GAAG,IAAI,MAAM,eAAe,GAAG,IAAI,EAAE,GAAQ,CACvE,CAAA;IAEH,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,yBAAO,CAAC,CAAC,GAAG,GAAQ,CAAA;IAE/C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,GAAG;IACR,gBAAgB,EAAE,IAAI;IACtB,aAAa,EAAE,IAAI;IACnB,GAAG,EAAE,KAAK;CACX,CAAA"}
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const seamapiReactVersion = "1.46.3";
1
+ declare const seamapiReactVersion = "1.46.4";
2
2
  export default seamapiReactVersion;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.46.3';
1
+ const seamapiReactVersion = '1.46.4';
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.46.3",
3
+ "version": "1.46.4",
4
4
  "description": "Seam Components.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -133,7 +133,7 @@
133
133
  "@mui/icons-material": "^5.11.16",
134
134
  "@mui/material": "^5.12.2",
135
135
  "@rxfork/r2wc-react-to-web-component": "^2.3.0",
136
- "@seamapi/fake-seam-connect": "^1.3.1",
136
+ "@seamapi/fake-seam-connect": "^1.5.0",
137
137
  "@storybook/addon-designs": "^7.0.1",
138
138
  "@storybook/addon-essentials": "^7.0.2",
139
139
  "@storybook/addon-links": "^7.0.2",
@@ -20,7 +20,7 @@ export function AccessCodeMenu(props: AccessCodeMenuProps): JSX.Element {
20
20
  <MoreActionsMenu
21
21
  menuProps={{
22
22
  backgroundProps: {
23
- className: 'seam-access-code-table-action-menu',
23
+ className: 'seam-table-action-menu',
24
24
  },
25
25
  }}
26
26
  >
@@ -46,12 +46,12 @@ export function AccessCodeRow({
46
46
  </TableCell>
47
47
  <TableCell className='seam-action-cell'>
48
48
  {errorCount > 0 && (
49
- <div className='seam-code-issue-icon-wrap' title={errorIconTitle}>
49
+ <div className='seam-issue-icon-wrap' title={errorIconTitle}>
50
50
  <ExclamationCircleOutlineIcon />
51
51
  </div>
52
52
  )}
53
53
  {errorCount === 0 && warningCount > 0 && (
54
- <div className='seam-code-issue-icon-wrap' title={warningIconTitle}>
54
+ <div className='seam-issue-icon-wrap' title={warningIconTitle}>
55
55
  <TriangleWarningOutlineIcon />
56
56
  </div>
57
57
  )}
@@ -58,12 +58,13 @@ const defaultAccessCodeFilter = (
58
58
  accessCode: AccessCode,
59
59
  searchInputValue: string
60
60
  ): boolean => {
61
- const value = searchInputValue.trim()
61
+ const value = searchInputValue.trim().toLowerCase()
62
62
  if (value === '') return true
63
- const searchRegex = new RegExp(value, 'i')
63
+ const name = accessCode.name ?? ''
64
+ const code = accessCode.code ?? ''
64
65
  return (
65
- searchRegex.test(accessCode?.name ?? '') ||
66
- searchRegex.test(accessCode?.code ?? '')
66
+ name.trim().toLowerCase().includes(value) ||
67
+ code.trim().toLowerCase().includes(value)
67
68
  )
68
69
  }
69
70
 
@@ -163,7 +164,7 @@ export function AccessCodeTable({
163
164
  }
164
165
 
165
166
  return (
166
- <div className={classNames('seam-access-code-table', className)}>
167
+ <div className={classNames('seam-table', className)}>
167
168
  <ContentHeader onBack={onBack} />
168
169
  <TableHeader>
169
170
  <div className='seam-left'>
@@ -178,7 +179,7 @@ export function AccessCodeTable({
178
179
  {!disableCreateAccessCode && (
179
180
  <IconButton
180
181
  onClick={toggleAddAccessCodeForm}
181
- className='seam-add-access-code-button'
182
+ className='seam-add-button'
182
183
  >
183
184
  <AddIcon />
184
185
  </IconButton>
@@ -10,7 +10,7 @@ export function CodeDetails(props: { accessCode: AccessCode }): JSX.Element {
10
10
  const { device } = useDevice({ device_id: accessCode.device_id })
11
11
 
12
12
  return (
13
- <div className='seam-code-details'>
13
+ <div className='seam-details'>
14
14
  <span className='seam-device-name seam-truncated-text'>
15
15
  {device?.properties.name}
16
16
  </span>
@@ -0,0 +1,61 @@
1
+ import { DateTime } from 'luxon'
2
+ import type { ClimateSettingSchedule } from 'seamapi'
3
+
4
+ import { useDevice } from 'lib/seam/devices/use-device.js'
5
+ import { DotDivider } from 'lib/ui/layout/DotDivider.js'
6
+ import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
7
+ import { useIsDateInPast } from 'lib/ui/use-is-date-in-past.js'
8
+
9
+ export function ClimateSettingScheduleDetails(props: {
10
+ climateSettingSchedule: ClimateSettingSchedule
11
+ }): JSX.Element {
12
+ const { climateSettingSchedule } = props
13
+ const { device } = useDevice({ device_id: climateSettingSchedule.device_id })
14
+
15
+ return (
16
+ <div className='seam-details'>
17
+ <span className='seam-device-name seam-truncated-text'>
18
+ {device?.properties.name}
19
+ </span>
20
+ <DotDivider />
21
+ <Duration climateSettingSchedule={climateSettingSchedule} />
22
+ <DotDivider />
23
+ <ClimateSettingStatus climateSetting={climateSettingSchedule} />
24
+ </div>
25
+ )
26
+ }
27
+
28
+ function Duration(props: {
29
+ climateSettingSchedule: ClimateSettingSchedule
30
+ }): JSX.Element {
31
+ const { climateSettingSchedule } = props
32
+
33
+ const hasStarted =
34
+ useIsDateInPast(climateSettingSchedule.schedule_starts_at) ?? false
35
+
36
+ if (hasStarted) {
37
+ return (
38
+ <span>
39
+ {t.ends} {formatDate(climateSettingSchedule.schedule_ends_at)}{' '}
40
+ </span>
41
+ )
42
+ }
43
+
44
+ return (
45
+ <span>
46
+ {t.starts} {formatDate(climateSettingSchedule.schedule_starts_at)}
47
+ </span>
48
+ )
49
+ }
50
+
51
+ function formatDate(date: string): string {
52
+ return DateTime.fromISO(date).toLocaleString({
53
+ month: 'long',
54
+ day: 'numeric',
55
+ })
56
+ }
57
+
58
+ const t = {
59
+ starts: 'Starts',
60
+ ends: 'Ends',
61
+ }
@@ -0,0 +1,35 @@
1
+ import { ClimateSettingScheduleIcon } from 'lib/icons/ClimateSettingSchedule.js'
2
+ import type { UseClimateSettingSchedulesData } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
3
+ import { TableCell } from 'lib/ui/Table/TableCell.js'
4
+ import { TableRow } from 'lib/ui/Table/TableRow.js'
5
+ import { Title } from 'lib/ui/typography/Title.js'
6
+
7
+ import { ClimateSettingScheduleDetails } from './ClimateSettingScheduleDetails.js'
8
+
9
+ interface ClimateSettingScheduleRowProps {
10
+ climateSettingSchedule: UseClimateSettingSchedulesData[number]
11
+ onClick: () => void
12
+ }
13
+
14
+ export function ClimateSettingScheduleRow({
15
+ climateSettingSchedule,
16
+ onClick,
17
+ }: ClimateSettingScheduleRowProps): JSX.Element {
18
+ return (
19
+ <TableRow onClick={onClick}>
20
+ <TableCell className='seam-icon-cell'>
21
+ <div>
22
+ <ClimateSettingScheduleIcon />
23
+ </div>
24
+ </TableCell>
25
+ <TableCell className='seam-name-cell'>
26
+ <Title className='seam-truncated-text'>
27
+ {climateSettingSchedule.name}
28
+ </Title>
29
+ <ClimateSettingScheduleDetails
30
+ climateSettingSchedule={climateSettingSchedule}
31
+ />
32
+ </TableCell>
33
+ </TableRow>
34
+ )
35
+ }
@@ -0,0 +1,13 @@
1
+ import type { ElementProps } from 'lib/element.js'
2
+
3
+ import type { ClimateSettingScheduleTableProps } from './ClimateSettingScheduleTable.js'
4
+
5
+ export const name = 'seam-climate-setting-schedule-table'
6
+
7
+ export const props: ElementProps<ClimateSettingScheduleTableProps> = {
8
+ deviceId: 'string',
9
+ onBack: 'object',
10
+ className: 'string',
11
+ }
12
+
13
+ export { ClimateSettingScheduleTable as Component } from './ClimateSettingScheduleTable.js'
@@ -0,0 +1,93 @@
1
+ import classNames from 'classnames'
2
+
3
+ import {
4
+ useClimateSettingSchedules,
5
+ type UseClimateSettingSchedulesData,
6
+ } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
7
+ import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
8
+ import { EmptyPlaceholder } from 'lib/ui/Table/EmptyPlaceholder.js'
9
+ import { TableBody } from 'lib/ui/Table/TableBody.js'
10
+ import { TableHeader } from 'lib/ui/Table/TableHeader.js'
11
+ import { TableTitle } from 'lib/ui/Table/TableTitle.js'
12
+ import { Caption } from 'lib/ui/typography/Caption.js'
13
+
14
+ import { ClimateSettingScheduleRow } from './ClimateSettingScheduleRow.js'
15
+
16
+ export interface ClimateSettingScheduleTableProps {
17
+ deviceId: string
18
+ onBack?: () => void
19
+ className?: string
20
+ }
21
+
22
+ export function ClimateSettingScheduleTable({
23
+ deviceId,
24
+ onBack,
25
+ className,
26
+ }: ClimateSettingScheduleTableProps): JSX.Element {
27
+ const { climateSettingSchedules, isLoading, isError, error } =
28
+ useClimateSettingSchedules({
29
+ device_id: deviceId,
30
+ })
31
+
32
+ // TODO filtering
33
+ const filteredClimateSettingSchedules = climateSettingSchedules ?? []
34
+
35
+ if (isLoading) {
36
+ return <p className={className}>...</p>
37
+ }
38
+
39
+ if (isError) {
40
+ return <p className={className}>{error?.message}</p>
41
+ }
42
+
43
+ return (
44
+ <div className={classNames('seam-table', className)}>
45
+ <ContentHeader onBack={onBack} />
46
+ <TableHeader>
47
+ <TableTitle>
48
+ {t.climateSettingSchedules}{' '}
49
+ <Caption>({filteredClimateSettingSchedules.length})</Caption>
50
+ </TableTitle>
51
+ </TableHeader>
52
+ <TableBody>
53
+ <Content
54
+ climateSettingSchedules={filteredClimateSettingSchedules}
55
+ onClimateSettingScheduleClick={() => {}}
56
+ />
57
+ </TableBody>
58
+ </div>
59
+ )
60
+ }
61
+
62
+ function Content(props: {
63
+ climateSettingSchedules: Array<UseClimateSettingSchedulesData[number]>
64
+ onClimateSettingScheduleClick: (climateSettingScheduleId: string) => void
65
+ }): JSX.Element {
66
+ const { climateSettingSchedules, onClimateSettingScheduleClick } = props
67
+
68
+ if (climateSettingSchedules.length === 0) {
69
+ return (
70
+ <EmptyPlaceholder>{t.noClimateSettingSchedulesMessage}</EmptyPlaceholder>
71
+ )
72
+ }
73
+
74
+ return (
75
+ <>
76
+ {climateSettingSchedules.map((schedule) => (
77
+ <ClimateSettingScheduleRow
78
+ climateSettingSchedule={schedule}
79
+ key={schedule.climate_setting_schedule_id}
80
+ onClick={() => {
81
+ onClimateSettingScheduleClick(schedule.climate_setting_schedule_id)
82
+ }}
83
+ />
84
+ ))}
85
+ </>
86
+ )
87
+ }
88
+
89
+ const t = {
90
+ climateSettingSchedules: 'Climate setting schedules',
91
+ noClimateSettingSchedulesMessage:
92
+ 'Sorry, no climate setting schedules were found',
93
+ }
@@ -48,7 +48,7 @@ const defaultDeviceFilter = (
48
48
  ): boolean => {
49
49
  const value = searchInputValue.trim()
50
50
  if (value === '') return true
51
- return new RegExp(value, 'i').test(device.properties.name ?? '')
51
+ return device.properties.name.toLowerCase().includes(value)
52
52
  }
53
53
 
54
54
  export function DeviceTable({
@@ -6,7 +6,7 @@ import { ThermostatHeatCoolIcon } from 'lib/icons/ThermostatHeatCool.js'
6
6
  import { ThermostatOffIcon } from 'lib/icons/ThermostatOff.js'
7
7
 
8
8
  interface ClimateSettingStatusProps {
9
- climateSetting: ClimateSetting
9
+ climateSetting: Partial<ClimateSetting>
10
10
  temperatureUnit?: 'fahrenheit' | 'celsius'
11
11
  iconPlacement?: 'left' | 'right'
12
12
  }
@@ -23,8 +23,16 @@ export function ClimateSettingStatus({
23
23
  )}
24
24
  <Content
25
25
  mode={climateSetting.hvac_mode_setting}
26
- coolingSetPoint={climateSetting.cooling_set_point_fahrenheit}
27
- heatingSetPoint={climateSetting.heating_set_point_fahrenheit}
26
+ coolingSetPoint={
27
+ temperatureUnit === 'fahrenheit'
28
+ ? climateSetting.cooling_set_point_fahrenheit
29
+ : climateSetting.cooling_set_point_celsius
30
+ }
31
+ heatingSetPoint={
32
+ temperatureUnit === 'fahrenheit'
33
+ ? climateSetting.heating_set_point_fahrenheit
34
+ : climateSetting.heating_set_point_celsius
35
+ }
28
36
  temperatureUnit={temperatureUnit}
29
37
  />
30
38
  {iconPlacement === 'right' && (
@@ -1,3 +1,3 @@
1
- const seamapiReactVersion = '1.46.3'
1
+ const seamapiReactVersion = '1.46.4'
2
2
 
3
3
  export default seamapiReactVersion
@@ -5,7 +5,6 @@
5
5
  @use './alert';
6
6
  @use './buttons';
7
7
  @use './layout';
8
- @use './access-code-table';
9
8
  @use './colors';
10
9
  @use './icons';
11
10
  @use './menus';
@@ -19,6 +18,7 @@
19
18
  @use './radio-field';
20
19
  @use './checkbox';
21
20
  @use './thermostat';
21
+ @use './seam-table';
22
22
 
23
23
  .seam-components {
24
24
  // Reset
@@ -40,10 +40,10 @@
40
40
  // Components
41
41
  @include device-details.all;
42
42
  @include device-table.all;
43
- @include access-code-table.all;
44
43
  @include access-code-details.all;
45
44
  @include access-code-form.all;
46
45
  @include alert.all;
47
46
  @include supported-device-table.all;
48
47
  @include thermostat.all;
48
+ @include seam-table.all;
49
49
  }
@@ -1,7 +1,7 @@
1
1
  @use './colors';
2
2
 
3
3
  @mixin all {
4
- .seam-access-code-table {
4
+ .seam-table {
5
5
  .seam-search-text-field {
6
6
  width: 170px;
7
7
  }
@@ -11,7 +11,7 @@
11
11
  display: flex;
12
12
  align-items: center;
13
13
 
14
- .seam-add-access-code-button {
14
+ .seam-add-button {
15
15
  margin-left: 8px;
16
16
  }
17
17
  }
@@ -47,7 +47,7 @@
47
47
  max-width: 380px;
48
48
  }
49
49
 
50
- .seam-code-details {
50
+ .seam-details {
51
51
  font-size: 14px;
52
52
  line-height: 134%;
53
53
  color: colors.$text-gray-1;
@@ -72,7 +72,7 @@
72
72
  justify-content: center;
73
73
  }
74
74
 
75
- .seam-code-issue-icon-wrap {
75
+ .seam-issue-icon-wrap {
76
76
  display: flex;
77
77
  justify-content: center;
78
78
  align-items: center;
@@ -81,7 +81,7 @@
81
81
  }
82
82
  }
83
83
 
84
- .seam-access-code-table-action-menu {
84
+ .seam-table-action-menu {
85
85
  .seam-delete-confirmation {
86
86
  padding: 8px 16px;
87
87
  text-align: center;