Newer
Older
import { APIObject, APIStoreOptions, URLBuilder } from '@rokoli/bnb'
import { defineStore } from 'pinia'
import {
APICreate,
APIListUnpaginated,
APIRemove,
APIRetrieve,
APIUpdate,
createExtendableAPI,
} from '@rokoli/bnb/drf'
import { useOnAuthBehaviour } from '@/stores/auth'
export function createUnpaginatedAPIStore<T extends APIObject>(
storeId: string,
endpoint: URLBuilder,
options?: APIStoreOptions,
behaviour?: { syncOnAuth: boolean },
) {
return defineStore(storeId, () => {
const { api, base } = createExtendableAPI<T>(endpoint, options)
const listOperations = APIListUnpaginated(api)
if (behaviour?.syncOnAuth) {
useOnAuthBehaviour(() => void listOperations.list())
}
return {
...base,
...listOperations,
...APIRetrieve(api),
...APICreate(api),
...APIUpdate(api),
...APIRemove(api),
}
})
}