diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/VSphereVirtualMachinesList.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/VSphereVirtualMachinesList.tsx index e47b9fee8..71c0d2eea 100644 --- a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/VSphereVirtualMachinesList.tsx +++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/VSphereVirtualMachinesList.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { EnumToTuple, ResourceFieldFactory } from '@kubev2v/common'; import { VSphereVM } from '@kubev2v/types'; -import { concernFilter } from './utils/filters/concernFilter'; +import { concernFilter, hostFilter } from './utils/filters'; import { ProviderVirtualMachinesList, VmData } from './components'; import { ProviderVirtualMachinesProps } from './ProviderVirtualMachines'; import { getVmPowerState, useVSphereInventoryVms } from './utils'; @@ -44,11 +44,8 @@ export const vSphereVmFieldsMetadataFactory: ResourceFieldFactory = (t) => [ label: t('Host'), isVisible: true, isIdentity: false, - filter: { - type: 'freetext', - placeholderLabel: t('Filter by host'), - }, sortable: true, + filter: hostFilter(t), }, { resourceFieldId: 'folder', diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/components/ProviderVirtualMachinesList.tsx b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/components/ProviderVirtualMachinesList.tsx index 2067dd50c..dea8bef07 100644 --- a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/components/ProviderVirtualMachinesList.tsx +++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/components/ProviderVirtualMachinesList.tsx @@ -12,6 +12,7 @@ import { loadUserSettings, ResourceFieldFactory, RowProps, + SearchableEnumFilter, SearchableGroupedEnumFilter, ValueMatcher, } from '@kubev2v/common'; @@ -86,9 +87,10 @@ export const ProviderVirtualMachinesList: FC = userSettings={userSettings} extraSupportedFilters={{ concerns: SearchableGroupedEnumFilter, + host: SearchableEnumFilter, features: EnumFilter, }} - extraSupportedMatchers={[concernsMatcher, featuresMatcher]} + extraSupportedMatchers={[concernsMatcher, hostMatcher, featuresMatcher]} GlobalActionToolbarItems={showActions ? actions : undefined} toId={toId} onSelect={onSelectedIds} @@ -111,3 +113,8 @@ export const featuresMatcher: ValueMatcher = { filterType: 'features', matchValue: (features: { [key: string]: boolean }) => (filter: string) => !!features?.[filter], }; + +export const hostMatcher: ValueMatcher = { + filterType: 'host', + matchValue: (value: string) => (filter: string) => value == filter, +}; diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/hostFilter.ts b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/hostFilter.ts new file mode 100644 index 000000000..780b9daf5 --- /dev/null +++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/hostFilter.ts @@ -0,0 +1,19 @@ +import { EnumValue } from '@kubev2v/common'; + +/** + * This component enables filtering the VMware's virtual machines + * by the hostname that they are running on. + */ +export const hostFilter = (t: (string) => string) => { + return { + type: 'host', + primary: true, + placeholderLabel: t('Host'), + dynamicFilter: (items: { hostName: string }[]) => ({ + values: [ + ...Array.from(new Set(items.map((item) => item.hostName))) // at this point the list contains unique strings that can be used as ID + .map((label: string): EnumValue => ({ id: label, label })), + ], + }), + }; +}; diff --git a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/index.ts b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/index.ts index 20da6e874..035249727 100644 --- a/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/index.ts +++ b/packages/forklift-console-plugin/src/modules/Providers/views/details/tabs/VirtualMachines/utils/filters/index.ts @@ -1,3 +1,4 @@ // @index(['./*', /style/g], f => `export * from '${f.path}';`) export * from './concernFilter'; +export * from './hostFilter'; // @endindex