import React from 'react'; import { ActionsPanel, SectionType } from './session/ActionsPanel'; import { LeftPaneMessageSection } from './session/LeftPaneMessageSection'; import { PropsData as ConversationListItemPropsType } from './ConversationListItem'; import { PropsData as SearchResultsProps } from './SearchResults'; import { SearchOptions } from '../types/Search'; import { LeftPaneSectionHeader } from './session/LeftPaneSectionHeader'; import { ConversationType } from '../state/ducks/conversations'; import { LeftPaneContactSection } from './session/LeftPaneContactSection'; import { LeftPaneSettingSection } from './session/LeftPaneSettingSection'; import { LeftPaneChannelSection } from './session/LeftPaneChannelSection'; // from https://github.com/bvaughn/react-virtualized/blob/fb3484ed5dcc41bffae8eab029126c0fb8f7abc0/source/List/types.js#L5 export type RowRendererParamsType = { index: number; isScrolling: boolean; isVisible: boolean; key: string; parent: Object; style: Object; }; interface State { selectedSection: SectionType; } interface Props { conversations: Array; friends: Array; sentFriendsRequest: Array; receivedFriendsRequest: Array; unreadMessageCount: number; receivedFriendRequestCount: number; searchResults?: SearchResultsProps; searchTerm: string; isSecondaryDevice: boolean; openConversationInternal: (id: string, messageId?: string) => void; updateSearchTerm: (searchTerm: string) => void; search: (query: string, options: SearchOptions) => void; clearSearch: () => void; } export class LeftPane extends React.Component { public state = { selectedSection: SectionType.Message, }; public constructor(props: any) { super(props); this.handleSectionSelected = this.handleSectionSelected.bind(this); } // this static function is set here to be used by all subsections (message, contacts,...) to render their headers public static RENDER_HEADER( labels: Array, onTabSelected?: any, buttonLabel?: string, buttonClicked?: any, notificationCount?: number ): JSX.Element { return ( ); } public handleSectionSelected(section: SectionType) { this.props.clearSearch(); this.setState({ selectedSection: section }); } public render(): JSX.Element { return (
{this.renderSection()}
); } private renderSection(): JSX.Element | undefined { switch (this.state.selectedSection) { case SectionType.Message: return this.renderMessageSection(); case SectionType.Contact: return this.renderContactSection(); case SectionType.Channel: return this.renderChannelSection(); case SectionType.Settings: return this.renderSettingSection(); case SectionType.Moon: return window.toggleTheme(); default: return undefined; } } private renderMessageSection() { const { openConversationInternal, conversations, searchResults, searchTerm, isSecondaryDevice, updateSearchTerm, search, clearSearch, } = this.props; return ( ); } private renderContactSection() { const { openConversationInternal, friends, sentFriendsRequest, receivedFriendsRequest, conversations, searchResults, searchTerm, isSecondaryDevice, updateSearchTerm, search, clearSearch, receivedFriendRequestCount, } = this.props; return ( ); } private renderSettingSection() { return ; } private renderChannelSection() { const { openConversationInternal, conversations, searchResults, searchTerm, isSecondaryDevice, updateSearchTerm, search, clearSearch, } = this.props; return ( ); } }