This is an automated email from the ASF dual-hosted git repository.

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git

commit 25774912714994c199c1c6f7b850c81a607e56e5
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Tue Oct 29 14:25:36 2024 -0400

    Selector Performance
---
 .../src/main/webui/src/designer/selector/DslSelector.tsx | 16 ++++++++++++++--
 karavan-designer/src/designer/selector/DslSelector.tsx   | 16 ++++++++++++++--
 karavan-space/src/designer/selector/DslSelector.tsx      | 16 ++++++++++++++--
 3 files changed, 42 insertions(+), 6 deletions(-)

diff --git a/karavan-app/src/main/webui/src/designer/selector/DslSelector.tsx 
b/karavan-app/src/main/webui/src/designer/selector/DslSelector.tsx
index 2aaf32cc..c11e9b2f 100644
--- a/karavan-app/src/main/webui/src/designer/selector/DslSelector.tsx
+++ b/karavan-app/src/main/webui/src/designer/selector/DslSelector.tsx
@@ -26,7 +26,7 @@ import {
     TextInputGroup,
     TextInputGroupUtilities, TextVariants, Text,
     ToggleGroup,
-    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton
+    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton, Bullseye, Card
 } from '@patternfly/react-core';
 import './DslSelector.css';
 import {CamelUi} from "../utils/CamelUi";
@@ -65,11 +65,13 @@ export function DslSelector(props: Props) {
     const [elements, setElements] = useState<DslMetaModel[]>([]);
     const [preferredElements, setPreferredElements] = useState<string[]>([]);
     const [ready, setReady] = useState<boolean>(false);
+    const [pageSize, setPageSize] = useState<number>(100);
 
     useEffect(() => {
         setAllElements();
         setPreferences();
         setReady(true);
+        setPageSize(100);
     }, []);
 
     function setAllElements() {
@@ -246,6 +248,9 @@ export function DslSelector(props: Props) {
     const cCount = filteredElements.filter(e => e.navigation === 
'component').length;
     const kCount = filteredElements.filter(e => e.navigation === 
'kamelet').length;
 
+    const fElementCount = filteredElements.length;
+    const moreElements = fElementCount > pageSize ? fElementCount - pageSize : 
0;
+
     const fastElements: DslMetaModel[] = elements
         .filter((d: DslMetaModel) => {
             if (selectedToggles.includes('eip') && d.navigation === 'eip') {
@@ -282,9 +287,16 @@ export function DslSelector(props: Props) {
                     )}
                 </Gallery>
                 <Gallery key={"gallery"} hasGutter className="dsl-gallery" 
minWidths={{default: '200px'}}>
-                    {showSelector && filteredElements.map((dsl: DslMetaModel, 
index: number) =>
+                    {showSelector && filteredElements.slice(0, 
pageSize).map((dsl: DslMetaModel, index: number) =>
                         <DslCard dsl={dsl} index={index} 
onDslSelect={selectDsl}/>
                     )}
+                    {moreElements > 0 &&
+                        <Card isCompact isPlain isFlat isRounded 
style={{minHeight: '140px'}}>
+                            <Bullseye>
+                                <Button variant='link' onClick={_ => 
setPageSize(pageSize + 10)}>{`${moreElements} more`}</Button>
+                            </Bullseye>
+                        </Card>
+                    }
                 </Gallery>
             </PageSection>
         </Modal>
diff --git a/karavan-designer/src/designer/selector/DslSelector.tsx 
b/karavan-designer/src/designer/selector/DslSelector.tsx
index 2aaf32cc..c11e9b2f 100644
--- a/karavan-designer/src/designer/selector/DslSelector.tsx
+++ b/karavan-designer/src/designer/selector/DslSelector.tsx
@@ -26,7 +26,7 @@ import {
     TextInputGroup,
     TextInputGroupUtilities, TextVariants, Text,
     ToggleGroup,
-    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton
+    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton, Bullseye, Card
 } from '@patternfly/react-core';
 import './DslSelector.css';
 import {CamelUi} from "../utils/CamelUi";
@@ -65,11 +65,13 @@ export function DslSelector(props: Props) {
     const [elements, setElements] = useState<DslMetaModel[]>([]);
     const [preferredElements, setPreferredElements] = useState<string[]>([]);
     const [ready, setReady] = useState<boolean>(false);
+    const [pageSize, setPageSize] = useState<number>(100);
 
     useEffect(() => {
         setAllElements();
         setPreferences();
         setReady(true);
+        setPageSize(100);
     }, []);
 
     function setAllElements() {
@@ -246,6 +248,9 @@ export function DslSelector(props: Props) {
     const cCount = filteredElements.filter(e => e.navigation === 
'component').length;
     const kCount = filteredElements.filter(e => e.navigation === 
'kamelet').length;
 
+    const fElementCount = filteredElements.length;
+    const moreElements = fElementCount > pageSize ? fElementCount - pageSize : 
0;
+
     const fastElements: DslMetaModel[] = elements
         .filter((d: DslMetaModel) => {
             if (selectedToggles.includes('eip') && d.navigation === 'eip') {
@@ -282,9 +287,16 @@ export function DslSelector(props: Props) {
                     )}
                 </Gallery>
                 <Gallery key={"gallery"} hasGutter className="dsl-gallery" 
minWidths={{default: '200px'}}>
-                    {showSelector && filteredElements.map((dsl: DslMetaModel, 
index: number) =>
+                    {showSelector && filteredElements.slice(0, 
pageSize).map((dsl: DslMetaModel, index: number) =>
                         <DslCard dsl={dsl} index={index} 
onDslSelect={selectDsl}/>
                     )}
+                    {moreElements > 0 &&
+                        <Card isCompact isPlain isFlat isRounded 
style={{minHeight: '140px'}}>
+                            <Bullseye>
+                                <Button variant='link' onClick={_ => 
setPageSize(pageSize + 10)}>{`${moreElements} more`}</Button>
+                            </Bullseye>
+                        </Card>
+                    }
                 </Gallery>
             </PageSection>
         </Modal>
diff --git a/karavan-space/src/designer/selector/DslSelector.tsx 
b/karavan-space/src/designer/selector/DslSelector.tsx
index 2aaf32cc..c11e9b2f 100644
--- a/karavan-space/src/designer/selector/DslSelector.tsx
+++ b/karavan-space/src/designer/selector/DslSelector.tsx
@@ -26,7 +26,7 @@ import {
     TextInputGroup,
     TextInputGroupUtilities, TextVariants, Text,
     ToggleGroup,
-    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton
+    ToggleGroupItem, TextContent, Badge, TextInput, Skeleton, Bullseye, Card
 } from '@patternfly/react-core';
 import './DslSelector.css';
 import {CamelUi} from "../utils/CamelUi";
@@ -65,11 +65,13 @@ export function DslSelector(props: Props) {
     const [elements, setElements] = useState<DslMetaModel[]>([]);
     const [preferredElements, setPreferredElements] = useState<string[]>([]);
     const [ready, setReady] = useState<boolean>(false);
+    const [pageSize, setPageSize] = useState<number>(100);
 
     useEffect(() => {
         setAllElements();
         setPreferences();
         setReady(true);
+        setPageSize(100);
     }, []);
 
     function setAllElements() {
@@ -246,6 +248,9 @@ export function DslSelector(props: Props) {
     const cCount = filteredElements.filter(e => e.navigation === 
'component').length;
     const kCount = filteredElements.filter(e => e.navigation === 
'kamelet').length;
 
+    const fElementCount = filteredElements.length;
+    const moreElements = fElementCount > pageSize ? fElementCount - pageSize : 
0;
+
     const fastElements: DslMetaModel[] = elements
         .filter((d: DslMetaModel) => {
             if (selectedToggles.includes('eip') && d.navigation === 'eip') {
@@ -282,9 +287,16 @@ export function DslSelector(props: Props) {
                     )}
                 </Gallery>
                 <Gallery key={"gallery"} hasGutter className="dsl-gallery" 
minWidths={{default: '200px'}}>
-                    {showSelector && filteredElements.map((dsl: DslMetaModel, 
index: number) =>
+                    {showSelector && filteredElements.slice(0, 
pageSize).map((dsl: DslMetaModel, index: number) =>
                         <DslCard dsl={dsl} index={index} 
onDslSelect={selectDsl}/>
                     )}
+                    {moreElements > 0 &&
+                        <Card isCompact isPlain isFlat isRounded 
style={{minHeight: '140px'}}>
+                            <Bullseye>
+                                <Button variant='link' onClick={_ => 
setPageSize(pageSize + 10)}>{`${moreElements} more`}</Button>
+                            </Bullseye>
+                        </Card>
+                    }
                 </Gallery>
             </PageSection>
         </Modal>

Reply via email to