mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Logs Explorer] Fix Namespace Custom Filter (#192677)
closes https://github.com/elastic/kibana/issues/191332
## 📝 Summary
This PR adds a new prop to the [Unified Field
List](93acc6f707/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
This commit is contained in:
parent
406f07386c
commit
a2235c8593
6 changed files with 36 additions and 3 deletions
|
@ -14,6 +14,7 @@ import { UiCounterMetricType } from '@kbn/analytics';
|
|||
import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public';
|
||||
import { Draggable } from '@kbn/dom-drag-drop';
|
||||
import type { DataView, DataViewField } from '@kbn/data-views-plugin/public';
|
||||
import { Filter } from '@kbn/es-query';
|
||||
import type { SearchMode } from '../../types';
|
||||
import { FieldItemButton, type FieldItemButtonProps } from '../../components/field_item_button';
|
||||
import {
|
||||
|
@ -200,6 +201,10 @@ export interface UnifiedFieldListItemProps {
|
|||
* Item size
|
||||
*/
|
||||
size: FieldItemButtonProps<DataViewField>['size'];
|
||||
/**
|
||||
* Custom filters to apply for the field list, ex: namespace custom filter
|
||||
*/
|
||||
additionalFilters?: Filter[];
|
||||
}
|
||||
|
||||
function UnifiedFieldListItemComponent({
|
||||
|
@ -223,6 +228,7 @@ function UnifiedFieldListItemComponent({
|
|||
groupIndex,
|
||||
itemIndex,
|
||||
size,
|
||||
additionalFilters,
|
||||
}: UnifiedFieldListItemProps) {
|
||||
const [infoIsOpen, setOpen] = useState(false);
|
||||
|
||||
|
@ -288,6 +294,7 @@ function UnifiedFieldListItemComponent({
|
|||
multiFields={multiFields}
|
||||
dataView={dataView}
|
||||
onAddFilter={addFilterAndClosePopover}
|
||||
additionalFilters={additionalFilters}
|
||||
/>
|
||||
|
||||
{searchMode === 'documents' && multiFields && (
|
||||
|
|
|
@ -27,10 +27,11 @@ export interface UnifiedFieldListItemStatsProps {
|
|||
dataView: DataView;
|
||||
multiFields?: Array<{ field: DataViewField; isSelected: boolean }>;
|
||||
onAddFilter: FieldStatsProps['onAddFilter'];
|
||||
additionalFilters?: FieldStatsProps['filters'];
|
||||
}
|
||||
|
||||
export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps> = React.memo(
|
||||
({ stateService, services, field, dataView, multiFields, onAddFilter }) => {
|
||||
({ stateService, services, field, dataView, multiFields, onAddFilter, additionalFilters }) => {
|
||||
const querySubscriberResult = useQuerySubscriber({
|
||||
data: services.data,
|
||||
timeRangeUpdatesType: stateService.creationOptions.timeRangeUpdatesType,
|
||||
|
@ -55,6 +56,11 @@ export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps>
|
|||
[services]
|
||||
);
|
||||
|
||||
const filters = useMemo(
|
||||
() => [...(querySubscriberResult.filters ?? []), ...(additionalFilters ?? [])],
|
||||
[querySubscriberResult.filters, additionalFilters]
|
||||
);
|
||||
|
||||
if (!hasQuerySubscriberData(querySubscriberResult)) {
|
||||
return null;
|
||||
}
|
||||
|
@ -63,7 +69,7 @@ export const UnifiedFieldListItemStats: React.FC<UnifiedFieldListItemStatsProps>
|
|||
<FieldStats
|
||||
services={statsServices}
|
||||
query={querySubscriberResult.query}
|
||||
filters={querySubscriberResult.filters}
|
||||
filters={filters}
|
||||
fromDate={querySubscriberResult.fromDate}
|
||||
toDate={querySubscriberResult.toDate}
|
||||
dataViewOrDataViewId={dataView}
|
||||
|
|
|
@ -50,6 +50,7 @@ export type UnifiedFieldListSidebarCustomizableProps = Pick<
|
|||
| 'onAddFilter'
|
||||
| 'onAddFieldToWorkspace'
|
||||
| 'onRemoveFieldFromWorkspace'
|
||||
| 'additionalFilters'
|
||||
> & {
|
||||
/**
|
||||
* 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
|
|||
onDeleteField,
|
||||
onToggleSidebar,
|
||||
additionalFieldGroups,
|
||||
additionalFilters,
|
||||
}) => {
|
||||
const { dataViews, core } = services;
|
||||
const useNewFieldsApi = useMemo(
|
||||
|
@ -285,6 +287,7 @@ export const UnifiedFieldListSidebarComponent: React.FC<UnifiedFieldListSidebarP
|
|||
groupName === FieldsGroupNames.SelectedFields ||
|
||||
Boolean(selectedFieldsState.selectedFieldsMap[field.name])
|
||||
}
|
||||
additionalFilters={additionalFilters}
|
||||
/>
|
||||
</li>
|
||||
),
|
||||
|
@ -304,6 +307,7 @@ export const UnifiedFieldListSidebarComponent: React.FC<UnifiedFieldListSidebarP
|
|||
onDeleteField,
|
||||
workspaceSelectedFieldNames,
|
||||
selectedFieldsState.selectedFieldsMap,
|
||||
additionalFilters,
|
||||
]
|
||||
);
|
||||
|
||||
|
|
|
@ -117,6 +117,7 @@ const UnifiedFieldListSidebarContainer = memo(
|
|||
prependInFlyout,
|
||||
variant = 'responsive',
|
||||
onFieldEdited,
|
||||
additionalFilters,
|
||||
} = props;
|
||||
const [stateService] = useState<UnifiedFieldListSidebarContainerStateService>(
|
||||
createStateService({ options: getCreationOptions() })
|
||||
|
@ -151,11 +152,16 @@ const UnifiedFieldListSidebarContainer = memo(
|
|||
const searchMode: SearchMode | undefined = querySubscriberResult.searchMode;
|
||||
const isAffectedByGlobalFilter = Boolean(querySubscriberResult.filters?.length);
|
||||
|
||||
const filters = useMemo(
|
||||
() => [...(querySubscriberResult.filters ?? []), ...(additionalFilters ?? [])],
|
||||
[querySubscriberResult.filters, additionalFilters]
|
||||
);
|
||||
|
||||
const { isProcessing, refetchFieldsExistenceInfo } = useExistingFieldsFetcher({
|
||||
disableAutoFetching: stateService.creationOptions.disableFieldsExistenceAutoFetching,
|
||||
dataViews: searchMode === 'documents' && dataView ? [dataView] : [],
|
||||
query: querySubscriberResult.query,
|
||||
filters: querySubscriberResult.filters,
|
||||
filters,
|
||||
fromDate: querySubscriberResult.fromDate,
|
||||
toDate: querySubscriberResult.toDate,
|
||||
services,
|
||||
|
|
|
@ -103,6 +103,8 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) {
|
|||
state.dataView!,
|
||||
state.isDataViewLoading,
|
||||
]);
|
||||
const customFilters = useInternalStateSelector((state) => state.customFilters);
|
||||
|
||||
const dataState: DataMainMsg = useDataState(main$);
|
||||
const savedSearch = useSavedSearchInitial();
|
||||
|
||||
|
@ -401,6 +403,7 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) {
|
|||
onFieldEdited={onFieldEdited}
|
||||
onDataViewCreated={stateContainer.actions.onDataViewCreated}
|
||||
sidebarToggleState$={sidebarToggleState$}
|
||||
additionalFilters={customFilters}
|
||||
/>
|
||||
}
|
||||
mainPanel={
|
||||
|
|
|
@ -23,6 +23,7 @@ import {
|
|||
FieldsGroupNames,
|
||||
} from '@kbn/unified-field-list';
|
||||
import { calcFieldCounts } from '@kbn/discover-utils/src/utils/calc_field_counts';
|
||||
import { Filter } from '@kbn/es-query';
|
||||
import { PLUGIN_ID } from '../../../../../common';
|
||||
import { useDiscoverServices } from '../../../../hooks/use_discover_services';
|
||||
import { DataDocuments$ } from '../../state_management/discover_data_state_container';
|
||||
|
@ -127,6 +128,10 @@ export interface DiscoverSidebarResponsiveProps {
|
|||
fieldListVariant?: UnifiedFieldListSidebarContainerProps['variant'];
|
||||
|
||||
sidebarToggleState$: BehaviorSubject<SidebarToggleState>;
|
||||
/**
|
||||
* Custom filters to apply for the field list, ex: namespace custom filter
|
||||
*/
|
||||
additionalFilters?: Filter[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -153,6 +158,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
|
|||
onAddField,
|
||||
onRemoveField,
|
||||
sidebarToggleState$,
|
||||
additionalFilters,
|
||||
} = props;
|
||||
const [sidebarState, dispatchSidebarStateAction] = useReducer(
|
||||
discoverSidebarReducer,
|
||||
|
@ -383,6 +389,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps)
|
|||
onFieldEdited={onFieldEdited}
|
||||
prependInFlyout={prependDataViewPickerForMobile}
|
||||
additionalFieldGroups={additionalFieldGroups}
|
||||
additionalFilters={additionalFilters}
|
||||
/>
|
||||
) : null}
|
||||
</EuiFlexItem>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue