From 7e378a92f818c8aa4adac44fbd73e85ace0fc612 Mon Sep 17 00:00:00 2001 From: Amirhossein Khalili Date: Fri, 13 Mar 2026 02:27:12 +0800 Subject: [PATCH] feat(workspace): remove CreateWorkspaceModal and change the logic to redirect to WorkspaceCreate page --- src/components/CreateWorkspaceModal.tsx | 252 ------------------------ src/components/WorkspaceSelector.tsx | 21 +- 2 files changed, 4 insertions(+), 269 deletions(-) delete mode 100644 src/components/CreateWorkspaceModal.tsx diff --git a/src/components/CreateWorkspaceModal.tsx b/src/components/CreateWorkspaceModal.tsx deleted file mode 100644 index 8d9017c..0000000 --- a/src/components/CreateWorkspaceModal.tsx +++ /dev/null @@ -1,252 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Search, Trash2, UserPlus, Loader2, AlertCircle } from "lucide-react"; -import { searchUserByExactMobile, type SearchedUser } from "../api/users"; -import { useTranslation } from "../hooks/useTranslation"; -import { Modal } from "./Modal"; - -export interface WorkspaceMemberInput extends SearchedUser { - role: "admin" | "member"; -} - -interface CreateWorkspaceModalProps { - isOpen: boolean; - onClose: () => void; - onSubmit: (data: { name: string; description: string; members: { user_id: string | number; role: string }[] }) => void; - isLoading?: boolean; -} - -export const CreateWorkspaceModal: React.FC = ({ - isOpen, - onClose, - onSubmit, - isLoading = false, -}) => { - const { t, lang } = useTranslation(); - const isFa = lang === "fa"; - - const [name, setName] = useState(""); - const [description, setDescription] = useState(""); - const [members, setMembers] = useState([]); - - const [searchQuery, setSearchQuery] = useState(""); - const [searchResult, setSearchResult] = useState(null); - const [isSearching, setIsSearching] = useState(false); - const [searchError, setSearchError] = useState(false); - - useEffect(() => { - if (searchQuery.trim().length < 11) { - setSearchResult(null); - setSearchError(false); - return; - } - - const delayDebounceFn = setTimeout(async () => { - setIsSearching(true); - setSearchError(false); - - const user = await searchUserByExactMobile(searchQuery.trim()); - - if (user) { - setSearchResult(user); - } else { - setSearchResult(null); - setSearchError(true); - } - setIsSearching(false); - }, 500); - - return () => clearTimeout(delayDebounceFn); - }, [searchQuery]); - - const handleAddMember = () => { - if (!searchResult || members.some((m) => m.id === searchResult.id)) return; - - setMembers([...members, { ...searchResult, role: "member" }]); - setSearchQuery(""); - setSearchResult(null); - setSearchError(false); - }; - - const handleRemoveMember = (id: string | number) => { - setMembers(members.filter((m) => m.id !== id)); - }; - - const handleRoleChange = (id: string | number, role: "admin" | "member") => { - setMembers(members.map((m) => (m.id === id ? { ...m, role } : m))); - }; - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - onSubmit({ - name, - description, - members: members.map((m) => ({ user_id: m.id, role: m.role })), - }); - }; - - if (!isOpen) return null; - - return ( - - - - - } - > -
-
- - setName(e.target.value)} - className="w-full px-3 py-2 border border-slate-300 dark:border-slate-700 rounded-lg bg-transparent text-slate-900 dark:text-slate-100 focus:outline-none focus:ring-2 focus:ring-blue-500" - placeholder={t.workspace?.namePlaceholder || "e.g. Design Team"} - /> -
- -
- -