Files
mattermost-mobile/app/helpers/database/groups.ts
Daniel Espino García 1c26f14fdb Add import order lint rules (#5672)
* Add import order lint rules

* Address feedback

* Revert change
2021-09-13 10:18:03 +02:00

57 lines
2.8 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {MM_TABLES} from '@constants/database';
import type ChannelModel from '@typings/database/models/servers/channel';
import type GroupModel from '@typings/database/models/servers/group';
import type GroupMembershipModel from '@typings/database/models/servers/group_membership';
import type GroupsChannelModel from '@typings/database/models/servers/groups_channel';
import type GroupsTeamModel from '@typings/database/models/servers/groups_team';
import type PostModel from '@typings/database/models/servers/post';
import type TeamModel from '@typings/database/models/servers/team';
export const queryGroupsAssociatedToChannelForReference = async (channel: ChannelModel) => {
const groupChannels = await channel.groupsChannel.fetch() as GroupsChannelModel[];
const groupChannelPromises = groupChannels.map((g) => g.group.fetch());
const groups = await Promise.all(groupChannelPromises) as GroupModel[];
return groups.filter((g) => g.deleteAt === 0);
};
export const queryGroupsAssociatedToTeamForReference = async (team: TeamModel) => {
const groupTeams = await team.groupsTeam.fetch() as GroupsTeamModel[];
const teamGroupPromises = groupTeams.map((g) => g.group.fetch());
const groups = await Promise.all(teamGroupPromises) as GroupModel[];
return groups.filter((g) => g.deleteAt === 0);
};
export const queryGroupForPosts = async (post: PostModel) => {
try {
if (post.id === post.pendingPostId) {
return null;
}
const channel = await post.channel.fetch() as ChannelModel;
const team = await channel?.team.fetch() as TeamModel | undefined;
let groupsForReference: GroupModel[] | null = null;
if (team?.isGroupConstrained && channel.isGroupConstrained) {
const groupsFromChannel = await queryGroupsAssociatedToChannelForReference(channel);
const groupsFromTeam = await queryGroupsAssociatedToTeamForReference(team);
groupsForReference = groupsFromChannel.concat(groupsFromTeam.filter((item) => groupsFromChannel.indexOf(item) < 0));
} else if (team?.isGroupConstrained) {
groupsForReference = await queryGroupsAssociatedToTeamForReference(team);
} else if (channel.isGroupConstrained) {
groupsForReference = await queryGroupsAssociatedToChannelForReference(channel);
} else {
const myGroups = await post.collections.get(MM_TABLES.SERVER.GROUP_MEMBERSHIP).query().fetch() as GroupMembershipModel[];
const myGroupsPromises = myGroups.map((g) => g.group.fetch());
groupsForReference = await Promise.all(myGroupsPromises) as GroupModel[];
}
return groupsForReference;
} catch {
return null;
}
};