Skip to content

Commit

Permalink
Fixed issue with duplicated properties from categories
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Sep 2, 2022
1 parent 8ed3fe3 commit c2cb961
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions ui/src/app/admin/component/PropertySelector.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React, { Fragment, useCallback } from 'react';
import { groupBy, orderBy } from 'lodash';
import { groupBy, includes, orderBy } from 'lodash';
import { Highlighter, Menu, MenuItem, Token, Typeahead } from 'react-bootstrap-typeahead';
import Button from 'react-bootstrap/Button';

import { ToggleButton } from '../../form/component/ToggleButton';

export function PropertySelector ({ properties, options, onAddProperties }) {
const [selected, setSelected] = React.useState([]);

const menu = useCallback((results, menuProps, state) => {
let index = 0;
Expand All @@ -14,25 +15,28 @@ export function PropertySelector ({ properties, options, onAddProperties }) {
const items = Object.keys(grouped).sort().map((item, idx) => {
index = index + 1;
const used = grouped[item].filter((i) => properties.some((p) => p.propertyName === i.propertyName));
if (used.length >= grouped[item].length) {
if (used.length >= grouped[item].length || includes(selected, item)) {
return <Fragment key={item}></Fragment>
}
const cat = {category: item, propertyName: item, isCategory: true};
const catSelected = selected.some(s => s.propertyName === item);
return (
<Fragment key={item}>
{index !== 0 && <Menu.Divider />}
<Menu.Header>
<MenuItem key={index}
option={{category: item, propertyName: item, isCategory: true}}
option={cat}
position={index}
className="fw-bold">
className="fw-bold"
disabled={catSelected}>
{item} - Add all
</MenuItem>
</Menu.Header>
{grouped[item].map((i) => {
if (!properties.some((p) => p.propertyName === i.propertyName)) {
index = index + 1;
const item =
<MenuItem key={index} option={i} position={index}>
<MenuItem key={index} option={i} position={index} disabled={catSelected || selected.some(s => s.propertyName === i.propertyName)}>
<Highlighter search={state.text}>
{`- ${i.propertyName}`}
</Highlighter>
Expand All @@ -46,7 +50,7 @@ export function PropertySelector ({ properties, options, onAddProperties }) {
});

return <Menu {...menuProps}>{items}</Menu>;
}, [properties]);
}, [properties, selected]);

const token = (option, { onRemove }, index) => (
<Token
Expand All @@ -61,12 +65,10 @@ export function PropertySelector ({ properties, options, onAddProperties }) {
setSelected(data);
};

const [selected, setSelected] = React.useState([]);

const add = (s) => {
onAddProperties(s);
setSelected([]);
}
};

return (
<Fragment>
Expand Down

0 comments on commit c2cb961

Please sign in to comment.