@reactionable/amplify
Version:
Reactionable package for Amplify
99 lines • 3.63 kB
JavaScript
;
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