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 && (
-
-
-
- )}
);