@seamapi/react 1.48.1 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/elements.js +3285 -3280
- package/dist/elements.js.map +1 -1
- package/dist/index.css +188 -2
- package/dist/index.css.map +1 -1
- package/dist/index.min.css +1 -1
- package/dist/index.min.css.map +1 -1
- package/lib/icons/ChevronWide.d.ts +2 -0
- package/lib/icons/ChevronWide.js +5 -0
- package/lib/icons/ChevronWide.js.map +1 -0
- package/lib/icons/Copy.js +2 -4
- package/lib/icons/Copy.js.map +1 -1
- package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js +9 -2
- package/lib/seam/components/AccessCodeDetails/AccessCodeDetails.js.map +1 -1
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.d.ts +7 -0
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js +32 -0
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map +1 -0
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js +2 -2
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js.map +1 -1
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.d.ts +3 -1
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js +20 -3
- package/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js.map +1 -1
- package/lib/ui/layout/AccordionRow.d.ts +7 -0
- package/lib/ui/layout/AccordionRow.js +8 -0
- package/lib/ui/layout/AccordionRow.js.map +1 -0
- package/lib/ui/layout/DetailRow.d.ts +6 -0
- package/lib/ui/layout/DetailRow.js +5 -0
- package/lib/ui/layout/DetailRow.js.map +1 -0
- package/lib/ui/layout/DetailSection.d.ts +7 -0
- package/lib/ui/layout/DetailSection.js +6 -0
- package/lib/ui/layout/DetailSection.js.map +1 -0
- package/lib/ui/layout/DetailSectionGroup.d.ts +2 -0
- package/lib/ui/layout/DetailSectionGroup.js +5 -0
- package/lib/ui/layout/DetailSectionGroup.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/lib/icons/ChevronWide.tsx +21 -0
- package/src/lib/icons/Copy.tsx +6 -21
- package/src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx +23 -2
- package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.element.ts +13 -0
- package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx +103 -0
- package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.tsx +4 -2
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts +2 -0
- package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx +37 -2
- package/src/lib/ui/layout/AccordionRow.tsx +36 -0
- package/src/lib/ui/layout/DetailRow.tsx +17 -0
- package/src/lib/ui/layout/DetailSection.tsx +25 -0
- package/src/lib/ui/layout/DetailSectionGroup.tsx +7 -0
- package/src/lib/version.ts +1 -1
- package/src/styles/_access-code-details.scss +42 -1
- package/src/styles/_climate-setting-schedule-details.scss +44 -0
- package/src/styles/_layout.scss +146 -0
- package/src/styles/_main.scss +2 -0
- package/src/styles/_seam-table.scss +8 -0
- package/src/styles/_thermostat.scss +4 -1
|
@@ -2,12 +2,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { DateTime } from 'luxon';
|
|
4
4
|
import { useState } from 'react';
|
|
5
|
+
import { CopyIcon } from '../../../../lib/icons/Copy.js';
|
|
5
6
|
import { useAccessCode } from '../../../../lib/seam/access-codes/use-access-code.js';
|
|
6
7
|
import { useDeleteAccessCode } from '../../../../lib/seam/access-codes/use-delete-access-code.js';
|
|
7
8
|
import { AccessCodeDevice } from '../../../../lib/seam/components/AccessCodeDetails/AccessCodeDevice.js';
|
|
8
9
|
import { DeviceDetails } from '../../../../lib/seam/components/DeviceDetails/DeviceDetails.js';
|
|
9
10
|
import { Alerts } from '../../../../lib/ui/Alert/Alerts.js';
|
|
10
11
|
import { Button } from '../../../../lib/ui/Button.js';
|
|
12
|
+
import { copyToClipboard } from '../../../../lib/ui/clipboard.js';
|
|
13
|
+
import { IconButton } from '../../../../lib/ui/IconButton.js';
|
|
11
14
|
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
12
15
|
import { useIsDateInPast } from '../../../../lib/ui/use-is-date-in-past.js';
|
|
13
16
|
const disableEditAccessCode = true;
|
|
@@ -34,9 +37,13 @@ export function AccessCodeDetails({ accessCodeId, disableLockUnlock = false, onB
|
|
|
34
37
|
message: warning.message,
|
|
35
38
|
})),
|
|
36
39
|
];
|
|
37
|
-
return (_jsxs("div", { className: classNames('seam-access-code-details', className), children: [_jsx(ContentHeader, { title: 'Access code', onBack: onBack }), _jsxs("div", { className: 'seam-summary', children: [_jsxs("div", { className: classNames('seam-top', alerts.length > 0 && 'seam-top-has-alerts'), children: [_jsx("span", { className: 'seam-label', children: t.accessCode }), _jsx("h5", { className: 'seam-access-code-name', children: name }),
|
|
40
|
+
return (_jsxs("div", { className: classNames('seam-access-code-details', className), children: [_jsx(ContentHeader, { title: 'Access code', onBack: onBack }), _jsxs("div", { className: 'seam-summary', children: [_jsxs("div", { className: classNames('seam-top', alerts.length > 0 && 'seam-top-has-alerts'), children: [_jsx("span", { className: 'seam-label', children: t.accessCode }), _jsx("h5", { className: 'seam-access-code-name', children: name }), _jsxs("div", { className: 'seam-code', children: [_jsx("span", { children: accessCode.code }), _jsx(IconButton, { onClick: () => {
|
|
41
|
+
void copyToClipboard(accessCode.code ?? '');
|
|
42
|
+
}, children: _jsx(CopyIcon, {}) })] }), _jsx("div", { className: 'seam-duration', children: _jsx(Duration, { accessCode: accessCode }) })] }), _jsx(Alerts, { alerts: alerts, className: 'seam-alerts-padded' }), _jsx(AccessCodeDevice, { deviceId: accessCode.device_id, disableLockUnlock: disableLockUnlock, onSelectDevice: selectDevice })] }), (!disableEditAccessCode || !disableDeleteAccessCode) && (_jsxs("div", { className: 'seam-actions', children: [!disableEditAccessCode && (_jsx(Button, { size: 'small', onClick: onEdit, disabled: isDeleting, children: t.editCode })), !disableDeleteAccessCode && (_jsx(Button, { size: 'small', onClick: () => {
|
|
38
43
|
deleteCode({ access_code_id: accessCode.access_code_id });
|
|
39
|
-
}, disabled: isDeleting, children: t.deleteCode }))] })), _jsxs("div", { className: 'seam-details', children: [_jsxs("div", { className: 'seam-row', children: [_jsxs("div", { className: 'seam-heading', children: [t.id, ":"] }),
|
|
44
|
+
}, disabled: isDeleting, children: t.deleteCode }))] })), _jsxs("div", { className: 'seam-details', children: [_jsxs("div", { className: 'seam-row', children: [_jsxs("div", { className: 'seam-heading', children: [t.id, ":"] }), _jsxs("div", { className: 'seam-content seam-code-id', children: [_jsx("span", { children: accessCode.access_code_id }), _jsx(IconButton, { onClick: () => {
|
|
45
|
+
void copyToClipboard(accessCode.access_code_id);
|
|
46
|
+
}, children: _jsx(CopyIcon, {}) })] })] }), _jsxs("div", { className: 'seam-row', children: [_jsxs("div", { className: 'seam-heading', children: [t.created, ":"] }), _jsx("div", { className: 'seam-content', children: formatDate(accessCode.created_at) })] }), _jsxs("div", { className: 'seam-row seam-schedule', children: [_jsxs("div", { className: 'seam-heading', children: [t.timing, ":"] }), _jsx("div", { className: 'seam-content', children: _jsx(ScheduleInfo, { accessCode: accessCode }) })] })] })] }));
|
|
40
47
|
}
|
|
41
48
|
function ScheduleInfo({ accessCode }) {
|
|
42
49
|
if (accessCode.type === 'ongoing') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessCodeDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAQhC,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAA;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAA;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAWlC,MAAM,UAAU,iBAAiB,CAAC,EAChC,YAAY,EACZ,iBAAiB,GAAG,KAAK,EACzB,MAAM,EACN,MAAM,EACN,SAAS,EACT,uBAAuB,GAAG,KAAK,GACR;IACvB,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;IAClD,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACtE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,EAAE,CAAA;IAE3E,IAAI,UAAU,IAAI,IAAI,EAAE;QACtB,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,CAAA;IAE9C,IAAI,gBAAgB,IAAI,IAAI,EAAE;QAC5B,OAAO,CACL,KAAC,aAAa,IACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,GAAG,EAAE;gBACX,YAAY,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC,EACD,iBAAiB,EAAE,iBAAiB,GACpC,CACH,CAAA;KACF;IAED,MAAM,MAAM,GAAG;QACb,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,EAAE,OAAgB;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,EAAE,SAAkB;YAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;KACJ,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAE,UAAU,CAAC,0BAA0B,EAAE,SAAS,CAAC,aAC/D,KAAC,aAAa,IAAC,KAAK,EAAC,aAAa,EAAC,MAAM,EAAE,MAAM,GAAI,EACrD,eAAK,SAAS,EAAC,cAAc,aAC3B,eACE,SAAS,EAAE,UAAU,CACnB,UAAU,EACV,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAC3C,aAED,eAAM,SAAS,EAAC,YAAY,YAAE,CAAC,CAAC,UAAU,GAAQ,EAClD,aAAI,SAAS,EAAC,uBAAuB,YAAE,IAAI,GAAM,EACjD,
|
|
1
|
+
{"version":3,"file":"AccessCodeDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface ClimateSettingScheduleDetailsProps {
|
|
3
|
+
climateSettingScheduleId: string;
|
|
4
|
+
onBack?: () => void;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ClimateSettingScheduleDetails({ climateSettingScheduleId, onBack, className, }: ClimateSettingScheduleDetailsProps): JSX.Element | null;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { formatDateAndTime } from '../../../../lib/dates.js';
|
|
4
|
+
import { ArrowRightIcon } from '../../../../lib/icons/ArrowRight.js';
|
|
5
|
+
import { useClimateSettingSchedule } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedule.js';
|
|
6
|
+
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
7
|
+
import { DetailRow } from '../../../../lib/ui/layout/DetailRow.js';
|
|
8
|
+
import { DetailSection } from '../../../../lib/ui/layout/DetailSection.js';
|
|
9
|
+
import { DetailSectionGroup } from '../../../../lib/ui/layout/DetailSectionGroup.js';
|
|
10
|
+
import { ClimateSettingStatus } from '../../../../lib/ui/thermostat/ClimateSettingStatus.js';
|
|
11
|
+
import { ClimateSettingScheduleCard } from './ClimateSettingScheduleCard.js';
|
|
12
|
+
export function ClimateSettingScheduleDetails({ climateSettingScheduleId, onBack, className, }) {
|
|
13
|
+
const { climateSettingSchedule } = useClimateSettingSchedule(climateSettingScheduleId);
|
|
14
|
+
if (climateSettingSchedule == null) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const isManualOverrideAllowed = climateSettingSchedule.manual_override_allowed ?? false;
|
|
18
|
+
return (_jsxs("div", { className: classNames('seam-climate-setting-schedule-details', className), children: [_jsx(ContentHeader, { title: t.climateSettingSchedule, onBack: onBack }), _jsxs("div", { className: 'seam-climate-setting-schedule-details-content', children: [_jsx(ClimateSettingScheduleCard, { climateSettingScheduleId: climateSettingScheduleId }), _jsx("div", { className: 'seam-default-setting-message-container', children: _jsxs("span", { className: 'seam-default-setting-message', children: [t.defaultSettingMessagePart1, ' ', _jsx("span", { className: 'seam-default-setting-text', children: t.defaultSetting }), ' ', t.defaultSettingMessagePart2] }) }), _jsxs(DetailSectionGroup, { children: [_jsxs(DetailSection, { children: [_jsx(DetailRow, { label: t.startEndTime, children: _jsxs("span", { className: 'seam-climate-setting-details-value seam-climate-setting-details-schedule-range', children: [`${formatDateAndTime(climateSettingSchedule.schedule_starts_at)}`, _jsx(ArrowRightIcon, {}), `${formatDateAndTime(climateSettingSchedule.schedule_ends_at)}`] }) }), _jsx(DetailRow, { label: t.climateSetting, children: _jsx(ClimateSettingStatus, { climateSetting: climateSettingSchedule, iconPlacement: 'right' }) }), _jsx(DetailRow, { label: t.allowManualOverride, children: _jsx("span", { className: 'seam-climate-setting-details-value', children: isManualOverrideAllowed ? t.on : t.off }) })] }), _jsx(DetailSection, { children: _jsx(DetailRow, { label: t.creationDate, children: _jsx("div", { className: 'seam-creation-date', children: formatDateAndTime(climateSettingSchedule.created_at) }) }) })] })] })] }));
|
|
19
|
+
}
|
|
20
|
+
const t = {
|
|
21
|
+
climateSettingSchedule: 'Climate setting schedule',
|
|
22
|
+
startEndTime: 'Start/End Time',
|
|
23
|
+
climateSetting: 'Climate setting',
|
|
24
|
+
allowManualOverride: 'Allow manual override',
|
|
25
|
+
creationDate: 'Creation date',
|
|
26
|
+
defaultSettingMessagePart1: 'Thermostat will return to its',
|
|
27
|
+
defaultSetting: 'default setting',
|
|
28
|
+
defaultSettingMessagePart2: 'at end time.',
|
|
29
|
+
on: 'On',
|
|
30
|
+
off: 'Off',
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=ClimateSettingScheduleDetails.js.map
|
package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClimateSettingScheduleDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx"],"names":[],"mappings":"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"}
|
package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { isThermostatDevice } from 'seamapi';
|
|
3
|
-
import {
|
|
3
|
+
import { ChevronWideIcon } from '../../../../lib/icons/ChevronWide.js';
|
|
4
4
|
import { useDevice } from '../../../../lib/seam/devices/use-device.js';
|
|
5
5
|
import { DeviceImage } from '../../../../lib/ui/device/DeviceImage.js';
|
|
6
6
|
import { ClimateSettingStatus } from '../../../../lib/ui/thermostat/ClimateSettingStatus.js';
|
|
@@ -21,7 +21,7 @@ export function ClimateSettingScheduleDeviceBar({ deviceId, }) {
|
|
|
21
21
|
}
|
|
22
22
|
function Content(props) {
|
|
23
23
|
const { device } = props;
|
|
24
|
-
return (_jsxs("div", { className: 'seam-climate-setting-schedule-device-bar', children: [_jsxs("div", { className: 'seam-climate-setting-schedule-device-content', children: [_jsx("div", { className: 'seam-device-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-climate-setting-schedule-device-details', children: [_jsx("div", { className: 'seam-device-name', children: device.properties.name }), _jsxs("div", { className: 'seam-device-current-climate-setting', children: [t.currentClimate, ":", _jsx(ClimateSettingStatus, { climateSetting: device.properties.current_climate_setting })] })] })] }), _jsx(
|
|
24
|
+
return (_jsxs("div", { className: 'seam-climate-setting-schedule-device-bar', children: [_jsxs("div", { className: 'seam-climate-setting-schedule-device-content', children: [_jsx("div", { className: 'seam-device-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-climate-setting-schedule-device-details', children: [_jsx("div", { className: 'seam-device-name', children: device.properties.name }), _jsxs("div", { className: 'seam-device-current-climate-setting', children: [t.currentClimate, ":", _jsx(ClimateSettingStatus, { climateSetting: device.properties.current_climate_setting })] })] })] }), _jsx("div", { className: 'seam-climate-setting-schedule-device-chevron', children: _jsx(ChevronWideIcon, {}) })] }));
|
|
25
25
|
}
|
|
26
26
|
const t = {
|
|
27
27
|
currentClimate: 'Current climate',
|
package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClimateSettingScheduleDeviceBar.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ClimateSettingScheduleDeviceBar.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAyB,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,MAAM,UAAU,+BAA+B,CAAC,EAC9C,QAAQ,GAGT;IACC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACtC,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAA;IAEF,IAAI,SAAS,EAAE;QACb,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;QAC/B,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,KAAC,OAAO,IAAC,MAAM,EAAE,MAAM,GAAI,CAAA;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,KAAmC;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAExB,OAAO,CACL,eAAK,SAAS,EAAC,0CAA0C,aACvD,eAAK,SAAS,EAAC,8CAA8C,aAC3D,cAAK,SAAS,EAAC,mBAAmB,YAChC,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,GAC3B,EACN,eAAK,SAAS,EAAC,8CAA8C,aAC3D,cAAK,SAAS,EAAC,kBAAkB,YAAE,MAAM,CAAC,UAAU,CAAC,IAAI,GAAO,EAChE,eAAK,SAAS,EAAC,qCAAqC,aACjD,CAAC,CAAC,cAAc,OACjB,KAAC,oBAAoB,IACnB,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,uBAAuB,GACzD,IACE,IACF,IACF,EACN,cAAK,SAAS,EAAC,8CAA8C,YAC3D,KAAC,eAAe,KAAG,GACf,IACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,cAAc,EAAE,iBAAiB;CAClC,CAAA"}
|
|
@@ -3,10 +3,12 @@ import type { ClimateSettingSchedule } from 'seamapi';
|
|
|
3
3
|
export interface ClimateSettingScheduleTableProps {
|
|
4
4
|
deviceId: string;
|
|
5
5
|
disableSearch?: boolean;
|
|
6
|
+
onClimateSettingScheduleClick?: (climateSettingScheduleId: string) => void;
|
|
7
|
+
preventDefaultOnClimateSettingScheduleClick?: boolean;
|
|
6
8
|
climateSettingScheduleFilter?: (climateSettingSchedule: ClimateSettingSchedule, searchInputValue: string) => boolean;
|
|
7
9
|
climateSettingScheduleComparator?: (climateSettingScheduleA: ClimateSettingSchedule, climateSettingScheduleB: ClimateSettingSchedule) => number;
|
|
8
10
|
onBack?: () => void;
|
|
9
11
|
heading?: string | null;
|
|
10
12
|
className?: string;
|
|
11
13
|
}
|
|
12
|
-
export declare function ClimateSettingScheduleTable({ deviceId, disableSearch, climateSettingScheduleFilter, climateSettingScheduleComparator, onBack, heading, className, }: ClimateSettingScheduleTableProps): JSX.Element;
|
|
14
|
+
export declare function ClimateSettingScheduleTable({ deviceId, disableSearch, onClimateSettingScheduleClick, preventDefaultOnClimateSettingScheduleClick, climateSettingScheduleFilter, climateSettingScheduleComparator, onBack, heading, className, }: ClimateSettingScheduleTableProps): JSX.Element;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
import { useMemo, useState } from 'react';
|
|
3
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
4
4
|
import { compareByCreatedAtDesc } from '../../../../lib/dates.js';
|
|
5
|
+
import { ClimateSettingScheduleDetails } from '../../../../lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js';
|
|
5
6
|
import { useClimateSettingSchedules, } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js';
|
|
6
7
|
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
7
8
|
import { EmptyPlaceholder } from '../../../../lib/ui/Table/EmptyPlaceholder.js';
|
|
@@ -18,11 +19,12 @@ const defaultClimateSettingScheduleFilter = (climateSettingSchedule, searchInput
|
|
|
18
19
|
const name = climateSettingSchedule.name ?? '';
|
|
19
20
|
return name.trim().toLowerCase().includes(value);
|
|
20
21
|
};
|
|
21
|
-
export function ClimateSettingScheduleTable({ deviceId, disableSearch = false, climateSettingScheduleFilter = defaultClimateSettingScheduleFilter, climateSettingScheduleComparator = compareByCreatedAtDesc, onBack, heading = t.climateSettingSchedules, className, }) {
|
|
22
|
+
export function ClimateSettingScheduleTable({ deviceId, disableSearch = false, onClimateSettingScheduleClick = () => { }, preventDefaultOnClimateSettingScheduleClick = false, climateSettingScheduleFilter = defaultClimateSettingScheduleFilter, climateSettingScheduleComparator = compareByCreatedAtDesc, onBack, heading = t.climateSettingSchedules, className, }) {
|
|
22
23
|
const { climateSettingSchedules, isLoading, isError, error } = useClimateSettingSchedules({
|
|
23
24
|
device_id: deviceId,
|
|
24
25
|
});
|
|
25
26
|
const [searchInputValue, setSearchInputValue] = useState('');
|
|
27
|
+
const [selectedViewClimateSettingScheduleId, setSelectedViewClimateSettingScheduleId,] = useState(null);
|
|
26
28
|
const filteredClimateSettingSchedules = useMemo(() => climateSettingSchedules
|
|
27
29
|
?.filter((schedule) => climateSettingScheduleFilter(schedule, searchInputValue))
|
|
28
30
|
?.sort(climateSettingScheduleComparator) ?? [], [
|
|
@@ -31,13 +33,28 @@ export function ClimateSettingScheduleTable({ deviceId, disableSearch = false, c
|
|
|
31
33
|
climateSettingScheduleFilter,
|
|
32
34
|
climateSettingScheduleComparator,
|
|
33
35
|
]);
|
|
36
|
+
const handleClimateSettingScheduleClick = useCallback((climateSettingScheduleId) => {
|
|
37
|
+
onClimateSettingScheduleClick(climateSettingScheduleId);
|
|
38
|
+
if (preventDefaultOnClimateSettingScheduleClick)
|
|
39
|
+
return;
|
|
40
|
+
setSelectedViewClimateSettingScheduleId(climateSettingScheduleId);
|
|
41
|
+
}, [
|
|
42
|
+
onClimateSettingScheduleClick,
|
|
43
|
+
preventDefaultOnClimateSettingScheduleClick,
|
|
44
|
+
setSelectedViewClimateSettingScheduleId,
|
|
45
|
+
]);
|
|
46
|
+
if (selectedViewClimateSettingScheduleId != null) {
|
|
47
|
+
return (_jsx(ClimateSettingScheduleDetails, { className: className, climateSettingScheduleId: selectedViewClimateSettingScheduleId, onBack: () => {
|
|
48
|
+
setSelectedViewClimateSettingScheduleId(null);
|
|
49
|
+
} }));
|
|
50
|
+
}
|
|
34
51
|
if (isLoading) {
|
|
35
52
|
return _jsx("p", { className: className, children: "..." });
|
|
36
53
|
}
|
|
37
54
|
if (isError) {
|
|
38
55
|
return _jsx("p", { className: className, children: error?.message });
|
|
39
56
|
}
|
|
40
|
-
return (_jsxs("div", { className: classNames('seam-table', className), children: [_jsx(ContentHeader, { onBack: onBack }), _jsxs(TableHeader, { children: [heading != null ? (_jsxs(TableTitle, { children: [heading ?? t.climateSettingSchedules, ' ', _jsxs(Caption, { children: ["(", filteredClimateSettingSchedules.length, ")"] })] })) : (_jsx("div", { className: 'seam-fragment' })), !disableSearch && (_jsx(SearchTextField, { value: searchInputValue, onChange: setSearchInputValue, disabled: (climateSettingSchedules?.length ?? 0) === 0 }))] }), _jsx(TableBody, { children: _jsx(Content, { climateSettingSchedules: filteredClimateSettingSchedules, onClimateSettingScheduleClick:
|
|
57
|
+
return (_jsxs("div", { className: classNames('seam-table', className), children: [_jsx(ContentHeader, { onBack: onBack }), _jsxs(TableHeader, { children: [heading != null ? (_jsxs(TableTitle, { children: [heading ?? t.climateSettingSchedules, ' ', _jsxs(Caption, { children: ["(", filteredClimateSettingSchedules.length, ")"] })] })) : (_jsx("div", { className: 'seam-fragment' })), !disableSearch && (_jsx(SearchTextField, { value: searchInputValue, onChange: setSearchInputValue, disabled: (climateSettingSchedules?.length ?? 0) === 0 }))] }), _jsx(TableBody, { children: _jsx(Content, { climateSettingSchedules: filteredClimateSettingSchedules, onClimateSettingScheduleClick: handleClimateSettingScheduleClick }) })] }));
|
|
41
58
|
}
|
|
42
59
|
function Content(props) {
|
|
43
60
|
const { climateSettingSchedules, onClimateSettingScheduleClick } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClimateSettingScheduleTable.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ClimateSettingScheduleTable.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
interface AccordionRowProps extends PropsWithChildren {
|
|
3
|
+
label: string;
|
|
4
|
+
rightCollapsedContent?: JSX.Element;
|
|
5
|
+
}
|
|
6
|
+
export declare function AccordionRow({ label, rightCollapsedContent, children, }: AccordionRowProps): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronWideIcon } from '../../../lib/icons/ChevronWide.js';
|
|
3
|
+
import { useToggle } from '../../../lib/ui/use-toggle.js';
|
|
4
|
+
export function AccordionRow({ label, rightCollapsedContent, children, }) {
|
|
5
|
+
const [isExpanded, toggle] = useToggle();
|
|
6
|
+
return (_jsxs("div", { className: 'seam-accordion-row', "aria-expanded": isExpanded, children: [_jsxs("button", { className: 'seam-accordion-row-trigger', onClick: toggle, children: [_jsx("p", { className: 'seam-row-label', children: label }), _jsxs("div", { className: 'seam-row-inner-wrap', children: [_jsx("div", { className: 'seam-row-trigger-right-content', children: rightCollapsedContent }), _jsx("div", { className: 'seam-accordion-icon-wrap', children: _jsx(ChevronWideIcon, {}) })] })] }), _jsx("div", { className: 'seam-accordion-row-content', children: _jsx("div", { className: 'seam-accordion-row-inner-content', children: children }) })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=AccordionRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionRow.js","sourceRoot":"","sources":["../../../src/lib/ui/layout/AccordionRow.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAOhD,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,qBAAqB,EACrB,QAAQ,GACU;IAClB,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,CAAA;IAExC,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,mBAAgB,UAAU,aAC3D,kBAAQ,SAAS,EAAC,4BAA4B,EAAC,OAAO,EAAE,MAAM,aAC5D,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAK,EACzC,eAAK,SAAS,EAAC,qBAAqB,aAClC,cAAK,SAAS,EAAC,gCAAgC,YAC5C,qBAAqB,GAClB,EACN,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,eAAe,KAAG,GACf,IACF,IACC,EACT,cAAK,SAAS,EAAC,4BAA4B,YACzC,cAAK,SAAS,EAAC,kCAAkC,YAAE,QAAQ,GAAO,GAC9D,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function DetailRow({ label, children, }) {
|
|
3
|
+
return (_jsxs("div", { className: 'seam-detail-row', children: [_jsx("p", { className: 'seam-row-label', children: label }), _jsx("div", { className: 'seam-detail-row-right-area-content', children: children })] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=DetailRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailRow.js","sourceRoot":"","sources":["../../../src/lib/ui/layout/DetailRow.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,GAC0B;IAClC,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAK,EACzC,cAAK,SAAS,EAAC,oCAAoC,YAAE,QAAQ,GAAO,IAChE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
interface DetailSectionProps {
|
|
3
|
+
label?: string;
|
|
4
|
+
tooltipContent?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function DetailSection({ label, tooltipContent, children, }: PropsWithChildren<DetailSectionProps>): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip } from '../../../lib/ui/Tooltip/Tooltip.js';
|
|
3
|
+
export function DetailSection({ label, tooltipContent, children, }) {
|
|
4
|
+
return (_jsxs("div", { className: 'seam-detail-section', children: [_jsxs("div", { className: 'seam-detail-label-wrap', children: [label != null && _jsx("p", { className: 'seam-detail-label', children: label }), tooltipContent != null && _jsx(Tooltip, { children: tooltipContent })] }), _jsx("div", { className: 'seam-detail-group', children: children })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=DetailSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailSection.js","sourceRoot":"","sources":["../../../src/lib/ui/layout/DetailSection.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAOnD,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,cAAc,EACd,QAAQ,GAC8B;IACtC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,eAAK,SAAS,EAAC,wBAAwB,aACpC,KAAK,IAAI,IAAI,IAAI,YAAG,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAK,EAC7D,cAAc,IAAI,IAAI,IAAI,KAAC,OAAO,cAAE,cAAc,GAAW,IAC1D,EAEN,cAAK,SAAS,EAAC,mBAAmB,YAAE,QAAQ,GAAO,IAC/C,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailSectionGroup.js","sourceRoot":"","sources":["../../../src/lib/ui/layout/DetailSectionGroup.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,kBAAkB,CAAC,EACjC,QAAQ,GACU;IAClB,OAAO,cAAK,SAAS,EAAC,sBAAsB,YAAE,QAAQ,GAAO,CAAA;AAC/D,CAAC"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiReactVersion = "1.
|
|
1
|
+
declare const seamapiReactVersion = "1.49.0";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Automaically generated by SVGR from assets/icons/*.svg.
|
|
3
|
+
* Do not edit this file or add other components to this directory.
|
|
4
|
+
*/
|
|
5
|
+
import type { SVGProps } from 'react'
|
|
6
|
+
export function ChevronWideIcon(props: SVGProps<SVGSVGElement>): JSX.Element {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns='http://www.w3.org/2000/svg'
|
|
10
|
+
width={25}
|
|
11
|
+
height={24}
|
|
12
|
+
fill='none'
|
|
13
|
+
{...props}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
fill='#D5D8DC'
|
|
17
|
+
d='m22.123 8-10 10-10-10 1.775-1.775 8.225 8.225 8.225-8.225L22.123 8Z'
|
|
18
|
+
/>
|
|
19
|
+
</svg>
|
|
20
|
+
)
|
|
21
|
+
}
|
package/src/lib/icons/Copy.tsx
CHANGED
|
@@ -7,30 +7,15 @@ export function CopyIcon(props: SVGProps<SVGSVGElement>): JSX.Element {
|
|
|
7
7
|
return (
|
|
8
8
|
<svg
|
|
9
9
|
xmlns='http://www.w3.org/2000/svg'
|
|
10
|
-
width={
|
|
11
|
-
height={
|
|
10
|
+
width={25}
|
|
11
|
+
height={25}
|
|
12
12
|
fill='none'
|
|
13
13
|
{...props}
|
|
14
14
|
>
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
x={0}
|
|
20
|
-
y={0}
|
|
21
|
-
maskUnits='userSpaceOnUse'
|
|
22
|
-
style={{
|
|
23
|
-
maskType: 'alpha',
|
|
24
|
-
}}
|
|
25
|
-
>
|
|
26
|
-
<path fill='#D9D9D9' d='M0 0h18v18H0z' />
|
|
27
|
-
</mask>
|
|
28
|
-
<g mask='url(#copy_svg__a)'>
|
|
29
|
-
<path
|
|
30
|
-
fill='#007AFC'
|
|
31
|
-
d='M3.75 16.5c-.413 0-.766-.147-1.06-.44A1.446 1.446 0 0 1 2.25 15V4.5h1.5V15H12v1.5H3.75Zm3-3c-.412 0-.766-.147-1.059-.44A1.445 1.445 0 0 1 5.25 12V3c0-.413.147-.766.441-1.06.293-.293.647-.44 1.059-.44h6.75c.412 0 .766.147 1.06.44.293.294.44.647.44 1.06v9c0 .412-.147.766-.44 1.06-.294.293-.648.44-1.06.44H6.75Zm0-1.5h6.75V3H6.75v9Z'
|
|
32
|
-
/>
|
|
33
|
-
</g>
|
|
15
|
+
<path
|
|
16
|
+
fill='#232B3A'
|
|
17
|
+
d='M5.84 22.988c-.55 0-1.02-.195-1.412-.587a1.928 1.928 0 0 1-.587-1.413v-14h2v14h11v2h-11Zm4-4c-.55 0-1.02-.195-1.411-.587a1.927 1.927 0 0 1-.588-1.413v-12c0-.55.196-1.02.588-1.413a1.925 1.925 0 0 1 1.412-.587h9c.55 0 1.02.196 1.413.587.391.392.587.863.587 1.413v12c0 .55-.196 1.021-.587 1.413a1.928 1.928 0 0 1-1.413.587h-9Zm0-2h9v-12h-9v12Z'
|
|
18
|
+
/>
|
|
34
19
|
</svg>
|
|
35
20
|
)
|
|
36
21
|
}
|
|
@@ -8,12 +8,15 @@ import type {
|
|
|
8
8
|
DeviceError,
|
|
9
9
|
} from 'seamapi'
|
|
10
10
|
|
|
11
|
+
import { CopyIcon } from 'lib/icons/Copy.js'
|
|
11
12
|
import { useAccessCode } from 'lib/seam/access-codes/use-access-code.js'
|
|
12
13
|
import { useDeleteAccessCode } from 'lib/seam/access-codes/use-delete-access-code.js'
|
|
13
14
|
import { AccessCodeDevice } from 'lib/seam/components/AccessCodeDetails/AccessCodeDevice.js'
|
|
14
15
|
import { DeviceDetails } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
|
|
15
16
|
import { Alerts } from 'lib/ui/Alert/Alerts.js'
|
|
16
17
|
import { Button } from 'lib/ui/Button.js'
|
|
18
|
+
import { copyToClipboard } from 'lib/ui/clipboard.js'
|
|
19
|
+
import { IconButton } from 'lib/ui/IconButton.js'
|
|
17
20
|
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
|
|
18
21
|
import { useIsDateInPast } from 'lib/ui/use-is-date-in-past.js'
|
|
19
22
|
|
|
@@ -82,7 +85,16 @@ export function AccessCodeDetails({
|
|
|
82
85
|
>
|
|
83
86
|
<span className='seam-label'>{t.accessCode}</span>
|
|
84
87
|
<h5 className='seam-access-code-name'>{name}</h5>
|
|
85
|
-
<div className='seam-code'>
|
|
88
|
+
<div className='seam-code'>
|
|
89
|
+
<span>{accessCode.code}</span>
|
|
90
|
+
<IconButton
|
|
91
|
+
onClick={() => {
|
|
92
|
+
void copyToClipboard(accessCode.code ?? '')
|
|
93
|
+
}}
|
|
94
|
+
>
|
|
95
|
+
<CopyIcon />
|
|
96
|
+
</IconButton>
|
|
97
|
+
</div>
|
|
86
98
|
<div className='seam-duration'>
|
|
87
99
|
<Duration accessCode={accessCode} />
|
|
88
100
|
</div>
|
|
@@ -117,7 +129,16 @@ export function AccessCodeDetails({
|
|
|
117
129
|
<div className='seam-details'>
|
|
118
130
|
<div className='seam-row'>
|
|
119
131
|
<div className='seam-heading'>{t.id}:</div>
|
|
120
|
-
<div className='seam-content'>
|
|
132
|
+
<div className='seam-content seam-code-id'>
|
|
133
|
+
<span>{accessCode.access_code_id}</span>
|
|
134
|
+
<IconButton
|
|
135
|
+
onClick={() => {
|
|
136
|
+
void copyToClipboard(accessCode.access_code_id)
|
|
137
|
+
}}
|
|
138
|
+
>
|
|
139
|
+
<CopyIcon />
|
|
140
|
+
</IconButton>
|
|
141
|
+
</div>
|
|
121
142
|
</div>
|
|
122
143
|
<div className='seam-row'>
|
|
123
144
|
<div className='seam-heading'>{t.created}:</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ElementProps } from 'lib/element.js'
|
|
2
|
+
|
|
3
|
+
import type { ClimateSettingScheduleDetailsProps } from './ClimateSettingScheduleDetails.js'
|
|
4
|
+
|
|
5
|
+
export const name = 'seam-climate-setting-schedule-details'
|
|
6
|
+
|
|
7
|
+
export const props: ElementProps<ClimateSettingScheduleDetailsProps> = {
|
|
8
|
+
climateSettingScheduleId: 'string',
|
|
9
|
+
onBack: 'object',
|
|
10
|
+
className: 'string',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { ClimateSettingScheduleDetails as Component } from './ClimateSettingScheduleDetails.js'
|
package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import classNames from 'classnames'
|
|
2
|
+
|
|
3
|
+
import { formatDateAndTime } from 'lib/dates.js'
|
|
4
|
+
import { ArrowRightIcon } from 'lib/icons/ArrowRight.js'
|
|
5
|
+
import { useClimateSettingSchedule } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedule.js'
|
|
6
|
+
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
|
|
7
|
+
import { DetailRow } from 'lib/ui/layout/DetailRow.js'
|
|
8
|
+
import { DetailSection } from 'lib/ui/layout/DetailSection.js'
|
|
9
|
+
import { DetailSectionGroup } from 'lib/ui/layout/DetailSectionGroup.js'
|
|
10
|
+
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
|
|
11
|
+
|
|
12
|
+
import { ClimateSettingScheduleCard } from './ClimateSettingScheduleCard.js'
|
|
13
|
+
|
|
14
|
+
export interface ClimateSettingScheduleDetailsProps {
|
|
15
|
+
climateSettingScheduleId: string
|
|
16
|
+
onBack?: () => void
|
|
17
|
+
className?: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function ClimateSettingScheduleDetails({
|
|
21
|
+
climateSettingScheduleId,
|
|
22
|
+
onBack,
|
|
23
|
+
className,
|
|
24
|
+
}: ClimateSettingScheduleDetailsProps): JSX.Element | null {
|
|
25
|
+
const { climateSettingSchedule } = useClimateSettingSchedule(
|
|
26
|
+
climateSettingScheduleId
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
if (climateSettingSchedule == null) {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const isManualOverrideAllowed =
|
|
34
|
+
climateSettingSchedule.manual_override_allowed ?? false
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div
|
|
38
|
+
className={classNames('seam-climate-setting-schedule-details', className)}
|
|
39
|
+
>
|
|
40
|
+
<ContentHeader title={t.climateSettingSchedule} onBack={onBack} />
|
|
41
|
+
<div className='seam-climate-setting-schedule-details-content'>
|
|
42
|
+
<ClimateSettingScheduleCard
|
|
43
|
+
climateSettingScheduleId={climateSettingScheduleId}
|
|
44
|
+
/>
|
|
45
|
+
<div className='seam-default-setting-message-container'>
|
|
46
|
+
<span className='seam-default-setting-message'>
|
|
47
|
+
{t.defaultSettingMessagePart1}{' '}
|
|
48
|
+
<span className='seam-default-setting-text'>
|
|
49
|
+
{t.defaultSetting}
|
|
50
|
+
</span>{' '}
|
|
51
|
+
{t.defaultSettingMessagePart2}
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
<DetailSectionGroup>
|
|
55
|
+
<DetailSection>
|
|
56
|
+
<DetailRow label={t.startEndTime}>
|
|
57
|
+
<span className='seam-climate-setting-details-value seam-climate-setting-details-schedule-range'>
|
|
58
|
+
{`${formatDateAndTime(
|
|
59
|
+
climateSettingSchedule.schedule_starts_at
|
|
60
|
+
)}`}
|
|
61
|
+
<ArrowRightIcon />
|
|
62
|
+
{`${formatDateAndTime(
|
|
63
|
+
climateSettingSchedule.schedule_ends_at
|
|
64
|
+
)}`}
|
|
65
|
+
</span>
|
|
66
|
+
</DetailRow>
|
|
67
|
+
<DetailRow label={t.climateSetting}>
|
|
68
|
+
<ClimateSettingStatus
|
|
69
|
+
climateSetting={climateSettingSchedule}
|
|
70
|
+
iconPlacement='right'
|
|
71
|
+
/>
|
|
72
|
+
</DetailRow>
|
|
73
|
+
<DetailRow label={t.allowManualOverride}>
|
|
74
|
+
<span className='seam-climate-setting-details-value'>
|
|
75
|
+
{isManualOverrideAllowed ? t.on : t.off}
|
|
76
|
+
</span>
|
|
77
|
+
</DetailRow>
|
|
78
|
+
</DetailSection>
|
|
79
|
+
<DetailSection>
|
|
80
|
+
<DetailRow label={t.creationDate}>
|
|
81
|
+
<div className='seam-creation-date'>
|
|
82
|
+
{formatDateAndTime(climateSettingSchedule.created_at)}
|
|
83
|
+
</div>
|
|
84
|
+
</DetailRow>
|
|
85
|
+
</DetailSection>
|
|
86
|
+
</DetailSectionGroup>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const t = {
|
|
93
|
+
climateSettingSchedule: 'Climate setting schedule',
|
|
94
|
+
startEndTime: 'Start/End Time',
|
|
95
|
+
climateSetting: 'Climate setting',
|
|
96
|
+
allowManualOverride: 'Allow manual override',
|
|
97
|
+
creationDate: 'Creation date',
|
|
98
|
+
defaultSettingMessagePart1: 'Thermostat will return to its',
|
|
99
|
+
defaultSetting: 'default setting',
|
|
100
|
+
defaultSettingMessagePart2: 'at end time.',
|
|
101
|
+
on: 'On',
|
|
102
|
+
off: 'Off',
|
|
103
|
+
}
|
package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDeviceBar.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isThermostatDevice, type ThermostatDevice } from 'seamapi'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ChevronWideIcon } from 'lib/icons/ChevronWide.js'
|
|
4
4
|
import { useDevice } from 'lib/seam/devices/use-device.js'
|
|
5
5
|
import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
|
|
6
6
|
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
|
|
@@ -48,7 +48,9 @@ function Content(props: { device: ThermostatDevice }): JSX.Element {
|
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
50
50
|
</div>
|
|
51
|
-
<
|
|
51
|
+
<div className='seam-climate-setting-schedule-device-chevron'>
|
|
52
|
+
<ChevronWideIcon />
|
|
53
|
+
</div>
|
|
52
54
|
</div>
|
|
53
55
|
)
|
|
54
56
|
}
|
package/src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.element.ts
CHANGED
|
@@ -7,6 +7,8 @@ export const name = 'seam-climate-setting-schedule-table'
|
|
|
7
7
|
export const props: ElementProps<ClimateSettingScheduleTableProps> = {
|
|
8
8
|
deviceId: 'string',
|
|
9
9
|
disableSearch: 'boolean',
|
|
10
|
+
onClimateSettingScheduleClick: 'object',
|
|
11
|
+
preventDefaultOnClimateSettingScheduleClick: 'boolean',
|
|
10
12
|
climateSettingScheduleFilter: 'object',
|
|
11
13
|
climateSettingScheduleComparator: 'object',
|
|
12
14
|
onBack: 'object',
|