{"version":3,"sources":["features/login/form.js","features/login/index.js","lib/achievement.js"],"names":["LoginForm","props","defaultState","submitting","forgottenPass","error","handleSubmit","e","preventDefault","state","forgotPassword","login","form","validateFields","err","values","a","async","setState","authService","username","password","clientStore","client","getBadges","completeAchievement","Http","get","encodeURIComponent","resetForm","notification","success","message","description","duration","reason","response","data","resetFields","goToForgotpassword","setFields","value","getFieldValue","errors","resetForgot","getFieldDecorator","this","onSubmit","Paragraph","type","Text","style","marginBottom","textAlign","Item","rules","required","prefix","color","placeholder","icon","htmlType","loading","onClick","Password","block","React","Component","create","LoginPage","adminOnly","customUrl","preferences","authMode","className","src","logoSrc","defaultSrc","alt","logoAlt","Title","level","name","isDefaultLogo","defaultAlt","title","frameBorder","height","width","customLoginURL","trophyIdentifier","trophy","badges","find","b","identifier","currentUser","id","post","achievement","trophyId","updateLessonAchievement","nb","nbAll","console","log","Math","ceil","updateTimeAchievement","totalDurations","actualDuration","i","forEach","d","length","time","split","seconds"],"mappings":"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","file":"static/js/login.4d8b4bf7.chunk.js","sourcesContent":["/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React from \"react\";\nimport { Form, Input, Icon, Button, Typography, notification } from \"antd\";\n\nimport authService from \"@lib/auth/authService\";\nimport clientStore from \"@features/client/models/store\";\nimport { completeAchievement } from \"@lib/achievement\";\nimport Http from \"@lib/http\";\n\nclass LoginForm extends React.Component {\n defaultState = {\n submitting: false,\n forgottenPass: false,\n error: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n ...this.defaultState,\n forgottenPass: this.props.forgotPassword,\n };\n }\n\n handleSubmit = (e) => {\n e.preventDefault();\n\n if (this.state.forgottenPass) this.forgotPassword();\n else this.login();\n };\n\n login = () => {\n this.props.form.validateFields(async (err, values) => {\n if (!err) {\n this.setState({ submitting: true, error: false });\n\n try {\n await authService.login(values.username, values.password);\n await clientStore.client.getBadges();\n await completeAchievement(\"activation\");\n } catch (error) {\n this.setState({\n submitting: false,\n error: \"Identifiant ou mot de passe incorrect !\",\n });\n }\n }\n });\n };\n\n forgotPassword = () => {\n this.props.form.validateFields(async (err, values) => {\n if (!err) {\n this.setState({ submitting: true });\n\n try {\n await Http.get(\n `/user/forget-password/${encodeURIComponent(values.username)}`\n );\n this.resetForm();\n notification.success({\n message: \"Un e-mail vous a été envoyé\",\n description:\n \"Suivez les instructions pour réinitialiser votre mot de passe\",\n duration: 5,\n });\n } catch (error) {\n this.setState({\n submitting: false,\n });\n const reason = error?.response?.data?.reason;\n switch (reason) {\n case \"USER_NOT_FOUND\":\n notification.error({\n message: \"Erreur\",\n description: \"Utilisateur inconnu. Contactez l'administrateur.\",\n });\n\n break;\n case \"USER_NO_EMAIL\":\n notification.error({\n message: \"Erreur\",\n description:\n \"Pas d'e-mail enregistré pour ce compte. Contactez l'administrateur.\",\n });\n break;\n default:\n break;\n }\n }\n }\n });\n };\n\n resetForm = () => {\n this.setState(this.defaultState);\n this.props.form.resetFields();\n };\n\n goToForgotpassword = () => {\n this.props.form.setFields({\n username: {\n value: this.props.form.getFieldValue(\"username\"),\n errors: null,\n },\n });\n this.setState({ forgottenPass: true, error: false });\n };\n resetForgot = () => this.setState({ forgottenPass: false });\n\n render() {\n const { getFieldDecorator } = this.props.form;\n\n return (\n
\n {this.state.error && (\n \n {this.state.error}\n \n )}\n\n {this.state.forgottenPass && (\n \n Saisissez votre e-mail ou identifiant pour recevoir un lien de\n réinitialisation\n \n )}\n\n \n {getFieldDecorator(\"username\", {\n rules: [\n {\n required: true,\n message: \"Veuillez entrer un identifiant ou un email\",\n },\n ],\n })(\n }\n placeholder=\"Identifiant ou email\"\n />\n )}\n \n\n {this.state.forgottenPass ? (\n \n \n Envoyer\n \n \n \n ) : (\n <>\n \n {getFieldDecorator(\"password\", {\n rules: [\n {\n required: true,\n message: \"Veuillez entrer un mot de passe\",\n },\n ],\n })(\n \n }\n type=\"password\"\n placeholder=\"Mot de passe\"\n />\n )}\n \n \n \n Se connecter\n \n Mot de passe oublié\n \n \n )}\n \n );\n }\n}\n\nexport default Form.create()(LoginForm);\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React from \"react\";\nimport { Typography } from \"antd\";\n\nimport LoginForm from \"./form\";\nimport clientStore, { defaultSrc, defaultAlt } from \"../client/models/store\";\n\nexport default function LoginPage({ forgotPassword, adminOnly, customUrl }) {\n const { client } = clientStore;\n\n if (client.preferences.authMode === \"CUSTOM\" && !adminOnly) {\n return (\n \n );\n }\n\n return (\n
\n
\n
\n
\n \n
\n {client && {client.name}}\n \n\n {client && !client.isDefaultLogo && (\n \n )}\n
\n
\n );\n}\n","import authService from \"@lib/auth/authService\";\nimport clientStore from \"@features/client/models/store\";\nimport Http from \"@lib/http\";\n\n// Achievements complétés de façon générale\nexport async function completeAchievement(trophyIdentifier) {\n const trophy = clientStore.client.badges.find(\n (b) => b.identifier === trophyIdentifier\n );\n if (trophy) {\n const response = await Http.get(\n `/achievement/${authService.currentUser.id}/${trophy.id}`\n );\n if (response.data) {\n if (response.data.value !== 100) {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: response.data.trophyId,\n value: 100,\n },\n });\n }\n } else {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: trophy.id,\n value: 100,\n },\n });\n }\n }\n}\n\n// Achievements des lessons complétés\nexport async function updateLessonAchievement(trophyIdentifier, nb, nbAll) {\n const trophy = clientStore.client.badges.find(\n (b) => b.identifier === trophyIdentifier\n );\n console.log(\"updateLessonAchievement\", trophy);\n if (trophy) {\n const response = await Http.get(\n `/achievement/${authService.currentUser.id}/${trophy.id}`\n );\n let value = Math.ceil((nb / nbAll) * 100);\n\n if (response.data) {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: trophy.id,\n value: response.data.value > value ? response.data.value : value,\n },\n });\n } else {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: trophy.id,\n value: value,\n },\n });\n }\n }\n}\n\n// Achievement du temps\nexport async function updateTimeAchievement(\n trophyIdentifier,\n totalDurations,\n nb\n) {\n const trophy = clientStore.client.badges.find(\n (b) => b.identifier === trophyIdentifier\n );\n console.log(\"updateTime\", trophy);\n if (trophy) {\n const response = await Http.get(\n `/achievement/${authService.currentUser.id}/${trophy.id}`\n );\n\n let duration = 900; // secondes, soit 15 minutes\n let actualDuration = 0;\n\n for (let i = 0; i < nb; i++) {\n duration += 300; // On ajoute 5 minutes par lesson\n }\n\n totalDurations.forEach((d) => {\n if (d.length === 0) return false;\n\n const time = d.split(\":\");\n const seconds = +time[0] * 60 * 60 + +time[1] * 60 + +time[2];\n\n actualDuration += seconds;\n });\n\n const value = (actualDuration / duration) * 100;\n\n if (response.data) {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: trophy.id,\n value: response.data.value > value ? response.data.value : value,\n },\n });\n } else {\n await Http.post(`/achievement`, {\n achievement: {\n trophyId: trophy.id,\n value: value,\n },\n });\n }\n }\n}\n"],"sourceRoot":""}