Skip to content

Commit 3ef72ef

Browse files
feat: extract common rule filtering out
1 parent a07ba81 commit 3ef72ef

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

website/src/catalog/RuleFilter.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ watchEffect(() => {
3535
</div>
3636
</details>
3737

38-
<details class="filter-group">
38+
<details class="filter-group" open>
3939
<summary>📏Used Rule</summary>
4040
<div class="rule-group">
4141
<div v-for="rules, type in ruleFilters">
@@ -50,7 +50,7 @@ watchEffect(() => {
5050
</div>
5151
</details>
5252

53-
<details class="filter-group">
53+
<details class="filter-group" open>
5454
<summary>💡More Features</summary>
5555
<div class="rule-group">
5656
<div>

website/src/catalog/RuleItem.vue

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,36 @@ const { meta, filter } = defineProps({
1414
required: true,
1515
}
1616
})
17-
const displayRuleCount = computed(() => {
18-
const maxRule = meta.features.length > 0 ? 2 : 5
19-
return Math.min(meta.rules.length, maxRule)
20-
})
21-
const displayedRules = computed(() => {
22-
// display selected rules first
17+
18+
// display selected options first
19+
function sortedOptions(options: string[], selected: string[]) {
2320
const result = []
2421
const notSelected = []
25-
for (const rule of meta.rules) {
26-
if (filter.selectedRuleFilters.includes(rule)) {
27-
result.push(rule)
22+
for (const option of options) {
23+
if (selected.includes(option)) {
24+
result.push(option)
2825
} else {
29-
notSelected.push(rule)
26+
notSelected.push(option)
3027
}
3128
}
32-
return result.concat(notSelected).slice(0, displayRuleCount.value)
29+
return result.concat(notSelected)
30+
}
31+
32+
const displayRuleCount = computed(() => {
33+
const maxRule = meta.features.length > 0 ? 2 : 5
34+
return Math.min(meta.rules.length, maxRule)
35+
})
36+
const displayedRules = computed(() => {
37+
const result = sortedOptions(meta.rules, filter.selectedRuleFilters)
38+
return result.slice(0, displayRuleCount.value)
3339
})
3440
const moreRules = computed(() => meta.rules.length - displayRuleCount.value)
35-
const moreFeatures = computed(() => Math.max(meta.features.length - 2, 0))
41+
42+
const displayFeatures = computed(() => {
43+
const result = sortedOptions(meta.features, filter.selectedFeatures)
44+
return result.slice(0, 2)
45+
})
46+
const moreFeatures = computed(() => Math.max(displayFeatures.value.length - 2, 0))
3647
</script>
3748

3849
<template>
@@ -52,7 +63,9 @@ const moreFeatures = computed(() => Math.max(meta.features.length - 2, 0))
5263
</div>
5364
<div class="rule-details">
5465
<div class="rule-badges" >
55-
<Badge v-if="meta.type === 'Pattern'" type="info" text="Simple Pattern Example" />
66+
<template v-if="meta.type === 'Pattern'">
67+
<Badge type="info" text="Simple Pattern Example" />
68+
</template>
5669
<template v-else>
5770
<span title="Used Rules">📏</span>
5871
<span class="emoji-offset"/>
@@ -69,10 +82,10 @@ const moreFeatures = computed(() => Math.max(meta.features.length - 2, 0))
6982
/>
7083
</template>
7184
</div>
72-
<div class="rule-badges" v-if="meta.features.length > 0">
85+
<div class="rule-badges" v-if="displayFeatures.length > 0">
7386
<span title="Used Features">💡</span>
7487
<Option
75-
v-for="feature in meta.features"
88+
v-for="feature in displayFeatures"
7689
:key="feature"
7790
:text="feature"
7891
:highlight="filter.selectedFeatures.includes(feature)"

website/src/catalog/data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ export function getRuleMetaData(filter: Filter) {
88
return allRules.filter(meta => {
99
const langFilter = !selectedLanguages.length || selectedLanguages.includes(meta.language)
1010
const ruleFilter = !filter.selectedRuleFilters.length || filter.selectedRuleFilters.some(r => meta.rules.includes(r))
11-
return langFilter && ruleFilter
11+
const featureFilter = !filter.selectedFeatures.length || filter.selectedFeatures.some(f => meta.features.includes(f))
12+
const typeFilter = !filter.selectedTypes.length || filter.selectedTypes.includes(meta.type)
13+
return langFilter && ruleFilter && featureFilter && typeFilter
1214
})
1315
}
1416

@@ -61,7 +63,7 @@ export const ruleFilters = {
6163
}
6264

6365
export const features = [
64-
'rewrite',
66+
'rewriters',
6567
'transform',
6668
'constraints',
6769
'utils'

0 commit comments

Comments
 (0)