Skip to content

Commit

Permalink
Reuse empty string & space string logic for event types in devtools (#…
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
t3chguy committed Aug 25, 2022
1 parent 4c94155 commit 6407cd4
Showing 1 changed file with 37 additions and 38 deletions.
75 changes: 37 additions & 38 deletions src/components/views/dialogs/devtools/RoomState.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,52 +41,61 @@ export const StateEventEditor = ({ mxEvent, onBack }: IEditorProps) => {
return <EventEditor fieldDefs={fields} defaultContent={defaultContent} onSend={onSend} onBack={onBack} />;
};

interface StateEventButtonProps {
label: string;
onClick(): void;
}

const StateEventButton = ({ label, onClick }: StateEventButtonProps) => {
const trimmed = label.trim();

return <button
className={classNames("mx_DevTools_button", {
mx_DevTools_RoomStateExplorer_button_hasSpaces: trimmed.length !== label.length,
mx_DevTools_RoomStateExplorer_button_emptyString: !trimmed,
})}
onClick={onClick}
>
{ trimmed ? label : _t("<%(count)s spaces>", { count: label.length }) }
</button>;
};

interface IEventTypeProps extends Pick<IDevtoolsProps, "onBack"> {
eventType: string;
}

const RoomStateExplorerEventType = ({ eventType, onBack }: IEventTypeProps) => {
const context = useContext(DevtoolsContext);
const [query, setQuery] = useState("");
const [event, setEvent] = useState<MatrixEvent>(null);
const [event, setEvent] = useState<MatrixEvent | null>(null);

const events = context.room.currentState.events.get(eventType);
const events = context.room.currentState.events.get(eventType)!;

useEffect(() => {
if (events.size === 1 && events.has("")) {
setEvent(events.get(""));
setEvent(events.get("")!);
} else {
setEvent(null);
}
}, [events]);

if (event) {
const onBack = () => {
setEvent(null);
const _onBack = () => {
if (events?.size === 1 && events.has("")) {
onBack();
} else {
setEvent(null);
}
};
return <EventViewer mxEvent={event} onBack={onBack} Editor={StateEventEditor} />;
return <EventViewer mxEvent={event} onBack={_onBack} Editor={StateEventEditor} />;
}

return <BaseTool onBack={onBack}>
<FilteredList query={query} onChange={setQuery}>
{
Array.from(events.entries()).map(([stateKey, ev]) => {
const trimmed = stateKey.trim();
const onClick = () => {
setEvent(ev);
};

return <button
className={classNames("mx_DevTools_button", {
mx_DevTools_RoomStateExplorer_button_hasSpaces: trimmed.length !== stateKey.length,
mx_DevTools_RoomStateExplorer_button_emptyString: !trimmed,
})}
key={stateKey}
onClick={onClick}
>
{ trimmed ? stateKey : _t("<%(count)s spaces>", { count: stateKey.length }) }
</button>;
})
Array.from(events.entries()).map(([stateKey, ev]) => (
<StateEventButton key={stateKey} label={stateKey} onClick={() => setEvent(ev)} />
))
}
</FilteredList>
</BaseTool>;
Expand All @@ -95,11 +104,11 @@ const RoomStateExplorerEventType = ({ eventType, onBack }: IEventTypeProps) => {
export const RoomStateExplorer = ({ onBack, setTool }: IDevtoolsProps) => {
const context = useContext(DevtoolsContext);
const [query, setQuery] = useState("");
const [eventType, setEventType] = useState<string>(null);
const [eventType, setEventType] = useState<string | null>(null);

const events = context.room.currentState.events;

if (eventType) {
if (eventType !== null) {
const onBack = () => {
setEventType(null);
};
Expand All @@ -113,19 +122,9 @@ export const RoomStateExplorer = ({ onBack, setTool }: IDevtoolsProps) => {
return <BaseTool onBack={onBack} actionLabel={_t("Send custom state event")} onAction={onAction}>
<FilteredList query={query} onChange={setQuery}>
{
Array.from(events.keys()).map((eventType) => {
const onClick = () => {
setEventType(eventType);
};

return <button
className="mx_DevTools_button"
key={eventType}
onClick={onClick}
>
{ eventType }
</button>;
})
Array.from(events.keys()).map((eventType) => (
<StateEventButton key={eventType} label={eventType} onClick={() => setEventType(eventType)} />
))
}
</FilteredList>
</BaseTool>;
Expand Down

0 comments on commit 6407cd4

Please sign in to comment.