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
1 line
11 KiB
Plaintext
1 line
11 KiB
Plaintext
{"version":3,"file":"index.js","names":["useModal","getTranslation","useRouter","formatAdminURL","qs","React","Fragment","useCallback","useState","toast","CheckboxInput","useConfig","useDocumentTitle","useRouteTransition","useTranslation","requests","Button","ConfirmationModal","Translation","baseClass","RestoreButton","props","id","buttonId","collectionSlug","onRestore","redirectAfterRestore","singularLabel","title","titleFromProps","config","routes","admin","adminRoute","api","serverURL","getEntityConfig","collectionConfig","router","i18n","t","startRouteTransition","openModal","modalSlug","restoreAsPublished","setRestoreAsPublished","addDefaultError","error","handleRestore","url","apiRoute","path","stringify","trash","where","and","equals","deletedAt","exists","addQueryPrefix","body","versions","drafts","_status","res","patch","JSON","headers","language","json","status","success","label","message","push","errors","forEach","_err","_jsxs","_jsx","buttonStyle","onClick","elements","1","children","i18nKey","variables","className","checked","name","onToggle","e","target","confirmingLabel","heading","onConfirm"],"sources":["../../../src/elements/RestoreButton/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { Fragment, useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { CheckboxInput } from '../../fields/Checkbox/Input.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentTitle } from '../../providers/DocumentTitle/index.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'restore-button'\n\nexport type Props = {\n readonly buttonId?: string\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly id?: string\n readonly onRestore?: DocumentDrawerContextType['onRestore']\n readonly redirectAfterRestore?: boolean\n readonly singularLabel: SanitizedCollectionConfig['labels']['singular']\n readonly title?: string\n}\n\nexport const RestoreButton: React.FC<Props> = (props) => {\n const {\n id,\n buttonId,\n collectionSlug,\n onRestore,\n redirectAfterRestore = true,\n singularLabel,\n title: titleFromProps,\n } = props\n\n const {\n config: {\n routes: { admin: adminRoute, api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { title } = useDocumentTitle()\n const { startRouteTransition } = useRouteTransition()\n const { openModal } = useModal()\n\n const modalSlug = `restore-${id}`\n\n const [restoreAsPublished, setRestoreAsPublished] = useState(false)\n\n const addDefaultError = useCallback(() => {\n toast.error(t('error:restoringTitle', { title }))\n }, [t, title])\n\n const handleRestore = useCallback(async () => {\n try {\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${qs.stringify(\n {\n trash: true,\n where: {\n and: [{ id: { equals: id } }, { deletedAt: { exists: true } }],\n },\n },\n {\n addQueryPrefix: true,\n },\n )}`,\n })\n\n const body: Record<string, unknown> = {\n deletedAt: null,\n }\n\n // Only include _status if drafts are enabled\n if (collectionConfig?.versions?.drafts) {\n body._status = restoreAsPublished ? 'published' : 'draft'\n }\n\n const res = await requests.patch(url, {\n body: JSON.stringify(body),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleRestored', {\n label: getTranslation(singularLabel, i18n),\n title,\n }) || json.message,\n )\n\n if (redirectAfterRestore) {\n return startRouteTransition(() =>\n router.push(\n formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${id}`,\n serverURL,\n }),\n ),\n )\n }\n\n if (typeof onRestore === 'function') {\n await onRestore({ id, collectionConfig })\n }\n\n return\n }\n\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n addDefaultError()\n }\n } catch (_err) {\n addDefaultError()\n }\n }, [\n serverURL,\n api,\n collectionSlug,\n id,\n t,\n singularLabel,\n addDefaultError,\n i18n,\n title,\n router,\n adminRoute,\n redirectAfterRestore,\n onRestore,\n collectionConfig,\n startRouteTransition,\n restoreAsPublished,\n ])\n\n if (id) {\n return (\n <Fragment>\n <Button\n buttonStyle=\"primary\"\n id={buttonId}\n key={buttonId}\n onClick={() => {\n openModal(modalSlug)\n }}\n >\n {t('general:restore')}\n </Button>\n <ConfirmationModal\n body={\n <Fragment>\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey={\n collectionConfig?.versions?.drafts\n ? 'general:aboutToRestoreAsDraft'\n : 'general:aboutToRestore'\n }\n t={t}\n variables={{\n label: getTranslation(singularLabel, i18n),\n title: titleFromProps || title || id,\n }}\n />\n {collectionConfig?.versions?.drafts && (\n <div className={`${baseClass}__checkbox`}>\n <CheckboxInput\n checked={restoreAsPublished}\n id=\"restore-as-published\"\n label={t('general:restoreAsPublished')}\n name=\"restore-as-published\"\n onToggle={(e) => setRestoreAsPublished(e.target.checked)}\n />\n </div>\n )}\n </Fragment>\n }\n className={baseClass}\n confirmingLabel={t('general:restoring')}\n heading={t('general:confirmRestoration')}\n modalSlug={modalSlug}\n onConfirm={handleRestore}\n />\n </Fragment>\n )\n }\n\n return null\n}\n"],"mappings":"AAAA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,QAAQ,EAAEC,WAAW,EAAEC,QAAQ,QAAQ;AACvD,SAASC,KAAK,QAAQ;AAItB,SAASC,aAAa,QAAQ;AAC9B,SAASC,SAAS,QAAQ;AAC1B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,MAAM,QAAQ;AACvB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,WAAW,QAAQ;AAC5B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAYlB,OAAO,MAAMC,aAAA,GAAkCC,KAAA;EAC7C,MAAM;IACJC,EAAE;IACFC,QAAQ;IACRC,cAAc;IACdC,SAAS;IACTC,oBAAA,GAAuB,IAAI;IAC3BC,aAAa;IACbC,KAAA,EAAOC;EAAc,CACtB,GAAGR,KAAA;EAEJ,MAAM;IACJS,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC,KAAA,EAAOC,UAAU;QAAEC;MAAG,CAAE;MAClCC;IAAS,CACV;IACDC;EAAe,CAChB,GAAGzB,SAAA;EAEJ,MAAM0B,gBAAA,GAAmBD,eAAA,CAAgB;IAAEZ;EAAe;EAC1D,MAAMc,MAAA,GAASpC,SAAA;EACf,MAAM;IAAEqC,IAAI;IAAEC;EAAC,CAAE,GAAG1B,cAAA;EACpB,MAAM;IAAEc;EAAK,CAAE,GAAGhB,gBAAA;EAClB,MAAM;IAAE6B;EAAoB,CAAE,GAAG5B,kBAAA;EACjC,MAAM;IAAE6B;EAAS,CAAE,GAAG1C,QAAA;EAEtB,MAAM2C,SAAA,GAAY,WAAWrB,EAAA,EAAI;EAEjC,MAAM,CAACsB,kBAAA,EAAoBC,qBAAA,CAAsB,GAAGrC,QAAA,CAAS;EAE7D,MAAMsC,eAAA,GAAkBvC,WAAA,CAAY;IAClCE,KAAA,CAAMsC,KAAK,CAACP,CAAA,CAAE,wBAAwB;MAAEZ;IAAM;EAChD,GAAG,CAACY,CAAA,EAAGZ,KAAA,CAAM;EAEb,MAAMoB,aAAA,GAAgBzC,WAAA,CAAY;IAChC,IAAI;MACF,MAAM0C,GAAA,GAAM9C,cAAA,CAAe;QACzB+C,QAAA,EAAUhB,GAAA;QACViB,IAAA,EAAM,IAAI3B,cAAA,GAAiBpB,EAAA,CAAGgD,SAAS,CACrC;UACEC,KAAA,EAAO;UACPC,KAAA,EAAO;YACLC,GAAA,EAAK,CAAC;cAAEjC,EAAA,EAAI;gBAAEkC,MAAA,EAAQlC;cAAG;YAAE,GAAG;cAAEmC,SAAA,EAAW;gBAAEC,MAAA,EAAQ;cAAK;YAAE;UAC9D;QACF,GACA;UACEC,cAAA,EAAgB;QAClB;MAEJ;MAEA,MAAMC,IAAA,GAAgC;QACpCH,SAAA,EAAW;MACb;MAEA;MACA,IAAIpB,gBAAA,EAAkBwB,QAAA,EAAUC,MAAA,EAAQ;QACtCF,IAAA,CAAKG,OAAO,GAAGnB,kBAAA,GAAqB,cAAc;MACpD;MAEA,MAAMoB,GAAA,GAAM,MAAMjD,QAAA,CAASkD,KAAK,CAAChB,GAAA,EAAK;QACpCW,IAAA,EAAMM,IAAA,CAAKd,SAAS,CAACQ,IAAA;QACrBO,OAAA,EAAS;UACP,mBAAmB5B,IAAA,CAAK6B,QAAQ;UAChC,gBAAgB;QAClB;MACF;MAEA,MAAMC,IAAA,GAAO,MAAML,GAAA,CAAIK,IAAI;MAE3B,IAAIL,GAAA,CAAIM,MAAM,GAAG,KAAK;QACpB7D,KAAA,CAAM8D,OAAO,CACX/B,CAAA,CAAE,yBAAyB;UACzBgC,KAAA,EAAOvE,cAAA,CAAe0B,aAAA,EAAeY,IAAA;UACrCX;QACF,MAAMyC,IAAA,CAAKI,OAAO;QAGpB,IAAI/C,oBAAA,EAAsB;UACxB,OAAOe,oBAAA,CAAqB,MAC1BH,MAAA,CAAOoC,IAAI,CACTvE,cAAA,CAAe;YACb8B,UAAA;YACAkB,IAAA,EAAM,gBAAgB3B,cAAA,IAAkBF,EAAA,EAAI;YAC5Ca;UACF;QAGN;QAEA,IAAI,OAAOV,SAAA,KAAc,YAAY;UACnC,MAAMA,SAAA,CAAU;YAAEH,EAAA;YAAIe;UAAiB;QACzC;QAEA;MACF;MAEA,IAAIgC,IAAA,CAAKM,MAAM,EAAE;QACfN,IAAA,CAAKM,MAAM,CAACC,OAAO,CAAE7B,KAAA,IAAUtC,KAAA,CAAMsC,KAAK,CAACA,KAAA,CAAM0B,OAAO;MAC1D,OAAO;QACL3B,eAAA;MACF;IACF,EAAE,OAAO+B,IAAA,EAAM;MACb/B,eAAA;IACF;EACF,GAAG,CACDX,SAAA,EACAD,GAAA,EACAV,cAAA,EACAF,EAAA,EACAkB,CAAA,EACAb,aAAA,EACAmB,eAAA,EACAP,IAAA,EACAX,KAAA,EACAU,MAAA,EACAL,UAAA,EACAP,oBAAA,EACAD,SAAA,EACAY,gBAAA,EACAI,oBAAA,EACAG,kBAAA,CACD;EAED,IAAItB,EAAA,EAAI;IACN,oBACEwD,KAAA,CAACxE,QAAA;8BACCyE,IAAA,CAAC/D,MAAA;QACCgE,WAAA,EAAY;QACZ1D,EAAA,EAAIC,QAAA;QAEJ0D,OAAA,EAASA,CAAA;UACPvC,SAAA,CAAUC,SAAA;QACZ;kBAECH,CAAA,CAAE;SALEjB,QAAA,G,aAOPwD,IAAA,CAAC9D,iBAAA;QACC2C,IAAA,eACEkB,KAAA,CAACxE,QAAA;kCACCyE,IAAA,CAAC7D,WAAA;YACCgE,QAAA,EAAU;cACR,KAAKC,CAAC;gBAAEC;cAAQ,CAAE,kBAAKL,IAAA,CAAC;0BAAQK;;YAClC;YACAC,OAAA,EACEhD,gBAAA,EAAkBwB,QAAA,EAAUC,MAAA,GACxB,kCACA;YAENtB,CAAA,EAAGA,CAAA;YACH8C,SAAA,EAAW;cACTd,KAAA,EAAOvE,cAAA,CAAe0B,aAAA,EAAeY,IAAA;cACrCX,KAAA,EAAOC,cAAA,IAAkBD,KAAA,IAASN;YACpC;cAEDe,gBAAA,EAAkBwB,QAAA,EAAUC,MAAA,iBAC3BiB,IAAA,CAAC;YAAIQ,SAAA,EAAW,GAAGpE,SAAA,YAAqB;sBACtC,aAAA4D,IAAA,CAACrE,aAAA;cACC8E,OAAA,EAAS5C,kBAAA;cACTtB,EAAA,EAAG;cACHkD,KAAA,EAAOhC,CAAA,CAAE;cACTiD,IAAA,EAAK;cACLC,QAAA,EAAWC,CAAA,IAAM9C,qBAAA,CAAsB8C,CAAA,CAAEC,MAAM,CAACJ,OAAO;;;;QAMjED,SAAA,EAAWpE,SAAA;QACX0E,eAAA,EAAiBrD,CAAA,CAAE;QACnBsD,OAAA,EAAStD,CAAA,CAAE;QACXG,SAAA,EAAWA,SAAA;QACXoD,SAAA,EAAW/C;;;EAInB;EAEA,OAAO;AACT","ignoreList":[]} |