ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
94 lines • 3.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useGetIdentity = void 0;
const react_1 = require("react");
const react_query_1 = require("@tanstack/react-query");
const useAuthProvider_1 = __importDefault(require("./useAuthProvider.cjs"));
const util_1 = require("../util/index.cjs");
const defaultIdentity = {
id: '',
};
const defaultQueryParams = {
staleTime: 5 * 60 * 1000,
};
/**
* Return the current user identity by calling authProvider.getIdentity() on mount
*
* The return value updates according to the call state:
*
* - mount: { isPending: true }
* - success: { identity, refetch: () => {}, isPending: false }
* - error: { error: Error, isPending: false }
*
* The implementation is left to the authProvider.
*
* @returns The current user identity. Destructure as { isPending, identity, error, refetch }.
*
* @example
* import { useGetIdentity, useGetOne } from 'react-admin';
*
* const PostDetail = ({ id }) => {
* const { data: post, isPending: postLoading } = useGetOne('posts', { id });
* const { identity, isPending: identityLoading } = useGetIdentity();
* if (postLoading || identityLoading) return <>Loading...</>;
* if (!post.lockedBy || post.lockedBy === identity.id) {
* // post isn't locked, or is locked by me
* return <PostEdit post={post} />
* } else {
* // post is locked by someone else and cannot be edited
* return <PostShow post={post} />
* }
* }
*/
const useGetIdentity = (options = defaultQueryParams) => {
const authProvider = (0, useAuthProvider_1.default)();
const { onSuccess, onError, onSettled, ...queryOptions } = options;
const result = (0, react_query_1.useQuery)({
queryKey: ['auth', 'getIdentity'],
queryFn: async ({ signal }) => {
if (authProvider &&
typeof authProvider.getIdentity === 'function') {
return authProvider.getIdentity({ signal });
}
else {
return defaultIdentity;
}
},
...queryOptions,
});
const onSuccessEvent = (0, util_1.useEvent)(onSuccess ?? noop);
const onErrorEvent = (0, util_1.useEvent)(onError ?? noop);
const onSettledEvent = (0, util_1.useEvent)(onSettled ?? noop);
(0, react_1.useEffect)(() => {
if (result.data === undefined || result.isFetching)
return;
onSuccessEvent(result.data);
}, [onSuccessEvent, result.data, result.isFetching]);
(0, react_1.useEffect)(() => {
if (result.error == null || result.isFetching)
return;
onErrorEvent(result.error);
}, [onErrorEvent, result.error, result.isFetching]);
(0, react_1.useEffect)(() => {
if (result.status === 'pending' || result.isFetching)
return;
onSettledEvent(result.data, result.error);
}, [
onSettledEvent,
result.data,
result.error,
result.status,
result.isFetching,
]);
return (0, react_1.useMemo)(() => ({
...result,
identity: result.data,
}), [result]);
};
exports.useGetIdentity = useGetIdentity;
exports.default = exports.useGetIdentity;
const noop = () => { };
//# sourceMappingURL=useGetIdentity.js.map