Files
klz-cables.com/.pnpm-store/v10/files/83/10b3d026cb7a31634815b47a7cd273eb4b6d164bf310ede65d5dde0f0c47a35598caedc15aa9033b58ab2e56426381a444a03713b1a7001cd4fbecf0c40228
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
6.1 KiB
Plaintext

'use client';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useModal } from '@faceless-ui/modal';
import { getTranslation } from '@payloadcms/translations';
import { useRouter, useSearchParams } from 'next/navigation.js';
import { formatAdminURL, mergeListSearchAndWhere } from 'payload/shared';
import * as qs from 'qs-esm';
import React from 'react';
import { toast } from 'sonner';
import { CheckboxInput } from '../../fields/Checkbox/Input.js';
import { useAuth } from '../../providers/Auth/index.js';
import { useConfig } from '../../providers/Config/index.js';
import { useLocale } from '../../providers/Locale/index.js';
import { useRouteCache } from '../../providers/RouteCache/index.js';
import { SelectAllStatus, useSelection } from '../../providers/Selection/index.js';
import { useTranslation } from '../../providers/Translation/index.js';
import { requests } from '../../utilities/api.js';
import { parseSearchParams } from '../../utilities/parseSearchParams.js';
import { ConfirmationModal } from '../ConfirmationModal/index.js';
import { ListSelectionButton } from '../ListSelection/index.js';
import './index.scss';
const confirmManyRestoreDrawerSlug = `confirm-restore-many-docs`;
const baseClass = 'restore-many';
export const RestoreMany = props => {
const {
collection: {
slug
} = {},
viewType
} = props;
const {
permissions
} = useAuth();
const {
config: {
collections,
routes,
serverURL
}
} = useConfig();
const {
code: locale
} = useLocale();
const router = useRouter();
const {
clearRouteCache
} = useRouteCache();
const searchParams = useSearchParams();
const {
count,
getSelectedIds,
selectAll,
toggleAll
} = useSelection();
const {
openModal
} = useModal();
const {
i18n,
t
} = useTranslation();
const [restoreAsPublished, setRestoreAsPublished] = React.useState(false);
const collectionPermissions = permissions?.collections?.[slug];
const hasUpdatePermission = collectionPermissions?.update;
if (selectAll === SelectAllStatus.None || !hasUpdatePermission || viewType !== 'trash') {
return null;
}
const selectingAll = selectAll === SelectAllStatus.AllAvailable;
const selectedIDs = !selectingAll ? getSelectedIds() : [];
const baseWhere = parseSearchParams(searchParams)?.where;
const finalWhere = {
and: [...(Array.isArray(baseWhere?.and) ? baseWhere.and : baseWhere ? [baseWhere] : []), {
deletedAt: {
exists: true
}
}]
};
const handleRestore = async () => {
const collectionConfig = collections.find(c => c.slug === slug);
if (!collectionConfig) {
return;
}
let whereConstraint;
if (selectingAll) {
whereConstraint = finalWhere;
} else {
whereConstraint = {
and: [{
id: {
in: selectedIDs
}
}, {
deletedAt: {
exists: true
}
}]
};
}
const url = formatAdminURL({
apiRoute: routes.api,
path: `/${slug}${qs.stringify({
limit: 0,
locale,
select: {},
trash: true,
where: mergeListSearchAndWhere({
collectionConfig,
search: parseSearchParams(searchParams)?.search,
where: whereConstraint
})
}, {
addQueryPrefix: true
})}`
});
const body = {
deletedAt: null
};
// Only include _status if drafts are enabled
if (collectionConfig?.versions?.drafts) {
body._status = restoreAsPublished ? 'published' : 'draft';
}
const restoreManyResponse = await requests.patch(url, {
body: JSON.stringify(body),
headers: {
'Accept-Language': i18n.language,
'Content-Type': 'application/json'
}
});
try {
const {
plural,
singular
} = collectionConfig.labels;
const json = await restoreManyResponse.json();
const restoredDocs = json?.docs?.length || 0;
const successLabel = restoredDocs > 1 ? plural : singular;
if (restoreManyResponse.status < 400 || restoredDocs > 0) {
toast.success(t('general:restoredCountSuccessfully', {
count: restoredDocs,
label: getTranslation(successLabel, i18n)
}));
}
if (json?.errors?.length > 0) {
toast.error(json.message, {
description: json.errors.map(e => e.message).join('\n')
});
}
} catch (err) {
toast.error(t('error:unknown'));
}
toggleAll();
router.replace(qs.stringify({
...parseSearchParams(searchParams),
page: selectingAll ? '1' : undefined
}, {
addQueryPrefix: true
}));
clearRouteCache();
};
const collectionConfig_0 = collections.find(({
slug: s
}) => s === slug);
const labelString = getTranslation(count === 1 ? collectionConfig_0.labels.singular : collectionConfig_0.labels.plural, i18n);
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [/*#__PURE__*/_jsx(ListSelectionButton, {
"aria-label": t('general:restore'),
className: "restore-documents__toggle",
onClick: () => {
openModal(confirmManyRestoreDrawerSlug);
},
children: t('general:restore')
}), /*#__PURE__*/_jsx(ConfirmationModal, {
body: /*#__PURE__*/_jsxs(React.Fragment, {
children: [t(collectionConfig_0?.versions?.drafts ? 'general:aboutToRestoreAsDraftCount' : 'general:aboutToRestoreCount', {
count,
label: labelString
}), collectionConfig_0?.versions?.drafts && /*#__PURE__*/_jsx("div", {
className: `${baseClass}__checkbox`,
children: /*#__PURE__*/_jsx(CheckboxInput, {
checked: restoreAsPublished,
id: "restore-as-published-many",
label: t('general:restoreAsPublished'),
name: "restore-as-published-many",
onToggle: e_0 => setRestoreAsPublished(e_0.target.checked)
})
})]
}),
className: baseClass,
confirmingLabel: t('general:restoring'),
heading: t('general:confirmRestoration'),
modalSlug: confirmManyRestoreDrawerSlug,
onConfirm: handleRestore
})]
});
};
//# sourceMappingURL=index.js.map