@povio/ui 3.2.2-rc.3 → 3.2.2-rc.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.
@@ -8,7 +8,7 @@ import { useState } from "react";
8
8
  import { mergeRefs } from "@react-aria/utils";
9
9
  import { Controller } from "react-hook-form";
10
10
  //#region src/components/inputs/Selection/Autocomplete/QueryAutocomplete.tsx
11
- var QueryAutocompleteContent = ({ query, queryParams, queryOptions, queryMap, leadingContent, ...props }) => {
11
+ var QueryAutocompleteContent = ({ query, queryParams, queryOptions, queryMap, resolveSelectedItemsWithIds, leadingContent, ...props }) => {
12
12
  "use no memo";
13
13
  const ui = UIConfig.useConfig();
14
14
  const [search, setSearch] = useState("");
@@ -24,6 +24,7 @@ var QueryAutocompleteContent = ({ query, queryParams, queryOptions, queryMap, le
24
24
  queryParams,
25
25
  queryOptions,
26
26
  mapItems: (data) => getQueryItems(data, queryMap),
27
+ resolveSelectedItemsWithIds,
27
28
  search,
28
29
  initialQueryState: selectedIdsToResolve.count > 0 ? false : props.isInitialQueryDisabled ?? ui.queryAutocomplete?.isInitialQueryDisabled,
29
30
  selectedIdsToResolve: selectedIdsToResolve.items
@@ -22,6 +22,7 @@ export type QueryAutocompleteProps<TFieldValues extends FieldValues, TSelectItem
22
22
  };
23
23
  queryOptions?: ExtractQueryOptions<TQueryFn>;
24
24
  queryMap?: (data: ExtractedDataType<TQueryFn>) => SelectItem<TSelectItem["id"]>[];
25
+ resolveSelectedItemsWithIds?: boolean;
25
26
  isInitialQueryDisabled?: boolean;
26
27
  };
27
28
  export interface UseQueryAutocompleteOptions<TQueryFn extends QueryFn, TKey extends Key = Key> {
@@ -31,6 +32,7 @@ export interface UseQueryAutocompleteOptions<TQueryFn extends QueryFn, TKey exte
31
32
  };
32
33
  queryOptions?: ExtractQueryOptions<TQueryFn>;
33
34
  mapItems: (data: QueryDataType<TQueryFn>) => SelectItem<TKey>[];
35
+ resolveSelectedItemsWithIds?: boolean;
34
36
  initialQueryState?: boolean;
35
37
  search?: string;
36
38
  selectedIdsToResolve?: TKey[];
@@ -9,6 +9,7 @@ export type QuerySelectProps<TFieldValues extends FieldValues, TQueryFn extends
9
9
  queryParams?: Parameters<TQueryFn>[0];
10
10
  queryOptions?: Parameters<TQueryFn>[1];
11
11
  queryMap?: (data: QueryDataType<TQueryFn>) => SelectItem<TKey>[];
12
+ resolveSelectedItemsWithIds?: boolean;
12
13
  isInitialQueryDisabled?: boolean;
13
14
  };
14
15
  export declare const QuerySelect: <TFieldValues extends FieldValues, TQueryFn extends QueryFn, TKey extends Key = Key, TInitialSelectItem = DefaultInitialSelectItem<TKey>>(props: QuerySelectProps<TFieldValues, TQueryFn, TKey, TInitialSelectItem>) => import("react/jsx-runtime").JSX.Element;
@@ -9,8 +9,8 @@ import { mergeRefs } from "@react-aria/utils";
9
9
  import { Controller } from "react-hook-form";
10
10
  //#region src/components/inputs/Selection/Select/QuerySelect.tsx
11
11
  var QuerySelectContent = (t0) => {
12
- const $ = c(29);
13
- const { query, queryParams, queryOptions, queryMap, ...props } = t0;
12
+ const $ = c(30);
13
+ const { query, queryParams, queryOptions, queryMap, resolveSelectedItemsWithIds, ...props } = t0;
14
14
  const ui = UIConfig.useConfig();
15
15
  const [search, setSearch] = useState("");
16
16
  const isSearchable = props.isSearchable ?? ui.select.isSearchable;
@@ -30,12 +30,13 @@ var QuerySelectContent = (t0) => {
30
30
  const t2 = isSearchable ? search : void 0;
31
31
  const t3 = shouldEnableInitialQuery ? false : props.isInitialQueryDisabled ?? ui.querySelect?.isInitialQueryDisabled;
32
32
  let t4;
33
- if ($[2] !== query || $[3] !== queryOptions || $[4] !== queryParams || $[5] !== selectedIdsToResolve.items || $[6] !== t1 || $[7] !== t2 || $[8] !== t3) {
33
+ if ($[2] !== query || $[3] !== queryOptions || $[4] !== queryParams || $[5] !== resolveSelectedItemsWithIds || $[6] !== selectedIdsToResolve.items || $[7] !== t1 || $[8] !== t2 || $[9] !== t3) {
34
34
  t4 = {
35
35
  query,
36
36
  queryParams,
37
37
  queryOptions,
38
38
  mapItems: t1,
39
+ resolveSelectedItemsWithIds,
39
40
  search: t2,
40
41
  initialQueryState: t3,
41
42
  selectedIdsToResolve: selectedIdsToResolve.items
@@ -43,51 +44,52 @@ var QuerySelectContent = (t0) => {
43
44
  $[2] = query;
44
45
  $[3] = queryOptions;
45
46
  $[4] = queryParams;
46
- $[5] = selectedIdsToResolve.items;
47
- $[6] = t1;
48
- $[7] = t2;
49
- $[8] = t3;
50
- $[9] = t4;
51
- } else t4 = $[9];
47
+ $[5] = resolveSelectedItemsWithIds;
48
+ $[6] = selectedIdsToResolve.items;
49
+ $[7] = t1;
50
+ $[8] = t2;
51
+ $[9] = t3;
52
+ $[10] = t4;
53
+ } else t4 = $[10];
52
54
  const { items, totalItems, isLoading, handleEnableQuery, hasNextPage, fetchNextPage } = useQueryAutocomplete(t4);
53
55
  let onSearchChange;
54
56
  let selectProps;
55
- if ($[10] !== props) {
57
+ if ($[11] !== props) {
56
58
  const { isInitialQueryDisabled: _, onSearchChange: t5, ...t6 } = props;
57
59
  onSearchChange = t5;
58
60
  selectProps = t6;
59
- $[10] = props;
60
- $[11] = onSearchChange;
61
- $[12] = selectProps;
61
+ $[11] = props;
62
+ $[12] = onSearchChange;
63
+ $[13] = selectProps;
62
64
  } else {
63
- onSearchChange = $[11];
64
- selectProps = $[12];
65
+ onSearchChange = $[12];
66
+ selectProps = $[13];
65
67
  }
66
68
  let t5;
67
- if ($[13] !== handleEnableQuery || $[14] !== onSearchChange || $[15] !== setSearch) {
69
+ if ($[14] !== handleEnableQuery || $[15] !== onSearchChange || $[16] !== setSearch) {
68
70
  t5 = (value_0) => {
69
71
  setSearch(value_0);
70
72
  handleEnableQuery();
71
73
  onSearchChange?.(value_0);
72
74
  };
73
- $[13] = handleEnableQuery;
74
- $[14] = onSearchChange;
75
- $[15] = setSearch;
76
- $[16] = t5;
77
- } else t5 = $[16];
75
+ $[14] = handleEnableQuery;
76
+ $[15] = onSearchChange;
77
+ $[16] = setSearch;
78
+ $[17] = t5;
79
+ } else t5 = $[17];
78
80
  const handleSearchChange = t5;
79
81
  let t6;
80
- if ($[17] !== handleSearchChange || $[18] !== isSearchable) {
82
+ if ($[18] !== handleSearchChange || $[19] !== isSearchable) {
81
83
  t6 = isSearchable && {
82
84
  isClientSearchDisabled: true,
83
85
  onSearchChange: handleSearchChange
84
86
  };
85
- $[17] = handleSearchChange;
86
- $[18] = isSearchable;
87
- $[19] = t6;
88
- } else t6 = $[19];
87
+ $[18] = handleSearchChange;
88
+ $[19] = isSearchable;
89
+ $[20] = t6;
90
+ } else t6 = $[20];
89
91
  let t7;
90
- if ($[20] !== fetchNextPage || $[21] !== handleEnableQuery || $[22] !== hasNextPage || $[23] !== isLoading || $[24] !== items || $[25] !== selectProps || $[26] !== t6 || $[27] !== totalItems) {
92
+ if ($[21] !== fetchNextPage || $[22] !== handleEnableQuery || $[23] !== hasNextPage || $[24] !== isLoading || $[25] !== items || $[26] !== selectProps || $[27] !== t6 || $[28] !== totalItems) {
91
93
  t7 = /* @__PURE__ */ jsx(Select, {
92
94
  ...selectProps,
93
95
  items,
@@ -99,16 +101,16 @@ var QuerySelectContent = (t0) => {
99
101
  onFocusCapture: handleEnableQuery,
100
102
  ...t6
101
103
  });
102
- $[20] = fetchNextPage;
103
- $[21] = handleEnableQuery;
104
- $[22] = hasNextPage;
105
- $[23] = isLoading;
106
- $[24] = items;
107
- $[25] = selectProps;
108
- $[26] = t6;
109
- $[27] = totalItems;
110
- $[28] = t7;
111
- } else t7 = $[28];
104
+ $[21] = fetchNextPage;
105
+ $[22] = handleEnableQuery;
106
+ $[23] = hasNextPage;
107
+ $[24] = isLoading;
108
+ $[25] = items;
109
+ $[26] = selectProps;
110
+ $[27] = t6;
111
+ $[28] = totalItems;
112
+ $[29] = t7;
113
+ } else t7 = $[29];
112
114
  return t7;
113
115
  };
114
116
  var QuerySelect = (props) => {
@@ -1,6 +1,6 @@
1
1
  import { Key } from 'react-aria-components';
2
2
  import { QueryFn, UseQueryAutocompleteOptions } from '../components/inputs/Selection/Autocomplete/queryAutocomplete.types';
3
- export declare const useQueryAutocomplete: <TQueryFn extends QueryFn, TKey extends Key = Key>({ query, queryParams, queryOptions, mapItems, initialQueryState, search, selectedIdsToResolve, }: UseQueryAutocompleteOptions<TQueryFn, TKey>) => {
3
+ export declare const useQueryAutocomplete: <TQueryFn extends QueryFn, TKey extends Key = Key>({ query, queryParams, queryOptions, mapItems, resolveSelectedItemsWithIds, initialQueryState, search, selectedIdsToResolve, }: UseQueryAutocompleteOptions<TQueryFn, TKey>) => {
4
4
  data: any;
5
5
  isLoading: boolean;
6
6
  isQueryEnabled: boolean;
@@ -4,10 +4,12 @@ import { useCallback, useEffect, useMemo, useState } from "react";
4
4
  var isFilterSearchParams = (params) => {
5
5
  return typeof params === "object" && params !== null && "filter" in params;
6
6
  };
7
- var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, initialQueryState, search, selectedIdsToResolve = [] }) => {
7
+ var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, resolveSelectedItemsWithIds = false, initialQueryState, search, selectedIdsToResolve = [] }) => {
8
8
  "use no memo";
9
- const [isQueryEnabled, setIsQueryEnabled] = useState(!initialQueryState);
10
- const queryResult = query(search === void 0 ? queryParams : {
9
+ const shouldResolveSelectedItems = selectedIdsToResolve.length > 0;
10
+ const shouldUseSelectedItemsQuery = resolveSelectedItemsWithIds && shouldResolveSelectedItems;
11
+ const [isQueryEnabled, setIsQueryEnabled] = useState(!initialQueryState && !shouldUseSelectedItemsQuery);
12
+ const resolvedQueryParams = search === void 0 ? queryParams : {
11
13
  ...queryParams,
12
14
  limit: queryParams?.limit ?? ApiQueryUtils.DEFAULT_LIMIT,
13
15
  search,
@@ -15,15 +17,23 @@ var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, initia
15
17
  ...isFilterSearchParams(queryParams) ? queryParams.filter : {},
16
18
  search
17
19
  }
18
- }, {
20
+ };
21
+ const isInfiniteQueryResult = (result) => {
22
+ return "hasNextPage" in result && "fetchNextPage" in result;
23
+ };
24
+ const getDataForMapping = (result_0) => isInfiniteQueryResult(result_0) ? result_0.data?.pages?.flatMap((page) => page?.items ?? []) : result_0.data;
25
+ const queryResult = query(resolvedQueryParams, {
19
26
  ...queryOptions,
20
27
  enabled: isQueryEnabled && (queryOptions?.enabled ?? true)
21
28
  });
22
29
  const data = queryResult.data;
23
- const isLoading = queryResult.isLoading;
24
- const isInfiniteQueryResult = (result) => {
25
- return "hasNextPage" in result && "fetchNextPage" in result;
26
- };
30
+ const selectedItemsQueryResult = query({
31
+ ...queryParams,
32
+ ids: selectedIdsToResolve
33
+ }, {
34
+ ...queryOptions,
35
+ enabled: shouldUseSelectedItemsQuery && (queryOptions?.enabled ?? true)
36
+ });
27
37
  const handleEnableQuery = () => {
28
38
  setIsQueryEnabled(true);
29
39
  };
@@ -33,13 +43,22 @@ var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, initia
33
43
  const fetchNextPage = infiniteQueryResult?.fetchNextPage;
34
44
  const isFetchingNextPage = infiniteQueryResult?.isFetchingNextPage ?? false;
35
45
  const totalItems = infiniteQueryResult?.data?.pages?.[0]?.totalItems;
46
+ const shouldUseOnlySelectedItemsQuery = shouldUseSelectedItemsQuery && !isQueryEnabled;
47
+ const queryData = getDataForMapping(queryResult);
48
+ const selectedItemsQueryData = getDataForMapping(selectedItemsQueryResult);
49
+ const itemsQueryData = shouldUseOnlySelectedItemsQuery ? selectedItemsQueryData : queryData;
50
+ const selectedItemsDataToMerge = shouldUseOnlySelectedItemsQuery ? void 0 : selectedItemsQueryData;
36
51
  const items = useMemo(() => {
37
- if (!data) return [];
38
- return mapItems(isInfiniteQuery ? data.pages?.flatMap((page) => page?.items ?? []) : data);
52
+ const queryItems = itemsQueryData ? mapItems(itemsQueryData) : [];
53
+ const itemsById = new Map(queryItems.map((item) => [item.id, item]));
54
+ (selectedItemsDataToMerge ? mapItems(selectedItemsDataToMerge) : []).forEach((item_0) => {
55
+ itemsById.set(item_0.id, item_0);
56
+ });
57
+ return Array.from(itemsById.values());
39
58
  }, [
40
- data,
41
- isInfiniteQuery,
42
- mapItems
59
+ itemsQueryData,
60
+ mapItems,
61
+ selectedItemsDataToMerge
43
62
  ]);
44
63
  const selectedIdsToResolveSet = useMemo(() => new Set(selectedIdsToResolve), [selectedIdsToResolve]);
45
64
  const handleFetchNextPage = useCallback(() => {
@@ -51,8 +70,8 @@ var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, initia
51
70
  isFetchingNextPage
52
71
  ]);
53
72
  useEffect(() => {
54
- if (!isQueryEnabled || !isInfiniteQuery || !hasNextPage || isFetchingNextPage || selectedIdsToResolveSet.size === 0) return;
55
- const loadedItemIds = new Set(items.map((item) => item.id));
73
+ if (!isQueryEnabled || resolveSelectedItemsWithIds || !isInfiniteQuery || !hasNextPage || isFetchingNextPage || selectedIdsToResolveSet.size === 0) return;
74
+ const loadedItemIds = new Set(items.map((item_1) => item_1.id));
56
75
  if (selectedIdsToResolve.some((id) => !loadedItemIds.has(id))) handleFetchNextPage();
57
76
  }, [
58
77
  handleFetchNextPage,
@@ -61,12 +80,13 @@ var useQueryAutocomplete = ({ query, queryParams, queryOptions, mapItems, initia
61
80
  isInfiniteQuery,
62
81
  isQueryEnabled,
63
82
  items,
83
+ resolveSelectedItemsWithIds,
64
84
  selectedIdsToResolve,
65
85
  selectedIdsToResolveSet
66
86
  ]);
67
87
  return {
68
88
  data,
69
- isLoading: isLoading || isFetchingNextPage,
89
+ isLoading: queryResult.isLoading || isFetchingNextPage || selectedItemsQueryResult.isLoading,
70
90
  isQueryEnabled,
71
91
  handleEnableQuery,
72
92
  items,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@povio/ui",
3
- "version": "3.2.2-rc.3",
3
+ "version": "3.2.2-rc.5",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",