@seamapi/react 2.1.4 → 2.3.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 +4590 -4441
- package/dist/elements.js.map +1 -1
- package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js +14 -2
- package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js.map +1 -1
- package/lib/seam/connect-webviews/use-create-connect-webview.js +10 -1
- package/lib/seam/connect-webviews/use-create-connect-webview.js.map +1 -1
- package/lib/seam/thermostats/use-update-fan-mode.js +2 -2
- package/lib/seam/thermostats/use-update-fan-mode.js.map +1 -1
- package/lib/set-point-bounds.d.ts +4 -0
- package/lib/set-point-bounds.js +24 -0
- package/lib/set-point-bounds.js.map +1 -0
- package/lib/temperature-bounds.d.ts +2 -2
- package/lib/temperature-bounds.js +4 -6
- package/lib/temperature-bounds.js.map +1 -1
- package/lib/ui/ClimateSettingForm/ClimateSettingScheduleFormClimateSetting.js +11 -4
- package/lib/ui/ClimateSettingForm/ClimateSettingScheduleFormClimateSetting.js.map +1 -1
- package/lib/ui/Snackbar/Snackbar.d.ts +2 -1
- package/lib/ui/Snackbar/Snackbar.js +14 -6
- package/lib/ui/Snackbar/Snackbar.js.map +1 -1
- package/lib/ui/thermostat/FanModeMenu.js +1 -1
- package/lib/ui/thermostat/FanModeMenu.js.map +1 -1
- package/lib/ui/thermostat/TemperatureControlGroup.js +4 -1
- package/lib/ui/thermostat/TemperatureControlGroup.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx +34 -0
- package/src/lib/seam/connect-webviews/use-create-connect-webview.ts +10 -1
- package/src/lib/seam/thermostats/use-update-fan-mode.ts +2 -2
- package/src/lib/set-point-bounds.ts +39 -0
- package/src/lib/temperature-bounds.ts +4 -12
- package/src/lib/ui/ClimateSettingForm/ClimateSettingScheduleFormClimateSetting.tsx +14 -2
- package/src/lib/ui/Snackbar/Snackbar.tsx +18 -5
- package/src/lib/ui/thermostat/FanModeMenu.tsx +1 -2
- package/src/lib/ui/thermostat/TemperatureControlGroup.tsx +8 -4
- package/src/lib/version.ts +1 -1
|
@@ -6,11 +6,14 @@ import { ChevronWideIcon } from '../../../../lib/icons/ChevronWide.js';
|
|
|
6
6
|
import { NestedClimateSettingScheduleTable } from '../../../../lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js';
|
|
7
7
|
import { useConnectedAccount } from '../../../../lib/seam/connected-accounts/use-connected-account.js';
|
|
8
8
|
import { useClimateSettingSchedules } from '../../../../lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js';
|
|
9
|
+
import { useUpdateFanMode } from '../../../../lib/seam/thermostats/use-update-fan-mode.js';
|
|
9
10
|
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
10
11
|
import { DetailRow } from '../../../../lib/ui/layout/DetailRow.js';
|
|
11
12
|
import { DetailSection } from '../../../../lib/ui/layout/DetailSection.js';
|
|
12
13
|
import { DetailSectionGroup } from '../../../../lib/ui/layout/DetailSectionGroup.js';
|
|
14
|
+
import { Snackbar } from '../../../../lib/ui/Snackbar/Snackbar.js';
|
|
13
15
|
import { ClimateSettingStatus } from '../../../../lib/ui/thermostat/ClimateSettingStatus.js';
|
|
16
|
+
import { FanModeMenu } from '../../../../lib/ui/thermostat/FanModeMenu.js';
|
|
14
17
|
import { ThermostatCard } from '../../../../lib/ui/thermostat/ThermostatCard.js';
|
|
15
18
|
export function ThermostatDeviceDetails({ device, onBack, className, errorFilter = () => true, warningFilter = () => true, disableLockUnlock, disableCreateAccessCode, disableEditAccessCode, disableDeleteAccessCode, disableResourceIds = false, }) {
|
|
16
19
|
const [climateSettingsOpen, setClimateSettingsOpen] = useState(false);
|
|
@@ -18,6 +21,7 @@ export function ThermostatDeviceDetails({ device, onBack, className, errorFilter
|
|
|
18
21
|
const { climateSettingSchedules } = useClimateSettingSchedules({
|
|
19
22
|
device_id: device.device_id,
|
|
20
23
|
});
|
|
24
|
+
const { mutate: updateFanMode, isSuccess, isError } = useUpdateFanMode();
|
|
21
25
|
if (climateSettingsOpen) {
|
|
22
26
|
return (_jsx(NestedClimateSettingScheduleTable, { deviceId: device.device_id, errorFilter: errorFilter, warningFilter: warningFilter, disableLockUnlock: disableLockUnlock, disableCreateAccessCode: disableCreateAccessCode, disableEditAccessCode: disableEditAccessCode, disableDeleteAccessCode: disableDeleteAccessCode, disableResourceIds: disableResourceIds, onBack: () => {
|
|
23
27
|
setClimateSettingsOpen(false);
|
|
@@ -33,11 +37,16 @@ export function ThermostatDeviceDetails({ device, onBack, className, errorFilter
|
|
|
33
37
|
? t.viewingClimateSchedules
|
|
34
38
|
: `${climateSettingSchedules.length} ${climateSettingSchedulesLabel}`, onClick: () => {
|
|
35
39
|
setClimateSettingsOpen(true);
|
|
36
|
-
}, children: _jsx("div", { className: 'seam-detail-row-rotated-icon', children: _jsx(ChevronWideIcon, {}) }) }) }),
|
|
40
|
+
}, children: _jsx("div", { className: 'seam-detail-row-rotated-icon', children: _jsx(ChevronWideIcon, {}) }) }) }), _jsxs(DetailSection, { label: t.currentSettings, tooltipContent: t.currentSettingsTooltip, children: [_jsx(DetailRow, { label: t.climate, children: _jsx(ClimateSettingStatus, { climateSetting: device.properties.current_climate_setting, temperatureUnit: 'fahrenheit' }) }), _jsx(DetailRow, { label: t.fanMode, children: _jsx(FanModeMenu, { mode: device.properties.fan_mode_setting, onChange: (fanMode) => {
|
|
41
|
+
updateFanMode({
|
|
42
|
+
device_id: device.device_id,
|
|
43
|
+
fan_mode_setting: fanMode,
|
|
44
|
+
});
|
|
45
|
+
} }) })] }), _jsxs(DetailSection, { label: t.defaultSettings, tooltipContent: t.defaultSettingsTooltip, children: [_jsx(DetailRow, { label: t.defaultClimate, children: device.properties.default_climate_setting != null ? (_jsx(ClimateSettingStatus, { climateSetting: device.properties.default_climate_setting, temperatureUnit: 'fahrenheit' })) : (_jsx("p", { children: t.none })) }), _jsx(DetailRow, { label: t.allowManualOverride, children: _jsx("p", { children: device.properties.current_climate_setting
|
|
37
46
|
.manual_override_allowed
|
|
38
47
|
? t.yes
|
|
39
48
|
: t.no }) })] }), _jsxs(DetailSection, { label: t.deviceDetails, children: [_jsx(DetailRow, { label: t.manufacturer, children: _jsxs("div", { className: 'seam-detail-row-hstack', children: [device.properties.model.manufacturer_display_name, device.properties.manufacturer === 'ecobee' && _jsx(BeeIcon, {})] }) }), _jsx(DetailRow, { label: t.linkedAccount, sublabel: connectedAccount?.user_identifier?.email ??
|
|
40
|
-
device.connected_account_id }), !disableResourceIds && (_jsx(DetailRow, { label: t.deviceId, sublabel: device.device_id }))] })] }) })] })] }));
|
|
49
|
+
device.connected_account_id }), !disableResourceIds && (_jsx(DetailRow, { label: t.deviceId, sublabel: device.device_id }))] })] }) })] }), _jsx(Snackbar, { message: t.fanModeSuccess, variant: 'success', visible: isSuccess, automaticVisibility: true, autoDismiss: true }), _jsx(Snackbar, { message: t.fanModeError, variant: 'error', visible: isError, automaticVisibility: true })] }));
|
|
41
50
|
}
|
|
42
51
|
const t = {
|
|
43
52
|
thermostat: 'Thermostat',
|
|
@@ -49,6 +58,7 @@ const t = {
|
|
|
49
58
|
currentSettings: 'Current settings',
|
|
50
59
|
currentSettingsTooltip: 'These are the settings currently on the device. If you change them here, they change on the device.',
|
|
51
60
|
climate: 'Climate',
|
|
61
|
+
fanMode: 'Fan mode',
|
|
52
62
|
defaultSettings: 'Default settings',
|
|
53
63
|
defaultSettingsTooltip: 'When a scheduled climate reaches its end time, the default settings will kick in.',
|
|
54
64
|
defaultClimate: 'Default climate',
|
|
@@ -60,5 +70,7 @@ const t = {
|
|
|
60
70
|
none: 'None',
|
|
61
71
|
yes: 'Yes',
|
|
62
72
|
no: 'No',
|
|
73
|
+
fanModeSuccess: 'Successfully updated fan mode!',
|
|
74
|
+
fanModeError: 'Error updating fan mode. Please try again.',
|
|
63
75
|
};
|
|
64
76
|
//# sourceMappingURL=ThermostatDeviceDetails.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ThermostatDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { useMutation } from '@tanstack/react-query';
|
|
2
|
+
import { useClientSession } from '../../../lib/seam/client-sessions/use-client-session.js';
|
|
2
3
|
import { NullSeamClientError, useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
4
|
export function useCreateConnectWebview({ willNavigateToWebview = false, } = {}) {
|
|
4
5
|
const { client } = useSeamClient();
|
|
6
|
+
const { clientSession } = useClientSession();
|
|
5
7
|
return useMutation({
|
|
6
8
|
mutationFn: async (mutationParams) => {
|
|
7
9
|
if (client === null)
|
|
8
10
|
throw new NullSeamClientError();
|
|
9
|
-
return await client.connectWebviews.create(
|
|
11
|
+
return await client.connectWebviews.create({
|
|
12
|
+
custom_metadata: {
|
|
13
|
+
client_session_id: clientSession?.client_session_id ?? null,
|
|
14
|
+
user_identifier_key: clientSession?.user_identifier_key ?? null,
|
|
15
|
+
...mutationParams.custom_metadata,
|
|
16
|
+
},
|
|
17
|
+
...mutationParams,
|
|
18
|
+
});
|
|
10
19
|
},
|
|
11
20
|
onSuccess: ({ url }) => {
|
|
12
21
|
if (willNavigateToWebview && url != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-create-connect-webview.js","sourceRoot":"","sources":["../../../src/lib/seam/connect-webviews/use-create-connect-webview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAShF,MAAM,UAAU,uBAAuB,CAAC,EACtC,qBAAqB,GAAG,KAAK,MACI,EAAE;IAKnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"use-create-connect-webview.js","sourceRoot":"","sources":["../../../src/lib/seam/connect-webviews/use-create-connect-webview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0B,MAAM,uBAAuB,CAAA;AAQ3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAShF,MAAM,UAAU,uBAAuB,CAAC,EACtC,qBAAqB,GAAG,KAAK,MACI,EAAE;IAKnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAA;IAE5C,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EACf,cAAqD,EACrD,EAAE;YACF,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;gBACzC,eAAe,EAAE;oBACf,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,IAAI,IAAI;oBAC3D,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,IAAI,IAAI;oBAC/D,GAAG,cAAc,CAAC,eAAe;iBAClC;gBACD,GAAG,cAAc;aAClB,CAAC,CAAA;QACJ,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YACrB,IAAI,qBAAqB,IAAI,GAAG,IAAI,IAAI,EAAE;gBACxC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAA;aAC/B;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -10,13 +10,13 @@ export function useUpdateFanMode() {
|
|
|
10
10
|
return await client.thermostats.setFanMode(mutationParams);
|
|
11
11
|
},
|
|
12
12
|
onSuccess: (_data, variables) => {
|
|
13
|
-
queryClient.setQueryData(['
|
|
13
|
+
queryClient.setQueryData(['devices', 'get', { device_id: variables.device_id }], (thermostat) => {
|
|
14
14
|
if (thermostat == null) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
17
|
return getUpdatedThermostat(thermostat, variables);
|
|
18
18
|
});
|
|
19
|
-
queryClient.setQueryData(['
|
|
19
|
+
queryClient.setQueryData(['devices', 'list', { device_id: variables.device_id }], (thermostats) => {
|
|
20
20
|
if (thermostats == null) {
|
|
21
21
|
return [];
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-update-fan-mode.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-update-fan-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAMhF,MAAM,UAAU,gBAAgB;IAK9B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,cAA8C,EAAE,EAAE;YACnE,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YAEpD,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QAC5D,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,
|
|
1
|
+
{"version":3,"file":"use-update-fan-mode.js","sourceRoot":"","sources":["../../../src/lib/seam/thermostats/use-update-fan-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAMhF,MAAM,UAAU,gBAAgB;IAK9B,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,cAA8C,EAAE,EAAE;YACnE,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YAEpD,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QAC5D,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACtD,CAAC,UAAU,EAAE,EAAE;gBACb,IAAI,UAAU,IAAI,IAAI,EAAE;oBACtB,OAAM;iBACP;gBAED,OAAO,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YACpD,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,WAAW,EAAsB,EAAE;gBAClC,IAAI,WAAW,IAAI,IAAI,EAAE;oBACvB,OAAO,EAAE,CAAA;iBACV;gBAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;oBACpC,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE;wBAChD,OAAO,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;qBACnD;oBAED,OAAO,UAAU,CAAA;gBACnB,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAA4B,EAC5B,SAAyC;IAEzC,OAAO;QACL,GAAG,UAAU;QACb,UAAU,EAAE;YACV,GAAG,UAAU,CAAC,UAAU;YACxB,gBAAgB,EACd,SAAS,CAAC,gBAAgB,IAAI,UAAU,CAAC,UAAU,CAAC,gBAAgB;SACvE;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ThermostatDeviceProperties } from 'seamapi';
|
|
2
|
+
import type { TemperatureControlGroupProps } from '../lib/ui/thermostat/TemperatureControlGroup.js';
|
|
3
|
+
export type SetPointBounds = Partial<Pick<TemperatureControlGroupProps, 'minCool' | 'maxCool' | 'minHeat' | 'maxHeat' | 'delta'>>;
|
|
4
|
+
export declare const getSetPointBounds: (properties: ThermostatDeviceProperties) => SetPointBounds;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const getSetPointBounds = (properties) => {
|
|
2
|
+
let setPointBounds = {};
|
|
3
|
+
if (properties.is_cooling_available) {
|
|
4
|
+
setPointBounds = {
|
|
5
|
+
minCool: properties.min_cooling_set_point_fahrenheit,
|
|
6
|
+
maxCool: properties.max_cooling_set_point_fahrenheit,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (properties.is_heating_available) {
|
|
10
|
+
setPointBounds = {
|
|
11
|
+
...setPointBounds,
|
|
12
|
+
minHeat: properties.min_heating_set_point_fahrenheit,
|
|
13
|
+
maxHeat: properties.max_heating_set_point_fahrenheit,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
if (properties.is_cooling_available && properties.is_heating_available) {
|
|
17
|
+
setPointBounds = {
|
|
18
|
+
...setPointBounds,
|
|
19
|
+
delta: properties.min_heating_cooling_delta_fahrenheit,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return setPointBounds;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=set-point-bounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-point-bounds.js","sourceRoot":"","sources":["../src/lib/set-point-bounds.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAAsC,EACtB,EAAE;IAClB,IAAI,cAAc,GAAmB,EAAE,CAAA;IAEvC,IAAI,UAAU,CAAC,oBAAoB,EAAE;QACnC,cAAc,GAAG;YACf,OAAO,EAAE,UAAU,CAAC,gCAAgC;YACpD,OAAO,EAAE,UAAU,CAAC,gCAAgC;SACrD,CAAA;KACF;IAED,IAAI,UAAU,CAAC,oBAAoB,EAAE;QACnC,cAAc,GAAG;YACf,GAAG,cAAc;YACjB,OAAO,EAAE,UAAU,CAAC,gCAAgC;YACpD,OAAO,EAAE,UAAU,CAAC,gCAAgC;SACrD,CAAA;KACF;IAED,IAAI,UAAU,CAAC,oBAAoB,IAAI,UAAU,CAAC,oBAAoB,EAAE;QACtE,cAAc,GAAG;YACf,GAAG,cAAc;YACjB,KAAK,EAAE,UAAU,CAAC,oCAAoC;SACvD,CAAA;KACF;IACD,OAAO,cAAc,CAAA;AACvB,CAAC,CAAA"}
|
|
@@ -15,7 +15,7 @@ interface TemperatureBounds {
|
|
|
15
15
|
heat: MinMax;
|
|
16
16
|
cool: MinMax;
|
|
17
17
|
}
|
|
18
|
-
export declare const getHeatBounds: ({ mode, minHeat, maxHeat,
|
|
19
|
-
export declare const getCoolBounds: ({ mode, minHeat,
|
|
18
|
+
export declare const getHeatBounds: ({ mode, minHeat, maxHeat, maxCool, delta, }: Omit<ControlBounds, 'minCool'>) => MinMax;
|
|
19
|
+
export declare const getCoolBounds: ({ mode, minHeat, minCool, maxCool, delta, }: Omit<ControlBounds, 'maxHeat'>) => MinMax;
|
|
20
20
|
export declare const getTemperatureBounds: (controlBounds: ControlBounds) => TemperatureBounds;
|
|
21
21
|
export {};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
export const getHeatBounds = ({ mode, minHeat, maxHeat,
|
|
1
|
+
export const getHeatBounds = ({ mode, minHeat, maxHeat, maxCool, delta, }) => {
|
|
2
2
|
const actualMaxHeat = mode === 'heat_cool' ? Math.min(maxHeat - delta, maxCool - delta) : maxHeat;
|
|
3
|
-
|
|
4
|
-
return { min: actualMinHeat, max: actualMaxHeat };
|
|
3
|
+
return { min: minHeat, max: actualMaxHeat };
|
|
5
4
|
};
|
|
6
|
-
export const getCoolBounds = ({ mode, minHeat,
|
|
7
|
-
const actualMaxCool = mode === 'heat_cool' ? Math.min(maxCool, maxHeat) : maxCool;
|
|
5
|
+
export const getCoolBounds = ({ mode, minHeat, minCool, maxCool, delta, }) => {
|
|
8
6
|
const actualMinCool = mode === 'heat_cool' ? Math.max(minCool + delta, minHeat + delta) : minCool;
|
|
9
|
-
return { min: actualMinCool, max:
|
|
7
|
+
return { min: actualMinCool, max: maxCool };
|
|
10
8
|
};
|
|
11
9
|
export const getTemperatureBounds = (controlBounds) => ({
|
|
12
10
|
heat: getHeatBounds(controlBounds),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temperature-bounds.js","sourceRoot":"","sources":["../src/lib/temperature-bounds.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"temperature-bounds.js","sourceRoot":"","sources":["../src/lib/temperature-bounds.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GAC0B,EAAU,EAAE;IAC3C,MAAM,aAAa,GACjB,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAE7E,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GAC0B,EAAU,EAAE;IAC3C,MAAM,aAAa,GACjB,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAE7E,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,aAA4B,EACT,EAAE,CAAC,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC;IAClC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC;CACnC,CAAC,CAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Controller } from 'react-hook-form';
|
|
3
|
+
import { isThermostatDevice } from 'seamapi';
|
|
3
4
|
import { useDevice } from '../../../lib/seam/devices/use-device.js';
|
|
5
|
+
import { getSetPointBounds } from '../../../lib/set-point-bounds.js';
|
|
4
6
|
import { Button } from '../../../lib/ui/Button.js';
|
|
5
7
|
import { FormField } from '../../../lib/ui/FormField.js';
|
|
6
8
|
import { InputLabel } from '../../../lib/ui/InputLabel.js';
|
|
@@ -10,12 +12,17 @@ export function ClimateSettingScheduleFormClimateSetting({ title, control, devic
|
|
|
10
12
|
const { device } = useDevice({
|
|
11
13
|
device_id: deviceId,
|
|
12
14
|
});
|
|
13
|
-
|
|
15
|
+
if (device == null)
|
|
16
|
+
return _jsx(_Fragment, {});
|
|
17
|
+
if (!isThermostatDevice(device))
|
|
18
|
+
return _jsx(_Fragment, {});
|
|
19
|
+
const setPointBounds = getSetPointBounds(device.properties);
|
|
20
|
+
return (_jsxs(_Fragment, { children: [_jsx(ContentHeader, { title: title, onBack: onBack, subheading: device?.properties.name }), _jsxs("div", { className: 'seam-main', children: [_jsx("div", { className: 'seam-climate-setting-schedule-form-climate-setting', children: _jsxs("div", { className: 'seam-content', children: [_jsxs("div", { children: [_jsx(InputLabel, { children: t.climateSetting }), _jsx("span", { className: 'seam-label', children: t.climateSettingSubHeading })] }), _jsx(FormContent, { control: control, setPointBounds: setPointBounds })] }) }), _jsxs("div", { className: 'seam-actions', children: [_jsx(Button, { onClick: onCancel, children: t.cancel }), _jsx(Button, { variant: 'solid', onClick: onSave, children: t.save })] })] })] }));
|
|
14
21
|
}
|
|
15
|
-
function FormContent({ control }) {
|
|
22
|
+
function FormContent({ control, setPointBounds, }) {
|
|
16
23
|
return (_jsx(FormField, { children: _jsx(Controller, { name: 'climateSetting', control: control, render: ({ field: { value, onChange } }) => (_jsx(ClimateSettingControlGroup, { mode: value.hvacModeSetting, onModeChange: (mode) => {
|
|
17
24
|
onChange({ ...value, hvacModeSetting: mode });
|
|
18
|
-
}, coolValue: value.coolingSetPoint, heatValue: value.heatingSetPoint, onCoolValueChange: (coolingSetPoint) => {
|
|
25
|
+
}, coolValue: value.coolingSetPoint, heatValue: value.heatingSetPoint, ...setPointBounds, onCoolValueChange: (coolingSetPoint) => {
|
|
19
26
|
onChange({
|
|
20
27
|
...value,
|
|
21
28
|
coolingSetPoint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClimateSettingScheduleFormClimateSetting.js","sourceRoot":"","sources":["../../../src/lib/ui/ClimateSettingForm/ClimateSettingScheduleFormClimateSetting.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAgB,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"ClimateSettingScheduleFormClimateSetting.js","sourceRoot":"","sources":["../../../src/lib/ui/ClimateSettingForm/ClimateSettingScheduleFormClimateSetting.tsx"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ interface SnackbarProps {
|
|
|
12
12
|
autoDismiss?: boolean;
|
|
13
13
|
dismissAfterMs?: number;
|
|
14
14
|
disableCloseButton?: boolean;
|
|
15
|
+
automaticVisibility?: boolean;
|
|
15
16
|
}
|
|
16
|
-
export declare function Snackbar({ message, variant, visible, action, autoDismiss, dismissAfterMs, disableCloseButton, onClose, }: SnackbarProps): JSX.Element;
|
|
17
|
+
export declare function Snackbar({ message, variant, visible, action, autoDismiss, dismissAfterMs, disableCloseButton, automaticVisibility, onClose, }: SnackbarProps): JSX.Element;
|
|
17
18
|
export {};
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
import { useEffect } from 'react';
|
|
3
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
4
4
|
import { CheckGreenIcon } from '../../../lib/icons/CheckGreen.js';
|
|
5
5
|
import { CloseWhiteIcon } from '../../../lib/icons/CloseWhite.js';
|
|
6
6
|
import { ExclamationCircleIcon } from '../../../lib/icons/ExclamationCircle.js';
|
|
7
|
-
export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, onClose = () => { }, }) {
|
|
7
|
+
export function Snackbar({ message, variant, visible, action, autoDismiss = false, dismissAfterMs = 5000, disableCloseButton = false, automaticVisibility = false, onClose = () => { }, }) {
|
|
8
|
+
const [hidden, setHidden] = useState(visible);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
setHidden(!visible);
|
|
11
|
+
}, [visible, setHidden]);
|
|
8
12
|
const { label: actionLabel, onClick: handleActionClick } = action ?? {};
|
|
13
|
+
const handleClose = useCallback(() => {
|
|
14
|
+
setHidden(true);
|
|
15
|
+
onClose();
|
|
16
|
+
}, [onClose, setHidden]);
|
|
9
17
|
useEffect(() => {
|
|
10
18
|
if (!autoDismiss) {
|
|
11
19
|
return () => { };
|
|
12
20
|
}
|
|
13
21
|
const timeout = globalThis.setTimeout(() => {
|
|
14
|
-
|
|
22
|
+
handleClose();
|
|
15
23
|
}, dismissAfterMs);
|
|
16
24
|
return () => {
|
|
17
25
|
globalThis.clearTimeout(timeout);
|
|
18
26
|
};
|
|
19
|
-
}, [autoDismiss, dismissAfterMs,
|
|
27
|
+
}, [autoDismiss, dismissAfterMs, handleClose]);
|
|
20
28
|
return (_jsx("div", { className: 'seam-snackbar-wrap', children: _jsxs("div", { className: classNames('seam-snackbar', {
|
|
21
|
-
'seam-snackbar-visible': visible,
|
|
29
|
+
'seam-snackbar-visible': automaticVisibility ? !hidden : visible,
|
|
22
30
|
}), children: [_jsx(SnackbarIcon, { variant: variant }), _jsx("div", { className: 'seam-snackbar-message-wrap', children: _jsx("p", { className: 'seam-snackbar-message', children: message }) }), _jsxs("div", { className: 'seam-snackbar-actions-wrap', children: [action != null && (_jsx("button", { className: 'seam-snackbar-action', onClick: handleActionClick, children: _jsx("span", { className: 'seam-snackbar-action-label', children: actionLabel }) })), !disableCloseButton && (_jsx("button", { className: 'seam-snackbar-close-button', onClick: () => {
|
|
23
|
-
|
|
31
|
+
handleClose();
|
|
24
32
|
}, children: _jsx(CloseWhiteIcon, {}) }))] })] }) }));
|
|
25
33
|
}
|
|
26
34
|
function SnackbarIcon(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Snackbar.js","sourceRoot":"","sources":["../../../src/lib/ui/Snackbar/Snackbar.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAmBtE,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,KAAK,EAC1B,mBAAmB,GAAG,KAAK,EAC3B,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,GACJ;IACd,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IAExB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,EAAE,CAAA;IACX,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;SAChB;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;YACzC,WAAW,EAAE,CAAA;QACf,CAAC,EAAE,cAAc,CAAC,CAAA;QAElB,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;IAE9C,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,YACjC,eACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;gBACrC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;aACjE,CAAC,aAEF,KAAC,YAAY,IAAC,OAAO,EAAE,OAAO,GAAI,EAClC,cAAK,SAAS,EAAC,4BAA4B,YACzC,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,GAC9C,EACN,eAAK,SAAS,EAAC,4BAA4B,aACxC,MAAM,IAAI,IAAI,IAAI,CACjB,iBACE,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,iBAAiB,YAE1B,eAAM,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAQ,GAC1D,CACV,EACA,CAAC,kBAAkB,IAAI,CACtB,iBACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,GAAG,EAAE;gCACZ,WAAW,EAAE,CAAA;4BACf,CAAC,YAED,KAAC,cAAc,KAAG,GACX,CACV,IACG,IACF,GACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACrB,KAAK,SAAS;YACZ,OAAO,KAAC,cAAc,KAAG,CAAA;QAC3B,KAAK,OAAO;YACV,OAAO,KAAC,qBAAqB,KAAG,CAAA;KACnC;AACH,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { Menu } from '../../../lib/ui/Menu/Menu.js';
|
|
|
6
6
|
import { ThermoModeMenuOption } from '../../../lib/ui/thermostat/ThermoModeMenuOption.js';
|
|
7
7
|
const modes = ['auto', 'on'];
|
|
8
8
|
export function FanModeMenu({ mode, onChange }) {
|
|
9
|
-
return (_jsx(Menu, { renderButton: ({ onOpen }) => (_jsxs("button", { onClick: onOpen, className: 'seam-fan-mode-menu-button', children: [_jsxs("div", { className: 'seam-fan-mode-menu-button-block', children: [_jsx(FanOutlineIcon, {}), _jsx("span", { className: 'seam-fan-mode-menu-button-text', children: mode === 'auto' ? t.auto : t.on })] }), _jsx(ChevronDownIcon, {})] })),
|
|
9
|
+
return (_jsx(Menu, { renderButton: ({ onOpen }) => (_jsxs("button", { onClick: onOpen, className: 'seam-fan-mode-menu-button', children: [_jsxs("div", { className: 'seam-fan-mode-menu-button-block', children: [_jsx(FanOutlineIcon, {}), _jsx("span", { className: 'seam-fan-mode-menu-button-text', children: mode === 'auto' ? t.auto : t.on })] }), _jsx(ChevronDownIcon, {})] })), horizontalOffset: -20, backgroundProps: {
|
|
10
10
|
className: 'seam-thermo-mode-menu',
|
|
11
11
|
}, children: modes.map((m) => (_jsx(ThermoModeMenuOption, { label: t[m], icon: _jsx(FanIcon, {}), isSelected: mode === m, onClick: () => {
|
|
12
12
|
onChange(m);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FanModeMenu.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/FanModeMenu.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,MAAM,KAAK,GAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAO9C,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAoB;IAC9D,OAAO,CACL,KAAC,IAAI,IACH,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAC5B,kBAAQ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,2BAA2B,aAC5D,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,cAAc,KAAG,EAClB,eAAM,SAAS,EAAC,gCAAgC,YAC7C,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC3B,IACH,EACN,KAAC,eAAe,KAAG,IACZ,CACV,EACD,
|
|
1
|
+
{"version":3,"file":"FanModeMenu.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/FanModeMenu.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,MAAM,KAAK,GAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAO9C,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAoB;IAC9D,OAAO,CACL,KAAC,IAAI,IACH,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAC5B,kBAAQ,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,2BAA2B,aAC5D,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,cAAc,KAAG,EAClB,eAAM,SAAS,EAAC,gCAAgC,YAC7C,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC3B,IACH,EACN,KAAC,eAAe,KAAG,IACZ,CACV,EACD,gBAAgB,EAAE,CAAC,EAAE,EACrB,eAAe,EAAE;YACf,SAAS,EAAE,uBAAuB;SACnC,YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,KAAC,oBAAoB,IAEnB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EACX,IAAI,EAAE,KAAC,OAAO,KAAG,EACjB,UAAU,EAAE,IAAI,KAAK,CAAC,EACtB,OAAO,EAAE,GAAG,EAAE;gBACZ,QAAQ,CAAC,CAAC,CAAC,CAAA;YACb,CAAC,IANI,CAAC,CAON,CACH,CAAC,GACG,CACR,CAAA;AACH,CAAC;AAED,MAAM,CAAC,GAAG;IACR,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;CACT,CAAA"}
|
|
@@ -71,6 +71,9 @@ export function TemperatureControlGroup({ mode, heatValue, onHeatValueChange, co
|
|
|
71
71
|
onHeatValueChange,
|
|
72
72
|
onCoolValueChange,
|
|
73
73
|
]);
|
|
74
|
-
|
|
74
|
+
// This is done so that both sliders are operating on the same range of numbers
|
|
75
|
+
const heatCoolSliderMin = Math.min(minCool, minHeat);
|
|
76
|
+
const heatCoolSliderMax = Math.max(maxCool, maxHeat);
|
|
77
|
+
return (_jsxs("div", { className: 'seam-temperature-control-group', children: [showHeat && (_jsxs("div", { className: 'seam-temperature-control-group-block', children: [_jsx(ThermostatHeatLargeIcon, {}), _jsx(TemperatureControl, { variant: 'heat', value: heatValue, onChange: adjustHeat, min: mode === 'heat_cool' ? heatCoolSliderMin : minHeat, max: mode === 'heat_cool' ? heatCoolSliderMax : maxHeat })] })), showCool && (_jsxs("div", { className: 'seam-temperature-control-group-block', children: [_jsx(ThermostatCoolLargeIcon, {}), _jsx(TemperatureControl, { variant: 'cool', value: coolValue, onChange: adjustCool, min: mode === 'heat_cool' ? heatCoolSliderMin : minCool, max: mode === 'heat_cool' ? heatCoolSliderMax : maxCool })] }))] }));
|
|
75
78
|
}
|
|
76
79
|
//# sourceMappingURL=TemperatureControlGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemperatureControlGroup.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/TemperatureControlGroup.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TemperatureControlGroup.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/TemperatureControlGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAGvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC1E,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AAe5E,MAAM,UAAU,uBAAuB,CAAC,EACtC,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,KAAK,GAAG,CAAC,EACT,OAAO,GAAG,EAAE,EACZ,OAAO,GAAG,EAAE,EACZ,OAAO,GAAG,EAAE,EACZ,OAAO,GAAG,EAAE,GACiB;IAC7B,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,CAAA;IACxD,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,CAAA;IAExD,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,OAAO;QACP,OAAO;QACP,OAAO;QACP,OAAO;QACP,KAAK;KACN,CAAC,EACF,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAClD,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,WAAmB,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QAE9D,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAE/B,IAAI,SAAS,GAAG,YAAY,GAAG,KAAK,EAAE;YACpC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,CAAA;SACxC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CACxE,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,WAAmB,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QAE9D,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAE/B,IAAI,SAAS,GAAG,YAAY,GAAG,KAAK,EAAE;YACpC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,CAAA;SACxC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CACxE,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EACJ,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EACpC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GACrC,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAA;QAEvC,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;YAED,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;YAED,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;YAED,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;SACF;QAED,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;YAED,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;SACF;QAED,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;YAED,IAAI,SAAS,GAAG,OAAO,EAAE;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAA;aAC3B;SACF;IACH,CAAC,EAAE;QACD,IAAI;QACJ,SAAS;QACT,SAAS;QACT,aAAa;QACb,iBAAiB;QACjB,iBAAiB;KAClB,CAAC,CAAA;IAEF,+EAA+E;IAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAEpD,OAAO,CACL,eAAK,SAAS,EAAC,gCAAgC,aAC5C,QAAQ,IAAI,CACX,eAAK,SAAS,EAAC,sCAAsC,aACnD,KAAC,uBAAuB,KAAG,EAC3B,KAAC,kBAAkB,IACjB,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,UAAU,EACpB,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EACvD,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,GACvD,IACE,CACP,EAEA,QAAQ,IAAI,CACX,eAAK,SAAS,EAAC,sCAAsC,aACnD,KAAC,uBAAuB,KAAG,EAC3B,KAAC,kBAAkB,IACjB,OAAO,EAAC,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,UAAU,EACpB,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,EACvD,GAAG,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,GACvD,IACE,CACP,IACG,CACP,CAAA;AACH,CAAC"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiReactVersion = "2.
|
|
1
|
+
declare const seamapiReactVersion = "2.3.0";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -8,11 +8,14 @@ import { NestedClimateSettingScheduleTable } from 'lib/seam/components/ClimateSe
|
|
|
8
8
|
import type { CommonProps } from 'lib/seam/components/common-props.js'
|
|
9
9
|
import { useConnectedAccount } from 'lib/seam/connected-accounts/use-connected-account.js'
|
|
10
10
|
import { useClimateSettingSchedules } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
|
|
11
|
+
import { useUpdateFanMode } from 'lib/seam/thermostats/use-update-fan-mode.js'
|
|
11
12
|
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
|
|
12
13
|
import { DetailRow } from 'lib/ui/layout/DetailRow.js'
|
|
13
14
|
import { DetailSection } from 'lib/ui/layout/DetailSection.js'
|
|
14
15
|
import { DetailSectionGroup } from 'lib/ui/layout/DetailSectionGroup.js'
|
|
16
|
+
import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
|
|
15
17
|
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
|
|
18
|
+
import { FanModeMenu } from 'lib/ui/thermostat/FanModeMenu.js'
|
|
16
19
|
import { ThermostatCard } from 'lib/ui/thermostat/ThermostatCard.js'
|
|
17
20
|
|
|
18
21
|
interface ThermostatDeviceDetailsProps extends CommonProps {
|
|
@@ -39,6 +42,8 @@ export function ThermostatDeviceDetails({
|
|
|
39
42
|
device_id: device.device_id,
|
|
40
43
|
})
|
|
41
44
|
|
|
45
|
+
const { mutate: updateFanMode, isSuccess, isError } = useUpdateFanMode()
|
|
46
|
+
|
|
42
47
|
if (climateSettingsOpen) {
|
|
43
48
|
return (
|
|
44
49
|
<NestedClimateSettingScheduleTable
|
|
@@ -106,6 +111,17 @@ export function ThermostatDeviceDetails({
|
|
|
106
111
|
temperatureUnit='fahrenheit'
|
|
107
112
|
/>
|
|
108
113
|
</DetailRow>
|
|
114
|
+
<DetailRow label={t.fanMode}>
|
|
115
|
+
<FanModeMenu
|
|
116
|
+
mode={device.properties.fan_mode_setting}
|
|
117
|
+
onChange={(fanMode) => {
|
|
118
|
+
updateFanMode({
|
|
119
|
+
device_id: device.device_id,
|
|
120
|
+
fan_mode_setting: fanMode,
|
|
121
|
+
})
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
</DetailRow>
|
|
109
125
|
</DetailSection>
|
|
110
126
|
|
|
111
127
|
<DetailSection
|
|
@@ -153,6 +169,21 @@ export function ThermostatDeviceDetails({
|
|
|
153
169
|
</DetailSectionGroup>
|
|
154
170
|
</div>
|
|
155
171
|
</div>
|
|
172
|
+
|
|
173
|
+
<Snackbar
|
|
174
|
+
message={t.fanModeSuccess}
|
|
175
|
+
variant='success'
|
|
176
|
+
visible={isSuccess}
|
|
177
|
+
automaticVisibility
|
|
178
|
+
autoDismiss
|
|
179
|
+
/>
|
|
180
|
+
|
|
181
|
+
<Snackbar
|
|
182
|
+
message={t.fanModeError}
|
|
183
|
+
variant='error'
|
|
184
|
+
visible={isError}
|
|
185
|
+
automaticVisibility
|
|
186
|
+
/>
|
|
156
187
|
</div>
|
|
157
188
|
)
|
|
158
189
|
}
|
|
@@ -169,6 +200,7 @@ const t = {
|
|
|
169
200
|
currentSettingsTooltip:
|
|
170
201
|
'These are the settings currently on the device. If you change them here, they change on the device.',
|
|
171
202
|
climate: 'Climate',
|
|
203
|
+
fanMode: 'Fan mode',
|
|
172
204
|
defaultSettings: 'Default settings',
|
|
173
205
|
defaultSettingsTooltip:
|
|
174
206
|
'When a scheduled climate reaches its end time, the default settings will kick in.',
|
|
@@ -181,4 +213,6 @@ const t = {
|
|
|
181
213
|
none: 'None',
|
|
182
214
|
yes: 'Yes',
|
|
183
215
|
no: 'No',
|
|
216
|
+
fanModeSuccess: 'Successfully updated fan mode!',
|
|
217
|
+
fanModeError: 'Error updating fan mode. Please try again.',
|
|
184
218
|
}
|
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
SeamError,
|
|
7
7
|
} from 'seamapi'
|
|
8
8
|
|
|
9
|
+
import { useClientSession } from 'lib/seam/client-sessions/use-client-session.js'
|
|
9
10
|
import { NullSeamClientError, useSeamClient } from 'lib/seam/use-seam-client.js'
|
|
10
11
|
|
|
11
12
|
export interface UseCreateConnectWebviewParams {
|
|
@@ -23,6 +24,7 @@ export function useCreateConnectWebview({
|
|
|
23
24
|
UseCreateConnectWebviewMutationParams
|
|
24
25
|
> {
|
|
25
26
|
const { client } = useSeamClient()
|
|
27
|
+
const { clientSession } = useClientSession()
|
|
26
28
|
|
|
27
29
|
return useMutation<
|
|
28
30
|
ConnectWebviewCreateResponse['connect_webview'],
|
|
@@ -33,7 +35,14 @@ export function useCreateConnectWebview({
|
|
|
33
35
|
mutationParams: UseCreateConnectWebviewMutationParams
|
|
34
36
|
) => {
|
|
35
37
|
if (client === null) throw new NullSeamClientError()
|
|
36
|
-
return await client.connectWebviews.create(
|
|
38
|
+
return await client.connectWebviews.create({
|
|
39
|
+
custom_metadata: {
|
|
40
|
+
client_session_id: clientSession?.client_session_id ?? null,
|
|
41
|
+
user_identifier_key: clientSession?.user_identifier_key ?? null,
|
|
42
|
+
...mutationParams.custom_metadata,
|
|
43
|
+
},
|
|
44
|
+
...mutationParams,
|
|
45
|
+
})
|
|
37
46
|
},
|
|
38
47
|
onSuccess: ({ url }) => {
|
|
39
48
|
if (willNavigateToWebview && url != null) {
|
|
@@ -36,7 +36,7 @@ export function useUpdateFanMode(): UseMutationResult<
|
|
|
36
36
|
},
|
|
37
37
|
onSuccess: (_data, variables) => {
|
|
38
38
|
queryClient.setQueryData<ThermostatDevice | null>(
|
|
39
|
-
['
|
|
39
|
+
['devices', 'get', { device_id: variables.device_id }],
|
|
40
40
|
(thermostat) => {
|
|
41
41
|
if (thermostat == null) {
|
|
42
42
|
return
|
|
@@ -47,7 +47,7 @@ export function useUpdateFanMode(): UseMutationResult<
|
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
queryClient.setQueryData<ThermostatsListResponse['thermostats']>(
|
|
50
|
-
['
|
|
50
|
+
['devices', 'list', { device_id: variables.device_id }],
|
|
51
51
|
(thermostats): ThermostatDevice[] => {
|
|
52
52
|
if (thermostats == null) {
|
|
53
53
|
return []
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ThermostatDeviceProperties } from 'seamapi'
|
|
2
|
+
|
|
3
|
+
import type { TemperatureControlGroupProps } from 'lib/ui/thermostat/TemperatureControlGroup.js'
|
|
4
|
+
|
|
5
|
+
export type SetPointBounds = Partial<
|
|
6
|
+
Pick<
|
|
7
|
+
TemperatureControlGroupProps,
|
|
8
|
+
'minCool' | 'maxCool' | 'minHeat' | 'maxHeat' | 'delta'
|
|
9
|
+
>
|
|
10
|
+
>
|
|
11
|
+
|
|
12
|
+
export const getSetPointBounds = (
|
|
13
|
+
properties: ThermostatDeviceProperties
|
|
14
|
+
): SetPointBounds => {
|
|
15
|
+
let setPointBounds: SetPointBounds = {}
|
|
16
|
+
|
|
17
|
+
if (properties.is_cooling_available) {
|
|
18
|
+
setPointBounds = {
|
|
19
|
+
minCool: properties.min_cooling_set_point_fahrenheit,
|
|
20
|
+
maxCool: properties.max_cooling_set_point_fahrenheit,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (properties.is_heating_available) {
|
|
25
|
+
setPointBounds = {
|
|
26
|
+
...setPointBounds,
|
|
27
|
+
minHeat: properties.min_heating_set_point_fahrenheit,
|
|
28
|
+
maxHeat: properties.max_heating_set_point_fahrenheit,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (properties.is_cooling_available && properties.is_heating_available) {
|
|
33
|
+
setPointBounds = {
|
|
34
|
+
...setPointBounds,
|
|
35
|
+
delta: properties.min_heating_cooling_delta_fahrenheit,
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return setPointBounds
|
|
39
|
+
}
|