Skip to content

Commit

Permalink
feat(rule): fuzzy filter
Browse files Browse the repository at this point in the history
  • Loading branch information
kunish committed Sep 26, 2023
1 parent a68b950 commit f53a1a4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 16 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"ky": "^1.0.1",
"lint-staged": "^14.0.1",
"lodash": "^4.17.21",
"match-sorter": "^6.3.1",
"prettier": "^3.0.3",
"prettier-plugin-organize-imports": "^3.2.3",
"prettier-plugin-tailwindcss": "^0.5.4",
Expand Down
10 changes: 10 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 12 additions & 16 deletions src/pages/Rules.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { IconReload } from '@tabler/icons-solidjs'
import { createVirtualizer } from '@tanstack/solid-virtual'
import { matchSorter } from 'match-sorter'
import { For, Show, createMemo, createSignal, onMount } from 'solid-js'
import { twMerge } from 'tailwind-merge'
import { Button } from '~/components'
import { useStringBooleanMap } from '~/helpers'
import { useI18n } from '~/i18n'
import { formatTimeFromNow, useRules } from '~/signals'
import { Rule, RuleProvider } from '~/types'

enum ActiveTab {
ruleProviders = 'ruleProviders',
Expand Down Expand Up @@ -60,25 +62,19 @@ export default () => {
const [globalFilter, setGlobalFilter] = createSignal('')

const filteredRules = createMemo(() =>
rules().filter((rule) => {
if (!globalFilter()) {
return true
}

return rule.payload.toLowerCase().includes(globalFilter().toLowerCase())
}),
globalFilter()
? matchSorter(rules(), globalFilter(), {
keys: ['type', 'payload', 'type'] as (keyof Rule)[],
})
: rules(),
)

const filteredRuleProviders = createMemo(() =>
ruleProviders().filter((ruleProvider) => {
if (!globalFilter()) {
return true
}

return ruleProvider.name
.toLowerCase()
.includes(globalFilter().toLowerCase())
}),
globalFilter()
? matchSorter(ruleProviders(), globalFilter(), {
keys: ['name', 'vehicleType', 'behavior'] as (keyof RuleProvider)[],
})
: ruleProviders(),
)

let scrollElementRef: HTMLDivElement | undefined
Expand Down

0 comments on commit f53a1a4

Please sign in to comment.