|
@@ -12,6 +12,7 @@ import PanelBody from 'sentry/components/panels/panelBody';
|
|
|
import PanelHeader from 'sentry/components/panels/panelHeader';
|
|
|
import PanelItem from 'sentry/components/panels/panelItem';
|
|
|
import TeamRoleSelect from 'sentry/components/teamRoleSelect';
|
|
|
+import {TeamRoleColumnLabel} from 'sentry/components/teamRoleUtils';
|
|
|
import {IconSubtract} from 'sentry/icons';
|
|
|
import {t} from 'sentry/locale';
|
|
|
import {space} from 'sentry/styles/space';
|
|
@@ -110,21 +111,27 @@ function TeamSelect({
|
|
|
|
|
|
return (
|
|
|
<Panel>
|
|
|
- <PanelHeader hasButtons>
|
|
|
- {t('Team')}
|
|
|
- <DropdownAddTeam
|
|
|
- disabled={disabled}
|
|
|
- isLoadingTeams={isLoadingTeams}
|
|
|
- isAddingTeamToMember
|
|
|
- canCreateTeam={false}
|
|
|
- onSearch={onSearch}
|
|
|
- onSelect={onAddTeam}
|
|
|
- onCreateTeam={onCreateTeam}
|
|
|
- organization={organization}
|
|
|
- selectedTeams={selectedTeams.map(tm => tm.slug)}
|
|
|
- teams={teams}
|
|
|
- />
|
|
|
- </PanelHeader>
|
|
|
+ <TeamPanelHeader>
|
|
|
+ <div>{t('Team')}</div>
|
|
|
+ <div />
|
|
|
+ <div>
|
|
|
+ <TeamRoleColumnLabel />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <DropdownAddTeam
|
|
|
+ disabled={disabled}
|
|
|
+ isLoadingTeams={isLoadingTeams}
|
|
|
+ isAddingTeamToMember
|
|
|
+ canCreateTeam={false}
|
|
|
+ onSearch={onSearch}
|
|
|
+ onSelect={onAddTeam}
|
|
|
+ onCreateTeam={onCreateTeam}
|
|
|
+ organization={organization}
|
|
|
+ selectedTeams={selectedTeams.map(tm => tm.slug)}
|
|
|
+ teams={teams}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </TeamPanelHeader>
|
|
|
|
|
|
<PanelBody>{loadingTeams ? <LoadingIndicator /> : renderBody()}</PanelBody>
|
|
|
</Panel>
|
|
@@ -156,15 +163,15 @@ function TeamRow({
|
|
|
|
|
|
return (
|
|
|
<TeamPanelItem data-test-id="team-row-for-member">
|
|
|
- <TeamPanelItemLeft>
|
|
|
+ <div>
|
|
|
<Link to={`/settings/${organization.slug}/teams/${team.slug}/`}>
|
|
|
<TeamBadge team={team} />
|
|
|
</Link>
|
|
|
- </TeamPanelItemLeft>
|
|
|
+ </div>
|
|
|
|
|
|
- <TeamOrgRole>{orgRoleFromTeam}</TeamOrgRole>
|
|
|
+ <div>{orgRoleFromTeam}</div>
|
|
|
|
|
|
- <RoleSelectWrapper>
|
|
|
+ <div>
|
|
|
<TeamRoleSelect
|
|
|
disabled={disabled}
|
|
|
size="xs"
|
|
@@ -173,41 +180,40 @@ function TeamRow({
|
|
|
member={member}
|
|
|
onChangeTeamRole={newRole => onChangeTeamRole(team.slug, newRole)}
|
|
|
/>
|
|
|
- </RoleSelectWrapper>
|
|
|
-
|
|
|
- <Button
|
|
|
- size="xs"
|
|
|
- icon={<IconSubtract isCircled size="xs" />}
|
|
|
- title={buttonHelpText}
|
|
|
- disabled={isRemoveDisabled}
|
|
|
- onClick={() => onRemoveTeam(team.slug)}
|
|
|
- >
|
|
|
- {t('Remove')}
|
|
|
- </Button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div>
|
|
|
+ <Button
|
|
|
+ size="xs"
|
|
|
+ icon={<IconSubtract isCircled size="xs" />}
|
|
|
+ title={buttonHelpText}
|
|
|
+ disabled={isRemoveDisabled}
|
|
|
+ onClick={() => onRemoveTeam(team.slug)}
|
|
|
+ >
|
|
|
+ {t('Remove')}
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
</TeamPanelItem>
|
|
|
);
|
|
|
}
|
|
|
|
|
|
-const TeamPanelItem = styled(PanelItem)`
|
|
|
- padding: ${space(2)};
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
-`;
|
|
|
+const GRID_TEMPLATE = `
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: minmax(100px, 1fr) minmax(0px, 100px) 200px 95px;
|
|
|
+ gap: ${space(1)};
|
|
|
|
|
|
-const TeamPanelItemLeft = styled('div')`
|
|
|
- flex-grow: 4;
|
|
|
+ > div:last-child {
|
|
|
+ margin-left: auto;
|
|
|
+ }
|
|
|
`;
|
|
|
|
|
|
-const TeamOrgRole = styled('div')`
|
|
|
- min-width: 90px;
|
|
|
- flex-grow: 1;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
+const TeamPanelHeader = styled(PanelHeader)`
|
|
|
+ ${GRID_TEMPLATE}
|
|
|
`;
|
|
|
|
|
|
-const RoleSelectWrapper = styled('div')`
|
|
|
- min-width: 200px;
|
|
|
- margin-right: ${space(2)};
|
|
|
+const TeamPanelItem = styled(PanelItem)`
|
|
|
+ ${GRID_TEMPLATE}
|
|
|
+ padding: ${space(2)};
|
|
|
`;
|
|
|
|
|
|
export default TeamSelect;
|