diff --git a/app/components/custom_section_list.js b/app/components/custom_section_list.js
deleted file mode 100644
index 3831ab407..000000000
--- a/app/components/custom_section_list.js
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-import React from 'react';
-import PropTypes from 'prop-types';
-import {
- Platform,
- SectionList,
- Text,
- View
-} from 'react-native';
-
-import Loading from 'app/components/loading';
-import FormattedText from 'app/components/formatted_text';
-import {makeStyleSheetFromTheme, changeOpacity} from 'app/utils/theme';
-
-export default class CustomSectionList extends React.PureComponent {
- static propTypes = {
-
- /*
- * The current theme.
- */
- theme: PropTypes.object.isRequired,
-
- /*
- * An array of items to be rendered.
- */
- items: PropTypes.array.isRequired,
-
- /*
- * A function or React element used to render the items in the list.
- */
- renderItem: PropTypes.func,
-
- /*
- * Whether or not to render "No results" when the list contains no items.
- */
- showNoResults: PropTypes.bool,
-
- /*
- * A function to get a section identifier for each item in the list. Items sharing a section identifier will be grouped together.
- */
- sectionKeyExtractor: PropTypes.func.isRequired,
-
- /*
- * A comparison function used when sorting items in the list.
- */
- compareItems: PropTypes.func.isRequired,
-
- /*
- * A function to get a unique key for each item in the list. If not provided, the id field of the item will be used as the key.
- */
- keyExtractor: PropTypes.func,
-
- /*
- * Any extra data needed to render the list. If this value changes, all items of a list will be re-rendered.
- */
- extraData: PropTypes.object,
-
- /*
- * A function called when an item in the list is pressed. Receives the item that was pressed as an argument.
- */
- onRowPress: PropTypes.func,
-
- /*
- * A function called when the end of the list is reached. This can be triggered before this list end is reached
- * by changing onListEndReachedThreshold.
- */
- onListEndReached: PropTypes.func,
-
- /*
- * How soon before the end of the list onListEndReached should be called.
- */
- onListEndReachedThreshold: PropTypes.number,
-
- /*
- * Whether or not to display the loading text.
- */
- loading: PropTypes.bool,
-
- /*
- * The text displayed when loading is set to true.
- */
- loadingText: PropTypes.object,
-
- /*
- * How many items to render when the list is first rendered.
- */
- initialNumToRender: PropTypes.number
- };
-
- static defaultKeyExtractor = (item) => {
- return item.id;
- };
-
- static defaultProps = {
- showNoResults: true,
- keyExtractor: CustomSectionList.defaultKeyExtractor,
- onListEndReached: () => true,
- onListEndReachedThreshold: 50,
- loadingText: null,
- initialNumToRender: 10
- };
-
- constructor(props) {
- super(props);
-
- this.state = {
- sections: this.extractSections(props.items)
- };
- }
-
- componentWillReceiveProps(nextProps) {
- if (nextProps.items !== this.props.items) {
- this.setState({
- sections: this.extractSections(nextProps.items)
- });
- }
- }
-
- extractSections = (items) => {
- const sections = {};
- const sectionKeys = [];
- for (const item of items) {
- const sectionKey = this.props.sectionKeyExtractor(item);
-
- if (!sections[sectionKey]) {
- sections[sectionKey] = [];
- sectionKeys.push(sectionKey);
- }
-
- sections[sectionKey].push(item);
- }
-
- sectionKeys.sort();
-
- return sectionKeys.map((sectionKey) => {
- return {
- key: sectionKey,
- data: sections[sectionKey].sort(this.props.compareItems)
- };
- });
- }
-
- renderSectionHeader = ({section}) => {
- const {theme} = this.props;
- const style = getStyleFromTheme(theme);
-
- return (
-
-
- {section.key}
-
-
- );
- };
-
- renderItem = ({item}) => {
- const props = {
- id: item.id,
- item,
- onPress: this.props.onRowPress
- };
-
- // Allow passing in a component like UserListRow or ChannelListRow
- if (this.props.renderItem.prototype.isReactElement) {
- const RowComponent = this.props.renderItem;
- return ;
- }
-
- return this.props.renderItem(props);
- };
-
- renderItemSeparator = () => {
- const {theme} = this.props;
- const style = getStyleFromTheme(theme);
-
- return (
-
- );
- };
-
- renderFooter = () => {
- const {theme} = this.props;
- const style = getStyleFromTheme(theme);
-
- if (!this.props.loading || !this.props.loadingText) {
- return null;
- }
-
- if (this.props.items.length === 0) {
- return null;
- }
-
- return (
-
-
-
- );
- };
-
- renderEmptyList = () => {
- const {theme} = this.props;
- const style = getStyleFromTheme(theme);
-
- if (this.props.loading) {
- return (
-
-
-
- );
- }
-
- if (this.props.showNoResults) {
- return (
-
-
-
- );
- }
-
- return null;
- }
-
- render() {
- const style = getStyleFromTheme(this.props.theme);
-
- return (
-
- );
- }
-}
-
-const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
- return {
- listView: {
- flex: 1,
- backgroundColor: theme.centerChannelBg,
- ...Platform.select({
- android: {
- marginBottom: 20
- }
- })
- },
- loading: {
- height: 70,
- backgroundColor: theme.centerChannelBg,
- alignItems: 'center',
- justifyContent: 'center'
- },
- loadingText: {
- color: changeOpacity(theme.centerChannelColor, 0.6)
- },
- searching: {
- backgroundColor: theme.centerChannelBg,
- height: '100%',
- position: 'absolute',
- width: '100%'
- },
- sectionContainer: {
- backgroundColor: changeOpacity(theme.centerChannelColor, 0.07),
- paddingLeft: 10,
- paddingVertical: 2
- },
- sectionWrapper: {
- backgroundColor: theme.centerChannelBg
- },
- sectionText: {
- fontWeight: '600',
- color: theme.centerChannelColor
- },
- separator: {
- height: 1,
- flex: 1,
- backgroundColor: changeOpacity(theme.centerChannelColor, 0.1)
- },
- noResultContainer: {
- flex: 1,
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center'
- },
- noResultText: {
- fontSize: 26,
- color: changeOpacity(theme.centerChannelColor, 0.5)
- }
- };
-});