@wise/dynamic-flow-client 5.28.1 → 5.29.0-experimental-f7c2300

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/build/main.mjs CHANGED
@@ -830,6 +830,7 @@ function findRendererPropsByType(root, type, predicate = () => true) {
830
830
  }
831
831
  var isType = (node, type) => node.type === type;
832
832
  var getChildren = (node) => {
833
+ var _a;
833
834
  switch (node.type) {
834
835
  case "root":
835
836
  case "box":
@@ -851,9 +852,16 @@ var getChildren = (node) => {
851
852
  return node.childrenProps ? [node.childrenProps] : [];
852
853
  case "tabs":
853
854
  return node.tabs.flatMap((c) => c.childrenProps);
855
+ case "collection": {
856
+ const { beforeSectionsProps, afterSectionsProps, sections, search } = node.state;
857
+ return [
858
+ ...beforeSectionsProps,
859
+ ...afterSectionsProps,
860
+ ...[...sections, ...(_a = search == null ? void 0 : search.initialSections) != null ? _a : []].filter((section) => section.type === "layout").flatMap((section) => section.childrenProps)
861
+ ];
862
+ }
854
863
  case "alert":
855
864
  case "button":
856
- case "collection":
857
865
  case "input-checkbox":
858
866
  case "input-date":
859
867
  case "decision":
@@ -1682,89 +1690,121 @@ function mergeArrays(valueA, valueB) {
1682
1690
  );
1683
1691
  }
1684
1692
 
1685
- // src/domain/components/collectionComponent/CollectionComponent.ts
1693
+ // src/domain/components/collectionComponent/mergeSections.ts
1694
+ var mergeSections = (existing, incoming) => {
1695
+ const knownIds = new Set(existing.map((section) => section.id));
1696
+ const newSections = incoming.filter((section) => !knownIds.has(section.id));
1697
+ const merged = existing.map((section) => {
1698
+ var _a, _b, _c, _d;
1699
+ const match = incoming.find((s) => s.id === section.id);
1700
+ if (!match) return section;
1701
+ if (section.type !== match.type) return section;
1702
+ const baseProps = {
1703
+ type: section.type,
1704
+ id: match.id,
1705
+ title: (_a = match.title) != null ? _a : section.title,
1706
+ callToAction: (_b = match.callToAction) != null ? _b : section.callToAction,
1707
+ help: (_c = match.help) != null ? _c : section.help,
1708
+ inlineAlert: (_d = match.inlineAlert) != null ? _d : section.inlineAlert
1709
+ };
1710
+ if (section.type === "layout" && match.type === "layout") {
1711
+ return __spreadProps(__spreadValues({}, baseProps), {
1712
+ type: "layout",
1713
+ components: [...section.components, ...match.components]
1714
+ });
1715
+ }
1716
+ if (section.type === "items" && match.type === "items") {
1717
+ return __spreadProps(__spreadValues({}, baseProps), {
1718
+ type: "items",
1719
+ items: [...section.items, ...match.items]
1720
+ });
1721
+ }
1722
+ return section;
1723
+ });
1724
+ return [...merged, ...newSections];
1725
+ };
1726
+
1727
+ // src/domain/components/collectionComponent/CollectionState.ts
1686
1728
  var DEBOUNCE_TIME = 800;
1687
- var createCollectionComponent = (props, onComponentUpdate, queryFunction, trackEvent) => {
1688
- const { uid, analyticsId, control, margin, tags, state } = props;
1689
- const update = getInputUpdateFunction(onComponentUpdate);
1729
+ var createCollectionState = ({
1730
+ id,
1731
+ initialState,
1732
+ searchQuery,
1733
+ onComponentUpdate,
1734
+ queryFunction,
1735
+ trackEvent
1736
+ }) => {
1737
+ const _a = initialState, { search, filters } = _a, response = __objRest(_a, ["search", "filters"]);
1690
1738
  let abortController = new AbortController();
1691
- const trackCollectionEvent = (source, status) => trackEvent(getEventName(source, status), component.state.analytics);
1692
- const query = (mode, source) => {
1693
- var _a, _b;
1739
+ const update = (updateFn) => {
1740
+ updateFn(state);
1741
+ onComponentUpdate();
1742
+ };
1743
+ const getIdleStatus = (nextCursor) => ({
1744
+ type: "idle",
1745
+ loadMore: nextCursor ? () => query("pagination") : void 0
1746
+ });
1747
+ const query = (mode) => {
1748
+ var _a2, _b;
1694
1749
  abortController.abort();
1695
1750
  abortController = new AbortController();
1696
1751
  const { signal } = abortController;
1697
- trackCollectionEvent(source != null ? source : mode, "Triggered");
1752
+ trackEvent(getEventName(mode, "Triggered"), state.analytics);
1698
1753
  queryFunction({
1699
- searchParam: (_a = component.state.search) == null ? void 0 : _a.param,
1700
- query: (_b = component.state.search) == null ? void 0 : _b.query,
1701
- cursor: mode === "pagination" ? component.state.nextCursor : void 0,
1754
+ searchParam: (_a2 = state.search) == null ? void 0 : _a2.param,
1755
+ query: (_b = state.search) == null ? void 0 : _b.query,
1756
+ cursor: mode === "pagination" ? state.nextCursor : void 0,
1702
1757
  signal,
1703
- filters: component.state.filters
1704
- }).then((response) => {
1705
- if (!response) {
1758
+ filters: state.filters
1759
+ }).then((incoming) => {
1760
+ if (!incoming || signal.aborted) {
1706
1761
  return;
1707
1762
  }
1708
- update(component, (draft) => {
1709
- draft.state = mergeState(mode, component.state, response);
1710
- draft.status = {
1711
- type: "idle",
1712
- loadMore: response.nextCursor ? paginate : void 0
1713
- };
1714
- });
1715
- trackCollectionEvent(source != null ? source : mode, "Succeeded");
1763
+ update((draft) => mergeResponse(draft, mode, incoming));
1764
+ trackEvent(getEventName(mode, "Succeeded"), state.analytics);
1716
1765
  }).catch(() => {
1717
1766
  if (!signal.aborted) {
1718
1767
  const retry = () => {
1719
- update(component, (draft) => {
1768
+ update((draft) => {
1720
1769
  draft.status = { type: "loading", reason: mode };
1721
1770
  });
1722
- query(mode, source);
1771
+ query(mode);
1723
1772
  };
1724
- update(component, (draft) => {
1725
- if (mode === "search") {
1726
- draft.state.sections = [];
1773
+ update((draft) => {
1774
+ if (mode === "search" || mode === "filter") {
1775
+ draft.sections = [];
1727
1776
  }
1728
1777
  draft.status = { type: "error", reason: mode, retry };
1729
1778
  });
1730
- trackCollectionEvent(source != null ? source : mode, "Failed");
1779
+ trackEvent(getEventName(mode, "Failed"), state.analytics);
1731
1780
  }
1732
1781
  });
1733
1782
  };
1734
1783
  const debouncedQuery = debounce(query, DEBOUNCE_TIME);
1735
- const search = () => {
1736
- abortController.abort();
1737
- debouncedQuery("search");
1738
- };
1739
- const filter = () => {
1740
- debouncedQuery("search", "filter");
1741
- debouncedQuery.flush();
1742
- };
1743
- const paginate = () => query("pagination");
1744
- const mergeState = (mode, original, incoming) => {
1745
- var _a, _b;
1746
- return {
1747
- sections: mode === "pagination" ? mergeSections(original.sections, incoming.sections) : incoming.sections,
1748
- nextCursor: incoming.nextCursor,
1749
- filters: incoming.filters ? mapFilters(incoming.filters) : original.filters,
1750
- search: incoming.search ? mapSearch(incoming.search) : original.search,
1751
- beforeSections: (_a = incoming.beforeSections) != null ? _a : original.beforeSections,
1752
- afterSections: (_b = incoming.afterSections) != null ? _b : original.afterSections,
1753
- analytics: mode === "pagination" ? recursiveMerge(original.analytics, incoming.analytics) : incoming.analytics
1754
- };
1784
+ const mergeResponse = (draft, mode, incoming) => {
1785
+ var _a2, _b, _c, _d;
1786
+ draft.sections = mode === "pagination" ? mergeSections(draft.sections, incoming.sections) : incoming.sections;
1787
+ draft.nextCursor = incoming.nextCursor;
1788
+ draft.analytics = mode === "pagination" ? recursiveMerge(draft.analytics, incoming.analytics) : incoming.analytics;
1789
+ draft.filters = incoming.filters ? mapFilters(incoming.filters) : draft.filters;
1790
+ draft.search = incoming.search ? mapSearch2(incoming.search, (_b = (_a2 = draft.search) == null ? void 0 : _a2.query) != null ? _b : "") : draft.search;
1791
+ draft.beforeSections = (_c = incoming.beforeSections) != null ? _c : draft.beforeSections;
1792
+ draft.afterSections = (_d = incoming.afterSections) != null ? _d : draft.afterSections;
1793
+ draft.status = getIdleStatus(incoming.nextCursor);
1755
1794
  };
1756
1795
  const selectFilter = (filterIndex, optionIndex) => {
1757
- var _a;
1758
- const selected = (_a = component.state.filters) == null ? void 0 : _a[filterIndex];
1796
+ var _a2;
1797
+ const selected = (_a2 = state.filters) == null ? void 0 : _a2[filterIndex];
1759
1798
  if (!selected) {
1760
1799
  return;
1761
1800
  }
1762
1801
  const currentValue = selected.options[optionIndex].selected;
1763
- update(component, (draft) => {
1764
- if (!draft.state.filters) {
1802
+ update((draft) => {
1803
+ var _a3;
1804
+ const draftFilter = (_a3 = draft.filters) == null ? void 0 : _a3[filterIndex];
1805
+ if (!draftFilter) {
1765
1806
  return;
1766
1807
  }
1767
- const draftFilter = draft.state.filters[filterIndex];
1768
1808
  if (selected.multiSelect) {
1769
1809
  draftFilter.options[optionIndex].selected = !currentValue;
1770
1810
  } else {
@@ -1772,35 +1812,86 @@ var createCollectionComponent = (props, onComponentUpdate, queryFunction, trackE
1772
1812
  draftOption.selected = index === optionIndex ? !currentValue : false;
1773
1813
  });
1774
1814
  }
1775
- draft.status = { type: "loading", reason: "search" };
1815
+ draft.status = { type: "loading", reason: "filter" };
1776
1816
  });
1777
- filter();
1817
+ debouncedQuery("filter");
1818
+ debouncedQuery.flush();
1778
1819
  };
1779
- const mapFilters = (filters) => filters == null ? void 0 : filters.map((f, filterIndex) => {
1780
- var _a;
1820
+ const changeQuery = (value) => {
1821
+ update((draft) => {
1822
+ if (draft.search) {
1823
+ draft.search.query = value;
1824
+ draft.status = { type: "loading", reason: "search" };
1825
+ }
1826
+ });
1827
+ abortController.abort();
1828
+ debouncedQuery("search");
1829
+ };
1830
+ const mapFilters = (filtersToMap) => filtersToMap == null ? void 0 : filtersToMap.map((f, filterIndex) => {
1831
+ var _a2;
1781
1832
  return __spreadProps(__spreadValues({}, f), {
1782
- options: (_a = f.options) == null ? void 0 : _a.map((option, optionIndex) => {
1783
- var _a2;
1833
+ options: (_a2 = f.options) == null ? void 0 : _a2.map((option, optionIndex) => {
1834
+ var _a3;
1784
1835
  return __spreadProps(__spreadValues({}, option), {
1785
- selected: (_a2 = option.selected) != null ? _a2 : false,
1836
+ selected: (_a3 = option.selected) != null ? _a3 : false,
1786
1837
  onSelect: () => selectFilter(filterIndex, optionIndex)
1787
1838
  });
1788
1839
  })
1789
1840
  });
1790
1841
  });
1791
- const mapSearch = (searchConfig) => searchConfig ? __spreadProps(__spreadValues({
1792
- query: ""
1793
- }, searchConfig), {
1794
- onChange(value) {
1795
- update(component, (draft) => {
1796
- if (draft.state.search) {
1797
- draft.state.search.query = value;
1798
- draft.status = { type: "loading", reason: "search" };
1799
- }
1842
+ const mapSearch2 = (searchConfig, value) => searchConfig ? __spreadProps(__spreadValues({}, searchConfig), { query: value, onChange: changeQuery }) : void 0;
1843
+ const state = __spreadProps(__spreadValues({}, response), {
1844
+ id,
1845
+ status: getIdleStatus(response.nextCursor),
1846
+ filters: mapFilters(filters),
1847
+ search: mapSearch2(search, searchQuery),
1848
+ fork(forkedId) {
1849
+ var _a2, _b;
1850
+ return createCollectionState({
1851
+ id: forkedId,
1852
+ initialState: state,
1853
+ searchQuery: (_b = (_a2 = state.search) == null ? void 0 : _a2.query) != null ? _b : "",
1854
+ onComponentUpdate,
1855
+ queryFunction,
1856
+ trackEvent
1800
1857
  });
1801
- search();
1858
+ },
1859
+ cancel() {
1860
+ debouncedQuery.cancel();
1861
+ abortController.abort();
1862
+ },
1863
+ getChildren() {
1864
+ var _a2, _b, _c, _d;
1865
+ return [
1866
+ ...(_a2 = state.beforeSections) != null ? _a2 : [],
1867
+ ...getSectionsChildren(state.sections),
1868
+ ...getSectionsChildren((_c = (_b = state.search) == null ? void 0 : _b.initialSections) != null ? _c : []),
1869
+ ...(_d = state.afterSections) != null ? _d : []
1870
+ ];
1802
1871
  }
1803
- }) : void 0;
1872
+ });
1873
+ return state;
1874
+ };
1875
+ var getSectionsChildren = (sections) => sections.filter((section) => section.type === "layout").flatMap((section) => section.components);
1876
+ var getEventName = (mode, state) => {
1877
+ const getMode = () => {
1878
+ switch (mode) {
1879
+ case "pagination":
1880
+ return "Pagination";
1881
+ case "search":
1882
+ return "Search";
1883
+ case "filter":
1884
+ return "Filter";
1885
+ }
1886
+ };
1887
+ return `Collection ${getMode()} ${state}`;
1888
+ };
1889
+
1890
+ // src/domain/components/collectionComponent/CollectionComponent.ts
1891
+ var createCollectionComponent = (props, onComponentUpdate, queryFunction, trackEvent) => {
1892
+ const { uid, analyticsId, control, margin, tags, state } = props;
1893
+ const update = getInputUpdateFunction(onComponentUpdate);
1894
+ let forkCount = 0;
1804
1895
  const component = {
1805
1896
  type: "collection",
1806
1897
  kind: "layout",
@@ -1809,21 +1900,38 @@ var createCollectionComponent = (props, onComponentUpdate, queryFunction, trackE
1809
1900
  control,
1810
1901
  margin,
1811
1902
  tags,
1812
- getChildren() {
1813
- var _a, _b, _c, _d;
1814
- return [
1815
- ...(_b = (_a = component.state) == null ? void 0 : _a.beforeSections) != null ? _b : [],
1816
- ...(_d = (_c = component.state) == null ? void 0 : _c.afterSections) != null ? _d : []
1817
- ];
1903
+ stack: [
1904
+ createCollectionState({
1905
+ id: `${uid}-state-0`,
1906
+ initialState: state,
1907
+ searchQuery: "",
1908
+ onComponentUpdate,
1909
+ queryFunction,
1910
+ trackEvent
1911
+ })
1912
+ ],
1913
+ fork() {
1914
+ const { stack } = component;
1915
+ forkCount += 1;
1916
+ const forkedState = stack[stack.length - 1].fork(`${uid}-state-${forkCount}`);
1917
+ update(component, (draft) => {
1918
+ draft.stack = [...draft.stack, forkedState];
1919
+ });
1818
1920
  },
1819
- status: {
1820
- type: "idle",
1821
- loadMore: state.nextCursor ? () => query("pagination") : void 0
1921
+ pop() {
1922
+ const [rootState, ...forkedStates] = component.stack;
1923
+ const poppedState = forkedStates.at(-1);
1924
+ if (!poppedState) {
1925
+ return;
1926
+ }
1927
+ poppedState.cancel();
1928
+ update(component, (draft) => {
1929
+ draft.stack = [rootState, ...forkedStates.slice(0, -1)];
1930
+ });
1931
+ },
1932
+ getChildren() {
1933
+ return component.stack[component.stack.length - 1].getChildren();
1822
1934
  },
1823
- state: __spreadProps(__spreadValues({}, state), {
1824
- filters: mapFilters(state.filters),
1825
- search: mapSearch(props.search)
1826
- }),
1827
1935
  start() {
1828
1936
  component.getChildren().forEach((child) => child.start());
1829
1937
  },
@@ -1833,37 +1941,6 @@ var createCollectionComponent = (props, onComponentUpdate, queryFunction, trackE
1833
1941
  };
1834
1942
  return component;
1835
1943
  };
1836
- var mergeSections = (existing, incoming) => {
1837
- const knownIds = new Set(existing.map((section) => section.id));
1838
- const newSections = incoming.filter((section) => !knownIds.has(section.id));
1839
- const merged = existing.map((section) => {
1840
- var _a, _b, _c, _d;
1841
- const match = incoming.find((s) => s.id === section.id);
1842
- if (!match) return section;
1843
- return {
1844
- id: match.id,
1845
- title: (_a = match.title) != null ? _a : section.title,
1846
- callToAction: (_b = match.callToAction) != null ? _b : section.callToAction,
1847
- help: (_c = match.help) != null ? _c : section.help,
1848
- inlineAlert: (_d = match.inlineAlert) != null ? _d : section.inlineAlert,
1849
- items: [...section.items, ...match.items]
1850
- };
1851
- });
1852
- return [...merged, ...newSections];
1853
- };
1854
- var getEventName = (mode, state) => {
1855
- const getMode = () => {
1856
- switch (mode) {
1857
- case "pagination":
1858
- return "Pagination";
1859
- case "search":
1860
- return "Search";
1861
- case "filter":
1862
- return "Filter";
1863
- }
1864
- };
1865
- return `Collection ${getMode()} ${state}`;
1866
- };
1867
1944
 
1868
1945
  // src/domain/features/collection/getPerformCollectionQuery.ts
1869
1946
  var getPerformCollectionQuery = (httpClient, baseRequest, mapState) => {
@@ -1956,9 +2033,19 @@ var hashRequest = ({
1956
2033
  }) => JSON.stringify({ query, cursor, filters: getFilterValues(filters != null ? filters : []) });
1957
2034
 
1958
2035
  // src/domain/mappers/layout/collectionLayoutToComponent.ts
1959
- var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, margin, search, tags, baseRequest }, mapperProps) => {
2036
+ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, margin, search, tags, baseRequest }, mapperProps, schemaComponents) => {
2037
+ var _a;
1960
2038
  const { httpClient, onComponentUpdate, trackEvent } = mapperProps;
1961
- const mapLayout = (layout, index) => mapLayoutToComponent(`${uid}-collection-response-${index}`, layout, mapperProps, []);
2039
+ let layoutIndex = 0;
2040
+ const mapLayout = (layout) => {
2041
+ layoutIndex += 1;
2042
+ return mapLayoutToComponent(
2043
+ `${uid}-collection-response-${layoutIndex}`,
2044
+ layout,
2045
+ mapperProps,
2046
+ schemaComponents
2047
+ );
2048
+ };
1962
2049
  const mapState = (state) => mapCollectionSpecToDomainState(state, mapperProps, mapLayout);
1963
2050
  const queryFunction = getPerformCollectionQuery(httpClient, baseRequest, mapState);
1964
2051
  const component = createCollectionComponent(
@@ -1968,8 +2055,9 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
1968
2055
  control,
1969
2056
  margin: margin != null ? margin : "md",
1970
2057
  tags,
1971
- state: mapState(initialState),
1972
- search
2058
+ state: mapState(__spreadProps(__spreadValues({}, initialState), {
2059
+ search: (_a = initialState.search) != null ? _a : search
2060
+ }))
1973
2061
  },
1974
2062
  onComponentUpdate,
1975
2063
  queryFunction,
@@ -1979,6 +2067,7 @@ var collectionLayoutToComponent = (uid, { analyticsId, control, initialState, ma
1979
2067
  };
1980
2068
  var mapCollectionSpecToDomainState = (specState, mapperProps, mapLayout) => {
1981
2069
  const {
2070
+ search,
1982
2071
  sections,
1983
2072
  filters,
1984
2073
  beforeSections,
@@ -1987,29 +2076,8 @@ var mapCollectionSpecToDomainState = (specState, mapperProps, mapLayout) => {
1987
2076
  analytics = {}
1988
2077
  } = specState;
1989
2078
  return {
1990
- sections: sections.map((section) => {
1991
- var _a;
1992
- return __spreadProps(__spreadValues({}, section), {
1993
- callToAction: getDomainLayerCallToAction(section.callToAction, mapperProps),
1994
- help: (_a = section.help) == null ? void 0 : _a.markdown,
1995
- inlineAlert: mapInlineAlert(section.inlineAlert),
1996
- items: section.items.map((item) => {
1997
- const behavior = getDomainLayerBehavior(
1998
- { behavior: item.primaryBehavior },
1999
- [],
2000
- mapperProps.registerSubmissionBehavior
2001
- );
2002
- return __spreadProps(__spreadValues({}, item), {
2003
- id: item.entityId,
2004
- onClick: item.primaryBehavior ? () => {
2005
- void mapperProps.onBehavior(behavior);
2006
- } : void 0,
2007
- callToAction: getDomainLayerCallToAction(item.callToAction, mapperProps),
2008
- inlineAlert: mapInlineAlert(item.inlineAlert)
2009
- });
2010
- })
2011
- });
2012
- }),
2079
+ search: search ? mapSearch(search, mapperProps, mapLayout) : void 0,
2080
+ sections: sections.map((section) => mapSection(section, mapperProps, mapLayout)),
2013
2081
  filters: filters == null ? void 0 : filters.map(mapFilter),
2014
2082
  beforeSections: beforeSections == null ? void 0 : beforeSections.map(mapLayout),
2015
2083
  afterSections: afterSections == null ? void 0 : afterSections.map(mapLayout),
@@ -2017,6 +2085,49 @@ var mapCollectionSpecToDomainState = (specState, mapperProps, mapLayout) => {
2017
2085
  analytics
2018
2086
  };
2019
2087
  };
2088
+ var mapSearch = (search, mapperProps, mapLayout) => {
2089
+ var _a, _b, _c;
2090
+ return search ? __spreadProps(__spreadValues({}, search), {
2091
+ help: (_a = search.help) == null ? void 0 : _a.markdown,
2092
+ hints: (_b = search.hints) != null ? _b : search.hint ? [search.hint] : void 0,
2093
+ initialSections: (_c = search.initialSections) == null ? void 0 : _c.map(
2094
+ (section) => mapSection(section, mapperProps, mapLayout)
2095
+ )
2096
+ }) : void 0;
2097
+ };
2098
+ var mapSection = (section, mapperProps, mapLayout) => {
2099
+ var _a;
2100
+ const baseProps = __spreadProps(__spreadValues({}, section), {
2101
+ callToAction: getDomainLayerCallToAction(section.callToAction, mapperProps),
2102
+ help: (_a = section.help) == null ? void 0 : _a.markdown,
2103
+ inlineAlert: mapInlineAlert(section.inlineAlert)
2104
+ });
2105
+ if (section.type === "layout") {
2106
+ return __spreadProps(__spreadValues({}, baseProps), {
2107
+ type: "layout",
2108
+ components: section.components.map(mapLayout)
2109
+ });
2110
+ }
2111
+ return __spreadProps(__spreadValues({}, baseProps), {
2112
+ type: "items",
2113
+ items: section.items.map((item) => mapResultItem(item, mapperProps))
2114
+ });
2115
+ };
2116
+ var mapResultItem = (item, mapperProps) => {
2117
+ const behavior = getDomainLayerBehavior(
2118
+ { behavior: item.primaryBehavior },
2119
+ [],
2120
+ mapperProps.registerSubmissionBehavior
2121
+ );
2122
+ return __spreadProps(__spreadValues({}, item), {
2123
+ id: item.entityId,
2124
+ onClick: item.primaryBehavior ? () => {
2125
+ void mapperProps.onBehavior(behavior);
2126
+ } : void 0,
2127
+ callToAction: getDomainLayerCallToAction(item.callToAction, mapperProps),
2128
+ inlineAlert: mapInlineAlert(item.inlineAlert)
2129
+ });
2130
+ };
2020
2131
  var mapFilter = (filter) => {
2021
2132
  const anySelected = filter.options.some((option) => option.selected);
2022
2133
  return __spreadProps(__spreadValues({}, filter), {
@@ -3281,7 +3392,7 @@ var mapLayoutToComponent = (uid, layout, mapperProps, schemaComponents) => {
3281
3392
  case "button":
3282
3393
  return buttonLayoutToComponent(uid, layout, mapperProps);
3283
3394
  case "collection":
3284
- return collectionLayoutToComponent(uid, layout, mapperProps);
3395
+ return collectionLayoutToComponent(uid, layout, mapperProps, schemaComponents);
3285
3396
  case "columns":
3286
3397
  return columnsLayoutToComponent(uid, layout, mapperProps, schemaComponents);
3287
3398
  case "decision":
@@ -8942,31 +9053,52 @@ var mapBoxControl = ({
8942
9053
 
8943
9054
  // src/renderers/mappers/collectionComponentToProps.ts
8944
9055
  var collectionComponentToProps = (component, rendererMapperProps) => {
9056
+ const { stack } = component;
9057
+ return __spreadProps(__spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "control", "margin", "tags", "fork", "pop")), rendererMapperProps), {
9058
+ state: mapCollectionState(stack[stack.length - 1], rendererMapperProps),
9059
+ depth: stack.length - 1
9060
+ });
9061
+ };
9062
+ var mapCollectionState = (state, rendererMapperProps) => {
8945
9063
  var _a, _b, _c, _d, _e;
8946
9064
  const { render } = rendererMapperProps;
8947
- const beforeSectionsProps = (_b = (_a = component.state.beforeSections) == null ? void 0 : _a.map(
8948
- (child) => componentToRendererProps(child, rendererMapperProps)
8949
- )) != null ? _b : [];
8950
- const afterSectionsProps = (_d = (_c = component.state.afterSections) == null ? void 0 : _c.map(
8951
- (child) => componentToRendererProps(child, rendererMapperProps)
8952
- )) != null ? _d : [];
8953
- return __spreadProps(__spreadValues(__spreadValues({}, pick(component, "uid", "analyticsId", "type", "control", "margin", "tags")), rendererMapperProps), {
8954
- status: component.status,
8955
- state: __spreadProps(__spreadValues({}, component.state), {
8956
- filters: (_e = component.state.filters) != null ? _e : [],
8957
- sections: component.state.sections.map((section) => __spreadProps(__spreadValues({}, section), {
8958
- callToAction: mapCallToActionOptional(section.callToAction),
8959
- items: section.items.map((item) => __spreadProps(__spreadValues({}, item), {
8960
- callToAction: mapCallToActionOptional(item.callToAction),
8961
- additionalInfo: mapAdditionalInfo2(item.additionalInfo),
8962
- disabled: rendererMapperProps.stepLoadingState !== "idle" || item.disabled
8963
- }))
8964
- })),
8965
- beforeSectionsProps,
8966
- beforeSections: beforeSectionsProps.map(render),
8967
- afterSectionsProps,
8968
- afterSections: afterSectionsProps.map(render)
8969
- })
9065
+ const { search } = state;
9066
+ const beforeSectionsProps = (_b = (_a = state.beforeSections) == null ? void 0 : _a.map((child) => componentToRendererProps(child, rendererMapperProps))) != null ? _b : [];
9067
+ const afterSectionsProps = (_d = (_c = state.afterSections) == null ? void 0 : _c.map((child) => componentToRendererProps(child, rendererMapperProps))) != null ? _d : [];
9068
+ return __spreadProps(__spreadValues({}, pick(state, "id", "status")), {
9069
+ sections: mapSections(state.sections, rendererMapperProps),
9070
+ filters: (_e = state.filters) != null ? _e : [],
9071
+ beforeSectionsProps,
9072
+ beforeSections: beforeSectionsProps.map(render),
9073
+ afterSectionsProps,
9074
+ afterSections: afterSectionsProps.map(render),
9075
+ search: search ? __spreadProps(__spreadValues({}, pick(search, "title", "hint", "hints", "query", "onChange")), {
9076
+ initialSections: search.initialSections ? mapSections(search.initialSections, rendererMapperProps) : void 0
9077
+ }) : void 0
9078
+ });
9079
+ };
9080
+ var mapSections = (sections, rendererMapperProps) => sections.map((section) => mapSection2(section, rendererMapperProps));
9081
+ var mapSection2 = (section, rendererMapperProps) => {
9082
+ const baseProps = __spreadProps(__spreadValues({}, section), {
9083
+ callToAction: mapCallToActionOptional(section.callToAction)
9084
+ });
9085
+ if (section.type === "layout") {
9086
+ const childrenProps = section.components.map(
9087
+ (child) => componentToRendererProps(child, rendererMapperProps)
9088
+ );
9089
+ return __spreadProps(__spreadValues({}, baseProps), {
9090
+ type: "layout",
9091
+ childrenProps,
9092
+ children: childrenProps.map(rendererMapperProps.render)
9093
+ });
9094
+ }
9095
+ return __spreadProps(__spreadValues({}, baseProps), {
9096
+ type: "items",
9097
+ items: section.items.map((item) => __spreadProps(__spreadValues({}, item), {
9098
+ callToAction: mapCallToActionOptional(item.callToAction),
9099
+ additionalInfo: mapAdditionalInfo2(item.additionalInfo),
9100
+ disabled: rendererMapperProps.stepLoadingState !== "idle" || item.disabled
9101
+ }))
8970
9102
  });
8971
9103
  };
8972
9104