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 { useActionSheet } from '../ActionSheet';
|
||||||
import Header, { HEADER_HEIGHT } from './Header';
|
import Header, { HEADER_HEIGHT } from './Header';
|
||||||
import events from '../../utils/log/events';
|
import events from '../../utils/log/events';
|
||||||
|
import { IRoom } from '../../definitions/IRoom';
|
||||||
|
|
||||||
interface IMessageActions {
|
interface IMessageActions {
|
||||||
room: {
|
room: IRoom;
|
||||||
rid: string | number;
|
|
||||||
autoTranslateLanguage: any;
|
|
||||||
autoTranslate: any;
|
|
||||||
reactWhenReadOnly: any;
|
|
||||||
};
|
|
||||||
tmid?: string;
|
tmid?: string;
|
||||||
user: {
|
user: {
|
||||||
id: string | number;
|
id: string | number;
|
||||||
|
|
|
@ -24,8 +24,6 @@ export interface IRoom extends IRocketChatRecord, ISubscriptions {
|
||||||
teamId?: string;
|
teamId?: string;
|
||||||
encrypted?: boolean;
|
encrypted?: boolean;
|
||||||
visitor?: boolean;
|
visitor?: boolean;
|
||||||
autoTranslateLanguage?: boolean;
|
|
||||||
autoTranslate?: boolean;
|
|
||||||
usedCannedResponse?: string;
|
usedCannedResponse?: string;
|
||||||
bannerClosed: boolean;
|
bannerClosed: boolean;
|
||||||
lastOpen?: Date;
|
lastOpen?: Date;
|
||||||
|
|
|
@ -19,6 +19,15 @@ export interface ISubscriptions {
|
||||||
sysMes: string;
|
sysMes: string;
|
||||||
archived: string;
|
archived: string;
|
||||||
broadcast: 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;
|
export type TSubscriptionsModel = ISubscriptions & Model;
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { IOptionsField } from '../views/NotificationPreferencesView/options';
|
||||||
import { IServer } from '../definitions/IServer';
|
import { IServer } from '../definitions/IServer';
|
||||||
import { IAttachment } from '../definitions/IAttachment';
|
import { IAttachment } from '../definitions/IAttachment';
|
||||||
import { IMessage } from '../definitions/IMessage';
|
import { IMessage } from '../definitions/IMessage';
|
||||||
import { IRoom, RoomType } from '../definitions/IRoom';
|
import { IRoom, TRoomModel, RoomType } from '../definitions/IRoom';
|
||||||
import { ModalStackParamList } from './MasterDetailStack/types';
|
import { ModalStackParamList } from './MasterDetailStack/types';
|
||||||
|
|
||||||
export type ChatsStackParamList = {
|
export type ChatsStackParamList = {
|
||||||
|
@ -21,7 +21,7 @@ export type ChatsStackParamList = {
|
||||||
name?: string;
|
name?: string;
|
||||||
fname?: string;
|
fname?: string;
|
||||||
prid?: string;
|
prid?: string;
|
||||||
room?: IRoom;
|
room?: TRoomModel;
|
||||||
jumpToMessageId?: string;
|
jumpToMessageId?: string;
|
||||||
jumpToThreadId?: string;
|
jumpToThreadId?: string;
|
||||||
roomUserId?: string;
|
roomUserId?: string;
|
||||||
|
|
|
@ -45,7 +45,7 @@ interface IRoomListContainerProps {
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
listRef: React.RefObject<FlatList>;
|
listRef: React.RefObject<FlatList>;
|
||||||
hideSystemMessages: any[];
|
hideSystemMessages: any[];
|
||||||
tunread: [];
|
tunread: string;
|
||||||
ignored: [];
|
ignored: [];
|
||||||
navigation: StackNavigationProp<ChatsStackParamList>;
|
navigation: StackNavigationProp<ChatsStackParamList>;
|
||||||
showMessageInMainThread: boolean;
|
showMessageInMainThread: boolean;
|
||||||
|
|
|
@ -66,13 +66,27 @@ import UploadProgress from './UploadProgress';
|
||||||
import ReactionPicker from './ReactionPicker';
|
import ReactionPicker from './ReactionPicker';
|
||||||
import List from './List';
|
import List from './List';
|
||||||
import { ChatsStackParamList } from '../../stacks/types';
|
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 { IAttachment } from '../../definitions/IAttachment';
|
||||||
import { IThread } from '../../definitions/IThread';
|
import { IThread } from '../../definitions/IThread';
|
||||||
import { ISubscriptions } from '../../definitions/ISubscriptions';
|
import { ISubscriptions } from '../../definitions/ISubscriptions';
|
||||||
import { ModalStackParamList } from '../../stacks/MasterDetailStack/types';
|
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',
|
'joined',
|
||||||
'lastOpen',
|
'lastOpen',
|
||||||
'reactionsModalVisible',
|
'reactionsModalVisible',
|
||||||
|
@ -86,7 +100,30 @@ const stateAttrsUpdate = [
|
||||||
'member',
|
'member',
|
||||||
'showingBlockingLoader'
|
'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',
|
'f',
|
||||||
'ro',
|
'ro',
|
||||||
'blocked',
|
'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 {
|
export interface IRoomItem {
|
||||||
id: string;
|
id: string;
|
||||||
t: string;
|
t: string;
|
||||||
|
@ -171,7 +230,7 @@ interface IBlockAction {
|
||||||
mid: string;
|
mid: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RoomView extends React.Component<IRoomViewProps, any> {
|
class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
private rid: string;
|
private rid: string;
|
||||||
private t: RoomType;
|
private t: RoomType;
|
||||||
private tmid?: string;
|
private tmid?: string;
|
||||||
|
@ -219,7 +278,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
|
||||||
name,
|
name,
|
||||||
fname,
|
fname,
|
||||||
prid
|
prid
|
||||||
} as IRoom);
|
} as TRoomModel);
|
||||||
this.jumpToMessageId = props.route.params?.jumpToMessageId;
|
this.jumpToMessageId = props.route.params?.jumpToMessageId;
|
||||||
this.jumpToThreadId = props.route.params?.jumpToThreadId;
|
this.jumpToThreadId = props.route.params?.jumpToThreadId;
|
||||||
const roomUserId = props.route.params?.roomUserId ?? RocketChat.getUidDirectMessage(room);
|
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`);
|
console.timeEnd(`${this.constructor.name} mount`);
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps: IRoomViewProps, nextState: any) {
|
shouldComponentUpdate(nextProps: IRoomViewProps, nextState: IRoomViewState) {
|
||||||
const { state } = this;
|
const { state } = this;
|
||||||
const { roomUpdate, member } = state;
|
const { roomUpdate, member } = state;
|
||||||
const { appState, theme, insets, route } = this.props;
|
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]));
|
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 { roomUpdate } = this.state;
|
||||||
const { appState, insets, route } = this.props;
|
const { appState, insets, route } = this.props;
|
||||||
|
|
||||||
|
@ -376,7 +435,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
|
||||||
this.mounted = false;
|
this.mounted = false;
|
||||||
if (!editing && this.messagebox && this.messagebox.current) {
|
if (!editing && this.messagebox && this.messagebox.current) {
|
||||||
const { text } = 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) {
|
if (this.tmid) {
|
||||||
try {
|
try {
|
||||||
|
@ -504,10 +563,10 @@ class RoomView extends React.Component<IRoomViewProps, any> {
|
||||||
<RightButtons
|
<RightButtons
|
||||||
rid={rid}
|
rid={rid}
|
||||||
tmid={tmid}
|
tmid={tmid}
|
||||||
teamId={teamId}
|
teamId={teamId!}
|
||||||
joined={joined}
|
joined={joined}
|
||||||
t={t}
|
t={t}
|
||||||
encrypted={encrypted}
|
encrypted={encrypted!}
|
||||||
navigation={navigation}
|
navigation={navigation}
|
||||||
toggleFollowThread={this.toggleFollowThread}
|
toggleFollowThread={this.toggleFollowThread}
|
||||||
/>
|
/>
|
||||||
|
@ -1086,7 +1145,7 @@ class RoomView extends React.Component<IRoomViewProps, any> {
|
||||||
dateSeparator = item.ts;
|
dateSeparator = item.ts;
|
||||||
showUnreadSeparator = moment(item.ts).isAfter(lastOpen);
|
showUnreadSeparator = moment(item.ts).isAfter(lastOpen);
|
||||||
} else {
|
} 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')) {
|
if (!moment(item.ts).isSame(previousItem.ts, 'day')) {
|
||||||
dateSeparator = item.ts;
|
dateSeparator = item.ts;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue