forked from Ivasoft/mattermost-mobile
Remove team unreads and rely on channel member instead (#5710)
This commit is contained in:
@@ -67,7 +67,6 @@ export const switchToChannelByName = async (serverUrl: string, channelName: stri
|
||||
let myChannel: MyChannelModel | ChannelMembership | undefined;
|
||||
let team: TeamModel | Team | undefined;
|
||||
let myTeam: MyTeamModel | TeamMembership | undefined;
|
||||
let unreads: TeamUnread | undefined;
|
||||
let name = teamName;
|
||||
const roles: string [] = [];
|
||||
const system = await queryCommonSystemValues(database);
|
||||
@@ -99,7 +98,6 @@ export const switchToChannelByName = async (serverUrl: string, channelName: stri
|
||||
}
|
||||
myTeam = added.member!;
|
||||
roles.push(...myTeam.roles.split(' '));
|
||||
unreads = added.unreads!;
|
||||
joinedNewTeam = true;
|
||||
}
|
||||
|
||||
@@ -163,7 +161,7 @@ export const switchToChannelByName = async (serverUrl: string, channelName: stri
|
||||
const modelPromises: Array<Promise<Model[]>> = [];
|
||||
const {operator} = DatabaseManager.serverDatabases[serverUrl];
|
||||
if (!(team instanceof Model)) {
|
||||
const prepT = prepareMyTeams(operator, [team], [(myTeam as TeamMembership)], [unreads!]);
|
||||
const prepT = prepareMyTeams(operator, [team], [(myTeam as TeamMembership)]);
|
||||
if (prepT) {
|
||||
modelPromises.push(...prepT);
|
||||
}
|
||||
@@ -171,8 +169,6 @@ export const switchToChannelByName = async (serverUrl: string, channelName: stri
|
||||
const mt: MyTeam[] = [{
|
||||
id: myTeam.team_id,
|
||||
roles: myTeam.roles,
|
||||
is_unread: unreads!.msg_count > 0,
|
||||
mentions_count: unreads!.mention_count,
|
||||
}];
|
||||
modelPromises.push(
|
||||
operator.handleMyTeam({myTeams: mt, prepareRecordsOnly: true}),
|
||||
|
||||
@@ -130,7 +130,7 @@ export const loginEntry = async ({serverUrl, user, deviceToken}: AfterLoginArgs)
|
||||
let initialChannel: Channel|undefined;
|
||||
let myTeams: Team[]|undefined;
|
||||
|
||||
// Fetch in parallel server config & license / user preferences / teams / team membership / team unreads
|
||||
// Fetch in parallel server config & license / user preferences / teams / team membership
|
||||
const promises: [Promise<ConfigAndLicenseRequest>, Promise<MyPreferencesRequest>, Promise<MyTeamsRequest>] = [
|
||||
fetchConfigAndLicense(serverUrl, true),
|
||||
fetchMyPreferences(serverUrl, true),
|
||||
@@ -269,7 +269,7 @@ const fetchAppEntryData = async (serverUrl: string, initialTeamId: string): Prom
|
||||
const includeDeletedChannels = true;
|
||||
const fetchOnly = true;
|
||||
|
||||
// Fetch in parallel teams / team membership / team unreads / channels for current team / user preferences / user
|
||||
// Fetch in parallel teams / team membership / channels for current team / user preferences / user
|
||||
const promises: [Promise<MyTeamsRequest>, Promise<MyChannelsRequest | undefined>, Promise<MyPreferencesRequest>, Promise<MyUserRequest>] = [
|
||||
fetchMyTeams(serverUrl, fetchOnly),
|
||||
initialTeamId ? fetchMyChannelsForTeam(serverUrl, initialTeamId, includeDeletedChannels, lastDisconnected, fetchOnly) : Promise.resolve(undefined),
|
||||
|
||||
@@ -43,7 +43,7 @@ export const retryInitialTeamAndChannel = async (serverUrl: string) => {
|
||||
return {error: true};
|
||||
}
|
||||
|
||||
// Fetch in parallel server config & license / user preferences / teams / team membership / team unreads
|
||||
// Fetch in parallel server config & license / user preferences / teams / team membership
|
||||
const promises: [Promise<ConfigAndLicenseRequest>, Promise<MyPreferencesRequest>, Promise<MyTeamsRequest>] = [
|
||||
fetchConfigAndLicense(serverUrl, true),
|
||||
fetchMyPreferences(serverUrl, true),
|
||||
@@ -103,7 +103,7 @@ export const retryInitialTeamAndChannel = async (serverUrl: string) => {
|
||||
modelPromises.push(prefModel);
|
||||
}
|
||||
|
||||
const teamModels = prepareMyTeams(operator, teamData.teams!, teamData.memberships!, teamData.unreads!);
|
||||
const teamModels = prepareMyTeams(operator, teamData.teams!, teamData.memberships!);
|
||||
if (teamModels) {
|
||||
modelPromises.push(...teamModels);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import type TeamMembershipModel from '@typings/database/models/servers/team_memb
|
||||
export type MyTeamsRequest = {
|
||||
teams?: Team[];
|
||||
memberships?: TeamMembership[];
|
||||
unreads?: TeamUnread[];
|
||||
error?: unknown;
|
||||
}
|
||||
|
||||
@@ -34,7 +33,6 @@ export const addUserToTeam = async (serverUrl: string, teamId: string, userId: s
|
||||
|
||||
try {
|
||||
const member = await client.addToTeam(teamId, userId);
|
||||
const unreads = await client.getTeamUnreads(teamId);
|
||||
|
||||
if (!fetchOnly) {
|
||||
fetchRolesIfNeeded(serverUrl, member.roles.split(' '));
|
||||
@@ -43,8 +41,6 @@ export const addUserToTeam = async (serverUrl: string, teamId: string, userId: s
|
||||
const myTeams: MyTeam[] = [{
|
||||
id: member.team_id,
|
||||
roles: member.roles,
|
||||
is_unread: unreads.msg_count > 0,
|
||||
mentions_count: unreads.mention_count,
|
||||
}];
|
||||
|
||||
const models = await Promise.all([
|
||||
@@ -61,7 +57,7 @@ export const addUserToTeam = async (serverUrl: string, teamId: string, userId: s
|
||||
}
|
||||
}
|
||||
|
||||
return {member, unreads};
|
||||
return {member};
|
||||
} catch (error) {
|
||||
forceLogoutIfNecessary(serverUrl, error as ClientError);
|
||||
return {error};
|
||||
@@ -77,17 +73,16 @@ export const fetchMyTeams = async (serverUrl: string, fetchOnly = false): Promis
|
||||
}
|
||||
|
||||
try {
|
||||
const [teams, memberships, unreads] = await Promise.all<Team[], TeamMembership[], TeamUnread[]>([
|
||||
const [teams, memberships] = await Promise.all<Team[], TeamMembership[]>([
|
||||
client.getMyTeams(),
|
||||
client.getMyTeamMembers(),
|
||||
client.getMyTeamUnreads(),
|
||||
]);
|
||||
|
||||
if (!fetchOnly) {
|
||||
const operator = DatabaseManager.serverDatabases[serverUrl]?.operator;
|
||||
const modelPromises: Array<Promise<Model[]>> = [];
|
||||
if (operator) {
|
||||
const prepare = prepareMyTeams(operator, teams, memberships, unreads);
|
||||
const prepare = prepareMyTeams(operator, teams, memberships);
|
||||
if (prepare) {
|
||||
modelPromises.push(...prepare);
|
||||
}
|
||||
@@ -101,7 +96,7 @@ export const fetchMyTeams = async (serverUrl: string, fetchOnly = false): Promis
|
||||
}
|
||||
}
|
||||
|
||||
return {teams, memberships, unreads};
|
||||
return {teams, memberships};
|
||||
} catch (error) {
|
||||
forceLogoutIfNecessary(serverUrl, error as ClientError);
|
||||
return {error};
|
||||
|
||||
@@ -163,7 +163,6 @@ export const loadMe = async (serverUrl: string, {deviceToken, user}: LoadMeArgs)
|
||||
|
||||
// Goes into myTeam table
|
||||
const teamMembersRequest = client.getMyTeamMembers();
|
||||
const teamUnreadRequest = client.getMyTeamUnreads();
|
||||
|
||||
const preferencesRequest = client.getMyPreferences();
|
||||
const configRequest = client.getClientConfigOld();
|
||||
@@ -172,14 +171,12 @@ export const loadMe = async (serverUrl: string, {deviceToken, user}: LoadMeArgs)
|
||||
const [
|
||||
teams,
|
||||
teamMemberships,
|
||||
teamUnreads,
|
||||
preferences,
|
||||
config,
|
||||
license,
|
||||
] = await Promise.all([
|
||||
teamsRequest,
|
||||
teamMembersRequest,
|
||||
teamUnreadRequest,
|
||||
preferencesRequest,
|
||||
configRequest,
|
||||
licenseRequest,
|
||||
@@ -189,9 +186,8 @@ export const loadMe = async (serverUrl: string, {deviceToken, user}: LoadMeArgs)
|
||||
const teamRecords = operator.handleTeam({prepareRecordsOnly: true, teams});
|
||||
const teamMembershipRecords = operator.handleTeamMemberships({prepareRecordsOnly: true, teamMemberships});
|
||||
|
||||
const myTeams = teamUnreads.map((unread) => {
|
||||
const matchingTeam = teamMemberships.find((team) => team.team_id === unread.team_id);
|
||||
return {id: unread.team_id, roles: matchingTeam?.roles ?? '', is_unread: unread.msg_count > 0, mentions_count: unread.mention_count};
|
||||
const myTeams = teamMemberships.map((tm) => {
|
||||
return {id: tm.team_id, roles: tm.roles ?? ''};
|
||||
});
|
||||
|
||||
const myTeamRecords = operator.handleMyTeam({
|
||||
|
||||
@@ -16,8 +16,6 @@ export interface ClientTeamsMix {
|
||||
getMyTeams: () => Promise<Team[]>;
|
||||
getTeamsForUser: (userId: string) => Promise<Team[]>;
|
||||
getMyTeamMembers: () => Promise<TeamMembership[]>;
|
||||
getMyTeamUnreads: () => Promise<TeamUnread[]>;
|
||||
getTeamUnreads: (teamId: string) => Promise<TeamUnread>;
|
||||
getTeamMembers: (teamId: string, page?: number, perPage?: number) => Promise<TeamMembership[]>;
|
||||
getTeamMember: (teamId: string, userId: string) => Promise<TeamMembership>;
|
||||
addToTeam: (teamId: string, userId: string) => Promise<TeamMembership>;
|
||||
@@ -108,20 +106,6 @@ const ClientTeams = (superclass: any) => class extends superclass {
|
||||
);
|
||||
};
|
||||
|
||||
getMyTeamUnreads = async () => {
|
||||
return this.doFetch(
|
||||
`${this.getUserRoute('me')}/teams/unread`,
|
||||
{method: 'get'},
|
||||
);
|
||||
};
|
||||
|
||||
getTeamUnreads = async (teamId: string) => {
|
||||
return this.doFetch(
|
||||
`${this.getUserRoute('me')}/${this.getTeamRoute(teamId)}/unread`,
|
||||
{method: 'get'},
|
||||
);
|
||||
}
|
||||
|
||||
getTeamMembers = async (teamId: string, page = 0, perPage = PER_PAGE_DEFAULT) => {
|
||||
return this.doFetch(
|
||||
`${this.getTeamMembersRoute(teamId)}${buildQueryString({page, per_page: perPage})}`,
|
||||
|
||||
@@ -18,12 +18,6 @@ export default class MyTeamModel extends Model {
|
||||
/** table (name) : MyTeam */
|
||||
static table = MY_TEAM;
|
||||
|
||||
/** is_unread : Boolean flag for unread messages on team level */
|
||||
@field('is_unread') isUnread!: boolean;
|
||||
|
||||
/** mentions_count : Count of posts in which the user has been mentioned */
|
||||
@field('mentions_count') mentionsCount!: number;
|
||||
|
||||
/** roles : The different permissions that this user has in the team, concatenated together with comma to form a single string. */
|
||||
@field('roles') roles!: string;
|
||||
|
||||
|
||||
@@ -110,8 +110,6 @@ describe('*** Operator: Team Handlers tests ***', () => {
|
||||
{
|
||||
id: 'teamA',
|
||||
roles: 'roleA, roleB, roleC',
|
||||
is_unread: true,
|
||||
mentions_count: 3,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -64,8 +64,6 @@ describe('*** TEAM Prepare Records Test ***', () => {
|
||||
raw: {
|
||||
id: 'teamA',
|
||||
roles: 'roleA, roleB, roleC',
|
||||
is_unread: true,
|
||||
mentions_count: 3,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -190,8 +190,6 @@ export const transformMyTeamRecord = ({action, database, value}: TransformerArgs
|
||||
const fieldsMapper = (myTeam: MyTeamModel) => {
|
||||
myTeam._raw.id = isCreateAction ? (raw.id || myTeam.id) : record.id;
|
||||
myTeam.roles = raw.roles;
|
||||
myTeam.isUnread = raw.is_unread;
|
||||
myTeam.mentionsCount = raw.mentions_count;
|
||||
};
|
||||
|
||||
return prepareBaseRecord({
|
||||
|
||||
@@ -10,8 +10,6 @@ const {MY_TEAM} = MM_TABLES.SERVER;
|
||||
export default tableSchema({
|
||||
name: MY_TEAM,
|
||||
columns: [
|
||||
{name: 'is_unread', type: 'boolean'},
|
||||
{name: 'mentions_count', type: 'number'},
|
||||
{name: 'roles', type: 'string'},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -322,13 +322,9 @@ describe('*** Test schema for SERVER database ***', () => {
|
||||
[MY_TEAM]: {
|
||||
name: MY_TEAM,
|
||||
columns: {
|
||||
is_unread: {name: 'is_unread', type: 'boolean'},
|
||||
mentions_count: {name: 'mentions_count', type: 'number'},
|
||||
roles: {name: 'roles', type: 'string'},
|
||||
},
|
||||
columnArray: [
|
||||
{name: 'is_unread', type: 'boolean'},
|
||||
{name: 'mentions_count', type: 'number'},
|
||||
{name: 'roles', type: 'string'},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -43,7 +43,7 @@ export const prepareModels = async ({operator, initialTeamId, removeTeams, remov
|
||||
}
|
||||
|
||||
if (teamData?.teams?.length) {
|
||||
const teamModels = prepareMyTeams(operator, teamData.teams, teamData.memberships || [], teamData.unreads || []);
|
||||
const teamModels = prepareMyTeams(operator, teamData.teams, teamData.memberships || []);
|
||||
if (teamModels) {
|
||||
modelPromises.push(...teamModels);
|
||||
}
|
||||
|
||||
@@ -46,14 +46,13 @@ export const addChannelToTeamHistory = async (operator: ServerDataOperator, team
|
||||
return operator.handleTeamChannelHistory({teamChannelHistories: [tch], prepareRecordsOnly});
|
||||
};
|
||||
|
||||
export const prepareMyTeams = (operator: ServerDataOperator, teams: Team[], memberships: TeamMembership[], unreads: TeamUnread[]) => {
|
||||
export const prepareMyTeams = (operator: ServerDataOperator, teams: Team[], memberships: TeamMembership[]) => {
|
||||
try {
|
||||
const teamRecords = operator.handleTeam({prepareRecordsOnly: true, teams});
|
||||
const teamMemberships = memberships.filter((m) => teams.find((t) => t.id === m.team_id));
|
||||
const teamMembershipRecords = operator.handleTeamMemberships({prepareRecordsOnly: true, teamMemberships});
|
||||
const myTeams: MyTeam[] = unreads.map((unread) => {
|
||||
const matchingTeam = teamMemberships.find((team) => team.team_id === unread.team_id);
|
||||
return {id: unread.team_id, roles: matchingTeam?.roles ?? '', is_unread: unread.msg_count > 0, mentions_count: unread.mention_count};
|
||||
const myTeams: MyTeam[] = teamMemberships.map((tm) => {
|
||||
return {id: tm.team_id, roles: tm.roles ?? ''};
|
||||
});
|
||||
const myTeamRecords = operator.handleMyTeam({
|
||||
prepareRecordsOnly: true,
|
||||
|
||||
@@ -102,4 +102,12 @@ RCT_EXPORT_METHOD(deleteEntititesFile: (RCTResponseSenderBlock) callback) {
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(addListener:(NSString *)eventName) {
|
||||
// Keep: Required for RN built in Event Emitter Calls.
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(removeListeners:(double)count) {
|
||||
// Keep: Required for RN built in Event Emitter Calls.
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
6
types/api/teams.d.ts
vendored
6
types/api/teams.d.ts
vendored
@@ -49,9 +49,3 @@ type TeamsState = {
|
||||
groupsAssociatedToTeam: any;
|
||||
totalCount: number;
|
||||
};
|
||||
|
||||
type TeamUnread = {
|
||||
team_id: string;
|
||||
mention_count: number;
|
||||
msg_count: number;
|
||||
};
|
||||
|
||||
6
types/database/models/servers/my_team.d.ts
vendored
6
types/database/models/servers/my_team.d.ts
vendored
@@ -11,12 +11,6 @@ export default class MyTeamModel extends Model {
|
||||
/** table (name) : MyTeam */
|
||||
static table: string;
|
||||
|
||||
/** is_unread : Boolean flag for unread messages on team level */
|
||||
isUnread: boolean;
|
||||
|
||||
/** mentions_count : Count of posts in which the user has been mentioned */
|
||||
mentionsCount: number;
|
||||
|
||||
/** roles : The different permissions that this user has in the team, concatenated together with comma to form a single string. */
|
||||
roles: string;
|
||||
|
||||
|
||||
2
types/database/raw_values.d.ts
vendored
2
types/database/raw_values.d.ts
vendored
@@ -42,8 +42,6 @@ type GroupTeamRelation = {
|
||||
type MyTeam = {
|
||||
id: string;
|
||||
roles: string;
|
||||
is_unread: boolean;
|
||||
mentions_count: number;
|
||||
};
|
||||
|
||||
type PostsInChannel = {
|
||||
|
||||
Reference in New Issue
Block a user