From 8f8f51a4bc3f9bd11109b2ef66f295f4edbf0ebe Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 3 Sep 2026 16:27:32 -0300 Subject: [PATCH] refactor(RoomView): tidy room screen components Pass provider props explicitly instead of spreading, flatten MessageRow into early returns, route goSearchView through navigateToScreen so the ts-ignore can go, and read settings through useSetting. Hoist RoomPlaceholder's stylesheet to module scope, drop Banner's memo comparator that ignored title and closeBanner, and remove InvitedRoom's unused loading prop. --- app/views/RoomView/components/Banner.tsx | 71 ++++++++-------- app/views/RoomView/components/InvitedRoom.tsx | 13 +-- app/views/RoomView/components/MessageRow.tsx | 42 ++++------ .../RoomView/components/RightButtons.tsx | 22 ++--- .../components/RoomFooter/TakeOrJoin.tsx | 1 - .../components/RoomFooter/useFooterMessage.ts | 7 +- .../RoomFooter/useRoomFooterState.ts | 8 +- .../components/RoomMessageProvider.tsx | 38 ++++++++- .../RoomView/components/RoomPlaceholder.tsx | 82 ++++++++----------- .../RoomView/components/RoomProviders.tsx | 43 ++++++++-- app/views/RoomView/definitions.ts | 21 +---- 11 files changed, 175 insertions(+), 173 deletions(-) diff --git a/app/views/RoomView/components/Banner.tsx b/app/views/RoomView/components/Banner.tsx index 7222b3f3c1..c540d24fbb 100644 --- a/app/views/RoomView/components/Banner.tsx +++ b/app/views/RoomView/components/Banner.tsx @@ -15,46 +15,43 @@ interface IBannerProps { closeBanner: () => void; } -const Banner = memo( - ({ text, title, bannerClosed, closeBanner }: IBannerProps) => { - const [showModal, openModal] = useState(false); - const { colors } = useTheme(); +const Banner = memo(({ text, title, bannerClosed, closeBanner }: IBannerProps) => { + const [showModal, openModal] = useState(false); + const { colors } = useTheme(); - const toggleModal = () => openModal(prevState => !prevState); + const toggleModal = () => openModal(prevState => !prevState); - if (text && !bannerClosed) { - return ( - <> - - - - - + if (text && !bannerClosed) { + return ( + <> + + + + - - - {title} - - - - - - - ); - } + + + + {title} + + + + + + + ); + } - return null; - }, - (prevProps, nextProps) => prevProps.text === nextProps.text && prevProps.bannerClosed === nextProps.bannerClosed -); + return null; +}); export default Banner; diff --git a/app/views/RoomView/components/InvitedRoom.tsx b/app/views/RoomView/components/InvitedRoom.tsx index 60754c8db0..c8b7f260dd 100644 --- a/app/views/RoomView/components/InvitedRoom.tsx +++ b/app/views/RoomView/components/InvitedRoom.tsx @@ -11,12 +11,11 @@ type InvitedRoomProps = { title: string; description: string; inviter: IInviteSubscription['inviter']; - loading?: boolean; onAccept: () => Promise; onReject: () => Promise; }; -export const InvitedRoom = ({ title, description, inviter, loading, onAccept, onReject }: InvitedRoomProps): ReactElement => { +export const InvitedRoom = ({ title, description, inviter, onAccept, onReject }: InvitedRoomProps): ReactElement => { const { colors } = useTheme(); return ( @@ -25,14 +24,8 @@ export const InvitedRoom = ({ title, description, inviter, loading, onAccept, on title={title} description={description} detail={}> -