RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/views/room/contextualBar/Info/RoomInfoRouter.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import type { IRoom } from '@rocket.chat/core-typings';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import React, { useState } from 'react';

import { useRoom } from '../../contexts/RoomContext';
import { useRoomToolbox } from '../../contexts/RoomToolboxContext';
import EditRoomInfoWithData from './EditRoomInfo';
import RoomInfo from './RoomInfo';
import { useCanEditRoom } from './hooks/useCanEditRoom';

type RoomInfoRouterProps = {
    onClickBack?: () => void;
    onEnterRoom?: (room: IRoom) => void;
    resetState?: () => void;
};

const RoomInfoRouter = ({ onClickBack, onEnterRoom, resetState }: RoomInfoRouterProps) => {
    const [isEditing, setIsEditing] = useState(false);

    const { closeTab } = useRoomToolbox();
    const room = useRoom();

    const canEdit = useCanEditRoom(room);
    const onClickEnterRoom = useMutableCallback(() => onEnterRoom?.(room));

    if (isEditing) {
        return <EditRoomInfoWithData onClickBack={() => setIsEditing(false)} />;
    }

    return (
        <RoomInfo
            room={room}
            icon={room.t === 'p' ? 'lock' : 'hashtag'}
            onClickBack={onClickBack}
            onClickEdit={canEdit ? () => setIsEditing(true) : undefined}
            onClickClose={closeTab}
            {...(Boolean(onEnterRoom) && {
                onClickEnterRoom,
            })}
            resetState={resetState}
        />
    );
};

export default RoomInfoRouter;