diff --git a/src/frontend/apps/desk/src/features/teams/components/CardCreateTeam.tsx b/src/frontend/apps/desk/src/features/teams/components/CardCreateTeam.tsx index a5e41cc..9cb0210 100644 --- a/src/frontend/apps/desk/src/features/teams/components/CardCreateTeam.tsx +++ b/src/frontend/apps/desk/src/features/teams/components/CardCreateTeam.tsx @@ -1,14 +1,16 @@ -import { Button, Input, Loader } from '@openfun/cunningham-react'; +import { Button } from '@openfun/cunningham-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import IconGroup from '@/assets/icons/icon-group2.svg'; -import { Box, Card, StyledLink, Text, TextErrors } from '@/components'; +import { Box, Card, StyledLink, Text } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; import { useCreateTeam } from '../api'; +import { InputTeamName } from './InputTeamName'; + export const CardCreateTeam = () => { const { t } = useTranslation(); const router = useRouter(); @@ -46,19 +48,10 @@ export const CardCreateTeam = () => { {t('Name the team')} - setTeamName(e.target.value)} - rightIcon={edit} + {...{ error, isError, isPending, setTeamName }} /> - {isError && error && } - {isPending && ( - - - - )} diff --git a/src/frontend/apps/desk/src/features/teams/components/InputTeamName.tsx b/src/frontend/apps/desk/src/features/teams/components/InputTeamName.tsx new file mode 100644 index 0000000..fe8df73 --- /dev/null +++ b/src/frontend/apps/desk/src/features/teams/components/InputTeamName.tsx @@ -0,0 +1,54 @@ +import { Input, Loader } from '@openfun/cunningham-react'; +import { useEffect, useState } from 'react'; + +import { APIError } from '@/api'; +import { Box, TextErrors } from '@/components'; + +interface InputTeamNameProps { + error: APIError | null; + isError: boolean; + isPending: boolean; + label: string; + setTeamName: (newTeamName: string) => void; + defaultValue?: string; +} + +export const InputTeamName = ({ + defaultValue, + error, + isError, + isPending, + label, + setTeamName, +}: InputTeamNameProps) => { + const [isInputError, setIsInputError] = useState(isError); + + useEffect(() => { + if (isError) { + setIsInputError(true); + } + }, [isError]); + + return ( + <> + { + setTeamName(e.target.value); + setIsInputError(false); + }} + rightIcon={edit} + state={isInputError ? 'error' : 'default'} + /> + {isError && error && } + {isPending && ( + + + + )} + + ); +}; diff --git a/src/frontend/apps/desk/src/features/teams/components/ModalUpdateTeam.tsx b/src/frontend/apps/desk/src/features/teams/components/ModalUpdateTeam.tsx index 529270e..81d28e3 100644 --- a/src/frontend/apps/desk/src/features/teams/components/ModalUpdateTeam.tsx +++ b/src/frontend/apps/desk/src/features/teams/components/ModalUpdateTeam.tsx @@ -1,21 +1,21 @@ import { Button, - Input, - Loader, Modal, ModalSize, VariantType, useToastProvider, } from '@openfun/cunningham-react'; import { t } from 'i18next'; -import { useEffect, useState } from 'react'; +import { useState } from 'react'; -import { Box, Text, TextErrors } from '@/components'; +import { Box, Text } from '@/components'; import useCunninghamTheme from '@/cunningham/useCunninghamTheme'; import { Team, useUpdateTeam } from '../api'; import IconEdit from '../assets/icon-edit.svg'; +import { InputTeamName } from './InputTeamName'; + interface ModalUpdateTeamProps { onClose: () => void; team: Team; @@ -23,8 +23,7 @@ interface ModalUpdateTeamProps { export const ModalUpdateTeam = ({ onClose, team }: ModalUpdateTeamProps) => { const { colorsTokens } = useCunninghamTheme(); - const [newTeamName, setNewTeamName] = useState(team.name); - const [isShowingError, setIsShowingError] = useState(false); + const [teamName, setTeamName] = useState(team.name); const { toast } = useToastProvider(); const { @@ -41,12 +40,6 @@ export const ModalUpdateTeam = ({ onClose, team }: ModalUpdateTeamProps) => { }, }); - useEffect(() => { - if (isError) { - setIsShowingError(true); - } - }, [isError]); - return ( { fullWidth onClick={() => updateTeam({ - name: newTeamName, + name: teamName, id: team.id, }) } @@ -93,24 +86,11 @@ export const ModalUpdateTeam = ({ onClose, team }: ModalUpdateTeamProps) => { {t('Enter the new name of the selected team')} - { - setNewTeamName(e.target.value); - setIsShowingError(false); - }} - rightIcon={edit} - state={isShowingError ? 'error' : undefined} + {...{ error, isError, isPending, setTeamName }} /> - {isError && error && } - {isPending && ( - - - - )} );