Skip to content
This repository has been archived by the owner on Jan 16, 2024. It is now read-only.

Commit

Permalink
FullHierarchy search enhancement (#403).
Browse files Browse the repository at this point in the history
  • Loading branch information
Моргунов Андрей Александрович committed Aug 17, 2020
1 parent 87141e5 commit f2cbd3a
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/components/FilterPopup/FilterPopup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,10 @@ export const FilterPopup: React.FC<FilterPopupProps> = (props) => {
} else {
dispatch($do.bcAddFilter({ bcName: widget.bcName, filter: newFilter }))
}
dispatch($do.bcForceUpdate({ bcName: widget.bcName }))
// FullHierarchy has its own implementation of data search without backend query filtered data
if (!widget.options.hierarchyFull) {
dispatch($do.bcForceUpdate({ bcName: widget.bcName }))
}
props.onApply?.()
}

Expand Down
7 changes: 6 additions & 1 deletion src/components/FullHierarchyTable/FullHierarchyTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,12 @@ export const FullHierarchyTable: React.FunctionComponent<FullHierarchyTableAllPr
[FilterType.contains, FilterType.equals].includes(filter.type)),
[props.bcFilters]
)
const [filteredData, searchedAncestorsKeys] = useHierarchyCache(props.meta.name, textFilters, props.data, props.depth)
const [filteredData, searchedAncestorsKeys] = useHierarchyCache(
props.meta.name,
textFilters,
props.data,
props.depth,
props.meta.options.hierarchyDisableDescendants)

const data = (props?.nestedData?.length > 0 && depthLevel > 1)
? props.nestedData
Expand Down
12 changes: 10 additions & 2 deletions src/components/FullHierarchyTable/utils/useHierarchyCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,15 @@ const descendantsKeysCache = new HierarchySearchCache()
* @param filters Filters (only text fields supported)
* @param data Records
* @param depthLevel Level of the hierarchy for which hook is called
* @param hierarchyDisableDescendants Disable searched item descendants in fullHierarchy search
*/
export function useHierarchyCache(widgetName: string, filters: BcFilter[], data: FullHierarchyDataItem[], depthLevel: number) {
export function useHierarchyCache(
widgetName: string,
filters: BcFilter[],
data: FullHierarchyDataItem[],
depthLevel: number,
hierarchyDisableDescendants?: boolean) {

React.useEffect(() => {
const clearSearchCache = () => {
if (depthLevel === 1) {
Expand Down Expand Up @@ -61,7 +68,8 @@ export function useHierarchyCache(widgetName: string, filters: BcFilter[], data:

const filteredData = React.useMemo(() => {
return filters?.length
? data.filter(item => searchedAncestorsKeys.has(item.id) || searchedDescendantsKeys.has(item.id))
? data.filter(item => searchedAncestorsKeys.has(item.id)
|| !hierarchyDisableDescendants && searchedDescendantsKeys.has(item.id))
: data
}, [searchedAncestorsKeys, searchedDescendantsKeys, data, filters])
return [filteredData, searchedAncestorsKeys, searchedDescendantsKeys] as const
Expand Down
4 changes: 4 additions & 0 deletions src/interfaces/widget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ export interface WidgetOptions {
hierarchyRadio?: boolean,
hierarchyRadioAll?: boolean,
hierarchyDisableRoot?: boolean,
/**
* Disable searched item descendants in fullHierarchy search
*/
hierarchyDisableDescendants?: boolean,
hierarchyDisableParent?: boolean,
actionGroups?: WidgetOperations,
readOnly?: boolean,
Expand Down

0 comments on commit f2cbd3a

Please sign in to comment.