Archive Conversation

This commit is contained in:
Scott Nonnenberg 2019-03-11 17:20:16 -07:00
parent d72f89d776
commit 6ffbc0ac06
20 changed files with 568 additions and 109 deletions

View file

@ -1,4 +1,3 @@
import { compact } from 'lodash';
import { createSelector } from 'reselect';
import { format } from '../../types/PhoneNumber';
@ -29,6 +28,13 @@ export const getSelectedConversation = createSelector(
}
);
export const getShowArchived = createSelector(
getConversations,
(state: ConversationsStateType): boolean => {
return Boolean(state.showArchived);
}
);
function getConversationTitle(
conversation: ConversationType,
options: { i18n: LocalizerType; ourRegionCode: string }
@ -83,37 +89,49 @@ export const getConversationComparator = createSelector(
_getConversationComparator
);
export const _getLeftPaneList = (
export const _getLeftPaneLists = (
lookup: ConversationLookupType,
comparator: (left: ConversationType, right: ConversationType) => number,
selectedConversation?: string
): Array<ConversationType> => {
): {
conversations: Array<ConversationType>;
archivedConversations: Array<ConversationType>;
} => {
const values = Object.values(lookup);
const filtered = compact(
values.map(conversation => {
if (!conversation.activeAt) {
return null;
}
const sorted = values.sort(comparator);
if (selectedConversation === conversation.id) {
return {
...conversation,
isSelected: true,
};
}
const conversations: Array<ConversationType> = [];
const archivedConversations: Array<ConversationType> = [];
return conversation;
})
);
const max = sorted.length;
for (let i = 0; i < max; i += 1) {
let conversation = sorted[i];
if (!conversation.activeAt) {
continue;
}
return filtered.sort(comparator);
if (selectedConversation === conversation.id) {
conversation = {
...conversation,
isSelected: true,
};
}
if (conversation.isArchived) {
archivedConversations.push(conversation);
} else {
conversations.push(conversation);
}
}
return { conversations, archivedConversations };
};
export const getLeftPaneList = createSelector(
export const getLeftPaneLists = createSelector(
getConversationLookup,
getConversationComparator,
getSelectedConversation,
_getLeftPaneList
_getLeftPaneLists
);
export const getMe = createSelector(

View file

@ -2,14 +2,16 @@ import { compact } from 'lodash';
import { createSelector } from 'reselect';
import { StateType } from '../reducer';
import { SearchStateType } from '../ducks/search';
import { SearchStateType } from '../ducks/search';
import {
getConversationLookup,
getSelectedConversation,
} from './conversations';
import { ConversationLookupType } from '../ducks/conversations';
import { getRegionCode } from './user';
export const getSearch = (state: StateType): SearchStateType => state.search;
export const getQuery = createSelector(
@ -34,12 +36,14 @@ export const isSearching = createSelector(
export const getSearchResults = createSelector(
[
getSearch,
getRegionCode,
getConversationLookup,
getSelectedConversation,
getSelectedMessage,
],
(
state: SearchStateType,
regionCode: string,
lookup: ConversationLookupType,
selectedConversation?: string,
selectedMessage?: string
@ -84,6 +88,7 @@ export const getSearchResults = createSelector(
return message;
}),
regionCode: regionCode,
searchTerm: state.query,
showStartNewConversation: Boolean(
state.normalizedPhoneNumber && !lookup[state.normalizedPhoneNumber]