UNPKG

11.6 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress"));
11
12var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
13
14var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
15
16var _Link = _interopRequireDefault(require("react-router-dom/Link"));
17
18var _formData2 = _interopRequireDefault(require("sharyn/client/form-data"));
19
20var _Page = _interopRequireDefault(require("sharyn/components/Page"));
21
22var _cond = _interopRequireDefault(require("sharyn/util/cond"));
23
24var _i18n = require("../i18n");
25
26var _CustomButton = _interopRequireDefault(require("./CustomButton"));
27
28var _propTypes = _interopRequireDefault(require("prop-types"));
29
30function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
31
32function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
33
34function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
35
36function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
37
38function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
39
40function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
41
42function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
43
44function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
45
46var translations = {
47 password: {
48 fr: 'Mot de passe',
49 en: 'Password',
50 es: 'Contraseña'
51 },
52 'password confirmation': {
53 fr: 'Confirmation du mot de passe',
54 en: 'Password confirmation',
55 es: 'Confirmación de contraseña'
56 },
57 'new password': {
58 fr: 'Nouveau mot de passe',
59 en: 'New password',
60 es: 'Nueva contraseña'
61 },
62 validate: {
63 fr: 'Valider',
64 en: 'Validate',
65 es: 'Validar'
66 },
67 'new password set': {
68 fr: 'Votre nouveau mot de passe a été enregistré.',
69 en: 'Your new password has been set.',
70 es: 'Su nueva contraseña ha sido guardada.'
71 },
72 'log in': {
73 fr: 'Connexion',
74 en: 'Log In',
75 es: 'Conectarse'
76 },
77 'password mismatch message': {
78 fr: 'Les champs mot de passe sont différents.',
79 en: 'The password fields do not match.',
80 es: 'Los campos de contraseña son diferentes.'
81 },
82 'call error message': {
83 fr: "Cela n'a pas fonctionné. Merci de réessayer plus tard.",
84 en: 'Something went wrong, please try again later.',
85 es: 'No funcionó, por favor intente de nuevo más tarde.'
86 },
87 'expired token message': {
88 fr: 'Votre lien semble expiré.',
89 en: 'Your link seems expired.',
90 es: 'El enlace parece expirado.'
91 },
92 'password too short message': {
93 fr: 'Le mot de passe doit faire au moins 6 caractères.',
94 en: 'Your password must be at least 6 characters.',
95 es: 'Su contraseña debe tener al menos 6 caracteres.'
96 }
97};
98
99var validateAndSubmit = function validateAndSubmit(_ref) {
100 var setErrorMessage = _ref.setErrorMessage,
101 setPasswordCall = _ref.setPasswordCall,
102 setIsFinished = _ref.setIsFinished,
103 setIsLoading = _ref.setIsLoading,
104 lang = _ref.lang,
105 token = _ref.token;
106 return (
107 /*#__PURE__*/
108 function () {
109 var _ref2 = _asyncToGenerator(
110 /*#__PURE__*/
111 regeneratorRuntime.mark(function _callee(e) {
112 var _formData, password, passwordConfirmation, success;
113
114 return regeneratorRuntime.wrap(function _callee$(_context) {
115 while (1) {
116 switch (_context.prev = _context.next) {
117 case 0:
118 e.preventDefault();
119 _formData = (0, _formData2["default"])(e), password = _formData.password, passwordConfirmation = _formData['password-confirmation'];
120
121 if (!(password !== passwordConfirmation)) {
122 _context.next = 6;
123 break;
124 }
125
126 setErrorMessage((0, _i18n.getTranslation)(translations, lang, 'password mismatch message'));
127 _context.next = 16;
128 break;
129
130 case 6:
131 if (!(password.length < 6)) {
132 _context.next = 10;
133 break;
134 }
135
136 setErrorMessage((0, _i18n.getTranslation)(translations, lang, 'password too short message'));
137 _context.next = 16;
138 break;
139
140 case 10:
141 setIsLoading(true);
142 _context.next = 13;
143 return setPasswordCall(password, token);
144
145 case 13:
146 success = _context.sent;
147 setIsLoading(false);
148
149 if (success) {
150 setIsFinished(true);
151 } else {
152 setErrorMessage((0, _i18n.getTranslation)(translations, lang, 'call error message'));
153 }
154
155 case 16:
156 case "end":
157 return _context.stop();
158 }
159 }
160 }, _callee);
161 }));
162
163 return function (_x) {
164 return _ref2.apply(this, arguments);
165 };
166 }()
167 );
168};
169
170var defaultValidateTokenCall = function defaultValidateTokenCall(expiration) {
171 return new Date().getTime() < new Date(expiration).getTime();
172};
173
174var validateTokenEffect = function validateTokenEffect(_ref3) {
175 var expiration = _ref3.expiration,
176 setIsTokenValid = _ref3.setIsTokenValid,
177 validateTokenCall = _ref3.validateTokenCall;
178 return setIsTokenValid(validateTokenCall(expiration));
179};
180
181var configLanguage = (0, _i18n.getLanguage)();
182
183var NewPasswordPage = function NewPasswordPage(_ref4) {
184 var _storyLanguage;
185
186 var setPasswordCall = _ref4.setPasswordCall,
187 _ref4$validateTokenCa = _ref4.validateTokenCall,
188 validateTokenCall = _ref4$validateTokenCa === void 0 ? defaultValidateTokenCall : _ref4$validateTokenCa,
189 _ref4$loginPath = _ref4.loginPath,
190 loginPath = _ref4$loginPath === void 0 ? '/' : _ref4$loginPath,
191 token = _ref4.token,
192 expiration = _ref4.expiration,
193 storyLanguage = _ref4.storyLanguage,
194 isNeutral = _ref4.isNeutral;
195 var lang = (_storyLanguage = storyLanguage) !== null && _storyLanguage !== void 0 ? _storyLanguage : configLanguage;
196
197 var _useState = (0, _react.useState)(null),
198 _useState2 = _slicedToArray(_useState, 2),
199 errorMessage = _useState2[0],
200 setErrorMessage = _useState2[1];
201
202 var _useState3 = (0, _react.useState)(false),
203 _useState4 = _slicedToArray(_useState3, 2),
204 isFinished = _useState4[0],
205 setIsFinished = _useState4[1];
206
207 var _useState5 = (0, _react.useState)(false),
208 _useState6 = _slicedToArray(_useState5, 2),
209 isLoading = _useState6[0],
210 setIsLoading = _useState6[1];
211
212 var _useState7 = (0, _react.useState)(undefined),
213 _useState8 = _slicedToArray(_useState7, 2),
214 isTokenValid = _useState8[0],
215 setIsTokenValid = _useState8[1];
216
217 (0, _react.useEffect)(function () {
218 validateTokenEffect({
219 expiration: expiration,
220 validateTokenCall: validateTokenCall,
221 setIsTokenValid: setIsTokenValid
222 });
223 });
224 return _react["default"].createElement(_Page["default"], {
225 middle: true
226 }, _react["default"].createElement("div", {
227 style: {
228 textAlign: 'center'
229 }
230 }, (0, _cond["default"])([[isFinished, function () {
231 return _react["default"].createElement("div", null, (0, _i18n.getTranslation)(translations, lang, 'new password set'), _react["default"].createElement("br", null), _react["default"].createElement(_CustomButton["default"], {
232 component: _Link["default"],
233 to: loginPath,
234 variant: "contained",
235 color: !isNeutral ? 'primary' : 'secondary',
236 style: {
237 marginTop: 20
238 }
239 }, (0, _i18n.getTranslation)(translations, lang, 'log in')));
240 }], [isTokenValid === false, function () {
241 return _react["default"].createElement("div", null, (0, _i18n.getTranslation)(translations, lang, 'expired token message'));
242 }], [isLoading || isTokenValid === undefined, function () {
243 return _react["default"].createElement(_CircularProgress["default"], null);
244 }]], function () {
245 return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_Typography["default"], {
246 variant: "h6",
247 style: {
248 marginBottom: 24
249 }
250 }, (0, _i18n.getTranslation)(translations, lang, 'new password')), errorMessage && _react["default"].createElement(_Typography["default"], {
251 color: "error",
252 style: {
253 margin: '20px 0'
254 }
255 }, errorMessage), _react["default"].createElement("form", {
256 onSubmit: validateAndSubmit({
257 lang: lang,
258 setPasswordCall: setPasswordCall,
259 setErrorMessage: setErrorMessage,
260 setIsFinished: setIsFinished,
261 setIsLoading: setIsLoading,
262 token: token
263 })
264 }, _react["default"].createElement(_TextField["default"], {
265 label: (0, _i18n.getTranslation)(translations, lang, 'password'),
266 name: "password",
267 style: {
268 marginBottom: 20,
269 minWidth: 250
270 },
271 type: "password",
272 required: true
273 }), _react["default"].createElement("br", null), _react["default"].createElement(_TextField["default"], {
274 label: (0, _i18n.getTranslation)(translations, lang, 'password confirmation'),
275 name: "password-confirmation",
276 style: {
277 marginBottom: 20,
278 minWidth: 250
279 },
280 type: "password",
281 required: true
282 }), _react["default"].createElement("br", null), _react["default"].createElement(_CustomButton["default"], {
283 variant: "contained",
284 colorType: !isNeutral ? 'primary' : 'secondary',
285 type: "submit"
286 }, (0, _i18n.getTranslation)(translations, lang, 'validate'))));
287 })));
288};
289
290NewPasswordPage.propTypes = {
291 setPasswordCall: _propTypes["default"].func.isRequired,
292 validateTokenCall: _propTypes["default"].func,
293 token: _propTypes["default"].string.isRequired,
294 expiration: _propTypes["default"].string.isRequired,
295 loginPath: _propTypes["default"].string,
296 storyLanguage: _propTypes["default"].string,
297 isNeutral: _propTypes["default"].string.isRequired
298};
299var _default = NewPasswordPage;
300exports["default"] = _default;
\No newline at end of file