Files
klz-cables.com/.pnpm-store/v10/files/05/d0d0995752bf363a44bcb40efece6828daa8c3f361efde50f9222c4de4265e05195e7f436fb7b71177e9f4acd41af2b838248eaa509d3cf27ca6656537b049
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

197 lines
8.3 KiB
Plaintext

'use client';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useWindowInfo } from '@faceless-ui/window-info';
import { getTranslation } from '@payloadcms/translations';
import { validateWhereQuery } from 'payload/shared';
import React, { Fragment, useEffect, useRef, useState } from 'react';
import { Popup, PopupList } from '../../elements/Popup/index.js';
import { useUseTitleField } from '../../hooks/useUseAsTitle.js';
import { ChevronIcon } from '../../icons/Chevron/index.js';
import { Dots } from '../../icons/Dots/index.js';
import { useListQuery } from '../../providers/ListQuery/index.js';
import { useTranslation } from '../../providers/Translation/index.js';
import { AnimateHeight } from '../AnimateHeight/index.js';
import { ColumnSelector } from '../ColumnSelector/index.js';
import { GroupByBuilder } from '../GroupByBuilder/index.js';
import { Pill } from '../Pill/index.js';
import { QueryPresetBar } from '../QueryPresets/QueryPresetBar/index.js';
import { SearchBar } from '../SearchBar/index.js';
import { WhereBuilder } from '../WhereBuilder/index.js';
import { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched.js';
import './index.scss';
const baseClass = 'list-controls';
/**
* The ListControls component is used to render the controls (search, filter, where)
* for a collection's list view. You can find those directly above the table which lists
* the collection's documents.
*/
export const ListControls = props => {
const {
beforeActions,
collectionConfig,
collectionSlug,
disableQueryPresets,
enableColumns = true,
enableFilters = true,
enableSort = false,
listMenuItems,
queryPreset: activePreset,
queryPresetPermissions,
renderedFilters,
resolvedFilterOptions
} = props;
const {
handleSearchChange,
query
} = useListQuery();
const titleField = useUseTitleField(collectionConfig);
const {
i18n,
t
} = useTranslation();
const {
breakpoints: {
s: smallBreak
}
} = useWindowInfo();
const searchLabel = (titleField && getTranslation('label' in titleField && (typeof titleField.label === 'string' || typeof titleField.label === 'object') ? titleField.label : 'name' in titleField ? titleField.name : null, i18n)) ?? 'ID';
const listSearchableFields = getTextFieldsToBeSearched(collectionConfig.admin.listSearchableFields, collectionConfig.fields, i18n);
const searchLabelTranslated = useRef(t('general:searchBy', {
label: getTranslation(searchLabel, i18n)
}));
const hasWhereParam = useRef(Boolean(query?.where));
const shouldInitializeWhereOpened = validateWhereQuery(query?.where);
const [visibleDrawer, setVisibleDrawer] = useState(shouldInitializeWhereOpened ? 'where' : undefined);
useEffect(() => {
if (hasWhereParam.current && !query?.where) {
hasWhereParam.current = false;
} else if (query?.where) {
hasWhereParam.current = true;
}
}, [setVisibleDrawer, query?.where]);
useEffect(() => {
if (listSearchableFields?.length > 0) {
searchLabelTranslated.current = listSearchableFields.reduce((placeholderText, field, i) => {
const label = 'label' in field && field.label ? field.label : 'name' in field ? field.name : null;
if (i === 0) {
return `${t('general:searchBy', {
label: getTranslation(label, i18n)
})}`;
}
if (i === listSearchableFields.length - 1) {
return `${placeholderText} ${t('general:or')} ${getTranslation(label, i18n)}`;
}
return `${placeholderText}, ${getTranslation(label, i18n)}`;
}, '');
} else {
searchLabelTranslated.current = t('general:searchBy', {
label: getTranslation(searchLabel, i18n)
});
}
}, [t, listSearchableFields, i18n, searchLabel]);
return /*#__PURE__*/_jsxs("div", {
className: baseClass,
children: [collectionConfig?.enableQueryPresets && !disableQueryPresets && /*#__PURE__*/_jsx(QueryPresetBar, {
activePreset: activePreset,
collectionSlug: collectionSlug,
queryPresetPermissions: queryPresetPermissions
}), /*#__PURE__*/_jsx(SearchBar, {
Actions: [!smallBreak && /*#__PURE__*/_jsx(React.Fragment, {
children: beforeActions && beforeActions
}, "before-actions"), enableColumns && /*#__PURE__*/_jsx(Pill, {
"aria-controls": `${baseClass}-columns`,
"aria-expanded": visibleDrawer === 'columns',
className: `${baseClass}__toggle-columns`,
icon: /*#__PURE__*/_jsx(ChevronIcon, {
direction: visibleDrawer === 'columns' ? 'up' : 'down'
}),
id: "toggle-list-columns",
onClick: () => setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined),
pillStyle: "light",
size: "small",
children: t('general:columns')
}, "toggle-list-columns"), enableFilters && /*#__PURE__*/_jsx(Pill, {
"aria-controls": `${baseClass}-where`,
"aria-expanded": visibleDrawer === 'where',
className: `${baseClass}__toggle-where`,
icon: /*#__PURE__*/_jsx(ChevronIcon, {
direction: visibleDrawer === 'where' ? 'up' : 'down'
}),
id: "toggle-list-filters",
onClick: () => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined),
pillStyle: "light",
size: "small",
children: t('general:filters')
}, "toggle-list-filters"), enableSort && /*#__PURE__*/_jsx(Pill, {
"aria-controls": `${baseClass}-sort`,
"aria-expanded": visibleDrawer === 'sort',
className: `${baseClass}__toggle-sort`,
icon: /*#__PURE__*/_jsx(ChevronIcon, {}),
id: "toggle-list-sort",
onClick: () => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined),
pillStyle: "light",
size: "small",
children: t('general:sort')
}, "toggle-list-sort"), collectionConfig.admin.groupBy && /*#__PURE__*/_jsx(Pill, {
"aria-controls": `${baseClass}-group-by`,
"aria-expanded": visibleDrawer === 'group-by',
className: `${baseClass}__toggle-group-by`,
icon: /*#__PURE__*/_jsx(ChevronIcon, {
direction: visibleDrawer === 'group-by' ? 'up' : 'down'
}),
id: "toggle-group-by",
onClick: () => setVisibleDrawer(visibleDrawer !== 'group-by' ? 'group-by' : undefined),
pillStyle: "light",
size: "small",
children: t('general:groupByLabel', {
label: ''
})
}, "toggle-group-by"), listMenuItems && Array.isArray(listMenuItems) && listMenuItems.length > 0 && /*#__PURE__*/_jsx(Popup, {
button: /*#__PURE__*/_jsx(Dots, {
ariaLabel: t('general:moreOptions')
}),
className: `${baseClass}__popup`,
horizontalAlign: "right",
id: "list-menu",
size: "small",
verticalAlign: "bottom",
children: /*#__PURE__*/_jsx(PopupList.ButtonGroup, {
children: listMenuItems.map((item, i_0) => /*#__PURE__*/_jsx(Fragment, {
children: item
}, `list-menu-item-${i_0}`))
})
}, "list-menu")].filter(Boolean),
label: searchLabelTranslated.current,
onSearchChange: handleSearchChange,
searchQueryParam: query?.search
}, collectionSlug), enableColumns && /*#__PURE__*/_jsx(AnimateHeight, {
className: `${baseClass}__columns`,
height: visibleDrawer === 'columns' ? 'auto' : 0,
id: `${baseClass}-columns`,
children: /*#__PURE__*/_jsx(ColumnSelector, {
collectionSlug: collectionConfig.slug
})
}), /*#__PURE__*/_jsx(AnimateHeight, {
className: `${baseClass}__where`,
height: visibleDrawer === 'where' ? 'auto' : 0,
id: `${baseClass}-where`,
children: /*#__PURE__*/_jsx(WhereBuilder, {
collectionPluralLabel: collectionConfig?.labels?.plural,
collectionSlug: collectionConfig.slug,
fields: collectionConfig?.fields,
renderedFilters: renderedFilters,
resolvedFilterOptions: resolvedFilterOptions
})
}), collectionConfig.admin.groupBy && /*#__PURE__*/_jsx(AnimateHeight, {
className: `${baseClass}__group-by`,
height: visibleDrawer === 'group-by' ? 'auto' : 0,
id: `${baseClass}-group-by`,
children: /*#__PURE__*/_jsx(GroupByBuilder, {
collectionSlug: collectionConfig.slug,
fields: collectionConfig.fields
})
})]
});
};
//# sourceMappingURL=index.js.map