This commit is contained in:
@@ -3,10 +3,14 @@ import { FC, useRef, useState } from "react";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import Select from "../../../../components/Select";
|
import Select from "../../../../components/Select";
|
||||||
import SwitchComponent from "../../../../components/Switch";
|
import SwitchComponent from "../../../../components/Switch";
|
||||||
import { useGetUsers } from "../../../users/hooks/useUserData";
|
import {
|
||||||
import { UserItemType } from "../../../users/types/UserTypes";
|
useGetWorkspaces,
|
||||||
import { useGetWorkspaces } from "../../workspace/hooks/useWorkspaceData";
|
useGetWorkspaceUsers,
|
||||||
import { WorkspaceItemType } from "../../workspace/types/WorkspaceTypes";
|
} from "../../workspace/hooks/useWorkspaceData";
|
||||||
|
import {
|
||||||
|
WorkspaceItemType,
|
||||||
|
WorkspaceUserType,
|
||||||
|
} from "../../workspace/types/WorkspaceTypes";
|
||||||
import WorkspaceColorPicker from "../../workspace/components/WorkspaceColorPicker";
|
import WorkspaceColorPicker from "../../workspace/components/WorkspaceColorPicker";
|
||||||
import UserAvatar from "../../components/UserAvatar";
|
import UserAvatar from "../../components/UserAvatar";
|
||||||
|
|
||||||
@@ -67,8 +71,8 @@ const CreateProjectSidebar: FC<Props> = ({
|
|||||||
className,
|
className,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation("global");
|
const { t } = useTranslation("global");
|
||||||
const getUsers = useGetUsers("");
|
|
||||||
const getWorkspaces = useGetWorkspaces();
|
const getWorkspaces = useGetWorkspaces();
|
||||||
|
const getWorkspaceUsers = useGetWorkspaceUsers(workspaceId);
|
||||||
const [userSelectValue, setUserSelectValue] = useState("");
|
const [userSelectValue, setUserSelectValue] = useState("");
|
||||||
const fileInputRef = useRef<HTMLInputElement>(null);
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||||
|
|
||||||
@@ -82,19 +86,24 @@ const CreateProjectSidebar: FC<Props> = ({
|
|||||||
value: workspace.id,
|
value: workspace.id,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const userItems =
|
const workspaceUsers: WorkspaceUserType[] = Array.isArray(
|
||||||
getUsers.data?.data?.users
|
getWorkspaceUsers.data?.data,
|
||||||
?.filter((user: UserItemType) => !selectedUsers.some((selected) => selected.id === user.id))
|
)
|
||||||
.map((user: UserItemType) => ({
|
? getWorkspaceUsers.data.data
|
||||||
label: `${user.firstName} ${user.lastName}`,
|
: (getWorkspaceUsers.data?.data?.users ?? []);
|
||||||
value: user.id,
|
|
||||||
})) ?? [];
|
const userItems = workspaceUsers
|
||||||
|
.filter((user) => !selectedUsers.some((selected) => selected.id === user.id))
|
||||||
|
.map((user) => ({
|
||||||
|
label: `${user.firstName} ${user.lastName}`,
|
||||||
|
value: user.id,
|
||||||
|
}));
|
||||||
|
|
||||||
const handleUserSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
const handleUserSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
||||||
const value = e.target.value;
|
const value = e.target.value;
|
||||||
if (!value) return;
|
if (!value) return;
|
||||||
|
|
||||||
const user = getUsers.data?.data?.users?.find((item: UserItemType) => item.id === value);
|
const user = workspaceUsers.find((item) => item.id === value);
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
onSelectedUsersChange([
|
onSelectedUsersChange([
|
||||||
@@ -140,14 +149,26 @@ const CreateProjectSidebar: FC<Props> = ({
|
|||||||
placeholder={t("taskmanager.select_workspace")}
|
placeholder={t("taskmanager.select_workspace")}
|
||||||
items={workspaceItems}
|
items={workspaceItems}
|
||||||
value={workspaceId}
|
value={workspaceId}
|
||||||
onChange={(e) => onWorkspaceIdChange(e.target.value)}
|
onChange={(e) => {
|
||||||
|
onWorkspaceIdChange(e.target.value);
|
||||||
|
onSelectedUsersChange([]);
|
||||||
|
setUserSelectValue("");
|
||||||
|
}}
|
||||||
className="border"
|
className="border"
|
||||||
error_text={workspaceError ?? ""}
|
error_text={workspaceError ?? ""}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-8">
|
<div className="mt-8">
|
||||||
<Select label={t("taskmanager.users")} placeholder={t("taskmanager.select_user")} items={userItems} value={userSelectValue} onChange={handleUserSelect} className="border" />
|
<Select
|
||||||
|
label={t("taskmanager.users")}
|
||||||
|
placeholder={t("taskmanager.select_user")}
|
||||||
|
items={userItems}
|
||||||
|
value={userSelectValue}
|
||||||
|
onChange={handleUserSelect}
|
||||||
|
className="border"
|
||||||
|
disabled={!workspaceId}
|
||||||
|
/>
|
||||||
|
|
||||||
<div className="mt-3 border border-dashed border-border rounded-xl p-4 flex gap-2 flex-wrap min-h-[52px]">
|
<div className="mt-3 border border-dashed border-border rounded-xl p-4 flex gap-2 flex-wrap min-h-[52px]">
|
||||||
{selectedUsers.length === 0 ? (
|
{selectedUsers.length === 0 ? (
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { CloseCircle } from "iconsax-react";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import SwitchComponent from "../../../../components/Switch";
|
import SwitchComponent from "../../../../components/Switch";
|
||||||
import Select from "../../../../components/Select";
|
import Select from "../../../../components/Select";
|
||||||
import { useGetUsers } from "../../../users/hooks/useUserData";
|
import { useGetAdminsListAll } from "../../../users/hooks/useUserData";
|
||||||
import { UserItemType } from "../../../users/types/UserTypes";
|
import { UserItemType } from "../../../users/types/UserTypes";
|
||||||
import WorkspaceColorPicker from "./WorkspaceColorPicker";
|
import WorkspaceColorPicker from "./WorkspaceColorPicker";
|
||||||
import UserAvatar from "../../components/UserAvatar";
|
import UserAvatar from "../../components/UserAvatar";
|
||||||
@@ -32,27 +32,25 @@ const CreateWorkspaceSidebar: FC<Props> = ({
|
|||||||
onSelectedUsersChange,
|
onSelectedUsersChange,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation("global");
|
const { t } = useTranslation("global");
|
||||||
const getUsers = useGetUsers("");
|
const getAdmins = useGetAdminsListAll();
|
||||||
const [userSelectValue, setUserSelectValue] = useState("");
|
const [userSelectValue, setUserSelectValue] = useState("");
|
||||||
|
|
||||||
const userItems =
|
const admins: UserItemType[] = getAdmins.data?.data ?? [];
|
||||||
getUsers.data?.data?.users
|
|
||||||
?.filter(
|
const userItems = admins
|
||||||
(user: UserItemType) =>
|
.filter(
|
||||||
!selectedUsers.some((selected) => selected.id === user.id),
|
(user) => !selectedUsers.some((selected) => selected.id === user.id),
|
||||||
)
|
)
|
||||||
.map((user: UserItemType) => ({
|
.map((user) => ({
|
||||||
label: `${user.firstName} ${user.lastName}`,
|
label: `${user.firstName} ${user.lastName}`,
|
||||||
value: user.id,
|
value: user.id,
|
||||||
})) ?? [];
|
}));
|
||||||
|
|
||||||
const handleUserSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
const handleUserSelect = (e: React.ChangeEvent<HTMLSelectElement>) => {
|
||||||
const value = e.target.value;
|
const value = e.target.value;
|
||||||
if (!value) return;
|
if (!value) return;
|
||||||
|
|
||||||
const user = getUsers.data?.data?.users?.find(
|
const user = admins.find((item) => item.id === value);
|
||||||
(item: UserItemType) => item.id === value,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
onSelectedUsersChange([
|
onSelectedUsersChange([
|
||||||
|
|||||||
@@ -20,6 +20,14 @@ export const useGetWorkspaceDetail = (id: string) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const useGetWorkspaceUsers = (id: string) => {
|
||||||
|
return useQuery({
|
||||||
|
queryKey: ["workspace-users", id],
|
||||||
|
queryFn: () => api.getWorkspaceUsers(id),
|
||||||
|
enabled: !!id,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const useCreateWorkspace = () => {
|
export const useCreateWorkspace = () => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ export const getWorkspaceDetail = async (id: string) => {
|
|||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getWorkspaceUsers = async (id: string) => {
|
||||||
|
const { data } = await axios.get(`/task-manager/workspaces/${id}/users`);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
export const createWorkspace = async (params: CreateWorkspaceType) => {
|
export const createWorkspace = async (params: CreateWorkspaceType) => {
|
||||||
const { data } = await axios.post(`/task-manager/workspaces`, params);
|
const { data } = await axios.post(`/task-manager/workspaces`, params);
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
Reference in New Issue
Block a user