[#7] fixed attendee search in full display
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
|||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { searchUsers } from "../../features/User/userAPI";
|
import { searchUsers } from "../../features/User/userAPI";
|
||||||
|
import { userAttendee } from "../../features/User/userDataTypes";
|
||||||
|
|
||||||
interface User {
|
interface User {
|
||||||
email: string;
|
email: string;
|
||||||
@@ -17,9 +18,13 @@ interface User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function UserSearch({
|
export default function UserSearch({
|
||||||
|
attendees,
|
||||||
setAttendees,
|
setAttendees,
|
||||||
|
disabled,
|
||||||
}: {
|
}: {
|
||||||
|
attendees: userAttendee[];
|
||||||
setAttendees: Function;
|
setAttendees: Function;
|
||||||
|
disabled?: boolean;
|
||||||
}) {
|
}) {
|
||||||
const [query, setQuery] = useState("");
|
const [query, setQuery] = useState("");
|
||||||
const [options, setOptions] = useState<User[]>([]);
|
const [options, setOptions] = useState<User[]>([]);
|
||||||
@@ -40,6 +45,7 @@ export default function UserSearch({
|
|||||||
<Autocomplete
|
<Autocomplete
|
||||||
multiple
|
multiple
|
||||||
options={options}
|
options={options}
|
||||||
|
disabled={disabled}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
filterOptions={(x) => x}
|
filterOptions={(x) => x}
|
||||||
fullWidth
|
fullWidth
|
||||||
@@ -75,14 +81,20 @@ export default function UserSearch({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
renderOption={(props, option) => (
|
renderOption={(props, option) => {
|
||||||
<ListItem {...props} key={option.email} disableGutters>
|
if (attendees.find((a) => a.cal_address === option.email)) return;
|
||||||
<ListItemAvatar>
|
return (
|
||||||
<Avatar src={option.avatarUrl} alt={option.displayName} />
|
<ListItem {...props} key={option.email} disableGutters>
|
||||||
</ListItemAvatar>
|
<ListItemAvatar>
|
||||||
<ListItemText primary={option.displayName} secondary={option.email} />
|
<Avatar src={option.avatarUrl} alt={option.displayName} />
|
||||||
</ListItem>
|
</ListItemAvatar>
|
||||||
)}
|
<ListItemText
|
||||||
|
primary={option.displayName}
|
||||||
|
secondary={option.email}
|
||||||
|
/>
|
||||||
|
</ListItem>
|
||||||
|
);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -360,7 +360,15 @@ export default function EventDisplayModal({
|
|||||||
rows={2}
|
rows={2}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<AttendeeSelector setAttendees={setAttendees} />
|
{isOwn && (
|
||||||
|
<AttendeeSelector
|
||||||
|
attendees={attendees}
|
||||||
|
setAttendees={(value: userAttendee[]) => {
|
||||||
|
const newAttendeeList = attendees.concat(value);
|
||||||
|
setAttendees(newAttendeeList);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
<TextField
|
<TextField
|
||||||
fullWidth
|
fullWidth
|
||||||
|
|||||||
@@ -275,7 +275,7 @@ function EventPopover({
|
|||||||
size="small"
|
size="small"
|
||||||
margin="dense"
|
margin="dense"
|
||||||
/>
|
/>
|
||||||
<AttendeeSelector setAttendees={setAttendees} />
|
<AttendeeSelector attendees={attendees} setAttendees={setAttendees} />
|
||||||
{/* Extended options */}
|
{/* Extended options */}
|
||||||
{showMore && (
|
{showMore && (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -16,14 +16,12 @@ export async function searchUsers(query: string) {
|
|||||||
})
|
})
|
||||||
.json();
|
.json();
|
||||||
|
|
||||||
return response
|
return response.map((user) => ({
|
||||||
.filter((user) => user.objectType === "user")
|
email: user.emailAddresses?.[0]?.value || "",
|
||||||
.map((user) => ({
|
displayName:
|
||||||
email: user.emailAddresses?.[0]?.value || "",
|
user.names?.[0]?.displayName || user.emailAddresses?.[0]?.value,
|
||||||
displayName:
|
avatarUrl: user.photos?.[0]?.url || "",
|
||||||
user.names?.[0]?.displayName || user.emailAddresses?.[0]?.value,
|
}));
|
||||||
avatarUrl: user.photos?.[0]?.url || "",
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getUserDetails(id: string) {
|
export async function getUserDetails(id: string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user