autumn-js
Version:
Autumn JS Library
101 lines (98 loc) • 2.92 kB
JavaScript
"use client";
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/libraries/react/hooks/useCustomerProvider.tsx
var useCustomerProvider_exports = {};
__export(useCustomerProvider_exports, {
useCustomerProvider: () => useCustomerProvider
});
module.exports = __toCommonJS(useCustomerProvider_exports);
var import_react = require("react");
function useCustomerProvider(client) {
const [stateMap, setStateMap] = (0, import_react.useState)({});
const inProgressFetches = (0, import_react.useRef)({});
const getQueryKey = (params) => {
return JSON.stringify(params || {});
};
const getState = (params) => {
const queryKey = getQueryKey(params);
if (!stateMap[queryKey]) {
return {
customer: null,
isLoading: true,
error: null
};
}
return stateMap[queryKey];
};
const refetch = async ({
params,
errorOnNotFound = true
}) => {
const queryKey = getQueryKey(params);
if (inProgressFetches.current[queryKey]) {
return;
}
inProgressFetches.current[queryKey] = true;
setStateMap((prevState) => ({
...prevState,
[queryKey]: {
...prevState[queryKey] || { customer: null },
isLoading: true,
error: null
}
}));
const { data, error } = await client.createCustomer({
expand: params?.expand,
errorOnNotFound
});
let newState = {
customer: data,
isLoading: false,
error
};
setStateMap((prevState) => ({
...prevState,
[queryKey]: newState
}));
inProgressFetches.current[queryKey] = false;
};
const refetchFirstTwo = async () => {
try {
let batchRefetch = [];
for (const key of Object.keys(stateMap)) {
batchRefetch.push(refetch({ params: JSON.parse(key) }));
}
await Promise.all(batchRefetch);
} catch (error) {
console.error("Failed to refetch customer (useCustomerProvider)");
console.error(error);
}
};
return {
// stateMap,
getState,
refetch,
refetchFirstTwo
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useCustomerProvider
});