UNPKG

@reactionable/amplify

Version:
99 lines 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IdentityContextProvider = exports.withIdentityContext = exports.useIdentityContext = exports.useIdentityProviderProps = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const ui_react_1 = require("@aws-amplify/ui-react"); const auth_1 = require("aws-amplify/auth"); const core_1 = require("@reactionable/core"); const react_1 = require("react"); const dataToUser = (data) => { if (!data) { return null; } return { id: data.userId, username: data.username, }; }; function AuthComponent(props) { const { t } = (0, core_1.useTranslation)(); const { setUser } = useIdentityContext(); const authenticatorProps = Object.assign({ errorMessage: (message) => t(message), ...props, }); return ((0, jsx_runtime_1.jsx)(ui_react_1.Authenticator, { ...authenticatorProps, onStateChange: (authState, data) => { setUser(authState !== "signedIn" ? null : dataToUser(data)); } })); } const useIdentityProviderProps = (props = {}) => { const user = props.user; const [userState, setUser] = (0, react_1.useState)(); (0, react_1.useEffect)(() => { if (user && user !== userState) { setUser(user); return; } if (userState === undefined) { (0, auth_1.fetchAuthSession)() .then((data) => { if (!data.identityId) { return; } (0, auth_1.getCurrentUser)() .then((data) => { setUser(dataToUser(data)); }) .catch((error) => { if (error === "The user is not authenticated") { setUser(null); } else { throw error; } }); }) .catch((error) => { if (error === "The user is not authenticated") { setUser(null); } else { throw error; } }); return; } }, [user, userState]); return { ...(0, core_1.useIdentityProviderProps)(), identityProvider: "Amplify", logout: async () => await (0, auth_1.signOut)(), login: async (values) => { const result = await (0, auth_1.signIn)(values); if (result.isSignedIn) { const user = dataToUser(await (0, auth_1.getCurrentUser)()); if (user) { return user; } } throw new Error("No user retrieved from signIn"); }, AuthComponent, user, ...props, }; }; exports.useIdentityProviderProps = useIdentityProviderProps; function useIdentityContext() { return (0, core_1.useIdentityContext)(); } exports.useIdentityContext = useIdentityContext; function withIdentityContext(Component, identityProviderProps) { return ((0, jsx_runtime_1.jsx)(exports.IdentityContextProvider, { ...(0, exports.useIdentityProviderProps)(identityProviderProps), children: (0, jsx_runtime_1.jsx)(Component, {}) })); } exports.withIdentityContext = withIdentityContext; const IdentityContextProvider = (props) => { return (0, jsx_runtime_1.jsx)(core_1.IdentityContextProvider, { ...(0, exports.useIdentityProviderProps)(props) }); }; exports.IdentityContextProvider = IdentityContextProvider; //# sourceMappingURL=Identity.js.map