Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 346ccbb

Browse files
committedFeb 12, 2025··
feat: add sort filter
1 parent a99a269 commit 346ccbb

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed
 

‎website/src/catalog/RuleList.vue

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<script setup lang="ts">
22
import NumberFlow, { continuous } from '@number-flow/vue'
3-
import { type Filter, getRuleMetaData } from './data'
4-
import { computed, type PropType } from 'vue'
3+
import { type Filter, getRuleMetaData } from './data.js'
4+
import { computed, ref, type PropType } from 'vue'
55
import RuleItem from './RuleItem.vue'
66
import IconDown from '../components/utils/IconDown.vue'
77
8+
const sortBy = ref('name')
89
const props = defineProps({
910
filter: {
1011
type: Object as PropType<Filter>,
@@ -15,7 +16,7 @@ const emit = defineEmits<{
1516
reset: []
1617
}>()
1718
18-
const ruleMetaData = computed(() => getRuleMetaData(props.filter))
19+
const ruleMetaData = computed(() => getRuleMetaData(props.filter, sortBy.value))
1920
</script>
2021

2122
<template>
@@ -30,9 +31,9 @@ const ruleMetaData = computed(() => getRuleMetaData(props.filter))
3031
/>
3132
<label class="sort-by">
3233
Sort by:
33-
<select>
34-
<option>Name</option>
35-
<option>Lang</option>
34+
<select v-model="sortBy">
35+
<option value="name">Name</option>
36+
<option value="lang">Lang</option>
3637
</select>
3738
<IconDown/>
3839
</label>

‎website/src/catalog/data.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,23 @@ export function intersect(a: string[], b: string[]) {
55
return a.some(x => b.includes(x))
66
}
77

8-
export function getRuleMetaData(filter: Filter) {
8+
export function getRuleMetaData(filter: Filter, sortBy = 'name') {
99
const {
1010
selectedLanguages,
11+
selectedRules,
1112
} = filter
1213
return allRules.filter(meta => {
1314
const langFilter = !selectedLanguages.length || selectedLanguages.includes(meta.language)
14-
const ruleFilter = !filter.selectedRules.length || intersect(filter.selectedRules, meta.rules)
15+
const ruleFilter = !selectedRules.length || intersect(selectedRules, meta.rules)
1516
const featureFilter = !filter.selectedFeatures.length || intersect(filter.selectedFeatures, meta.features)
1617
const typeFilter = !filter.selectedTypes.length || filter.selectedTypes.includes(meta.type)
1718
return langFilter && ruleFilter && featureFilter && typeFilter
19+
}).toSorted((a, b) => {
20+
if (sortBy === 'name') {
21+
return a.name.localeCompare(b.name)
22+
} else {
23+
return a.language.localeCompare(b.language)
24+
}
1825
})
1926
}
2027

0 commit comments

Comments
 (0)
Please sign in to comment.