You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
| import React from 'react';
 | |
| 
 | |
| import { MemoConversationListItemWithDetails } from './conversation-list-item/ConversationListItem';
 | |
| import { AutoSizer, List } from 'react-virtualized';
 | |
| import { LeftPaneSectionHeader } from './LeftPaneSectionHeader';
 | |
| import { useSelector } from 'react-redux';
 | |
| import { getDirectContacts } from '../../state/selectors/conversations';
 | |
| import { RowRendererParamsType } from './LeftPane';
 | |
| 
 | |
| const renderRow = (props: RowRendererParamsType) => {
 | |
|   const { index, key, style } = props;
 | |
| 
 | |
|   const directContacts = (props.parent as any)?.props?.directContacts || [];
 | |
| 
 | |
|   const item = directContacts?.[index];
 | |
| 
 | |
|   if (!item) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   return <MemoConversationListItemWithDetails style={style} key={key} {...item} />;
 | |
| };
 | |
| 
 | |
| const ContactListItemSection = () => {
 | |
|   const directContacts = useSelector(getDirectContacts);
 | |
| 
 | |
|   if (!directContacts) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   const length = Number(directContacts.length);
 | |
| 
 | |
|   return (
 | |
|     <div className="module-left-pane__list" key={0}>
 | |
|       <AutoSizer>
 | |
|         {({ height, width }) => (
 | |
|           <List
 | |
|             className="module-left-pane__virtual-list"
 | |
|             height={height}
 | |
|             directContacts={directContacts} // needed for change in props refresh
 | |
|             rowCount={length}
 | |
|             rowHeight={64}
 | |
|             rowRenderer={renderRow}
 | |
|             width={width}
 | |
|             autoHeight={false}
 | |
|           />
 | |
|         )}
 | |
|       </AutoSizer>
 | |
|     </div>
 | |
|   );
 | |
| };
 | |
| 
 | |
| export const LeftPaneContactSection = () => {
 | |
|   return (
 | |
|     <div className="left-pane-contact-section">
 | |
|       <LeftPaneSectionHeader />
 | |
|       <div className="left-pane-contact-content">
 | |
|         <ContactListItemSection />
 | |
|       </div>
 | |
|     </div>
 | |
|   );
 | |
| };
 |