+
+
+import axios from 'axios'
+import $ from 'jquery'
+import RadioButton from '~/components/radios/Button.vue'
+import Pagination from '~/components/Pagination.vue'
+import { checkRedirectToLogin } from '~/utils'
+import TrackTable from '~/components/audio/track/Table.vue'
+import useLogger from '~/composables/useLogger'
+import useSharedLabels from '~/composables/locale/useSharedLabels'
+import useOrdering from '~/composables/useOrdering'
+import { onBeforeRouteUpdate, useRouter } from 'vue-router'
+import { computed, onMounted, reactive, ref, watch } from 'vue'
+import { useStore } from '~/store'
+import { Track } from '~/types'
+import { useGettext } from 'vue3-gettext'
+import { OrderingField, RouteWithPreferences } from '~/store/ui'
+
+interface Props {
+ orderingConfigName: RouteWithPreferences | null
+ defaultPage?: number,
+ defaultPaginateBy?: number
+}
+
+const props = withDefaults(defineProps
(), {
+ defaultPage: 1,
+ defaultPaginateBy: 1
+})
+
+const store = useStore()
+await checkRedirectToLogin(store, useRouter())
+
+// TODO (wvffle): Make sure everything is it's own type
+const page = ref(+props.defaultPage)
+
+const orderingOptions: [OrderingField, keyof typeof sharedLabels.filters][] = [
+ ['creation_date', 'creation_date'],
+ ['title', 'track_title'],
+ ['album__title', 'album_title'],
+ ['artist__name', 'artist_name']
+]
+
+const logger = useLogger()
+
+const sharedLabels = useSharedLabels()
+
+const router = useRouter()
+const { onOrderingUpdate, orderingString, paginateBy, ordering, orderingDirection } = useOrdering(props.orderingConfigName)
+
+const updateQueryString = () => router.replace({
+ query: {
+ page: page.value,
+ paginateBy: paginateBy.value,
+ ordering: orderingString.value
+ }
+})
+
+const results = reactive