Skip to content

Commit b5f021b

Browse files
authored
feat: add support for custom test-id attributes (#236)
1 parent 933e59c commit b5f021b

File tree

17 files changed

+132
-101
lines changed

17 files changed

+132
-101
lines changed

devtools/src/content-script/contentScript.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ function init() {
4646
return { result };
4747
});
4848

49-
Bridge.onMessage('SET_CUSTOM_TEST_ID', function ({ data }) {
50-
parser.configure({ testIdAttribute: data.customTestIdAttribute });
49+
Bridge.onMessage('SET_SETTINGS', function ({ data }) {
50+
parser.configure(data);
5151
});
5252

5353
// when the selected element is changed by using the element inspector,
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React from 'react';
2+
3+
function SettingsIcon() {
4+
return (
5+
<svg width="16" height="16" viewBox="0 0 24 24">
6+
<path
7+
fill="currentColor"
8+
d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"
9+
></path>
10+
</svg>
11+
);
12+
}
13+
14+
export default SettingsIcon;

devtools/src/devtools/components/MenuBar.js

Lines changed: 26 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,19 @@
1-
import React, { useState, useCallback } from 'react';
1+
import React from 'react';
22
import Bridge from 'crx-bridge';
3-
import { SettingsIcon } from '@primer/octicons-react';
4-
import { Dialog } from '@reach/dialog';
53

64
import inspectedWindow from '../lib/inspectedWindow';
75

8-
import SelectIcon from './SelectIcon';
9-
import LayersIcon from './LayersIcon';
10-
import InspectIcon from './InspectIcon';
11-
import LogIcon from './LogIcon';
6+
// we don't use octicons here, as that style doesn't really fit in devtools
7+
import SelectIcon from './Icons/SelectIcon';
8+
import LayersIcon from './Icons/LayersIcon';
9+
import InspectIcon from './Icons/InspectIcon';
10+
import SettingsIcon from './Icons/SettingsIcon';
11+
import LogIcon from './Icons/LogIcon';
12+
import { Menu, MenuButton, MenuPopover } from '../../../../src/components/Menu';
13+
import Settings from '../../../../src/components/Settings';
14+
import { getSettings, setSettings } from '../lib/settings';
1215

1316
function 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]);
4117
return (
4218
<div className="h-8 p-2 border-b space-x-4 flex">
4319
<button
@@ -62,30 +38,22 @@ function MenuBar({ cssPath, suggestion }) {
6238

6339
<div className="flex-auto" />
6440

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>
41+
<Menu>
42+
<MenuButton>
43+
<SettingsIcon />
44+
</MenuButton>
45+
46+
<MenuPopover>
47+
<Settings
48+
dispatch={({ type, ...data }) => {
49+
if (type === 'SET_SETTINGS') {
50+
setSettings(data);
51+
}
52+
}}
53+
settings={getSettings()}
54+
/>
55+
</MenuPopover>
56+
</Menu>
8957

9058
<button
9159
className="focus:outline-none"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import Bridge from 'crx-bridge';
2+
3+
const localSettings = JSON.parse(localStorage.getItem('playground_settings'));
4+
let _settings = Object.assign(
5+
{
6+
testIdAttribute: 'data-testid',
7+
},
8+
localSettings,
9+
);
10+
11+
Bridge.sendMessage('SET_SETTINGS', _settings, 'content-script');
12+
13+
export function getSettings() {
14+
return _settings;
15+
}
16+
17+
export function setSettings(settings) {
18+
Object.assign(_settings, settings);
19+
Bridge.sendMessage('SET_SETTINGS', _settings, 'content-script');
20+
localStorage.setItem('playground_settings', JSON.stringify(_settings));
21+
}

devtools/src/devtools/panel.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<head>
44
<meta charset="utf8" />
55
<link rel="stylesheet" href="../../../src/styles/index.css" />
6-
<link rel="stylesheet" type="text/css" href="../../../node_modules/@reach/dialog/styles.css" />
76
</head>
87
<body>
98
<div id="app" />

devtools/src/devtools/panel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'regenerator-runtime/runtime';
2-
import React, { useState, useEffect, useRef, useCallback } from 'react';
2+
import React, { useState, useCallback, useEffect, useRef } from 'react';
33
import ReactDOM from 'react-dom';
44
import Bridge from 'crx-bridge';
55
import Query from '../../../src/components/Query';

0 commit comments

Comments
 (0)