Browse Source

fix(project-selector): remove projects from dropdown for which user is not a member (#12527)

* factor in superusers

* allow multiprojectselector to override state of projectselector

* multiprojects come sorted and don't need to be sorted again

* braces
Chris Clark 6 years ago
parent
commit
109ba9c1dd

+ 2 - 1
src/sentry/static/sentry/app/components/organizations/globalSelectionHeader/globalSelectionHeader.jsx

@@ -32,6 +32,7 @@ import TimeRangeSelector from 'app/components/organizations/timeRangeSelector';
 import Tooltip from 'app/components/tooltip';
 import withGlobalSelection from 'app/utils/withGlobalSelection';
 import ConfigStore from 'app/stores/configStore';
+import withProjects from 'app/utils/withProjects';
 import {getStateFromQuery} from './utils';
 
 class GlobalSelectionHeader extends React.Component {
@@ -407,7 +408,7 @@ class GlobalSelectionHeader extends React.Component {
   }
 }
 
-export default withRouter(withGlobalSelection(GlobalSelectionHeader));
+export default withProjects(withRouter(withGlobalSelection(GlobalSelectionHeader)));
 
 const BackButtonWrapper = styled('div')`
   display: flex;

+ 1 - 1
src/sentry/static/sentry/app/components/organizations/multipleProjectSelector.jsx

@@ -147,7 +147,7 @@ export default class MultipleProjectSelector extends React.PureComponent {
         {...this.props}
         multi={multi}
         selectedProjects={selected}
-        projects={projects}
+        multiProjects={projects}
         onSelect={this.handleQuickSelect}
         onClose={this.handleClose}
         onMultiSelect={this.handleMultiSelect}

+ 19 - 4
src/sentry/static/sentry/app/components/projectSelector.jsx

@@ -7,6 +7,7 @@ import {sortArray} from 'app/utils';
 import {t} from 'app/locale';
 import {alertHighlight, pulse} from 'app/styles/animations';
 import Button from 'app/components/button';
+import ConfigStore from 'app/stores/configStore';
 import InlineSvg from 'app/components/inlineSvg';
 import BookmarkStar from 'app/components/bookmarkStar';
 import DropdownAutoComplete from 'app/components/dropdownAutoComplete';
@@ -29,6 +30,11 @@ class ProjectSelector extends React.Component {
       PropTypes.oneOfType([PropTypes.string, SentryTypes.Project])
     ),
 
+    // used by multiProjectSelector
+    multiProjects: PropTypes.arrayOf(
+      PropTypes.oneOfType([PropTypes.string, SentryTypes.Project])
+    ),
+
     // Render a footer at the bottom of the list
     // render function that is passed an `actions` object with `close` and `open` properties.
     menuFooter: PropTypes.func,
@@ -79,11 +85,20 @@ class ProjectSelector extends React.Component {
   }
 
   getProjects() {
-    const {organization, projects} = this.props;
-    const projectList =
-      projects || organization.projects.filter(project => project.isMember);
+    const {organization, projects, multiProjects} = this.props;
+
+    if (multiProjects) {
+      return multiProjects;
+    }
+
+    const {isSuperuser} = ConfigStore.get('user');
+    const unfilteredProjects = projects || organization.projects;
+
+    const filteredProjects = isSuperuser
+      ? unfilteredProjects
+      : unfilteredProjects.filter(project => project.isMember);
 
-    return sortArray(projectList, project => {
+    return sortArray(filteredProjects, project => {
       return [!project.isBookmarked, project.name];
     });
   }

+ 1 - 1
src/sentry/static/sentry/app/views/organizationDiscover/discover.jsx

@@ -417,7 +417,7 @@ export default class OrganizationDiscover extends React.Component {
 
         <DiscoverGlobalSelectionHeader
           organization={organization}
-          project={currentQuery.projects}
+          projects={currentQuery.projects}
           hasCustomRouting={true}
           relative={currentQuery.range}
           start={start}

File diff suppressed because it is too large
+ 403 - 445
tests/js/spec/views/userFeedback/__snapshots__/organizationUserFeedback.spec.jsx.snap


Some files were not shown because too many files changed in this diff