Skip to content

Commit 689c9c5

Browse files
committed
Change password modal
1 parent 9b074de commit 689c9c5

File tree

7 files changed

+92
-63
lines changed

7 files changed

+92
-63
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

client/apollo/cache/modal/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { makeVar } from '@apollo/client';
22

33
export type ModalNameType =
4+
| 'changePassword'
45
| 'createLesson'
56
| 'login'
67
| 'register'
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { Form, Formik } from 'formik';
2+
import { useRouter } from 'next/router';
3+
import React from 'react';
4+
5+
import { InitialModalState, modalVar } from '👨‍💻apollo/cache/modal';
6+
import InputField from '👨‍💻components/Form/InputField';
7+
import { useChangePasswordMutation } from '👨‍💻generated/graphql';
8+
import { toErrorMap } from '👨‍💻utils/index';
9+
10+
const ChangePassword: React.FC<Props> = () => {
11+
const router = useRouter();
12+
const tempPw = modalVar().data;
13+
const [changePassword] = useChangePasswordMutation();
14+
15+
return (
16+
<Formik
17+
initialValues={{ newPassword: '', tempPw }}
18+
onSubmit={async (values, { setErrors }) => {
19+
const { data } = await changePassword({
20+
variables: {
21+
...values,
22+
token: tempPw,
23+
},
24+
});
25+
if (data?.changePassword.errors) {
26+
setErrors(toErrorMap(data.changePassword.errors));
27+
}
28+
29+
console.log(data);
30+
if (data?.changePassword.user) {
31+
router.push('/');
32+
modalVar(InitialModalState);
33+
}
34+
}}
35+
>
36+
{({ isSubmitting }) => (
37+
<Form className="max-w-lg mx-auto p-6 lg:px-8">
38+
<h1 className="text-2xl text-text-primary font-semibold justify-center flex mb-4">
39+
Change Password
40+
</h1>
41+
<div className="px-4 sm:p-6">
42+
<div className="grid gap-3">
43+
<InputField
44+
label="New Password"
45+
name="newPassword"
46+
type="password"
47+
></InputField>
48+
</div>
49+
</div>
50+
<div className="px-4 sm:px-6">
51+
<button
52+
className="w-full justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-primary bg-accent focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50"
53+
disabled={isSubmitting}
54+
type="submit"
55+
>
56+
Submit
57+
</button>
58+
</div>
59+
</Form>
60+
)}
61+
</Formik>
62+
);
63+
};
64+
65+
type Props = {};
66+
67+
export default ChangePassword;

client/modals/ResetPasswordSent/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { modalVar } from '👨‍💻apollo/cache/modal';
55
const ResetPasswordSent: React.FC<Props> = () => {
66
return (
77
<div className="max-w-lg mx-auto p-6 lg:px-8">
8+
<div className="text-lg">💌</div>
89
<div className="text-text-primary">
910
Password reset link sent to {modalVar().data}
1011
</div>

client/modals/index.tsx

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import { Transition } from '@headlessui/react';
22
import React, { useCallback, useEffect } from 'react';
33

44
import Icon from '👨‍💻components/Icon';
5+
import ChangePassword from '👨‍💻modals/ChangePassword';
6+
import CreateLesson from '👨‍💻modals/CreateLesson';
7+
import Login from '👨‍💻modals/Login';
8+
import Register from '👨‍💻modals/Register';
59
import RegisterAfterPreview from '👨‍💻modals/RegisterAfterPreview';
610
import ResetPasswordSent from '👨‍💻modals/ResetPasswordSent';
711

812
import { InitialModalState, modalVar } from '../apollo/cache/modal';
913
import { useModalQuery } from '../generated/graphql';
10-
import CreateLesson from './CreateLesson';
11-
import Login from './Login';
12-
import Register from './Register';
1314

1415
const Modals: React.FC<Props> = () => {
1516
const { data } = useModalQuery();
@@ -79,7 +80,7 @@ const Modals: React.FC<Props> = () => {
7980
role="dialog"
8081
>
8182
<div
82-
className="absolute -top-3 -right-3 flex items-center justify-center bg-bg-nav-offset w-10 h-10 rounded-full"
83+
className="absolute -top-3 -right-3 flex items-center justify-center bg-bg-primary w-10 h-10 rounded-full"
8384
onClick={() => modalVar(InitialModalState)}
8485
>
8586
<Icon
@@ -88,12 +89,11 @@ const Modals: React.FC<Props> = () => {
8889
/>
8990
</div>
9091
{/* eslint-disable */}
92+
{data?.modal?.name === 'changePassword' && <ChangePassword />}
9193
{data?.modal?.name === 'createLesson' && <CreateLesson />}
9294
{data?.modal?.name === 'login' && <Login />}
9395
{data?.modal?.name === 'register' && <Register />}
94-
{data?.modal?.name === 'registerAfterPreview' && (
95-
<RegisterAfterPreview />
96-
)}
96+
{data?.modal?.name === 'registerAfterPreview' && <RegisterAfterPreview />}
9797
{data?.modal?.name === 'resetPasswordSent' && <ResetPasswordSent />}
9898
{/* eslint-enable */}
9999
</div>

client/pages/change-password/[token].tsx

+12-55
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,22 @@
1-
import { Form, Formik } from 'formik';
21
import { NextPage } from 'next';
32
import { useRouter } from 'next/router';
4-
import React from 'react';
3+
import React, { useEffect } from 'react';
54

6-
import InputField from '../../components/Form/InputField';
7-
import { useChangePasswordMutation } from '../../generated/graphql';
8-
import { toErrorMap } from '../../utils';
5+
import { modalVar } from '👨‍💻apollo/cache/modal';
96

107
const ChangePassword: NextPage<{ token: string }> = (props) => {
118
const router = useRouter();
12-
const [changePassword] = useChangePasswordMutation();
9+
// const [changePassword] = useChangePasswordMutation();
10+
useEffect(() => {
11+
modalVar({
12+
callback: () => null,
13+
data: props.token,
14+
name: 'changePassword',
15+
});
16+
router.replace('/');
17+
}, []);
1318

14-
return (
15-
<Formik
16-
initialValues={{ newPassword: '', token: props.token }}
17-
onSubmit={async (values, { setErrors }) => {
18-
const { data } = await changePassword({
19-
variables: {
20-
...values,
21-
},
22-
});
23-
if (data?.changePassword.errors) {
24-
setErrors(toErrorMap(data.changePassword.errors));
25-
}
26-
27-
if (data?.changePassword.user) {
28-
router.push('/');
29-
}
30-
}}
31-
>
32-
{({ errors, isSubmitting }) => (
33-
<Form>
34-
<div className="max-w-2xl mx-auto py-6 sm:px-6 lg:px-8">
35-
<h1 className="text-2xl text-blue-800 font-semibold justify-center flex mb-4">
36-
Change Password
37-
</h1>
38-
<div className="shadow overflow-hidden sm:rounded-md">
39-
<div className="px-4 py-5 sm:p-6">
40-
<div className="grid gap-6">
41-
<InputField
42-
label="New password"
43-
name="newPassword"
44-
type="password"
45-
/>
46-
</div>
47-
</div>
48-
<div className="px-4 py-3 bg-gray-50 text-right sm:px-6">
49-
<button
50-
className="inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-primary bg-accent focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50"
51-
disabled={isSubmitting}
52-
type="submit"
53-
>
54-
Change
55-
</button>
56-
</div>
57-
</div>
58-
</div>
59-
</Form>
60-
)}
61-
</Formik>
62-
);
19+
return null;
6320
};
6421

6522
ChangePassword.getInitialProps = ({ query }) => ({

server/.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
.env
22
dist/
3-
node_modules/
3+
node_modules/
4+
5+
.DS_Store

0 commit comments

Comments
 (0)