1- import React from 'react' ;
1+ import React , { useState , useCallback } from 'react' ;
22import Bridge from 'crx-bridge' ;
3+ import { SettingsIcon } from '@primer/octicons-react' ;
4+ import { Dialog } from '@reach/dialog' ;
35
46import inspectedWindow from '../lib/inspectedWindow' ;
57
@@ -9,6 +11,33 @@ import InspectIcon from './InspectIcon';
911import LogIcon from './LogIcon' ;
1012
1113function MenuBar ( { cssPath, suggestion } ) {
14+ const [ settingsModalVisible , setSettingsModalVisible ] = useState ( false ) ;
15+ const [ testIdCustomAttribute , setTestIdCustomAttribute ] = useState (
16+ 'data-testid' ,
17+ ) ;
18+
19+ const onClickSettingsHandler = useCallback (
20+ ( ) => setSettingsModalVisible ( true ) ,
21+ [ setSettingsModalVisible ] ,
22+ ) ;
23+ const onCloseSettingsModalHandler = useCallback (
24+ ( ) => setSettingsModalVisible ( false ) ,
25+ [ setSettingsModalVisible ] ,
26+ ) ;
27+
28+ const onTestIdCustomAttributeChangeHandler = useCallback (
29+ ( event ) => setTestIdCustomAttribute ( event . target . value ) ,
30+ [ setTestIdCustomAttribute ] ,
31+ ) ;
32+
33+ const onClickSettingsModalOkButtonHandler = useCallback ( ( ) => {
34+ Bridge . sendMessage (
35+ 'SET_CUSTOM_TEST_ID' ,
36+ { customTestIdAttribute : testIdCustomAttribute } ,
37+ 'content-script' ,
38+ ) ;
39+ onCloseSettingsModalHandler ( ) ;
40+ } , [ testIdCustomAttribute , onCloseSettingsModalHandler ] ) ;
1241 return (
1342 < div className = "h-8 p-2 border-b space-x-4 flex" >
1443 < button
@@ -33,6 +62,31 @@ function MenuBar({ cssPath, suggestion }) {
3362
3463 < div className = "flex-auto" />
3564
65+ < button
66+ className = "focus:outline-none"
67+ title = "View settings"
68+ onClick = { onClickSettingsHandler }
69+ >
70+ < SettingsIcon />
71+ </ button >
72+ < Dialog
73+ isOpen = { settingsModalVisible }
74+ onDismiss = { onCloseSettingsModalHandler }
75+ aria-label = "settings-modal"
76+ >
77+ < input
78+ type = "text"
79+ value = { testIdCustomAttribute }
80+ onChange = { onTestIdCustomAttributeChangeHandler }
81+ />
82+ < button
83+ onClick = { onClickSettingsModalOkButtonHandler }
84+ disabled = { ! testIdCustomAttribute }
85+ >
86+ < span > Ok</ span >
87+ </ button >
88+ </ Dialog >
89+
3690 < button
3791 className = "focus:outline-none"
3892 title = "Inspect the matching DOM element"
0 commit comments