Skip to content

Commit 2db8b8b

Browse files
fix: org breadcrumb shows wrong name for non-admin users (#7234)
1 parent 9943da9 commit 2db8b8b

6 files changed

Lines changed: 50 additions & 13 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useSelector } from 'react-redux'
2+
import { useGetOrganisationsQuery } from 'common/services/useOrganisation'
3+
import { StoreStateType } from 'common/store'
4+
5+
const useSelectedOrganisation = () => {
6+
const selectedId = useSelector(
7+
(state: StoreStateType) => state.selectedOrganisation?.id,
8+
)
9+
const { data: organisationsData } = useGetOrganisationsQuery({})
10+
const organisation = organisationsData?.results?.find(
11+
(org) => org.id === selectedId,
12+
)
13+
14+
return organisation
15+
}
16+
17+
export default useSelectedOrganisation
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
2+
3+
type SelectedOrganisationState = {
4+
id: number | undefined
5+
}
6+
7+
const initialState: SelectedOrganisationState = {
8+
id: undefined,
9+
}
10+
11+
const selectedOrganisationSlice = createSlice({
12+
initialState,
13+
name: 'selectedOrganisation',
14+
reducers: {
15+
setSelectedOrganisationId(state, action: PayloadAction<number>) {
16+
state.id = action.payload
17+
},
18+
},
19+
})
20+
21+
export const { setSelectedOrganisationId } = selectedOrganisationSlice.actions
22+
export default selectedOrganisationSlice.reducer

frontend/common/store.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import {
1313
import storage from 'redux-persist/lib/storage'
1414
import { Persistor } from 'redux-persist/es/types'
1515
import { service } from './service'
16+
import selectedOrganisationReducer from './selectedOrganisationSlice'
1617
// END OF IMPORTS
1718
const createStore = () => {
1819
const reducer = combineReducers({
1920
[service.reducerPath]: service.reducer,
21+
selectedOrganisation: selectedOrganisationReducer,
2022
// END OF REDUCERS
2123
})
2224

frontend/common/stores/account-store.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import dataRelay from 'data-relay'
1212
import { sortBy } from 'lodash'
1313
import Project from 'common/project'
1414
import { getStore } from 'common/store'
15+
import { setSelectedOrganisationId } from 'common/selectedOrganisationSlice'
1516
import { service } from 'common/service'
1617
import { getBuildVersion } from 'common/services/useBuildVersion'
1718
import { createOnboardingSupportOptIn } from 'common/services/useOnboardingSupportOptIn'
@@ -309,6 +310,7 @@ const controller = {
309310
selectOrganisation: (id) => {
310311
API.setCookie('organisation', `${id}`)
311312
store.organisation = find(store.model.organisations, { id })
313+
getStore().dispatch(setSelectedOrganisationId(id))
312314
store.changed()
313315
},
314316

@@ -344,6 +346,9 @@ const controller = {
344346
AppActions.getOrganisation(orgId)
345347
}
346348
}
349+
if (store.organisation?.id) {
350+
getStore().dispatch(setSelectedOrganisationId(store.organisation.id))
351+
}
347352
}
348353

349354
AsyncStorage.setItem('user', JSON.stringify(store.model))

frontend/web/components/BreadcrumbSeparator.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import AccountStore from 'common/stores/account-store'
1313
import { useGetProjectsQuery } from 'common/services/useProject'
1414
import { useGetOrganisationsQuery } from 'common/services/useOrganisation'
1515
import { useHistory } from 'react-router-dom'
16-
import OrganisationStore from 'common/stores/organisation-store'
1716
import AppActions from 'common/dispatcher/app-actions'
1817
import Utils from 'common/utils/utils'
1918
import { getStore } from 'common/store'
@@ -177,7 +176,7 @@ const BreadcrumbSeparator: FC<BreadcrumbSeparatorType> = ({
177176
}
178177
AccountStore.on('change', onChangeAccountStore)
179178
return () => {
180-
OrganisationStore.off('change', onChangeAccountStore)
179+
AccountStore.off('change', onChangeAccountStore)
181180
}
182181
//eslint-disable-next-line
183182
}, [])

frontend/web/components/navigation/SelectOrgAndProject.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import React, { FC } from 'react'
2-
import AccountStore from 'common/stores/account-store'
32
import { Link, NavLink } from 'react-router-dom'
43
import BreadcrumbSeparator from 'components/BreadcrumbSeparator'
54
import classNames from 'classnames'
65
import Utils from 'common/utils/utils'
76
import { Project } from 'common/types/responses'
8-
import { useGetOrganisationQuery } from 'common/services/useOrganisation'
7+
import useSelectedOrganisation from 'common/hooks/useSelectedOrganisation'
98
import { appLevelPaths } from './constants'
109

1110
type SelectOrgAndProjectType = {
@@ -18,12 +17,7 @@ const SelectOrgAndProject: FC<SelectOrgAndProjectType> = ({
1817
projectId,
1918
}) => {
2019
const isAppLevelPage = appLevelPaths.includes(document.location.pathname)
21-
22-
const organisationId = AccountStore.getOrganisation()?.id
23-
const { data: organisation } = useGetOrganisationQuery(
24-
{ id: organisationId as number },
25-
{ skip: !organisationId },
26-
)
20+
const organisation = useSelectedOrganisation()
2721

2822
return (
2923
<Row className='gap-2'>
@@ -57,9 +51,7 @@ const SelectOrgAndProject: FC<SelectOrgAndProjectType> = ({
5751
})}
5852
to={Utils.getOrganisationHomePage()}
5953
>
60-
<div>
61-
{organisation?.name || AccountStore.getOrganisation()?.name}
62-
</div>
54+
<div>{organisation?.name}</div>
6355
</NavLink>
6456
</BreadcrumbSeparator>
6557
</div>

0 commit comments

Comments
 (0)