creating an interface for room state

This commit is contained in:
AlexAlexandre 2021-12-16 20:57:58 -03:00
parent 9d4f99ee84
commit 11c347e222
6 changed files with 84 additions and 22 deletions

View File

@ -15,14 +15,10 @@ import { showConfirmationAlert } from '../../utils/info';
import { useActionSheet } from '../ActionSheet';
import Header, { HEADER_HEIGHT } from './Header';
import events from '../../utils/log/events';
import { IRoom } from '../../definitions/IRoom';
interface IMessageActions {
room: {
rid: string | number;
autoTranslateLanguage: any;
autoTranslate: any;
reactWhenReadOnly: any;
};
room: IRoom;
tmid?: string;
user: {
id: string | number;

View File

@ -24,8 +24,6 @@ export interface IRoom extends IRocketChatRecord, ISubscriptions {
teamId?: string;
encrypted?: boolean;
visitor?: boolean;
autoTranslateLanguage?: boolean;
autoTranslate?: boolean;
usedCannedResponse?: string;
bannerClosed: boolean;
lastOpen?: Date;

View File

@ -19,6 +19,15 @@ export interface ISubscriptions {
sysMes: string;
archived: string;
broadcast: string;
autoTranslateLanguage: string;
autoTranslate: boolean;
reactWhenReadOnly: boolean;
f: boolean;
ro: boolean;
blocked: boolean;
blocker: boolean;
muted: boolean;
roles: string;
}
export type TSubscriptionsModel = ISubscriptions & Model;

View File

@ -6,7 +6,7 @@ import { IOptionsField } from '../views/NotificationPreferencesView/options';
import { IServer } from '../definitions/IServer';
import { IAttachment } from '../definitions/IAttachment';
import { IMessage } from '../definitions/IMessage';
import { IRoom, RoomType } from '../definitions/IRoom';
import { IRoom, TRoomModel, RoomType } from '../definitions/IRoom';
import { ModalStackParamList } from './MasterDetailStack/types';
export type ChatsStackParamList = {
@ -21,7 +21,7 @@ export type ChatsStackParamList = {
name?: string;
fname?: string;
prid?: string;
room?: IRoom;
room?: TRoomModel;
jumpToMessageId?: string;
jumpToThreadId?: string;
roomUserId?: string;

View File

@ -45,7 +45,7 @@ interface IRoomListContainerProps {
loading: boolean;
listRef: React.RefObject<FlatList>;
hideSystemMessages: any[];
tunread: [];
tunread: string;
ignored: [];
navigation: StackNavigationProp<ChatsStackParamList>;
showMessageInMainThread: boolean;

View File

@ -66,13 +66,27 @@ import UploadProgress from './UploadProgress';
import ReactionPicker from './ReactionPicker';
import List from './List';
import { ChatsStackParamList } from '../../stacks/types';
import { IRoom, IRoomModel, RoomType } from '../../definitions/IRoom';
import { IRoom, TRoomModel, RoomType } from '../../definitions/IRoom';
import { IAttachment } from '../../definitions/IAttachment';
import { IThread } from '../../definitions/IThread';
import { ISubscriptions } from '../../definitions/ISubscriptions';
import { ModalStackParamList } from '../../stacks/MasterDetailStack/types';
const stateAttrsUpdate = [
type TStateAttrsUpdate =
| 'joined'
| 'lastOpen'
| 'reactionsModalVisible'
| 'canAutoTranslate'
| 'selectedMessage'
| 'loading'
| 'editing'
| 'replying'
| 'reacting'
| 'readOnly'
| 'member'
| 'showingBlockingLoader';
const stateAttrsUpdate: TStateAttrsUpdate[] = [
'joined',
'lastOpen',
'reactionsModalVisible',
@ -86,7 +100,30 @@ const stateAttrsUpdate = [
'member',
'showingBlockingLoader'
];
const roomAttrsUpdate = [
type TRoomAttrsUpdate =
| 'f'
| 'ro'
| 'blocked'
| 'blocker'
| 'archived'
| 'tunread'
| 'muted'
| 'ignored'
| 'jitsiTimeout'
| 'announcement'
| 'sysMes'
| 'topic'
| 'name'
| 'fname'
| 'roles'
| 'bannerClosed'
| 'visitor'
| 'joinCodeRequired'
| 'teamMain'
| 'teamId';
const roomAttrsUpdate: TRoomAttrsUpdate[] = [
'f',
'ro',
'blocked',
@ -139,6 +176,28 @@ interface IRoomViewProps {
};
}
interface IRoomViewState {
joined: boolean;
room: TRoomModel;
roomUpdate: Partial<IRoom>;
member: {
statusText?: string;
};
lastOpen: Date | null;
reactionsModalVisible: boolean;
selectedMessage: {};
canAutoTranslate: boolean;
loading: boolean;
showingBlockingLoader: boolean;
editing: boolean;
replying: boolean;
replyWithMention: boolean;
reacting: boolean;
readOnly: boolean;
unreadsCount: number | null;
roomUserId: string;
}
export interface IRoomItem {
id: string;
t: string;
@ -171,7 +230,7 @@ interface IBlockAction {
mid: string;
}
class RoomView extends React.Component<IRoomViewProps, any> {
class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
private rid: string;
private t: RoomType;
private tmid?: string;
@ -219,7 +278,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
name,
fname,
prid
} as IRoom);
} as TRoomModel);
this.jumpToMessageId = props.route.params?.jumpToMessageId;
this.jumpToThreadId = props.route.params?.jumpToThreadId;
const roomUserId = props.route.params?.roomUserId ?? RocketChat.getUidDirectMessage(room);
@ -296,7 +355,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
console.timeEnd(`${this.constructor.name} mount`);
}
shouldComponentUpdate(nextProps: IRoomViewProps, nextState: any) {
shouldComponentUpdate(nextProps: IRoomViewProps, nextState: IRoomViewState) {
const { state } = this;
const { roomUpdate, member } = state;
const { appState, theme, insets, route } = this.props;
@ -322,7 +381,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
return roomAttrsUpdate.some(key => !dequal(nextState.roomUpdate[key], roomUpdate[key]));
}
componentDidUpdate(prevProps: IRoomViewProps, prevState: any) {
componentDidUpdate(prevProps: IRoomViewProps, prevState: IRoomViewState) {
const { roomUpdate } = this.state;
const { appState, insets, route } = this.props;
@ -376,7 +435,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
this.mounted = false;
if (!editing && this.messagebox && this.messagebox.current) {
const { text } = this.messagebox.current;
let obj: IRoomModel = room; // TODO - test the threadsCollection.find return to change this any;
let obj = room; // TODO - test the threadsCollection.find return to change this any;
if (this.tmid) {
try {
@ -504,10 +563,10 @@ class RoomView extends React.Component<IRoomViewProps, any> {
<RightButtons
rid={rid}
tmid={tmid}
teamId={teamId}
teamId={teamId!}
joined={joined}
t={t}
encrypted={encrypted}
encrypted={encrypted!}
navigation={navigation}
toggleFollowThread={this.toggleFollowThread}
/>
@ -1086,7 +1145,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
dateSeparator = item.ts;
showUnreadSeparator = moment(item.ts).isAfter(lastOpen);
} else {
showUnreadSeparator = lastOpen && moment(item.ts).isSameOrAfter(lastOpen) && moment(previousItem.ts).isBefore(lastOpen);
showUnreadSeparator = lastOpen! && moment(item.ts).isSameOrAfter(lastOpen) && moment(previousItem.ts).isBefore(lastOpen);
if (!moment(item.ts).isSame(previousItem.ts, 'day')) {
dateSeparator = item.ts;
}