@@ -40,10 +40,31 @@ export const ComponentsSelection: React.FC<ComponentsSelectionProps> = ({
4040
4141 const selectedComponents = useMemo ( ( ) => getSelectedComponents ( componentsList ) , [ componentsList ] ) ;
4242
43+ const isProvider = useCallback ( ( componentName : string ) => {
44+ return componentName . includes ( 'provider' ) && componentName !== 'crossplane' ;
45+ } , [ ] ) ;
46+
4347 const searchResults = useMemo ( ( ) => {
4448 const lowerSearch = searchTerm . toLowerCase ( ) ;
45- return componentsList . filter ( ( { name } ) => name . toLowerCase ( ) . includes ( lowerSearch ) ) ;
46- } , [ componentsList , searchTerm ] ) ;
49+ const filtered = componentsList . filter ( ( { name } ) => name . toLowerCase ( ) . includes ( lowerSearch ) ) ;
50+
51+ // Sort components: crossplane first, then providers, then rest
52+ return filtered . sort ( ( a , b ) => {
53+ const isCrossplaneA = a . name === 'crossplane' ;
54+ const isCrossplaneB = b . name === 'crossplane' ;
55+
56+ if ( isCrossplaneA && ! isCrossplaneB ) return - 1 ;
57+ if ( isCrossplaneB && ! isCrossplaneA ) return 1 ;
58+
59+ const isProviderA = isProvider ( a . name ) ;
60+ const isProviderB = isProvider ( b . name ) ;
61+
62+ if ( isProviderA && ! isProviderB ) return - 1 ;
63+ if ( isProviderB && ! isProviderA ) return 1 ;
64+
65+ return a . name . localeCompare ( b . name ) ;
66+ } ) ;
67+ } , [ componentsList , searchTerm , isProvider ] ) ;
4768
4869 const handleSelectionChange = useCallback (
4970 ( e : Ui5CustomEvent < CheckBoxDomRef , { checked : boolean } > ) => {
@@ -105,10 +126,12 @@ export const ComponentsSelection: React.FC<ComponentsSelectionProps> = ({
105126 { searchResults . length > 0 ? (
106127 searchResults . map ( ( component ) => {
107128 const providerDisabled = isProviderDisabled ( component ) ;
129+ const isProviderComponent = isProvider ( component . name ) ;
130+
108131 return (
109132 < FlexBox
110133 key = { component . name }
111- className = { styles . row }
134+ className = { ` ${ styles . row } ${ isProviderComponent ? styles . providerRow : '' } ` }
112135 gap = { 10 }
113136 justifyContent = "SpaceBetween"
114137 data-testid = { `component-row-${ component . name } ` }
@@ -120,6 +143,7 @@ export const ComponentsSelection: React.FC<ComponentsSelectionProps> = ({
120143 checked = { component . isSelected }
121144 disabled = { providerDisabled }
122145 aria-label = { component . name }
146+ className = { isProviderComponent ? styles . checkBox : '' }
123147 onChange = { handleSelectionChange }
124148 />
125149 < FlexBox gap = { 10 } justifyContent = "SpaceBetween" alignItems = "Baseline" >
0 commit comments