Default disappearing message timeout fixes

This commit is contained in:
Fedor Indutny 2021-06-25 16:52:56 -07:00 committed by GitHub
parent c9415dcf67
commit cd28e71bc6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 456 additions and 164 deletions

View file

@ -20,6 +20,7 @@ import * as groups from '../../groups';
import { calling } from '../../services/calling';
import { getOwn } from '../../util/getOwn';
import { assert } from '../../util/assert';
import * as universalExpireTimer from '../../util/universalExpireTimer';
import { trigger } from '../../shims/events';
import {
@ -208,9 +209,9 @@ export type PreJoinConversationType = {
};
export enum ComposerStep {
StartDirectConversation,
ChooseGroupMembers,
SetGroupMetadata,
StartDirectConversation = 'StartDirectConversation',
ChooseGroupMembers = 'ChooseGroupMembers',
SetGroupMetadata = 'SetGroupMetadata',
}
export enum OneTimeModalState {
@ -222,6 +223,7 @@ export enum OneTimeModalState {
type ComposerGroupCreationState = {
groupAvatar: undefined | ArrayBuffer;
groupName: string;
groupExpireTimer: number;
maximumGroupSizeModalState: OneTimeModalState;
recommendedGroupSizeModalState: OneTimeModalState;
selectedConversationIds: Array<string>;
@ -557,6 +559,10 @@ type SetComposeGroupNameActionType = {
type: 'SET_COMPOSE_GROUP_NAME';
payload: { groupName: string };
};
type SetComposeGroupExpireTimerActionType = {
type: 'SET_COMPOSE_GROUP_EXPIRE_TIMER';
payload: { groupExpireTimer: number };
};
type SetComposeSearchTermActionType = {
type: 'SET_COMPOSE_SEARCH_TERM';
payload: { searchTerm: string };
@ -625,6 +631,7 @@ export type ConversationActionType =
| SelectedConversationChangedActionType
| SetComposeGroupAvatarActionType
| SetComposeGroupNameActionType
| SetComposeGroupExpireTimerActionType
| SetComposeSearchTermActionType
| SetConversationHeaderTitleActionType
| SetIsNearBottomActionType
@ -679,6 +686,7 @@ export const actions = {
selectMessage,
setComposeGroupAvatar,
setComposeGroupName,
setComposeGroupExpireTimer,
setComposeSearchTerm,
setIsNearBottom,
setLoadCountdownStart,
@ -903,6 +911,7 @@ function createGroup(): ThunkAction<
const conversation = await groups.createGroupV2({
name: composer.groupName.trim(),
avatar: composer.groupAvatar,
expireTimer: composer.groupExpireTimer,
conversationIds: composer.selectedConversationIds,
});
dispatch({
@ -1192,6 +1201,15 @@ function setComposeGroupName(groupName: string): SetComposeGroupNameActionType {
};
}
function setComposeGroupExpireTimer(
groupExpireTimer: number
): SetComposeGroupExpireTimerActionType {
return {
type: 'SET_COMPOSE_GROUP_EXPIRE_TIMER',
payload: { groupExpireTimer },
};
}
function setComposeSearchTerm(
searchTerm: string
): SetComposeSearchTermActionType {
@ -2346,6 +2364,7 @@ export function reducer(
let maximumGroupSizeModalState: OneTimeModalState;
let groupName: string;
let groupAvatar: undefined | ArrayBuffer;
let groupExpireTimer: number;
switch (state.composer?.step) {
case ComposerStep.ChooseGroupMembers:
@ -2357,6 +2376,7 @@ export function reducer(
maximumGroupSizeModalState,
groupName,
groupAvatar,
groupExpireTimer,
} = state.composer);
break;
default:
@ -2364,6 +2384,7 @@ export function reducer(
recommendedGroupSizeModalState = OneTimeModalState.NeverShown;
maximumGroupSizeModalState = OneTimeModalState.NeverShown;
groupName = '';
groupExpireTimer = universalExpireTimer.get();
break;
}
@ -2379,6 +2400,7 @@ export function reducer(
maximumGroupSizeModalState,
groupName,
groupAvatar,
groupExpireTimer,
},
};
}
@ -2398,6 +2420,7 @@ export function reducer(
...pick(composer, [
'groupAvatar',
'groupName',
'groupExpireTimer',
'maximumGroupSizeModalState',
'recommendedGroupSizeModalState',
'selectedConversationIds',
@ -2453,6 +2476,25 @@ export function reducer(
}
}
if (action.type === 'SET_COMPOSE_GROUP_EXPIRE_TIMER') {
const { composer } = state;
switch (composer?.step) {
case ComposerStep.ChooseGroupMembers:
case ComposerStep.SetGroupMetadata:
return {
...state,
composer: {
...composer,
groupExpireTimer: action.payload.groupExpireTimer,
},
};
default:
assert(false, 'Setting compose group name at this step is a no-op');
return state;
}
}
if (action.type === 'SET_COMPOSE_SEARCH_TERM') {
const { composer } = state;
if (!composer) {

View file

@ -518,6 +518,7 @@ const getGroupCreationComposerState = createSelector(
): {
groupName: string;
groupAvatar: undefined | ArrayBuffer;
groupExpireTimer: number;
selectedConversationIds: Array<string>;
} => {
switch (composerState?.step) {
@ -532,6 +533,7 @@ const getGroupCreationComposerState = createSelector(
return {
groupName: '',
groupAvatar: undefined,
groupExpireTimer: 0,
selectedConversationIds: [],
};
}
@ -548,6 +550,11 @@ export const getComposeGroupName = createSelector(
(composerState): string => composerState.groupName
);
export const getComposeGroupExpireTimer = createSelector(
getGroupCreationComposerState,
(composerState): number => composerState.groupExpireTimer
);
export const getComposeSelectedContacts = createSelector(
getConversationLookup,
getGroupCreationComposerState,

View file

@ -23,6 +23,7 @@ import {
getFilteredComposeGroups,
getComposeGroupAvatar,
getComposeGroupName,
getComposeGroupExpireTimer,
getComposeSelectedContacts,
getComposerConversationSearchTerm,
getComposerStep,
@ -129,6 +130,7 @@ const getModeSpecificProps = (
mode: LeftPaneMode.SetGroupMetadata,
groupAvatar: getComposeGroupAvatar(state),
groupName: getComposeGroupName(state),
groupExpireTimer: getComposeGroupExpireTimer(state),
hasError: hasGroupCreationError(state),
isCreating: isCreatingGroup(state),
selectedContacts: getComposeSelectedContacts(state),