-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import { ReactElement, useState } from "react"; | ||
|
||
import { Autocomplete, TextField } from "@mui/material"; | ||
|
||
import { chatsApi, organizationsApi } from "src/apis"; | ||
import { Button } from "src/components/ui"; | ||
import { useMutation, useQuery } from "src/core/query"; | ||
import { ErrorView } from "src/views/ErrorView"; | ||
Check warning on line 8 in services/web-ui/src/features/chat/pages/CreateChatPage/CreateChatPage.container.tsx
|
||
|
||
import { CreateChatPageNav } from "./CreateChatPage.nav"; | ||
import { CreateChatPageSkeleton } from "./CreateChatPage.skeleton"; | ||
Check warning on line 11 in services/web-ui/src/features/chat/pages/CreateChatPage/CreateChatPage.container.tsx
|
||
|
||
interface Option { | ||
id: number; | ||
label: string; | ||
} | ||
|
||
export function CreateChatPageContainer(): ReactElement { | ||
const { error, data, isPending } = useQuery({ | ||
Check warning on line 19 in services/web-ui/src/features/chat/pages/CreateChatPage/CreateChatPage.container.tsx
|
||
queryKey: ["members"], | ||
queryFn: () => organizationsApi.getCurrentOrganizationMembers(), | ||
}); | ||
|
||
const [members, setMembers] = useState<Option[]>([]); | ||
|
||
const createChatMutation = useMutation({ | ||
mutationFn: () => chatsApi.getConversations(), | ||
Check warning on line 27 in services/web-ui/src/features/chat/pages/CreateChatPage/CreateChatPage.container.tsx
|
||
}); | ||
|
||
if (error) { | ||
return ( | ||
<CreateChatPageNav> | ||
<ErrorView /> | ||
</CreateChatPageNav> | ||
); | ||
} | ||
|
||
if (isPending) { | ||
return ( | ||
<CreateChatPageNav> | ||
<CreateChatPageSkeleton /> | ||
</CreateChatPageNav> | ||
); | ||
} | ||
|
||
const options = data.map((x) => ({ id: x.id, label: x.name })); | ||
|
||
return ( | ||
<CreateChatPageNav> | ||
<Autocomplete | ||
multiple | ||
onChange={(_, newValue) => setMembers(newValue)} | ||
options={options} | ||
renderInput={(params) => <TextField label="Members" {...params} />} | ||
value={members} | ||
/> | ||
|
||
<Button | ||
disabled={members.length === 0} | ||
loading={createChatMutation.isPending} | ||
onClick={() => createChatMutation.mutate()} | ||
sx={{ mt: 2 }} | ||
variant="contained" | ||
> | ||
Create | ||
</Button> | ||
</CreateChatPageNav> | ||
); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import { ReactElement, ReactNode } from "react"; | ||
|
||
import { Box } from "@mui/material"; | ||
|
||
interface CreateChatPageNavProps { | ||
children: ReactNode; | ||
} | ||
|
||
export function CreateChatPageNav({ | ||
children, | ||
}: CreateChatPageNavProps): ReactElement { | ||
return <Box sx={{ p: 2 }}>{children}</Box>; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import { ReactElement } from "react"; | ||
|
||
export function CreateChatPageSkeleton(): ReactElement { | ||
return <>Loading...</>; | ||
Check warning on line 4 in services/web-ui/src/features/chat/pages/CreateChatPage/CreateChatPage.skeleton.tsx
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export { CreateChatPageContainer as CreateChatPage } from "./CreateChatPage.container"; | ||