@reactionable/amplify
Version:
Reactionable package for Amplify
101 lines • 5.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IdentityContextProvider = exports.withIdentityContext = exports.useIdentityContext = exports.useIdentityProviderProps = exports.SignOut = exports.SignUp = exports.ForgotPassword = exports.VerifyContact = exports.ConfirmSignIn = exports.SignIn = void 0;
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const auth_1 = require("@aws-amplify/auth");
const I18n_1 = require("@reactionable/core/lib/i18n/I18n");
const Identity_1 = require("@reactionable/core/lib/identity/Identity");
const Authenticator_1 = tslib_1.__importDefault(require("aws-amplify-react/lib/Auth/Authenticator"));
const types_1 = require("aws-amplify-react/lib/Auth/common/types");
const react_1 = require("react");
var Auth_1 = require("aws-amplify-react/lib/Auth");
Object.defineProperty(exports, "SignIn", { enumerable: true, get: function () { return Auth_1.SignIn; } });
Object.defineProperty(exports, "ConfirmSignIn", { enumerable: true, get: function () { return Auth_1.ConfirmSignIn; } });
Object.defineProperty(exports, "VerifyContact", { enumerable: true, get: function () { return Auth_1.VerifyContact; } });
Object.defineProperty(exports, "ForgotPassword", { enumerable: true, get: function () { return Auth_1.ForgotPassword; } });
Object.defineProperty(exports, "SignUp", { enumerable: true, get: function () { return Auth_1.SignUp; } });
Object.defineProperty(exports, "SignOut", { enumerable: true, get: function () { return Auth_1.SignOut; } });
const dataToUser = (data) => {
if (!data) {
return null;
}
return data;
};
function AuthComponent(props) {
var _a;
const { t } = (0, I18n_1.useTranslation)();
const { setUser, hide } = useIdentityContext();
const authenticatorProps = Object.assign({
errorMessage: (message) => t(message),
usernameAttributes: types_1.UsernameAttributes.EMAIL,
signUpConfig: Object.assign({ hideAllDefaults: true, signUpFields: [
{
label: "Email",
key: "email",
required: true,
displayOrder: 1,
type: "string",
},
{
label: "Password",
key: "password",
required: true,
displayOrder: 2,
type: "password",
},
...(((_a = props === null || props === void 0 ? void 0 : props.signUpConfig) === null || _a === void 0 ? void 0 : _a.signUpFields) || []),
] }, ((props === null || props === void 0 ? void 0 : props.signUpConfig) || {})),
}, hide);
return ((0, jsx_runtime_1.jsx)(Authenticator_1.default, Object.assign({}, 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) {
auth_1.Auth.currentAuthenticatedUser()
.then((data) => {
setUser(dataToUser(data));
})
.catch((error) => {
if (error === "The user is not authenticated") {
setUser(null);
}
else {
throw error;
}
});
return;
}
}, [user, userState]);
return Object.assign(Object.assign(Object.assign({}, (0, Identity_1.useIdentityProviderProps)()), { identityProvider: "Amplify", logout: () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return yield auth_1.Auth.signOut(); }), login: (values) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const result = yield auth_1.Auth.signIn(values);
const user = dataToUser(result);
if (user) {
return user;
}
throw new Error("No user retrieved from signIn");
}), AuthComponent,
user }), props);
};
exports.useIdentityProviderProps = useIdentityProviderProps;
function useIdentityContext() {
return (0, Identity_1.useIdentityContext)();
}
exports.useIdentityContext = useIdentityContext;
function withIdentityContext(Component, identityProviderProps) {
return ((0, jsx_runtime_1.jsx)(exports.IdentityContextProvider, Object.assign({}, (0, exports.useIdentityProviderProps)(identityProviderProps), { children: (0, jsx_runtime_1.jsx)(Component, {}) })));
}
exports.withIdentityContext = withIdentityContext;
const IdentityContextProvider = (props) => {
return (0, jsx_runtime_1.jsx)(Identity_1.IdentityContextProvider, Object.assign({}, (0, exports.useIdentityProviderProps)(props)));
};
exports.IdentityContextProvider = IdentityContextProvider;
//# sourceMappingURL=Identity.js.map