diff --git a/apps/web/src/Login.ts b/apps/web/src/Login.ts index 6223e49d313..a35e48d32e0 100644 --- a/apps/web/src/Login.ts +++ b/apps/web/src/Login.ts @@ -159,10 +159,10 @@ export default class Login { // address: username, // }; // } else { - const identifier = { - type: "m.id.user", - user: username, - }; + const identifier = { + type: "m.id.user", + user: username, + }; // } const loginParams = { diff --git a/apps/web/src/components/structures/HomePage.tsx b/apps/web/src/components/structures/HomePage.tsx index 866d44d3514..1d1f0619b30 100644 --- a/apps/web/src/components/structures/HomePage.tsx +++ b/apps/web/src/components/structures/HomePage.tsx @@ -119,21 +119,27 @@ const HomePage: React.FC = ({ justRegistered = false }) => {
{introSection} -
- {isAdmin &&( - - {_tDom("onboarding|send_dm")} - )} +
+ {isAdmin && ( + + + {_tDom("onboarding|send_dm")} + + )} {_tDom("onboarding|explore_rooms")} - {isAdmin &&( - - {_tDom("onboarding|create_room")} - )} + {isAdmin && ( + + + {_tDom("onboarding|create_room")} + + )}
diff --git a/apps/web/src/components/structures/RoomView.tsx b/apps/web/src/components/structures/RoomView.tsx index e2408935091..a8a56bea6d2 100644 --- a/apps/web/src/components/structures/RoomView.tsx +++ b/apps/web/src/components/structures/RoomView.tsx @@ -992,7 +992,7 @@ export class RoomView extends React.Component { this.context.client.on(CryptoEvent.KeysChanged, this.onCrossSigningKeysChanged); this.context.client.on(MatrixEventEvent.Decrypted, this.onEventDecrypted); } - + // Start listening for RoomViewStore updates this.roomViewStore.on(UPDATE_EVENT, this.onRoomViewStoreUpdate); @@ -1048,20 +1048,20 @@ export class RoomView extends React.Component { } private loadRoomFeatures = async (): Promise => { - const roomId = this.state.room?.roomId; - if (!roomId) return; - try { - const features = await getRoomFeatures(roomId); - this.setState({ - vodsEnabled: !!features["vods"], - eventsEnabled: !!features["events"], - liveEnabled: !!features["live"], - }); - } catch { - this.setState({ vodsEnabled: false, eventsEnabled: false }); - this.setState({ vodsEnabled: false, eventsEnabled: false, liveEnabled: false }); - } -}; + const roomId = this.state.room?.roomId; + if (!roomId) return; + try { + const features = await getRoomFeatures(roomId); + this.setState({ + vodsEnabled: !!features["vods"], + eventsEnabled: !!features["events"], + liveEnabled: !!features["live"], + }); + } catch { + this.setState({ vodsEnabled: false, eventsEnabled: false }); + this.setState({ vodsEnabled: false, eventsEnabled: false, liveEnabled: false }); + } + }; public shouldComponentUpdate(nextProps: IRoomProps, nextState: IRoomState): boolean { const hasPropsDiff = objectHasDiff(this.props, nextProps); @@ -2713,9 +2713,7 @@ export class RoomView extends React.Component { {statusBarArea} {previewBar} {messageComposer} - {anyDrawerFeature && ( -
- )} + {anyDrawerFeature &&
} {anyDrawerFeature && ( { return ( <> - -
- {showChatEffects && this.roomView.current && ( - - )} - - -
+
+ {showChatEffects && this.roomView.current && ( + + )} + + - {!this.props.hideHeader && ( - {extraButtons}} - /> - )} - {mainSplitBody} -
- - -
- - {this.state.liveEnabled && this.state.room && ( +
+ {!this.props.hideHeader && ( + {extraButtons}} + /> + )} + {mainSplitBody} +
+
+
+
+
+ {this.state.liveEnabled && this.state.room && ( )} diff --git a/apps/web/src/components/views/dialogs/CreateRoomDialog.tsx b/apps/web/src/components/views/dialogs/CreateRoomDialog.tsx index 336cb7f8da7..81949abec5c 100644 --- a/apps/web/src/components/views/dialogs/CreateRoomDialog.tsx +++ b/apps/web/src/components/views/dialogs/CreateRoomDialog.tsx @@ -93,7 +93,7 @@ interface IState { */ canChangeEncryption: boolean; // módulo do synapse create room - useModuleCreation : true; + useModuleCreation: true; keyword: string; visible: boolean; price: string; @@ -186,10 +186,7 @@ export default class CreateRoomDialog extends React.Component { opts.useModuleCreation = true; opts.keyword = this.state.keyword; opts.visible = this.state.visible; - opts.access_type = - this.state.joinRule === JoinRule.Public - ? "public" - : "private"; + opts.access_type = this.state.joinRule === JoinRule.Public ? "public" : "private"; opts.price = Number(this.state.price) * 100; return opts; } @@ -234,11 +231,10 @@ export default class CreateRoomDialog extends React.Component { if (this.state.useModuleCreation) { try { this.validateModuleRoom(); - } catch (e) { - alert((e as Error).message); - return; - } - + } catch (e) { + alert((e as Error).message); + return; + } } this.props.onFinished(true, this.roomCreateOptions()); } else { @@ -326,11 +322,7 @@ export default class CreateRoomDialog extends React.Component { throw new Error("Keyword inválida"); } - if ( - this.state.visible && - this.state.joinRule !== JoinRule.Public && - Number(this.state.price) <= 0 - ) { + if (this.state.visible && this.state.joinRule !== JoinRule.Public && Number(this.state.price) <= 0) { this.setState({ invalidPrice: true, }); @@ -553,27 +545,25 @@ export default class CreateRoomDialog extends React.Component { /> )} - ) => this.setState({ - keyword: e.target.value, - keywordAlreadyExists: false, - })} + onChange={(e: React.ChangeEvent) => + this.setState({ + keyword: e.target.value, + keywordAlreadyExists: false, + }) + } /> - this.setState({ visible: e.target.checked }) - } + onChange={(e) => this.setState({ visible: e.target.checked })} /> - { - this.state.visible && - this.state.joinRule !== JoinRule.Public && ( + {this.state.visible && this.state.joinRule !== JoinRule.Public && ( <> { invalidPrice: false, }) } - className={ - this.state.invalidPrice - ? "mx_Field_invalid" - : undefined - } + className={this.state.invalidPrice ? "mx_Field_invalid" : undefined} /> - { - this.state.invalidPrice && ( -
- Escolha um valor maior que zero. -
- ) - } + {this.state.invalidPrice && ( +
Escolha um valor maior que zero.
+ )} - ) - } + )}
= ({ initialText = "", initialFilter = n } } else if (isMemberResult(entry)) { if (!entry.alreadyFiltered && !entry.query?.some((q) => q.includes(lcQuery))) return; // bail, does not match query - } else if (isPublicRoomResult(entry)|| isDiscoverRoomResult(entry)) { + } else if (isPublicRoomResult(entry) || isDiscoverRoomResult(entry)) { if (!entry.query?.some((q) => q.includes(lcQuery))) return; // bail, does not match query } else { if (!entry.name.toLowerCase().includes(lcQuery) && !entry.query?.some((q) => q.includes(lcQuery))) @@ -642,7 +637,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n if (!payingSpace) return; try { const spaceId = payingSpace.room_id; - const joinedRooms = await inviteSpace(spaceId); // backend já colocou você nelas + const joinedRooms = await inviteSpace(spaceId); // backend já colocou você nelas setPayingSpace(null); const cli = MatrixClientPeg.safeGet(); @@ -663,7 +658,6 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n } }; - let otherSearchesSection: JSX.Element | undefined; if (trimmedQuery || (filter !== Filter.PublicRooms && filter !== Filter.PublicSpaces)) { otherSearchesSection = ( @@ -687,7 +681,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n {filterToLabel(Filter.PublicSpaces)} )} - {filter !== Filter.PublicRooms && ( + {filter !== Filter.PublicRooms && ( ); } const room = result.discoverRoom; const isPaid = Number(room.price) > 0; - const buttonLabel = isPaid ? - "Pagar" : "Entrar"; + const buttonLabel = isPaid ? "Pagar" : "Entrar"; const onAction = (ev: ButtonEvent): void => { ev.stopPropagation(); @@ -823,7 +812,11 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n key={`${Section[result.section]}-${room.room_id}`} onClick={onAction} endAdornment={ - + {buttonLabel} } @@ -1073,7 +1066,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n
); } - let discoverSpacesSection: JSX.Element | undefined; + let discoverSpacesSection: JSX.Element | undefined; if (filter === Filter.PublicSpaces || (filter === Filter.PublicRooms && showSpacesChip)) { let content: JSX.Element | JSX.Element[]; if (discoverError) { @@ -1091,16 +1084,14 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n } else { content = results[Section.DiscoverSpaces].slice(0, SECTION_LIMIT).map(resultMapper); } - + discoverSpacesSection = (
-

- {filterToLabel(Filter.PublicSpaces)} -

+

{filterToLabel(Filter.PublicSpaces)}

{content}
); @@ -1468,9 +1459,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n > {r.name ?? r.roomId} {typeof r.numJoinedMembers === "number" && ( - - {" "}· {r.numJoinedMembers} integrante(s) - + · {r.numJoinedMembers} integrante(s) )} ))} @@ -1604,7 +1593,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n aria-label={_t("spotlight_dialog|search_dialog")} >
- {filter === Filter.PublicRooms && showSpacesChip && ( + {filter === Filter.PublicRooms && showSpacesChip && (
{filterToIcon(Filter.PublicSpaces)} {filterToLabel(Filter.PublicSpaces)} @@ -1653,7 +1642,9 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n aria-label={_t("action|search")} aria-describedby="mx_SpotlightDialog_keyboardPrompt" /> - {(publicRoomsLoading || peopleLoading || profileLoading || discoverLoading) && } + {(publicRoomsLoading || peopleLoading || profileLoading || discoverLoading) && ( + + )}
(() => - getLiveWidget(cli, room.roomId), - ); + const [widget, setWidget] = useState<{ title: string; url: string } | null>(() => getLiveWidget(cli, room.roomId)); useEffect(() => { const refresh = (): void => setWidget(getLiveWidget(cli, room.roomId)); @@ -219,4 +217,4 @@ const LiveStreamWidget: React.FC = ({ room, canManage }) => { ); }; -export default LiveStreamWidget; \ No newline at end of file +export default LiveStreamWidget; diff --git a/apps/web/src/components/views/rooms/RoomTile.tsx b/apps/web/src/components/views/rooms/RoomTile.tsx index fd7c83896ee..a6d4bf37100 100644 --- a/apps/web/src/components/views/rooms/RoomTile.tsx +++ b/apps/web/src/components/views/rooms/RoomTile.tsx @@ -90,7 +90,6 @@ class RoomTile extends React.PureComponent { this.forceUpdate(); }; - public constructor(props: Props) { super(props); diff --git a/apps/web/src/components/views/settings/tabs/room/BusinessVisibilitySection.tsx b/apps/web/src/components/views/settings/tabs/room/BusinessVisibilitySection.tsx index b39ddc503ec..b7abd54fd7e 100644 --- a/apps/web/src/components/views/settings/tabs/room/BusinessVisibilitySection.tsx +++ b/apps/web/src/components/views/settings/tabs/room/BusinessVisibilitySection.tsx @@ -8,7 +8,12 @@ import Field from "../../../elements/Field"; import AccessibleButton from "../../../elements/AccessibleButton"; import Spinner from "../../../elements/Spinner"; import SettingsFieldset from "../../SettingsFieldset"; -import { changeAccessType, changePrice, changeVisibility, getRoomVisibility } from "../../../../../utils/admin/roomBusiness"; +import { + changeAccessType, + changePrice, + changeVisibility, + getRoomVisibility, +} from "../../../../../utils/admin/roomBusiness"; import { useIsAdmin } from "../../../../../hooks/useIsAdmin"; interface IProps { @@ -61,8 +66,7 @@ export const BusinessVisibilitySection: React.FC = ({ room }) => { const onState = async (e: MatrixEvent): Promise => { if (e.getRoomId() !== room.roomId || e.getType() !== EventType.RoomJoinRules) return; - const accessType: "public" | "private" = - room.getJoinRule() === JoinRule.Public ? "public" : "private"; + const accessType: "public" | "private" = room.getJoinRule() === JoinRule.Public ? "public" : "private"; if (last === accessType) return; last = accessType; @@ -165,7 +169,7 @@ export const BusinessVisibilitySection: React.FC = ({ room }) => { label="Preço do chat (R$)" value={priceReais} disabled={!priceEditable || saving} - onChange={(e: { target: { value: React.SetStateAction; }; }) => setPriceReais(e.target.value)} + onChange={(e: { target: { value: React.SetStateAction } }) => setPriceReais(e.target.value)} min={0} />
{helperText}
@@ -177,4 +181,4 @@ export const BusinessVisibilitySection: React.FC = ({ room }) => { )} ); -}; \ No newline at end of file +}; diff --git a/apps/web/src/components/views/settings/tabs/room/DeleteRoomSection.tsx b/apps/web/src/components/views/settings/tabs/room/DeleteRoomSection.tsx index 7aca215581f..2b2be6e773c 100644 --- a/apps/web/src/components/views/settings/tabs/room/DeleteRoomSection.tsx +++ b/apps/web/src/components/views/settings/tabs/room/DeleteRoomSection.tsx @@ -66,8 +66,7 @@ export const DeleteRoomSection: React.FC = ({ roomId, onFinished }) => { >

Deletar esta sala?

- Esta ação é permanente. Todos os membros serão removidos e a sala não - poderá ser recuperada. + Esta ação é permanente. Todos os membros serão removidos e a sala não poderá ser recuperada.

= ({ roomId, onFinished }) => { marginTop: "16px", }} > - setConfirming(false)} - > + setConfirming(false)}> Cancelar @@ -93,4 +88,4 @@ export const DeleteRoomSection: React.FC = ({ roomId, onFinished }) => { )} ); -}; \ No newline at end of file +}; diff --git a/apps/web/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx b/apps/web/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx index ade2a582001..3686ea9dc29 100644 --- a/apps/web/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx +++ b/apps/web/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx @@ -22,7 +22,6 @@ import { SettingsSection } from "../../shared/SettingsSection"; import { MediaPreviewAccountSettings } from "../user/MediaPreviewAccountSettings"; import { DeleteRoomSection } from "./DeleteRoomSection"; - interface IProps { room: Room; } diff --git a/apps/web/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx b/apps/web/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx index 696f6462c19..b484fd31566 100644 --- a/apps/web/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx +++ b/apps/web/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx @@ -45,11 +45,15 @@ import { Caption } from "../../../typography/Caption"; import { MEGOLM_ENCRYPTION_ALGORITHM } from "../../../../../utils/crypto"; import { BusinessVisibilitySection } from "./BusinessVisibilitySection"; import { - getRoomFeatures, setRoomFeature, ROOM_FEATURES, - getRoomCalendar, setRoomCalendar, - getStream, setStream, + getRoomFeatures, + setRoomFeature, + ROOM_FEATURES, + getRoomCalendar, + setRoomCalendar, + getStream, + setStream, } from "../../../../../utils/admin/roomFeatures"; -import { getLiveWidget, startLive, stopLive } from "../../../../../utils/live/liveWidget" +import { getLiveWidget, startLive, stopLive } from "../../../../../utils/live/liveWidget"; import ToggleSwitch from "../../../elements/ToggleSwitch"; import defaultDispatcher from "../../../../../dispatcher/dispatcher"; import TextInputDialog from "../../../dialogs/TextInputDialog"; @@ -121,8 +125,6 @@ export default class SecurityRoomSettingsTab extends React.Component => { try { const { playback_url } = await getStream(this.props.room.roomId); @@ -683,7 +679,7 @@ export default class SecurityRoomSettingsTab extends React.Component ); const featuresSection = ( - - {ROOM_FEATURES.map(({ key, label }) => ( -
- {label} - this.onFeatureToggle(key, checked)} - aria-label={label} - /> -
- ))} -
- ); + + {ROOM_FEATURES.map(({ key, label }) => ( +
+ {label} + this.onFeatureToggle(key, checked)} + aria-label={label} + /> +
+ ))} +
+ ); let encryptionSettings: JSX.Element | undefined; if ( diff --git a/apps/web/src/components/views/settings/tabs/user/PromoteAdminSection.tsx b/apps/web/src/components/views/settings/tabs/user/PromoteAdminSection.tsx index 232fb0c37d8..429712b3c14 100644 --- a/apps/web/src/components/views/settings/tabs/user/PromoteAdminSection.tsx +++ b/apps/web/src/components/views/settings/tabs/user/PromoteAdminSection.tsx @@ -10,7 +10,6 @@ import { SettingsSubsection } from "../../shared/SettingsSubsection"; import { SettingsSection } from "../../shared/SettingsSection"; import ErrorDialog from "../../../dialogs/ErrorDialog"; - export const PromoteAdminSection: React.FC = () => { const isAdmin = useIsAdmin(); @@ -22,11 +21,11 @@ export const PromoteAdminSection: React.FC = () => { if (!isAdmin) return null; const onPromoteClick = (): void => { - const target = userId.trim(); - if (!target) { - setFeedback({ ok: false, msg: "Informe o ID do usuário..." }); - return; - } + const target = userId.trim(); + if (!target) { + setFeedback({ ok: false, msg: "Informe o ID do usuário..." }); + return; + } const { finished } = Modal.createDialog(QuestionDialog, { title: "Promover a administrador global?", @@ -69,10 +68,16 @@ export const PromoteAdminSection: React.FC = () => { /> {feedback && ( -
+
{feedback.msg}
)} @@ -85,4 +90,4 @@ export const PromoteAdminSection: React.FC = () => { ); -}; \ No newline at end of file +}; diff --git a/apps/web/src/components/views/spaces/SpaceCreateMenu.tsx b/apps/web/src/components/views/spaces/SpaceCreateMenu.tsx index 83518b859c8..69eaa04e1c9 100644 --- a/apps/web/src/components/views/spaces/SpaceCreateMenu.tsx +++ b/apps/web/src/components/views/spaces/SpaceCreateMenu.tsx @@ -56,17 +56,15 @@ export const createSpace = async ( alias?: string, topic?: string, avatar?: string | File, - priceCents: number = 0, + priceCents: number = 0, createOpts: Partial = {}, otherOpts: Partial> = {}, ): Promise => { - const derivedKeyword = - alias && alias.includes(":") - ? alias.substring(1, alias.indexOf(":")) - : nameToLocalpart(name); + const derivedKeyword = + alias && alias.includes(":") ? alias.substring(1, alias.indexOf(":")) : nameToLocalpart(name); + + const isPaid = priceCents > 0; - const isPaid = priceCents > 0; - return createRoom(client, { name, topic, @@ -88,8 +86,8 @@ export const createSpace = async ( roomType: RoomType.Space, useModuleCreation: true, visible: isPublic, - access_type: isPaid || !isPublic ? "private" : "public", - price: priceCents, + access_type: isPaid || !isPublic ? "private" : "public", + price: priceCents, keyword: derivedKeyword, historyVisibility: isPublic ? HistoryVisibility.WorldReadable : HistoryVisibility.Invited, spinner: false, @@ -146,9 +144,9 @@ export const SpaceCreateForm: React.FC = ({ showAliasField, topic, setTopic, - priceReais, - setPriceReais, - children, + priceReais, + setPriceReais, + children, }) => { const cli = useContext(MatrixClientContext); const domain = cli.getDomain() ?? undefined; @@ -283,19 +281,9 @@ const SpaceCreateMenu: React.FC<{ try { setError(null); const parsedReais = Number(String(priceReais).replace(",", ".")); - const priceCents = Number.isFinite(parsedReais) && parsedReais > 0 - ? Math.round(parsedReais * 100) - : 0; - - await createSpace( - cli, - name, - visibility === Visibility.Public, - alias, - topic, - avatar, - priceCents, - ); + const priceCents = Number.isFinite(parsedReais) && parsedReais > 0 ? Math.round(parsedReais * 100) : 0; + + await createSpace(cli, name, visibility === Visibility.Public, alias, topic, avatar, priceCents); onFinished(); } catch (e: any) { logger.error(e); @@ -310,8 +298,7 @@ const SpaceCreateMenu: React.FC<{ } setBusy(false); // destrava o botão — sem isso fica preso em "criando..." } - }; - + }; const onSearchClick = (): void => { defaultDispatcher.dispatch({ @@ -346,7 +333,6 @@ const SpaceCreateMenu: React.FC<{ )} - ); } else { body = ( diff --git a/apps/web/src/components/views/spaces/SpacePanel.tsx b/apps/web/src/components/views/spaces/SpacePanel.tsx index a5cf66bd34e..1736f893817 100644 --- a/apps/web/src/components/views/spaces/SpacePanel.tsx +++ b/apps/web/src/components/views/spaces/SpacePanel.tsx @@ -382,9 +382,9 @@ const InnerSpacePanel = React.memo( /> ))} - {isAdmin && (shouldShowComponent(UIComponent.CreateSpaces) && ( + {isAdmin && shouldShowComponent(UIComponent.CreateSpaces) && ( - ))} + )} ); }, diff --git a/apps/web/src/components/views/spaces/SpaceSettingsVisibilityTab.tsx b/apps/web/src/components/views/spaces/SpaceSettingsVisibilityTab.tsx index 4795adafa48..264c58bdb38 100644 --- a/apps/web/src/components/views/spaces/SpaceSettingsVisibilityTab.tsx +++ b/apps/web/src/components/views/spaces/SpaceSettingsVisibilityTab.tsx @@ -11,7 +11,7 @@ import { type Room, EventType, GuestAccess, -HistoryVisibility, + HistoryVisibility, JoinRule, type MatrixClient, } from "matrix-js-sdk/src/matrix"; @@ -51,7 +51,7 @@ const SpaceSettingsVisibilityTab: React.FC = ({ matrixClient: cli, space const userId = cli.getUserId()!; const joinRule = useRoomState(space, (state) => state.getJoinRule()); - + const [guestAccessEnabled, setGuestAccessEnabled] = useLocalEcho( () => space.currentState.getStateEvents(EventType.RoomGuestAccess, "")?.getContent()?.guest_access === @@ -154,7 +154,7 @@ const SpaceSettingsVisibilityTab: React.FC = ({ matrixClient: cli, space > - + { if (!cancelled) setLoading(false); }); - return () => { cancelled = true; }; + return () => { + cancelled = true; + }; }, [roomId]); if (loading) { @@ -126,4 +128,4 @@ export function EventsTable({ roomId }: EventsTableProps): JSX.Element { })}
); -} \ No newline at end of file +} diff --git a/apps/web/src/components/views/vods_drawer/VodWatchView.tsx b/apps/web/src/components/views/vods_drawer/VodWatchView.tsx index a191f85de13..31872e2fecb 100644 --- a/apps/web/src/components/views/vods_drawer/VodWatchView.tsx +++ b/apps/web/src/components/views/vods_drawer/VodWatchView.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState, type JSX } from "react"; -import Hls from "hls.js" +import Hls from "hls.js"; import { fetchVods, type LiveShow } from "../../../vods/vodsData"; @@ -22,7 +22,6 @@ export function VodWatchView({ roomId, live, onClose, onSelectVod }: VodWatchVie const videoRef = useRef(null); const hlsRef = useRef(null); - useEffect(() => { const video = videoRef.current; @@ -307,4 +306,4 @@ export function VodWatchView({ roomId, live, onClose, onSelectVod }: VodWatchVie
); -} \ No newline at end of file +} diff --git a/apps/web/src/components/views/vods_drawer/VodsDrawer.tsx b/apps/web/src/components/views/vods_drawer/VodsDrawer.tsx index 23a8fc4faab..cc100e759d3 100644 --- a/apps/web/src/components/views/vods_drawer/VodsDrawer.tsx +++ b/apps/web/src/components/views/vods_drawer/VodsDrawer.tsx @@ -127,7 +127,7 @@ export function VodsDrawer({ roomId, showVods, showEvents, open, onOpenChange }: fontWeight: 700, color: "var(--cpd-color-text-primary, #1b1d22)", }; - + const wideBody = (
); }; - + // garante que selectedTab aponta pra uma aba habilitada const effectiveTab = (() => { if (selectedTab === "rolou" && showVods) return "rolou"; @@ -266,7 +266,7 @@ export function VodsDrawer({ roomId, showVods, showEvents, open, onOpenChange }: /> )} - {showEvents && effectiveTab === "eventos" && } + {showEvents && effectiveTab === "eventos" && }
); @@ -306,4 +306,4 @@ export function VodsDrawer({ roomId, showVods, showEvents, open, onOpenChange }: )} ); -} \ No newline at end of file +} diff --git a/apps/web/src/components/views/vods_drawer/VodsDrawerBanner.tsx b/apps/web/src/components/views/vods_drawer/VodsDrawerBanner.tsx index b4f19ed8d87..a5dae439975 100644 --- a/apps/web/src/components/views/vods_drawer/VodsDrawerBanner.tsx +++ b/apps/web/src/components/views/vods_drawer/VodsDrawerBanner.tsx @@ -70,4 +70,4 @@ export function VodsDrawerBanner({ onOpen }: VodsDrawerBannerProps): JSX.Element
); -} \ No newline at end of file +} diff --git a/apps/web/src/components/views/vods_drawer/VodsGrid.tsx b/apps/web/src/components/views/vods_drawer/VodsGrid.tsx index e9bc50fd574..e1b5b1a9fdf 100644 --- a/apps/web/src/components/views/vods_drawer/VodsGrid.tsx +++ b/apps/web/src/components/views/vods_drawer/VodsGrid.tsx @@ -224,4 +224,4 @@ export function VodsGrid({ )} ); -} \ No newline at end of file +} diff --git a/apps/web/src/createRoom.ts b/apps/web/src/createRoom.ts index 17b8e583d18..479a1066019 100644 --- a/apps/web/src/createRoom.ts +++ b/apps/web/src/createRoom.ts @@ -329,24 +329,21 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro let createPromise: Promise<{ room_id: string }>; const createModuleRoom = async (): Promise<{ room_id: string }> => { - const response = await fetch( - `${client.baseUrl}/_synapse/room_service/create`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${client.getAccessToken()}`, - }, - body: JSON.stringify({ - name: opts.name ?? "", - room_kind: opts.roomType === RoomType.Space ? "space" : "group", - keyword: opts.keyword, - visible: opts.visible, - access_type: opts.access_type, - price: opts.price, - }), + const response = await fetch(`${client.baseUrl}/_synapse/room_service/create`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${client.getAccessToken()}`, }, - ); + body: JSON.stringify({ + name: opts.name ?? "", + room_kind: opts.roomType === RoomType.Space ? "space" : "group", + keyword: opts.keyword, + visible: opts.visible, + access_type: opts.access_type, + price: opts.price, + }), + }); if (!response.ok) { const body = await response.text(); @@ -366,149 +363,144 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro createPromise = client.createRoom(createOpts); } - return createPromise - .catch(function (err) { - if (opts.useModuleCreation && - err.status === 409 && - err.message.includes("Keyword already in use") - ) { - throw err; - } - if (!opts.useModuleCreation) { - if ( - err.httpStatus === 403 && - err.errcode === "M_UNKNOWN" && - err.data.error === "Not allowed to publish room" - ) { - createOpts.visibility = Visibility.Private; - return client.createRoom(createOpts); - } - } - - return Promise.reject(err); -}) - - - // .catch(function (err) { - // // NB This checks for the Synapse-specific error condition of a room creation - // // having been denied because the requesting user wanted to publish the room, - // // but the server denies them that permission (via room_list_publication_rules). - // // The check below responds by retrying without publishing the room. - // if ( - // err.httpStatus === 403 && - // err.errcode === "M_UNKNOWN" && - // err.data.error === "Not allowed to publish room" - // ) { - // logger.warn("Failed to publish room, try again without publishing it"); - // createOpts.visibility = Visibility.Private; - // return client.createRoom(createOpts); - // } else { - // return Promise.reject(err); - // } - // }) - .then(async (res): Promise => { - roomId = res.room_id; - - room = new Promise((resolve) => { - const storedRoom = client.getRoom(roomId); - if (storedRoom) { - resolve(storedRoom); - } else { - // The room hasn't arrived down sync yet - const onRoom = (emittedRoom: Room): void => { - if (emittedRoom.roomId === roomId) { - resolve(emittedRoom); - client.off(ClientEvent.Room, onRoom); - } - }; - client.on(ClientEvent.Room, onRoom); + return ( + createPromise + .catch(function (err) { + if (opts.useModuleCreation && err.status === 409 && err.message.includes("Keyword already in use")) { + throw err; } - }); - - if (opts.dmUserId) await Rooms.setDMRoom(client, roomId, opts.dmUserId); - }) - .then(async () => { - // We need to set up initial state manually if state encryption is enabled, since it needs - // to be encrypted. - if (opts.encryption && opts.stateEncryption) { - await enableStateEventEncryption(client, await room, opts); - } - }) - .finally(function () { - if (modal) modal.close(); - }) - .then(() => { - if (opts.parentSpace) { - return SpaceStore.instance.addRoomToSpace( - opts.parentSpace, - roomId, - [client.getDomain()!], - opts.suggested, - ); - } - }) - .then(async (): Promise => { - if (opts.roomType === RoomType.ElementVideo) { - // Set up this video room with a Jitsi call - await JitsiCall.create(await room); - } else if (opts.roomType === RoomType.UnstableCall) { - // Set up this video room with an Element call - ElementCall.create(await room); - } - }) - .then( - function () { - // NB we haven't necessarily blocked on the room promise, so we race - // here with the client knowing that the room exists, causing things - // like https://github.com/vector-im/vector-web/issues/1813 - // Even if we were to block on the echo, servers tend to split the room - // state over multiple syncs so we can't atomically know when we have the - // entire thing. - if (opts.andView) { - dis.dispatch({ - action: Action.ViewRoom, - room_id: roomId, - should_peek: false, - // Creating a room will have joined us to the room, - // so we are expecting the room to come down the sync - // stream, if it hasn't already. - joining: true, - justCreatedOpts: opts, - metricsTrigger: "Created", - }); + if (!opts.useModuleCreation) { + if ( + err.httpStatus === 403 && + err.errcode === "M_UNKNOWN" && + err.data.error === "Not allowed to publish room" + ) { + createOpts.visibility = Visibility.Private; + return client.createRoom(createOpts); + } } - return roomId; - }, - function (err) { - // Raise the error if the caller requested that we do so. - if (opts.inlineErrors) throw err; - - // We also failed to join the room (this sets joining to false in RoomViewStore) - dis.dispatch({ - action: Action.JoinRoomError, - roomId, + + return Promise.reject(err); + }) + + // .catch(function (err) { + // // NB This checks for the Synapse-specific error condition of a room creation + // // having been denied because the requesting user wanted to publish the room, + // // but the server denies them that permission (via room_list_publication_rules). + // // The check below responds by retrying without publishing the room. + // if ( + // err.httpStatus === 403 && + // err.errcode === "M_UNKNOWN" && + // err.data.error === "Not allowed to publish room" + // ) { + // logger.warn("Failed to publish room, try again without publishing it"); + // createOpts.visibility = Visibility.Private; + // return client.createRoom(createOpts); + // } else { + // return Promise.reject(err); + // } + // }) + .then(async (res): Promise => { + roomId = res.room_id; + + room = new Promise((resolve) => { + const storedRoom = client.getRoom(roomId); + if (storedRoom) { + resolve(storedRoom); + } else { + // The room hasn't arrived down sync yet + const onRoom = (emittedRoom: Room): void => { + if (emittedRoom.roomId === roomId) { + resolve(emittedRoom); + client.off(ClientEvent.Room, onRoom); + } + }; + client.on(ClientEvent.Room, onRoom); + } }); - logger.error("Failed to create room " + roomId + " " + err); - let description = _t("create_room|generic_error"); - if ( - err.status === 409 && - err.message.includes("Keyword already in use") - ) { - description = "A chave informada já está em uso."; + + if (opts.dmUserId) await Rooms.setDMRoom(client, roomId, opts.dmUserId); + }) + .then(async () => { + // We need to set up initial state manually if state encryption is enabled, since it needs + // to be encrypted. + if (opts.encryption && opts.stateEncryption) { + await enableStateEventEncryption(client, await room, opts); } - if (err.errcode === "M_UNSUPPORTED_ROOM_VERSION") { - // Technically not possible with the UI as of April 2019 because there's no - // options for the user to change this. However, it's not a bad thing to report - // the error to the user for if/when the UI is available. - description = _t("create_room|unsupported_version"); + }) + .finally(function () { + if (modal) modal.close(); + }) + .then(() => { + if (opts.parentSpace) { + return SpaceStore.instance.addRoomToSpace( + opts.parentSpace, + roomId, + [client.getDomain()!], + opts.suggested, + ); } - Modal.createDialog(ErrorDialog, { - title: _t("create_room|error_title"), - description, - }); - return null; - }, - ); + }) + .then(async (): Promise => { + if (opts.roomType === RoomType.ElementVideo) { + // Set up this video room with a Jitsi call + await JitsiCall.create(await room); + } else if (opts.roomType === RoomType.UnstableCall) { + // Set up this video room with an Element call + ElementCall.create(await room); + } + }) + .then( + function () { + // NB we haven't necessarily blocked on the room promise, so we race + // here with the client knowing that the room exists, causing things + // like https://github.com/vector-im/vector-web/issues/1813 + // Even if we were to block on the echo, servers tend to split the room + // state over multiple syncs so we can't atomically know when we have the + // entire thing. + if (opts.andView) { + dis.dispatch({ + action: Action.ViewRoom, + room_id: roomId, + should_peek: false, + // Creating a room will have joined us to the room, + // so we are expecting the room to come down the sync + // stream, if it hasn't already. + joining: true, + justCreatedOpts: opts, + metricsTrigger: "Created", + }); + } + return roomId; + }, + function (err) { + // Raise the error if the caller requested that we do so. + if (opts.inlineErrors) throw err; + + // We also failed to join the room (this sets joining to false in RoomViewStore) + dis.dispatch({ + action: Action.JoinRoomError, + roomId, + }); + logger.error("Failed to create room " + roomId + " " + err); + let description = _t("create_room|generic_error"); + if (err.status === 409 && err.message.includes("Keyword already in use")) { + description = "A chave informada já está em uso."; + } + if (err.errcode === "M_UNSUPPORTED_ROOM_VERSION") { + // Technically not possible with the UI as of April 2019 because there's no + // options for the user to change this. However, it's not a bad thing to report + // the error to the user for if/when the UI is available. + description = _t("create_room|unsupported_version"); + } + Modal.createDialog(ErrorDialog, { + title: _t("create_room|error_title"), + description, + }); + return null; + }, + ) + ); } async function enableStateEventEncryption(client: MatrixClient, room: Room, opts: IOpts): Promise { diff --git a/apps/web/src/hooks/useDiscoverRooms.ts b/apps/web/src/hooks/useDiscoverRooms.ts index 1df081f7b57..00806037659 100644 --- a/apps/web/src/hooks/useDiscoverRooms.ts +++ b/apps/web/src/hooks/useDiscoverRooms.ts @@ -54,4 +54,4 @@ export const useDiscoverRooms = (): { }, [fetchRooms]); return { loading, error, rooms, refresh: fetchRooms } as const; -}; \ No newline at end of file +}; diff --git a/apps/web/src/hooks/useIsAdmin.ts b/apps/web/src/hooks/useIsAdmin.ts index 86dd23bf705..a70ba0e8579 100644 --- a/apps/web/src/hooks/useIsAdmin.ts +++ b/apps/web/src/hooks/useIsAdmin.ts @@ -11,4 +11,4 @@ export function useIsAdmin() { }, []); return isAdmin; -} \ No newline at end of file +} diff --git a/apps/web/src/hooks/useJoinByKeyword.ts b/apps/web/src/hooks/useJoinByKeyword.ts index 897222f4847..98ea639736a 100644 --- a/apps/web/src/hooks/useJoinByKeyword.ts +++ b/apps/web/src/hooks/useJoinByKeyword.ts @@ -23,7 +23,7 @@ export const useJoinByKeyword = (): { method: "POST", headers: { "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, + "Authorization": `Bearer ${accessToken}`, }, body: JSON.stringify({ user_id: userId, keyword }), }); @@ -42,4 +42,4 @@ export const useJoinByKeyword = (): { }, []); return { loading, error, joinByKeyword } as const; -}; \ No newline at end of file +}; diff --git a/apps/web/src/utils/admin/deleteRoom.ts b/apps/web/src/utils/admin/deleteRoom.ts index 4ee4bca7815..dab3a584a95 100644 --- a/apps/web/src/utils/admin/deleteRoom.ts +++ b/apps/web/src/utils/admin/deleteRoom.ts @@ -2,15 +2,14 @@ import SdkConfig from "../../SdkConfig"; import { MatrixClientPeg } from "../../MatrixClientPeg"; export async function deleteRoom(roomId: string): Promise { - const baseUrl = - SdkConfig.get().default_server_config?.["m.homeserver"]?.base_url ?? window.location.origin; + const baseUrl = SdkConfig.get().default_server_config?.["m.homeserver"]?.base_url ?? window.location.origin; const accessToken = MatrixClientPeg.safeGet().getAccessToken(); const response = await fetch(`${baseUrl}/_synapse/room_service/deleteroom`, { method: "POST", headers: { "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, + "Authorization": `Bearer ${accessToken}`, }, // ajuste o nome do campo conforme seu DeleteRoomResource espera body: JSON.stringify({ room_id: roomId }), @@ -19,4 +18,4 @@ export async function deleteRoom(roomId: string): Promise { if (!response.ok) { throw new Error(`deleteroom failed with status ${response.status}`); } -} \ No newline at end of file +} diff --git a/apps/web/src/utils/admin/isGlobalAdmin.ts b/apps/web/src/utils/admin/isGlobalAdmin.ts index 5ad684a3049..64093b140c5 100644 --- a/apps/web/src/utils/admin/isGlobalAdmin.ts +++ b/apps/web/src/utils/admin/isGlobalAdmin.ts @@ -5,21 +5,15 @@ import { MatrixClientPeg } from "../../MatrixClientPeg"; export async function isGlobalAdmin(): Promise { try { - const baseUrl = - SdkConfig.get().default_server_config?.["m.homeserver"]?.base_url ?? - window.location.origin; + const baseUrl = SdkConfig.get().default_server_config?.["m.homeserver"]?.base_url ?? window.location.origin; - - const accessToken = MatrixClientPeg.safeGet().getAccessToken(); + const accessToken = MatrixClientPeg.safeGet().getAccessToken(); - const response = await fetch( - `${baseUrl}/_synapse/room_service/is_admin`, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, + const response = await fetch(`${baseUrl}/_synapse/room_service/is_admin`, { + headers: { + Authorization: `Bearer ${accessToken}`, }, - ); + }); if (!response.ok) { return false; @@ -32,4 +26,4 @@ export async function isGlobalAdmin(): Promise { console.error("Failed to check admin status", err); return false; } -} \ No newline at end of file +} diff --git a/apps/web/src/utils/admin/roomBusiness.ts b/apps/web/src/utils/admin/roomBusiness.ts index 44d97c55645..98a56bfbfd9 100644 --- a/apps/web/src/utils/admin/roomBusiness.ts +++ b/apps/web/src/utils/admin/roomBusiness.ts @@ -12,7 +12,7 @@ export interface SpaceChildRoom { export interface RoomVisibilityInfo { room_id: string; visible: boolean; - price: number; + price: number; access_type: string; // "public" | "private" } @@ -24,7 +24,7 @@ function authHeaders(): Record { const accessToken = MatrixClientPeg.safeGet().getAccessToken(); return { "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, + "Authorization": `Bearer ${accessToken}`, }; } @@ -113,4 +113,4 @@ export async function getSpaceChildRooms(p0: MatrixClient, spaceId: string): Pro name: r.name, numJoinedMembers: r.member_count, })); -} \ No newline at end of file +} diff --git a/apps/web/src/utils/admin/roomFeatures.ts b/apps/web/src/utils/admin/roomFeatures.ts index 71f0d661bca..bfc8bf9babe 100644 --- a/apps/web/src/utils/admin/roomFeatures.ts +++ b/apps/web/src/utils/admin/roomFeatures.ts @@ -8,7 +8,6 @@ export const ROOM_FEATURES: ReadonlyArray<{ key: string; label: string }> = [ export type RoomFeaturesMap = Record; - export interface StreamInfo { room_id: string; playback_url: string | null; @@ -22,7 +21,7 @@ function authHeaders(): Record { const accessToken = MatrixClientPeg.safeGet().getAccessToken(); return { "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, + "Authorization": `Bearer ${accessToken}`, }; } @@ -73,7 +72,6 @@ export async function getRoomCalendar(roomId: string): Promise<{ calendarId: str return { calendarId: body?.calendarId ?? null }; } - export async function setRoomCalendar(roomId: string, calendarId: string): Promise { const res = await fetch(`${baseUrl()}/_synapse/schedule_service/set_calendar`, { method: "POST", @@ -85,7 +83,6 @@ export async function setRoomCalendar(roomId: string, calendarId: string): Promi } } - export async function getStream(roomId: string): Promise { const res = await fetch(`${baseUrl()}/_synapse/room_streams_service/get_stream`, { method: "POST", @@ -108,4 +105,4 @@ export async function setStream(roomId: string, playbackUrl: string): Promise { const accessToken = MatrixClientPeg.safeGet().getAccessToken(); return { "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, + "Authorization": `Bearer ${accessToken}`, }; } @@ -23,16 +23,13 @@ async function readError(res: Response): Promise { } export async function setUserAdmin(userId: string, admin: boolean): Promise { - const res = await fetch( - `${baseUrl()}/_synapse/admin/v2/users/${encodeURIComponent(userId)}`, - { - method: "PUT", - headers: authHeaders(), - body: JSON.stringify({ admin }), - }, - ); + const res = await fetch(`${baseUrl()}/_synapse/admin/v2/users/${encodeURIComponent(userId)}`, { + method: "PUT", + headers: authHeaders(), + body: JSON.stringify({ admin }), + }); if (!res.ok) { // 403 = quem chamou não é admin; 400/404 = user inválido; etc. throw new Error((await readError(res)) ?? `Falha ao atualizar admin (status ${res.status})`); } -} \ No newline at end of file +} diff --git a/apps/web/src/utils/live/liveWidget.ts b/apps/web/src/utils/live/liveWidget.ts index 6a46cf67196..d5b02d98e2a 100644 --- a/apps/web/src/utils/live/liveWidget.ts +++ b/apps/web/src/utils/live/liveWidget.ts @@ -32,10 +32,7 @@ export async function stopLive(client: MatrixClient, roomId: string): Promise { +export async function fetchVods(roomId: string, page = 1): Promise<{ lives: LiveShow[]; lastPage: number }> { if (!roomId) { throw new Error("fetchVods: roomId é obrigatório"); } @@ -158,4 +155,4 @@ export async function fetchEvents(roomId: string): Promise { summary: e.summary ?? "Evento", start: new Date(e.start.dateTime ?? e.start.date), })); -} \ No newline at end of file +} diff --git a/apps/web/src/vods/vodsDrawerConfig.ts b/apps/web/src/vods/vodsDrawerConfig.ts index 7e8b21a5bde..b9eb5f63045 100644 --- a/apps/web/src/vods/vodsDrawerConfig.ts +++ b/apps/web/src/vods/vodsDrawerConfig.ts @@ -14,9 +14,7 @@ * TODO: replace this whole function with a per-room lookup of * room_features(room_id, 'vods'). */ -const ENABLED_ROOMS: ReadonlySet = new Set([ - "!uLRDsaGOYkMZMgVhGu:localhost", -]); +const ENABLED_ROOMS: ReadonlySet = new Set(["!uLRDsaGOYkMZMgVhGu:localhost"]); export function isVodsDrawerEnabled(roomId: string | undefined): boolean { if (!roomId) return false; @@ -25,4 +23,4 @@ export function isVodsDrawerEnabled(roomId: string | undefined): boolean { if (ENABLED_ROOMS.size === 0) return true; return ENABLED_ROOMS.has(roomId); -} \ No newline at end of file +} diff --git a/apps/web/test/unit-tests/utils/WidgetUtils-test.ts b/apps/web/test/unit-tests/utils/WidgetUtils-test.ts index d5579696be3..783d9af9b90 100644 --- a/apps/web/test/unit-tests/utils/WidgetUtils-test.ts +++ b/apps/web/test/unit-tests/utils/WidgetUtils-test.ts @@ -48,9 +48,9 @@ describe("getLocalJitsiWrapperUrl", () => { describe("deterministicJitsiConferenceId", () => { it("builds -", () => { - expect( - WidgetUtils.deterministicJitsiConferenceId("@matheus:matrix.buzzlabs.com.br", "Weekly Produto"), - ).toEqual("matheus-weekly-produto"); + expect(WidgetUtils.deterministicJitsiConferenceId("@matheus:matrix.buzzlabs.com.br", "Weekly Produto")).toEqual( + "matheus-weekly-produto", + ); }); it("strips accents and symbols from the room name", () => { diff --git a/infra/element-service.yaml b/infra/element-service.yaml index 8828ae5a034..2eee87cc9fc 100644 --- a/infra/element-service.yaml +++ b/infra/element-service.yaml @@ -1,12 +1,12 @@ apiVersion: v1 kind: Service metadata: - name: element + name: element spec: - type: NodePort - selector: - app: element - ports: - - port: 80 - targetPort: 80 - nodePort: 30009 + type: NodePort + selector: + app: element + ports: + - port: 80 + targetPort: 80 + nodePort: 30009 diff --git a/infra/element.yaml b/infra/element.yaml index e7c53bb5259..1b1bc753120 100644 --- a/infra/element.yaml +++ b/infra/element.yaml @@ -1,20 +1,20 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: element + name: element spec: - replicas: 1 - selector: - matchLabels: - app: element - template: - metadata: - labels: - app: element - spec: - containers: - - name: element - image: element-grupos:latest - imagePullPolicy: Never - ports: - - containerPort: 80 + replicas: 1 + selector: + matchLabels: + app: element + template: + metadata: + labels: + app: element + spec: + containers: + - name: element + image: element-grupos:latest + imagePullPolicy: Never + ports: + - containerPort: 80 diff --git a/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/RoomListItemContent.tsx b/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/RoomListItemContent.tsx index 61edab8907f..d390dc55cb0 100644 --- a/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/RoomListItemContent.tsx +++ b/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/RoomListItemContent.tsx @@ -71,7 +71,9 @@ export const RoomListItemContent = memo(function RoomListItemContent({ verticalAlign: "middle", }} > - + AO VIVO )} diff --git a/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/default-snapshot.ts b/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/default-snapshot.ts index 94544225249..a5e77fa6565 100644 --- a/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/default-snapshot.ts +++ b/packages/shared-components/src/room-list/VirtualizedRoomListView/RoomListItemWrapper/RoomListItemView/default-snapshot.ts @@ -54,5 +54,5 @@ export const defaultSnapshot: RoomListItemViewSnapshot = { isSelected: false, }, ], - isLive: false + isLive: false, };