Skip to content

Commit a2235c8

Browse files
[Logs Explorer] Fix Namespace Custom Filter (#192677)
closes #191332 ## 📝 Summary This PR adds a new prop to the [Unified Field List](https://github.com/elastic/kibana/blob/93acc6f7070786879b9e4821d21bcd1a9dbaa403/packages/kbn-unified-field-list/README.md#L5) making it accept `additionalFilters` that applies to the `Available Field List` as well as to the `Field Stats` ## 🎥 Demo https://github.com/user-attachments/assets/f029fd2d-7bec-4a01-985e-2a94ce431f84
1 parent 406f073 commit a2235c8

6 files changed

Lines changed: 36 additions & 3 deletions

File tree

packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { UiCounterMetricType } from '@kbn/analytics';
1414
import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public';
1515
import { Draggable } from '@kbn/dom-drag-drop';
1616
import type { DataView, DataViewField } from '@kbn/data-views-plugin/public';
17+
import { Filter } from '@kbn/es-query';
1718
import type { SearchMode } from '../../types';
1819
import { FieldItemButton, type FieldItemButtonProps } from '../../components/field_item_button';
1920
import {
@@ -200,6 +201,10 @@ export interface UnifiedFieldListItemProps {
200201
* Item size
201202
*/
202203
size: FieldItemButtonProps<DataViewField>['size'];
204+
/**
205+
* Custom filters to apply for the field list, ex: namespace custom filter
206+
*/
207+
additionalFilters?: Filter[];
203208
}
204209

205210
function UnifiedFieldListItemComponent({
@@ -223,6 +228,7 @@ function UnifiedFieldListItemComponent({
223228
groupIndex,
224229
itemIndex,
225230
size,
231+
additionalFilters,
226232
}: UnifiedFieldListItemProps) {
227233
const [infoIsOpen, setOpen] = useState(false);
228234

@@ -288,6 +294,7 @@ function UnifiedFieldListItemComponent({
288294
multiFields={multiFields}
289295
dataView={dataView}
290296
onAddFilter={addFilterAndClosePopover}
297+
additionalFilters={additionalFilters}
291298
/>
292299

293300
{searchMode === 'documents' && multiFields && (

packages/kbn-unified-field-list/src/containers/unified_field_list_item/field_list_item_stats.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ export interface UnifiedFieldListItemStatsProps {
2727
dataView: DataView;
2828
multiFields?: Array<{ field: DataViewField; isSelected: boolean }>;
2929
onAddFilter: FieldStatsProps['onAddFilter'];
30+
additionalFilters?: FieldStatsProps['filters'];
3031
}
3132

3233
export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps> = React.memo(
33-
({ stateService, services, field, dataView, multiFields, onAddFilter }) => {
34+
({ stateService, services, field, dataView, multiFields, onAddFilter, additionalFilters }) => {
3435
const querySubscriberResult = useQuerySubscriber({
3536
data: services.data,
3637
timeRangeUpdatesType: stateService.creationOptions.timeRangeUpdatesType,
@@ -55,6 +56,11 @@ export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps>
5556
[services]
5657
);
5758

59+
const filters = useMemo(
60+
() => [...(querySubscriberResult.filters ?? []), ...(additionalFilters ?? [])],
61+
[querySubscriberResult.filters, additionalFilters]
62+
);
63+
5864
if (!hasQuerySubscriberData(querySubscriberResult)) {
5965
return null;
6066
}
@@ -63,7 +69,7 @@ export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps>
6369
<FieldStats
6470
services={statsServices}
6571
query={querySubscriberResult.query}
66-
filters={querySubscriberResult.filters}
72+
filters={filters}
6773
fromDate={querySubscriberResult.fromDate}
6874
toDate={querySubscriberResult.toDate}
6975
dataViewOrDataViewId={dataView}

packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export type UnifiedFieldListSidebarCustomizableProps = Pick<
5050
| 'onAddFilter'
5151
| 'onAddFieldToWorkspace'
5252
| 'onRemoveFieldFromWorkspace'
53+
| 'additionalFilters'
5354
> & {
5455
/**
5556
* All fields: fields from data view and unmapped fields or columns from text-based search
@@ -168,6 +169,7 @@ export const UnifiedFieldListSidebarComponent: React.FC<UnifiedFieldListSidebarP
168169
onDeleteField,
169170
onToggleSidebar,
170171
additionalFieldGroups,
172+
additionalFilters,
171173
}) => {
172174
const { dataViews, core } = services;
173175
const useNewFieldsApi = useMemo(
@@ -285,6 +287,7 @@ export const UnifiedFieldListSidebarComponent: React.FC<UnifiedFieldListSidebarP
285287
groupName === FieldsGroupNames.SelectedFields ||
286288
Boolean(selectedFieldsState.selectedFieldsMap[field.name])
287289
}
290+
additionalFilters={additionalFilters}
288291
/>
289292
</li>
290293
),
@@ -304,6 +307,7 @@ export const UnifiedFieldListSidebarComponent: React.FC<UnifiedFieldListSidebarP
304307
onDeleteField,
305308
workspaceSelectedFieldNames,
306309
selectedFieldsState.selectedFieldsMap,
310+
additionalFilters,
307311
]
308312
);
309313

packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar_container.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ const UnifiedFieldListSidebarContainer = memo(
117117
prependInFlyout,
118118
variant = 'responsive',
119119
onFieldEdited,
120+
additionalFilters,
120121
} = props;
121122
const [stateService] = useState<UnifiedFieldListSidebarContainerStateService>(
122123
createStateService({ options: getCreationOptions() })
@@ -151,11 +152,16 @@ const UnifiedFieldListSidebarContainer = memo(
151152
const searchMode: SearchMode | undefined = querySubscriberResult.searchMode;
152153
const isAffectedByGlobalFilter = Boolean(querySubscriberResult.filters?.length);
153154

155+
const filters = useMemo(
156+
() => [...(querySubscriberResult.filters ?? []), ...(additionalFilters ?? [])],
157+
[querySubscriberResult.filters, additionalFilters]
158+
);
159+
154160
const { isProcessing, refetchFieldsExistenceInfo } = useExistingFieldsFetcher({
155161
disableAutoFetching: stateService.creationOptions.disableFieldsExistenceAutoFetching,
156162
dataViews: searchMode === 'documents' && dataView ? [dataView] : [],
157163
query: querySubscriberResult.query,
158-
filters: querySubscriberResult.filters,
164+
filters,
159165
fromDate: querySubscriberResult.fromDate,
160166
toDate: querySubscriberResult.toDate,
161167
services,

src/plugins/discover/public/application/main/components/layout/discover_layout.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) {
103103
state.dataView!,
104104
state.isDataViewLoading,
105105
]);
106+
const customFilters = useInternalStateSelector((state) => state.customFilters);
107+
106108
const dataState: DataMainMsg = useDataState(main$);
107109
const savedSearch = useSavedSearchInitial();
108110

@@ -401,6 +403,7 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) {
401403
onFieldEdited={onFieldEdited}
402404
onDataViewCreated={stateContainer.actions.onDataViewCreated}
403405
sidebarToggleState$={sidebarToggleState$}
406+
additionalFilters={customFilters}
404407
/>
405408
}
406409
mainPanel={

src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
FieldsGroupNames,
2424
} from '@kbn/unified-field-list';
2525
import { calcFieldCounts } from '@kbn/discover-utils/src/utils/calc_field_counts';
26+
import { Filter } from '@kbn/es-query';
2627
import { PLUGIN_ID } from '../../../../../common';
2728
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
2829
import { DataDocuments$ } from '../../state_management/discover_data_state_container';
@@ -127,6 +128,10 @@ export interface DiscoverSidebarResponsiveProps {
127128
fieldListVariant?: UnifiedFieldListSidebarContainerProps['variant'];
128129

129130
sidebarToggleState$: BehaviorSubject<SidebarToggleState>;
131+
/**
132+
* Custom filters to apply for the field list, ex: namespace custom filter
133+
*/
134+
additionalFilters?: Filter[];
130135
}
131136

132137
/**
@@ -153,6 +158,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
153158
onAddField,
154159
onRemoveField,
155160
sidebarToggleState$,
161+
additionalFilters,
156162
} = props;
157163
const [sidebarState, dispatchSidebarStateAction] = useReducer(
158164
discoverSidebarReducer,
@@ -383,6 +389,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
383389
onFieldEdited={onFieldEdited}
384390
prependInFlyout={prependDataViewPickerForMobile}
385391
additionalFieldGroups={additionalFieldGroups}
392+
additionalFilters={additionalFilters}
386393
/>
387394
) : null}
388395
</EuiFlexItem>

0 commit comments

Comments
 (0)