Skip to content

Commit b76a4b5

Browse files
feat: made mentors visibly reusable and implemented automatic clean up of unused mentor users
1 parent e56dc82 commit b76a4b5

File tree

4 files changed

+58
-31
lines changed

4 files changed

+58
-31
lines changed

packages/backend/seeds/users.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
"companyId": "expGermany",
2121
"course": "Trainee Course",
2222
"createdAt": "2019-08-01T11:25:18.000Z",
23-
"email": "trainee@exampleCompany.com",
23+
"email": "traineeZwei@exampleCompany.com",
2424
"firstName": "Trainee",
25-
"lastName": "Traineeson",
25+
"lastName": "Zwei",
2626
"language": "de",
2727
"startDate": "2022-08-01T22:00:00.000Z",
2828
"endDate": "2027-07-31T22:00:00.000Z",
2929
"theme": "light",
30-
"token": "123",
30+
"token": "1234",
3131
"type": "Trainee",
3232
"trainerId": "456"
3333
},
@@ -36,14 +36,14 @@
3636
"companyId": "expGermany",
3737
"course": "Trainee Course",
3838
"createdAt": "2019-08-01T11:25:18.000Z",
39-
"email": "trainee@exampleCompany.com",
39+
"email": "traineeDrei@exampleCompany.com",
4040
"firstName": "Trainee",
41-
"lastName": "Traineeson",
41+
"lastName": "Drei",
4242
"language": "de",
4343
"startDate": "2022-08-01T22:00:00.000Z",
4444
"endDate": "2027-07-31T22:00:00.000Z",
4545
"theme": "light",
46-
"token": "123",
46+
"token": "12345",
4747
"type": "Trainee",
4848
"trainerId": "456"
4949
},

packages/backend/src/resolvers/admin.resolver.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { parseISODateString } from '../utils/date'
1616
import { t } from '../i18n'
1717
import { deleteMentor, generateMentor, validateMentor } from '../services/mentor.service'
1818
import { allMentors, mentorById } from '../repositories/mentor.repo'
19+
import { papersByMentor } from '../repositories/paper.repo'
1920

2021
export const adminResolver: GqlResolvers<AdminContext> = {
2122
Admin: {},
@@ -29,6 +30,11 @@ export const adminResolver: GqlResolvers<AdminContext> = {
2930

3031
await Promise.all(
3132
users.map(async (user) => {
33+
if (isMentor(user)) {
34+
const papers = await papersByMentor(user.id)
35+
if (!papers || papers.filter((paper) => paper.status !== 'Archived').length === 0) await deleteMentor(user)
36+
}
37+
3238
if (!user.deleteAt) {
3339
return
3440
}

packages/components/src/paper-form.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ export const CreateBriefingLayout: React.FC<CreateBriefingLayoutProps> = ({
7474

7575
<StyledFormGridItem>{emptyFieldTrainee}</StyledFormGridItem>
7676

77-
<StyledFormGridItem>{firstNameMentorInput}</StyledFormGridItem>
78-
79-
<StyledFormGridItem>{lastNameMentorInput}</StyledFormGridItem>
80-
8177
<StyledFormGridItem>{emailMentorInput}</StyledFormGridItem>
8278

8379
<StyledFormGridItem>{emptyFieldMentor}</StyledFormGridItem>
8480

81+
<StyledFormGridItem>{firstNameMentorInput}</StyledFormGridItem>
82+
83+
<StyledFormGridItem>{lastNameMentorInput}</StyledFormGridItem>
84+
8585
<StyledFormGridItem>{customerInput}</StyledFormGridItem>
8686

8787
<StyledFormGridDateItem>

packages/frontend/src/components/paper-create-form.tsx

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import React from 'react'
1+
import React, { useState } from 'react'
22
import { useForm } from 'react-hook-form'
33
import { Input, Text, TextProps, DefaultTheme, Spacer, StyledSelect } from '@lara/components'
44

55
import strings from '../locales/localization'
66
import { PrimaryButton } from './button'
77
import { useValidationHelper } from '../helper/validation-helper'
8-
import { Trainer } from '../graphql'
8+
import { Trainer, useUserEmailPageMutation } from '../graphql'
99
import { CreateBriefingLayout } from '@lara/components/lib/paper-form'
1010

1111
interface CreateBriefingFormProps {
@@ -36,14 +36,18 @@ const inputLabelProps: TextProps = {
3636

3737
export const PaperCreateForm: React.FC<CreateBriefingFormProps> = ({ trainer, submit, blurSubmit }) => {
3838
const { validateEmail } = useValidationHelper()
39+
const [getUserByEmail] = useUserEmailPageMutation()
40+
const [nameInputDisabled, setNameInputDisabled] = useState(false)
3941

4042
const {
4143
register,
44+
setValue,
4245
handleSubmit,
4346
formState: { errors },
4447
} = useForm<CreateBriefingFormData>()
4548

4649
const onSubmit = handleSubmit((formdata) => {
50+
console.log('HELLO')
4751
setUpdating(true)
4852
submit(formdata).then(() => {
4953
setUpdating(false)
@@ -77,6 +81,40 @@ export const PaperCreateForm: React.FC<CreateBriefingFormProps> = ({ trainer, su
7781
</StyledSelect>
7882
</>
7983
}
84+
emailMentorInput={
85+
<>
86+
<Text color={getFontColor(errors.emailMentor)} {...inputLabelProps}>
87+
{strings.paper.createBriefing.emailMentor}
88+
</Text>
89+
<Input
90+
type="email"
91+
{...register('emailMentor', {
92+
required: true,
93+
validate: validateEmail,
94+
})}
95+
disabled={updating}
96+
error={Boolean(errors.emailMentor)}
97+
onBlur={async (e) => {
98+
if (e.target.value.trim() === '') {
99+
setNameInputDisabled(false)
100+
return
101+
}
102+
await getUserByEmail({
103+
variables: {
104+
email: e.target.value,
105+
},
106+
}).then((response) => {
107+
if (response.data?.getUserByEmail) {
108+
setValue('firstNameMentor', response.data.getUserByEmail.firstName, { shouldValidate: true })
109+
setValue('lastNameMentor', response.data.getUserByEmail.lastName, { shouldValidate: true })
110+
setNameInputDisabled(true)
111+
} else setNameInputDisabled(false)
112+
})
113+
if (blurSubmit) onSubmit()
114+
}}
115+
/>
116+
</>
117+
}
80118
firstNameMentorInput={
81119
<>
82120
<Text color={getFontColor(errors.firstNameMentor)} {...inputLabelProps}>
@@ -86,7 +124,7 @@ export const PaperCreateForm: React.FC<CreateBriefingFormProps> = ({ trainer, su
86124
{...register('firstNameMentor', {
87125
required: strings.validation.required,
88126
})}
89-
disabled={updating}
127+
disabled={nameInputDisabled}
90128
error={Boolean(errors.firstNameMentor)}
91129
onBlur={blurSubmit ? onSubmit : undefined}
92130
/>
@@ -102,29 +140,12 @@ export const PaperCreateForm: React.FC<CreateBriefingFormProps> = ({ trainer, su
102140
{...register('lastNameMentor', {
103141
required: strings.validation.required,
104142
})}
105-
disabled={updating}
143+
disabled={nameInputDisabled}
106144
error={Boolean(errors.lastNameMentor)}
107145
onBlur={blurSubmit ? onSubmit : undefined}
108146
/>
109147
</>
110148
}
111-
emailMentorInput={
112-
<>
113-
<Text color={getFontColor(errors.emailMentor)} {...inputLabelProps}>
114-
{strings.paper.createBriefing.emailMentor}
115-
</Text>
116-
<Input
117-
type="email"
118-
{...register('emailMentor', {
119-
required: true,
120-
validate: validateEmail,
121-
})}
122-
disabled={updating}
123-
error={Boolean(errors.emailMentor)}
124-
onBlur={blurSubmit ? onSubmit : undefined}
125-
/>
126-
</>
127-
}
128149
emptyFieldMentor={<></>}
129150
customerInput={
130151
<>

0 commit comments

Comments
 (0)