{"version":3,"file":"password_link_resent_content-CpmNZgo8.js","sources":["../../app/javascript/components/password_reset/components/set_new_password_content.tsx","../../app/javascript/components/password_reset/components/new_password_set_content.tsx","../../app/javascript/components/password_reset/components/password_expired_content.tsx","../../app/javascript/components/password_reset/components/password_link_resent_content.tsx"],"sourcesContent":["import React, { FormEvent, useCallback, useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport * as yup from \"yup\";\nimport { useSnackbar } from \"baseui/snackbar\";\nimport { snackBarOverrides } from \"../../components/base_ui/progress_and_validation/snackbar\";\nimport FormControl from \"../../components/base_ui/inputs/form_control\";\nimport { Button } from \"../../components/base_ui/inputs/button\";\nimport Input from \"../../components/base_ui/inputs/input\";\nimport { StyledHeading } from \"../../shared/login_and_sign_up/styled\";\nimport { passwordRegex, passwordRegexMismatchMessage } from \"../../../utils/string_utils\";\nimport useForm from \"../../shared/use_form\";\nimport { Misuse } from \"@carbon/icons-react\";\nimport { Theme } from \"baseui/styles\";\nimport { ParagraphMedium } from \"baseui/typography\";\n\nexport const StyledParagraphMedium = styled(ParagraphMedium)`\n margin-top: 0;\n margin-bottom: ${({ theme }) => theme.sizing.scale800};\n color: ${({ theme }) => theme.colors.contentTertiary};\n\n .styled-highlighted-paragraph {\n font-weight: 700;\n }\n`;\n\nconst Form = styled.form``;\n\nconst FormControlOverrides = {\n ControlContainer: {\n style: ({ $theme }: { $theme: Theme }) => {\n return {\n marginBottom: $theme.sizing.scale800,\n };\n },\n },\n Caption: {\n style: {\n \"margin-bottom\": \"0\",\n },\n },\n Label: {\n style: {\n textTransform: \"none\",\n },\n },\n};\n\nconst schema = yup.object().shape({\n password: yup.string().required().matches(passwordRegex, passwordRegexMismatchMessage),\n confirmPassword: yup\n .string()\n .required()\n .oneOf([yup.ref(\"password\")], \"Passwords do not match\"),\n});\n\nexport default function SetNewPasswordContent({\n actionKey,\n title,\n description,\n setPasswordEndpointUrl,\n onSetPasswordSuccessRedirectUrl,\n}: {\n actionKey: string;\n title: string;\n description?: string;\n setPasswordEndpointUrl: string;\n onSetPasswordSuccessRedirectUrl: string;\n}) {\n const navigate = useNavigate();\n const { enqueue } = useSnackbar();\n const [isFetching, setIsFetching] = useState(false);\n\n const initialFormData = {\n password: \"\",\n confirmPassword: \"\",\n };\n\n const { form, values, validateForm } = useForm(initialFormData, schema, true);\n\n const save = useCallback(\n async (event: FormEvent) => {\n event.preventDefault();\n\n const showErrorSnackbar = () => {\n setIsFetching(false);\n enqueue({\n message:\n \"Updating user password failed, please try again or notify help@mentorcollective.org\",\n startEnhancer: () => <Misuse size={24} />,\n overrides: snackBarOverrides,\n });\n };\n\n try {\n await validateForm();\n } catch (error) {\n return;\n }\n\n try {\n setIsFetching(true);\n\n const response = await fetch(setPasswordEndpointUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n action_key: actionKey,\n password: values.password,\n password_confirmation: values.confirmPassword,\n }),\n });\n\n const parsedResponse = await response.json();\n\n setIsFetching(false);\n\n if (parsedResponse.isSuccess === false) {\n showErrorSnackbar();\n } else {\n navigate(onSetPasswordSuccessRedirectUrl);\n }\n } catch (error) {\n showErrorSnackbar();\n }\n },\n [\n enqueue,\n validateForm,\n setPasswordEndpointUrl,\n actionKey,\n values.password,\n values.confirmPassword,\n navigate,\n onSetPasswordSuccessRedirectUrl,\n ],\n );\n\n return (\n <>\n <StyledHeading>{title}</StyledHeading>\n {description && <StyledParagraphMedium>{description}</StyledParagraphMedium>}\n <Form>\n <FormControl\n label={\"Enter New Password\"}\n caption={\n \"Must be 10 or more characters and contain at least 1 uppercase character, 1 number, and 1 special character.\"\n }\n error={form.password.errors.join(\" \")}\n overrides={FormControlOverrides}\n >\n <Input\n required\n type=\"password\"\n aria-label=\"password input\"\n dataTest={\"password-input\"}\n value={form.password.value}\n onChange={({ currentTarget: { value } }) => form.password.set(value)}\n placeholder=\"Enter your new password\"\n />\n </FormControl>\n <FormControl\n label={\"Confirm New Password\"}\n error={form.confirmPassword.errors.join(\" \")}\n overrides={FormControlOverrides}\n >\n <Input\n required\n type=\"password\"\n aria-label=\"confirm password input\"\n dataTest={\"confirm-password-input\"}\n value={form.confirmPassword.value || \"\"}\n onChange={({ currentTarget: { value } }) => {\n form.confirmPassword.set(value);\n }}\n placeholder=\"Confirm your new password\"\n />\n </FormControl>\n\n <Button\n isLoading={isFetching}\n onClick={save}\n isStretched={true}\n data-test=\"set-password-button\"\n >\n Set New Password\n </Button>\n </Form>\n </>\n );\n}\n","import React from \"react\";\nimport { StyledHeading } from \"../../shared/login_and_sign_up/styled\";\nimport { StyledParagraphMedium } from \"./set_new_password_content\";\nimport { Button } from \"../../components/base_ui/inputs/button\";\n\nexport default function NewPasswordSetContent({\n baseUrl,\n title,\n description,\n logInButtonText = \"Sign In\",\n}: {\n baseUrl: string;\n title: string;\n description: string;\n logInButtonText?: string;\n}) {\n // Disallow back button to go back to the form, route to sign in page instead.\n window.onpopstate = () => {\n window.location.replace(baseUrl);\n };\n\n return (\n <>\n <StyledHeading>{title}</StyledHeading>\n <StyledParagraphMedium>{description}</StyledParagraphMedium>\n <Button\n onClick={() => {\n window.location.replace(baseUrl);\n }}\n data-test=\"log-in-to-dashboard-button\"\n >\n {logInButtonText}\n </Button>\n </>\n );\n}\n","import React, { useState } from \"react\";\nimport { StyledHeading } from \"../../shared/login_and_sign_up/styled\";\nimport { StyledParagraphMedium } from \"./set_new_password_content\";\nimport { Button } from \"../../components/base_ui/inputs/button\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Misuse } from \"@carbon/icons-react\";\nimport { snackBarOverrides } from \"../../components/base_ui/progress_and_validation/snackbar\";\nimport { useSnackbar } from \"baseui/snackbar\";\n\nexport default function PasswordExpiredContent({\n actionKey,\n title,\n description,\n requestAnotherLinkEndpointUrl,\n onLinkRequestSuccessRedirectUrl,\n}: {\n actionKey: string;\n title: string;\n description: React.ReactNode;\n requestAnotherLinkEndpointUrl: string;\n onLinkRequestSuccessRedirectUrl: string;\n}) {\n const [isFetching, setIsFetching] = useState(false);\n const navigate = useNavigate();\n const { enqueue } = useSnackbar();\n\n return (\n <>\n <StyledHeading data-test=\"password-expired-heading\">{title}</StyledHeading>\n <StyledParagraphMedium>{description}</StyledParagraphMedium>\n <Button\n data-test=\"request-another-link-button\"\n isLoading={isFetching}\n onClick={async () => {\n setIsFetching(true);\n const response = await fetch(requestAnotherLinkEndpointUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n action_key: actionKey,\n }),\n });\n\n const parsedResponse = await response.json();\n\n setIsFetching(false);\n\n if (parsedResponse.isSuccess === false) {\n enqueue({\n message:\n \"Requesting another link failed, please try again or notify help@mentorcollective.org\",\n startEnhancer: () => <Misuse size={24} />,\n overrides: snackBarOverrides,\n });\n } else {\n navigate(onLinkRequestSuccessRedirectUrl);\n }\n }}\n >\n Request Another Link\n </Button>\n </>\n );\n}\n","import React from \"react\";\nimport { StyledHeading } from \"../../shared/login_and_sign_up/styled\";\nimport { StyledParagraphMedium } from \"./set_new_password_content\";\n\nexport default function PasswordLinkResentContent({\n title,\n description,\n}: {\n title: string;\n description: string;\n}) {\n return (\n <>\n <StyledHeading data-test=\"password-resent-heading\">{title}</StyledHeading>\n <StyledParagraphMedium>{description}</StyledParagraphMedium>\n </>\n );\n}\n"],"names":["StyledParagraphMedium","styled","ParagraphMedium","theme","Form","FormControlOverrides","$theme","schema","yup.object","yup.string","passwordRegex","passwordRegexMismatchMessage","yup.ref","SetNewPasswordContent","actionKey","title","description","setPasswordEndpointUrl","onSetPasswordSuccessRedirectUrl","navigate","useNavigate","enqueue","useSnackbar","isFetching","setIsFetching","useState","initialFormData","form","values","validateForm","useForm","save","useCallback","event","showErrorSnackbar","jsx","Misuse","snackBarOverrides","parsedResponse","jsxs","Fragment","StyledHeading","FormControl","Input","value","Button","NewPasswordSetContent","baseUrl","logInButtonText","PasswordExpiredContent","requestAnotherLinkEndpointUrl","onLinkRequestSuccessRedirectUrl","PasswordLinkResentContent"],"mappings":"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"}