diff --git a/src/components/DataTable.vue b/src/components/DataTable.vue index fc2147d4..56eb9aab 100644 --- a/src/components/DataTable.vue +++ b/src/components/DataTable.vue @@ -74,11 +74,13 @@ emits: [ 'update:currentPage', 'update:pageSize', + 'update:tableProps', 'size-change', 'current-change', 'selection-change', 'row-click', - 'filtered-data' + 'filtered-data', + 'sort-change' ], setup(props, { emit }) { const appearanceSettingsStore = useAppearanceSettingsStore(); @@ -180,7 +182,14 @@ }); const handleSortChange = ({ prop, order }) => { + if (props.tableProps.defaultSort) { + const { tableProps } = props; + tableProps.defaultSort.prop = prop; + tableProps.defaultSort.order = order; + emit('update:tableProps', tableProps); + } sortData.value = { prop, order }; + emit('sort-change', sortData.value); }; const handleSelectionChange = (selection) => { diff --git a/src/plugin/sentry.js b/src/plugin/sentry.js index 354afe74..a715adcb 100644 --- a/src/plugin/sentry.js +++ b/src/plugin/sentry.js @@ -45,6 +45,7 @@ export async function initSentry(app) { const error = hint.originalException; if (error && typeof error.message === 'string') { if ( + error.message.includes('401') || error.message.includes('403') || error.message.includes('404') || error.message.includes('500') || diff --git a/src/stores/moderation.js b/src/stores/moderation.js index ca2fcf94..db657775 100644 --- a/src/stores/moderation.js +++ b/src/stores/moderation.js @@ -12,11 +12,35 @@ export const useModerationStore = defineStore('Moderation', () => { const cachedPlayerModerations = ref(new Map()); const cachedPlayerModerationsUserIds = ref(new Set()); - const isPlayerModerationsLoading = ref(false); const playerModerationTable = ref({ data: [], + search: '', + loading: false, + filters: [ + { + prop: 'type', + value: [] + }, + { + prop: ['sourceDisplayName', 'targetDisplayName'], + value: '' + } + ], + tableProps: { + stripe: true, + size: 'small', + defaultSort: { + prop: 'created', + order: 'descending' + } + }, pageSize: 15, - pageSizeLinked: true + pageSizeLinked: true, + paginationProps: { + small: true, + layout: 'sizes,prev,pager,next,total', + pageSizes: [10, 15, 20, 25, 50, 100] + } }); watch( @@ -24,7 +48,7 @@ export const useModerationStore = defineStore('Moderation', () => { (isLoggedIn) => { cachedPlayerModerations.value.clear(); cachedPlayerModerationsUserIds.value.clear(); - isPlayerModerationsLoading.value = false; + playerModerationTable.value.loading = false; playerModerationTable.value.data = []; if (isLoggedIn) { refreshPlayerModerations(); @@ -168,17 +192,17 @@ export const useModerationStore = defineStore('Moderation', () => { } async function refreshPlayerModerations() { - if (isPlayerModerationsLoading.value) { + if (playerModerationTable.value.loading) { return; } - isPlayerModerationsLoading.value = true; + playerModerationTable.value.loading = true; expirePlayerModerations(); Promise.all([ playerModerationRequest.getPlayerModerations(), avatarModerationRequest.getAvatarModerations() ]) .finally(() => { - isPlayerModerationsLoading.value = false; + playerModerationTable.value.loading = false; }) .then((res) => { // TODO: compare with cachedAvatarModerations @@ -244,7 +268,6 @@ export const useModerationStore = defineStore('Moderation', () => { return { cachedPlayerModerations, cachedPlayerModerationsUserIds, - isPlayerModerationsLoading, playerModerationTable, refreshPlayerModerations, diff --git a/src/views/Moderation/Moderation.vue b/src/views/Moderation/Moderation.vue index 786989e6..d9e75321 100644 --- a/src/views/Moderation/Moderation.vue +++ b/src/views/Moderation/Moderation.vue @@ -3,7 +3,7 @@
- +