@seamapi/react 2.11.0 → 2.12.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 +2 -2
- package/dist/elements.js +4951 -4878
- package/dist/elements.js.map +1 -1
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js +13 -4
- package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map +1 -1
- package/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.d.ts +6 -0
- package/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.js +51 -0
- package/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.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/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx +81 -49
- package/src/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.ts +92 -0
- package/src/lib/version.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { ArrowRightIcon } from '../../../../lib/icons/ArrowRight.js';
|
|
@@ -6,17 +6,21 @@ import { ClimateSettingScheduleCard } from '../../../../lib/seam/components/Clim
|
|
|
6
6
|
import { withRequiredCommonProps, } from '../../../../lib/seam/components/common-props.js';
|
|
7
7
|
import { NestedDeviceDetails } from '../../../../lib/seam/components/DeviceDetails/DeviceDetails.js';
|
|
8
8
|
import { useClimateSettingSchedule } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedule.js';
|
|
9
|
+
import { useUpdateClimateSettingSchedule } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.js';
|
|
9
10
|
import { useComponentTelemetry } from '../../../../lib/telemetry/index.js';
|
|
10
11
|
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
11
12
|
import { DetailRow } from '../../../../lib/ui/layout/DetailRow.js';
|
|
12
13
|
import { DetailSection } from '../../../../lib/ui/layout/DetailSection.js';
|
|
13
14
|
import { DetailSectionGroup } from '../../../../lib/ui/layout/DetailSectionGroup.js';
|
|
15
|
+
import { Snackbar } from '../../../../lib/ui/Snackbar/Snackbar.js';
|
|
16
|
+
import { Switch } from '../../../../lib/ui/Switch/Switch.js';
|
|
14
17
|
import { ClimateSettingStatus } from '../../../../lib/ui/thermostat/ClimateSettingStatus.js';
|
|
15
18
|
import { formatDateTime } from './dates.js';
|
|
16
19
|
export const NestedClimateSettingScheduleDetails = withRequiredCommonProps(ClimateSettingScheduleDetails);
|
|
17
20
|
export function ClimateSettingScheduleDetails({ climateSettingScheduleId, disableLockUnlock = false, disableDeleteAccessCode = false, onBack, className, errorFilter = () => true, warningFilter = () => true, disableCreateAccessCode, disableEditAccessCode, disableResourceIds = false, disableClimateSettingSchedules, }) {
|
|
18
21
|
useComponentTelemetry('ClimateSettingScheduleDetails');
|
|
19
22
|
const { climateSettingSchedule } = useClimateSettingSchedule(climateSettingScheduleId);
|
|
23
|
+
const { mutate, isSuccess, isError } = useUpdateClimateSettingSchedule();
|
|
20
24
|
const [selectedDeviceId, selectDevice] = useState(null);
|
|
21
25
|
if (climateSettingSchedule == null) {
|
|
22
26
|
return null;
|
|
@@ -27,7 +31,12 @@ export function ClimateSettingScheduleDetails({ climateSettingScheduleId, disabl
|
|
|
27
31
|
selectDevice(null);
|
|
28
32
|
}, className: className }));
|
|
29
33
|
}
|
|
30
|
-
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, onSelectDevice: selectDevice }), _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: [formatDateTime(climateSettingSchedule.schedule_starts_at), _jsx(ArrowRightIcon, {}), formatDateTime(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:
|
|
34
|
+
return (_jsxs(_Fragment, { children: [_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, onSelectDevice: selectDevice }), _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: [formatDateTime(climateSettingSchedule.schedule_starts_at), _jsx(ArrowRightIcon, {}), formatDateTime(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: _jsx(Switch, { checked: isManualOverrideAllowed, onChange: (checked) => {
|
|
35
|
+
mutate({
|
|
36
|
+
climate_setting_schedule_id: climateSettingSchedule.climate_setting_schedule_id,
|
|
37
|
+
manual_override_allowed: checked,
|
|
38
|
+
});
|
|
39
|
+
} }) }) })] }), _jsx(DetailSection, { children: _jsx(DetailRow, { label: t.creationDate, children: _jsx("div", { className: 'seam-creation-date', children: formatDateTime(climateSettingSchedule.created_at) }) }) })] })] })] }), _jsx(Snackbar, { message: t.manualOverrideSuccess, variant: 'success', visible: isSuccess, automaticVisibility: true }), _jsx(Snackbar, { message: t.manualOverrideError, variant: 'error', visible: isError, automaticVisibility: true })] }));
|
|
31
40
|
}
|
|
32
41
|
const t = {
|
|
33
42
|
climateSettingSchedule: 'Climate setting schedule',
|
|
@@ -38,7 +47,7 @@ const t = {
|
|
|
38
47
|
defaultSettingMessagePart1: 'Thermostat will return to its',
|
|
39
48
|
defaultSetting: 'default setting',
|
|
40
49
|
defaultSettingMessagePart2: 'at end time.',
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
manualOverrideSuccess: 'Successfully updated manual override!',
|
|
51
|
+
manualOverrideError: 'Error updating manual override. Please try again.',
|
|
43
52
|
};
|
|
44
53
|
//# sourceMappingURL=ClimateSettingScheduleDetails.js.map
|
package/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClimateSettingScheduleDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iFAAiF,CAAA;AAC5H,OAAO,EAEL,uBAAuB,GACxB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gFAAgF,CAAA;AAC1H,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAM3C,MAAM,CAAC,MAAM,mCAAmC,GAAG,uBAAuB,CACxE,6BAA6B,CAC9B,CAAA;AAED,MAAM,UAAU,6BAA6B,CAAC,EAC5C,wBAAwB,EACxB,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,GAAG,KAAK,EAC/B,MAAM,EACN,SAAS,EACT,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EACxB,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,GAAG,KAAK,EAC1B,8BAA8B,GACK;IACnC,qBAAqB,CAAC,+BAA+B,CAAC,CAAA;IAEtD,MAAM,EAAE,sBAAsB,EAAE,GAAG,yBAAyB,CAC1D,wBAAwB,CACzB,CAAA;IAED,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEtE,IAAI,sBAAsB,IAAI,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,uBAAuB,GAC3B,sBAAsB,CAAC,uBAAuB,IAAI,KAAK,CAAA;IAEzD,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;QAC7B,OAAO,CACL,KAAC,mBAAmB,IAClB,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,uBAAuB,EAAE,uBAAuB,EAChD,qBAAqB,EAAE,qBAAqB,EAC5C,uBAAuB,EAAE,uBAAuB,EAChD,kBAAkB,EAAE,kBAAkB,EACtC,8BAA8B,EAAE,8BAA8B,EAC9D,MAAM,EAAE,GAAG,EAAE;gBACX,YAAY,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC,EACD,SAAS,EAAE,SAAS,GACpB,CACH,CAAA;IACH,CAAC;IAED,OAAO,CACL,eACE,SAAS,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"ClimateSettingScheduleDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx"],"names":[],"mappings":"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"}
|
package/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type UseMutationResult } from '@tanstack/react-query';
|
|
2
|
+
import type { ClimateSettingScheduleUpdateRequest, ClimateSettingScheduleUpdateResponse, SeamError } from 'seamapi';
|
|
3
|
+
type UseUpdateClimateSettingScheduleData = ClimateSettingScheduleUpdateResponse['climate_setting_schedule'];
|
|
4
|
+
type UseUpdateClimateSettingScheduleMutationParams = ClimateSettingScheduleUpdateRequest;
|
|
5
|
+
export declare function useUpdateClimateSettingSchedule(): UseMutationResult<UseUpdateClimateSettingScheduleData, SeamError, UseUpdateClimateSettingScheduleMutationParams>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useMutation, useQueryClient, } from '@tanstack/react-query';
|
|
2
|
+
import { NullSeamClientError, useSeamClient } from '../../../../lib/index.js';
|
|
3
|
+
export function useUpdateClimateSettingSchedule() {
|
|
4
|
+
const { client } = useSeamClient();
|
|
5
|
+
const queryClient = useQueryClient();
|
|
6
|
+
return useMutation({
|
|
7
|
+
mutationFn: async (mutationPararms) => {
|
|
8
|
+
if (client === null)
|
|
9
|
+
throw new NullSeamClientError();
|
|
10
|
+
return await client.thermostats.climateSettingSchedules.update(mutationPararms);
|
|
11
|
+
},
|
|
12
|
+
onSuccess: (updated) => {
|
|
13
|
+
queryClient.setQueryData([
|
|
14
|
+
'thermostats',
|
|
15
|
+
'climate_setting_schedules',
|
|
16
|
+
'get',
|
|
17
|
+
{
|
|
18
|
+
climate_setting_schedule_id: updated.climate_setting_schedule_id,
|
|
19
|
+
},
|
|
20
|
+
], (climateSettingSchedule) => {
|
|
21
|
+
if (climateSettingSchedule == null) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
...climateSettingSchedule,
|
|
26
|
+
...updated,
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
queryClient.setQueryData([
|
|
30
|
+
'thermostats',
|
|
31
|
+
'climate_setting_schedules',
|
|
32
|
+
'list',
|
|
33
|
+
{ device_id: updated.device_id },
|
|
34
|
+
], (climateSettingSchedules) => {
|
|
35
|
+
if (climateSettingSchedules == null) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return climateSettingSchedules.map((climateSettingSchedule) => {
|
|
39
|
+
if (climateSettingSchedule.device_id === updated.device_id) {
|
|
40
|
+
return {
|
|
41
|
+
...climateSettingSchedule,
|
|
42
|
+
...updated,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return climateSettingSchedule;
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=use-update-climate-setting-schedule.js.map
|
package/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-update-climate-setting-schedule.js","sourceRoot":"","sources":["../../../../src/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAS9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAOjE,MAAM,UAAU,+BAA+B;IAK7C,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EACf,eAA8D,EAC9D,EAAE;YACF,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM,CAC5D,eAAe,CAChB,CAAA;QACH,CAAC;QACD,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YACrB,WAAW,CAAC,YAAY,CACtB;gBACE,aAAa;gBACb,2BAA2B;gBAC3B,KAAK;gBACL;oBACE,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;iBACjE;aACF,EACD,CAAC,sBAAsB,EAAE,EAAE;gBACzB,IAAI,sBAAsB,IAAI,IAAI,EAAE,CAAC;oBACnC,OAAM;gBACR,CAAC;gBAED,OAAO;oBACL,GAAG,sBAAsB;oBACzB,GAAG,OAAO;iBACX,CAAA;YACH,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CAGtB;gBACE,aAAa;gBACb,2BAA2B;gBAC3B,MAAM;gBACN,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;aACjC,EACD,CAAC,uBAAuB,EAA4B,EAAE;gBACpD,IAAI,uBAAuB,IAAI,IAAI,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,sBAAsB,EAAE,EAAE;oBAC5D,IAAI,sBAAsB,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;wBAC3D,OAAO;4BACL,GAAG,sBAAsB;4BACzB,GAAG,OAAO;yBACX,CAAA;oBACH,CAAC;oBAED,OAAO,sBAAsB,CAAA;gBAC/B,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiReactVersion = "2.
|
|
1
|
+
declare const seamapiReactVersion = "2.12.0";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
package/src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx
CHANGED
|
@@ -9,11 +9,14 @@ import {
|
|
|
9
9
|
} from 'lib/seam/components/common-props.js'
|
|
10
10
|
import { NestedDeviceDetails } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
|
|
11
11
|
import { useClimateSettingSchedule } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedule.js'
|
|
12
|
+
import { useUpdateClimateSettingSchedule } from 'lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.js'
|
|
12
13
|
import { useComponentTelemetry } from 'lib/telemetry/index.js'
|
|
13
14
|
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
|
|
14
15
|
import { DetailRow } from 'lib/ui/layout/DetailRow.js'
|
|
15
16
|
import { DetailSection } from 'lib/ui/layout/DetailSection.js'
|
|
16
17
|
import { DetailSectionGroup } from 'lib/ui/layout/DetailSectionGroup.js'
|
|
18
|
+
import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
|
|
19
|
+
import { Switch } from 'lib/ui/Switch/Switch.js'
|
|
17
20
|
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
|
|
18
21
|
|
|
19
22
|
import { formatDateTime } from './dates.js'
|
|
@@ -45,6 +48,8 @@ export function ClimateSettingScheduleDetails({
|
|
|
45
48
|
climateSettingScheduleId
|
|
46
49
|
)
|
|
47
50
|
|
|
51
|
+
const { mutate, isSuccess, isError } = useUpdateClimateSettingSchedule()
|
|
52
|
+
|
|
48
53
|
const [selectedDeviceId, selectDevice] = useState<string | null>(null)
|
|
49
54
|
|
|
50
55
|
if (climateSettingSchedule == null) {
|
|
@@ -75,55 +80,82 @@ export function ClimateSettingScheduleDetails({
|
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
return (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
<>
|
|
84
|
+
<div
|
|
85
|
+
className={classNames(
|
|
86
|
+
'seam-climate-setting-schedule-details',
|
|
87
|
+
className
|
|
88
|
+
)}
|
|
89
|
+
>
|
|
90
|
+
<ContentHeader title={t.climateSettingSchedule} onBack={onBack} />
|
|
91
|
+
<div className='seam-climate-setting-schedule-details-content'>
|
|
92
|
+
<ClimateSettingScheduleCard
|
|
93
|
+
climateSettingScheduleId={climateSettingScheduleId}
|
|
94
|
+
onSelectDevice={selectDevice}
|
|
95
|
+
/>
|
|
96
|
+
<div className='seam-default-setting-message-container'>
|
|
97
|
+
<span className='seam-default-setting-message'>
|
|
98
|
+
{t.defaultSettingMessagePart1}{' '}
|
|
99
|
+
<span className='seam-default-setting-text'>
|
|
100
|
+
{t.defaultSetting}
|
|
101
|
+
</span>{' '}
|
|
102
|
+
{t.defaultSettingMessagePart2}
|
|
103
|
+
</span>
|
|
104
|
+
</div>
|
|
105
|
+
<DetailSectionGroup>
|
|
106
|
+
<DetailSection>
|
|
107
|
+
<DetailRow label={t.startEndTime}>
|
|
108
|
+
<span className='seam-climate-setting-details-value seam-climate-setting-details-schedule-range'>
|
|
109
|
+
{formatDateTime(climateSettingSchedule.schedule_starts_at)}
|
|
110
|
+
<ArrowRightIcon />
|
|
111
|
+
{formatDateTime(climateSettingSchedule.schedule_ends_at)}
|
|
112
|
+
</span>
|
|
113
|
+
</DetailRow>
|
|
114
|
+
<DetailRow label={t.climateSetting}>
|
|
115
|
+
<ClimateSettingStatus
|
|
116
|
+
climateSetting={climateSettingSchedule}
|
|
117
|
+
iconPlacement='right'
|
|
118
|
+
/>
|
|
119
|
+
</DetailRow>
|
|
120
|
+
<DetailRow label={t.allowManualOverride}>
|
|
121
|
+
<span className='seam-climate-setting-details-value'>
|
|
122
|
+
<Switch
|
|
123
|
+
checked={isManualOverrideAllowed}
|
|
124
|
+
onChange={(checked) => {
|
|
125
|
+
mutate({
|
|
126
|
+
climate_setting_schedule_id:
|
|
127
|
+
climateSettingSchedule.climate_setting_schedule_id,
|
|
128
|
+
manual_override_allowed: checked,
|
|
129
|
+
})
|
|
130
|
+
}}
|
|
131
|
+
/>
|
|
132
|
+
</span>
|
|
133
|
+
</DetailRow>
|
|
134
|
+
</DetailSection>
|
|
135
|
+
<DetailSection>
|
|
136
|
+
<DetailRow label={t.creationDate}>
|
|
137
|
+
<div className='seam-creation-date'>
|
|
138
|
+
{formatDateTime(climateSettingSchedule.created_at)}
|
|
139
|
+
</div>
|
|
140
|
+
</DetailRow>
|
|
141
|
+
</DetailSection>
|
|
142
|
+
</DetailSectionGroup>
|
|
95
143
|
</div>
|
|
96
|
-
<DetailSectionGroup>
|
|
97
|
-
<DetailSection>
|
|
98
|
-
<DetailRow label={t.startEndTime}>
|
|
99
|
-
<span className='seam-climate-setting-details-value seam-climate-setting-details-schedule-range'>
|
|
100
|
-
{formatDateTime(climateSettingSchedule.schedule_starts_at)}
|
|
101
|
-
<ArrowRightIcon />
|
|
102
|
-
{formatDateTime(climateSettingSchedule.schedule_ends_at)}
|
|
103
|
-
</span>
|
|
104
|
-
</DetailRow>
|
|
105
|
-
<DetailRow label={t.climateSetting}>
|
|
106
|
-
<ClimateSettingStatus
|
|
107
|
-
climateSetting={climateSettingSchedule}
|
|
108
|
-
iconPlacement='right'
|
|
109
|
-
/>
|
|
110
|
-
</DetailRow>
|
|
111
|
-
<DetailRow label={t.allowManualOverride}>
|
|
112
|
-
<span className='seam-climate-setting-details-value'>
|
|
113
|
-
{isManualOverrideAllowed ? t.on : t.off}
|
|
114
|
-
</span>
|
|
115
|
-
</DetailRow>
|
|
116
|
-
</DetailSection>
|
|
117
|
-
<DetailSection>
|
|
118
|
-
<DetailRow label={t.creationDate}>
|
|
119
|
-
<div className='seam-creation-date'>
|
|
120
|
-
{formatDateTime(climateSettingSchedule.created_at)}
|
|
121
|
-
</div>
|
|
122
|
-
</DetailRow>
|
|
123
|
-
</DetailSection>
|
|
124
|
-
</DetailSectionGroup>
|
|
125
144
|
</div>
|
|
126
|
-
|
|
145
|
+
<Snackbar
|
|
146
|
+
message={t.manualOverrideSuccess}
|
|
147
|
+
variant='success'
|
|
148
|
+
visible={isSuccess}
|
|
149
|
+
automaticVisibility
|
|
150
|
+
/>
|
|
151
|
+
|
|
152
|
+
<Snackbar
|
|
153
|
+
message={t.manualOverrideError}
|
|
154
|
+
variant='error'
|
|
155
|
+
visible={isError}
|
|
156
|
+
automaticVisibility
|
|
157
|
+
/>
|
|
158
|
+
</>
|
|
127
159
|
)
|
|
128
160
|
}
|
|
129
161
|
|
|
@@ -136,6 +168,6 @@ const t = {
|
|
|
136
168
|
defaultSettingMessagePart1: 'Thermostat will return to its',
|
|
137
169
|
defaultSetting: 'default setting',
|
|
138
170
|
defaultSettingMessagePart2: 'at end time.',
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
manualOverrideSuccess: 'Successfully updated manual override!',
|
|
172
|
+
manualOverrideError: 'Error updating manual override. Please try again.',
|
|
141
173
|
}
|
package/src/lib/seam/thermostats/climate-setting-schedules/use-update-climate-setting-schedule.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useMutation,
|
|
3
|
+
type UseMutationResult,
|
|
4
|
+
useQueryClient,
|
|
5
|
+
} from '@tanstack/react-query'
|
|
6
|
+
import type {
|
|
7
|
+
ClimateSettingSchedule,
|
|
8
|
+
ClimateSettingSchedulesListResponse,
|
|
9
|
+
ClimateSettingScheduleUpdateRequest,
|
|
10
|
+
ClimateSettingScheduleUpdateResponse,
|
|
11
|
+
SeamError,
|
|
12
|
+
} from 'seamapi'
|
|
13
|
+
|
|
14
|
+
import { NullSeamClientError, useSeamClient } from 'lib/index.js'
|
|
15
|
+
|
|
16
|
+
type UseUpdateClimateSettingScheduleData =
|
|
17
|
+
ClimateSettingScheduleUpdateResponse['climate_setting_schedule']
|
|
18
|
+
type UseUpdateClimateSettingScheduleMutationParams =
|
|
19
|
+
ClimateSettingScheduleUpdateRequest
|
|
20
|
+
|
|
21
|
+
export function useUpdateClimateSettingSchedule(): UseMutationResult<
|
|
22
|
+
UseUpdateClimateSettingScheduleData,
|
|
23
|
+
SeamError,
|
|
24
|
+
UseUpdateClimateSettingScheduleMutationParams
|
|
25
|
+
> {
|
|
26
|
+
const { client } = useSeamClient()
|
|
27
|
+
const queryClient = useQueryClient()
|
|
28
|
+
|
|
29
|
+
return useMutation<
|
|
30
|
+
UseUpdateClimateSettingScheduleData,
|
|
31
|
+
SeamError,
|
|
32
|
+
UseUpdateClimateSettingScheduleMutationParams
|
|
33
|
+
>({
|
|
34
|
+
mutationFn: async (
|
|
35
|
+
mutationPararms: UseUpdateClimateSettingScheduleMutationParams
|
|
36
|
+
) => {
|
|
37
|
+
if (client === null) throw new NullSeamClientError()
|
|
38
|
+
return await client.thermostats.climateSettingSchedules.update(
|
|
39
|
+
mutationPararms
|
|
40
|
+
)
|
|
41
|
+
},
|
|
42
|
+
onSuccess: (updated) => {
|
|
43
|
+
queryClient.setQueryData<ClimateSettingSchedule>(
|
|
44
|
+
[
|
|
45
|
+
'thermostats',
|
|
46
|
+
'climate_setting_schedules',
|
|
47
|
+
'get',
|
|
48
|
+
{
|
|
49
|
+
climate_setting_schedule_id: updated.climate_setting_schedule_id,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
(climateSettingSchedule) => {
|
|
53
|
+
if (climateSettingSchedule == null) {
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
...climateSettingSchedule,
|
|
59
|
+
...updated,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
queryClient.setQueryData<
|
|
65
|
+
ClimateSettingSchedulesListResponse['climate_setting_schedules']
|
|
66
|
+
>(
|
|
67
|
+
[
|
|
68
|
+
'thermostats',
|
|
69
|
+
'climate_setting_schedules',
|
|
70
|
+
'list',
|
|
71
|
+
{ device_id: updated.device_id },
|
|
72
|
+
],
|
|
73
|
+
(climateSettingSchedules): ClimateSettingSchedule[] => {
|
|
74
|
+
if (climateSettingSchedules == null) {
|
|
75
|
+
return []
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return climateSettingSchedules.map((climateSettingSchedule) => {
|
|
79
|
+
if (climateSettingSchedule.device_id === updated.device_id) {
|
|
80
|
+
return {
|
|
81
|
+
...climateSettingSchedule,
|
|
82
|
+
...updated,
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return climateSettingSchedule
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
},
|
|
91
|
+
})
|
|
92
|
+
}
|
package/src/lib/version.ts
CHANGED