Skip to content

Commit 84f7aa5

Browse files
committed
Keep alphabetical order
1 parent 9391526 commit 84f7aa5

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

src/Components/forms/inputs/EmployerDropDown.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,7 @@ const EmployerDropDown = ({ arrayList, isEmpty, onChange, value }) => {
2626
options={employersList}
2727
onChange={handleChange}
2828
onCreateOption={newEmployer => {
29-
setEmployersList(oldList => [
30-
...oldList,
31-
{
32-
label: newEmployer,
33-
value: newEmployer
34-
}
35-
])
29+
setEmployersList(oldList => insertedInto([...oldList], newEmployer))
3630
handleChange({ value: newEmployer })
3731
}}
3832
name="employer"
@@ -43,4 +37,17 @@ const EmployerDropDown = ({ arrayList, isEmpty, onChange, value }) => {
4337
)
4438
}
4539

40+
const insertedInto = (employers, employer) => {
41+
const canonical = employer.toLowerCase()
42+
const entry = { label: employer, value: employer }
43+
for (let index = 0; index < employers.length; index++) {
44+
if (canonical < employers[index].value.toLowerCase()) {
45+
employers.splice(index, 0, entry)
46+
return employers
47+
}
48+
}
49+
employers.push(entry)
50+
return employers
51+
}
52+
4653
export default EmployerDropDown

src/Components/forms/inputs/EmployerDropDown.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,30 @@ describe('EmployerDropDown', () => {
7979
)
8080
})
8181

82+
it('keeps the list in alphabetical order', async () => {
83+
const { container, user } = renderInForm({
84+
employers: ['ABC', 'BBC', 'CBC']
85+
})
86+
for (const employer of ['Boggle', 'Google', 'Aardvark']) {
87+
await user.type(
88+
screen.getByRole('combobox', { name: /employer/i }),
89+
`${employer}{enter}`
90+
)
91+
}
92+
await user.type(
93+
screen.getByRole('combobox', { name: /employer/i }),
94+
'{delete}'
95+
)
96+
expect(renderedItems(container)).toEqual([
97+
'Aardvark',
98+
'ABC',
99+
'BBC',
100+
'Boggle',
101+
'CBC',
102+
'Google'
103+
])
104+
})
105+
82106
it('shows the expected values in AC', async () => {
83107
const { user } = renderInForm({
84108
employers: [
@@ -120,6 +144,16 @@ describe('EmployerDropDown', () => {
120144
expect(screen.getByText(employer)).toBeInTheDocument()
121145
)
122146
})
147+
148+
/**
149+
* @param {HTMLElement} container
150+
*/
151+
const renderedItems = container => {
152+
const divs = Array.from(container.getElementsByTagName('div'))
153+
return divs
154+
.filter(el => el.getAttribute('aria-disabled') === 'false')
155+
.map(el => el.textContent)
156+
}
123157
})
124158
const renderInForm = ({
125159
employers = [],

0 commit comments

Comments
 (0)