From 0983e5f44dce266faba2c9736bf58289433aafc5 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Mon, 16 Jun 2025 17:19:44 +0530 Subject: [PATCH] [WEB-4281] chore: project error message updated (#7190) * chore: project error message updated * fix: error message for project creation * fix: incorrect error code * chore: code refactor * chore: code refactor --------- Co-authored-by: sangeethailango --- apiserver/plane/app/views/project/base.py | 10 +++++-- .../i18n/src/locales/cs/translations.json | 2 ++ .../i18n/src/locales/de/translations.json | 4 ++- .../i18n/src/locales/en/translations.json | 2 ++ .../i18n/src/locales/es/translations.json | 2 ++ .../i18n/src/locales/fr/translations.json | 2 ++ .../i18n/src/locales/id/translations.json | 2 ++ .../i18n/src/locales/it/translations.json | 2 ++ .../i18n/src/locales/ja/translations.json | 2 ++ .../i18n/src/locales/ko/translations.json | 2 ++ .../i18n/src/locales/pl/translations.json | 2 ++ .../i18n/src/locales/pt-BR/translations.json | 2 ++ .../i18n/src/locales/ro/translations.json | 2 ++ .../i18n/src/locales/ru/translations.json | 2 ++ .../i18n/src/locales/sk/translations.json | 2 ++ .../i18n/src/locales/tr-TR/translations.json | 2 ++ .../i18n/src/locales/ua/translations.json | 2 ++ .../i18n/src/locales/vi-VN/translations.json | 2 ++ .../i18n/src/locales/zh-CN/translations.json | 2 ++ .../i18n/src/locales/zh-TW/translations.json | 2 ++ web/ce/components/projects/create/root.tsx | 29 ++++++++++++------- 21 files changed, 65 insertions(+), 14 deletions(-) diff --git a/apiserver/plane/app/views/project/base.py b/apiserver/plane/app/views/project/base.py index 8e4ea52464..2728bf4de4 100644 --- a/apiserver/plane/app/views/project/base.py +++ b/apiserver/plane/app/views/project/base.py @@ -341,7 +341,10 @@ class ProjectViewSet(BaseViewSet): except IntegrityError as e: if "already exists" in str(e): return Response( - {"name": "The project name is already taken"}, + { + "name": "The project name is already taken", + "code": "PROJECT_NAME_ALREADY_EXIST", + }, status=status.HTTP_409_CONFLICT, ) except Workspace.DoesNotExist: @@ -350,7 +353,10 @@ class ProjectViewSet(BaseViewSet): ) except serializers.ValidationError: return Response( - {"identifier": "The project identifier is already taken"}, + { + "identifier": "The project identifier is already taken", + "code": "PROJECT_IDENTIFIER_ALREADY_EXIST", + }, status=status.HTTP_409_CONFLICT, ) diff --git a/packages/i18n/src/locales/cs/translations.json b/packages/i18n/src/locales/cs/translations.json index 5997659160..396ca03e50 100644 --- a/packages/i18n/src/locales/cs/translations.json +++ b/packages/i18n/src/locales/cs/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Nepodařilo se odstranit projekt z oblíbených. Zkuste to prosím znovu.", "project_created_successfully": "Projekt úspěšně vytvořen", "project_created_successfully_description": "Projekt byl úspěšně vytvořen. Nyní můžete začít přidávat pracovní položky.", + "project_name_already_taken": "Název projektu už je zabraný.", + "project_identifier_already_taken": "Identifikátor projektu už je zabraný.", "project_cover_image_alt": "Úvodní obrázek projektu", "name_is_required": "Název je povinný", "title_should_be_less_than_255_characters": "Název by měl být kratší než 255 znaků", diff --git a/packages/i18n/src/locales/de/translations.json b/packages/i18n/src/locales/de/translations.json index 1cac1d99f5..1b6e4778e1 100644 --- a/packages/i18n/src/locales/de/translations.json +++ b/packages/i18n/src/locales/de/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Projekt konnte nicht aus den Favoriten entfernt werden. Bitte versuchen Sie es erneut.", "project_created_successfully": "Projekt erfolgreich erstellt", "project_created_successfully_description": "Das Projekt wurde erfolgreich erstellt. Sie können nun Arbeitselemente hinzufügen.", + "project_name_already_taken": "Der Projektname ist bereits vergeben.", + "project_identifier_already_taken": "Der Projekt-Identifier ist bereits vergeben.", "project_cover_image_alt": "Titelbild des Projekts", "name_is_required": "Name ist erforderlich", "title_should_be_less_than_255_characters": "Der Titel sollte weniger als 255 Zeichen enthalten", @@ -2468,4 +2470,4 @@ "plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane ist nicht gestartet. Dies könnte daran liegen, dass einer oder mehrere Plane-Services nicht starten konnten.", "choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Wählen Sie View Logs aus setup.sh und Docker-Logs, um sicherzugehen." } -} \ No newline at end of file +} diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index 654ce3cc6d..fafed9c776 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -153,6 +153,8 @@ "failed_to_remove_project_from_favorites": "Couldn't remove the project from favorites. Please try again.", "project_created_successfully": "Project created successfully", "project_created_successfully_description": "Project created successfully. You can now start adding work items to it.", + "project_name_already_taken": "The project name is already taken.", + "project_identifier_already_taken": "The project identifier is already taken.", "project_cover_image_alt": "Project cover image", "name_is_required": "Name is required", "title_should_be_less_than_255_characters": "Title should be less than 255 characters", diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json index 97f0792f29..49ca53ea1e 100644 --- a/packages/i18n/src/locales/es/translations.json +++ b/packages/i18n/src/locales/es/translations.json @@ -318,6 +318,8 @@ "failed_to_remove_project_from_favorites": "No se pudo eliminar el proyecto de favoritos. Por favor, inténtalo de nuevo.", "project_created_successfully": "Proyecto creado exitosamente", "project_created_successfully_description": "Proyecto creado exitosamente. Ahora puedes comenzar a agregar elementos de trabajo.", + "project_name_already_taken": "El nombre del proyecto ya está en uso.", + "project_identifier_already_taken": "El identificador del proyecto ya está en uso.", "project_cover_image_alt": "Imagen de portada del proyecto", "name_is_required": "El nombre es requerido", "title_should_be_less_than_255_characters": "El título debe tener menos de 255 caracteres", diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json index 9fce5a0020..e42db2c52e 100644 --- a/packages/i18n/src/locales/fr/translations.json +++ b/packages/i18n/src/locales/fr/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Impossible de supprimer le projet des favoris. Veuillez réessayer.", "project_created_successfully": "Projet créé avec succès", "project_created_successfully_description": "Projet créé avec succès. Vous pouvez maintenant commencer à ajouter des éléments de travail.", + "project_name_already_taken": "Le nom du projet est déjà pris.", + "project_identifier_already_taken": "L’identifiant du projet est déjà pris.", "project_cover_image_alt": "Image de couverture du projet", "name_is_required": "Le nom est requis", "title_should_be_less_than_255_characters": "Le titre doit faire moins de 255 caractères", diff --git a/packages/i18n/src/locales/id/translations.json b/packages/i18n/src/locales/id/translations.json index 87c4a952f1..372aefde9a 100644 --- a/packages/i18n/src/locales/id/translations.json +++ b/packages/i18n/src/locales/id/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Tidak dapat menghapus proyek dari favorit. Silakan coba lagi.", "project_created_successfully": "Proyek berhasil dibuat", "project_created_successfully_description": "Proyek berhasil dibuat. Anda sekarang dapat mulai menambahkan item kerja ke dalamnya.", + "project_name_already_taken": "Nama proyek sudah digunakan", + "project_identifier_already_taken": "ID proyek sudah digunakan", "project_cover_image_alt": "Gambar sampul proyek", "name_is_required": "Nama diperlukan", "title_should_be_less_than_255_characters": "Judul harus kurang dari 255 karakter", diff --git a/packages/i18n/src/locales/it/translations.json b/packages/i18n/src/locales/it/translations.json index 75df8e9b54..b859ce2176 100644 --- a/packages/i18n/src/locales/it/translations.json +++ b/packages/i18n/src/locales/it/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Impossibile rimuovere il progetto dai preferiti. Per favore, riprova.", "project_created_successfully": "Progetto creato con successo", "project_created_successfully_description": "Progetto creato con successo. Ora puoi iniziare ad aggiungere elementi di lavoro.", + "project_name_already_taken": "Il nome del progetto è già stato utilizzato.", + "project_identifier_already_taken": "L'identificatore del progetto è già stato utilizzato.", "project_cover_image_alt": "Immagine di copertina del progetto", "name_is_required": "Il nome è obbligatorio", "title_should_be_less_than_255_characters": "Il titolo deve contenere meno di 255 caratteri", diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json index e7610eac3d..4c6f27a6ef 100644 --- a/packages/i18n/src/locales/ja/translations.json +++ b/packages/i18n/src/locales/ja/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "プロジェクトをお気に入りから削除できませんでした。もう一度お試しください。", "project_created_successfully": "プロジェクトが正常に作成されました", "project_created_successfully_description": "プロジェクトが正常に作成されました。作業項目を追加できるようになりました。", + "project_name_already_taken": "プロジェクト名は既に使用されています。", + "project_identifier_already_taken": "プロジェクト識別子は既に使用されています。", "project_cover_image_alt": "プロジェクトのカバー画像", "name_is_required": "名前は必須です", "title_should_be_less_than_255_characters": "タイトルは255文字未満である必要があります", diff --git a/packages/i18n/src/locales/ko/translations.json b/packages/i18n/src/locales/ko/translations.json index 6100f3fd65..ee1f61adcd 100644 --- a/packages/i18n/src/locales/ko/translations.json +++ b/packages/i18n/src/locales/ko/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "프로젝트를 즐겨찾기에서 제거하지 못했습니다. 다시 시도해주세요.", "project_created_successfully": "프로젝트가 성공적으로 생성되었습니다", "project_created_successfully_description": "프로젝트가 성공적으로 생성되었습니다. 이제 작업 항목을 추가할 수 있습니다.", + "project_name_already_taken": "프로젝트 이름이 이미 사용 중입니다.", + "project_identifier_already_taken": "프로젝트 식별자가 이미 사용 중입니다.", "project_cover_image_alt": "프로젝트 커버 이미지", "name_is_required": "이름이 필요합니다", "title_should_be_less_than_255_characters": "제목은 255자 미만이어야 합니다", diff --git a/packages/i18n/src/locales/pl/translations.json b/packages/i18n/src/locales/pl/translations.json index 7cd8ba385b..b26e6e2f42 100644 --- a/packages/i18n/src/locales/pl/translations.json +++ b/packages/i18n/src/locales/pl/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Nie udało się usunąć projektu z ulubionych. Spróbuj ponownie.", "project_created_successfully": "Projekt utworzono pomyślnie", "project_created_successfully_description": "Projekt został pomyślnie utworzony. Teraz możesz dodawać elementy pracy.", + "project_name_already_taken": "Nazwa projektu jest już zajęta.", + "project_identifier_already_taken": "Identyfikator projektu jest już zajęty.", "project_cover_image_alt": "Obraz w tle projektu", "name_is_required": "Nazwa jest wymagana", "title_should_be_less_than_255_characters": "Nazwa musi mieć mniej niż 255 znaków", diff --git a/packages/i18n/src/locales/pt-BR/translations.json b/packages/i18n/src/locales/pt-BR/translations.json index f640a9f015..6e7f216abf 100644 --- a/packages/i18n/src/locales/pt-BR/translations.json +++ b/packages/i18n/src/locales/pt-BR/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Não foi possível remover o projeto dos favoritos. Por favor, tente novamente.", "project_created_successfully": "Projeto criado com sucesso", "project_created_successfully_description": "Projeto criado com sucesso. Agora você pode começar a adicionar itens de trabalho a ele.", + "project_name_already_taken": "O nome do projeto já está em uso.", + "project_identifier_already_taken": "O identificador do projeto já está em uso.", "project_cover_image_alt": "Imagem de capa do projeto", "name_is_required": "Nome é obrigatório", "title_should_be_less_than_255_characters": "O título deve ter menos de 255 caracteres", diff --git a/packages/i18n/src/locales/ro/translations.json b/packages/i18n/src/locales/ro/translations.json index fd59eb3e82..8f40c0a227 100644 --- a/packages/i18n/src/locales/ro/translations.json +++ b/packages/i18n/src/locales/ro/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Nu s-a putut elimina proiectul din favorite. Încearcă din nou.", "project_created_successfully": "Proiect creat cu succes", "project_created_successfully_description": "Proiect creat cu succes. Poți începe să adaugi activități în el.", + "project_name_already_taken": "Numele proiectului este deja folosit.", + "project_identifier_already_taken": "Identificatorul proiectului este deja folosit.", "project_cover_image_alt": "Coperta proiectului", "name_is_required": "Numele este obligatoriu", "title_should_be_less_than_255_characters": "Titlul trebuie să conțină mai puțin de 255 de caractere", diff --git a/packages/i18n/src/locales/ru/translations.json b/packages/i18n/src/locales/ru/translations.json index 4dcb5d0e67..1981999b7b 100644 --- a/packages/i18n/src/locales/ru/translations.json +++ b/packages/i18n/src/locales/ru/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Не удалось удалить проект из избранного. Попробуйте снова.", "project_created_successfully": "Проект успешно создан", "project_created_successfully_description": "Проект успешно создан. Теперь вы можете добавлять рабочие элементы.", + "project_name_already_taken": "Имя проекта уже используется.", + "project_identifier_already_taken": "Идентификатор проекта уже используется.", "project_cover_image_alt": "Обложка проекта", "name_is_required": "Требуется имя", "title_should_be_less_than_255_characters": "Заголовок должен быть короче 255 символов", diff --git a/packages/i18n/src/locales/sk/translations.json b/packages/i18n/src/locales/sk/translations.json index e3c3e864e5..af6971aaef 100644 --- a/packages/i18n/src/locales/sk/translations.json +++ b/packages/i18n/src/locales/sk/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Nepodarilo sa odstrániť projekt z obľúbených. Skúste to prosím znova.", "project_created_successfully": "Projekt bol úspešne vytvorený", "project_created_successfully_description": "Projekt bol úspešne vytvorený. Teraz môžete začať pridávať pracovné položky.", + "project_name_already_taken": "Názov projektu je už použitý.", + "project_identifier_already_taken": "Identifikátor projektu je už použitý.", "project_cover_image_alt": "Úvodný obrázok projektu", "name_is_required": "Názov je povinný", "title_should_be_less_than_255_characters": "Názov by mal byť kratší ako 255 znakov", diff --git a/packages/i18n/src/locales/tr-TR/translations.json b/packages/i18n/src/locales/tr-TR/translations.json index 4d1c4ab122..a4ae006702 100644 --- a/packages/i18n/src/locales/tr-TR/translations.json +++ b/packages/i18n/src/locales/tr-TR/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Proje favorilerden kaldırılamadı. Lütfen tekrar deneyin.", "project_created_successfully": "Proje başarıyla oluşturuldu", "project_created_successfully_description": "Proje başarıyla oluşturuldu. Artık iş öğeleri eklemeye başlayabilirsiniz.", + "project_name_already_taken": "Proje ismi zaten kullanılıyor.", + "project_identifier_already_taken": "Proje kimliği zaten kullanılıyor.", "project_cover_image_alt": "Proje kapak resmi", "name_is_required": "Ad gereklidir", "title_should_be_less_than_255_characters": "Başlık 255 karakterden az olmalı", diff --git a/packages/i18n/src/locales/ua/translations.json b/packages/i18n/src/locales/ua/translations.json index 252a858d54..bfa6c32816 100644 --- a/packages/i18n/src/locales/ua/translations.json +++ b/packages/i18n/src/locales/ua/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Не вдалося видалити проєкт із вибраного. Спробуйте ще раз.", "project_created_successfully": "Проєкт успішно створено", "project_created_successfully_description": "Проєкт успішно створений. Тепер ви можете почати додавати робочі одиниці.", + "project_name_already_taken": "Назва проекту вже використовується.", + "project_identifier_already_taken": "Ідентифікатор проекту вже використовується.", "project_cover_image_alt": "Обкладинка проєкту", "name_is_required": "Назва є обов’язковою", "title_should_be_less_than_255_characters": "Назва має бути коротшою за 255 символів", diff --git a/packages/i18n/src/locales/vi-VN/translations.json b/packages/i18n/src/locales/vi-VN/translations.json index d6e6d7999e..3b31f81fe9 100644 --- a/packages/i18n/src/locales/vi-VN/translations.json +++ b/packages/i18n/src/locales/vi-VN/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "Không thể xóa dự án khỏi mục yêu thích. Vui lòng thử lại.", "project_created_successfully": "Dự án đã được tạo thành công", "project_created_successfully_description": "Dự án đã được tạo thành công. Bây giờ bạn có thể bắt đầu thêm mục công việc.", + "project_name_already_taken": "Tên dự án đã được sử dụng.", + "project_identifier_already_taken": "ID dự án đã được sử dụng.", "project_cover_image_alt": "Ảnh bìa dự án", "name_is_required": "Tên là bắt buộc", "title_should_be_less_than_255_characters": "Tiêu đề phải ít hơn 255 ký tự", diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json index d815a5ad76..304b435a8a 100644 --- a/packages/i18n/src/locales/zh-CN/translations.json +++ b/packages/i18n/src/locales/zh-CN/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "无法从收藏中移除项目。请重试。", "project_created_successfully": "项目创建成功", "project_created_successfully_description": "项目创建成功。您现在可以开始添加工作项了。", + "project_name_already_taken": "项目名称已被使用。", + "project_identifier_already_taken": "项目标识符已被使用。", "project_cover_image_alt": "项目封面图片", "name_is_required": "名称为必填项", "title_should_be_less_than_255_characters": "标题应少于255个字符", diff --git a/packages/i18n/src/locales/zh-TW/translations.json b/packages/i18n/src/locales/zh-TW/translations.json index bec40f2ead..5f3165ecb8 100644 --- a/packages/i18n/src/locales/zh-TW/translations.json +++ b/packages/i18n/src/locales/zh-TW/translations.json @@ -316,6 +316,8 @@ "failed_to_remove_project_from_favorites": "無法從我的最愛移除專案。請再試一次。", "project_created_successfully": "專案建立成功", "project_created_successfully_description": "專案建立成功。您現在可以開始新增工作事項。", + "project_name_already_taken": "專案名稱已被使用。", + "project_identifier_already_taken": "專案識別碼已被使用。", "project_cover_image_alt": "專案封面圖片", "name_is_required": "名稱為必填", "title_should_be_less_than_255_characters": "標題不應超過 255 個字元", diff --git a/web/ce/components/projects/create/root.tsx b/web/ce/components/projects/create/root.tsx index 490d3c6b89..72f378ea2c 100644 --- a/web/ce/components/projects/create/root.tsx +++ b/web/ce/components/projects/create/root.tsx @@ -49,7 +49,7 @@ export const CreateProjectForm: FC = observer((props) = addProjectToFavorites(workspaceSlug.toString(), projectId).catch(() => { setToast({ type: TOAST_TYPE.ERROR, - title: t("error"), + title: t("toast.error"), message: t("failed_to_remove_project_from_favorites"), }); }); @@ -89,20 +89,27 @@ export const CreateProjectForm: FC = observer((props) = handleNextStep(res.id); }) .catch((err) => { - Object.keys(err?.data ?? {}).map((key) => { + if (err?.data.code === "PROJECT_NAME_ALREADY_EXIST") { setToast({ type: TOAST_TYPE.ERROR, - title: t("error"), - message: err.data[key], + title: t("toast.error"), + message: t("project_name_already_taken"), }); - captureProjectEvent({ - eventName: PROJECT_CREATED, - payload: { - ...formData, - state: "FAILED", - }, + } else if (err?.data.code === "PROJECT_IDENTIFIER_ALREADY_EXIST") { + setToast({ + type: TOAST_TYPE.ERROR, + title: t("toast.error"), + message: t("project_identifier_already_taken"), }); - }); + } else { + Object.keys(err?.data ?? {}).map((key) => { + setToast({ + type: TOAST_TYPE.ERROR, + title: t("error"), + message: err.data[key], + }); + }); + } }); };