vormiaqueryjs
Version:
Vormia Query Js - A npm package for query management with VormiaPHP laravel Backend application
88 lines (87 loc) • 2.35 kB
JavaScript
import { writable } from "svelte/store";
import { getGlobalVormiaClient } from "../client/createVormiaClient.mjs";
import { VormiaError } from "../client/utils/VormiaError.mjs";
function createVormiaStore(initialOptions = {}) {
const client = getGlobalVormiaClient();
const { subscribe, set, update } = writable({
data: null,
error: null,
isLoading: false,
isError: false,
isSuccess: false
});
async function fetchData(options = {}) {
var _a, _b;
const mergedOptions = { ...initialOptions, ...options };
const {
endpoint,
method = "GET",
params,
data: bodyData,
headers,
transform,
onSuccess,
onError
} = mergedOptions;
update((state) => ({ ...state, isLoading: true, isError: false, isSuccess: false }));
try {
const config = {
method,
params: method === "GET" ? params : void 0,
data: method !== "GET" ? bodyData || params : void 0,
headers
};
const response = await client.request({
url: endpoint,
...config
});
let result = response.data;
if (transform) {
result = transform(result);
}
const newState = {
data: result,
error: null,
isLoading: false,
isError: false,
isSuccess: true
};
set(newState);
if (onSuccess) {
onSuccess(newState);
}
return newState;
} catch (err) {
const errorMessage = err instanceof Error ? err.message : "An unknown error occurred";
const status = (_a = err == null ? void 0 : err.response) == null ? void 0 : _a.status;
const errorData = (_b = err == null ? void 0 : err.response) == null ? void 0 : _b.data;
const errorObj = err instanceof VormiaError ? err : new VormiaError(errorMessage, status, errorData);
const errorState = {
data: null,
error: errorObj,
isLoading: false,
isError: true,
isSuccess: false
};
set(errorState);
if (onError) {
onError(errorObj);
}
throw errorObj;
}
}
if (initialOptions.immediate !== false) {
fetchData();
}
return {
subscribe,
fetch: fetchData,
refetch: fetchData,
set,
update
};
}
export {
createVormiaStore
};
//# sourceMappingURL=svelte.mjs.map