Skip to content

Commit 118a37f

Browse files
ericnogralesAkryum
authored andcommitted
feat: RegEx Filter in Events Tab (vuejs#838)
* applies similar RegExp lookup to events as we do in Vuex * instantiates regex once before .filter loop * ESLint issues * test(e2e): search event RegEx
1 parent 6338a63 commit 118a37f

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

cypress/integration/events-tab.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ suite('events tab', () => {
2828
cy.get('.history .entry[data-active="true"]').should('have.length', 3)
2929
cy.get('.left .search input').clear().type('<eventchild1>')
3030
cy.get('.history .entry[data-active="true"]').should('have.length', 1)
31+
cy.get('.left .search input').clear().type('/^event$/')
32+
cy.get('.history .entry[data-active="true"]').should('have.length', 1)
3133
cy.get('.left .search input').clear()
3234
cy.get('.button.reset').click()
3335
cy.get('.history .entry[data-active="true"]').should('have.length', 0)

src/devtools/views/events/module.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import SharedData from 'src/shared-data'
44

55
const ENABLED_KEY = 'EVENTS_ENABLED'
66
const enabled = storage.get(ENABLED_KEY)
7+
const REGEX_RE = /^\/(.*?)\/(\w*)/
78

89
const state = {
910
enabled: enabled == null ? true : enabled,
@@ -42,20 +43,41 @@ const mutations = {
4243
}
4344
}
4445

46+
const matchingEvent = ({ searchText, searchComponent, regEx }) => e => {
47+
const classifyComponents = SharedData.classifyComponents
48+
let searchTerm = (searchComponent
49+
? (classifyComponents
50+
? classify(e.instanceName) : e.instanceName)
51+
: e.eventName)
52+
53+
if (regEx) {
54+
try {
55+
return regEx.test(searchTerm)
56+
} catch (e) {
57+
return searchTerm.toLowerCase().indexOf(searchText) > -1
58+
}
59+
}
60+
61+
return searchTerm.toLowerCase().indexOf(searchText) > -1
62+
}
63+
4564
const getters = {
4665
activeEvent: (state, getters) => {
4766
return getters.filteredEvents[state.inspectedIndex]
4867
},
4968
filteredEvents: (state, getters, rootState) => {
50-
const classifyComponents = SharedData.classifyComponents
5169
let searchText = state.filter.toLowerCase()
5270
const searchComponent = /<|>/g.test(searchText)
5371
if (searchComponent) {
5472
searchText = searchText.replace(/<|>/g, '')
5573
}
56-
return state.events.filter(
57-
e => (searchComponent ? (classifyComponents ? classify(e.instanceName) : e.instanceName) : e.eventName).toLowerCase().indexOf(searchText) > -1
58-
)
74+
const regExParts = state.filter.match(REGEX_RE)
75+
let regEx
76+
if (regExParts) {
77+
regEx = new RegExp(regExParts[1], regExParts[2])
78+
}
79+
return state.events
80+
.filter(matchingEvent({ searchText, searchComponent, regEx }))
5981
}
6082
}
6183

0 commit comments

Comments
 (0)