creating an interface for room state
This commit is contained in:
parent
9d4f99ee84
commit
11c347e222
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -45,7 +45,7 @@ interface IRoomListContainerProps {
|
|||
loading: boolean;
|
||||
listRef: React.RefObject<FlatList>;
|
||||
hideSystemMessages: any[];
|
||||
tunread: [];
|
||||
tunread: string;
|
||||
ignored: [];
|
||||
navigation: StackNavigationProp<ChatsStackParamList>;
|
||||
showMessageInMainThread: boolean;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue