react-ketting
Version:
Ketting bindings for React
49 lines • 1.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useResolveResource = void 0;
const use_client_1 = require("./use-client");
const ketting_1 = require("ketting");
const react_1 = require("react");
/**
* This is an internal hook that takes a 'ResourceLike', and turns it into
* a real materialized resource.
*/
function useResolveResource(resourceLike) {
const client = (0, use_client_1.useClient)();
const [resource, setResource] = (0, react_1.useState)(quickResolve(client, resourceLike));
const [error, setError] = (0, react_1.useState)(null);
(0, react_1.useEffect)(() => {
const newRes = quickResolve(client, resourceLike);
if (newRes) {
setResource(newRes);
return;
}
Promise.resolve(resourceLike)
.then(res => {
setResource(res);
})
.catch(err => {
setError(err);
});
}, [resourceLike]);
return {
resource,
error,
setResource,
};
}
exports.useResolveResource = useResolveResource;
/**
* Helper function that will immediately return a resource for a resourcelike,
* but only if this can be done synchronously.
*/
function quickResolve(client, resourceLike) {
if (typeof resourceLike === 'string') {
return client.go(resourceLike);
}
if (resourceLike instanceof ketting_1.Resource) {
return resourceLike;
}
return null;
}
//# sourceMappingURL=use-resolve-resource.js.map
;