@civicactions/cmsds-open-data-components 4.0.19-alpha.4 → 4.0.19

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/dist/main.js CHANGED
@@ -2,7 +2,7 @@ import "./main.css";
2
2
  import {jsx as $hgUW1$jsx, jsxs as $hgUW1$jsxs, Fragment as $hgUW1$Fragment} from "react/jsx-runtime";
3
3
  import {Accordion as $hgUW1$Accordion, AccordionItem as $hgUW1$AccordionItem, Button as $hgUW1$Button, CloseIconThin as $hgUW1$CloseIconThin, ArrowIcon as $hgUW1$ArrowIcon, Spinner as $hgUW1$Spinner, Alert as $hgUW1$Alert, Dialog as $hgUW1$Dialog, TextField as $hgUW1$TextField, Dropdown as $hgUW1$Dropdown, Pagination as $hgUW1$Pagination, Tooltip as $hgUW1$Tooltip, TooltipIcon as $hgUW1$TooltipIcon, Choice as $hgUW1$Choice, Table as $hgUW1$Table, TableHead as $hgUW1$TableHead, TableRow as $hgUW1$TableRow, TableCell as $hgUW1$TableCell, TableBody as $hgUW1$TableBody, Tabs as $hgUW1$Tabs, TabPanel as $hgUW1$TabPanel, ExternalLinkIcon as $hgUW1$ExternalLinkIcon, Badge as $hgUW1$Badge} from "@cmsgov/design-system";
4
4
  import $hgUW1$react, {createContext as $hgUW1$createContext, useState as $hgUW1$useState, useRef as $hgUW1$useRef, useEffect as $hgUW1$useEffect, useContext as $hgUW1$useContext, useMemo as $hgUW1$useMemo, useCallback as $hgUW1$useCallback} from "react";
5
- import {NavLink as $hgUW1$NavLink, Link as $hgUW1$Link, useNavigate as $hgUW1$useNavigate, useLocation as $hgUW1$useLocation, useSearchParams as $hgUW1$useSearchParams} from "react-router-dom";
5
+ import {NavLink as $hgUW1$NavLink, Link as $hgUW1$Link, useNavigate as $hgUW1$useNavigate, useSearchParams as $hgUW1$useSearchParams, useLocation as $hgUW1$useLocation} from "react-router-dom";
6
6
  import $hgUW1$qs from "qs";
7
7
  import $hgUW1$axios from "axios";
8
8
  import {useQuery as $hgUW1$useQuery, QueryClient as $hgUW1$QueryClient, QueryClientProvider as $hgUW1$QueryClientProvider} from "@tanstack/react-query";
@@ -1426,136 +1426,113 @@ async function $eff7d34c30f5a0fc$export$2d2256cb46e92ff7(rootUrl, options, ACA)
1426
1426
 
1427
1427
 
1428
1428
  const $e873081a6e8f024e$export$1040147c129fdde9 = (query)=>{
1429
- // Only allow letters, numbers, spaces, and empty string
1430
- // A search containing any special character will be rejected
1431
1429
  return /^[a-zA-Z0-9 ]*$/.test(query.trim());
1432
1430
  };
1431
+ const $e873081a6e8f024e$var$sortOptions = [
1432
+ {
1433
+ label: 'Newest',
1434
+ value: 'newest'
1435
+ },
1436
+ {
1437
+ label: 'Oldest',
1438
+ value: 'oldest'
1439
+ },
1440
+ {
1441
+ label: 'Title A-Z',
1442
+ value: 'titleAZ'
1443
+ },
1444
+ {
1445
+ label: 'Title Z-A',
1446
+ value: 'titleZA'
1447
+ }
1448
+ ];
1433
1449
  const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1434
1450
  const { rootUrl: rootUrl, enableSort: enableSort = true, enablePagination: enablePagination = true, defaultPageSize: defaultPageSize = 10, defaultSort: defaultSort = {
1435
1451
  defaultSort: 'modified',
1436
1452
  defaultOrder: 'desc'
1437
1453
  }, pageTitle: pageTitle = 'Dataset Explorer', categoriesTitle: categoriesTitle = 'Categories', filterTitle: filterTitle = 'Tags', showLargeFileWarning: showLargeFileWarning = false, largeFileThemes: largeFileThemes, introText: introText = '', showDownloadIcon: showDownloadIcon = false, altMobileSearchButton: altMobileSearchButton, dataDictionaryLinks: dataDictionaryLinks = false, showDateDetails: showDateDetails = false, showTopics: showTopics = false, topicSlugFunction: topicSlugFunction, children: children } = props;
1438
1454
  const { ACA: ACA } = (0, $hgUW1$useContext)((0, $844981eac9b63865$export$eccc29c8d0ff408));
1439
- const sortOptions = [
1440
- {
1441
- label: 'Newest',
1442
- value: 'newest'
1443
- },
1444
- {
1445
- label: 'Oldest',
1446
- value: 'oldest'
1447
- },
1448
- {
1449
- label: 'Title A-Z',
1450
- value: 'titleAZ'
1451
- },
1452
- {
1453
- label: 'Title Z-A',
1454
- value: 'titleZA'
1455
- }
1456
- ];
1457
- const defaultSortBy = "";
1458
- const defaultFulltext = "";
1459
- const defaultSelectedFacets = {
1460
- theme: [],
1461
- keyword: []
1462
- };
1463
- const defaultSortOrder = "";
1464
- const defaultPage = 1;
1465
- const location = (0, $hgUW1$useLocation)();
1466
- const transformedParams = (0, $eff7d34c30f5a0fc$export$60ec7cc1d341a524)(location.search, defaultSort);
1467
- const [currentResultNumbers, setCurrentResultNumbers] = (0, $hgUW1$useState)({
1468
- total: 0,
1469
- startingNumber: 0,
1470
- endingNumber: 0
1471
- });
1472
- const [noResults, setNoResults] = (0, $hgUW1$useState)(false);
1473
- const [announcementText, setAnnouncementText] = (0, $hgUW1$useState)('');
1474
- let [searchParams, setSearchParams] = (0, $hgUW1$useSearchParams)();
1475
- const [fulltext, setFullText] = (0, $hgUW1$useState)(transformedParams.fulltext);
1476
- const [filterText, setFilterText] = (0, $hgUW1$useState)(transformedParams.fulltext);
1477
- const [totalItems, setTotalItems] = (0, $hgUW1$useState)(0);
1478
- const [page, setPage] = (0, $hgUW1$useState)(transformedParams.page ? transformedParams.page : defaultPage);
1479
- const [sort, setSort] = (0, $hgUW1$useState)(transformedParams.sort ? transformedParams.sort : defaultSort ? defaultSort.defaultSort : defaultSortBy);
1480
- const [sortOrder, setSortOrder] = (0, $hgUW1$useState)(transformedParams.sortOrder ? transformedParams.sortOrder : defaultSort ? defaultSort.defaultOrder : defaultSortOrder);
1481
- const [sortDisplay, setSortDisplay] = (0, $hgUW1$useState)(()=>{
1482
- return sort === 'modified' ? sortOrder === 'desc' ? 'newest' : 'oldest' : sortOrder === 'desc' ? 'titleZA' : 'titleAZ';
1483
- });
1484
- const [selectedFacets, setSelectedFacets] = (0, $hgUW1$useState)(transformedParams.selectedFacets ? transformedParams.selectedFacets : {
1485
- theme: [],
1486
- keyword: []
1487
- });
1455
+ const [searchParams, setSearchParams] = (0, $hgUW1$useSearchParams)();
1456
+ // Derive all search state from URL params
1457
+ const selectedFacets = (0, $hgUW1$useMemo)(()=>({
1458
+ theme: searchParams.getAll('theme'),
1459
+ keyword: searchParams.getAll('keyword')
1460
+ }), [
1461
+ searchParams
1462
+ ]);
1463
+ const page = Number(searchParams.get('page')) || 1;
1464
+ const sort = searchParams.get('sort') || defaultSort.defaultSort;
1465
+ const sortOrder = searchParams.get('sortOrder') || defaultSort.defaultOrder;
1466
+ const fulltext = searchParams.get('fulltext') || '';
1467
+ const sortDisplay = sort === 'modified' ? sortOrder === 'desc' ? 'newest' : 'oldest' : sortOrder === 'desc' ? 'titleZA' : 'titleAZ';
1468
+ // Local UI state only
1469
+ const [filterText, setFilterText] = (0, $hgUW1$useState)(fulltext);
1488
1470
  const [invalidSearch, setInvalidSearch] = (0, $hgUW1$useState)(false);
1489
- const setSortOptions = (value)=>{
1490
- setSortDisplay(value);
1471
+ // Sync filterText from URL on back/forward
1472
+ (0, $hgUW1$useEffect)(()=>{
1473
+ setFilterText(fulltext);
1474
+ }, [
1475
+ fulltext
1476
+ ]);
1477
+ function buildNextParams(overrides) {
1478
+ const next = new URLSearchParams(searchParams);
1479
+ Object.entries(overrides).forEach(([key, value])=>{
1480
+ next.delete(key);
1481
+ if (value === null) return;
1482
+ const values = Array.isArray(value) ? value : [
1483
+ value
1484
+ ];
1485
+ values.forEach((v)=>next.append(key, v));
1486
+ });
1487
+ return next;
1488
+ }
1489
+ function updateSelectedFacets(key, value) {
1490
+ const current = searchParams.getAll(key);
1491
+ const idx = current.indexOf(value);
1492
+ const updated = idx > -1 ? current.filter((_, i)=>i !== idx) : [
1493
+ ...current,
1494
+ value
1495
+ ];
1496
+ setSearchParams(buildNextParams({
1497
+ [key]: updated.length ? updated : null,
1498
+ page: null
1499
+ }));
1500
+ }
1501
+ const setSortOptionsHandler = (value)=>{
1502
+ let nextSort;
1503
+ let nextSortOrder;
1491
1504
  switch(value){
1492
1505
  case 'newest':
1493
- setSort('modified');
1494
- setSortOrder('desc');
1506
+ nextSort = 'modified';
1507
+ nextSortOrder = 'desc';
1495
1508
  break;
1496
1509
  case 'oldest':
1497
- setSort('modified');
1498
- setSortOrder('asc');
1510
+ nextSort = 'modified';
1511
+ nextSortOrder = 'asc';
1499
1512
  break;
1500
1513
  case 'titleAZ':
1501
- setSort('title');
1502
- setSortOrder('asc');
1514
+ nextSort = 'title';
1515
+ nextSortOrder = 'asc';
1503
1516
  break;
1504
1517
  case 'titleZA':
1505
- setSort('title');
1506
- setSortOrder('desc');
1518
+ nextSort = 'title';
1519
+ nextSortOrder = 'desc';
1507
1520
  break;
1521
+ default:
1522
+ return;
1508
1523
  }
1509
- };
1510
- function updateSelectedFacets(key, value) {
1511
- const newFacets = {
1512
- ...selectedFacets
1524
+ const overrides = {
1525
+ sort: nextSort === defaultSort.defaultSort ? null : nextSort,
1526
+ sortOrder: nextSortOrder === defaultSort.defaultOrder ? null : nextSortOrder
1513
1527
  };
1514
- if (key === 'theme') {
1515
- const existingFacet = newFacets.theme.findIndex((s)=>s === value);
1516
- if (existingFacet > -1) newFacets.theme.splice(existingFacet, 1);
1517
- else newFacets.theme.push(value);
1518
- }
1519
- if (key === 'keyword') {
1520
- const existingFacet = newFacets.keyword.findIndex((s)=>s === value);
1521
- if (existingFacet > -1) newFacets.keyword.splice(existingFacet, 1);
1522
- else newFacets.keyword.push(value);
1523
- }
1524
- const urlString = (0, $hgUW1$qs).stringify({
1525
- theme: newFacets.theme,
1526
- keyword: newFacets.keyword
1527
- }, {
1528
- encodeValuesOnly: true,
1529
- addQueryPrefix: true
1530
- });
1531
- setSelectedFacets(newFacets);
1532
- const url = new URL(window.location.href);
1533
- window.history.pushState({}, '', `${url.origin}${url.pathname}${urlString}`);
1534
- }
1535
- const pageSize = defaultPageSize;
1528
+ setSearchParams(buildNextParams(overrides));
1529
+ };
1536
1530
  function resetFilters() {
1537
- setFullText(defaultFulltext);
1538
- setFilterText(defaultFulltext);
1539
- setSelectedFacets(defaultSelectedFacets);
1540
- setPage(defaultPage);
1541
- const url = new URL(window.location.href);
1542
- window.history.pushState({}, '', `${url.origin}${url.pathname}`);
1543
- }
1544
- function buildSearchParams(includePage) {
1545
- let newParams = {};
1546
- if (Number(page) !== 1 && includePage) newParams.page = page;
1547
- if (sort !== defaultSort.defaultSort) newParams.sort = sort;
1548
- if (sortOrder !== defaultSort.defaultOrder) newParams.sortOrder = sortOrder;
1549
- if (fulltext !== '') newParams.fulltext = fulltext;
1550
- if (Object.keys(selectedFacets).length) Object.keys(selectedFacets).forEach((key)=>{
1551
- newParams[key] = selectedFacets[key];
1552
- });
1553
- return (0, $hgUW1$qs).stringify(newParams, {
1554
- addQueryPrefix: includePage,
1555
- encode: true
1556
- });
1531
+ setFilterText('');
1532
+ setSearchParams({});
1557
1533
  }
1558
- let params = {
1534
+ const pageSize = defaultPageSize;
1535
+ const params = {
1559
1536
  fulltext: fulltext ? fulltext : undefined,
1560
1537
  ...selectedFacets,
1561
1538
  sort: sort ? sort : undefined,
@@ -1563,7 +1540,7 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1563
1540
  page: page !== 1 ? page : undefined,
1564
1541
  ['page-size']: pageSize !== 10 ? pageSize : undefined
1565
1542
  };
1566
- const { data: data, isPending: isPending, error: error } = (0, $hgUW1$useQuery)({
1543
+ const { data: data, isPending: isPending } = (0, $hgUW1$useQuery)({
1567
1544
  queryKey: [
1568
1545
  "datasets",
1569
1546
  params
@@ -1575,55 +1552,30 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1575
1552
  })}`);
1576
1553
  }
1577
1554
  });
1578
- // Sync totalItems state with API response data
1579
- // Moved to useEffect to prevent state updates during render (which can cause infinite loops)
1580
- (0, $hgUW1$useEffect)(()=>{
1581
- if (data?.data?.total !== undefined && data.data.total !== totalItems) setTotalItems(data.data.total);
1582
- }, [
1583
- data?.data?.total
1584
- ]);
1585
- const facets = data && data.data.facets ? (0, $eff7d34c30f5a0fc$export$959638e8dca60ce6)(data ? data.data.facets : []) : {
1555
+ const totalItems = data?.data?.total ? Number(data.data.total) : 0;
1556
+ const facets = data && data.data.facets ? (0, $eff7d34c30f5a0fc$export$959638e8dca60ce6)(data.data.facets) : {
1586
1557
  theme: null,
1587
1558
  keyword: null
1588
1559
  };
1589
- (0, $hgUW1$useEffect)(()=>{
1590
- const baseNumber = Number(totalItems) > 0 ? 1 : 0;
1591
- const startingNumber = baseNumber + (Number(pageSize) * Number(page) - Number(pageSize));
1592
- const endingNumber = Number(pageSize) * Number(page);
1593
- setCurrentResultNumbers({
1594
- total: Number(totalItems),
1595
- startingNumber: Number(totalItems) >= startingNumber ? startingNumber : 0,
1596
- endingNumber: Number(totalItems) < endingNumber ? Number(totalItems) : endingNumber
1597
- });
1598
- if (totalItems <= 0 && currentResultNumbers !== null) setNoResults(true);
1599
- else setNoResults(false);
1560
+ const currentResultNumbers = (0, $hgUW1$useMemo)(()=>{
1561
+ const baseNumber = totalItems > 0 ? 1 : 0;
1562
+ const startingNumber = baseNumber + (pageSize * page - pageSize);
1563
+ const endingNumber = pageSize * page;
1564
+ return {
1565
+ total: totalItems,
1566
+ startingNumber: totalItems >= startingNumber ? startingNumber : 0,
1567
+ endingNumber: totalItems < endingNumber ? totalItems : endingNumber
1568
+ };
1600
1569
  }, [
1601
1570
  totalItems,
1602
1571
  pageSize,
1603
1572
  page
1604
1573
  ]);
1605
- (0, $hgUW1$useEffect)(()=>{
1606
- if (page !== 1 && (transformedParams.fulltext !== fulltext || transformedParams.selectedFacets !== selectedFacets)) setPage(1);
1607
- }, [
1608
- fulltext,
1609
- selectedFacets
1610
- ]);
1611
- (0, $hgUW1$useEffect)(()=>{
1612
- if (totalItems !== null && totalItems !== undefined && totalItems > 0) {
1613
- var params = buildSearchParams(true);
1614
- if (params !== location.search) setSearchParams(params);
1615
- }
1616
- }, [
1617
- page,
1618
- sort,
1619
- sortOrder,
1620
- totalItems
1621
- ]);
1622
- (0, $hgUW1$useEffect)(()=>{
1623
- // No results found
1624
- if (noResults) setAnnouncementText('No results found.');
1625
- else if (!isPending && (!data || !data.data.results)) setAnnouncementText('Could not connect to the API.');
1626
- else setAnnouncementText(`Showing ${currentResultNumbers.startingNumber} to ${currentResultNumbers.endingNumber} of ${currentResultNumbers.total} datasets`);
1574
+ const noResults = totalItems <= 0 && !isPending && data?.data?.results !== undefined;
1575
+ const announcementText = (0, $hgUW1$useMemo)(()=>{
1576
+ if (noResults) return 'No results found.';
1577
+ if (!isPending && (!data || !data.data.results)) return 'Could not connect to the API.';
1578
+ return `Showing ${currentResultNumbers.startingNumber} to ${currentResultNumbers.endingNumber} of ${currentResultNumbers.total} datasets`;
1627
1579
  }, [
1628
1580
  data,
1629
1581
  isPending,
@@ -1674,8 +1626,17 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1674
1626
  if (filterText) {
1675
1627
  if ($e873081a6e8f024e$export$1040147c129fdde9(filterText)) {
1676
1628
  setInvalidSearch(false);
1677
- setFullText(filterText);
1629
+ setSearchParams(buildNextParams({
1630
+ fulltext: filterText,
1631
+ page: null
1632
+ }));
1678
1633
  } else setInvalidSearch(true);
1634
+ } else {
1635
+ setInvalidSearch(false);
1636
+ setSearchParams(buildNextParams({
1637
+ fulltext: null,
1638
+ page: null
1639
+ }));
1679
1640
  }
1680
1641
  },
1681
1642
  className: "dkan-dataset-search ds-l-form-row ds-u-padding-bottom--4 ds-u-border-bottom--1",
@@ -1763,12 +1724,12 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1763
1724
  enableSort && /*#__PURE__*/ (0, $hgUW1$jsx)("div", {
1764
1725
  className: "ds-l-col--12 ds-l-sm-col--6 ds-l-md-col--4 ds-u-sm-padding-right--0",
1765
1726
  children: /*#__PURE__*/ (0, $hgUW1$jsx)((0, $hgUW1$Dropdown), {
1766
- options: sortOptions,
1727
+ options: $e873081a6e8f024e$var$sortOptions,
1767
1728
  value: sortDisplay,
1768
1729
  label: "Sort",
1769
1730
  labelClassName: "ds-u-margin-top--0",
1770
1731
  name: "dataset_search_sort",
1771
- onChange: (e)=>setSortOptions(e.target.value)
1732
+ onChange: (e)=>setSortOptionsHandler(e.target.value)
1772
1733
  })
1773
1734
  })
1774
1735
  ]
@@ -1782,47 +1743,42 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1782
1743
  role: "region",
1783
1744
  heading: "No results found."
1784
1745
  }),
1785
- data && data.data.results ? Object.keys(data.data.results).map((key)=>{
1786
- return data.data.results[key];
1787
- }).map((item)=>{
1788
- function getDownloadUrl(item) {
1789
- let distribution_array = item.distribution ? item.distribution : [];
1790
- return distribution_array.length ? item.distribution[0].downloadURL : null;
1791
- }
1792
- let showLargeFile = false;
1793
- if (largeFileThemes && item.theme) largeFileThemes.forEach((theme)=>{
1794
- if (item.theme.includes(theme)) showLargeFile = true;
1795
- });
1796
- let dateDetailProps = {};
1797
- if (showDateDetails) dateDetailProps = {
1746
+ data && data.data.results ? Object.values(data.data.results).map((item)=>{
1747
+ const downloadUrl = (()=>{
1748
+ const distribution_array = item.distribution ?? [];
1749
+ return distribution_array.length ? distribution_array[0].downloadURL : null;
1750
+ })();
1751
+ const showLargeFile = largeFileThemes && item.theme ? largeFileThemes.some((theme)=>item.theme.includes(theme)) : false;
1752
+ const dateDetailProps = showDateDetails ? {
1798
1753
  showDateDetails: showDateDetails,
1799
1754
  released: item.released,
1800
1755
  refresh: item.nextUpdateDate
1801
- };
1802
- let topicProps = {};
1803
- if (showTopics) {
1804
- // Generate topic slugs mapping for this item's themes
1805
- let topicSlugs = {};
1756
+ } : {};
1757
+ const topicProps = (()=>{
1758
+ if (!showTopics) return {};
1759
+ const topicSlugs = {};
1806
1760
  if (item.theme && Array.isArray(item.theme)) item.theme.forEach((topic)=>{
1807
- if (topic) topicSlugs[topic] = topicSlugFunction ? topicSlugFunction(topic) : topic.split(' ').join('-').toLowerCase();
1761
+ if (topic) {
1762
+ const slug = topicSlugFunction ? topicSlugFunction(topic) : topic.split(' ').join('-').toLowerCase();
1763
+ if (slug) topicSlugs[topic] = slug;
1764
+ }
1808
1765
  });
1809
- topicProps = {
1766
+ return {
1810
1767
  showTopics: showTopics,
1811
1768
  theme: item.theme,
1812
1769
  topicSlugs: topicSlugs
1813
1770
  };
1814
- }
1771
+ })();
1815
1772
  return /*#__PURE__*/ (0, $hgUW1$jsx)((0, $52c6454cae137465$export$2e2bcd8739ae039), {
1816
- location: location,
1817
1773
  title: item.title,
1818
1774
  modified: item.modified,
1819
1775
  description: item.description,
1820
1776
  identifier: item.identifier,
1821
- downloadUrl: showDownloadIcon ? getDownloadUrl(item) : null,
1777
+ downloadUrl: showDownloadIcon ? downloadUrl : null,
1822
1778
  largeFile: showLargeFile,
1823
1779
  paginationEnabled: enablePagination,
1824
1780
  dataDictionaryLinks: dataDictionaryLinks,
1825
- distribution: "%Ref:distribution" in item ? item["%Ref:distribution"][0] : {},
1781
+ distribution: "%Ref:distribution" in item && item["%Ref:distribution"] ? item["%Ref:distribution"][0] : {},
1826
1782
  ...dateDetailProps,
1827
1783
  ...topicProps
1828
1784
  }, item.identifier);
@@ -1833,18 +1789,21 @@ const $e873081a6e8f024e$var$DatasetSearch = (props)=>{
1833
1789
  })
1834
1790
  ]
1835
1791
  }),
1836
- enablePagination && data && data.data.total && data.data.total != 0 && /*#__PURE__*/ (0, $hgUW1$jsx)((0, $hgUW1$Pagination), {
1792
+ enablePagination && data && data.data.total && Number(data.data.total) !== 0 && /*#__PURE__*/ (0, $hgUW1$jsx)((0, $hgUW1$Pagination), {
1837
1793
  currentPage: Number(page),
1838
1794
  totalPages: Math.ceil(Number(data.data.total) / pageSize),
1839
1795
  onPageChange: (evt, page)=>{
1840
1796
  evt.preventDefault();
1841
1797
  window.scroll(0, 0);
1842
- setPage(page);
1798
+ setSearchParams(buildNextParams({
1799
+ page: page > 1 ? String(page) : null
1800
+ }));
1843
1801
  },
1844
- renderHref: (page)=>{
1845
- const searchParams = buildSearchParams(false);
1846
- const includeAnd = searchParams ? '&' : '';
1847
- return `/datasets?page=${page}${includeAnd}${searchParams}`;
1802
+ renderHref: (p)=>{
1803
+ const next = buildNextParams({
1804
+ page: p > 1 ? String(p) : null
1805
+ });
1806
+ return `/datasets?${next.toString()}`;
1848
1807
  }
1849
1808
  })
1850
1809
  ]
@@ -3774,10 +3733,11 @@ const $6f4318b1e14124e5$var$FilterDataset = ()=>{
3774
3733
  const { distribution: distribution, resource: resource, customColumns: customColumns = [], enableEmptyFilters: enableEmptyFilters } = (0, $hgUW1$useContext)((0, $43a30d745a7bbc86$export$2e2bcd8739ae039));
3775
3734
  const { setPage: setPage } = (0, $hgUW1$useContext)((0, $ee0d4d4f34048447$export$f814ea079e65d8fe));
3776
3735
  if (!resource) return null;
3777
- const customColumnHeaders = (0, $7264a673914aa746$export$8049e8f40a9bdfb8)(customColumns, resource.columns, resource.schema[distribution.identifier]);
3778
3736
  const id = distribution.identifier;
3779
- const columns = customColumnHeaders ? customColumnHeaders : (0, $a35cf16d1488f54e$export$1147582dfae658c6)(resource.columns, resource.schema[id]);
3780
3737
  const { conditions: conditions, schema: schema, setConditions: setConditions, setOffset: setOffset } = resource;
3738
+ if (!schema[id]?.fields) return null;
3739
+ const customColumnHeaders = (0, $7264a673914aa746$export$8049e8f40a9bdfb8)(customColumns, resource.columns, resource.schema[distribution.identifier]);
3740
+ const columns = customColumnHeaders ? customColumnHeaders : (0, $a35cf16d1488f54e$export$1147582dfae658c6)(resource.columns, resource.schema[id]);
3781
3741
  const fields = Object.keys(schema[id].fields);
3782
3742
  const [queryConditions, setQueryConditions] = (0, $hgUW1$useState)([]);
3783
3743
  const [titleConditions, setTitleConditions] = (0, $hgUW1$useState)([]);