import EventIcon from "@mui/icons-material/Event";
import FastForwardIcon from "@mui/icons-material/FastForward";
import UserIcon from "@mui/icons-material/Group";
import HttpsIcon from "@mui/icons-material/Https";
import NoEncryptionIcon from "@mui/icons-material/NoEncryption";
import PageviewIcon from "@mui/icons-material/Pageview";
import ViewListIcon from "@mui/icons-material/ViewList";
import RoomIcon from "@mui/icons-material/ViewList";
import VisibilityIcon from "@mui/icons-material/Visibility";
import PermMediaIcon from "@mui/icons-material/PermMedia";
import Box from "@mui/material/Box";
import { useTheme } from "@mui/material/styles";
import {
BooleanField,
DateField,
WrapperField,
Datagrid,
DatagridConfigurable,
ExportButton,
FunctionField,
List,
ListProps,
NumberField,
Pagination,
ReferenceField,
ReferenceManyField,
ResourceProps,
SearchInput,
SelectColumnsButton,
SelectField,
Show,
ShowProps,
Tab,
TabbedShowLayout,
TextField as RaTextField,
TopToolbar,
useRecordContext,
useTranslate,
useListContext,
useNotify,
DeleteButton,
} from "react-admin";
import TextField from "@mui/material/TextField";
import {
RoomDirectoryBulkUnpublishButton,
RoomDirectoryBulkPublishButton,
RoomDirectoryUnpublishButton,
RoomDirectoryPublishButton,
} from "./room_directory";
import { DATE_FORMAT } from "../utils/date";
import DeleteRoomButton from "../components/DeleteRoomButton";
import { MediaIDField } from "../components/media";
import AvatarField from "../components/AvatarField";
import { Room } from "../synapse/dataProvider";
import { useMutation } from "@tanstack/react-query";
import { useDataProvider } from "react-admin";
import { Confirm } from "react-admin";
import { useState } from "react";
import Button from "@mui/material/Button";
import PersonIcon from '@mui/icons-material/Person';
import Typography from "@mui/material/Typography";
import Alert from "@mui/material/Alert";
const RoomPagination = () => ;
const RoomTitle = () => {
const record = useRecordContext();
const translate = useTranslate();
let name = "";
if (record) {
name = record.name !== "" ? record.name : record.id;
}
return (
{translate("resources.rooms.name", 1)} {name}
);
};
const RoomShowActions = () => {
const record = useRecordContext();
if (!record) {
return null;
}
const publishButton = record?.public ? : ;
// FIXME: refresh after (un)publish
return (
{publishButton}
);
};
export const MakeAdminBtn = () => {
const record = useRecordContext() as Room;
if (!record) {
return null;
}
if (record.joined_local_members < 1) {
return null;
}
const ownMXID = localStorage.getItem("user_id") || "";
const [open, setOpen] = useState(false);
const [userIdValue, setUserIdValue] = useState(ownMXID);
const dataProvider = useDataProvider();
const notify = useNotify();
const translate = useTranslate();
const { mutate, isPending } = useMutation({
mutationFn: async () => {
try {
const result = await dataProvider.makeRoomAdmin(record.room_id, userIdValue);
if (!result.success) {
throw new Error(result.error);
}
} catch (error) {
throw error;
}
},
onSuccess: () => {
notify("resources.rooms.action.make_admin.success", { type: "success" });
setOpen(false);
setUserIdValue("");
},
onError: (err) => {
const errorMessage = err instanceof Error ? err.message : "Unknown error";
notify("resources.rooms.action.make_admin.failure", { type: "error", messageArgs: { errMsg: errorMessage } });
setOpen(false);
setUserIdValue("");
}
});
const handleChange = (event: React.ChangeEvent) => {
setUserIdValue(event.target.value);
};
const handleConfirm = async () => {
mutate();
setOpen(false);
};
const handleDialogClose = () => {
setOpen(false);
};
const handleKeyDown = (event: React.KeyboardEvent) => {
if (event.key === "Enter") {
handleConfirm();
}
};
return (<>
{translate("resources.rooms.action.make_admin.content")}
>}
/>
>);
};
export const RoomShow = (props: ShowProps) => {
const translate = useTranslate();
const record = useRecordContext();
return (
} title={}>
}>
} path="detail">
} path="members">
"/users/" + id} bulkActionButtons={false}>
} path="media">
{translate("resources.room_media.helper.info")}
} path="permission">
} path="state">
`${JSON.stringify(record.content, null, 2)}`} />
} path="forward_extremities">
{translate("resources.rooms.helper.forward_extremities")}
);
};
const RoomBulkActionButtons = () => {
const record = useListContext();
return (
<>
>
);
};
const roomFilters = [];
const RoomListActions = () => (
);
export const RoomList = (props: ListProps) => {
const theme = useTheme();
return (
}
sort={{ field: "name", order: "ASC" }}
filters={roomFilters}
actions={}
perPage={50}
>
}
omit={["joined_local_members", "state_events", "version", "federatable"]}
>
}
sx={{
[`& [data-testid="true"]`]: { color: theme.palette.success.main },
[`& [data-testid="false"]`]: { color: theme.palette.error.main },
}}
/>
record["name"] || record["canonical_alias"] || record["id"]} label="resources.rooms.fields.name" />
);
};
const resource: ResourceProps = {
name: "rooms",
icon: RoomIcon,
list: RoomList,
show: RoomShow,
};
export default resource;