diff --git a/front/src/components/album/Widget.vue b/front/src/components/album/Widget.vue index 89442369f..748c3c107 100644 --- a/front/src/components/album/Widget.vue +++ b/front/src/components/album/Widget.vue @@ -8,14 +8,15 @@ import { useI18n } from 'vue-i18n' import axios from 'axios' -import AlbumCard from '~/components/album/Card.vue' -import Button from '~/components/ui/Button.vue' -import Layout from '~/components/ui/Layout.vue' -import Spacer from '~/components/ui/Spacer.vue' -import Loader from '~/components/ui/Loader.vue' - +import usePage from '~/composables/navigation/usePage' import useErrorHandler from '~/composables/useErrorHandler' +import AlbumCard from '~/components/album/Card.vue' +import Section from '~/components/ui/Section.vue' +import Loader from '~/components/ui/Loader.vue' +import Pagination from '~/components/ui/Pagination.vue' + + const { t } = useI18n() interface Props { @@ -23,6 +24,7 @@ interface Props { showCount?: boolean search?: boolean limit?: number + title?: string } const props = withDefaults(defineProps(), { @@ -36,6 +38,7 @@ const store = useStore() const query = ref('') const albums = reactive([] as Album[]) const count = ref(0) +const page = usePage() const nextPage = ref() const isLoading = ref(false) @@ -46,6 +49,7 @@ const fetchData = async (url = 'albums/') => { const params = { q: query.value, ...props.filters, + page: page.value, page_size: props.limit } @@ -60,44 +64,39 @@ const fetchData = async (url = 'albums/') => { isLoading.value = false } +setTimeout(fetchData, 1000) + const performSearch = () => { albums.length = 0 fetchData() } watch( - () => store.state.moderation.lastUpdate, + [() => store.state.moderation.lastUpdate, page], () => fetchData(), { immediate: true } ) diff --git a/front/src/components/artist/Widget.vue b/front/src/components/artist/Widget.vue index 0b603561c..f04bf982d 100644 --- a/front/src/components/artist/Widget.vue +++ b/front/src/components/artist/Widget.vue @@ -1,25 +1,26 @@ diff --git a/front/src/components/audio/ChannelsWidget.vue b/front/src/components/audio/ChannelsWidget.vue index dd9a2be06..7277f9e07 100644 --- a/front/src/components/audio/ChannelsWidget.vue +++ b/front/src/components/audio/ChannelsWidget.vue @@ -59,33 +59,39 @@ const fetchData = async (url = 'channels/') => { } onMounted(() => { - fetchData() + setTimeout(fetchData, 1000) }) -watch(() => [props.filters, page], () => { - fetchData() -}, { deep: true }) +watch([() => props.filters, page], + () => fetchData(), + { deep: true } +) diff --git a/front/src/components/audio/track/Widget.vue b/front/src/components/audio/track/Widget.vue index 524b8d3b3..8bb35716e 100644 --- a/front/src/components/audio/track/Widget.vue +++ b/front/src/components/audio/track/Widget.vue @@ -8,9 +8,9 @@ import { useI18n } from 'vue-i18n' import { getArtistCoverUrl } from '~/utils/utils' import axios from 'axios' - +import usePage from '~/composables/navigation/usePage' import useWebSocketHandler from '~/composables/useWebSocketHandler' -import Button from '~/components/ui/Button.vue' + import PlayButton from '~/components/audio/PlayButton.vue' import TagsList from '~/components/tags/List.vue' import Section from '~/components/ui/Section.vue' @@ -18,6 +18,7 @@ import Alert from '~/components/ui/Alert.vue' import Spacer from '~/components/ui/Spacer.vue' import Loader from '~/components/ui/Loader.vue' import Heading from '~/components/ui/Heading.vue' +import Pagination from '~/components/ui/Pagination.vue' import useErrorHandler from '~/composables/useErrorHandler' @@ -30,16 +31,15 @@ interface Props { filters: Record url: string isActivity?: boolean - showCount?: boolean limit?: number itemClasses?: string websocketHandlers?: string[] + title?: string } const emit = defineEmits() const props = withDefaults(defineProps(), { isActivity: true, - showCount: false, limit: 9, itemClasses: '', websocketHandlers: () => [] @@ -50,7 +50,7 @@ const { t } = useI18n() const objects = reactive([] as Listening[]) const count = ref(0) -const nextPage = ref(null) +const page = usePage() const isLoading = ref(false) @@ -59,12 +59,12 @@ const fetchData = async (url = props.url) => { const params = { ...clone(props.filters), - page_size: props.limit + page: page.value, + page_size: props.limit ?? 9 } try { const response = await axios.get(url, { params }) - nextPage.value = response.data.next count.value = response.data.count const newObjects = !props.isActivity @@ -80,11 +80,11 @@ const fetchData = async (url = props.url) => { } onMounted(() => { - fetchData() + setTimeout(fetchData, 1000) }) watch( - () => store.state.moderation.lastUpdate, + [() => store.state.moderation.lastUpdate, page], () => fetchData(), { immediate: true } ) @@ -113,18 +113,17 @@ watch(() => props.websocketHandlers.includes('Listen'), (to) => { diff --git a/front/src/components/federation/LibraryWidget.vue b/front/src/components/federation/LibraryWidget.vue index 1276bdf93..bbd642ee9 100644 --- a/front/src/components/federation/LibraryWidget.vue +++ b/front/src/components/federation/LibraryWidget.vue @@ -9,9 +9,8 @@ import axios from 'axios' import LibraryCard from '~/views/content/remote/Card.vue' import Button from '~/components/ui/Button.vue' -import Layout from '~/components/ui/Layout.vue' +import Section from '~/components/ui/Section.vue' import Loader from '~/components/ui/Loader.vue' -import Spacer from '~/components/ui/Spacer.vue' import useErrorHandler from '~/composables/useErrorHandler' @@ -21,6 +20,7 @@ interface Events { interface Props { url: string + title?: string } const { t } = useI18n() @@ -53,7 +53,7 @@ const fetchData = async (url = props.url) => { } onMounted(() => { - fetchData() + setTimeout(fetchData, 1000) }) watch(() => props.url, () => { @@ -62,37 +62,34 @@ watch(() => props.url, () => { diff --git a/front/src/components/library/AlbumDetail.vue b/front/src/components/library/AlbumDetail.vue index f07387a0e..a0c15ecd6 100644 --- a/front/src/components/library/AlbumDetail.vue +++ b/front/src/components/library/AlbumDetail.vue @@ -9,6 +9,9 @@ import Pagination from '~/components/vui/Pagination.vue' import { computed, ref } from 'vue' import { useI18n } from 'vue-i18n' +import Loader from '~/components/ui/Loader.vue' +import Spacer from '~/components/ui/Spacer.vue' + interface Events { (e: 'libraries-loaded', libraries: Library[]): void } @@ -57,14 +60,14 @@ const paginatedDiscs = computed(() => props.object.tracks.slice(props.paginateBy
- + props.object.tracks.slice(props.paginateBy :filters="{channel: artistCredit[0].artist.channel.uuid, album: object.id, ordering: '-creation_date'}" /> + +