* Added type column to scheduled post and draft table * removed console log * fixed a test * fixes * Restored ununtended changes * Added BoR indicator in scheduled posts * used fixed padding * used Tag for BoR chip * test: add comprehensive tests for formatTime humanReadable parameter * test: add initial test file for burn on read label component * test: add comprehensive tests for BoRLabel component * test: update BoRLabel tests to use deep rendering and remove mocks * test: fix renderWithIntl import and usage in BoRLabel test * refactor: Update BoRLabel tests to use renderWithIntl and remove formatTime mock * refactor: simplify imports and remove renderWithIntl mock in test file * Updated tests * reset unintended changes * reset unintended changes * reset unintended changes * i18n fixes * fixed tests * Matched BOR tag size to post priority tag * Review fixes
102 lines
3.3 KiB
TypeScript
102 lines
3.3 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {withDatabase, withObservables} from '@nozbe/watermelondb/react';
|
|
import React from 'react';
|
|
import {switchMap, of} from 'rxjs';
|
|
|
|
import {observeChannel, observeChannelMembers} from '@queries/servers/channel';
|
|
import {observeIsPostPriorityEnabled} from '@queries/servers/post';
|
|
import {observeConfigIntValue} from '@queries/servers/system';
|
|
import {observeCurrentUser, observeUser} from '@queries/servers/user';
|
|
|
|
import DraftAndScheduledPost from './draft_scheduled_post';
|
|
|
|
import type {WithDatabaseArgs} from '@typings/database/database';
|
|
import type ChannelModel from '@typings/database/models/servers/channel';
|
|
import type ChannelMembershipModel from '@typings/database/models/servers/channel_membership';
|
|
import type DraftModel from '@typings/database/models/servers/draft';
|
|
import type ScheduledPostModel from '@typings/database/models/servers/scheduled_post';
|
|
import type UserModel from '@typings/database/models/servers/user';
|
|
|
|
type Props = {
|
|
channelId: string;
|
|
currentUser?: UserModel;
|
|
members?: ChannelMembershipModel[];
|
|
channel?: ChannelModel;
|
|
post: DraftModel | ScheduledPostModel;
|
|
} & WithDatabaseArgs;
|
|
|
|
const withCurrentUser = withObservables([], ({database}: WithDatabaseArgs) => ({
|
|
currentUser: observeCurrentUser(database),
|
|
}));
|
|
|
|
const withChannel = withObservables(['channelId'], ({channelId, database}: Props) => ({
|
|
channel: observeChannel(database, channelId),
|
|
}));
|
|
|
|
const withChannelMembers = withObservables(['channelId'], ({channelId, database}: Props) => {
|
|
const channel = observeChannel(database, channelId);
|
|
|
|
const members = channel.pipe(
|
|
switchMap((channelData) => {
|
|
if (channelData?.type === 'D') {
|
|
return observeChannelMembers(database, channelId);
|
|
}
|
|
return of(undefined);
|
|
}),
|
|
);
|
|
|
|
return {
|
|
members,
|
|
};
|
|
});
|
|
|
|
const observePostReceiverUser = ({
|
|
members,
|
|
database,
|
|
channelData,
|
|
currentUser,
|
|
}: {
|
|
members?: ChannelMembershipModel[];
|
|
database: WithDatabaseArgs['database'];
|
|
channelData?: ChannelModel;
|
|
currentUser?: UserModel;
|
|
}) => {
|
|
if (channelData?.type === 'D') {
|
|
if (members && members.length > 0) {
|
|
const validMember = members.find((member) => member.userId !== currentUser?.id);
|
|
if (validMember) {
|
|
return observeUser(database, validMember.userId);
|
|
}
|
|
return of(undefined);
|
|
}
|
|
return of(undefined);
|
|
}
|
|
return of(undefined);
|
|
};
|
|
|
|
const enhance = withObservables(['channel', 'members', 'post'], ({channel, database, currentUser, members, post}: Props) => {
|
|
const postReceiverUser = observePostReceiverUser({members, database, channelData: channel, currentUser});
|
|
const borUserTimeLimit = observeConfigIntValue(database, 'BurnOnReadDurationSeconds');
|
|
|
|
return {
|
|
post: post.observe(),
|
|
channel,
|
|
postReceiverUser,
|
|
isPostPriorityEnabled: observeIsPostPriorityEnabled(database),
|
|
borUserTimeLimit,
|
|
};
|
|
});
|
|
|
|
export default React.memo(
|
|
withDatabase(
|
|
withChannel(
|
|
withCurrentUser(
|
|
withChannelMembers(
|
|
enhance(DraftAndScheduledPost),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|