From edf52740101541d2528e79b48a1024f03449c16e Mon Sep 17 00:00:00 2001 From: Iukou Siarhei <45054016+BlazarQSO@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:11:26 +0300 Subject: [PATCH] =?UTF-8?q?EPMRPP-92607=20||=20User=20with=20different=20r?= =?UTF-8?q?oles=20across=20different=20Organizati=E2=80=A6=20(#3916)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * EPMRPP-92607 || User with different roles across different Organizations see pages in the same mode * EPMRPP-92607 || Code Review fix - 1 * EPMRPP-92607 || Code Review fix - 2 * EPMRPP-92607 || Code Review fix - 3 --- .../instancesSection/instancesSection.jsx | 2 +- .../integrationSettings.jsx | 2 +- .../administrate/allUsers/actionValidators.js | 2 +- .../controllers/launch/actionValidators.js | 2 +- app/src/controllers/pages/index.js | 3 + app/src/controllers/pages/selectors.js | 79 ++++++++++++++++++- .../plugins/uiExtensions/createImportProps.js | 7 +- .../controllers/testItem/actionValidators.js | 2 +- app/src/controllers/user/index.js | 4 - app/src/controllers/user/sagas.js | 6 +- app/src/controllers/user/selectors.js | 69 ---------------- .../organizationSidebar.jsx | 3 +- .../projectSidebar/projectSidebar.jsx | 3 +- .../membersGrid/projectRole/projectRole.jsx | 4 +- .../unassignButton/unassignButton.jsx | 4 +- .../membersPageToolbar/membersPageToolbar.jsx | 2 +- .../dashboardPageHeader.jsx | 2 +- .../launchFiltersToolbar.jsx | 2 +- .../launchSuiteGrid/hamburger/hamburger.jsx | 2 +- .../modals/editItemModal/editItemModal.jsx | 2 +- .../actionPanel/testItemActionPanel.jsx | 2 +- .../dashboardItemPage/dashboardItemPage.jsx | 3 +- .../filtersControl/filtersControl.jsx | 2 +- .../emptyWidgetGrid/emptyWidgetGrid.jsx | 2 +- .../widget/widgetHeader/widgetHeader.jsx | 2 +- .../EmptyDashboards/emptyDashboards.jsx | 2 +- .../dashboardTable/dashboardTable.jsx | 3 +- .../filtersPage/filterGrid/filterGrid.jsx | 7 +- .../filterPageToolbar/filterPageToolbar.jsx | 2 +- .../noFiltersBlock/noFiltersBlock.jsx | 7 +- .../actionPanelWithGroupOperations.jsx | 3 +- .../LaunchToolbar/actionPanel/actionPanel.jsx | 2 +- .../analyzerContainer/analyzerContainer.jsx | 2 +- .../content/defectTypes/defectTypes.jsx | 2 +- .../integrationInfo/integrationInfo.jsx | 12 +-- .../content/notifications/notifications.jsx | 2 +- .../notifications/ruleGroup/ruleGroup.jsx | 4 +- .../patternAnalysis/patternAnalysis.jsx | 2 +- .../generalTab/generalTab.jsx | 2 +- .../projectSettingsPageContainer.jsx | 2 +- .../testItemDetailsModal.jsx | 2 +- .../inside/stepPage/stepGrid/stepGrid.jsx | 2 +- .../actionPanel/uniqueErrorsActionPanel.jsx | 4 +- .../organizationProjectsPage.jsx | 2 +- .../projectName/projectName.jsx | 6 +- .../projectTeamListTable.jsx | 4 +- .../projectTeamPage/projectTeamPage.jsx | 2 +- app/src/routes/routesMap.js | 4 +- 48 files changed, 151 insertions(+), 142 deletions(-) diff --git a/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx b/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx index 0c5dbcf9de..2ee1ac1f47 100644 --- a/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx +++ b/app/src/components/integrations/containers/integrationInfoContainer/instancesSection/instancesSection.jsx @@ -23,7 +23,7 @@ import PlusIcon from 'common/img/plus-button-inline.svg'; import { canUpdateSettings } from 'common/utils/permissions'; import { COMMON_LOCALE_KEYS } from 'common/constants/localization'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { removePluginAction, addIntegrationAction, diff --git a/app/src/components/integrations/elements/integrationSettings/integrationSettings.jsx b/app/src/components/integrations/elements/integrationSettings/integrationSettings.jsx index af25afc1ee..a25df21ac6 100644 --- a/app/src/components/integrations/elements/integrationSettings/integrationSettings.jsx +++ b/app/src/components/integrations/elements/integrationSettings/integrationSettings.jsx @@ -26,9 +26,9 @@ import { urlOrganizationAndProjectSelector, querySelector, PROJECT_SETTINGS_TAB_PAGE, + userRolesSelector, } from 'controllers/pages'; import { omit } from 'common/utils/omit'; -import { userRolesSelector } from 'controllers/user'; import { projectKeySelector } from 'controllers/project'; import { canUpdateSettings } from 'common/utils/permissions'; import { diff --git a/app/src/controllers/administrate/allUsers/actionValidators.js b/app/src/controllers/administrate/allUsers/actionValidators.js index 3c1a3bcdd3..60c9198750 100644 --- a/app/src/controllers/administrate/allUsers/actionValidators.js +++ b/app/src/controllers/administrate/allUsers/actionValidators.js @@ -14,7 +14,7 @@ * limitations under the License. */ -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { canDeleteUser } from 'common/utils/permissions'; export const validateDeleteUser = (user, users, state) => { diff --git a/app/src/controllers/launch/actionValidators.js b/app/src/controllers/launch/actionValidators.js index 7692592491..e3e5e57643 100644 --- a/app/src/controllers/launch/actionValidators.js +++ b/app/src/controllers/launch/actionValidators.js @@ -14,7 +14,7 @@ * limitations under the License. */ -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { IN_PROGRESS } from 'common/constants/launchStatuses'; import { canMergeLaunches, diff --git a/app/src/controllers/pages/index.js b/app/src/controllers/pages/index.js index c14bb73281..9469c32b10 100644 --- a/app/src/controllers/pages/index.js +++ b/app/src/controllers/pages/index.js @@ -42,6 +42,9 @@ export { urlProjectSlugSelector, urlOrganizationSlugSelector, urlOrganizationAndProjectSelector, + userRolesSelector, + activeProjectRoleSelector, + userAssignedSelector, } from './selectors'; export { updatePagePropertiesAction, clearPageStateAction } from './actionCreators'; diff --git a/app/src/controllers/pages/selectors.js b/app/src/controllers/pages/selectors.js index 2f24d7e1df..f644c3c38f 100644 --- a/app/src/controllers/pages/selectors.js +++ b/app/src/controllers/pages/selectors.js @@ -19,8 +19,16 @@ import { extractNamespacedQuery } from 'common/utils/routingUtils'; import { DEFAULT_PAGINATION, SIZE_KEY, PAGE_KEY } from 'controllers/pagination/constants'; import { SORTING_KEY } from 'controllers/sorting/constants'; import { getStorageItem } from 'common/utils/storageUtils'; -import { activeProjectSelector, userIdSelector } from 'controllers/user'; +import { + activeProjectSelector, + assignedOrganizationsSelector, + assignedProjectsSelector, + userAccountRoleSelector, + userIdSelector, +} from 'controllers/user'; import { ALL } from 'common/constants/reservedFilterIds'; +import { ADMINISTRATOR } from 'common/constants/accountRoles'; +import { MANAGER } from 'common/constants/projectRoles'; import { pageNames, NO_PAGE } from './constants'; import { stringToArray } from './utils'; @@ -159,3 +167,72 @@ export const urlOrganizationAndProjectSelector = createSelector( return activeProject; }, ); + +// TODO: User role selectors are stored here due to circular dependency +export const activeProjectRoleSelector = createSelector( + urlProjectSlugSelector, + assignedProjectsSelector, + (projectSlug, assignedProjects) => { + const assignedProject = assignedProjects[projectSlug]; + + return assignedProject?.projectRole; + }, +); + +const activeOrganizationRoleSelector = createSelector( + urlOrganizationSlugSelector, + assignedOrganizationsSelector, + (organizationSlug, assignedOrganizations) => { + const assignedOrganization = assignedOrganizations[organizationSlug]; + + return assignedOrganization?.organizationRole; + }, +); + +export const userRolesSelector = createSelector( + userAccountRoleSelector, + activeOrganizationRoleSelector, + activeProjectRoleSelector, + (userRole, organizationRole, projectRole) => ({ + userRole, + organizationRole, + projectRole, + }), +); + +export const userAssignedSelector = (projectSlug, organizationSlug) => (state) => { + const assignedOrganizations = assignedOrganizationsSelector(state); + const assignedProjects = assignedProjectsSelector(state); + const { userRole, organizationRole } = userRolesSelector(state); + + const isAdmin = userRole === ADMINISTRATOR; + const isManager = organizationRole === MANAGER; + let isAssignedToTargetOrganization = false; + + if (organizationSlug) { + isAssignedToTargetOrganization = organizationSlug in assignedOrganizations; + } else { + const organizationId = assignedProjects[projectSlug]?.organizationId || ''; + isAssignedToTargetOrganization = Object.keys(assignedOrganizations).some( + (key) => assignedOrganizations[key]?.organizationId === organizationId, + ); + } + + const isAssignedToTargetProject = + projectSlug && projectSlug in assignedProjects && isAssignedToTargetOrganization; + + const assignmentNotRequired = isAdmin || (isManager && isAssignedToTargetOrganization); + + const hasPermission = isAssignedToTargetProject || assignmentNotRequired; + + const assignedProjectKey = assignedProjects?.[projectSlug]?.projectKey; + + return { + isAdmin, + hasPermission, + assignedProjectKey, + assignmentNotRequired, + isAssignedToTargetProject, + isAssignedToTargetOrganization, + }; +}; diff --git a/app/src/controllers/plugins/uiExtensions/createImportProps.js b/app/src/controllers/plugins/uiExtensions/createImportProps.js index de50c52f86..9021061f91 100644 --- a/app/src/controllers/plugins/uiExtensions/createImportProps.js +++ b/app/src/controllers/plugins/uiExtensions/createImportProps.js @@ -55,11 +55,7 @@ import { CANCELLED, STOPPED, } from 'common/constants/testStatuses'; -import { - activeProjectRoleSelector, - isAdminSelector, - activeProjectSelector, -} from 'controllers/user'; +import { isAdminSelector, activeProjectSelector } from 'controllers/user'; import { projectMembersSelector, projectInfoSelector, @@ -78,6 +74,7 @@ import { urlProjectSlugSelector, querySelector, payloadSelector, + activeProjectRoleSelector, } from 'controllers/pages'; import { attributesArray, isNotEmptyArray } from 'common/utils/validation/validate'; import { diff --git a/app/src/controllers/testItem/actionValidators.js b/app/src/controllers/testItem/actionValidators.js index c2fbcc1d9f..f2eeb7a903 100644 --- a/app/src/controllers/testItem/actionValidators.js +++ b/app/src/controllers/testItem/actionValidators.js @@ -14,7 +14,7 @@ * limitations under the License. */ -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { IN_PROGRESS } from 'common/constants/launchStatuses'; import { canDeleteTestItem } from 'common/utils/permissions'; import { launchSelector } from './selectors'; diff --git a/app/src/controllers/user/index.js b/app/src/controllers/user/index.js index 5edfdc8ecd..f0c1e9aff1 100644 --- a/app/src/controllers/user/index.js +++ b/app/src/controllers/user/index.js @@ -53,16 +53,12 @@ export { startTimeFormatSelector, isAdminSelector, assignedProjectsSelector, - activeProjectRoleSelector, userAccountRoleSelector, - activeOrganizationRoleSelector, - userRolesSelector, photoTimeStampSelector, apiKeysSelector, photoIdSelector, availableProjectsSelector, activeProjectKeySelector, assignedOrganizationsSelector, - createUserAssignedSelector, } from './selectors'; export { userSagas } from './sagas'; diff --git a/app/src/controllers/user/sagas.js b/app/src/controllers/user/sagas.js index 0662844fd5..745e52b7bf 100644 --- a/app/src/controllers/user/sagas.js +++ b/app/src/controllers/user/sagas.js @@ -20,7 +20,7 @@ import { URLS } from 'common/urls'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; import { PROJECT_MANAGER } from 'common/constants/projectRoles'; import { getStorageItem, setStorageItem } from 'common/utils/storageUtils'; -import { urlOrganizationAndProjectSelector } from 'controllers/pages'; +import { userAssignedSelector, urlOrganizationAndProjectSelector } from 'controllers/pages'; import { getLogTimeFormatFromStorage } from 'controllers/log/storageUtils'; import { setActiveOrganizationAction } from 'controllers/organizations/organization/actionCreators'; import { @@ -46,7 +46,7 @@ import { FETCH_USER, DELETE_USER_ACCOUNT, } from './constants'; -import { createUserAssignedSelector, userIdSelector, userInfoSelector } from './selectors'; +import { userIdSelector, userInfoSelector } from './selectors'; function* assignToProject({ payload: project }) { const userId = yield select(userIdSelector); @@ -139,7 +139,7 @@ function* fetchUserWorker() { targetActiveProject || {}; const { assignmentNotRequired, isAssignedToTargetProject } = yield select( - createUserAssignedSelector(targetProjectSlug, targetOrganizationSlug), + userAssignedSelector(targetProjectSlug, targetOrganizationSlug), ); const defaultProject = Object.keys(assignedProjects)[0]; diff --git a/app/src/controllers/user/selectors.js b/app/src/controllers/user/selectors.js index 2a96639055..23138ae73e 100644 --- a/app/src/controllers/user/selectors.js +++ b/app/src/controllers/user/selectors.js @@ -16,7 +16,6 @@ import { ADMINISTRATOR } from 'common/constants/accountRoles'; import { createSelector } from 'reselect'; -import { MANAGER } from 'common/constants/projectRoles'; import { START_TIME_FORMAT_ABSOLUTE, START_TIME_FORMAT_RELATIVE } from './constants'; const userSelector = (state) => state.user || {}; @@ -38,34 +37,6 @@ export const assignedProjectsSelector = (state) => userInfoSelector(state).assig export const assignedOrganizationsSelector = (state) => userInfoSelector(state).assignedOrganizations || {}; export const userAccountRoleSelector = (state) => userInfoSelector(state).userRole || ''; -export const activeProjectRoleSelector = createSelector( - activeProjectSelector, - assignedProjectsSelector, - (activeProject, assignedProjects) => { - const { projectSlug } = activeProject; - const assignedProject = assignedProjects[projectSlug]; - return assignedProject?.projectRole; - }, -); -export const activeOrganizationRoleSelector = createSelector( - activeProjectSelector, - assignedOrganizationsSelector, - (activeProject, assignedOrganizations) => { - const { organizationSlug } = activeProject; - const assignedOrganization = assignedOrganizations[organizationSlug]; - return assignedOrganization?.organizationRole; - }, -); -export const userRolesSelector = createSelector( - userAccountRoleSelector, - activeOrganizationRoleSelector, - activeProjectRoleSelector, - (userRole, organizationRole, projectRole) => ({ - userRole, - organizationRole, - projectRole, - }), -); export const isAdminSelector = (state) => userInfoSelector(state).userRole === ADMINISTRATOR; export const availableProjectsSelector = createSelector( @@ -106,43 +77,3 @@ export const availableProjectsSelector = createSelector( export const apiKeysSelector = (state) => userSelector(state).apiKeys || []; export const activeProjectKeySelector = (state) => userSelector(state).activeProjectKey; - -export const createUserAssignedSelector = (projectSlug, organizationSlug) => - createSelector( - userRolesSelector, - assignedOrganizationsSelector, - assignedProjectsSelector, - (userRoles, assignedOrganizations, assignedProjects) => { - const { userRole, organizationRole } = userRoles; - const isAdmin = userRole === ADMINISTRATOR; - const isManager = organizationRole === MANAGER; - let isAssignedToTargetOrganization = false; - - if (organizationSlug) { - isAssignedToTargetOrganization = organizationSlug in assignedOrganizations; - } else { - const organizationId = assignedProjects[projectSlug]?.organizationId || ''; - isAssignedToTargetOrganization = Object.keys(assignedOrganizations).some( - (key) => assignedOrganizations[key]?.organizationId === organizationId, - ); - } - - const isAssignedToTargetProject = - projectSlug && projectSlug in assignedProjects && isAssignedToTargetOrganization; - - const assignmentNotRequired = isAdmin || (isManager && isAssignedToTargetOrganization); - - const hasPermission = isAssignedToTargetProject || assignmentNotRequired; - - const assignedProjectKey = assignedProjects?.[projectSlug]?.projectKey; - - return { - isAdmin, - hasPermission, - assignedProjectKey, - assignmentNotRequired, - isAssignedToTargetProject, - isAssignedToTargetOrganization, - }; - }, - ); diff --git a/app/src/layouts/appLayout/organizationSidebar/organizationSidebar.jsx b/app/src/layouts/appLayout/organizationSidebar/organizationSidebar.jsx index 2cb4b754b6..a09d69d570 100644 --- a/app/src/layouts/appLayout/organizationSidebar/organizationSidebar.jsx +++ b/app/src/layouts/appLayout/organizationSidebar/organizationSidebar.jsx @@ -18,7 +18,7 @@ import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import { useTracking } from 'react-tracking'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector, urlOrganizationAndProjectSelector } from 'controllers/pages'; import { FormattedMessage } from 'react-intl'; import { canSeeMembers } from 'common/utils/permissions'; import { @@ -29,7 +29,6 @@ import { import { uiExtensionSidebarComponentsSelector } from 'controllers/plugins/uiExtensions'; import { AppSidebar } from 'layouts/common/appSidebar'; import { ExtensionLoader } from 'components/extensionLoader'; -import { urlOrganizationAndProjectSelector } from 'controllers/pages'; import MembersIcon from 'common/img/sidebar/members-icon-inline.svg'; import SettingsIcon from 'common/img/sidebar/settings-icon-inline.svg'; import ProjectsIcon from 'common/img/sidebar/projects-icon-inline.svg'; diff --git a/app/src/layouts/appLayout/projectSidebar/projectSidebar.jsx b/app/src/layouts/appLayout/projectSidebar/projectSidebar.jsx index b025627301..c240545cbb 100644 --- a/app/src/layouts/appLayout/projectSidebar/projectSidebar.jsx +++ b/app/src/layouts/appLayout/projectSidebar/projectSidebar.jsx @@ -18,7 +18,7 @@ import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import { useTracking } from 'react-tracking'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector, urlOrganizationAndProjectSelector } from 'controllers/pages'; import { SIDEBAR_EVENTS } from 'components/main/analytics/events'; import { FormattedMessage } from 'react-intl'; import { canSeeMembers } from 'common/utils/permissions'; @@ -38,7 +38,6 @@ import { } from 'controllers/plugins/uiExtensions'; import { AppSidebar } from 'layouts/common/appSidebar'; import { ExtensionLoader } from 'components/extensionLoader'; -import { urlOrganizationAndProjectSelector } from 'controllers/pages'; import FiltersIcon from 'common/img/filters-icon-inline.svg'; import DashboardIcon from 'common/img/sidebar/dashboard-icon-inline.svg'; import LaunchesIcon from 'common/img/sidebar/launches-icon-inline.svg'; diff --git a/app/src/pages/common/membersPage/membersGrid/projectRole/projectRole.jsx b/app/src/pages/common/membersPage/membersGrid/projectRole/projectRole.jsx index 000db613e2..94cd44833d 100644 --- a/app/src/pages/common/membersPage/membersGrid/projectRole/projectRole.jsx +++ b/app/src/pages/common/membersPage/membersGrid/projectRole/projectRole.jsx @@ -25,8 +25,8 @@ import { fetch } from 'common/utils'; import { URLS } from 'common/urls'; import { InputDropdown } from 'components/inputs/inputDropdown'; import { canChangeUserRole } from 'common/utils/permissions'; -import { urlProjectSlugSelector } from 'controllers/pages'; -import { userIdSelector, userRolesSelector } from 'controllers/user'; +import { urlProjectSlugSelector, userRolesSelector } from 'controllers/pages'; +import { userIdSelector } from 'controllers/user'; import { MEMBERS_PAGE_EVENTS } from 'components/main/analytics/events'; import { ROLES_MAP } from 'common/constants/projectRoles'; import { ADMINISTRATOR } from 'common/constants/accountRoles'; diff --git a/app/src/pages/common/membersPage/membersGrid/unassignButton/unassignButton.jsx b/app/src/pages/common/membersPage/membersGrid/unassignButton/unassignButton.jsx index 3e17a0dfc1..cead964217 100644 --- a/app/src/pages/common/membersPage/membersGrid/unassignButton/unassignButton.jsx +++ b/app/src/pages/common/membersPage/membersGrid/unassignButton/unassignButton.jsx @@ -26,9 +26,9 @@ import { fetch } from 'common/utils'; import { URLS } from 'common/urls'; import { COMMON_LOCALE_KEYS } from 'common/constants/localization'; import { canAssignUnassignInternalUser } from 'common/utils/permissions'; -import { urlProjectSlugSelector } from 'controllers/pages'; +import { urlProjectSlugSelector, userRolesSelector } from 'controllers/pages'; import { userRolesType } from 'common/constants/projectRoles'; -import { userIdSelector, assignedProjectsSelector, userRolesSelector } from 'controllers/user'; +import { userIdSelector, assignedProjectsSelector } from 'controllers/user'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; import { MEMBERS_PAGE_EVENTS } from 'components/main/analytics/events'; import UnassignIcon from 'common/img/unassign-inline.svg'; diff --git a/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx b/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx index 5029972616..9d9cb89782 100644 --- a/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx +++ b/app/src/pages/common/membersPage/membersPageToolbar/membersPageToolbar.jsx @@ -22,7 +22,7 @@ import { showModalAction } from 'controllers/modal'; import { injectIntl, defineMessages } from 'react-intl'; import { reduxForm } from 'redux-form'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { canInviteInternalUser } from 'common/utils/permissions'; import { GhostButton } from 'components/buttons/ghostButton'; import { FieldProvider } from 'components/fields/fieldProvider'; diff --git a/app/src/pages/inside/common/dashboardPageHeader/dashboardPageHeader.jsx b/app/src/pages/inside/common/dashboardPageHeader/dashboardPageHeader.jsx index 1e9f0f608f..a3e11c74b8 100644 --- a/app/src/pages/inside/common/dashboardPageHeader/dashboardPageHeader.jsx +++ b/app/src/pages/inside/common/dashboardPageHeader/dashboardPageHeader.jsx @@ -24,6 +24,7 @@ import { activeDashboardIdSelector, PROJECT_DASHBOARD_PAGE, PROJECT_DASHBOARD_ITEM_PAGE, + userRolesSelector, } from 'controllers/pages'; import { dashboardItemsSelector, @@ -33,7 +34,6 @@ import { } from 'controllers/dashboard'; import { InputDropdown } from 'components/inputs/inputDropdown'; import { NavLink } from 'components/main/navLink'; -import { userRolesSelector } from 'controllers/user'; import { userRolesType } from 'common/constants/projectRoles'; import { canWorkWithDashboard } from 'common/utils/permissions/permissions'; import { AddDashboardButton } from './addDashboardButton'; diff --git a/app/src/pages/inside/common/launchFiltersToolbar/launchFiltersToolbar.jsx b/app/src/pages/inside/common/launchFiltersToolbar/launchFiltersToolbar.jsx index f5c934a27b..0375d10568 100644 --- a/app/src/pages/inside/common/launchFiltersToolbar/launchFiltersToolbar.jsx +++ b/app/src/pages/inside/common/launchFiltersToolbar/launchFiltersToolbar.jsx @@ -39,7 +39,7 @@ import AddFilterIcon from 'common/img/add-filter-inline.svg'; import { LAUNCHES_PAGE_EVENTS } from 'components/main/analytics/events'; import { canWorkWithFilters } from 'common/utils/permissions'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { FilterList } from './filterList'; import { FiltersActionBar } from './filtersActionBar'; import { ExpandToggler } from './expandToggler'; diff --git a/app/src/pages/inside/common/launchSuiteGrid/hamburger/hamburger.jsx b/app/src/pages/inside/common/launchSuiteGrid/hamburger/hamburger.jsx index 1bc491d930..92709b07a8 100644 --- a/app/src/pages/inside/common/launchSuiteGrid/hamburger/hamburger.jsx +++ b/app/src/pages/inside/common/launchSuiteGrid/hamburger/hamburger.jsx @@ -34,7 +34,7 @@ import { import { updateLaunchLocallyAction } from 'controllers/launch'; import { showModalAction } from 'controllers/modal'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { enabledPattersSelector, projectKeySelector } from 'controllers/project'; import { analyzerExtensionsSelector } from 'controllers/appInfo'; import { COMMON_LOCALE_KEYS } from 'common/constants/localization'; diff --git a/app/src/pages/inside/common/modals/editItemModal/editItemModal.jsx b/app/src/pages/inside/common/modals/editItemModal/editItemModal.jsx index f8cfc30e1f..0714d4fc1c 100644 --- a/app/src/pages/inside/common/modals/editItemModal/editItemModal.jsx +++ b/app/src/pages/inside/common/modals/editItemModal/editItemModal.jsx @@ -31,7 +31,7 @@ import { COMMON_LOCALE_KEYS } from 'common/constants/localization'; import { LAUNCH_ITEM_TYPES } from 'common/constants/launchItemTypes'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { formatItemName } from 'controllers/testItem'; import { SectionHeader } from 'components/main/sectionHeader'; import { ModalLayout, withModal, ModalField } from 'components/main/modal'; diff --git a/app/src/pages/inside/common/suiteTestToolbar/actionPanel/testItemActionPanel.jsx b/app/src/pages/inside/common/suiteTestToolbar/actionPanel/testItemActionPanel.jsx index df72ccdc72..ac148f327d 100644 --- a/app/src/pages/inside/common/suiteTestToolbar/actionPanel/testItemActionPanel.jsx +++ b/app/src/pages/inside/common/suiteTestToolbar/actionPanel/testItemActionPanel.jsx @@ -22,7 +22,7 @@ import { connect } from 'react-redux'; import { injectIntl, FormattedMessage } from 'react-intl'; import { breadcrumbsSelector, levelSelector, restorePathAction } from 'controllers/testItem'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { availableBtsIntegrationsSelector, isBtsPluginsExistSelector, diff --git a/app/src/pages/inside/dashboardItemPage/dashboardItemPage.jsx b/app/src/pages/inside/dashboardItemPage/dashboardItemPage.jsx index cd41f49b17..e80230fa67 100644 --- a/app/src/pages/inside/dashboardItemPage/dashboardItemPage.jsx +++ b/app/src/pages/inside/dashboardItemPage/dashboardItemPage.jsx @@ -35,13 +35,14 @@ import { updateDashboardAction, } from 'controllers/dashboard'; import { userRolesType } from 'common/constants/projectRoles'; -import { userInfoSelector, userRolesSelector } from 'controllers/user'; +import { userInfoSelector } from 'controllers/user'; import { projectKeySelector } from 'controllers/project'; import { urlOrganizationAndProjectSelector, PROJECT_DASHBOARD_PAGE, PROJECT_DASHBOARD_PRINT_PAGE, activeDashboardIdSelector, + userRolesSelector, } from 'controllers/pages'; import { showModalAction } from 'controllers/modal'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; diff --git a/app/src/pages/inside/dashboardItemPage/modals/common/widgetControls/controls/filtersControl/filtersControl.jsx b/app/src/pages/inside/dashboardItemPage/modals/common/widgetControls/controls/filtersControl/filtersControl.jsx index 7b9cf71df9..5819705ff6 100644 --- a/app/src/pages/inside/dashboardItemPage/modals/common/widgetControls/controls/filtersControl/filtersControl.jsx +++ b/app/src/pages/inside/dashboardItemPage/modals/common/widgetControls/controls/filtersControl/filtersControl.jsx @@ -38,7 +38,7 @@ import { GhostButton } from 'components/buttons/ghostButton'; import { SearchableFilterList } from 'pages/inside/common/searchableFilterList'; import { canWorkWithFilters } from 'common/utils/permissions'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { WIDGET_WIZARD_FORM } from '../../../constants'; import { LockedActiveFilter } from './lockedActiveFilter'; import { FilterEdit } from './filterEdit'; diff --git a/app/src/pages/inside/dashboardItemPage/widgetsGrid/emptyWidgetGrid/emptyWidgetGrid.jsx b/app/src/pages/inside/dashboardItemPage/widgetsGrid/emptyWidgetGrid/emptyWidgetGrid.jsx index 7662559066..10fa778bd1 100644 --- a/app/src/pages/inside/dashboardItemPage/widgetsGrid/emptyWidgetGrid/emptyWidgetGrid.jsx +++ b/app/src/pages/inside/dashboardItemPage/widgetsGrid/emptyWidgetGrid/emptyWidgetGrid.jsx @@ -23,7 +23,7 @@ import AddDashboardIcon from 'common/img/add-widget-inline.svg'; import { canWorkWithWidgets } from 'common/utils/permissions/permissions'; import { connect } from 'react-redux'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import styles from './emptyWidgetGrid.scss'; const cx = classNames.bind(styles); diff --git a/app/src/pages/inside/dashboardItemPage/widgetsGrid/widget/widgetHeader/widgetHeader.jsx b/app/src/pages/inside/dashboardItemPage/widgetsGrid/widget/widgetHeader/widgetHeader.jsx index aac260f771..53e57c20a7 100644 --- a/app/src/pages/inside/dashboardItemPage/widgetsGrid/widget/widgetHeader/widgetHeader.jsx +++ b/app/src/pages/inside/dashboardItemPage/widgetsGrid/widget/widgetHeader/widgetHeader.jsx @@ -33,7 +33,7 @@ import { MATERIALIZED_VIEW_WIDGETS } from 'components/widgets'; import { canWorkWithWidgets } from 'common/utils/permissions/permissions'; import { connect } from 'react-redux'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { DescriptionTooltipIcon } from './descriptionTooltipIcon'; import styles from './widgetHeader.scss'; diff --git a/app/src/pages/inside/dashboardPage/dashboardList/EmptyDashboards/emptyDashboards.jsx b/app/src/pages/inside/dashboardPage/dashboardList/EmptyDashboards/emptyDashboards.jsx index c0170ec84a..11d179dd65 100644 --- a/app/src/pages/inside/dashboardPage/dashboardList/EmptyDashboards/emptyDashboards.jsx +++ b/app/src/pages/inside/dashboardPage/dashboardList/EmptyDashboards/emptyDashboards.jsx @@ -19,7 +19,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import classNames from 'classnames/bind'; import { injectIntl, defineMessages } from 'react-intl'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { userRolesType } from 'common/constants/projectRoles'; import { canWorkWithDashboard } from 'common/utils/permissions/permissions'; import { GhostButton } from 'components/buttons/ghostButton'; diff --git a/app/src/pages/inside/dashboardPage/dashboardList/dashboardTable/dashboardTable.jsx b/app/src/pages/inside/dashboardPage/dashboardList/dashboardTable/dashboardTable.jsx index 570f889d2b..80008a4b81 100644 --- a/app/src/pages/inside/dashboardPage/dashboardList/dashboardTable/dashboardTable.jsx +++ b/app/src/pages/inside/dashboardPage/dashboardList/dashboardTable/dashboardTable.jsx @@ -21,8 +21,7 @@ import { connect } from 'react-redux'; import { injectIntl, defineMessages } from 'react-intl'; import { Grid, ALIGN_CENTER } from 'components/main/grid'; import { EmptyDashboards } from 'pages/inside/dashboardPage/dashboardList/EmptyDashboards'; -import { urlOrganizationAndProjectSelector } from 'controllers/pages'; -import { userRolesSelector } from 'controllers/user'; +import { urlOrganizationAndProjectSelector, userRolesSelector } from 'controllers/pages'; import { userRolesType } from 'common/constants/projectRoles'; import { canWorkWithDashboard } from 'common/utils/permissions/permissions'; import { diff --git a/app/src/pages/inside/filtersPage/filterGrid/filterGrid.jsx b/app/src/pages/inside/filtersPage/filterGrid/filterGrid.jsx index b6b5b30871..03e0e4e2c3 100644 --- a/app/src/pages/inside/filtersPage/filterGrid/filterGrid.jsx +++ b/app/src/pages/inside/filtersPage/filterGrid/filterGrid.jsx @@ -22,10 +22,13 @@ import classNames from 'classnames/bind'; import { injectIntl, defineMessages, FormattedMessage } from 'react-intl'; import { ALIGN_CENTER, Grid } from 'components/main/grid'; import { FILTERS_PAGE_EVENTS } from 'components/main/analytics/events'; -import { PROJECT_LAUNCHES_PAGE, urlOrganizationAndProjectSelector } from 'controllers/pages'; +import { + PROJECT_LAUNCHES_PAGE, + urlOrganizationAndProjectSelector, + userRolesSelector, +} from 'controllers/pages'; import { canWorkWithFilters } from 'common/utils/permissions'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; import { FilterName } from './filterName'; import { FilterOptions } from './filterOptions'; import { DisplayFilter } from './displayFilter'; diff --git a/app/src/pages/inside/filtersPage/filterPageToolbar/filterPageToolbar.jsx b/app/src/pages/inside/filtersPage/filterPageToolbar/filterPageToolbar.jsx index 5f32f05f18..95e2b9dde5 100644 --- a/app/src/pages/inside/filtersPage/filterPageToolbar/filterPageToolbar.jsx +++ b/app/src/pages/inside/filtersPage/filterPageToolbar/filterPageToolbar.jsx @@ -29,7 +29,7 @@ import { FILTERS_PAGE_EVENTS } from 'components/main/analytics/events'; import { canWorkWithFilters } from 'common/utils/permissions'; import { connect } from 'react-redux'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import styles from './filterPageToolbar.scss'; const cx = classNames.bind(styles); diff --git a/app/src/pages/inside/filtersPage/noFiltersBlock/noFiltersBlock.jsx b/app/src/pages/inside/filtersPage/noFiltersBlock/noFiltersBlock.jsx index 3483ebaa78..9426689d6f 100644 --- a/app/src/pages/inside/filtersPage/noFiltersBlock/noFiltersBlock.jsx +++ b/app/src/pages/inside/filtersPage/noFiltersBlock/noFiltersBlock.jsx @@ -22,13 +22,16 @@ import classNames from 'classnames/bind'; import { connect } from 'react-redux'; import Link from 'redux-first-router-link'; import { FormattedMessage } from 'react-intl'; -import { PROJECT_LAUNCHES_PAGE, urlOrganizationAndProjectSelector } from 'controllers/pages'; +import { + PROJECT_LAUNCHES_PAGE, + urlOrganizationAndProjectSelector, + userRolesSelector, +} from 'controllers/pages'; import AddFilterIcon from 'common/img/add-filter-inline.svg'; import { GhostButton } from 'components/buttons/ghostButton'; import { ALL } from 'common/constants/reservedFilterIds'; import { canWorkWithFilters } from 'common/utils/permissions'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; import styles from './noFiltersBlock.scss'; const cx = classNames.bind(styles); diff --git a/app/src/pages/inside/historyPage/historyToolbar/actionPanelWithGroupOperations/actionPanelWithGroupOperations.jsx b/app/src/pages/inside/historyPage/historyToolbar/actionPanelWithGroupOperations/actionPanelWithGroupOperations.jsx index b849fecb41..e461597b72 100644 --- a/app/src/pages/inside/historyPage/historyToolbar/actionPanelWithGroupOperations/actionPanelWithGroupOperations.jsx +++ b/app/src/pages/inside/historyPage/historyToolbar/actionPanelWithGroupOperations/actionPanelWithGroupOperations.jsx @@ -31,7 +31,7 @@ import { proceedWithValidItemsAction, validationErrorsSelector, } from 'controllers/itemsHistory'; -import { activeProjectRoleSelector, userAccountRoleSelector } from 'controllers/user'; +import { userAccountRoleSelector } from 'controllers/user'; import { showModalAction } from 'controllers/modal'; import { launchSelector, deleteTestItemsAction } from 'controllers/testItem'; import { @@ -46,6 +46,7 @@ import { GhostMenuButton } from 'components/buttons/ghostMenuButton'; import { HISTORY_PAGE_EVENTS } from 'components/main/analytics/events'; import { createStepActionDescriptors } from 'pages/inside/common/utils'; import { TO_INVESTIGATE_LOCATOR_PREFIX } from 'common/constants/defectTypes'; +import { activeProjectRoleSelector } from 'controllers/pages'; import { HistoryActionPanel } from '../actionPanel'; const getUnlinkIssueEventsInfo = (place) => ({ diff --git a/app/src/pages/inside/launchesPage/LaunchToolbar/actionPanel/actionPanel.jsx b/app/src/pages/inside/launchesPage/LaunchToolbar/actionPanel/actionPanel.jsx index 7be4c2f9a8..ee6207e006 100644 --- a/app/src/pages/inside/launchesPage/LaunchToolbar/actionPanel/actionPanel.jsx +++ b/app/src/pages/inside/launchesPage/LaunchToolbar/actionPanel/actionPanel.jsx @@ -22,7 +22,7 @@ import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import classNames from 'classnames/bind'; import { canBulkEditItems } from 'common/utils/permissions'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { GhostButton } from 'components/buttons/ghostButton'; import { GhostMenuButton } from 'components/buttons/ghostMenuButton'; import { Breadcrumbs, breadcrumbDescriptorShape } from 'components/main/breadcrumbs'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/analyzerContainer.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/analyzerContainer.jsx index 89e143daaf..ad34771c30 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/analyzerContainer.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/analyzerContainer.jsx @@ -22,6 +22,7 @@ import { payloadSelector, PROJECT_SETTINGS_TAB_PAGE, urlOrganizationAndProjectSelector, + userRolesSelector, } from 'controllers/pages'; import { projectKeySelector, @@ -40,7 +41,6 @@ import { showModalAction } from 'controllers/modal'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; import { analyzerExtensionsSelector } from 'controllers/appInfo'; import { canUpdateSettings } from 'common/utils/permissions'; -import { userRolesSelector } from 'controllers/user'; import { COMMON_LOCALE_KEYS } from 'common/constants/localization'; import { messages } from './messages'; import { messages as indexSettingsMessages } from './indexSettings/messages'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx index d4c4f4ed7e..30bb696b27 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx @@ -22,7 +22,7 @@ import { useIntl } from 'react-intl'; import classNames from 'classnames/bind'; import Parser from 'html-react-parser'; import { addDefectTypeAction, defectTypesSelector } from 'controllers/project'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { canUpdateSettings } from 'common/utils/permissions'; import { DEFECT_TYPES_SEQUENCE } from 'common/constants/defectTypes'; import { Button } from '@reportportal/ui-kit'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx index 63b58414e6..5ef9c860cb 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/integrations/integrationsList/integrationInfo/integrationInfo.jsx @@ -21,7 +21,12 @@ import classNames from 'classnames/bind'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useTracking } from 'react-tracking'; -import { userRolesSelector } from 'controllers/user'; +import { + userRolesSelector, + urlOrganizationAndProjectSelector, + PROJECT_SETTINGS_TAB_PAGE, + updatePagePropertiesAction, +} from 'controllers/pages'; import { uiExtensionIntegrationSettingsSelector } from 'controllers/plugins/uiExtensions/selectors'; import { canUpdateSettings } from 'common/utils/permissions'; import { PLUGIN_NAME_TITLES } from 'components/integrations'; @@ -33,11 +38,6 @@ import { updateIntegrationAction, removeProjectIntegrationsByTypeAction, } from 'controllers/plugins'; -import { - urlOrganizationAndProjectSelector, - PROJECT_SETTINGS_TAB_PAGE, - updatePagePropertiesAction, -} from 'controllers/pages'; import { ExtensionLoader } from 'components/extensionLoader'; import { INTEGRATIONS_SETTINGS_COMPONENTS_MAP } from 'components/integrations/settingsComponentsMap'; import { EmptyStatePage } from 'pages/inside/projectSettingsPageContainer/content/emptyStatePage'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/notifications.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/notifications.jsx index 42a4520016..c4d01c1844 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/notifications.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/notifications.jsx @@ -25,7 +25,7 @@ import { projectNotificationsSelector, projectNotificationsStateSelector, } from 'controllers/project'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { fetchProjectNotificationsAction, updateNotificationStateAction, diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx index 2248434df2..4d6a6be478 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx @@ -36,12 +36,12 @@ import { import { canUpdateSettings } from 'common/utils/permissions'; import { useDispatch, useSelector } from 'react-redux'; import { isEmailIntegrationAvailableSelector } from 'controllers/plugins'; -import { activeProjectSelector, userRolesSelector } from 'controllers/user'; +import { activeProjectSelector } from 'controllers/user'; import Parser from 'html-react-parser'; import PropTypes from 'prop-types'; import { withTooltip } from 'components/main/tooltips/tooltip'; import { TextTooltip } from 'components/main/tooltips/textTooltip'; -import { PROJECT_SETTINGS_TAB_PAGE } from 'controllers/pages'; +import { PROJECT_SETTINGS_TAB_PAGE, userRolesSelector } from 'controllers/pages'; import { INTEGRATIONS } from 'common/constants/settingsTabs'; import { LinkComponent } from 'pages/inside/projectSettingsPageContainer/content/notifications/LinkComponent'; import arrowRightIcon from 'common/img/arrow-right-inline.svg'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx index 0b29b613cc..218c6ecf5f 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx @@ -24,7 +24,7 @@ import { hideModalAction, showModalAction } from 'controllers/modal'; import { STRING_PATTERN } from 'common/constants/patternTypes'; import { useIntl } from 'react-intl'; import { canUpdateSettings } from 'common/utils/permissions'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import PropTypes from 'prop-types'; import { docsReferences } from 'common/utils'; import { SettingsPageContent } from '../settingsPageContent'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx b/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx index c3abf75d49..3250ce67a4 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx @@ -40,7 +40,7 @@ import { import { SETTINGS_PAGE_EVENTS } from 'components/main/analytics/events'; import { FormField } from 'components/fields/formField'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { showNotification, NOTIFICATION_TYPES } from 'controllers/notification'; import { langSelector } from 'controllers/lang'; import { SpinningPreloader } from 'components/preloaders/spinningPreloader'; diff --git a/app/src/pages/inside/projectSettingsPageContainer/projectSettingsPageContainer.jsx b/app/src/pages/inside/projectSettingsPageContainer/projectSettingsPageContainer.jsx index 60fd090a0b..1be1cf1de3 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/projectSettingsPageContainer.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/projectSettingsPageContainer.jsx @@ -23,6 +23,7 @@ import { querySelector, settingsTabSelector, urlOrganizationAndProjectSelector, + userRolesSelector, } from 'controllers/pages'; import { SettingsLayout } from 'layouts/settingsLayout'; import { @@ -41,7 +42,6 @@ import { DemoDataTab } from 'pages/inside/projectSettingsPageContainer/content/d import { canSeeDemoData } from 'common/utils/permissions'; import { ExtensionLoader } from 'components/extensionLoader'; import { uiExtensionSettingsTabsSelector } from 'controllers/plugins'; -import { userRolesSelector } from 'controllers/user'; import { Navigation } from 'pages/inside/projectSettingsPageContainer/navigation'; import { ScrollWrapper } from 'components/main/scrollWrapper'; import { Header } from 'pages/inside/projectSettingsPageContainer/header'; diff --git a/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.jsx b/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.jsx index c4269ea824..7b51487667 100644 --- a/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.jsx +++ b/app/src/pages/inside/stepPage/modals/testItemDetailsModal/testItemDetailsModal.jsx @@ -30,7 +30,7 @@ import { FieldProvider } from 'components/fields/fieldProvider'; import { fetch } from 'common/utils/fetch'; import { URLS } from 'common/urls'; import { userRolesType } from 'common/constants/projectRoles'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { clearLogPageStackTrace } from 'controllers/log'; import { launchSelector } from 'controllers/testItem'; import { ExtensionLoader, extensionType } from 'components/extensionLoader'; diff --git a/app/src/pages/inside/stepPage/stepGrid/stepGrid.jsx b/app/src/pages/inside/stepPage/stepGrid/stepGrid.jsx index 8276f45919..01fc638a39 100644 --- a/app/src/pages/inside/stepPage/stepGrid/stepGrid.jsx +++ b/app/src/pages/inside/stepPage/stepGrid/stepGrid.jsx @@ -37,7 +37,7 @@ import { NoItemMessage } from 'components/main/noItemMessage'; import { formatAttribute } from 'common/utils/attributeUtils'; import { StatusDropdown } from 'pages/inside/common/statusDropdown/statusDropdown'; import { canWorkWithDefectTypes, canWorkWithTests } from 'common/utils/permissions/permissions'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { userRolesType } from 'common/constants/projectRoles'; import { connect } from 'react-redux'; import { PredefinedFilterSwitcher } from './predefinedFilterSwitcher'; diff --git a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsToolbar/actionPanel/uniqueErrorsActionPanel.jsx b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsToolbar/actionPanel/uniqueErrorsActionPanel.jsx index f55697338a..7022b4d12a 100644 --- a/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsToolbar/actionPanel/uniqueErrorsActionPanel.jsx +++ b/app/src/pages/inside/uniqueErrorsPage/uniqueErrorsToolbar/actionPanel/uniqueErrorsActionPanel.jsx @@ -44,8 +44,8 @@ import { unlinkIssueAction, proceedWithValidItemsAction, } from 'controllers/uniqueErrors/clusterItems'; -import { activeProjectRoleSelector, userAccountRoleSelector } from 'controllers/user'; - +import { userAccountRoleSelector } from 'controllers/user'; +import { activeProjectRoleSelector } from 'controllers/pages'; import styles from './uniqueErrorsActionPanel.scss'; const cx = classNames.bind(styles); diff --git a/app/src/pages/organization/organizationProjectsPage/organizationProjectsPage.jsx b/app/src/pages/organization/organizationProjectsPage/organizationProjectsPage.jsx index 1e6ef4733b..b82e5bd8c5 100644 --- a/app/src/pages/organization/organizationProjectsPage/organizationProjectsPage.jsx +++ b/app/src/pages/organization/organizationProjectsPage/organizationProjectsPage.jsx @@ -15,7 +15,6 @@ */ import { useSelector } from 'react-redux'; -import { userRolesSelector } from 'controllers/user'; import { canCreateProject } from 'common/utils/permissions'; import classNames from 'classnames/bind'; import Parser from 'html-react-parser'; @@ -25,6 +24,7 @@ import { loadingSelector, projectsSelector } from 'controllers/organizations/pro import { activeOrganizationLoadingSelector } from 'controllers/organizations/organization/selectors'; import { ScrollWrapper } from 'components/main/scrollWrapper'; import PlusIcon from 'common/img/plus-button-inline.svg'; +import { userRolesSelector } from 'controllers/pages'; import { ProjectsPageHeader } from './projectsPageHeader'; import { EmptyPageState } from '../emptyPageState'; import EmptyIcon from './img/empty-projects-icon-inline.svg'; diff --git a/app/src/pages/organization/organizationProjectsPage/projectsListTable/projectName/projectName.jsx b/app/src/pages/organization/organizationProjectsPage/projectsListTable/projectName/projectName.jsx index 42fe0af109..2242bb5853 100644 --- a/app/src/pages/organization/organizationProjectsPage/projectsListTable/projectName/projectName.jsx +++ b/app/src/pages/organization/organizationProjectsPage/projectsListTable/projectName/projectName.jsx @@ -22,15 +22,15 @@ import { useDispatch, useSelector } from 'react-redux'; import { ADMIN_PROJECTS_PAGE_EVENTS } from 'components/main/analytics/events'; import { SCREEN_XS_MAX_MEDIA } from 'common/constants/screenSizeVariables'; import { navigateToProjectAction } from 'controllers/organizations/projects'; -import { createUserAssignedSelector, setActiveProjectKeyAction } from 'controllers/user'; -import { PROJECT_PAGE } from 'controllers/pages'; +import { setActiveProjectKeyAction } from 'controllers/user'; +import { userAssignedSelector, PROJECT_PAGE } from 'controllers/pages'; import styles from './projectName.scss'; const cx = classNames.bind(styles); export const ProjectName = ({ project, disableAnalytics = false }) => { const { projectSlug, organizationSlug, projectName, projectKey } = project; - const { hasPermission } = useSelector(createUserAssignedSelector(projectSlug, organizationSlug)); + const { hasPermission } = useSelector(userAssignedSelector(projectSlug, organizationSlug)); const dispatch = useDispatch(); const { trackEvent } = useTracking(); diff --git a/app/src/pages/organization/projectTeamPage/projectTeamListTable/projectTeamListTable.jsx b/app/src/pages/organization/projectTeamPage/projectTeamListTable/projectTeamListTable.jsx index 7707b52a6c..dda69bac91 100644 --- a/app/src/pages/organization/projectTeamPage/projectTeamListTable/projectTeamListTable.jsx +++ b/app/src/pages/organization/projectTeamPage/projectTeamListTable/projectTeamListTable.jsx @@ -19,11 +19,11 @@ import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { activeProjectKeySelector, userRolesSelector } from 'controllers/user'; +import { activeProjectKeySelector } from 'controllers/user'; import { AbsRelTime } from 'components/main/absRelTime'; import { MeatballMenuIcon, Popover, Table } from '@reportportal/ui-kit'; import { UserAvatar } from 'pages/inside/common/userAvatar'; -import { urlOrganizationAndProjectSelector } from 'controllers/pages'; +import { urlOrganizationAndProjectSelector, userRolesSelector } from 'controllers/pages'; import { SORTING_ASC, withSortingURL } from 'controllers/sorting'; import { DEFAULT_SORT_COLUMN } from 'controllers/members/constants'; import { fetchMembersAction } from 'controllers/members'; diff --git a/app/src/pages/organization/projectTeamPage/projectTeamPage.jsx b/app/src/pages/organization/projectTeamPage/projectTeamPage.jsx index 055663b1c6..ceb9f4e878 100644 --- a/app/src/pages/organization/projectTeamPage/projectTeamPage.jsx +++ b/app/src/pages/organization/projectTeamPage/projectTeamPage.jsx @@ -15,7 +15,7 @@ */ import { useSelector } from 'react-redux'; -import { userRolesSelector } from 'controllers/user'; +import { userRolesSelector } from 'controllers/pages'; import { canInviteInternalUser } from 'common/utils/permissions'; import classNames from 'classnames/bind'; import { loadingSelector, membersSelector } from 'controllers/members'; diff --git a/app/src/routes/routesMap.js b/app/src/routes/routesMap.js index 8bb0d15c40..183d006d1f 100644 --- a/app/src/routes/routesMap.js +++ b/app/src/routes/routesMap.js @@ -22,7 +22,6 @@ import { setActiveProjectAction, setActiveProjectKeyAction, activeProjectKeySelector, - createUserAssignedSelector, } from 'controllers/user'; import { fetchProjectAction } from 'controllers/project'; import { @@ -58,6 +57,7 @@ import { USER_PROFILE_SUB_PAGE, ACCOUNT_REMOVED_PAGE, PROJECT_PLUGIN_PAGE, + userAssignedSelector, } from 'controllers/pages'; import { GENERAL, AUTHORIZATION_CONFIGURATION, ANALYTICS } from 'common/constants/settingsTabs'; import { INSTALLED, STORE } from 'common/constants/pluginsTabs'; @@ -336,7 +336,7 @@ export const onBeforeRouteChange = (dispatch, getState, { action }) => { assignedProjectKey, assignmentNotRequired, isAssignedToTargetOrganization, - } = createUserAssignedSelector(hashProjectSlug, hashOrganizationSlug)(getState()); + } = userAssignedSelector(hashProjectSlug, hashOrganizationSlug)(getState()); const isAdminNewPageType = !!adminPageNames[nextPageType]; const isAdminCurrentPageType = !!adminPageNames[currentPageType];