@@ -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+
4463interface IEventTypeProps extends Pick < IDevtoolsProps , "onBack" > {
4564 eventType : string ;
4665}
4766
4867const 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) => {
95104export 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