Skip to content

Commit 06693f0

Browse files
committed
fix(dev-console): fix c.endpoints[r] is undefined crash #2268
1 parent 9fd6977 commit 06693f0

File tree

1 file changed

+63
-58
lines changed

1 file changed

+63
-58
lines changed

src/components/device-page/AttributeEditor.1.tsx

Lines changed: 63 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -114,66 +114,71 @@ export class AttributeEditor extends React.Component<AttributeEditorProps, Attri
114114
const endpoints = getEndpoints(device);
115115
const logsFilterFn = (l: LogMessage) =>
116116
logStartingStrings.some((startString) => l.message.startsWith(startString));
117-
return (
118-
<>
119-
<div className="mb-3 row">
120-
<div className="col-6 col-sm-3">
121-
<EndpointPicker
122-
data-testid="endpoint-picker"
123-
label={t('zigbee:endpoint')}
124-
values={endpoints}
125-
value={endpoint as Endpoint}
126-
onChange={this.onEndpointChange}
127-
/>
128-
</div>
129-
<div className="col-6 col-sm-3">
130-
<ClusterPicker
131-
data-testid="cluster-picker"
132-
label={t('cluster')}
133-
pickerType={PickerType.SINGLE}
134-
clusters={device.endpoints[endpoint].clusters.input}
135-
value={cluster}
136-
onChange={this.onClusterChange}
137-
/>
138-
</div>
139117

140-
<div className="col-6 col-sm-3">
141-
<AttributePicker
142-
data-testid="attribute-picker"
143-
label={t('attribute')}
144-
value={''}
145-
cluster={cluster}
146-
device={device}
147-
clusters={clusters}
148-
onChange={this.onAttributeSelect}
149-
/>
118+
if (!endpoint) {
119+
return <>No endpoints</>;
120+
} else {
121+
return (
122+
<>
123+
<div className="mb-3 row">
124+
<div className="col-6 col-sm-3">
125+
<EndpointPicker
126+
data-testid="endpoint-picker"
127+
label={t('zigbee:endpoint')}
128+
values={endpoints}
129+
value={endpoint as Endpoint}
130+
onChange={this.onEndpointChange}
131+
/>
132+
</div>
133+
<div className="col-6 col-sm-3">
134+
<ClusterPicker
135+
data-testid="cluster-picker"
136+
label={t('cluster')}
137+
pickerType={PickerType.SINGLE}
138+
clusters={device.endpoints[endpoint].clusters.input}
139+
value={cluster}
140+
onChange={this.onClusterChange}
141+
/>
142+
</div>
143+
144+
<div className="col-6 col-sm-3">
145+
<AttributePicker
146+
data-testid="attribute-picker"
147+
label={t('attribute')}
148+
value={''}
149+
cluster={cluster}
150+
device={device}
151+
clusters={clusters}
152+
onChange={this.onAttributeSelect}
153+
/>
154+
</div>
150155
</div>
151-
</div>
152-
<div className="mb-3 row" data-testid="selected-attribute">
153-
{this.renderSelectedAttribute()}
154-
</div>
155-
<div className="mb-3 row">
156-
<div className="btn-group col col-3" role="group">
157-
<Button<void>
158-
disabled={noAttributesSelected || noSelectedCluster}
159-
className="btn btn-success me-2"
160-
data-testid="read-attribute"
161-
onClick={this.onReadClick}
162-
>
163-
{t('read')}
164-
</Button>
165-
<Button<void>
166-
disabled={noAttributesSelected || noSelectedCluster}
167-
className="btn btn-danger"
168-
data-testid="write-attribute"
169-
onClick={this.onWriteClick}
170-
>
171-
{t('write')}
172-
</Button>
156+
<div className="mb-3 row" data-testid="selected-attribute">
157+
{this.renderSelectedAttribute()}
173158
</div>
174-
</div>
175-
<LastLogResult logs={this.props.logs} filterFn={logsFilterFn} />
176-
</>
177-
);
159+
<div className="mb-3 row">
160+
<div className="btn-group col col-3" role="group">
161+
<Button<void>
162+
disabled={noAttributesSelected || noSelectedCluster}
163+
className="btn btn-success me-2"
164+
data-testid="read-attribute"
165+
onClick={this.onReadClick}
166+
>
167+
{t('read')}
168+
</Button>
169+
<Button<void>
170+
disabled={noAttributesSelected || noSelectedCluster}
171+
className="btn btn-danger"
172+
data-testid="write-attribute"
173+
onClick={this.onWriteClick}
174+
>
175+
{t('write')}
176+
</Button>
177+
</div>
178+
</div>
179+
<LastLogResult logs={this.props.logs} filterFn={logsFilterFn} />
180+
</>
181+
);
182+
}
178183
}
179184
}

0 commit comments

Comments
 (0)