Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 6407cd4

Browse files
authored
Reuse empty string & space string logic for event types in devtools (#9218)
* Reuse empty string & space string logic for event types in devtools * Fix edge case behaviours * Make tsc quality higher * Make remainder of tsc happy
1 parent 4c94155 commit 6407cd4

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

src/components/views/dialogs/devtools/RoomState.tsx

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -41,52 +41,61 @@ export const StateEventEditor = ({ mxEvent, onBack }: IEditorProps) => {
4141
return <EventEditor fieldDefs={fields} defaultContent={defaultContent} onSend={onSend} onBack={onBack} />;
4242
};
4343

44+
interface StateEventButtonProps {
45+
label: string;
46+
onClick(): void;
47+
}
48+
49+
const StateEventButton = ({ label, onClick }: StateEventButtonProps) => {
50+
const trimmed = label.trim();
51+
52+
return <button
53+
className={classNames("mx_DevTools_button", {
54+
mx_DevTools_RoomStateExplorer_button_hasSpaces: trimmed.length !== label.length,
55+
mx_DevTools_RoomStateExplorer_button_emptyString: !trimmed,
56+
})}
57+
onClick={onClick}
58+
>
59+
{ trimmed ? label : _t("<%(count)s spaces>", { count: label.length }) }
60+
</button>;
61+
};
62+
4463
interface IEventTypeProps extends Pick<IDevtoolsProps, "onBack"> {
4564
eventType: string;
4665
}
4766

4867
const RoomStateExplorerEventType = ({ eventType, onBack }: IEventTypeProps) => {
4968
const context = useContext(DevtoolsContext);
5069
const [query, setQuery] = useState("");
51-
const [event, setEvent] = useState<MatrixEvent>(null);
70+
const [event, setEvent] = useState<MatrixEvent | null>(null);
5271

53-
const events = context.room.currentState.events.get(eventType);
72+
const events = context.room.currentState.events.get(eventType)!;
5473

5574
useEffect(() => {
5675
if (events.size === 1 && events.has("")) {
57-
setEvent(events.get(""));
76+
setEvent(events.get("")!);
5877
} else {
5978
setEvent(null);
6079
}
6180
}, [events]);
6281

6382
if (event) {
64-
const onBack = () => {
65-
setEvent(null);
83+
const _onBack = () => {
84+
if (events?.size === 1 && events.has("")) {
85+
onBack();
86+
} else {
87+
setEvent(null);
88+
}
6689
};
67-
return <EventViewer mxEvent={event} onBack={onBack} Editor={StateEventEditor} />;
90+
return <EventViewer mxEvent={event} onBack={_onBack} Editor={StateEventEditor} />;
6891
}
6992

7093
return <BaseTool onBack={onBack}>
7194
<FilteredList query={query} onChange={setQuery}>
7295
{
73-
Array.from(events.entries()).map(([stateKey, ev]) => {
74-
const trimmed = stateKey.trim();
75-
const onClick = () => {
76-
setEvent(ev);
77-
};
78-
79-
return <button
80-
className={classNames("mx_DevTools_button", {
81-
mx_DevTools_RoomStateExplorer_button_hasSpaces: trimmed.length !== stateKey.length,
82-
mx_DevTools_RoomStateExplorer_button_emptyString: !trimmed,
83-
})}
84-
key={stateKey}
85-
onClick={onClick}
86-
>
87-
{ trimmed ? stateKey : _t("<%(count)s spaces>", { count: stateKey.length }) }
88-
</button>;
89-
})
96+
Array.from(events.entries()).map(([stateKey, ev]) => (
97+
<StateEventButton key={stateKey} label={stateKey} onClick={() => setEvent(ev)} />
98+
))
9099
}
91100
</FilteredList>
92101
</BaseTool>;
@@ -95,11 +104,11 @@ const RoomStateExplorerEventType = ({ eventType, onBack }: IEventTypeProps) => {
95104
export const RoomStateExplorer = ({ onBack, setTool }: IDevtoolsProps) => {
96105
const context = useContext(DevtoolsContext);
97106
const [query, setQuery] = useState("");
98-
const [eventType, setEventType] = useState<string>(null);
107+
const [eventType, setEventType] = useState<string | null>(null);
99108

100109
const events = context.room.currentState.events;
101110

102-
if (eventType) {
111+
if (eventType !== null) {
103112
const onBack = () => {
104113
setEventType(null);
105114
};
@@ -113,19 +122,9 @@ export const RoomStateExplorer = ({ onBack, setTool }: IDevtoolsProps) => {
113122
return <BaseTool onBack={onBack} actionLabel={_t("Send custom state event")} onAction={onAction}>
114123
<FilteredList query={query} onChange={setQuery}>
115124
{
116-
Array.from(events.keys()).map((eventType) => {
117-
const onClick = () => {
118-
setEventType(eventType);
119-
};
120-
121-
return <button
122-
className="mx_DevTools_button"
123-
key={eventType}
124-
onClick={onClick}
125-
>
126-
{ eventType }
127-
</button>;
128-
})
125+
Array.from(events.keys()).map((eventType) => (
126+
<StateEventButton key={eventType} label={eventType} onClick={() => setEventType(eventType)} />
127+
))
129128
}
130129
</FilteredList>
131130
</BaseTool>;

0 commit comments

Comments
 (0)