Skip to content

Commit 1a3c961

Browse files
authored
Merge pull request #623 from seamapi/disableConnectedAccountInformation
Add disableConnectedAccountInformation
2 parents ee882a1 + 82ccccd commit 1a3c961

File tree

11 files changed

+128
-56
lines changed

11 files changed

+128
-56
lines changed

src/lib/element.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const commonProps: R2wcProps<CommonProps> = {
4646
disableEditAccessCode: 'boolean',
4747
disableDeleteAccessCode: 'boolean',
4848
disableResourceIds: 'boolean',
49+
disableConnectedAccountInformation: 'boolean',
4950
disableClimateSettingSchedules: 'boolean',
5051
onBack: 'object',
5152
className: 'string',

src/lib/seam/components/AccessCodeDetails/AccessCodeDetails.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export function AccessCodeDetails({
4242
disableLockUnlock = false,
4343
disableDeleteAccessCode = false,
4444
disableResourceIds = false,
45+
disableConnectedAccountInformation = false,
4546
disableClimateSettingSchedules,
4647
onBack,
4748
className,
@@ -69,6 +70,7 @@ export function AccessCodeDetails({
6970
disableEditAccessCode={disableEditAccessCode}
7071
disableDeleteAccessCode={disableDeleteAccessCode}
7172
disableResourceIds={disableResourceIds}
73+
disableConnectedAccountInformation={disableConnectedAccountInformation}
7274
disableClimateSettingSchedules={disableClimateSettingSchedules}
7375
onBack={() => {
7476
selectDevice(null)

src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export function AccessCodeTable({
8383
disableLockUnlock = false,
8484
disableDeleteAccessCode = false,
8585
disableResourceIds = false,
86+
disableConnectedAccountInformation = false,
8687
disableClimateSettingSchedules,
8788
}: AccessCodeTableProps): JSX.Element {
8889
useComponentTelemetry('AccessCodeTable')
@@ -147,6 +148,7 @@ export function AccessCodeTable({
147148
disableEditAccessCode={disableEditAccessCode}
148149
disableDeleteAccessCode={disableDeleteAccessCode}
149150
disableResourceIds={disableResourceIds}
151+
disableConnectedAccountInformation={disableConnectedAccountInformation}
150152
disableClimateSettingSchedules={disableClimateSettingSchedules}
151153
onBack={() => {
152154
setSelectedEditAccessCodeId(null)
@@ -183,6 +185,9 @@ export function AccessCodeTable({
183185
disableEditAccessCode={disableEditAccessCode}
184186
disableDeleteAccessCode={disableDeleteAccessCode}
185187
disableResourceIds={disableResourceIds}
188+
disableConnectedAccountInformation={
189+
disableConnectedAccountInformation
190+
}
186191
disableClimateSettingSchedules={disableClimateSettingSchedules}
187192
onBack={() => {
188193
setSelectedViewAccessCodeId(null)
@@ -204,6 +209,7 @@ export function AccessCodeTable({
204209
disableEditAccessCode={disableEditAccessCode}
205210
disableDeleteAccessCode={disableDeleteAccessCode}
206211
disableResourceIds={disableResourceIds}
212+
disableConnectedAccountInformation={disableConnectedAccountInformation}
207213
disableClimateSettingSchedules={disableClimateSettingSchedules}
208214
onBack={toggleAddAccessCodeForm}
209215
className={className}

src/lib/seam/components/ClimateSettingScheduleDetails/ClimateSettingScheduleDetails.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function ClimateSettingScheduleDetails({
4040
disableCreateAccessCode,
4141
disableEditAccessCode,
4242
disableResourceIds = false,
43+
disableConnectedAccountInformation = false,
4344
disableClimateSettingSchedules,
4445
}: ClimateSettingScheduleDetailsProps): JSX.Element | null {
4546
useComponentTelemetry('ClimateSettingScheduleDetails')
@@ -70,6 +71,7 @@ export function ClimateSettingScheduleDetails({
7071
disableEditAccessCode={disableEditAccessCode}
7172
disableDeleteAccessCode={disableDeleteAccessCode}
7273
disableResourceIds={disableResourceIds}
74+
disableConnectedAccountInformation={disableConnectedAccountInformation}
7375
disableClimateSettingSchedules={disableClimateSettingSchedules}
7476
onBack={() => {
7577
selectDevice(null)

src/lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export function ClimateSettingScheduleTable({
7171
disableCreateAccessCode,
7272
disableEditAccessCode,
7373
disableResourceIds = false,
74+
disableConnectedAccountInformation = false,
7475
disableClimateSettingSchedules,
7576
}: ClimateSettingScheduleTableProps): JSX.Element {
7677
useComponentTelemetry('ClimateSettingScheduleTable')
@@ -125,6 +126,7 @@ export function ClimateSettingScheduleTable({
125126
disableEditAccessCode={disableEditAccessCode}
126127
disableDeleteAccessCode={disableDeleteAccessCode}
127128
disableResourceIds={disableResourceIds}
129+
disableConnectedAccountInformation={disableConnectedAccountInformation}
128130
disableClimateSettingSchedules={disableClimateSettingSchedules}
129131
onBack={() => {
130132
setSelectedViewClimateSettingScheduleId(null)

src/lib/seam/components/DeviceDetails/DeviceDetails.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,20 @@ export interface DeviceDetailsProps extends CommonProps {
1515

1616
export const NestedDeviceDetails = withRequiredCommonProps(DeviceDetails)
1717

18+
export interface NestedSpecificDeviceDetailsProps
19+
extends Required<Omit<CommonProps, 'onBack' | 'className'>> {
20+
onBack: (() => void) | undefined
21+
className: string | undefined
22+
}
23+
1824
export function DeviceDetails({
1925
deviceId,
26+
errorFilter = () => true,
27+
warningFilter = () => true,
2028
disableLockUnlock = false,
2129
disableDeleteAccessCode = false,
2230
disableResourceIds = false,
31+
disableConnectedAccountInformation = false,
2332
disableCreateAccessCode = false,
2433
disableEditAccessCode = false,
2534
disableClimateSettingSchedules = false,
@@ -36,10 +45,13 @@ export function DeviceDetails({
3645
return null
3746
}
3847

39-
const props: Omit<DeviceDetailsProps, 'deviceId'> = {
48+
const props: NestedSpecificDeviceDetailsProps = {
49+
errorFilter,
50+
warningFilter,
4051
disableLockUnlock,
4152
disableDeleteAccessCode,
4253
disableResourceIds,
54+
disableConnectedAccountInformation,
4355
disableCreateAccessCode,
4456
disableEditAccessCode,
4557
disableClimateSettingSchedules,
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import type { CommonDevice } from 'seamapi'
2+
3+
import { BeeIcon } from 'lib/icons/Bee.js'
4+
import type { CommonProps } from 'lib/seam/components/common-props.js'
5+
import { useConnectedAccount } from 'lib/seam/connected-accounts/use-connected-account.js'
6+
import { DetailRow } from 'lib/ui/layout/DetailRow.js'
7+
import { DetailSection } from 'lib/ui/layout/DetailSection.js'
8+
9+
interface DeviceInfoProps
10+
extends Required<
11+
Pick<
12+
CommonProps,
13+
'disableConnectedAccountInformation' | 'disableResourceIds'
14+
>
15+
> {
16+
device: CommonDevice
17+
}
18+
19+
export function DeviceInfo({
20+
device,
21+
disableConnectedAccountInformation,
22+
disableResourceIds,
23+
}: DeviceInfoProps): JSX.Element | null {
24+
const { connectedAccount } = useConnectedAccount(device.connected_account_id)
25+
return (
26+
<DetailSection label={t.deviceInfo}>
27+
<DetailRow label={t.manufacturer}>
28+
<div className='seam-detail-row-hstack'>
29+
{device.properties.model.manufacturer_display_name}
30+
{device.properties.manufacturer === 'ecobee' && <BeeIcon />}
31+
</div>
32+
</DetailRow>
33+
{!disableConnectedAccountInformation && (
34+
<DetailRow
35+
label={t.linkedAccount}
36+
sublabel={
37+
connectedAccount?.user_identifier?.email ??
38+
device.connected_account_id
39+
}
40+
/>
41+
)}
42+
{!disableResourceIds && (
43+
<DetailRow label={t.deviceId} sublabel={device.device_id} />
44+
)}
45+
</DetailSection>
46+
)
47+
}
48+
49+
const t = {
50+
deviceInfo: 'Device info',
51+
manufacturer: 'Manufacturer',
52+
linkedAccount: 'Linked account',
53+
deviceId: 'Device ID',
54+
}

src/lib/seam/components/DeviceDetails/LockDeviceDetails.tsx

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import type { LockDevice } from 'seamapi'
44
import { ChevronRightIcon } from 'lib/icons/ChevronRight.js'
55
import { useAccessCodes } from 'lib/seam/access-codes/use-access-codes.js'
66
import { NestedAccessCodeTable } from 'lib/seam/components/AccessCodeTable/AccessCodeTable.js'
7-
import type { CommonProps } from 'lib/seam/components/common-props.js'
7+
import type { NestedSpecificDeviceDetailsProps } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
8+
import { DeviceInfo } from 'lib/seam/components/DeviceDetails/DeviceInfo.js'
89
import { DeviceModel } from 'lib/seam/components/DeviceDetails/DeviceModel.js'
910
import { useToggleLock } from 'lib/seam/devices/use-toggle-lock.js'
1011
import { deviceErrorFilter, deviceWarningFilter } from 'lib/seam/filters.js'
@@ -16,27 +17,24 @@ import { OnlineStatus } from 'lib/ui/device/OnlineStatus.js'
1617
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
1718
import { useToggle } from 'lib/ui/use-toggle.js'
1819

19-
interface LockDeviceDetailsProps extends CommonProps {
20+
interface LockDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
2021
device: LockDevice
2122
}
2223

23-
export function LockDeviceDetails(
24-
props: LockDeviceDetailsProps
25-
): JSX.Element | null {
26-
const {
27-
device,
28-
errorFilter = () => true,
29-
warningFilter = () => true,
30-
disableLockUnlock,
31-
disableCreateAccessCode,
32-
disableEditAccessCode,
33-
disableDeleteAccessCode,
34-
disableResourceIds,
35-
disableClimateSettingSchedules,
36-
onBack,
37-
className,
38-
} = props
39-
24+
export function LockDeviceDetails({
25+
device,
26+
errorFilter,
27+
warningFilter,
28+
disableLockUnlock,
29+
disableCreateAccessCode,
30+
disableEditAccessCode,
31+
disableDeleteAccessCode,
32+
disableResourceIds,
33+
disableConnectedAccountInformation,
34+
disableClimateSettingSchedules,
35+
onBack,
36+
className,
37+
}: LockDeviceDetailsProps): JSX.Element | null {
4038
const [accessCodesOpen, toggleAccessCodesOpen] = useToggle()
4139
const toggleLock = useToggleLock(device)
4240
const { accessCodes } = useAccessCodes({
@@ -63,6 +61,7 @@ export function LockDeviceDetails(
6361
disableEditAccessCode={disableEditAccessCode}
6462
disableDeleteAccessCode={disableDeleteAccessCode}
6563
disableResourceIds={disableResourceIds}
64+
disableConnectedAccountInformation={disableConnectedAccountInformation}
6665
disableClimateSettingSchedules={disableClimateSettingSchedules}
6766
onBack={toggleAccessCodesOpen}
6867
className={className}
@@ -129,7 +128,7 @@ export function LockDeviceDetails(
129128
<span className='seam-value'>{lockStatus}</span>
130129
</div>
131130
<div className='seam-right'>
132-
{disableLockUnlock !== true &&
131+
{!disableLockUnlock &&
133132
device.capabilities_supported.includes('lock') && (
134133
<Button
135134
size='small'
@@ -148,6 +147,13 @@ export function LockDeviceDetails(
148147
}
149148
/>
150149
</div>
150+
<DeviceInfo
151+
device={device}
152+
disableConnectedAccountInformation={
153+
disableConnectedAccountInformation
154+
}
155+
disableResourceIds={disableResourceIds}
156+
/>
151157
</div>
152158
</div>
153159
)

src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ import { useEffect, useState } from 'react'
33
import type { HvacModeSetting, ThermostatDevice } from 'seamapi'
44

55
import { debounce } from 'lib/debounce.js'
6-
import { BeeIcon } from 'lib/icons/Bee.js'
76
import { CheckBlackIcon } from 'lib/icons/CheckBlack.js'
87
import { ChevronWideIcon } from 'lib/icons/ChevronWide.js'
98
import { NestedClimateSettingScheduleTable } from 'lib/seam/components/ClimateSettingScheduleTable/ClimateSettingScheduleTable.js'
10-
import type { CommonProps } from 'lib/seam/components/common-props.js'
11-
import { useConnectedAccount } from 'lib/seam/connected-accounts/use-connected-account.js'
9+
import type { NestedSpecificDeviceDetailsProps } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
10+
import { DeviceInfo } from 'lib/seam/components/DeviceDetails/DeviceInfo.js'
1211
import { useClimateSettingSchedules } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
1312
import { useCoolThermostat } from 'lib/seam/thermostats/use-cool-thermostat.js'
1413
import { useHeatCoolThermostat } from 'lib/seam/thermostats/use-heat-cool-thermostat.js'
@@ -30,27 +29,27 @@ import { FanModeMenu } from 'lib/ui/thermostat/FanModeMenu.js'
3029
import { TemperatureControlGroup } from 'lib/ui/thermostat/TemperatureControlGroup.js'
3130
import { ThermostatCard } from 'lib/ui/thermostat/ThermostatCard.js'
3231

33-
interface ThermostatDeviceDetailsProps extends CommonProps {
32+
interface ThermostatDeviceDetailsProps
33+
extends NestedSpecificDeviceDetailsProps {
3434
device: ThermostatDevice
3535
}
3636

3737
export function ThermostatDeviceDetails({
3838
device,
39-
onBack,
40-
className,
41-
errorFilter = () => true,
42-
warningFilter = () => true,
39+
errorFilter,
40+
warningFilter,
4341
disableLockUnlock,
4442
disableCreateAccessCode,
4543
disableEditAccessCode,
4644
disableDeleteAccessCode,
47-
disableResourceIds = false,
48-
disableClimateSettingSchedules = false,
45+
disableResourceIds,
46+
disableConnectedAccountInformation,
47+
disableClimateSettingSchedules,
48+
onBack,
49+
className,
4950
}: ThermostatDeviceDetailsProps): JSX.Element | null {
5051
const [climateSettingsOpen, setClimateSettingsOpen] = useState(false)
5152

52-
const { connectedAccount } = useConnectedAccount(device.connected_account_id)
53-
5453
const { climateSettingSchedules } = useClimateSettingSchedules({
5554
device_id: device.device_id,
5655
})
@@ -66,6 +65,7 @@ export function ThermostatDeviceDetails({
6665
disableEditAccessCode={disableEditAccessCode}
6766
disableDeleteAccessCode={disableDeleteAccessCode}
6867
disableResourceIds={disableResourceIds}
68+
disableConnectedAccountInformation={disableConnectedAccountInformation}
6969
disableClimateSettingSchedules={disableClimateSettingSchedules}
7070
onBack={() => {
7171
setClimateSettingsOpen(false)
@@ -143,25 +143,13 @@ export function ThermostatDeviceDetails({
143143
<ManualOverrideRow device={device} />
144144
</DetailSection>
145145
)}
146-
147-
<DetailSection label={t.deviceDetails}>
148-
<DetailRow label={t.manufacturer}>
149-
<div className='seam-detail-row-hstack'>
150-
{device.properties.model.manufacturer_display_name}
151-
{device.properties.manufacturer === 'ecobee' && <BeeIcon />}
152-
</div>
153-
</DetailRow>
154-
<DetailRow
155-
label={t.linkedAccount}
156-
sublabel={
157-
connectedAccount?.user_identifier?.email ??
158-
device.connected_account_id
159-
}
160-
/>
161-
{!disableResourceIds && (
162-
<DetailRow label={t.deviceId} sublabel={device.device_id} />
163-
)}
164-
</DetailSection>
146+
<DeviceInfo
147+
device={device}
148+
disableConnectedAccountInformation={
149+
disableConnectedAccountInformation
150+
}
151+
disableResourceIds={disableResourceIds}
152+
/>
165153
</DetailSectionGroup>
166154
</div>
167155
</div>
@@ -455,10 +443,6 @@ const t = {
455443
'When a scheduled climate reaches its end time, the default settings will kick in.',
456444
defaultClimate: 'Default climate',
457445
allowManualOverride: 'Allow manual override',
458-
deviceDetails: 'Device details',
459-
manufacturer: 'Manufacturer',
460-
linkedAccount: 'Linked account',
461-
deviceId: 'Device ID',
462446
none: 'None',
463447
fanModeSuccess: 'Successfully updated fan mode!',
464448
fanModeError: 'Error updating fan mode. Please try again.',

src/lib/seam/components/DeviceTable/DeviceTable.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export function DeviceTable({
6969
disableEditAccessCode = false,
7070
disableDeleteAccessCode = false,
7171
disableResourceIds = false,
72+
disableConnectedAccountInformation = false,
7273
disableClimateSettingSchedules = false,
7374
onBack,
7475
className,
@@ -112,6 +113,7 @@ export function DeviceTable({
112113
disableEditAccessCode={disableEditAccessCode}
113114
disableDeleteAccessCode={disableDeleteAccessCode}
114115
disableResourceIds={disableResourceIds}
116+
disableConnectedAccountInformation={disableConnectedAccountInformation}
115117
disableClimateSettingSchedules={disableClimateSettingSchedules}
116118
onBack={() => {
117119
setSelectedDeviceId(null)

0 commit comments

Comments
 (0)