@stack-spot/ai-chat-widget 2.5.4 → 2.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.5.5](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v2.5.4...ai-chat-widget@v2.5.5) (2025-12-04)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * agents filter ([#424](https://github.com/stack-spot/portal-ai-chat-widget/issues/424)) ([1c15809](https://github.com/stack-spot/portal-ai-chat-widget/commit/1c15809d7b203fbf1f2af93fb508e41fa714adb4))
9
+
3
10
  ## [2.5.4](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v2.5.3...ai-chat-widget@v2.5.4) (2025-12-02)
4
11
 
5
12
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "2.5.4",
4
- "date": "Tue Dec 02 2025 20:19:39 GMT+0000 (Coordinated Universal Time)",
3
+ "version": "2.5.5",
4
+ "date": "Thu Dec 04 2025 14:40:51 GMT+0000 (Coordinated Universal Time)",
5
5
  "dependencies": [
6
6
  {
7
7
  "name": "@stack-spot/app-metadata",
@@ -17,6 +17,9 @@ interface Props<T> {
17
17
  onChange?: (value: T | undefined) => void;
18
18
  fetchNextPage?: () => void;
19
19
  hasNextPage?: boolean;
20
+ filter?: string;
21
+ setFilter?: (value?: string) => void;
22
+ isLoading?: boolean;
20
23
  }
21
24
  /**
22
25
  * Renders a radio group where each option has a label and a description.
@@ -24,6 +27,6 @@ interface Props<T> {
24
27
  *
25
28
  * Also renders a search input.
26
29
  */
27
- export declare function DescribedRadioGroup<T>({ initialValue, options: opt, data, emptyDataset, emptyResults, onChange, fetchNextPage, hasNextPage }: Props<T>): string | number | boolean | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
30
+ export declare function DescribedRadioGroup<T>({ initialValue, options: opt, data, emptyDataset, emptyResults, onChange, fetchNextPage, hasNextPage, filter, setFilter, isLoading }: Props<T>): string | number | boolean | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
28
31
  export {};
29
32
  //# sourceMappingURL=DescribedRadioGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DescribedRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/form/DescribedRadioGroup.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAkB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5D,UAAU,KAAK,CAAC,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb;;;;OAIG;IACH,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAA;KAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChH,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAC7G,aAAa,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,gIAiEvC"}
1
+ {"version":3,"file":"DescribedRadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/form/DescribedRadioGroup.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAkB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5D,UAAU,KAAK,CAAC,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb;;;;OAIG;IACH,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,CAAA;KAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChH,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAQD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAC7G,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,gIAsErE"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { LoadingCircular } from '@citric/ui';
2
3
  import { Icon } from '@stack-spot/citric-icons';
3
- import { Accordion, FieldGroup, ImageBox, Input, RadioGroup, Row, Text, useRadioGroupControls } from '@stack-spot/citric-react';
4
+ import { Accordion, Column, FieldGroup, ImageBox, Input, RadioGroup, Row, Text, useRadioGroupControls } from '@stack-spot/citric-react';
4
5
  import { InfiniteScroll } from '@stack-spot/portal-components/InfiniteScroll';
5
6
  import { isEqual } from 'lodash';
6
7
  import { useEffect, useState } from 'react';
@@ -17,7 +18,7 @@ const StyledDiv = styled.div `
17
18
  *
18
19
  * Also renders a search input.
19
20
  */
20
- export function DescribedRadioGroup({ initialValue, options: opt, data, emptyDataset, emptyResults, onChange, fetchNextPage, hasNextPage }) {
21
+ export function DescribedRadioGroup({ initialValue, options: opt, data, emptyDataset, emptyResults, onChange, fetchNextPage, hasNextPage, filter, setFilter, isLoading }) {
21
22
  const [options, setOptions] = useState(opt);
22
23
  const controls = useRadioGroupControls({
23
24
  initialValue,
@@ -35,26 +36,28 @@ export function DescribedRadioGroup({ initialValue, options: opt, data, emptyDat
35
36
  setOptions(opt);
36
37
  }
37
38
  }, [opt]);
38
- return options?.length ? _jsxs(_Fragment, { children: [_jsxs(FieldGroup, { fullWidth: true, children: [_jsx(Icon, { icon: "Search" }), _jsx(Input, { type: "search", value: controls.filter, onChange: controls.setFilter })] }), _jsx(StyledDiv, { id: "agents-content", children: controls.options.length ?
39
- _jsx(InfiniteScroll, { scrollableTarget: "agents-content", dataLength: controls.options.length, next: fetchNextPage ?? undefined, hasMore: hasNextPage ?? false, children: _jsx(RadioGroup, { options: controls.options, value: controls.value, onChange: controls.setValue, renderKey: controls.renderKey, className: "option-list", renderItem: (radio, o) => {
40
- const item = data(o);
41
- const { idOrSlug, listFavorites, onAddFavorite, onRemoveFavorite } = item;
42
- return (_jsxs(Row, { className: controls.isUnfilteredButChecked(o) ? 'filtered-out' : '', children: [_jsx(ItemContent, { item: item, radio: radio }), onAddFavorite && _jsx(ButtonFavorite, { favorite: {
43
- idOrSlug: idOrSlug,
44
- listFavorites,
45
- onAddFavorite: async (...args) => {
46
- const res = await onAddFavorite(...args);
47
- setOptions([...options]); // forces options re-rendering
48
- return res;
49
- },
50
- onRemoveFavorite: async (...args) => {
51
- const res = await onRemoveFavorite?.(...args);
52
- setOptions([...options]); // forces options re-rendering
53
- return res ?? false;
54
- },
55
- } })] }));
56
- } }) })
57
- : emptyResults })] }) : emptyDataset;
39
+ return (options?.length || isLoading || !!filter) ? _jsxs(_Fragment, { children: [_jsxs(FieldGroup, { fullWidth: true, children: [_jsx(Icon, { icon: "Search" }), _jsx(Input, { type: "search", value: setFilter ? filter : controls.filter, onChange: setFilter ? setFilter : controls.setFilter })] }), isLoading ?
40
+ _jsx(Column, { h: "100%", alignItems: "center", justifyContent: "center", children: _jsx(LoadingCircular, {}) }) :
41
+ _jsx(StyledDiv, { id: "agents-content", children: controls.options.length ?
42
+ _jsx(InfiniteScroll, { scrollableTarget: "agents-content", dataLength: controls.options.length, next: fetchNextPage ?? undefined, hasMore: hasNextPage ?? false, children: _jsx(RadioGroup, { options: controls.options, value: controls.value, onChange: controls.setValue, renderKey: controls.renderKey, className: "option-list", renderItem: (radio, o) => {
43
+ const item = data(o);
44
+ const { idOrSlug, listFavorites, onAddFavorite, onRemoveFavorite } = item;
45
+ return (_jsxs(Row, { className: controls.isUnfilteredButChecked(o) ? 'filtered-out' : '', children: [_jsx(ItemContent, { item: item, radio: radio }), onAddFavorite && _jsx(ButtonFavorite, { favorite: {
46
+ idOrSlug: idOrSlug,
47
+ listFavorites,
48
+ onAddFavorite: async (...args) => {
49
+ const res = await onAddFavorite(...args);
50
+ setOptions([...options]); // forces options re-rendering
51
+ return res;
52
+ },
53
+ onRemoveFavorite: async (...args) => {
54
+ const res = await onRemoveFavorite?.(...args);
55
+ setOptions([...options]); // forces options re-rendering
56
+ return res ?? false;
57
+ },
58
+ } })] }));
59
+ } }) })
60
+ : emptyResults })] }) : emptyDataset;
58
61
  }
59
62
  const ItemContent = ({ item, radio }) => {
60
63
  const [expanded, setExpanded] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"file":"DescribedRadioGroup.js","sourceRoot":"","sources":["../../../src/components/form/DescribedRadioGroup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DescribedRadioGroup.js","sourceRoot":"","sources":["../../../src/components/form/DescribedRadioGroup.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AgentsTab.d.ts","sourceRoot":"","sources":["../../../src/views/Agents/AgentsTab.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA8C,oBAAoB,EAAqB,MAAM,4BAA4B,CAAA;AAQhI,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAKtD,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,SAAS,yDAAiE,aAAa,4CAiEnG,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,aAAa,2CASxF"}
1
+ {"version":3,"file":"AgentsTab.d.ts","sourceRoot":"","sources":["../../../src/views/Agents/AgentsTab.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA8C,oBAAoB,EAAqB,MAAM,4BAA4B,CAAA;AAShI,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAKtD,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,SAAS,yDAAiE,aAAa,4CAoFnG,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,aAAa,2CASxF"}
@@ -3,7 +3,8 @@ import { Icon } from '@stack-spot/citric-icons';
3
3
  import { Button } from '@stack-spot/citric-react';
4
4
  import { Placeholder } from '@stack-spot/portal-components/Placeholder';
5
5
  import { agentToolsClient, workspaceAiClient } from '@stack-spot/portal-network';
6
- import { useMemo, useState } from 'react';
6
+ import { debounce } from 'lodash';
7
+ import { useTransition, useCallback, useMemo, useState } from 'react';
7
8
  import { DescribedRadioGroup } from '../../components/form/DescribedRadioGroup.js';
8
9
  import { WorkspaceTabNavigator } from '../../components/WorkspaceTabNavigator.js';
9
10
  import { useCurrentChat } from '../../context/hooks.js';
@@ -19,10 +20,18 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
19
20
  const [submitEnabled, setSubmitEnabled] = useState(false);
20
21
  const listFavorites = useFavorites();
21
22
  const agentDefault = agentToolsClient.agentDefault.useQuery();
23
+ const [filter, setFilter] = useState();
24
+ const [apiFilter, setApiFilter] = useState();
25
+ const [isPending, startTransition] = useTransition();
26
+ const runOnChange = useCallback(debounce((value) => {
27
+ startTransition(() => {
28
+ setApiFilter(value);
29
+ });
30
+ }, 500), [startTransition]);
22
31
  const data = workspaceAiClient.getAgentFromWorkspaceAi.useStatefulQuery({ workspaceId: workspaceId }, { enabled: !!workspaceId });
23
32
  const workspaceAgents = data?.[0];
24
- const [agentsData = [], { hasNextPage, fetchNextPage }] = agentToolsClient.agentsMultipleFilters.useInfiniteQuery({
25
- filters: { visibility_list: [visibility], page: 1, size: 20 },
33
+ const [agentsData = [], { fetchNextPage, hasNextPage }] = agentToolsClient.agentsMultipleFilters.useInfiniteQuery({
34
+ filters: { visibility_list: [visibility], name: apiFilter, page: 1, size: 20 },
26
35
  }, { enabled: !workspaceId && !!visibility });
27
36
  const agents = workspaceId ? workspaceAgents : agentsData;
28
37
  const initialValue = useMemo(() => {
@@ -38,12 +47,15 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
38
47
  chat.set('agent', agent.current);
39
48
  close();
40
49
  }
41
- return (_jsxs(_Fragment, { children: [_jsx("div", { className: "content", children: _jsx(DescribedRadioGroup, { fetchNextPage: fetchNextPage, hasNextPage: hasNextPage, options: agents, initialValue: initialValue, onChange: (ag) => {
50
+ return _jsxs(_Fragment, { children: [_jsx("div", { className: "content", children: _jsx(DescribedRadioGroup, { fetchNextPage: fetchNextPage, hasNextPage: hasNextPage, options: agents, initialValue: initialValue, filter: filter, setFilter: (value) => {
51
+ setFilter(value);
52
+ runOnChange(value);
53
+ }, onChange: (ag) => {
42
54
  agent.current = ag
43
55
  ? { ...ag, label: ag.name, image: ag.avatar, slug: ag.slug, builtIn: ag.visibility_level === 'built_in' }
44
56
  : undefined;
45
57
  setSubmitEnabled(true);
46
- }, data: ag => ({
58
+ }, isLoading: isPending, data: ag => ({
47
59
  idOrSlug: ag.id,
48
60
  image: ag.avatar ? _jsx("img", { src: ag.avatar }) : _jsx(Icon, { icon: "Agent" }),
49
61
  description: _jsx(AgentDescription, { agentId: ag.id }),
@@ -51,7 +63,7 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
51
63
  listFavorites,
52
64
  onAddFavorite,
53
65
  onRemoveFavorite,
54
- }), emptyResults: _jsx(Placeholder, { title: t.noSearchResults, description: t.noSearchResultsDescription, className: "no-data-placeholder" }), emptyDataset: _jsx(Placeholder, { title: t.noData, description: t.noDataDescription }) }) }), !!agents?.length && showSubmitButton && _jsx(Button, { onClick: submit, disabled: !submitEnabled, children: t.apply })] }));
66
+ }), emptyResults: _jsx(Placeholder, { title: t.noSearchResults, description: t.noSearchResultsDescription, className: "no-data-placeholder" }), emptyDataset: _jsx(Placeholder, { title: t.noData, description: t.noDataDescription }) }) }), !!agents?.length && showSubmitButton && _jsx(Button, { onClick: submit, disabled: !submitEnabled, children: t.apply })] });
55
67
  };
56
68
  export function AgentsTabWorkspace({ agent, visibility, showSubmitButton }) {
57
69
  const workspaceTabComponents = useMemo(() => ({ agent: AgentsTab }), [agent]);
@@ -1 +1 @@
1
- {"version":3,"file":"AgentsTab.js","sourceRoot":"","sources":["../../../src/views/Agents/AgentsTab.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentsTab.js","sourceRoot":"","sources":["../../../src/views/Agents/AgentsTab.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "2.5.4",
3
+ "version": "2.5.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "2.5.4",
4
- "date": "Tue Dec 02 2025 20:19:39 GMT+0000 (Coordinated Universal Time)",
3
+ "version": "2.5.5",
4
+ "date": "Thu Dec 04 2025 14:40:51 GMT+0000 (Coordinated Universal Time)",
5
5
  "dependencies": [
6
6
  {
7
7
  "name": "@stack-spot/app-metadata",
@@ -1,5 +1,6 @@
1
+ import { LoadingCircular } from '@citric/ui'
1
2
  import { Icon } from '@stack-spot/citric-icons'
2
- import { Accordion, FieldGroup, ImageBox, Input, RadioGroup, Row, Text, useRadioGroupControls } from '@stack-spot/citric-react'
3
+ import { Accordion, Column, FieldGroup, ImageBox, Input, RadioGroup, Row, Text, useRadioGroupControls } from '@stack-spot/citric-react'
3
4
  import { InfiniteScroll } from '@stack-spot/portal-components/InfiniteScroll'
4
5
  import { isEqual } from 'lodash'
5
6
  import { useEffect, useState } from 'react'
@@ -20,6 +21,9 @@ interface Props<T> {
20
21
  onChange?: (value: T | undefined) => void,
21
22
  fetchNextPage?: () => void,
22
23
  hasNextPage?: boolean,
24
+ filter?: string,
25
+ setFilter?: (value?: string) => void,
26
+ isLoading?: boolean,
23
27
  }
24
28
 
25
29
  const StyledDiv = styled.div`
@@ -35,7 +39,7 @@ const StyledDiv = styled.div`
35
39
  * Also renders a search input.
36
40
  */
37
41
  export function DescribedRadioGroup<T>({ initialValue, options: opt, data, emptyDataset, emptyResults, onChange,
38
- fetchNextPage, hasNextPage }: Props<T>) {
42
+ fetchNextPage, hasNextPage, filter, setFilter, isLoading }: Props<T>) {
39
43
  const [options, setOptions] = useState(opt)
40
44
  const controls = useRadioGroupControls({
41
45
  initialValue,
@@ -55,50 +59,55 @@ export function DescribedRadioGroup<T>({ initialValue, options: opt, data, empty
55
59
  }
56
60
  }, [opt])
57
61
 
58
- return options?.length ? <>
62
+ return (options?.length || isLoading || !!filter) ? <>
59
63
  <FieldGroup fullWidth>
60
64
  <Icon icon="Search" />
61
- <Input type="search" value={controls.filter} onChange={controls.setFilter} />
65
+ <Input type="search" value={setFilter ? filter : controls.filter} onChange={setFilter ? setFilter : controls.setFilter} />
62
66
  </FieldGroup>
63
- <StyledDiv id="agents-content">
64
- {controls.options.length ?
65
- <InfiniteScroll scrollableTarget="agents-content"
66
- dataLength={controls.options.length}
67
- next={fetchNextPage as any ?? undefined}
68
- hasMore={hasNextPage ?? false}>
69
- <RadioGroup
70
- options={controls.options}
71
- value={controls.value}
72
- onChange={controls.setValue}
73
- renderKey={controls.renderKey}
74
- className="option-list"
75
- renderItem={(radio, o) => {
76
- const item = data(o)
77
- const { idOrSlug, listFavorites, onAddFavorite, onRemoveFavorite } = item
78
- return (
79
- <Row className={controls.isUnfilteredButChecked(o) ? 'filtered-out' : ''}>
80
- <ItemContent item={item} radio={radio} />
81
- {onAddFavorite && <ButtonFavorite favorite={{
82
- idOrSlug: idOrSlug,
83
- listFavorites,
84
- onAddFavorite: async (...args) => {
85
- const res = await onAddFavorite(...args)
86
- setOptions([...options]) // forces options re-rendering
87
- return res
88
- },
89
- onRemoveFavorite: async (...args) => {
90
- const res = await onRemoveFavorite?.(...args)
91
- setOptions([...options]) // forces options re-rendering
92
- return res ?? false
93
- },
94
- }} />}
95
- </Row>
96
- )}
97
- }
98
- />
99
- </InfiniteScroll>
100
- : emptyResults}
101
- </StyledDiv>
67
+ {isLoading ?
68
+ <Column h="100%" alignItems="center" justifyContent="center">
69
+ <LoadingCircular/>
70
+ </Column> :
71
+ <StyledDiv id="agents-content">
72
+ {controls.options.length ?
73
+ <InfiniteScroll scrollableTarget="agents-content"
74
+ dataLength={controls.options.length}
75
+ next={fetchNextPage as any ?? undefined}
76
+ hasMore={hasNextPage ?? false}>
77
+ <RadioGroup
78
+ options={controls.options}
79
+ value={controls.value}
80
+ onChange={controls.setValue}
81
+ renderKey={controls.renderKey}
82
+ className="option-list"
83
+ renderItem={(radio, o) => {
84
+ const item = data(o)
85
+ const { idOrSlug, listFavorites, onAddFavorite, onRemoveFavorite } = item
86
+ return (
87
+ <Row className={controls.isUnfilteredButChecked(o) ? 'filtered-out' : ''}>
88
+ <ItemContent item={item} radio={radio} />
89
+ {onAddFavorite && <ButtonFavorite favorite={{
90
+ idOrSlug: idOrSlug,
91
+ listFavorites,
92
+ onAddFavorite: async (...args) => {
93
+ const res = await onAddFavorite(...args)
94
+ setOptions([...options]) // forces options re-rendering
95
+ return res
96
+ },
97
+ onRemoveFavorite: async (...args) => {
98
+ const res = await onRemoveFavorite?.(...args)
99
+ setOptions([...options]) // forces options re-rendering
100
+ return res ?? false
101
+ },
102
+ }} />}
103
+ </Row>
104
+ )}
105
+ }
106
+ />
107
+ </InfiniteScroll>
108
+ : emptyResults}
109
+ </StyledDiv> }
110
+
102
111
  </> : emptyDataset
103
112
  }
104
113
 
@@ -3,7 +3,8 @@ import { Button } from '@stack-spot/citric-react'
3
3
  import { Placeholder } from '@stack-spot/portal-components/Placeholder'
4
4
  import { AgentResponseWithBuiltIn, agentToolsClient, AgentVisibilityLevel, workspaceAiClient } from '@stack-spot/portal-network'
5
5
  import { WorkspaceResponse } from '@stack-spot/portal-network/api/workspace-ai'
6
- import { useMemo, useState } from 'react'
6
+ import { debounce } from 'lodash'
7
+ import { useTransition, useCallback, useMemo, useState } from 'react'
7
8
  import { NavigationComponent } from '../../components/ComponentNavigator'
8
9
  import { DescribedRadioGroup } from '../../components/form/DescribedRadioGroup'
9
10
  import { WorkspaceTabNavigator } from '../../components/WorkspaceTabNavigator'
@@ -29,14 +30,28 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
29
30
  const [submitEnabled, setSubmitEnabled] = useState(false)
30
31
  const listFavorites = useFavorites()
31
32
  const agentDefault = agentToolsClient.agentDefault.useQuery()
33
+
34
+ const [filter, setFilter] = useState<string | undefined>()
35
+ const [apiFilter, setApiFilter] = useState<string | undefined>()
36
+ const [isPending, startTransition] = useTransition()
37
+
38
+ const runOnChange = useCallback(
39
+ debounce((value?: string) => {
40
+ startTransition(() => {
41
+ setApiFilter(value)
42
+ })
43
+ }, 500),
44
+ [startTransition],
45
+ )
46
+
32
47
  const data = workspaceAiClient.getAgentFromWorkspaceAi.useStatefulQuery({ workspaceId: workspaceId! },
33
48
  { enabled: !!workspaceId })
34
49
  const workspaceAgents = data?.[0] as AgentResponseWithBuiltIn[]
35
- const [agentsData=[], { hasNextPage, fetchNextPage }] =
36
- agentToolsClient.agentsMultipleFilters.useInfiniteQuery({
37
- filters: { visibility_list: [visibility!], page: 1, size: 20 },
38
- }, { enabled: !workspaceId && !!visibility })
39
50
 
51
+ const [agentsData=[], { fetchNextPage, hasNextPage }] = agentToolsClient.agentsMultipleFilters.useInfiniteQuery({
52
+ filters: { visibility_list: [visibility!], name: apiFilter, page: 1, size: 20 },
53
+ }, { enabled: !workspaceId && !!visibility })
54
+
40
55
  const agents = workspaceId ? workspaceAgents : agentsData
41
56
 
42
57
  const initialValue = useMemo<AgentResponseWithBuiltIn | undefined>(
@@ -55,19 +70,25 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
55
70
  close()
56
71
  }
57
72
 
58
- return (<>
73
+ return <>
59
74
  <div className="content">
60
75
  <DescribedRadioGroup
61
76
  fetchNextPage={fetchNextPage}
62
77
  hasNextPage={hasNextPage}
63
78
  options={agents}
64
79
  initialValue={initialValue}
80
+ filter={filter}
81
+ setFilter={(value?: string) => {
82
+ setFilter(value)
83
+ runOnChange(value)
84
+ }}
65
85
  onChange={(ag) => {
66
86
  agent.current = ag
67
87
  ? { ...ag, label: ag.name, image: ag.avatar!, slug: ag.slug, builtIn: ag.visibility_level === 'built_in' }
68
88
  : undefined
69
89
  setSubmitEnabled(true)
70
90
  }}
91
+ isLoading={isPending}
71
92
  data={ag => ({
72
93
  idOrSlug: ag.id,
73
94
  image: ag.avatar ? <img src={ag.avatar} /> : <Icon icon="Agent" />,
@@ -85,7 +106,6 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
85
106
  </div>
86
107
  {!!agents?.length && showSubmitButton && <Button onClick={submit} disabled={!submitEnabled}>{t.apply}</Button>}
87
108
  </>
88
- )
89
109
  }
90
110
 
91
111
  export function AgentsTabWorkspace({ agent, visibility, showSubmitButton }: AgentTabProps) {