Skip to content

Commit

Permalink
feat: RegEx Filter in Events Tab (vuejs#838)
Browse files Browse the repository at this point in the history
* applies similar RegExp lookup to events as we do in Vuex

* instantiates regex once before .filter loop

* ESLint issues

* test(e2e): search event RegEx
  • Loading branch information
ericnograles authored and iksim committed Apr 18, 2019
1 parent ea8a00e commit afe86a2
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
2 changes: 2 additions & 0 deletions cypress/integration/events-tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ suite('events tab', () => {
cy.get('.history .entry[data-active="true"]').should('have.length', 3)
cy.get('.left .search input').clear().type('<eventchild1>')
cy.get('.history .entry[data-active="true"]').should('have.length', 1)
cy.get('.left .search input').clear().type('/^event$/')
cy.get('.history .entry[data-active="true"]').should('have.length', 1)
cy.get('.left .search input').clear()
cy.get('.button.reset').click()
cy.get('.history .entry[data-active="true"]').should('have.length', 0)
Expand Down
30 changes: 26 additions & 4 deletions src/devtools/views/events/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import SharedData from 'src/shared-data'

const ENABLED_KEY = 'EVENTS_ENABLED'
const enabled = storage.get(ENABLED_KEY)
const REGEX_RE = /^\/(.*?)\/(\w*)/

const state = {
enabled: enabled == null ? true : enabled,
Expand Down Expand Up @@ -42,20 +43,41 @@ const mutations = {
}
}

const matchingEvent = ({ searchText, searchComponent, regEx }) => e => {
const classifyComponents = SharedData.classifyComponents
let searchTerm = (searchComponent
? (classifyComponents
? classify(e.instanceName) : e.instanceName)
: e.eventName)

if (regEx) {
try {
return regEx.test(searchTerm)
} catch (e) {
return searchTerm.toLowerCase().indexOf(searchText) > -1
}
}

return searchTerm.toLowerCase().indexOf(searchText) > -1
}

const getters = {
activeEvent: (state, getters) => {
return getters.filteredEvents[state.inspectedIndex]
},
filteredEvents: (state, getters, rootState) => {
const classifyComponents = SharedData.classifyComponents
let searchText = state.filter.toLowerCase()
const searchComponent = /<|>/g.test(searchText)
if (searchComponent) {
searchText = searchText.replace(/<|>/g, '')
}
return state.events.filter(
e => (searchComponent ? (classifyComponents ? classify(e.instanceName) : e.instanceName) : e.eventName).toLowerCase().indexOf(searchText) > -1
)
const regExParts = state.filter.match(REGEX_RE)
let regEx
if (regExParts) {
regEx = new RegExp(regExParts[1], regExParts[2])
}
return state.events
.filter(matchingEvent({ searchText, searchComponent, regEx }))
}
}

Expand Down

0 comments on commit afe86a2

Please sign in to comment.