vue-rest-hooks
Version:
typescript restfull-api reactive @vue/composition-api
54 lines (53 loc) • 1.68 kB
JavaScript
import { ref, onMounted } from "@vue/composition-api";
export /**
* use restfull api typeof get reactive
*
* @template TParam
* @template TData
* @param {(params?: TParam) => Promise<TData>} request
* @param {QueryParams<TParam>} [params]
* @returns {QueryResult<TParam, TData>}
*/ var useQuery = function (request, params, options) {
if (params === void 0) { params = {}; }
if (options === void 0) { options = {}; }
var loading = ref(false);
var error = ref(void 0);
var data = ref(void 0);
var variableState = ref(void 0);
var updateFn = ref(void 0);
var variables = params.variables, update = params.update;
variableState.value = variables;
updateFn.value = update;
var refetch = function (executeParams) {
if (executeParams === void 0) { executeParams = {}; }
var variables = executeParams.variables, update = executeParams.update;
variableState.value = variables;
updateFn.value = update;
execute();
};
function execute() {
loading.value = true;
return request(variableState.value || {})
.then(function (result) {
var _a;
(_a = updateFn.value) === null || _a === void 0 ? void 0 : _a.call(updateFn, result);
data.value = result;
})
.catch(function (err) {
error.value = err;
}).finally(function () {
loading.value = false;
});
}
onMounted(function () {
if (options.lazy)
return;
execute();
});
return {
loading: loading,
error: error,
data: data,
refetch: refetch
};
};