diff --git a/src/__tests__/breadcrumbs/Breadcrumbs.test.tsx b/src/__tests__/breadcrumbs/Breadcrumbs.test.tsx
index e36f64ceea..586bbf748e 100644
--- a/src/__tests__/breadcrumbs/Breadcrumbs.test.tsx
+++ b/src/__tests__/breadcrumbs/Breadcrumbs.test.tsx
@@ -32,9 +32,9 @@ describe('Breadcrumbs', () => {
it('should render breadcrumbs items', () => {
const breadcrumbs = [
- { text: 'Edit Patient', location: '/patient/1/edit' },
{ i18nKey: 'patient.label', location: '/patient' },
{ text: 'Bob', location: '/patient/1' },
+ { text: 'Edit Patient', location: '/patient/1/edit' },
]
const wrapper = setup(breadcrumbs)
diff --git a/src/__tests__/breadcrumbs/breadcrumbs-slice.test.ts b/src/__tests__/breadcrumbs/breadcrumbs-slice.test.ts
index f3b6f7da35..10f73f19ff 100644
--- a/src/__tests__/breadcrumbs/breadcrumbs-slice.test.ts
+++ b/src/__tests__/breadcrumbs/breadcrumbs-slice.test.ts
@@ -24,7 +24,7 @@ describe('breadcrumbs slice', () => {
expect(breadcrumbsStore.breadcrumbs).toEqual(breadcrumbsToAdd)
})
- it('should handle the ADD_BREADCRUMBS action with existing breadcreumbs', () => {
+ it('should handle the ADD_BREADCRUMBS action with existing breadcrumbs', () => {
const breadcrumbsToAdd = [{ text: 'Bob', location: '/user/1' }]
const state = {
@@ -39,6 +39,28 @@ describe('breadcrumbs slice', () => {
expect(breadcrumbsStore.breadcrumbs).toEqual([...state.breadcrumbs, ...breadcrumbsToAdd])
})
+ it('should handle the ADD_BREADCRUMBS action and sort the breadcrumbs by their location', () => {
+ const breadcrumbsToAdd = [{ text: 'Bob', location: '/user/1/' }]
+
+ const state = {
+ breadcrumbs: [
+ { text: 'user', location: '/user' },
+ { text: 'edit user', location: '/user/1/edit' },
+ ],
+ }
+
+ const breadcrumbsStore = breadcrumbs(state, {
+ type: addBreadcrumbs.type,
+ payload: breadcrumbsToAdd,
+ })
+
+ expect(breadcrumbsStore.breadcrumbs).toEqual([
+ { text: 'user', location: '/user' },
+ { text: 'Bob', location: '/user/1/' },
+ { text: 'edit user', location: '/user/1/edit' },
+ ])
+ })
+
it('should handle the REMOVE_BREADCRUMBS action', () => {
const breadcrumbsToRemove = [{ text: 'Bob', location: '/user/1' }]
diff --git a/src/breadcrumbs/Breadcrumbs.tsx b/src/breadcrumbs/Breadcrumbs.tsx
index ba666ece17..14cf3ddd33 100644
--- a/src/breadcrumbs/Breadcrumbs.tsx
+++ b/src/breadcrumbs/Breadcrumbs.tsx
@@ -12,19 +12,16 @@ const Breadcrumbs = () => {
return (
- {breadcrumbs
- .slice()
- .sort((b1, b2) => b1.location.length - b2.location.length)
- .map(({ i18nKey, text, location }, index) => {
- const isLast = index === breadcrumbs.length - 1
- const onClick = !isLast ? () => history.push(location) : undefined
+ {breadcrumbs.map(({ i18nKey, text, location }, index) => {
+ const isLast = index === breadcrumbs.length - 1
+ const onClick = !isLast ? () => history.push(location) : undefined
- return (
-
- {i18nKey ? t(i18nKey) : text}
-
- )
- })}
+ return (
+
+ {i18nKey ? t(i18nKey) : text}
+
+ )
+ })}
)
}
diff --git a/src/breadcrumbs/breadcrumbs-slice.ts b/src/breadcrumbs/breadcrumbs-slice.ts
index 2cc55424a3..86a689e0d8 100644
--- a/src/breadcrumbs/breadcrumbs-slice.ts
+++ b/src/breadcrumbs/breadcrumbs-slice.ts
@@ -14,7 +14,9 @@ const breadcrumbsSlice = createSlice({
initialState,
reducers: {
addBreadcrumbs(state, { payload }: PayloadAction) {
- state.breadcrumbs = [...state.breadcrumbs, ...payload]
+ state.breadcrumbs = [...state.breadcrumbs, ...payload].sort(
+ (b1, b2) => b1.location.length - b2.location.length,
+ )
},
removeBreadcrumbs(state, { payload }: PayloadAction) {
const locations = payload.map((b) => b.location)