@seamapi/react 4.2.0 → 4.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 +2 -2
- package/dist/elements.js +4652 -4471
- package/dist/elements.js.map +1 -1
- package/dist/index.css +49 -0
- 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/Edit.js +2 -4
- package/lib/icons/Edit.js.map +1 -1
- package/lib/seam/components/DeviceDetails/DeviceDetails.js +15 -3
- package/lib/seam/components/DeviceDetails/DeviceDetails.js.map +1 -1
- package/lib/seam/components/DeviceDetails/LockDeviceDetails.d.ts +2 -1
- package/lib/seam/components/DeviceDetails/LockDeviceDetails.js +3 -2
- package/lib/seam/components/DeviceDetails/LockDeviceDetails.js.map +1 -1
- package/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.d.ts +2 -1
- package/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.js +3 -2
- package/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.js.map +1 -1
- package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.d.ts +2 -1
- package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js +2 -2
- package/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js.map +1 -1
- package/lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.d.ts +8 -0
- package/lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js +85 -0
- package/lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js.map +1 -0
- package/lib/seam/devices/use-update-device-name.d.ts +8 -0
- package/lib/seam/devices/use-update-device-name.js +43 -0
- package/lib/seam/devices/use-update-device-name.js.map +1 -0
- package/lib/ui/thermostat/ThermostatCard.d.ts +2 -1
- package/lib/ui/thermostat/ThermostatCard.js +4 -3
- package/lib/ui/thermostat/ThermostatCard.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/icons/Edit.tsx +6 -19
- package/src/lib/seam/components/DeviceDetails/DeviceDetails.tsx +35 -4
- package/src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx +9 -1
- package/src/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.tsx +8 -1
- package/src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx +3 -1
- package/src/lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.tsx +208 -0
- package/src/lib/seam/devices/use-update-device-name.ts +93 -0
- package/src/lib/ui/thermostat/ThermostatCard.tsx +11 -6
- package/src/lib/version.ts +1 -1
- package/src/styles/_main.scss +2 -0
- package/src/styles/_seam-editable-device-name.scss +62 -0
|
@@ -3,6 +3,7 @@ import type { NestedSpecificDeviceDetailsProps } from '../../../../lib/seam/comp
|
|
|
3
3
|
import type { LockDevice } from '../../../../lib/seam/locks/lock-device.js';
|
|
4
4
|
interface LockDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
|
|
5
5
|
device: LockDevice;
|
|
6
|
+
onEditName?: (newName: string) => void | Promise<void>;
|
|
6
7
|
}
|
|
7
|
-
export declare function LockDeviceDetails({ device, errorFilter, warningFilter, disableLockUnlock, disableCreateAccessCode, disableEditAccessCode, disableDeleteAccessCode, disableResourceIds, disableConnectedAccountInformation, onBack, className, }: LockDeviceDetailsProps): JSX.Element | null;
|
|
8
|
+
export declare function LockDeviceDetails({ device, errorFilter, warningFilter, disableLockUnlock, disableCreateAccessCode, disableEditAccessCode, disableDeleteAccessCode, disableResourceIds, disableConnectedAccountInformation, onBack, className, onEditName, }: LockDeviceDetailsProps): JSX.Element | null;
|
|
8
9
|
export {};
|
|
@@ -5,6 +5,7 @@ import { useAccessCodes } from '../../../../lib/seam/access-codes/use-access-cod
|
|
|
5
5
|
import { NestedAccessCodeTable } from '../../../../lib/seam/components/AccessCodeTable/AccessCodeTable.js';
|
|
6
6
|
import { DeviceInfo } from '../../../../lib/seam/components/DeviceDetails/DeviceInfo.js';
|
|
7
7
|
import { DeviceModel } from '../../../../lib/seam/components/DeviceDetails/DeviceModel.js';
|
|
8
|
+
import { SeamEditableDeviceName } from '../../../../lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js';
|
|
8
9
|
import { deviceErrorFilter, deviceWarningFilter } from '../../../../lib/seam/filters.js';
|
|
9
10
|
import { useToggleLock } from '../../../../lib/seam/locks/use-toggle-lock.js';
|
|
10
11
|
import { Alerts } from '../../../../lib/ui/Alert/Alerts.js';
|
|
@@ -14,7 +15,7 @@ import { DeviceImage } from '../../../../lib/ui/device/DeviceImage.js';
|
|
|
14
15
|
import { OnlineStatus } from '../../../../lib/ui/device/OnlineStatus.js';
|
|
15
16
|
import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
16
17
|
import { useToggle } from '../../../../lib/ui/use-toggle.js';
|
|
17
|
-
export function LockDeviceDetails({ device, errorFilter, warningFilter, disableLockUnlock, disableCreateAccessCode, disableEditAccessCode, disableDeleteAccessCode, disableResourceIds, disableConnectedAccountInformation, onBack, className, }) {
|
|
18
|
+
export function LockDeviceDetails({ device, errorFilter, warningFilter, disableLockUnlock, disableCreateAccessCode, disableEditAccessCode, disableDeleteAccessCode, disableResourceIds, disableConnectedAccountInformation, onBack, className, onEditName, }) {
|
|
18
19
|
const [accessCodesOpen, toggleAccessCodesOpen] = useToggle();
|
|
19
20
|
const toggleLock = useToggleLock();
|
|
20
21
|
const { accessCodes } = useAccessCodes({
|
|
@@ -45,7 +46,7 @@ export function LockDeviceDetails({ device, errorFilter, warningFilter, disableL
|
|
|
45
46
|
message: warning.message,
|
|
46
47
|
})),
|
|
47
48
|
];
|
|
48
|
-
return (_jsxs("div", { className: classNames('seam-device-details', className), children: [_jsx(ContentHeader, { title: 'Device', onBack: onBack }), _jsxs("div", { className: 'seam-body', children: [_jsxs("div", { className: 'seam-summary', children: [_jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.device }), _jsx(
|
|
49
|
+
return (_jsxs("div", { className: classNames('seam-device-details', className), children: [_jsx(ContentHeader, { title: 'Device', onBack: onBack }), _jsxs("div", { className: 'seam-body', children: [_jsxs("div", { className: 'seam-summary', children: [_jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.device }), _jsx(SeamEditableDeviceName, { tagName: 'h4', value: device.properties.name, className: 'seam-device-name', onEdit: onEditName }), _jsxs("div", { className: 'seam-properties', children: [_jsxs("span", { className: 'seam-label', children: [t.status, ":"] }), ' ', _jsx(OnlineStatus, { device: device }), device.properties.online && (_jsxs(_Fragment, { children: [_jsxs("span", { className: 'seam-label', children: [t.power, ":"] }), ' ', _jsx(BatteryStatusIndicator, { device: device })] })), _jsx(DeviceModel, { device: device })] })] })] }), _jsx(Alerts, { alerts: alerts, className: 'seam-alerts-space-top' })] }), _jsx("div", { className: 'seam-box', children: _jsxs("div", { className: 'seam-content seam-access-codes', onClick: toggleAccessCodesOpen, children: [_jsxs("span", { className: 'seam-value', children: [accessCodeCount, " ", t.accessCodes] }), _jsx(ChevronRightIcon, {})] }) }), _jsxs("div", { className: 'seam-box', children: [device.properties.locked && device.properties.online && (_jsxs("div", { className: 'seam-content seam-lock-status', children: [_jsxs("div", { children: [_jsx("span", { className: 'seam-label', children: t.lockStatus }), _jsx("span", { className: 'seam-value', children: lockStatus })] }), _jsx("div", { className: 'seam-right', children: !disableLockUnlock &&
|
|
49
50
|
device.capabilities_supported.includes('lock') && (_jsx(Button, { size: 'small', onClick: () => {
|
|
50
51
|
toggleLock.mutate(device);
|
|
51
52
|
}, children: toggleLockLabel })) })] })), _jsx(AccessCodeLength, { supportedCodeLengths: device.properties?.supported_code_lengths ?? [] })] }), _jsx(DeviceInfo, { device: device, disableConnectedAccountInformation: disableConnectedAccountInformation, disableResourceIds: disableResourceIds })] })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAA;AAE9F,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"LockDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { NestedSpecificDeviceDetailsProps } from '../../../../lib/seam/comp
|
|
|
3
3
|
import type { NoiseSensorDevice } from '../../../../lib/seam/noise-sensors/noise-sensor-device.js';
|
|
4
4
|
interface NoiseSensorDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
|
|
5
5
|
device: NoiseSensorDevice;
|
|
6
|
+
onEditName?: (newName: string) => void | Promise<void>;
|
|
6
7
|
}
|
|
7
|
-
export declare function NoiseSensorDeviceDetails({ device, disableConnectedAccountInformation, disableResourceIds, onBack, className, }: NoiseSensorDeviceDetailsProps): JSX.Element | null;
|
|
8
|
+
export declare function NoiseSensorDeviceDetails({ device, disableConnectedAccountInformation, disableResourceIds, onBack, className, onEditName, }: NoiseSensorDeviceDetailsProps): JSX.Element | null;
|
|
8
9
|
export {};
|
|
@@ -3,6 +3,7 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { DeviceInfo } from '../../../../lib/seam/components/DeviceDetails/DeviceInfo.js';
|
|
5
5
|
import { DeviceModel } from '../../../../lib/seam/components/DeviceDetails/DeviceModel.js';
|
|
6
|
+
import { SeamEditableDeviceName } from '../../../../lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js';
|
|
6
7
|
import { DeviceImage } from '../../../../lib/ui/device/DeviceImage.js';
|
|
7
8
|
import { NoiseLevelStatus } from '../../../../lib/ui/device/NoiseLevelStatus.js';
|
|
8
9
|
import { OnlineStatus } from '../../../../lib/ui/device/OnlineStatus.js';
|
|
@@ -10,9 +11,9 @@ import { ContentHeader } from '../../../../lib/ui/layout/ContentHeader.js';
|
|
|
10
11
|
import { NoiseSensorActivityList } from '../../../../lib/ui/noise-sensor/NoiseSensorActivityList.js';
|
|
11
12
|
import { NoiseThresholdsList } from '../../../../lib/ui/noise-sensor/NoiseThresholdsList.js';
|
|
12
13
|
import { TabSet } from '../../../../lib/ui/TabSet.js';
|
|
13
|
-
export function NoiseSensorDeviceDetails({ device, disableConnectedAccountInformation, disableResourceIds, onBack, className, }) {
|
|
14
|
+
export function NoiseSensorDeviceDetails({ device, disableConnectedAccountInformation, disableResourceIds, onBack, className, onEditName, }) {
|
|
14
15
|
const [tab, setTab] = useState('details');
|
|
15
|
-
return (_jsx("div", { className: classNames('seam-device-details', className), children: _jsxs("div", { className: 'seam-body seam-body-no-margin', children: [_jsxs("div", { className: 'seam-contained-summary', children: [_jsx(ContentHeader, { title: t.noiseSensor, onBack: onBack, className: 'seam-content-header-contained' }), _jsx("div", { className: 'seam-summary', children: _jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.noiseSensor }), _jsx(
|
|
16
|
+
return (_jsx("div", { className: classNames('seam-device-details', className), children: _jsxs("div", { className: 'seam-body seam-body-no-margin', children: [_jsxs("div", { className: 'seam-contained-summary', children: [_jsx(ContentHeader, { title: t.noiseSensor, onBack: onBack, className: 'seam-content-header-contained' }), _jsx("div", { className: 'seam-summary', children: _jsxs("div", { className: 'seam-content', children: [_jsx("div", { className: 'seam-image', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-info', children: [_jsx("span", { className: 'seam-label', children: t.noiseSensor }), _jsx(SeamEditableDeviceName, { onEdit: onEditName, tagName: 'h4', value: device.properties.name }), _jsxs("div", { className: 'seam-properties', children: [_jsxs("span", { className: 'seam-label', children: [t.status, ":"] }), ' ', _jsx(OnlineStatus, { device: device }), _jsx(NoiseLevelStatus, { device: device }), _jsx(DeviceModel, { device: device })] })] })] }) }), _jsx(TabSet, { tabs: ['details', 'activity'], tabTitles: {
|
|
16
17
|
details: t.details,
|
|
17
18
|
activity: t.activity,
|
|
18
19
|
}, activeTab: tab, onTabChange: (tab) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoiseSensorDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAA;
|
|
1
|
+
{"version":3,"file":"NoiseSensorDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { NestedSpecificDeviceDetailsProps } from '../../../../lib/seam/comp
|
|
|
3
3
|
import type { ThermostatDevice } from '../../../../lib/seam/thermostats/thermostat-device.js';
|
|
4
4
|
interface ThermostatDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
|
|
5
5
|
device: ThermostatDevice;
|
|
6
|
+
onEditName?: (newName: string) => void | Promise<void>;
|
|
6
7
|
}
|
|
7
|
-
export declare function ThermostatDeviceDetails({ device, disableResourceIds, disableConnectedAccountInformation, onBack, className, }: ThermostatDeviceDetailsProps): JSX.Element | null;
|
|
8
|
+
export declare function ThermostatDeviceDetails({ device, disableResourceIds, disableConnectedAccountInformation, onBack, className, onEditName, }: ThermostatDeviceDetailsProps): JSX.Element | null;
|
|
8
9
|
export {};
|
|
@@ -20,11 +20,11 @@ import { ClimateSettingStatus } from '../../../../lib/ui/thermostat/ClimateSetti
|
|
|
20
20
|
import { FanModeMenu } from '../../../../lib/ui/thermostat/FanModeMenu.js';
|
|
21
21
|
import { TemperatureControlGroup } from '../../../../lib/ui/thermostat/TemperatureControlGroup.js';
|
|
22
22
|
import { ThermostatCard } from '../../../../lib/ui/thermostat/ThermostatCard.js';
|
|
23
|
-
export function ThermostatDeviceDetails({ device, disableResourceIds, disableConnectedAccountInformation, onBack, className, }) {
|
|
23
|
+
export function ThermostatDeviceDetails({ device, disableResourceIds, disableConnectedAccountInformation, onBack, className, onEditName, }) {
|
|
24
24
|
if (device == null) {
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
|
-
return (_jsxs("div", { className: classNames('seam-device-details', className), children: [_jsx(ContentHeader, { title: t.thermostat, onBack: onBack }), _jsxs("div", { className: 'seam-body', children: [_jsx(ThermostatCard, { device: device }), _jsx("div", { className: 'seam-thermostat-device-details', children: _jsxs(DetailSectionGroup, { children: [_jsxs(DetailSection, { label: t.currentSettings, tooltipContent: t.currentSettingsTooltip, children: [_jsx(ClimateSettingRow, { device: device }), _jsx(FanModeRow, { device: device })] }), _jsx(DeviceInfo, { device: device, disableConnectedAccountInformation: disableConnectedAccountInformation, disableResourceIds: disableResourceIds })] }) })] })] }));
|
|
27
|
+
return (_jsxs("div", { className: classNames('seam-device-details', className), children: [_jsx(ContentHeader, { title: t.thermostat, onBack: onBack }), _jsxs("div", { className: 'seam-body', children: [_jsx(ThermostatCard, { device: device, onEditName: onEditName }), _jsx("div", { className: 'seam-thermostat-device-details', children: _jsxs(DetailSectionGroup, { children: [_jsxs(DetailSection, { label: t.currentSettings, tooltipContent: t.currentSettingsTooltip, children: [_jsx(ClimateSettingRow, { device: device }), _jsx(FanModeRow, { device: device })] }), _jsx(DeviceInfo, { device: device, disableConnectedAccountInformation: disableConnectedAccountInformation, disableResourceIds: disableResourceIds })] }) })] })] }));
|
|
28
28
|
}
|
|
29
29
|
function FanModeRow({ device }) {
|
|
30
30
|
const { mutate, isSuccess, isError } = useSetThermostatFanMode();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAA;AAK5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAA;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAA;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,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,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"ThermostatDeviceDetails.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type HTMLAttributes } from 'react';
|
|
2
|
+
export type SeamDeviceNameProps = {
|
|
3
|
+
onEdit?: (newName: string) => void;
|
|
4
|
+
editable?: boolean;
|
|
5
|
+
tagName?: string;
|
|
6
|
+
value: string;
|
|
7
|
+
} & HTMLAttributes<HTMLElement>;
|
|
8
|
+
export declare function SeamEditableDeviceName({ onEdit, editable, tagName, value, ...props }: SeamDeviceNameProps): JSX.Element;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { useCallback, useState, } from 'react';
|
|
4
|
+
import { CheckIcon } from '../../../../lib/icons/Check.js';
|
|
5
|
+
import { CloseIcon } from '../../../../lib/icons/Close.js';
|
|
6
|
+
import { EditIcon } from '../../../../lib/icons/Edit.js';
|
|
7
|
+
function IconButton(props) {
|
|
8
|
+
return (_jsx("button", { ...props, className: classNames('seam-editable-device-name-icon-button', props.className), children: props.children }));
|
|
9
|
+
}
|
|
10
|
+
const fixName = (name) => {
|
|
11
|
+
return name.replace(/\s+/g, ' ').trim();
|
|
12
|
+
};
|
|
13
|
+
const isValidName = (name) => {
|
|
14
|
+
if (name.length < 2) {
|
|
15
|
+
return {
|
|
16
|
+
type: 'error',
|
|
17
|
+
message: 'Name must be at least 2 characters long',
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (name.length > 64) {
|
|
21
|
+
return {
|
|
22
|
+
type: 'error',
|
|
23
|
+
message: 'Name must be at most 64 characters long',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
type: 'success',
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export function SeamEditableDeviceName({ onEdit, editable = true, tagName, value, ...props }) {
|
|
31
|
+
const [editing, setEditing] = useState(false);
|
|
32
|
+
const [errorText, setErrorText] = useState(null);
|
|
33
|
+
const [currentValue, setCurrentValue] = useState(value);
|
|
34
|
+
const Tag = (tagName ?? 'span');
|
|
35
|
+
const handleCheck = useCallback(() => {
|
|
36
|
+
const fixedName = fixName(currentValue);
|
|
37
|
+
const valid = isValidName(fixedName);
|
|
38
|
+
if (valid.type === 'error') {
|
|
39
|
+
setErrorText(valid.message);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
setEditing(false);
|
|
43
|
+
setCurrentValue(fixedName);
|
|
44
|
+
onEdit?.(fixedName);
|
|
45
|
+
}, [currentValue, onEdit]);
|
|
46
|
+
const handleChange = useCallback((event) => {
|
|
47
|
+
setCurrentValue(event.target.value);
|
|
48
|
+
setErrorText(null);
|
|
49
|
+
}, []);
|
|
50
|
+
const handleCancel = useCallback(() => {
|
|
51
|
+
setEditing(false);
|
|
52
|
+
setCurrentValue(value);
|
|
53
|
+
setErrorText(null);
|
|
54
|
+
}, [value]);
|
|
55
|
+
const handleInputKeydown = useCallback((e) => {
|
|
56
|
+
if (e.repeat)
|
|
57
|
+
return;
|
|
58
|
+
if (e.key === 'Enter') {
|
|
59
|
+
handleCheck();
|
|
60
|
+
}
|
|
61
|
+
else if (e.key === 'Escape') {
|
|
62
|
+
handleCancel();
|
|
63
|
+
}
|
|
64
|
+
}, [handleCheck, handleCancel]);
|
|
65
|
+
return (_jsxs(Tag, { ...props, className: classNames('seam-editable-device-name', props.className), children: [_jsx(NameView, { editing: editing, value: currentValue, onChange: handleChange, onKeyDown: handleInputKeydown, errorText: errorText }), editable && (_jsx("span", { className: 'seam-editable-device-name-icon-wrapper', children: _jsx(ActionButtons, { editing: editing, onEdit: () => {
|
|
66
|
+
setEditing(true);
|
|
67
|
+
}, onCancel: handleCancel, onCheck: handleCheck }) }))] }));
|
|
68
|
+
}
|
|
69
|
+
function NameView(props) {
|
|
70
|
+
if (!props.editing) {
|
|
71
|
+
return _jsx("span", { children: props.value });
|
|
72
|
+
}
|
|
73
|
+
return (_jsxs("span", { className: 'seam-editable-device-name-input-wrapper', children: [_jsx("input", { type: 'text', defaultValue: props.value, onChange: props.onChange, onKeyDown: props.onKeyDown, ref: (el) => {
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
el?.focus();
|
|
76
|
+
}, 0);
|
|
77
|
+
} }), props.errorText != null && (_jsx("span", { className: 'seam-editable-device-name-input-error', children: props.errorText }))] }));
|
|
78
|
+
}
|
|
79
|
+
function ActionButtons(props) {
|
|
80
|
+
if (props.editing) {
|
|
81
|
+
return (_jsxs(_Fragment, { children: [_jsx(IconButton, { onClick: props.onCheck, children: _jsx(CheckIcon, { width: '1em', height: '1em', viewBox: '0 0 24 24' }) }), _jsx(IconButton, { onClick: props.onCancel, children: _jsx(CloseIcon, { width: '1em', height: '1em', viewBox: '0 0 24 24' }) })] }));
|
|
82
|
+
}
|
|
83
|
+
return (_jsx(IconButton, { onClick: props.onEdit, children: _jsx(EditIcon, { width: '1em', height: '1em', viewBox: '0 0 24 24' }) }));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=SeamEditableDeviceName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeamEditableDeviceName.js","sourceRoot":"","sources":["../../../../src/lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DevicesGetParams, DevicesUpdateBody, SeamHttpApiError } from '@seamapi/http/connect';
|
|
2
|
+
import { type UseMutationResult } from '@tanstack/react-query';
|
|
3
|
+
export type UseUpdateDeviceNameParams = never;
|
|
4
|
+
export type UseUpdateDeviceNameData = undefined;
|
|
5
|
+
export type UseUpdateDeviceNameMutationVariables = Pick<DevicesUpdateBody, 'device_id' | 'name'>;
|
|
6
|
+
type MutationError = SeamHttpApiError;
|
|
7
|
+
export declare function useUpdateDeviceName(params: DevicesGetParams): UseMutationResult<UseUpdateDeviceNameData, MutationError, UseUpdateDeviceNameMutationVariables>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { useMutation, useQueryClient, } from '@tanstack/react-query';
|
|
2
|
+
import { NullSeamClientError, useSeamClient } from '../../../lib/seam/use-seam-client.js';
|
|
3
|
+
export function useUpdateDeviceName(params) {
|
|
4
|
+
const { client } = useSeamClient();
|
|
5
|
+
const queryClient = useQueryClient();
|
|
6
|
+
return useMutation({
|
|
7
|
+
mutationFn: async (variables) => {
|
|
8
|
+
if (client === null)
|
|
9
|
+
throw new NullSeamClientError();
|
|
10
|
+
await client.devices.update(variables);
|
|
11
|
+
},
|
|
12
|
+
onSuccess: (_data, variables) => {
|
|
13
|
+
queryClient.setQueryData(['devices', 'get', params], (device) => {
|
|
14
|
+
if (device == null) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
return getUpdatedDevice(device, variables.name ?? device.properties.name);
|
|
18
|
+
});
|
|
19
|
+
queryClient.setQueryData(['devices', 'list', { device_id: variables.device_id }], (devices) => {
|
|
20
|
+
if (devices == null) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return devices.map((device) => {
|
|
24
|
+
if (device.device_id === variables.device_id) {
|
|
25
|
+
return getUpdatedDevice(device, variables.name ?? device.properties.name);
|
|
26
|
+
}
|
|
27
|
+
return device;
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const getUpdatedDevice = (device, name) => {
|
|
34
|
+
const { properties } = device;
|
|
35
|
+
return {
|
|
36
|
+
...device,
|
|
37
|
+
properties: {
|
|
38
|
+
...properties,
|
|
39
|
+
name,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=use-update-device-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-update-device-name.js","sourceRoot":"","sources":["../../../src/lib/seam/devices/use-update-device-name.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EAEX,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAahF,MAAM,UAAU,mBAAmB,CACjC,MAAwB;IAMxB,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,WAAW,CAIhB;QACA,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;YACpD,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC9B,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,EAC1B,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnB,OAAM;gBACR,CAAC;gBAED,OAAO,gBAAgB,CACrB,MAAM,EACN,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CACzC,CAAA;YACH,CAAC,CACF,CAAA;YAED,WAAW,CAAC,YAAY,CACtB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,EACvD,CAAC,OAAO,EAAY,EAAE;gBACpB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC5B,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;wBAC7C,OAAO,gBAAgB,CACrB,MAAM,EACN,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CACzC,CAAA;oBACH,CAAC;oBAED,OAAO,MAAM,CAAA;gBACf,CAAC,CAAC,CAAA;YACJ,CAAC,CACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAU,EAAE;IAChE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;IAE7B,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE;YACV,GAAG,UAAU;YACb,IAAI;SACL;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import type { ThermostatDevice } from '../../../lib/seam/thermostats/thermostat-device.js';
|
|
3
3
|
interface ThermostatCardProps {
|
|
4
4
|
device: ThermostatDevice;
|
|
5
|
+
onEditName?: (newName: string) => void;
|
|
5
6
|
}
|
|
6
|
-
export declare function ThermostatCard(
|
|
7
|
+
export declare function ThermostatCard(props: ThermostatCardProps): JSX.Element;
|
|
7
8
|
export {};
|
|
@@ -3,11 +3,12 @@ import classNames from 'classnames';
|
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { FanIcon } from '../../../lib/icons/Fan.js';
|
|
5
5
|
import { OffIcon } from '../../../lib/icons/Off.js';
|
|
6
|
+
import { SeamEditableDeviceName } from '../../../lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js';
|
|
6
7
|
import { DeviceImage } from '../../../lib/ui/device/DeviceImage.js';
|
|
7
8
|
import { ClimateSettingStatus } from '../../../lib/ui/thermostat/ClimateSettingStatus.js';
|
|
8
9
|
import { Temperature } from '../../../lib/ui/thermostat/Temperature.js';
|
|
9
|
-
export function ThermostatCard(
|
|
10
|
-
return (_jsx("div", { className: 'seam-thermostat-card', children: _jsx(Content, { device: device }) }));
|
|
10
|
+
export function ThermostatCard(props) {
|
|
11
|
+
return (_jsx("div", { className: 'seam-thermostat-card', children: _jsx(Content, { device: props.device, onEditName: props.onEditName }) }));
|
|
11
12
|
}
|
|
12
13
|
function Content(props) {
|
|
13
14
|
const { device } = props;
|
|
@@ -17,7 +18,7 @@ function Content(props) {
|
|
|
17
18
|
};
|
|
18
19
|
const { temperature_fahrenheit: temperatureFahrenheit, temperature_celsius: temperatureCelsius, current_climate_setting: currentClimateSetting, is_fan_running: isFanRunning, relative_humidity: relativeHumidity, } = device.properties;
|
|
19
20
|
const systemStatus = getSystemStatus(device);
|
|
20
|
-
return (_jsxs("div", { className: 'seam-thermostat-card-content', children: [_jsx("div", { className: 'seam-thermostat-card-image-wrap', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-thermostat-card-details', children: [_jsxs("div", { className: 'seam-thermostat-heading-wrap', children: [_jsx(
|
|
21
|
+
return (_jsxs("div", { className: 'seam-thermostat-card-content', children: [_jsx("div", { className: 'seam-thermostat-card-image-wrap', children: _jsx(DeviceImage, { device: device }) }), _jsxs("div", { className: 'seam-thermostat-card-details', children: [_jsxs("div", { className: 'seam-thermostat-heading-wrap', children: [_jsx(SeamEditableDeviceName, { value: device.properties.name, tagName: 'h4', className: 'seam-thermostat-card-heading', onEdit: props.onEditName }), _jsx("button", { onClick: toggleTemperatureUnit, className: 'seam-thermostat-temperature-toggle', children: _jsx("span", { className: 'seam-thermostat-temperature-toggle-label', children: temperatureUnit === 'fahrenheit' ? t.fahrenheit : t.celsius }) })] }), _jsx("div", { className: 'seam-thermostat-properties-wrap', children: _jsxs("div", { className: 'seam-thermostat-properties', children: [_jsx("div", { className: 'seam-thermostat-property-block', children: _jsxs("p", { className: 'seam-thermostat-property-label', children: [t.temperature, ":"] }) }), _jsxs("div", { className: 'seam-thermostat-property-block', children: [_jsx("p", { className: 'seam-thermostat-property-value', children: _jsx(Temperature, { fahrenheit: temperatureFahrenheit, celsius: temperatureCelsius, unit: temperatureUnit }) }), _jsx("p", { className: 'seam-thermostat-property-value', children: "|" }), _jsxs("p", { className: 'seam-thermostat-property-label', children: [t.humidity, ":"] }), relativeHumidity != null && (_jsxs("p", { className: 'seam-thermostat-property-value', children: [relativeHumidity * 100, "%"] }))] }), _jsx("div", { className: 'seam-thermostat-property-block', children: _jsxs("p", { className: 'seam-thermostat-property-label', children: [t.setting, ":"] }) }), _jsx("div", { className: 'seam-thermostat-property-block', children: _jsx(ClimateSettingStatus, { climateSetting: currentClimateSetting, temperatureUnit: temperatureUnit }) }), _jsx("div", { className: 'seam-thermostat-property-block', children: _jsxs("p", { className: 'seam-thermostat-property-label', children: [t.fanMode, ":"] }) }), _jsxs("div", { className: 'seam-thermostat-property-block seam-thermostat-property-icon-block', children: [_jsx("div", { className: 'seam-thermostat-property-icon', children: isFanRunning ? _jsx(FanIcon, {}) : _jsx(OffIcon, {}) }), _jsx("p", { className: 'seam-thermostat-property-value', children: isFanRunning ? t.auto : t.off })] }), _jsx("div", { className: 'seam-thermostat-property-block', children: _jsxs("p", { className: 'seam-thermostat-property-label', children: [t.systemStatus, ":"] }) }), _jsx("div", { className: 'seam-thermostat-property-block', children: _jsx("div", { className: classNames('seam-thermostat-property-tag', `seam-thermostat-property-tag-${systemStatus}`), children: _jsx("p", { className: 'seam-thermostat-property-tag-label', children: systemStatus === 'off' ? '--' : t[systemStatus] }) }) })] }) })] })] }));
|
|
21
22
|
}
|
|
22
23
|
const getSystemStatus = (device) => {
|
|
23
24
|
const { properties } = device;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatCard.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/ThermostatCard.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"ThermostatCard.js","sourceRoot":"","sources":["../../../src/lib/ui/thermostat/ThermostatCard.tsx"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const seamapiReactVersion = "4.
|
|
1
|
+
declare const seamapiReactVersion = "4.3.0";
|
|
2
2
|
export default seamapiReactVersion;
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
package/src/lib/icons/Edit.tsx
CHANGED
|
@@ -13,25 +13,12 @@ export function EditIcon(props: SVGProps<SVGSVGElement>): JSX.Element {
|
|
|
13
13
|
viewBox='0 0 24 24'
|
|
14
14
|
{...props}
|
|
15
15
|
>
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
maskUnits='userSpaceOnUse'
|
|
23
|
-
style={{
|
|
24
|
-
maskType: 'alpha',
|
|
25
|
-
}}
|
|
26
|
-
>
|
|
27
|
-
<path fill='#D9D9D9' d='M0 0h24v24H0z' />
|
|
28
|
-
</mask>
|
|
29
|
-
<g mask='url(#edit_svg__a)'>
|
|
30
|
-
<path
|
|
31
|
-
fill='#232B3A'
|
|
32
|
-
d='M5 19h1.4l8.625-8.625-1.4-1.4L5 17.6zM19.3 8.925l-4.25-4.2 1.4-1.4a1.92 1.92 0 0 1 1.413-.575 1.92 1.92 0 0 1 1.412.575l1.4 1.4q.574.575.6 1.388a1.8 1.8 0 0 1-.55 1.387zM17.85 10.4 7.25 21H3v-4.25l10.6-10.6z'
|
|
33
|
-
/>
|
|
34
|
-
</g>
|
|
16
|
+
<path
|
|
17
|
+
fill='#232426'
|
|
18
|
+
fillRule='evenodd'
|
|
19
|
+
d='M16.836 3.336c-1.015 0-1.99.403-2.707 1.121l-10.5 10.5a1 1 0 0 0-.293.707v4a1 1 0 0 0 1 1h4a1 1 0 0 0 .707-.293l9.5-9.5 1-1a3.829 3.829 0 0 0-2.707-6.535m1 5.414.293-.293a1.829 1.829 0 0 0-2.586-2.586l-.293.293zm-4-1.172-8.5 8.5v2.586h2.586l8.5-8.5z'
|
|
20
|
+
clipRule='evenodd'
|
|
21
|
+
/>
|
|
35
22
|
</svg>
|
|
36
23
|
)
|
|
37
24
|
}
|
|
@@ -6,6 +6,7 @@ import { LockDeviceDetails } from 'lib/seam/components/DeviceDetails/LockDeviceD
|
|
|
6
6
|
import { NoiseSensorDeviceDetails } from 'lib/seam/components/DeviceDetails/NoiseSensorDeviceDetails.js'
|
|
7
7
|
import { ThermostatDeviceDetails } from 'lib/seam/components/DeviceDetails/ThermostatDeviceDetails.js'
|
|
8
8
|
import { useDevice } from 'lib/seam/devices/use-device.js'
|
|
9
|
+
import { useUpdateDeviceName } from 'lib/seam/devices/use-update-device-name.js'
|
|
9
10
|
import { isLockDevice } from 'lib/seam/locks/lock-device.js'
|
|
10
11
|
import { isNoiseSensorDevice } from 'lib/seam/noise-sensors/noise-sensor-device.js'
|
|
11
12
|
import { isThermostatDevice } from 'lib/seam/thermostats/thermostat-device.js'
|
|
@@ -16,7 +17,6 @@ export interface DeviceDetailsProps extends CommonProps {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export const NestedDeviceDetails = withRequiredCommonProps(DeviceDetails)
|
|
19
|
-
|
|
20
20
|
export interface NestedSpecificDeviceDetailsProps
|
|
21
21
|
extends Required<Omit<CommonProps, 'onBack' | 'className'>> {
|
|
22
22
|
onBack: (() => void) | undefined
|
|
@@ -42,6 +42,19 @@ export function DeviceDetails({
|
|
|
42
42
|
device_id: deviceId,
|
|
43
43
|
})
|
|
44
44
|
|
|
45
|
+
const { mutate: setDeviceName } = useUpdateDeviceName({
|
|
46
|
+
device_id: deviceId,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const updateDeviceName = (newName: string): void => {
|
|
50
|
+
if (device != null) {
|
|
51
|
+
setDeviceName({
|
|
52
|
+
device_id: device.device_id,
|
|
53
|
+
name: newName,
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
45
58
|
if (device == null) {
|
|
46
59
|
return null
|
|
47
60
|
}
|
|
@@ -60,15 +73,33 @@ export function DeviceDetails({
|
|
|
60
73
|
}
|
|
61
74
|
|
|
62
75
|
if (isLockDevice(device)) {
|
|
63
|
-
return
|
|
76
|
+
return (
|
|
77
|
+
<LockDeviceDetails
|
|
78
|
+
device={device}
|
|
79
|
+
onEditName={updateDeviceName}
|
|
80
|
+
{...props}
|
|
81
|
+
/>
|
|
82
|
+
)
|
|
64
83
|
}
|
|
65
84
|
|
|
66
85
|
if (isThermostatDevice(device)) {
|
|
67
|
-
return
|
|
86
|
+
return (
|
|
87
|
+
<ThermostatDeviceDetails
|
|
88
|
+
device={device}
|
|
89
|
+
onEditName={updateDeviceName}
|
|
90
|
+
{...props}
|
|
91
|
+
/>
|
|
92
|
+
)
|
|
68
93
|
}
|
|
69
94
|
|
|
70
95
|
if (isNoiseSensorDevice(device)) {
|
|
71
|
-
return
|
|
96
|
+
return (
|
|
97
|
+
<NoiseSensorDeviceDetails
|
|
98
|
+
device={device}
|
|
99
|
+
onEditName={updateDeviceName}
|
|
100
|
+
{...props}
|
|
101
|
+
/>
|
|
102
|
+
)
|
|
72
103
|
}
|
|
73
104
|
|
|
74
105
|
return null
|
|
@@ -6,6 +6,7 @@ import { NestedAccessCodeTable } from 'lib/seam/components/AccessCodeTable/Acces
|
|
|
6
6
|
import type { NestedSpecificDeviceDetailsProps } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
|
|
7
7
|
import { DeviceInfo } from 'lib/seam/components/DeviceDetails/DeviceInfo.js'
|
|
8
8
|
import { DeviceModel } from 'lib/seam/components/DeviceDetails/DeviceModel.js'
|
|
9
|
+
import { SeamEditableDeviceName } from 'lib/seam/components/SeamEditableDeviceName/SeamEditableDeviceName.js'
|
|
9
10
|
import { deviceErrorFilter, deviceWarningFilter } from 'lib/seam/filters.js'
|
|
10
11
|
import type { LockDevice } from 'lib/seam/locks/lock-device.js'
|
|
11
12
|
import { useToggleLock } from 'lib/seam/locks/use-toggle-lock.js'
|
|
@@ -19,6 +20,7 @@ import { useToggle } from 'lib/ui/use-toggle.js'
|
|
|
19
20
|
|
|
20
21
|
interface LockDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
|
|
21
22
|
device: LockDevice
|
|
23
|
+
onEditName?: (newName: string) => void | Promise<void>
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export function LockDeviceDetails({
|
|
@@ -33,6 +35,7 @@ export function LockDeviceDetails({
|
|
|
33
35
|
disableConnectedAccountInformation,
|
|
34
36
|
onBack,
|
|
35
37
|
className,
|
|
38
|
+
onEditName,
|
|
36
39
|
}: LockDeviceDetailsProps): JSX.Element | null {
|
|
37
40
|
const [accessCodesOpen, toggleAccessCodesOpen] = useToggle()
|
|
38
41
|
const toggleLock = useToggleLock()
|
|
@@ -95,7 +98,12 @@ export function LockDeviceDetails({
|
|
|
95
98
|
</div>
|
|
96
99
|
<div className='seam-info'>
|
|
97
100
|
<span className='seam-label'>{t.device}</span>
|
|
98
|
-
<
|
|
101
|
+
<SeamEditableDeviceName
|
|
102
|
+
tagName='h4'
|
|
103
|
+
value={device.properties.name}
|
|
104
|
+
className='seam-device-name'
|
|
105
|
+
onEdit={onEditName}
|
|
106
|
+
/>
|
|
99
107
|
<div className='seam-properties'>
|
|
100
108
|
<span className='seam-label'>{t.status}:</span>{' '}
|
|
101
109
|
<OnlineStatus device={device} />
|