|
|
@@ -8,7 +8,7 @@ import TeamMembers from './TeamMembers';
|
|
|
import TeamSettings from './TeamSettings';
|
|
|
import TeamGroupSync from './TeamGroupSync';
|
|
|
import { NavModel, Team, TeamMember } from 'app/types';
|
|
|
-import { loadTeam } from './state/actions';
|
|
|
+import { loadTeam, loadTeamMembers } from './state/actions';
|
|
|
import { getTeam, getTeamMembers, isSignedInUserTeamAdmin } from './state/selectors';
|
|
|
import { getTeamLoadingNav } from './state/navModel';
|
|
|
import { getNavModel } from 'app/core/selectors/navModel';
|
|
|
@@ -18,6 +18,7 @@ import { contextSrv, User } from 'app/core/services/context_srv';
|
|
|
export interface Props {
|
|
|
team: Team;
|
|
|
loadTeam: typeof loadTeam;
|
|
|
+ loadTeamMembers: typeof loadTeamMembers;
|
|
|
teamId: number;
|
|
|
pageName: string;
|
|
|
navModel: NavModel;
|
|
|
@@ -55,6 +56,7 @@ export class TeamPages extends PureComponent<Props, State> {
|
|
|
const { loadTeam, teamId } = this.props;
|
|
|
this.setState({ isLoading: true });
|
|
|
const team = await loadTeam(teamId);
|
|
|
+ await this.props.loadTeamMembers();
|
|
|
this.setState({ isLoading: false });
|
|
|
return team;
|
|
|
}
|
|
|
@@ -65,9 +67,25 @@ export class TeamPages extends PureComponent<Props, State> {
|
|
|
return _.includes(pages, currentPage) ? currentPage : pages[0];
|
|
|
}
|
|
|
|
|
|
+ textsAreEqual = (text1: string, text2: string) => {
|
|
|
+ if (!text1 && !text2) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!text1 || !text2) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return text1.toLocaleLowerCase() === text2.toLocaleLowerCase();
|
|
|
+ };
|
|
|
+
|
|
|
hideTabsFromNonTeamAdmin = (navModel: NavModel, isSignedInUserTeamAdmin: boolean) => {
|
|
|
if (!isSignedInUserTeamAdmin && navModel.main && navModel.main.children) {
|
|
|
- navModel.main.children = navModel.main.children.filter(navItem => navItem.text === 'Members');
|
|
|
+ navModel.main.children
|
|
|
+ .filter(navItem => !this.textsAreEqual(navItem.text, PageTypes.Members))
|
|
|
+ .map(navItem => {
|
|
|
+ navItem.hideFromTabs = true;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
return navModel;
|
|
|
@@ -75,11 +93,12 @@ export class TeamPages extends PureComponent<Props, State> {
|
|
|
|
|
|
renderPage(isSignedInUserTeamAdmin: boolean) {
|
|
|
const { isSyncEnabled } = this.state;
|
|
|
+ const { members } = this.props;
|
|
|
const currentPage = this.getCurrentPage();
|
|
|
|
|
|
switch (currentPage) {
|
|
|
case PageTypes.Members:
|
|
|
- return <TeamMembers syncEnabled={isSyncEnabled} />;
|
|
|
+ return <TeamMembers syncEnabled={isSyncEnabled} members={members} />;
|
|
|
|
|
|
case PageTypes.Settings:
|
|
|
return isSignedInUserTeamAdmin && <TeamSettings />;
|
|
|
@@ -108,13 +127,16 @@ function mapStateToProps(state) {
|
|
|
const teamId = getRouteParamsId(state.location);
|
|
|
const pageName = getRouteParamsPage(state.location) || 'members';
|
|
|
const teamLoadingNav = getTeamLoadingNav(pageName);
|
|
|
+ const navModel = getNavModel(state.navIndex, `team-${pageName}-${teamId}`, teamLoadingNav);
|
|
|
+ const team = getTeam(state.team, teamId);
|
|
|
+ const members = getTeamMembers(state.team);
|
|
|
|
|
|
return {
|
|
|
- navModel: getNavModel(state.navIndex, `team-${pageName}-${teamId}`, teamLoadingNav),
|
|
|
+ navModel,
|
|
|
teamId: teamId,
|
|
|
pageName: pageName,
|
|
|
- team: getTeam(state.team, teamId),
|
|
|
- members: getTeamMembers(state.team),
|
|
|
+ team,
|
|
|
+ members,
|
|
|
editorsCanAdmin: config.editorsCanAdmin, // this makes the feature toggle mockable/controllable from tests,
|
|
|
signedInUser: contextSrv.user, // this makes the feature toggle mockable/controllable from tests,
|
|
|
};
|
|
|
@@ -122,6 +144,7 @@ function mapStateToProps(state) {
|
|
|
|
|
|
const mapDispatchToProps = {
|
|
|
loadTeam,
|
|
|
+ loadTeamMembers,
|
|
|
};
|
|
|
|
|
|
export default hot(module)(
|