1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _react = _interopRequireWildcard(require("react"));
|
9 |
|
10 | var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress"));
|
11 |
|
12 | var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
|
13 |
|
14 | var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
15 |
|
16 | var _Link = _interopRequireDefault(require("react-router-dom/Link"));
|
17 |
|
18 | var _formData2 = _interopRequireDefault(require("sharyn/client/form-data"));
|
19 |
|
20 | var _Page = _interopRequireDefault(require("sharyn/components/Page"));
|
21 |
|
22 | var _cond = _interopRequireDefault(require("sharyn/util/cond"));
|
23 |
|
24 | var _i18n = require("../i18n");
|
25 |
|
26 | var _CustomButton = _interopRequireDefault(require("./CustomButton"));
|
27 |
|
28 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
29 |
|
30 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
31 |
|
32 | function _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 |
|
34 | function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
35 |
|
36 | function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
37 |
|
38 | function _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 |
|
40 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
41 |
|
42 | function 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 |
|
44 | function _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 |
|
46 | var 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 |
|
99 | var 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 |
|
108 | function () {
|
109 | var _ref2 = _asyncToGenerator(
|
110 |
|
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 |
|
170 | var defaultValidateTokenCall = function defaultValidateTokenCall(expiration) {
|
171 | return new Date().getTime() < new Date(expiration).getTime();
|
172 | };
|
173 |
|
174 | var validateTokenEffect = function validateTokenEffect(_ref3) {
|
175 | var expiration = _ref3.expiration,
|
176 | setIsTokenValid = _ref3.setIsTokenValid,
|
177 | validateTokenCall = _ref3.validateTokenCall;
|
178 | return setIsTokenValid(validateTokenCall(expiration));
|
179 | };
|
180 |
|
181 | var configLanguage = (0, _i18n.getLanguage)();
|
182 |
|
183 | var 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 |
|
290 | NewPasswordPage.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 | };
|
299 | var _default = NewPasswordPage;
|
300 | exports["default"] = _default; |
\ | No newline at end of file |