@gooddata/sdk-ui-gen-ai 11.53.0-alpha.5 → 11.53.0-alpha.6

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.
Files changed (34) hide show
  1. package/esm/components/ConfigContext.d.ts.map +1 -1
  2. package/esm/components/ConfigContext.js +8 -15
  3. package/esm/components/GenAIChat.d.ts.map +1 -1
  4. package/esm/components/GenAIChat.js +3 -4
  5. package/esm/components/GenAiChatContextChooser.d.ts.map +1 -1
  6. package/esm/components/GenAiChatContextChooser.js +4 -3
  7. package/esm/components/GenAiChatContextChooserBody.d.ts +3 -1
  8. package/esm/components/GenAiChatContextChooserBody.d.ts.map +1 -1
  9. package/esm/components/GenAiChatContextChooserBody.js +19 -20
  10. package/esm/components/GenAiStore.d.ts.map +1 -1
  11. package/esm/components/GenAiStore.js +18 -2
  12. package/esm/components/hooks/useContextItems.d.ts +2 -0
  13. package/esm/components/hooks/useContextItems.d.ts.map +1 -1
  14. package/esm/components/hooks/useContextItems.js +25 -7
  15. package/esm/store/chatWindow/chatWindowSelectors.d.ts +1 -0
  16. package/esm/store/chatWindow/chatWindowSelectors.d.ts.map +1 -1
  17. package/esm/store/chatWindow/chatWindowSelectors.js +1 -0
  18. package/esm/store/chatWindow/chatWindowSlice.d.ts +7 -1
  19. package/esm/store/chatWindow/chatWindowSlice.d.ts.map +1 -1
  20. package/esm/store/chatWindow/chatWindowSlice.js +14 -2
  21. package/esm/store/options.d.ts +2 -0
  22. package/esm/store/options.d.ts.map +1 -1
  23. package/esm/store/options.js +16 -1
  24. package/esm/store/sideEffects/index.d.ts.map +1 -1
  25. package/esm/store/sideEffects/index.js +3 -2
  26. package/esm/store/sideEffects/loadContextObjects.d.ts +7 -0
  27. package/esm/store/sideEffects/loadContextObjects.d.ts.map +1 -1
  28. package/esm/store/sideEffects/loadContextObjects.js +26 -8
  29. package/esm/store/store.d.ts +10 -1
  30. package/esm/store/store.d.ts.map +1 -1
  31. package/esm/store/store.js +2 -0
  32. package/esm/types.d.ts +1 -0
  33. package/esm/types.d.ts.map +1 -1
  34. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigContext.d.ts","sourceRoot":"","sources":["../../src/components/ConfigContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7G,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAIzD,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CA6BlC;AAED,eAAO,MAAM,SAAS,qBAErB,CAAC"}
1
+ {"version":3,"file":"ConfigContext.d.ts","sourceRoot":"","sources":["../../src/components/ConfigContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAsC,MAAM,OAAO,CAAC;AAEnF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7G,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,SAAS,GAAG,eAAe,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAIzD,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACjB,EAAE,iBAAiB,CAAC,aAAa,CAAC,2CAsBlC;AAED,eAAO,MAAM,SAAS,qBAErB,CAAC"}
@@ -6,25 +6,18 @@ export function ConfigProvider({ children, allowNativeLinks, linkHandler, catalo
6
6
  const parentConfig = useConfig();
7
7
  const value = useMemo(() => ({
8
8
  allowNativeLinks: allowNativeLinks ?? parentConfig.allowNativeLinks,
9
- linkHandler: linkHandler ?? parentConfig.linkHandler,
9
+ linkHandler: linkHandler
10
+ ? (event) => {
11
+ const resultParent = parentConfig.linkHandler?.(event);
12
+ const resultCurrent = linkHandler?.(event);
13
+ return resultCurrent ?? resultParent;
14
+ }
15
+ : parentConfig.linkHandler,
10
16
  catalogItems: catalogItems ?? parentConfig.catalogItems,
11
17
  canManage: canManage ?? parentConfig.canManage,
12
18
  canAnalyze: canAnalyze ?? parentConfig.canAnalyze,
13
19
  canFullControl: canFullControl ?? parentConfig.canFullControl,
14
- }), [
15
- allowNativeLinks,
16
- parentConfig.allowNativeLinks,
17
- parentConfig.linkHandler,
18
- parentConfig.catalogItems,
19
- parentConfig.canManage,
20
- parentConfig.canAnalyze,
21
- parentConfig.canFullControl,
22
- linkHandler,
23
- catalogItems,
24
- canManage,
25
- canAnalyze,
26
- canFullControl,
27
- ]);
20
+ }), [allowNativeLinks, parentConfig, linkHandler, catalogItems, canManage, canAnalyze, canFullControl]);
28
21
  return _jsx(configContext.Provider, { value: value, children: children });
29
22
  }
30
23
  export const useConfig = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAEH,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAExB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAClE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IAErD;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAyDxD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC"}
1
+ {"version":3,"file":"GenAIChat.d.ts","sourceRoot":"","sources":["../../src/components/GenAIChat.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGpG,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAClE;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,8BAA8B,CAAC,EAAE,MAAM,aAAa,CAAC;IAErD;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAyDxD;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uBAAiB,CAAC"}
@@ -3,7 +3,7 @@ import { BackendProvider, WorkspaceProvider, useBackendStrict, useWorkspaceStric
3
3
  import { IntlWrapper } from "../localization/IntlWrapper.js";
4
4
  import { PermissionsProvider } from "../permissions/PermissionsContext.js";
5
5
  import { usePermissions } from "../permissions/usePermissions.js";
6
- import { ConfigProvider, useConfig, } from "./ConfigContext.js";
6
+ import { ConfigProvider } from "./ConfigContext.js";
7
7
  import { CustomizationProvider } from "./CustomizationProvider.js";
8
8
  import { GenAIChatWrapper } from "./GenAIChatWrapper.js";
9
9
  import { GenAiStore } from "./GenAiStore.js";
@@ -24,8 +24,7 @@ export function GenAIAssistant(props) {
24
24
  */
25
25
  export const GenAIChat = GenAIAssistant;
26
26
  function GenAIContent(props) {
27
- const { onLinkClick, catalogItems, LandingScreenComponentProvider, DisclaimerComponentProvider, className, } = props;
27
+ const { LandingScreenComponentProvider, DisclaimerComponentProvider, className, catalogItems } = props;
28
28
  const { permissions, loading } = usePermissions();
29
- const { allowNativeLinks } = useConfig();
30
- return (_jsx(ConfigProvider, { linkHandler: onLinkClick, catalogItems: catalogItems, allowNativeLinks: allowNativeLinks ?? props.allowNativeLinks, canFullControl: props.disableFullControl ? false : (permissions.canManageProject ?? false), canManage: props.disableManage ? false : (permissions.canManageProject ?? false), canAnalyze: props.disableAnalyze ? false : (permissions.canCreateVisualization ?? false), children: _jsx(CustomizationProvider, { landingScreenComponentProvider: LandingScreenComponentProvider, disclaimerComponentProvider: DisclaimerComponentProvider, children: _jsx(GenAIChatWrapper, { initializing: loading, className: className }) }) }));
29
+ return (_jsx(ConfigProvider, { catalogItems: catalogItems, canFullControl: props.disableFullControl ? false : (permissions.canManageProject ?? false), canManage: props.disableManage ? false : (permissions.canManageProject ?? false), canAnalyze: props.disableAnalyze ? false : (permissions.canCreateVisualization ?? false), children: _jsx(CustomizationProvider, { landingScreenComponentProvider: LandingScreenComponentProvider, disclaimerComponentProvider: DisclaimerComponentProvider, children: _jsx(GenAIChatWrapper, { initializing: loading, className: className }) }) }));
31
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiChatContextChooser.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooser.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAWvD,KAAK,+BAA+B,GAAG;IACnC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,kDAiExF"}
1
+ {"version":3,"file":"GenAiChatContextChooser.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooser.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAWvD,KAAK,+BAA+B,GAAG;IACnC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,kDA4ExF"}
@@ -19,20 +19,21 @@ export function GenAiChatContextChooser({ onAddContext }) {
19
19
  const titleId = useIdPrefixed("context-chooser-title");
20
20
  const ambient = useSelector((state) => ambientContextSelector(state));
21
21
  const active = useSelector((state) => userContextSelector(state));
22
- const { items: inputItems, isLoading, hasNextPage, loadNextPage } = useContextItems(ambient, active);
22
+ const { items: inputItems, search, setSearch, isLoading, hasNextPage, loadNextPage, } = useContextItems(ambient, active);
23
23
  const addContextLabel = intl.formatMessage(msgs.add);
24
24
  const onOpenStateChanged = useCallback((isOpen) => {
25
+ setSearch("");
25
26
  if (isOpen) {
26
27
  dispatch(initContextObjectsAction());
27
28
  }
28
- }, [dispatch]);
29
+ }, [dispatch, setSearch]);
29
30
  if (!ambient) {
30
31
  return null;
31
32
  }
32
33
  return (_jsx("div", { className: "gd-gen-ai-chat__input__context", children: _jsx(Dropdown, { alignPoints: [{ align: "tl bl", offset: { x: 0, y: 0 } }], closeOnEscape: true, fullscreenOnMobile: false, autofocusOnOpen: true, accessibilityConfig: {}, onOpenStateChanged: onOpenStateChanged, renderButton: ({ isOpen, toggleDropdown, accessibilityConfig }) => (_jsx(UiIconButton, { icon: "plus", variant: "tertiary", size: "small", dataTestId: "choose_context", isActive: isOpen, accessibilityConfig: {
33
34
  ...accessibilityConfig,
34
35
  ariaLabel: addContextLabel,
35
- }, onClick: toggleDropdown, isDisabled: !inputItems.length && !hasNextPage && !isLoading })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(GenAiChatContextChooserBody, { inputItems: inputItems, title: addContextLabel, titleId: titleId, isLoading: isLoading, hasNextPage: hasNextPage, loadNextPage: loadNextPage, ariaAttributes: ariaAttributes, closeDropdown: closeDropdown, onSelect: (item) => {
36
+ }, onClick: toggleDropdown, isDisabled: !search && !inputItems.length && !hasNextPage && !isLoading })), renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(GenAiChatContextChooserBody, { inputItems: inputItems, title: addContextLabel, titleId: titleId, search: search, onSearchChange: setSearch, isLoading: isLoading, hasNextPage: hasNextPage, loadNextPage: loadNextPage, ariaAttributes: ariaAttributes, closeDropdown: closeDropdown, onSelect: (item) => {
36
37
  dispatch(addContextReferenceAction({ object: item }));
37
38
  onAddContext?.(item);
38
39
  } })) }) }));
@@ -3,6 +3,8 @@ type GenAiChatContextChooserBodyProps = {
3
3
  inputItems: IGenAIContextObject[];
4
4
  title: string;
5
5
  titleId: string;
6
+ search: string;
7
+ onSearchChange: (search: string) => void;
6
8
  isLoading?: boolean;
7
9
  hasNextPage?: boolean;
8
10
  loadNextPage?: () => void;
@@ -14,6 +16,6 @@ type GenAiChatContextChooserBodyProps = {
14
16
  onSelect: (item: IGenAIContextObject) => void;
15
17
  closeDropdown: () => void;
16
18
  };
17
- export declare function GenAiChatContextChooserBody({ inputItems, title, titleId, isLoading, hasNextPage, loadNextPage, ariaAttributes, onSelect, closeDropdown }: GenAiChatContextChooserBodyProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function GenAiChatContextChooserBody({ inputItems, title, titleId, search, onSearchChange, isLoading, hasNextPage, loadNextPage, ariaAttributes, onSelect, closeDropdown }: GenAiChatContextChooserBodyProps): import("react/jsx-runtime").JSX.Element;
18
20
  export {};
19
21
  //# sourceMappingURL=GenAiChatContextChooserBody.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiChatContextChooserBody.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooserBody.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA6BvD,KAAK,gCAAgC,GAAG;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EACxC,UAAU,EACV,KAAK,EACL,OAAO,EACP,SAAiB,EACjB,WAAmB,EACnB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,aAAa,EAChB,EAAE,gCAAgC,2CAsIlC"}
1
+ {"version":3,"file":"GenAiChatContextChooserBody.d.ts","sourceRoot":"","sources":["../../src/components/GenAiChatContextChooserBody.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8BvD,KAAK,gCAAgC,GAAG;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,EACxC,UAAU,EACV,KAAK,EACL,OAAO,EACP,MAAM,EACN,cAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,aAAa,EAChB,EAAE,gCAAgC,2CAmIlC"}
@@ -1,11 +1,13 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2026 GoodData Corporation
3
- import { useCallback, useId, useMemo, useState } from "react";
3
+ import { useCallback, useEffect, useId } from "react";
4
4
  import cx from "classnames";
5
5
  import { defineMessages, useIntl } from "react-intl";
6
+ import { useDebouncedState } from "@gooddata/sdk-ui";
6
7
  import { DEFAULT_ITEM_HEIGHT, DETAILED_ANNOUNCEMENT_THRESHOLD, Input, NoData, ScopedIdStore, ShortenedText, UiIcon, UiPagedVirtualList, UiSearchResultsAnnouncement, UiSubmenuHeader, isTypingKey, useScopedIdStoreValue, } from "@gooddata/sdk-ui-kit";
7
8
  import { getIconByType } from "./utils/icons.js";
8
9
  const SEARCH_FIELD_VISIBILITY_THRESHOLD = 7;
10
+ const SEARCH_DEBOUNCE_MS = 300;
9
11
  const MAX_VISIBLE_ITEMS = 7;
10
12
  const LOADING_SKELETON_ITEMS_COUNT = 3;
11
13
  const msgs = defineMessages({
@@ -28,25 +30,23 @@ const msgs = defineMessages({
28
30
  id: "gd.gen-ai.context.noDataAvailable",
29
31
  },
30
32
  });
31
- export function GenAiChatContextChooserBody({ inputItems, title, titleId, isLoading = false, hasNextPage = false, loadNextPage, ariaAttributes, onSelect, closeDropdown, }) {
33
+ export function GenAiChatContextChooserBody({ inputItems, title, titleId, search, onSearchChange, isLoading = false, hasNextPage = false, loadNextPage, ariaAttributes, onSelect, closeDropdown, }) {
32
34
  const intl = useIntl();
33
35
  const listboxId = useId();
34
- const [searchString, setSearchString] = useState("");
35
- const isSearchFieldVisible = inputItems.length > SEARCH_FIELD_VISIBILITY_THRESHOLD;
36
- const searchStringToUse = isSearchFieldVisible ? searchString : "";
37
- const normalizedSearch = searchStringToUse.trim().toLowerCase();
38
- const filteredItems = useMemo(() => {
39
- if (!normalizedSearch) {
40
- return inputItems;
36
+ const [searchString, setSearchString, debouncedSearch] = useDebouncedState(search, SEARCH_DEBOUNCE_MS);
37
+ useEffect(() => {
38
+ if (debouncedSearch.trim() !== search) {
39
+ onSearchChange(debouncedSearch.trim());
41
40
  }
42
- return inputItems.filter((item) => item.title.toLowerCase().includes(normalizedSearch));
43
- }, [inputItems, normalizedSearch]);
41
+ }, [debouncedSearch, search, onSearchChange]);
42
+ const isSearchFieldVisible = inputItems.length > SEARCH_FIELD_VISIBILITY_THRESHOLD || searchString.length > 0 || hasNextPage;
43
+ const normalizedSearch = search.trim().toLowerCase();
44
44
  const scopedIdStoreValue = useScopedIdStoreValue((item) => `${item.type}-${item.id}`);
45
45
  const handleSelect = useCallback((item) => {
46
46
  onSelect(item);
47
47
  closeDropdown();
48
48
  }, [closeDropdown, onSelect]);
49
- const hasNoData = !isLoading && filteredItems.length === 0;
49
+ const hasNoData = !isLoading && inputItems.length === 0;
50
50
  const hasNoMatchingData = hasNoData && normalizedSearch.length > 0;
51
51
  const searchFilled = searchString.length > 0;
52
52
  const onEscKeyPress = useCallback((event) => {
@@ -57,10 +57,9 @@ export function GenAiChatContextChooserBody({ inputItems, title, titleId, isLoad
57
57
  closeDropdown();
58
58
  }
59
59
  }, [closeDropdown, searchFilled]);
60
- const canLoadNextPage = hasNextPage && normalizedSearch.length === 0;
61
- const shouldShowPagedList = !hasNoData || canLoadNextPage;
62
- const skeletonItemsCount = isLoading || (canLoadNextPage && filteredItems.length === 0) ? LOADING_SKELETON_ITEMS_COUNT : 0;
63
- const visibleRowsCount = filteredItems.length + skeletonItemsCount;
60
+ const shouldShowPagedList = !hasNoData || hasNextPage;
61
+ const skeletonItemsCount = isLoading || (hasNextPage && inputItems.length === 0) ? LOADING_SKELETON_ITEMS_COUNT : 0;
62
+ const visibleRowsCount = inputItems.length + skeletonItemsCount;
64
63
  const listMaxHeight = Math.min(Math.max(visibleRowsCount, 1), MAX_VISIBLE_ITEMS) * DEFAULT_ITEM_HEIGHT;
65
64
  return (_jsxs("div", { ...ariaAttributes, "aria-labelledby": titleId, className: "gd-gen-ai-chat__context-chooser", "data-testid": "context_chooser_menu", children: [
66
65
  _jsx(UiSubmenuHeader, { title: title, titleId: titleId, height: "medium", onClose: closeDropdown, closeAriaLabel: intl.formatMessage(msgs.close) }), isSearchFieldVisible ? (_jsxs(_Fragment, { children: [
@@ -68,13 +67,13 @@ export function GenAiChatContextChooserBody({ inputItems, title, titleId, isLoad
68
67
  if (isTypingKey(event)) {
69
68
  event.stopPropagation();
70
69
  }
71
- }, children: _jsx(Input, { className: cx("gd-list-searchfield", "gd-flex-item"), value: searchStringToUse, onChange: (value) => setSearchString(String(value)), onEscKeyPress: onEscKeyPress, placeholder: intl.formatMessage(msgs.searchPlaceholder), autofocus: true, clearOnEsc: true, isSearch: true, isSmall: true, type: "search", accessibilityConfig: {
70
+ }, children: _jsx(Input, { className: cx("gd-list-searchfield", "gd-flex-item"), value: searchString, onChange: (value) => setSearchString(String(value)), onEscKeyPress: onEscKeyPress, placeholder: intl.formatMessage(msgs.searchPlaceholder), autofocus: true, clearOnEsc: true, isSearch: true, isSmall: true, type: "search", accessibilityConfig: {
72
71
  ariaLabel: intl.formatMessage(msgs.searchAriaLabel),
73
72
  ariaControls: listboxId,
74
- } }) }), _jsx(UiSearchResultsAnnouncement, { totalResults: normalizedSearch ? filteredItems.length : undefined, resultValues: filteredItems.length <= DETAILED_ANNOUNCEMENT_THRESHOLD
75
- ? filteredItems.map((item) => item.title)
73
+ } }) }), _jsx(UiSearchResultsAnnouncement, { totalResults: normalizedSearch ? inputItems.length : undefined, resultValues: inputItems.length <= DETAILED_ANNOUNCEMENT_THRESHOLD
74
+ ? inputItems.map((item) => item.title)
76
75
  : undefined })
77
- ] })) : null, shouldShowPagedList ? (_jsx(ScopedIdStore, { value: scopedIdStoreValue, children: _jsx(UiPagedVirtualList, { maxHeight: listMaxHeight, items: filteredItems, itemHeight: DEFAULT_ITEM_HEIGHT, itemsGap: 0, itemPadding: 0, skeletonItemsCount: skeletonItemsCount, isLoading: isLoading, hasNextPage: canLoadNextPage, loadNextPage: loadNextPage, representAs: "listbox", closeDropdown: closeDropdown, onKeyDownConfirm: handleSelect, listboxProps: {
76
+ ] })) : null, shouldShowPagedList ? (_jsx(ScopedIdStore, { value: scopedIdStoreValue, children: _jsx(UiPagedVirtualList, { maxHeight: listMaxHeight, items: inputItems, itemHeight: DEFAULT_ITEM_HEIGHT, itemsGap: 0, itemPadding: 0, skeletonItemsCount: skeletonItemsCount, isLoading: isLoading, hasNextPage: hasNextPage, loadNextPage: loadNextPage, representAs: "listbox", closeDropdown: closeDropdown, onKeyDownConfirm: handleSelect, listboxProps: {
78
77
  id: listboxId,
79
78
  "aria-label": intl.formatMessage(msgs.listAriaLabel),
80
79
  }, children: (item) => _jsx(ContextChooserItem, { item: item, onSelect: () => handleSelect(item) }) }) })) : (_jsx(NoData, { hasNoMatchingData: hasNoMatchingData, notFoundLabel: intl.formatMessage(msgs.noMatchingData), noDataLabel: intl.formatMessage(msgs.noDataAvailable) }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"GenAiStore.d.ts","sourceRoot":"","sources":["../../src/components/GenAiStore.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEpG;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC7D;;OAEG;IACH,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC;IAEjE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;OAOG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDAmDhD"}
1
+ {"version":3,"file":"GenAiStore.d.ts","sourceRoot":"","sources":["../../src/components/GenAiStore.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACxB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEpG;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAC7D;;OAEG;IACH,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC;IAEjE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;OAOG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDAmDhD"}
@@ -45,17 +45,33 @@ export function GenAiStore(props) {
45
45
  }
46
46
  return (_jsx(ConfigProvider, { allowNativeLinks: props.allowNativeLinks, linkHandler: props.onLinkClick, children: _jsx(InternalStore, { ...props, children: children }) }));
47
47
  }
48
- function ExternalStore({ onDispatcher, children, currentStore, }) {
48
+ function ExternalStore({ onDispatcher, children, currentStore, onLinkClick, }) {
49
49
  useEffect(() => {
50
50
  onDispatcher?.(currentStore.dispatch);
51
51
  }, [currentStore, onDispatcher]);
52
+ useEffect(() => {
53
+ const store = currentStore;
54
+ const dispatcher = store.optionsDispatcher;
55
+ if (dispatcher && onLinkClick) {
56
+ return dispatcher.registerLinkHandler(onLinkClick);
57
+ }
58
+ return undefined;
59
+ }, [currentStore, onLinkClick]);
52
60
  const content = typeof children === "function" ? children(currentStore) : children;
53
61
  return _jsx(_Fragment, { children: content });
54
62
  }
55
- function InjectedStore({ onDispatcher, children, currentStore, }) {
63
+ function InjectedStore({ onDispatcher, children, currentStore, onLinkClick, }) {
56
64
  useEffect(() => {
57
65
  onDispatcher?.(currentStore.dispatch);
58
66
  }, [currentStore, onDispatcher]);
67
+ useEffect(() => {
68
+ const store = currentStore;
69
+ const dispatcher = store.optionsDispatcher;
70
+ if (dispatcher && onLinkClick) {
71
+ return dispatcher.registerLinkHandler(onLinkClick);
72
+ }
73
+ return undefined;
74
+ }, [currentStore, onLinkClick]);
59
75
  const content = typeof children === "function" ? children(currentStore) : children;
60
76
  return _jsx(StoreProvider, { store: currentStore, children: content });
61
77
  }
@@ -2,6 +2,8 @@ import { type IGenAIUserContext } from "@gooddata/sdk-model";
2
2
  import { type IGenAIContextObject } from "../../types.js";
3
3
  export declare function useContextItems(ambient: IGenAIUserContext | undefined, active: IGenAIUserContext | undefined): {
4
4
  items: IGenAIContextObject[];
5
+ search: string;
6
+ setSearch: (value: string) => void;
5
7
  isLoading: boolean;
6
8
  hasNextPage: boolean;
7
9
  loadNextPage: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useContextItems.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useContextItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,qBAAqB,CAAC;AAQ9E,OAAO,EAAsD,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE9G,wBAAgB,eAAe,CAC3B,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,MAAM,EAAE,iBAAiB,GAAG,SAAS;;;;;EAoDxC"}
1
+ {"version":3,"file":"useContextItems.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useContextItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,qBAAqB,CAAC;AAc9E,OAAO,EAIH,KAAK,mBAAmB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,eAAe,CAC3B,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,MAAM,EAAE,iBAAiB,GAAG,SAAS;;;;;;;EAqExC"}
@@ -4,31 +4,39 @@ import { useIntl } from "react-intl";
4
4
  import { useDispatch, useSelector } from "react-redux";
5
5
  import { serializeObjRef } from "@gooddata/sdk-model";
6
6
  import { collectAvailableReferences, collectContextReferences, } from "../../context/collectContextReferences.js";
7
- import { contextObjectsSelector } from "../../store/chatWindow/chatWindowSelectors.js";
8
- import { loadContextObjectsNextPageAction } from "../../store/chatWindow/chatWindowSlice.js";
7
+ import { contextObjectsSearchSelector, contextObjectsSelector, } from "../../store/chatWindow/chatWindowSelectors.js";
8
+ import { loadContextObjectsNextPageAction, setContextObjectsSearchAction, } from "../../store/chatWindow/chatWindowSlice.js";
9
9
  export function useContextItems(ambient, active) {
10
10
  const intl = useIntl();
11
11
  const dispatch = useDispatch();
12
12
  const emptyReferenceLabel = intl.formatMessage({ id: "gd.gen-ai.context.untitled" });
13
13
  const contextObjects = useSelector(contextObjectsSelector);
14
+ const search = useSelector(contextObjectsSearchSelector);
14
15
  const dashboards = contextObjects.dashboard;
15
16
  const visualizations = contextObjects.visualization;
16
17
  const items = useMemo(() => {
17
- const ambientReferences = collectAvailableReferences(ambient, emptyReferenceLabel);
18
+ const matchesSearch = titleMatcher(search);
19
+ const ambientReferences = collectAvailableReferences(ambient, emptyReferenceLabel).filter(matchesSearch);
18
20
  const selectedReferences = collectContextReferences(active, emptyReferenceLabel);
19
21
  const offered = new Set();
20
- ambientReferences.forEach((reference) => {
22
+ collectAvailableReferences(ambient, emptyReferenceLabel).forEach((reference) => {
21
23
  offered.add(serializeObjRef(reference.ref));
22
24
  if (reference.insightRef) {
23
25
  offered.add(serializeObjRef(reference.insightRef));
24
26
  }
25
27
  });
26
28
  const workspaceReferences = [
27
- ...toContextObjects(dashboards.items, "dashboard", emptyReferenceLabel),
28
- ...toContextObjects(visualizations.items, "visualization", emptyReferenceLabel),
29
+ ...searchable(dashboards, "dashboard", emptyReferenceLabel, matchesSearch),
30
+ ...searchable(visualizations, "visualization", emptyReferenceLabel, matchesSearch),
29
31
  ].filter((reference) => !offered.has(serializeObjRef(reference.ref)));
30
32
  return [...ambientReferences, ...workspaceReferences].filter((reference) => !selectedReferences.some((selectedReference) => isSameObject(selectedReference, reference)));
31
- }, [active, ambient, dashboards.items, visualizations.items, emptyReferenceLabel]);
33
+ }, [active, ambient, dashboards, visualizations, emptyReferenceLabel, search]);
34
+ const setSearch = useCallback((value) => {
35
+ if (value === search) {
36
+ return;
37
+ }
38
+ dispatch(setContextObjectsSearchAction({ search: value }));
39
+ }, [dispatch, search]);
32
40
  const nextPageKind = dashboards.hasNextPage
33
41
  ? "dashboard"
34
42
  : visualizations.hasNextPage
@@ -42,11 +50,21 @@ export function useContextItems(ambient, active) {
42
50
  }, [dispatch, nextPageKind]);
43
51
  return {
44
52
  items,
53
+ search,
54
+ setSearch,
45
55
  isLoading: dashboards.isLoading || visualizations.isLoading,
46
56
  hasNextPage: nextPageKind !== undefined,
47
57
  loadNextPage,
48
58
  };
49
59
  }
60
+ function titleMatcher(search) {
61
+ const normalized = search.trim().toLowerCase();
62
+ return normalized ? (reference) => reference.title.toLowerCase().includes(normalized) : () => true;
63
+ }
64
+ function searchable(list, type, emptyReferenceLabel, matchesSearch) {
65
+ const references = toContextObjects(list.items, type, emptyReferenceLabel);
66
+ return list.isExternal ? references.filter(matchesSearch) : references;
67
+ }
50
68
  function toContextObjects(items, type, emptyReferenceLabel) {
51
69
  return items.map((item) => ({
52
70
  id: item.id,
@@ -23,6 +23,7 @@ export declare const tagsSelector: (state: RootState) => {
23
23
  };
24
24
  export declare const catalogItemsSelector: (state: RootState) => CatalogItem[];
25
25
  export declare const contextObjectsSelector: (state: RootState) => ContextObjectsState;
26
+ export declare const contextObjectsSearchSelector: (state: RootState) => string;
26
27
  export declare const keyDriverAnalysisSelector: (state: RootState) => IKdaDefinition | undefined;
27
28
  export declare const keyDriverAnalysisMinimizedSelector: (state: RootState) => boolean | undefined;
28
29
  export declare const userContextSelector: (state: RootState) => IGenAIUserContext | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"chatWindowSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSelectors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,eAAO,MAAM,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,aAAa,GAAG,SAGxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,sBAAsB,GAAG,SAG7E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGjE,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAG/D,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGlE,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAIhE,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxE,CAAC;AAKF,eAAO,MAAM,sCAAsC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAK1E,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,eAAe,EAAE,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,wBAAwB,EAAE,GAAG,SACZ,CAAC;AAEvF,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK;IAC7C,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAMpC,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,WAAW,EAKnE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,mBAG1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,cAAc,GAAG,SAG9E,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,SAGhF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG9E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAe5D,CAAC"}
1
+ {"version":3,"file":"chatWindowSelectors.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSelectors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,eAAO,MAAM,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,aAAa,GAAG,SAGxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,sBAAsB,GAAG,SAG7E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGrD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGjE,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAG/D,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGlE,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAIhE,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAGxE,CAAC;AAKF,eAAO,MAAM,sCAAsC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAK1E,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,eAAe,EAAE,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,wBAAwB,EAAE,GAAG,SACZ,CAAC;AAEvF,eAAO,MAAM,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK;IAC7C,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAMpC,CAAC;AAEH,eAAO,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,WAAW,EAKnE,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,mBAG1D,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAGhE,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,cAAc,GAAG,SAG9E,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,SAGhF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG3E,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,iBAAiB,GAAG,SAG9E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAe5D,CAAC"}
@@ -33,6 +33,7 @@ export const catalogItemsSelector = createSelector(chatWindowSliceSelector, (sta
33
33
  return state.catalogItems ?? [];
34
34
  });
35
35
  export const contextObjectsSelector = createSelector(chatWindowSliceSelector, (state) => state.contextObjects);
36
+ export const contextObjectsSearchSelector = createSelector(chatWindowSliceSelector, (state) => state.contextObjectsSearch);
36
37
  export const keyDriverAnalysisSelector = createSelector(chatWindowSliceSelector, (state) => state.keyDriverAnalysis);
37
38
  export const keyDriverAnalysisMinimizedSelector = createSelector(chatWindowSliceSelector, (state) => state.keyDriverAnalysisMinimized);
38
39
  export const userContextSelector = createSelector(chatWindowSliceSelector, (state) => state.context.active);
@@ -44,6 +44,10 @@ type ChatWindowSliceState = {
44
44
  * Dashboards and visualizations offered by the context chooser, on top of the ambient ones.
45
45
  */
46
46
  contextObjects: ContextObjectsState;
47
+ /**
48
+ * Title the context chooser lists are filtered by. Empty means no filter.
49
+ */
50
+ contextObjectsSearch: string;
47
51
  /**
48
52
  * Only objects with these tags will be included
49
53
  */
@@ -101,7 +105,9 @@ export declare const setOpenAction: import("@reduxjs/toolkit").ActionCreatorWith
101
105
  }, "chatWindow/loadContextObjectsNextPageAction">, setContextObjectsAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
102
106
  kind: ContextObjectKind;
103
107
  items: IGenAIContextListItem[];
104
- }, "chatWindow/setContextObjectsAction">, contextObjectsLoadingAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
108
+ }, "chatWindow/setContextObjectsAction">, setContextObjectsSearchAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
109
+ search: string;
110
+ }, "chatWindow/setContextObjectsSearchAction">, contextObjectsLoadingAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
105
111
  kind: ContextObjectKind;
106
112
  }, "chatWindow/contextObjectsLoadingAction">, contextObjectsPageLoadedAction: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
107
113
  kind: ContextObjectKind;
@@ -1 +1 @@
1
- {"version":3,"file":"chatWindowSlice.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,OAAO,EACH,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACpB,MAAM,gBAAgB,CAAC;AAGxB,KAAK,oBAAoB,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;OAEG;IACH,cAAc,EAAE,mBAAmB,CAAC;IACpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAqChD,eAAO,MAAM,yBAAyB;;;0BAWpC,CAAC;AAkMH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,CAA2B,CAAC;AAC7F,eAAO,MACH,aAAa;;gCACb,gBAAgB;;mCAChB,qBAAqB;;wCACrB,iBAAiB;;oCACjB,qBAAqB;;wCACrB,0BAA0B;;6CAC1B,mCAAmC;;sDACnC,oBAAoB;;uCACpB,aAAa;;;gCACb,sBAAsB,+HACtB,wBAAwB,iGACxB,gCAAgC;;mDAChC,uBAAuB;;;0CACvB,2BAA2B;;8CAC3B,8BAA8B;;;;iDAC9B,8BAA8B;;iDAC9B,iCAAiC;;oDACjC,0BAA0B;;;;;;;;6CAC1B,yBAAyB;;4CACzB,4BAA4B;;+CAC5B,kBAAkB;;;AAClB;;;GAGG;AACH,mBAAmB;;;AACnB;;GAEG;AACH,2BAA2B;;;AAC3B;;GAEG;AACH,oBAAoB;;;qCACG,CAAC"}
1
+ {"version":3,"file":"chatWindowSlice.d.ts","sourceRoot":"","sources":["../../../src/store/chatWindow/chatWindowSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,OAAO,EAAe,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,OAAO,EACH,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACpB,MAAM,gBAAgB,CAAC;AAGxB,KAAK,oBAAoB,GAAG;IACxB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;OAEG;IACH,cAAc,EAAE,mBAAmB,CAAC;IACpC;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAuChD,eAAO,MAAM,yBAAyB;;;0BAYpC,CAAC;AA+MH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,CAA2B,CAAC;AAC7F,eAAO,MACH,aAAa;;gCACb,gBAAgB;;mCAChB,qBAAqB;;wCACrB,iBAAiB;;oCACjB,qBAAqB;;wCACrB,0BAA0B;;6CAC1B,mCAAmC;;sDACnC,oBAAoB;;uCACpB,aAAa;;;gCACb,sBAAsB,+HACtB,wBAAwB,iGACxB,gCAAgC;;mDAChC,uBAAuB;;;0CACvB,6BAA6B;;gDAC7B,2BAA2B;;8CAC3B,8BAA8B;;;;iDAC9B,8BAA8B;;iDAC9B,iCAAiC;;oDACjC,0BAA0B;;;;;;;;6CAC1B,yBAAyB;;4CACzB,4BAA4B;;+CAC5B,kBAAkB;;;AAClB;;;GAGG;AACH,mBAAmB;;;AACnB;;GAEG;AACH,2BAA2B;;;AAC3B;;GAEG;AACH,oBAAoB;;;qCACG,CAAC"}
@@ -6,12 +6,13 @@ import { mergeContexts } from "../../context/build.js";
6
6
  import { removeContextReference, removeUserContextReferences } from "../../context/removeContextReference.js";
7
7
  import { clearThreadAction, startNewConversationAction } from "../messages/messagesSlice.js";
8
8
  export const chatWindowSliceName = "chatWindow";
9
- function emptyContextObjectList() {
9
+ function emptyContextObjectList(isExternal = false) {
10
10
  return {
11
11
  items: [],
12
12
  loadedPages: 0,
13
13
  hasNextPage: true,
14
14
  isLoading: false,
15
+ isExternal,
15
16
  };
16
17
  }
17
18
  function emptyContextObjects() {
@@ -31,6 +32,7 @@ const initialState = {
31
32
  excludeTags: undefined,
32
33
  allowedRelationshipTypes: undefined,
33
34
  contextObjects: emptyContextObjects(),
35
+ contextObjectsSearch: "",
34
36
  context: {
35
37
  ambient: undefined,
36
38
  active: undefined,
@@ -41,6 +43,7 @@ const initialState = {
41
43
  export const getInitialChatWindowState = ({ isPreview, allowInteractionIntelligence, } = {}) => ({
42
44
  ...initialState,
43
45
  contextObjects: emptyContextObjects(),
46
+ contextObjectsSearch: "",
44
47
  isPreview,
45
48
  allowInteractionIntelligence,
46
49
  });
@@ -90,8 +93,17 @@ const chatWindowSlice = createSlice({
90
93
  loadedPages: 1,
91
94
  hasNextPage: false,
92
95
  isLoading: false,
96
+ isExternal: true,
93
97
  };
94
98
  },
99
+ setContextObjectsSearchAction: (state, { payload: { search } }) => {
100
+ state.contextObjectsSearch = search;
101
+ ["dashboard", "visualization"].forEach((kind) => {
102
+ if (!state.contextObjects[kind].isExternal) {
103
+ state.contextObjects[kind] = emptyContextObjectList();
104
+ }
105
+ });
106
+ },
95
107
  contextObjectsLoadingAction: (state, { payload: { kind } }) => {
96
108
  state.contextObjects[kind].isLoading = true;
97
109
  },
@@ -156,7 +168,7 @@ const chatWindowSlice = createSlice({
156
168
  },
157
169
  });
158
170
  export const chatWindowSliceReducer = chatWindowSlice.reducer;
159
- export const { setOpenAction, setHistoryAction, setColorPaletteAction, setSettingsAction, copyToClipboardAction, setKeyDriverAnalysisAction, setKeyDriverAnalysisMinimizedAction, setObjectTypesAction, setTagsAction, setCatalogItemsActions, initContextObjectsAction, loadContextObjectsNextPageAction, setContextObjectsAction, contextObjectsLoadingAction, contextObjectsPageLoadedAction, contextObjectsLoadFailedAction, setAllowedRelationshipTypesAction, onDefinitionReceivedAction, addContextReferenceAction, removeContextReferenceAction, setIsPreviewAction,
171
+ export const { setOpenAction, setHistoryAction, setColorPaletteAction, setSettingsAction, copyToClipboardAction, setKeyDriverAnalysisAction, setKeyDriverAnalysisMinimizedAction, setObjectTypesAction, setTagsAction, setCatalogItemsActions, initContextObjectsAction, loadContextObjectsNextPageAction, setContextObjectsAction, setContextObjectsSearchAction, contextObjectsLoadingAction, contextObjectsPageLoadedAction, contextObjectsLoadFailedAction, setAllowedRelationshipTypesAction, onDefinitionReceivedAction, addContextReferenceAction, removeContextReferenceAction, setIsPreviewAction,
160
172
  /**
161
173
  * Switches the assistant between the docked and the fullscreen layout.
162
174
  * @public
@@ -16,10 +16,12 @@ export declare class OptionsDispatcher {
16
16
  private visualizations;
17
17
  private mode;
18
18
  private onLinkClick;
19
+ private onLinkClickHandlers;
19
20
  private allowNativeLinks;
20
21
  setColorPalette(colorPalette: IColorPalette | undefined): void;
21
22
  getColorPalette(): IColorPalette | undefined;
22
23
  setOnLinkClick(onLinkClick?: (linkClickEvent: LinkHandlerEvent) => string | undefined, allowNativeLinks?: boolean): void;
24
+ registerLinkHandler(handler: (linkClickEvent: LinkHandlerEvent) => string | undefined): () => void;
23
25
  getOnLinkClick(): {
24
26
  onLinkClick?: (linkClickEvent: LinkHandlerEvent) => string | undefined;
25
27
  allowNativeLinks?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/store/options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE3F;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,WAAW,CAAqF;IACxG,OAAO,CAAC,gBAAgB,CAAkC;IAEnD,eAAe,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAEpE;IAEM,eAAe,IAAI,aAAa,GAAG,SAAS,CAElD;IAEM,cAAc,CACjB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,EACtE,gBAAgB,CAAC,EAAE,OAAO,GAC3B,IAAI,CAGN;IAEM,cAAc,IAAI;QACrB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;QACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAKA;IAEM,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,WAAW,IAAI,sBAAsB,GAAG,SAAS,CAEvD;IAEM,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,SAAS,GAAG,IAAI,CAEtE;IAEM,cAAc,IAAI,eAAe,EAAE,GAAG,SAAS,CAErD;IAEM,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAGzF;IAEM,OAAO,IAAI;QAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAKzF;IAEM,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,IAAI,CAEpE;IAEM,eAAe,IAAI,WAAW,EAAE,GAAG,SAAS,CAElD;IAEM,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,aAAa,IAAI,gBAAgB,EAAE,GAAG,SAAS,CAErD;IAEM,iBAAiB,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,iBAAiB,IAAI,QAAQ,EAAE,GAAG,SAAS,CAEjD;IAEM,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI,CAEzD;IAEM,OAAO,IAAI,kBAAkB,GAAG,SAAS,CAE/C;CACJ"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/store/options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE3F;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,IAAI,CAA6C;IACzD,OAAO,CAAC,WAAW,CAAqF;IACxG,OAAO,CAAC,mBAAmB,CAAuE;IAClG,OAAO,CAAC,gBAAgB,CAAkC;IAEnD,eAAe,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAEpE;IAEM,eAAe,IAAI,aAAa,GAAG,SAAS,CAElD;IAEM,cAAc,CACjB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,EACtE,gBAAgB,CAAC,EAAE,OAAO,GAC3B,IAAI,CAGN;IAEM,mBAAmB,CACtB,OAAO,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,GAClE,MAAM,IAAI,CAGZ;IAEM,cAAc,IAAI;QACrB,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;QACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAiBA;IAEM,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,WAAW,IAAI,sBAAsB,GAAG,SAAS,CAEvD;IAEM,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,SAAS,GAAG,IAAI,CAEtE;IAEM,cAAc,IAAI,eAAe,EAAE,GAAG,SAAS,CAErD;IAEM,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAGzF;IAEM,OAAO,IAAI;QAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAKzF;IAEM,eAAe,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,IAAI,CAEpE;IAEM,eAAe,IAAI,WAAW,EAAE,GAAG,SAAS,CAElD;IAEM,aAAa,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,aAAa,IAAI,gBAAgB,EAAE,GAAG,SAAS,CAErD;IAEM,iBAAiB,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,SAAS,GAAG,IAAI,CAErE;IAEM,iBAAiB,IAAI,QAAQ,EAAE,GAAG,SAAS,CAEjD;IAEM,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,GAAG,IAAI,CAEzD;IAEM,OAAO,IAAI,kBAAkB,GAAG,SAAS,CAE/C;CACJ"}
@@ -14,6 +14,7 @@ export class OptionsDispatcher {
14
14
  visualizations = undefined;
15
15
  mode = undefined;
16
16
  onLinkClick = undefined;
17
+ onLinkClickHandlers = new Set();
17
18
  allowNativeLinks = undefined;
18
19
  setColorPalette(colorPalette) {
19
20
  this.colorPalette = colorPalette;
@@ -25,9 +26,23 @@ export class OptionsDispatcher {
25
26
  this.onLinkClick = onLinkClick;
26
27
  this.allowNativeLinks = allowNativeLinks;
27
28
  }
29
+ registerLinkHandler(handler) {
30
+ this.onLinkClickHandlers.add(handler);
31
+ return () => this.onLinkClickHandlers.delete(handler);
32
+ }
28
33
  getOnLinkClick() {
34
+ const onLinkClick = this.onLinkClick || this.onLinkClickHandlers.size > 0
35
+ ? (event) => {
36
+ const resultCurrent = this.onLinkClick?.(event);
37
+ let resultParents;
38
+ this.onLinkClickHandlers.forEach((handler) => {
39
+ resultParents = handler(event) ?? resultParents;
40
+ });
41
+ return resultParents ?? resultCurrent;
42
+ }
43
+ : undefined;
29
44
  return {
30
- onLinkClick: this.onLinkClick,
45
+ onLinkClick,
31
46
  allowNativeLinks: this.allowNativeLinks,
32
47
  };
33
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/index.ts"],"names":[],"mappings":"AA4CA;;;GAGG;AACH,wBAAiB,QAAQ,4HA2BxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/index.ts"],"names":[],"mappings":"AAiDA;;;GAGG;AACH,wBAAiB,QAAQ,4HA4BxB"}
@@ -1,11 +1,11 @@
1
1
  // (C) 2024-2026 GoodData Corporation
2
2
  import { call, fork, takeEvery, takeLatest, takeLeading } from "redux-saga/effects";
3
- import { initContextObjectsAction, loadContextObjectsNextPageAction, setOpenAction, } from "../chatWindow/chatWindowSlice.js";
3
+ import { initContextObjectsAction, loadContextObjectsNextPageAction, setContextObjectsSearchAction, setOpenAction, } from "../chatWindow/chatWindowSlice.js";
4
4
  import { clearThreadAction, deleteConversationAction, evaluateMessageUpdateAction, loadThreadAction, newMessageAction, pinConversationAction, renameConversationAction, saveVisualisationRenderStatusAction, saveVisualizationAction, saveVisualizationSuccessAction, setUserFeedback, setVerboseAction, } from "../messages/messagesSlice.js";
5
5
  import { loadAgents } from "./loadAgents.js";
6
6
  import { loadCatalogItems } from "./loadCatalogItems.js";
7
7
  import { loadColorPalette } from "./loadColorPalette.js";
8
- import { initContextObjects, loadContextObjectsNextPage } from "./loadContextObjects.js";
8
+ import { initContextObjects, loadContextObjectsNextPage, reloadContextObjects, } from "./loadContextObjects.js";
9
9
  import { loadSettings } from "./loadSettings.js";
10
10
  import { onChatOpenSync } from "./onChatOpenSync.js";
11
11
  import { onConversationDelete } from "./onConversationDelete.js";
@@ -45,6 +45,7 @@ export function* rootSaga() {
45
45
  //context chooser
46
46
  yield takeLeading(initContextObjectsAction.type, initContextObjects);
47
47
  yield takeEvery(loadContextObjectsNextPageAction.type, loadContextObjectsNextPage);
48
+ yield takeLatest(setContextObjectsSearchAction.type, reloadContextObjects);
48
49
  //others
49
50
  yield takeEvery(setVerboseAction.type, onVerboseStore);
50
51
  yield fork(onEvent);
@@ -6,6 +6,13 @@ import { type loadContextObjectsNextPageAction } from "../chatWindow/chatWindowS
6
6
  * @internal
7
7
  */
8
8
  export declare function initContextObjects(): Generator<import("redux-saga/effects").CallEffect<void>, void, unknown>;
9
+ /**
10
+ * Reload both lists after the searched title changed - a match among the visualizations has to be
11
+ * part of the answer, not something the reader has to scroll the dashboards out of the way to see.
12
+ * The visualizations wait when the dashboards have more pages, which would land above them.
13
+ * @internal
14
+ */
15
+ export declare function reloadContextObjects(): Generator<import("redux-saga/effects").CallEffect<void> | import("redux-saga/effects").SelectEffect, void, ContextObjectsState>;
9
16
  /**
10
17
  * Load the next page of one of the object lists offered by the context chooser. Each kind is
11
18
  * paged on its own, so a load in flight for one kind does not block the other.
@@ -1 +1 @@
1
- {"version":3,"file":"loadContextObjects.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/loadContextObjects.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,mBAAmB,EAA8B,MAAM,gBAAgB,CAAC;AAG9G,OAAO,EAIH,KAAK,gCAAgC,EAExC,MAAM,kCAAkC,CAAC;AAU1C;;;;GAIG;AACH,wBAAiB,kBAAkB,4EAElC;AAED;;;;GAIG;AACH,wBAAiB,0BAA0B,CAAC,EACxC,OAAO,EAAE,EAAE,IAAI,EAAE,EACpB,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,mIASrD"}
1
+ {"version":3,"file":"loadContextObjects.d.ts","sourceRoot":"","sources":["../../../src/store/sideEffects/loadContextObjects.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,KAAK,mBAAmB,EAA8B,MAAM,gBAAgB,CAAC;AAG9G,OAAO,EAIH,KAAK,gCAAgC,EAExC,MAAM,kCAAkC,CAAC;AAU1C;;;;GAIG;AACH,wBAAiB,kBAAkB,4EAElC;AAED;;;;;GAKG;AACH,wBAAiB,oBAAoB,oIAQpC;AAED;;;;GAIG;AACH,wBAAiB,0BAA0B,CAAC,EACxC,OAAO,EAAE,EAAE,IAAI,EAAE,EACpB,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,mIASrD"}
@@ -2,7 +2,7 @@
2
2
  import { call, cancelled, getContext, put, select } from "redux-saga/effects";
3
3
  import { insightRef, insightTitle } from "@gooddata/sdk-model";
4
4
  import { toContextListItem } from "../../utils.js";
5
- import { contextObjectsSelector } from "../chatWindow/chatWindowSelectors.js";
5
+ import { contextObjectsSearchSelector, contextObjectsSelector } from "../chatWindow/chatWindowSelectors.js";
6
6
  import { contextObjectsLoadFailedAction, contextObjectsLoadingAction, contextObjectsPageLoadedAction, setContextObjectsAction, } from "../chatWindow/chatWindowSlice.js";
7
7
  const PAGE_SIZE = 100;
8
8
  /**
@@ -13,6 +13,19 @@ const PAGE_SIZE = 100;
13
13
  export function* initContextObjects() {
14
14
  yield call(initContextObjectList, "dashboard");
15
15
  }
16
+ /**
17
+ * Reload both lists after the searched title changed - a match among the visualizations has to be
18
+ * part of the answer, not something the reader has to scroll the dashboards out of the way to see.
19
+ * The visualizations wait when the dashboards have more pages, which would land above them.
20
+ * @internal
21
+ */
22
+ export function* reloadContextObjects() {
23
+ yield call(loadContextObjectsPage, "dashboard", 0);
24
+ const state = yield select(contextObjectsSelector);
25
+ if (!state.dashboard.hasNextPage) {
26
+ yield call(loadContextObjectsPage, "visualization", 0);
27
+ }
28
+ }
16
29
  /**
17
30
  * Load the next page of one of the object lists offered by the context chooser. Each kind is
18
31
  * paged on its own, so a load in flight for one kind does not block the other.
@@ -42,7 +55,8 @@ function* loadContextObjectsPage(kind, page) {
42
55
  }
43
56
  yield put(contextObjectsLoadingAction({ kind }));
44
57
  try {
45
- const loaded = yield call(kind === "dashboard" ? queryDashboardsPage : queryVisualizationsPage, page);
58
+ const search = yield select(contextObjectsSearchSelector);
59
+ const loaded = yield call(kind === "dashboard" ? queryDashboardsPage : queryVisualizationsPage, page, search);
46
60
  yield put(contextObjectsPageLoadedAction({ kind, ...loaded }));
47
61
  }
48
62
  catch (e) {
@@ -65,16 +79,16 @@ function* getExternalItems(kind) {
65
79
  .getVisualizations()
66
80
  ?.map((insight) => toContextListItem(insightRef(insight), insightTitle(insight)));
67
81
  }
68
- function* queryDashboardsPage(page) {
82
+ function* queryDashboardsPage(page, search) {
69
83
  const backend = yield getContext("backend");
70
84
  const workspace = yield getContext("workspace");
71
- const query = backend
85
+ const query = withTitleFilter(backend
72
86
  .workspace(workspace)
73
87
  .dashboards()
74
88
  .getDashboardsQuery()
75
89
  .withPage(page)
76
90
  .withSize(PAGE_SIZE)
77
- .withSorting(["title,asc"]);
91
+ .withSorting(["title,asc"]), search);
78
92
  const queryCall = query.query.bind(query);
79
93
  const result = yield call(queryCall);
80
94
  return {
@@ -82,16 +96,16 @@ function* queryDashboardsPage(page) {
82
96
  hasNextPage: hasNextPage(result),
83
97
  };
84
98
  }
85
- function* queryVisualizationsPage(page) {
99
+ function* queryVisualizationsPage(page, search) {
86
100
  const backend = yield getContext("backend");
87
101
  const workspace = yield getContext("workspace");
88
- const query = backend
102
+ const query = withTitleFilter(backend
89
103
  .workspace(workspace)
90
104
  .insights()
91
105
  .getInsightsQuery()
92
106
  .withPage(page)
93
107
  .withSize(PAGE_SIZE)
94
- .withSorting(["title,asc"]);
108
+ .withSorting(["title,asc"]), search);
95
109
  const queryCall = query.query.bind(query);
96
110
  const result = yield call(queryCall);
97
111
  return {
@@ -102,3 +116,7 @@ function* queryVisualizationsPage(page) {
102
116
  function hasNextPage(result) {
103
117
  return result.offset + result.items.length < result.totalCount;
104
118
  }
119
+ function withTitleFilter(query, search) {
120
+ const title = search.trim();
121
+ return title ? query.withFilter({ title }) : query;
122
+ }
@@ -1,5 +1,14 @@
1
+ import { type EnhancedStore } from "@reduxjs/toolkit";
1
2
  import { type IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
+ import { chatWindowSliceName, chatWindowSliceReducer } from "./chatWindow/chatWindowSlice.js";
2
4
  import { type EventDispatcher } from "./events.js";
5
+ import { messagesSliceName, messagesSliceReducer } from "./messages/messagesSlice.js";
3
6
  import { type OptionsDispatcher } from "./options.js";
4
- export declare const getStore: (backend: IAnalyticalBackend, workspace: string, eventDispatcher: EventDispatcher, optionsDispatcher: OptionsDispatcher, isPreview: boolean | undefined, allowInteractionIntelligence: boolean | undefined) => import("redux").Store<any, import("redux").UnknownAction, unknown>;
7
+ export type GenAiStore = EnhancedStore<{
8
+ [messagesSliceName]: ReturnType<typeof messagesSliceReducer>;
9
+ [chatWindowSliceName]: ReturnType<typeof chatWindowSliceReducer>;
10
+ }> & {
11
+ optionsDispatcher: OptionsDispatcher;
12
+ };
13
+ export declare const getStore: (backend: IAnalyticalBackend, workspace: string, eventDispatcher: EventDispatcher, optionsDispatcher: OptionsDispatcher, isPreview: boolean | undefined, allowInteractionIntelligence: boolean | undefined) => GenAiStore;
5
14
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAOpE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAStD,eAAO,MAAM,QAAQ,mRAyCpB,CAAC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAItE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EAEzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAStD,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC;IACnC,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAC7D,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;CACpE,CAAC,GAAG;IACD,iBAAiB,EAAE,iBAAiB,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,QAAQ,2NA4CpB,CAAC"}
@@ -40,5 +40,7 @@ export const getStore = (backend, workspace, eventDispatcher, optionsDispatcher,
40
40
  },
41
41
  });
42
42
  sagaMiddleware.run(rootSaga);
43
+ // Save optionsDispatcher
44
+ store.optionsDispatcher = optionsDispatcher;
43
45
  return store;
44
46
  };
package/esm/types.d.ts CHANGED
@@ -126,6 +126,7 @@ export type ContextObjectListState = {
126
126
  loadedPages: number;
127
127
  hasNextPage: boolean;
128
128
  isLoading: boolean;
129
+ isExternal: boolean;
129
130
  };
130
131
  /**
131
132
  * State of the object lists offered by the context chooser. Each kind is paged on its own.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-gen-ai",
3
- "version": "11.53.0-alpha.5",
3
+ "version": "11.53.0-alpha.6",
4
4
  "description": "GoodData GenAI SDK",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -57,18 +57,18 @@
57
57
  "reselect": "5.1.1",
58
58
  "tslib": "2.8.1",
59
59
  "uuid": "11.1.1",
60
- "@gooddata/api-client-tiger": "11.53.0-alpha.5",
61
- "@gooddata/sdk-backend-spi": "11.53.0-alpha.5",
62
- "@gooddata/sdk-ui": "11.53.0-alpha.5",
63
- "@gooddata/sdk-model": "11.53.0-alpha.5",
64
- "@gooddata/sdk-ui-charts": "11.53.0-alpha.5",
65
- "@gooddata/sdk-ui-dashboard": "11.53.0-alpha.5",
66
- "@gooddata/sdk-ui-filters": "11.53.0-alpha.5",
67
- "@gooddata/sdk-ui-kit": "11.53.0-alpha.5",
68
- "@gooddata/sdk-ui-pivot": "11.53.0-alpha.5",
69
- "@gooddata/sdk-ui-semantic-search": "11.53.0-alpha.5",
70
- "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.5",
71
- "@gooddata/util": "11.53.0-alpha.5"
60
+ "@gooddata/api-client-tiger": "11.53.0-alpha.6",
61
+ "@gooddata/sdk-backend-spi": "11.53.0-alpha.6",
62
+ "@gooddata/sdk-model": "11.53.0-alpha.6",
63
+ "@gooddata/sdk-ui-charts": "11.53.0-alpha.6",
64
+ "@gooddata/sdk-ui": "11.53.0-alpha.6",
65
+ "@gooddata/sdk-ui-dashboard": "11.53.0-alpha.6",
66
+ "@gooddata/sdk-ui-filters": "11.53.0-alpha.6",
67
+ "@gooddata/sdk-ui-kit": "11.53.0-alpha.6",
68
+ "@gooddata/sdk-ui-semantic-search": "11.53.0-alpha.6",
69
+ "@gooddata/sdk-ui-pivot": "11.53.0-alpha.6",
70
+ "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.6",
71
+ "@gooddata/util": "11.53.0-alpha.6"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@microsoft/api-documenter": "^7.17.0",
@@ -111,13 +111,13 @@
111
111
  "typescript": "5.9.3",
112
112
  "vitest": "4.1.8",
113
113
  "vitest-dom": "0.1.1",
114
- "@gooddata/eslint-config": "11.53.0-alpha.5",
115
- "@gooddata/i18n-toolkit": "11.53.0-alpha.5",
116
- "@gooddata/oxlint-config": "11.53.0-alpha.5",
117
- "@gooddata/reference-workspace": "11.53.0-alpha.5",
118
- "@gooddata/sdk-backend-mockingbird": "11.53.0-alpha.5",
119
- "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.5",
120
- "@gooddata/stylelint-config": "11.53.0-alpha.5"
114
+ "@gooddata/eslint-config": "11.53.0-alpha.6",
115
+ "@gooddata/i18n-toolkit": "11.53.0-alpha.6",
116
+ "@gooddata/oxlint-config": "11.53.0-alpha.6",
117
+ "@gooddata/reference-workspace": "11.53.0-alpha.6",
118
+ "@gooddata/sdk-backend-mockingbird": "11.53.0-alpha.6",
119
+ "@gooddata/sdk-ui-theme-provider": "11.53.0-alpha.6",
120
+ "@gooddata/stylelint-config": "11.53.0-alpha.6"
121
121
  },
122
122
  "peerDependencies": {
123
123
  "react": "^18.0.0 || ^19.0.0",