import type { Query as PiniaOrmQuery } from 'pinia-orm' import type { ApiFilter } from '~/types/data' import type ApiResource from '~/models/ApiResource' import RefUtils from '~/services/utils/refUtils' export default class PageFilter implements ApiFilter { page: Ref itemsPerPage: Ref /** * @param page * @param itemsPerPage */ constructor(page: Ref, itemsPerPage: Ref) { this.page = page this.itemsPerPage = itemsPerPage } public applyToPiniaOrmQuery( query: PiniaOrmQuery, ): PiniaOrmQuery { const page = RefUtils.castToRef(this.page, false) const itemsPerPage = RefUtils.castToRef(this.itemsPerPage, false) return query .offset(itemsPerPage.value * (page.value - 1)) .limit(itemsPerPage.value) } public getApiQueryPart(): string { return `page=${this.page.value}&itemsPerPage=${this.itemsPerPage.value}` } }