import React from "react"; import { AutocompleteArrayInput, BooleanInput, Create, Datagrid, FormTab, List, Pagination, ReferenceArrayField, ReferenceArrayInput, SelectField, Show, Tab, TabbedForm, TabbedShowLayout, TextField, TextInput, useTranslate, } from "react-admin"; import ViewListIcon from "@material-ui/icons/ViewList"; import UserIcon from "@material-ui/icons/Group"; const RoomPagination = props => ( ); export const RoomList = props => ( }> ); const validateDisplayName = fieldval => fieldval === undefined ? "synapseadmin.rooms.room_name_required" : fieldval.length === 0 ? "synapseadmin.rooms.room_name_required" : undefined; function approximateAliasLength(alias, homeserver) { /* TODO maybe handle punycode in homeserver name */ var te; // Support for TextEncoder is quite widespread, but the polyfill is // pretty large; We will only underestimate the size with the regular // length attribute of String, so we never prevent the user from using // an alias that is short enough for the server, but too long for our // heuristic. try { te = new TextEncoder(); } catch (err) { if (err instanceof ReferenceError) { te = undefined; } } const aliasLength = te === undefined ? alias.length : te.encode(alias).length; return "#".length + aliasLength + ":".length + homeserver.length; } const validateAlias = fieldval => { if (fieldval === undefined) { return undefined; } const homeserver = localStorage.getItem("home_server"); if (approximateAliasLength(fieldval, homeserver) > 255) { return "synapseadmin.rooms.alias_too_long"; } }; const removeLeadingWhitespace = fieldVal => fieldVal === undefined ? undefined : fieldVal.trimStart(); const replaceAllWhitespace = fieldVal => fieldVal === undefined ? undefined : fieldVal.replace(/\s/, "_"); const removeLeadingSigil = fieldVal => fieldVal === undefined ? undefined : fieldVal.startsWith("#") ? fieldVal.substr(1) : fieldVal; const validateHasAliasIfPublic = formdata => { let errors = {}; if (formdata.public) { if ( formdata.canonical_alias === undefined || formdata.canonical_alias.trim().length === 0 ) { errors.canonical_alias = "synapseadmin.rooms.alias_required_if_public"; } } return errors; }; export const RoomCreate = props => ( }> replaceAllWhitespace(removeLeadingSigil(fv))} validate={validateAlias} placeholder="#" /> } > ({ user_id: searchText })} > ); const RoomTitle = ({ record }) => { const translate = useTranslate(); return ( {translate("resources.rooms.name", 1)} {record ? `"${record.name}"` : ""} ); }; export const RoomShow = props => ( }> }> }> );