Files
klz-cables.com/.pnpm-store/v10/files/a6/658bffc97d485ce112720553bda14669dc9a322a92a797a35effecb6f7aca44e426d64afea264d326b94677c30e0d5ec9eb28cb8e2079193e323b880bbc1ef
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

185 lines
5.7 KiB
Plaintext

'use client';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useModal } from '@faceless-ui/modal';
import { hoistQueryParamsToAnd } from 'payload/shared';
import React, { useCallback, useEffect, useState } from 'react';
import { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js';
import { useEffectEvent } from '../../hooks/useEffectEvent.js';
import { useConfig } from '../../providers/Config/index.js';
import { useServerFunctions } from '../../providers/ServerFunctions/index.js';
import { ListDrawerContextProvider } from '../ListDrawer/Provider.js';
import { LoadingOverlay } from '../Loading/index.js';
export const ListDrawerContent = ({
allowCreate = true,
collectionSlugs,
disableQueryPresets,
drawerSlug,
enableRowSelections,
filterOptions,
onBulkSelect,
onSelect,
overrideEntityVisibility = true,
selectedCollection: collectionSlugFromProps
}) => {
const {
closeModal,
isModalOpen
} = useModal();
const {
serverFunction
} = useServerFunctions();
const [ListView, setListView] = useState(undefined);
const [isLoading, setIsLoading] = useState(true);
const {
config: {
collections
},
getEntityConfig
} = useConfig();
const isOpen = isModalOpen(drawerSlug);
const enabledCollections = collections.filter(({
slug
}) => {
return collectionSlugs.includes(slug);
});
const [selectedOption, setSelectedOption] = useState(() => {
const initialSelection = collectionSlugFromProps || enabledCollections[0]?.slug;
const found = getEntityConfig({
collectionSlug: initialSelection
});
return found ? {
label: found.labels,
value: found.slug
} : undefined;
});
const [DocumentDrawer, DocumentDrawerToggler, {
drawerSlug: documentDrawerSlug
}] = useDocumentDrawer({
collectionSlug: selectedOption.value
});
const updateSelectedOption = useEffectEvent(collectionSlug => {
if (collectionSlug && collectionSlug !== selectedOption?.value) {
setSelectedOption({
label: getEntityConfig({
collectionSlug
})?.labels,
value: collectionSlug
});
}
});
useEffect(() => {
updateSelectedOption(collectionSlugFromProps);
}, [collectionSlugFromProps]);
/**
* This performs a full server round trip to get the list view for the selected collection.
* On the server, the data is freshly queried for the list view and all components are fully rendered.
* This work includes building column state, rendering custom components, etc.
*/
const refresh = useCallback(async ({
slug: slug_0,
query
}) => {
try {
const newQuery = {
...(query || {}),
where: {
...(query?.where || {})
}
};
const filterOption = filterOptions?.[slug_0];
if (filterOptions && typeof filterOption !== 'boolean') {
newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOption);
}
if (slug_0) {
const result = await serverFunction({
name: 'render-list',
args: {
collectionSlug: slug_0,
disableBulkDelete: true,
disableBulkEdit: true,
disableQueryPresets,
drawerSlug,
enableRowSelections,
overrideEntityVisibility,
query: newQuery
}
});
setListView(result?.List || null);
} else {
setListView(null);
}
setIsLoading(false);
} catch (_err) {
console.error('Error rendering List View: ', _err); // eslint-disable-line no-console
if (isOpen) {
closeModal(drawerSlug);
}
}
}, [serverFunction, closeModal, drawerSlug, isOpen, enableRowSelections, filterOptions, overrideEntityVisibility, disableQueryPresets]);
useEffect(() => {
if (!ListView) {
void refresh({
slug: selectedOption?.value
});
}
}, [refresh, ListView, selectedOption.value]);
const onCreateNew = useCallback(({
doc
}) => {
if (typeof onSelect === 'function') {
onSelect({
collectionSlug: selectedOption?.value,
doc,
docID: doc.id
});
}
closeModal(documentDrawerSlug);
closeModal(drawerSlug);
}, [closeModal, documentDrawerSlug, drawerSlug, onSelect, selectedOption.value]);
const onQueryChange = useCallback(query_0 => {
void refresh({
slug: selectedOption?.value,
query: query_0
});
}, [refresh, selectedOption.value]);
const setMySelectedOption = useCallback(incomingSelection => {
setSelectedOption(incomingSelection);
void refresh({
slug: incomingSelection?.value
});
}, [refresh]);
const refreshSelf = useCallback(async incomingCollectionSlug => {
if (incomingCollectionSlug) {
setSelectedOption({
label: getEntityConfig({
collectionSlug: incomingCollectionSlug
})?.labels,
value: incomingCollectionSlug
});
}
await refresh({
slug: selectedOption.value || incomingCollectionSlug
});
}, [getEntityConfig, refresh, selectedOption.value]);
if (isLoading) {
return /*#__PURE__*/_jsx(LoadingOverlay, {});
}
return /*#__PURE__*/_jsxs(ListDrawerContextProvider, {
allowCreate: allowCreate,
createNewDrawerSlug: documentDrawerSlug,
DocumentDrawerToggler: DocumentDrawerToggler,
drawerSlug: drawerSlug,
enabledCollections: collectionSlugs,
onBulkSelect: onBulkSelect,
onQueryChange: onQueryChange,
onSelect: onSelect,
refresh: refreshSelf,
selectedOption: selectedOption,
setSelectedOption: setMySelectedOption,
children: [ListView, /*#__PURE__*/_jsx(DocumentDrawer, {
onSave: onCreateNew
})]
});
};
//# sourceMappingURL=DrawerContent.js.map