Files
apollo/packages/vue-apollo-composable/src/useResult.ts
T
2019-12-05 15:15:53 +01:00

35 lines
797 B
TypeScript

import { Ref, computed } from '@vue/composition-api'
export function useResult<
TReturnValue = any,
TDefaultValue = any,
TResult = any
> (
result: Ref<TResult>,
defaultValue: TDefaultValue = null,
pick: (data: TResult) => TReturnValue = null,
) {
return computed<TDefaultValue | TReturnValue>(() => {
const value = result.value
if (value) {
if (pick) {
try {
return pick(value)
} catch (e) {
// Silent error
}
} else {
const keys = Object.keys(value)
if (keys.length === 1) {
// Automatically take the only key in result data
return value[keys[0]]
} else {
// Return entire result data
return value
}
}
}
return defaultValue
})
}