Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(OrganisationUnitTree): deduplicate orgunit roots #1625

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor: rename to findCommoOrgUnitRoots
Birkbjo committed Oct 30, 2024
commit bd6afbd7bde5acb979deb49c88e25b2c0c75c7c6
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Find the minimum root units from a list of orgunits.
* Find the minimum/common root units from a list of orgunits.
* This is used to "deduplicate" a list of units, where some unit in the list
* may be a parent of another, and thus only the parent should be included as a root.
*
@@ -8,7 +8,7 @@
* @param {Array} unitsWithLevel - List of orgunits with their level
* @returns {Array} - A filtered list of the minimum root units
*/
export const deduplicateOrgUnitRoots = (unitsWithLevel) => {
export const findCommonOrgUnitRoots = (unitsWithLevel) => {
const sorted = unitsWithLevel.sort((a, b) => a.level - b.level)

const minimumRoots = sorted.filter((ou, index, array) => {
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { deduplicateOrgUnitRoots } from './deduplicate-org-unit-roots.js'
import { findCommonOrgUnitRoots } from './find-common-orgunit-roots.js'

const unitToPath = {
sierra: '/ImspTQPwCqd',
@@ -10,7 +10,7 @@ const unitToPath = {
'/ImspTQPwCqd/O6uvpzGd5pu/dGheVylzol6/y5hLlID8ihI',
'sierra/bargbe/barlie': '/ImspTQPwCqd/dGheVylzol6/y5hLlID8ihI',
'sierra/bargbe/barlie/ngalu':
'/ImspTQPwCqd/O6uvpzGd5pu/dGheVylzol6/y5hLlID8ihI/Aj5v9z1Jt3k',
'/ImspTQPwCqd/dGheVylzol6/y5hLlID8ihI/Aj5v9z1Jt3k',
'sierra/bo/baoma': '/ImspTQPwCqd/O6uvpzGd5pu/vWbkYPRmKyS',
'sierra/bo/baoma/faabu': '/ImspTQPwCqd/O6uvpzGd5pu/vWbkYPRmKyS/ZpE2POxvl9P',
'sierra/bo/badjia': '/ImspTQPwCqd/O6uvpzGd5pu/YuQRtpLP10I',
@@ -19,10 +19,10 @@ const unitToPath = {
'sierra/bombali': '/ImspTQPwCqd/fdc6uOvgoji',
}

describe('findMinimumRootUnits', () => {
describe('findCommonOrgUnitRoots', () => {
it('should return a single root unit when there is only one unit', () => {
const units = [{ path: unitToPath.sierra, level: 1 }]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([{ path: unitToPath.sierra, level: 1 }])
// should not mutate the input
expect(units).toStrictEqual(units)
@@ -34,7 +34,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['sierra/bombali'], level: 2 },
]

const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([
{ path: unitToPath['sierra/bo'], level: 2 },
{ path: unitToPath['sierra/bombali'], level: 2 },
@@ -47,7 +47,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['sierra'], level: 1 },
{ path: unitToPath['sierra/bo'], level: 2 },
]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([{ path: unitToPath['sierra'], level: 1 }])
expect(units).toStrictEqual(units)
})
@@ -57,7 +57,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['sierra'], level: 1 },
{ path: unitToPath['sierra/bo/badjia/ngelehun'], level: 4 },
]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([{ path: unitToPath['sierra'], level: 1 }])
expect(units).toStrictEqual(units)
})
@@ -68,7 +68,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['tanzania'], level: 1 },
{ path: unitToPath['ethiopia'], level: 1 },
]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([
{ path: unitToPath['sierra'], level: 1 },
{ path: unitToPath['tanzania'], level: 1 },
@@ -84,7 +84,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['sierra/bo/baoma'], level: 3 },
{ path: unitToPath['sierra/bo/bargbe'], level: 3 },
]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([
{ path: unitToPath['sierra/bo/baoma'], level: 3 },
{ path: unitToPath['sierra/bo/bargbe'], level: 3 },
@@ -101,7 +101,7 @@ describe('findMinimumRootUnits', () => {
{ path: unitToPath['sierra/bargbe/barlie'], level: 3 },
{ path: unitToPath['sierra/bargbe/barlie/ngalu'], level: 4 },
]
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([
{ path: unitToPath['sierra/bo'], level: 2 },
{ path: unitToPath['sierra/bargbe/barlie'], level: 3 },
@@ -111,7 +111,7 @@ describe('findMinimumRootUnits', () => {

it('should handle empty input and return an empty array', () => {
const units = []
const result = deduplicateOrgUnitRoots(units)
const result = findCommonOrgUnitRoots(units)
expect(result).toEqual([])
expect(units).toStrictEqual(units)
})
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
import React, { useEffect, useMemo, useState } from 'react'
import { OrganisationUnitNode } from '../organisation-unit-node/index.js'
import { orgUnitPathPropType } from '../prop-types.js'
import { deduplicateOrgUnitRoots } from './deduplicate-org-unit-roots.js'
import { findCommonOrgUnitRoots } from './find-common-orgunit-roots.js'
import { defaultRenderNodeLabel } from './default-render-node-label/index.js'
import { filterRootIds } from './filter-root-ids.js'
import { OrganisationUnitTreeRootError } from './organisation-unit-tree-root-error.js'
@@ -54,7 +54,7 @@ const OrganisationUnitTree = ({
if (!data) {
return []
}
return deduplicateOrgUnitRoots(Object.values(data))
return findCommonOrgUnitRoots(Object.values(data))
}, [data])

const { expanded, handleExpand, handleCollapse } = useExpanded({