@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.
- package/README.md +1 -1
- package/dist/elements.js +10 -10
- package/dist/elements.js.map +1 -1
- package/dist/index.css +79 -79
- package/dist/index.css.map +1 -1
- package/dist/index.min.css +1 -1
- package/dist/index.min.css.map +1 -1
- package/lib/seam/components/AccessCodeTable/AccessCodeMenu.js +1 -1
- package/lib/seam/components/AccessCodeTable/AccessCodeMenu.js.map +1 -1
- package/lib/seam/components/AccessCodeTable/AccessCodeRow.js +1 -1
- package/lib/seam/components/AccessCodeTable/AccessCodeRow.js.map +1 -1
- package/lib/seam/components/AccessCodeTable/AccessCodeTable.js +6 -5
- package/lib/seam/components/AccessCodeTable/AccessCodeTable.js.map +1 -1
- package/lib/seam/components/AccessCodeTable/CodeDetails.js +1 -1
- package/lib/seam/components/AccessCodeTable/CodeDetails.js.map +1 -1
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.d.ts +5 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.js +30 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.js.map +1 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.d.ts +8 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.js +10 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.js.map +1 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.d.ts +7 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js +38 -0
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js.map +1 -0
- package/lib/seam/components/DeviceTable/DeviceTable.js +1 -1
- package/lib/seam/components/DeviceTable/DeviceTable.js.map +1 -1
- package/lib/ui/thermostat/ClimateSettingStatus.d.ts +1 -1
- package/lib/ui/thermostat/ClimateSettingStatus.js +5 -1
- package/lib/ui/thermostat/ClimateSettingStatus.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +2 -2
- package/src/lib/seam/components/AccessCodeTable/AccessCodeMenu.tsx +1 -1
- package/src/lib/seam/components/AccessCodeTable/AccessCodeRow.tsx +2 -2
- package/src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx +7 -6
- package/src/lib/seam/components/AccessCodeTable/CodeDetails.tsx +1 -1
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleDetails.tsx +61 -0
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleRow.tsx +35 -0
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts +13 -0
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx +93 -0
- package/src/lib/seam/components/DeviceTable/DeviceTable.tsx +1 -1
- package/src/lib/ui/thermostat/ClimateSettingStatus.tsx +11 -3
- package/src/lib/version.ts +1 -1
- package/src/styles/_main.scss +2 -2
- 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
|
|
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":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAA;AAClF,OAAO,EAGL,eAAe,GAChB,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAA;AACxE,OAAO,EACL,UAAU,GAEX,MAAM,iCAAiC,CAAA;AACxC,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,eAAe,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAsBtD,MAAM,mBAAmB,GAAG,CAC1B,MAAc,EACd,gBAAwB,EACf,EAAE;IACX,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAC7B,OAAO,
|
|
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:
|
|
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,
|
|
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.
|
|
1
|
+
declare const seamapiReactVersion = "1.46.4";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seamapi/react",
|
|
3
|
-
"version": "1.46.
|
|
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.
|
|
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",
|
|
@@ -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-
|
|
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-
|
|
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
|
|
63
|
+
const name = accessCode.name ?? ''
|
|
64
|
+
const code = accessCode.code ?? ''
|
|
64
65
|
return (
|
|
65
|
-
|
|
66
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
+
}
|
package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts
ADDED
|
@@ -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
|
|
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={
|
|
27
|
-
|
|
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' && (
|
package/src/lib/version.ts
CHANGED
package/src/styles/_main.scss
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
84
|
+
.seam-table-action-menu {
|
|
85
85
|
.seam-delete-confirmation {
|
|
86
86
|
padding: 8px 16px;
|
|
87
87
|
text-align: center;
|