Skip to content

Commit 3f37964

Browse files
committed
add Model typing to useFind
1 parent 4149d78 commit 3f37964

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

src/service-module/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export interface ModelInstanceOptions {
110110
merge?: boolean
111111
}
112112

113-
type AnyData = { [k: string]: any }
113+
export type AnyData = { [k: string]: any }
114114

115115
// eslint-disable-next-line @typescript-eslint/no-empty-interface
116116
export interface FeathersVuexTypeOptions {

src/useFind.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ import {
1212
} from '@vue/composition-api'
1313
import debounce from 'lodash/debounce'
1414
import { getItemsFromQueryInfo, getQueryInfo, Params } from './utils'
15+
import { AnyData, ModelStatic, Model } from './service-module/types'
1516

16-
interface UseFindOptions {
17-
model: Function
17+
interface UseFindOptions<T> {
18+
model: ModelStatic<T>
1819
params: Params | Ref<Params>
1920
fetchParams?: Params | Ref<Params>
20-
queryWhen?: Ref<Function>
21+
queryWhen?: Ref<boolean>
2122
qid?: string
2223
local?: boolean
2324
lazy?: boolean
@@ -32,8 +33,8 @@ interface UseFindState {
3233
latestQuery: null | object
3334
isLocal: boolean
3435
}
35-
interface UseFindData {
36-
items: Ref<any>
36+
interface UseFindData<T> {
37+
items: Ref<Readonly<Model<T>[]>>
3738
servicePath: Ref<string>
3839
isPending: Ref<boolean>
3940
haveBeenRequested: Ref<boolean>
@@ -50,8 +51,8 @@ interface UseFindData {
5051
const unwrapParams = (params: Params | Ref<Params>): Params =>
5152
isRef(params) ? params.value : params
5253

53-
export default function find(options: UseFindOptions): UseFindData {
54-
const defaults = {
54+
export default function find<T extends AnyData = AnyData>(options: UseFindOptions<T>): UseFindData<T> {
55+
const defaults: UseFindOptions<T> = {
5556
model: null,
5657
params: null,
5758
qid: 'default',
@@ -94,7 +95,7 @@ export default function find(options: UseFindOptions): UseFindData {
9495
})
9596
const computes = {
9697
// The find getter
97-
items: computed<any[]>(() => {
98+
items: computed<Model<T>[]>(() => {
9899
const getterParams = unwrapParams(params)
99100

100101
if (getterParams && getterParams.paginate) {
@@ -113,7 +114,8 @@ export default function find(options: UseFindOptions): UseFindData {
113114
)
114115
return items
115116
} else {
116-
return model.findInStore(getterParams).data
117+
const found = model.findInStore(getterParams)
118+
return Array.isArray(found) ? found : found.data
117119
}
118120
}),
119121
paginationData: computed(() => {
@@ -122,7 +124,7 @@ export default function find(options: UseFindOptions): UseFindData {
122124
servicePath: computed<string>(() => model.servicePath)
123125
}
124126

125-
function find<T>(params: Params | Ref<Params>): T {
127+
function find(params: Params | Ref<Params>) {
126128
params = unwrapParams(params)
127129
if (queryWhen.value && !state.isLocal) {
128130
state.isPending = true
@@ -133,22 +135,23 @@ export default function find(options: UseFindOptions): UseFindData {
133135
state.error = null
134136
state.haveLoaded = true
135137

136-
const queryInfo = getQueryInfo(params, response)
137-
queryInfo.response = response
138-
queryInfo.isOutdated = false
139-
140-
state.latestQuery = queryInfo
138+
if(!Array.isArray(response)) {
139+
const queryInfo = getQueryInfo(params, response)
140+
queryInfo.response = response
141+
queryInfo.isOutdated = false
142+
state.latestQuery = queryInfo
143+
}
141144
state.isPending = false
142145
return response
143146
})
144147
}
145148
}
146149
const methods = {
147-
findDebounced<Promise>(params?: Params): Promise {
150+
findDebounced(params?: Params) {
148151
return find(params)
149152
}
150153
}
151-
function findProxy<T>(params?: Params | Ref<Params>): T {
154+
function findProxy(params?: Params | Ref<Params>) {
152155
const paramsToUse = getFetchParams(params)
153156

154157
if (paramsToUse && paramsToUse.debounce) {

0 commit comments

Comments
 (0)