Tweak the filter tokenizer

This commit is contained in:
iamBadgers
2024-06-11 16:46:12 -07:00
parent 976e12d91a
commit 26b4c5c4e9
3 changed files with 11 additions and 15 deletions

View File

@@ -52,7 +52,7 @@ export class OrderByParser {
const openGroupRegex = /\(/ const openGroupRegex = /\(/
const closeGroupRegex = /\)/ const closeGroupRegex = /\)/
const conjunctinoRegex = /AND|OR/ const conjunctinoRegex = /AND|OR/
const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z'"\d]+)/ const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([\d]+)/
const stringEqualityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?\"([a-zA-Z'"\d\s]*)\"/ const stringEqualityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?\"([a-zA-Z'"\d\s]*)\"/
const spacerRegex = /\s/ const spacerRegex = /\s/
@@ -86,17 +86,18 @@ export class FilterParser {
ctx.accept('conjunction', m[0]) ctx.accept('conjunction', m[0])
}) })
this.lexer.rule(stringEqualityRegex, (ctx, m) => {
ctx.accept('column', m[1])
ctx.accept('opperator', m[2])
ctx.accept('value', m[3])
})
this.lexer.rule(equalityRegex, (ctx, m) => { this.lexer.rule(equalityRegex, (ctx, m) => {
ctx.accept('column', m[1]) ctx.accept('column', m[1])
ctx.accept('opperator', m[2]) ctx.accept('opperator', m[2])
ctx.accept('value', m[3]) ctx.accept('value', m[3])
}) })
this.lexer.rule(stringEqualityRegex, (ctx, m) => {
ctx.accept('column', m[1])
ctx.accept('opperator', m[2])
ctx.accept('value', m[3])
})
this.lexer.rule(spacerRegex, (ctx, m) => { this.lexer.rule(spacerRegex, (ctx, m) => {
ctx.ignore() ctx.ignore()

View File

@@ -18,7 +18,7 @@
<a v-bind:href="`/#/characters/${item.id}`">{{ item.id }}</a> <a v-bind:href="`/#/characters/${item.id}`">{{ item.id }}</a>
</template> </template>
<template v-slot:item.characterName="{ item }"> <template v-slot:item.characterName="{ item }">
<a v-bind:href="`/#/characters/${item.characterName}`">{{ item.characterName }}</a> <a v-bind:href="`/#/characters/${item.id}`">{{ item.characterName }}</a>
</template> </template>
<template v-slot:item.creationDate="{ item }"> <template v-slot:item.creationDate="{ item }">
{{ new Date(item.creationDate * 1000).toISOString().split('T')[0] }} {{ new Date(item.creationDate * 1000).toISOString().split('T')[0] }}
@@ -73,7 +73,7 @@ async function loadData({ page, itemsPerPage, sortBy }) {
page: `${page - 1}`, page: `${page - 1}`,
count: `${itemsPerPage}`, count: `${itemsPerPage}`,
orderBy: sortString, orderBy: sortString,
filter: filtervalue.value ? `characterName:${filtervalue.value}` : '' filter: filtervalue.value ? `characterName:"${filtervalue.value}"` : ''
}) })
characters.value = response.data.characterData characters.value = response.data.characterData
@@ -102,6 +102,7 @@ watch(filtervalue, (newFilter: string, oldFilter: string) => {
debounce = setTimeout(() => { debounce = setTimeout(() => {
router.replace({ query: { page: route.query.page, filter: newFilter } }) router.replace({ query: { page: route.query.page, filter: newFilter } })
}, 500) }, 500)
loadData({page: page.value, itemsPerPage: resultePerPage.value, sortBy:[]})
}) })
onMounted(async () => { onMounted(async () => {

View File

@@ -84,13 +84,6 @@ async function loadData({ page, itemsPerPage, sortBy }) {
console.log(itemsPerPage) console.log(itemsPerPage)
console.log(sortBy) console.log(sortBy)
console.log({
page: `${page.value - 1}`,
count: `${itemsPerPage}`,
orderBy: sortString,
filter: filtervalue.value ? `title:"${filtervalue.value}"` : '',
})
const response = await axios.post('/api/game', { const response = await axios.post('/api/game', {
page: `${page - 1}`, page: `${page - 1}`,
count: `${itemsPerPage}`, count: `${itemsPerPage}`,
@@ -127,6 +120,7 @@ watch(filtervalue, (newFilter: string, oldFilter: string) => {
debounce = setTimeout(() => { debounce = setTimeout(() => {
router.replace({ query: { page: route.query.page, filter: newFilter } }) router.replace({ query: { page: route.query.page, filter: newFilter } })
}, 500) }, 500)
loadData({page: page.value, itemsPerPage: resultePerPage.value, sortBy:[]})
}) })
onMounted(async () => { onMounted(async () => {