Update the character list to use the server side table stuff

This commit is contained in:
iamBadgers
2024-06-09 19:11:41 -07:00
parent aa4f17df06
commit 1544117aae
5 changed files with 65 additions and 47 deletions

View File

@@ -33,14 +33,15 @@ export function addCharacterApis(app, jsonParser) {
order: orderBy, order: orderBy,
where: filter where: filter
}) })
const pageCount = Math.ceil( const totalCount = await Character.count({
(await Character.count({
where: filter where: filter
})) / count })
const pageCount = Math.ceil(
totalCount / count
) )
res.setHeader('Content-Type', 'application/json') res.setHeader('Content-Type', 'application/json')
res.send({ characterData, pageCount }) res.send({ characterData, pageCount, totalCount })
} catch (e) { } catch (e) {
if (e instanceof ParsingError) { if (e instanceof ParsingError) {
res.status(400).send('Could not parse filter.') res.status(400).send('Could not parse filter.')

View File

@@ -28,7 +28,7 @@ export interface GameStats {
Events: number Events: number
AverageIP: number AverageIP: number
AverageEB: number AverageEB: number
TotalIP: number, TotalIP: number
TotalEB: number TotalEB: number
} }

View File

@@ -48,7 +48,12 @@ const route = useRoute()
const characterId = ref(route.params.characterId) const characterId = ref(route.params.characterId)
const character = ref<Character>({ const character = ref<Character>({
id: 0, characterName: "", playerName: "", role: "", status: "", lastGame: 0 id: 0,
characterName: '',
playerName: '',
role: '',
status: '',
lastGame: 0
}) })
const games = ref<GameList>({ played: [], applied: [] }) const games = ref<GameList>({ played: [], applied: [] })
const earnedEB = ref(0) const earnedEB = ref(0)

View File

@@ -6,33 +6,25 @@
v-model="filtervalue" v-model="filtervalue"
></v-text-field> ></v-text-field>
</div> </div>
<v-table> <v-data-table-server
<thead> :headers="headers"
<tr> v-model:items-per-page="resultePerPage"
<th class="text-left">ID</th> :items="characters"
<th class="text-left">Character</th> :items-length="count"
<th class="text-left">Role</th> v-model:page="page"
<th class="text-left">Player</th> @update:options="loadItems"
<th class="text-left">Status</th> >
<th class="text-left">Last Game</th> <template v-slot:item.id="{ item }">
</tr> <a v-bind:href="`/#/characters/${item.id}`">{{ item.id }}</a>
</thead> </template>
<tbody> <template v-slot:item.characterName="{ item }">
<tr v-for="character in characters"> <a v-bind:href="`/#/characters/${item.characterName}`">{{ item.characterName }}</a>
<td> </template>
<a v-bind:href="`/#/characters/${character.id}`">{{ character.id }}</a> <template v-slot:item.creationDate="{ item }">
</td> {{ new Date(item.creationDate * 1000).toISOString().split('T')[0] }}
<td> </template>
<a v-bind:href="`/#/characters/${character.id}`">{{ character.characterName }}</a> <template #bottom></template>
</td> </v-data-table-server>
<td>{{ character.role }}</td>
<td>{{ character.playerName }}</td>
<td>{{ character.status }}</td>
<td>{{ character.lastGame }}</td>
<td>0</td>
</tr>
</tbody>
</v-table>
<v-pagination <v-pagination
:model-value="page" :model-value="page"
:length="pageCount" :length="pageCount"
@@ -48,27 +40,47 @@ import { onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import axios from 'axios' import axios from 'axios'
const headers = [
{ title: 'ID', align: 'start', sortable: true, key: 'id' },
{ title: 'Character', align: 'start', sortable: true, key: 'characterName' },
{ title: 'Role', align: 'start', sortable: true, key: 'role' },
{ title: 'Player', align: 'start', sortable: true, key: 'playerName' },
{ title: 'Status', align: 'start', sortable: true, key: 'status' },
{ title: 'Creation Date', align: 'start', sortable: true, key: 'creationDate' }
]
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const characters = ref<Character[]>([]) const characters = ref<Character[]>([])
const pageCount = ref(1) const pageCount = ref(1)
const page = ref(1) const page = ref(1)
const resultePerPage = ref(10)
let count = 10 const count = ref(10)
const filtervalue = ref('') const filtervalue = ref('')
async function loadData() { async function loadItems({ page, itemsPerPage, sortBy }) {
let sortString = 'id'
if (sortBy[0]) {
console.log(sortBy[0].key)
console.log(sortBy[0].order)
sortString = `${sortBy[0].key} ${sortBy[0].order}`
}
const response = await axios.post('/api/character', { const response = await axios.post('/api/character', {
page: `${page.value - 1}`, page: `${page - 1}`,
count: `10`, count: `${itemsPerPage}`,
orderBy: 'id', orderBy: sortString,
filter: filtervalue.value ? `characterName:"${filtervalue.value}"` : '' filter: filtervalue.value ? `characterName:${filtervalue.value}` : ''
}) })
console.log(response)
characters.value = response.data.characterData characters.value = response.data.characterData
pageCount.value = response.data.pageCount pageCount.value = response.data.pageCount
count.value = response.data.totalCount
} }
function setPage(targetPage: number) { function setPage(targetPage: number) {
@@ -83,7 +95,7 @@ watch(route, (newValue, oldValue) => {
page.value = Number(route.query.page) page.value = Number(route.query.page)
} }
page.value = Number(route.query.page) page.value = Number(route.query.page)
loadData() loadItems({page: page.value, itemsPerPage: resultePerPage.value, sortBy:[]})
}) })
let debounce: ReturnType<typeof setTimeout> let debounce: ReturnType<typeof setTimeout>
@@ -104,6 +116,6 @@ onMounted(async () => {
if (route.query.filter) { if (route.query.filter) {
filtervalue.value = route.query.filter.toString() filtervalue.value = route.query.filter.toString()
} }
loadData() loadItems({page: page.value, itemsPerPage: resultePerPage.value, sortBy:[]})
}) })
</script> </script>

View File

@@ -100,12 +100,12 @@ const appHeaders: ReadonlyHeaders = [
const gameId = ref(route.params.gameId) const gameId = ref(route.params.gameId)
const game = ref<Game>({ const game = ref<Game>({
id: 0, id: 0,
title: "", title: '',
gamemaster: "", gamemaster: '',
payoutEB: 0, payoutEB: 0,
payoutIP: 0, payoutIP: 0,
payoutLoot: "", payoutLoot: '',
status: "", status: '',
postdate: 0 postdate: 0
}) })
const picks = ref<GameCharacter[]>([]) const picks = ref<GameCharacter[]>([])