@payloadcms/ui 3.16.1-canary.9004205 → 3.17.0

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.
@@ -4,11 +4,12 @@ import type { Column } from '../../Table/index.js';
4
4
  import type { UpcomingEvent } from './types.js';
5
5
  type Args = {
6
6
  dateFormat: string;
7
+ deleteHandler: (id: number | string) => void;
7
8
  docs: UpcomingEvent[];
8
9
  i18n: I18nClient;
9
10
  localization: ClientConfig['localization'];
10
11
  t: TFunction;
11
12
  };
12
- export declare const buildUpcomingColumns: ({ dateFormat, docs, i18n, localization, t, }: Args) => Column[];
13
+ export declare const buildUpcomingColumns: ({ dateFormat, deleteHandler, docs, i18n, localization, t, }: Args) => Column[];
13
14
  export {};
14
15
  //# sourceMappingURL=buildUpcomingColumns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildUpcomingColumns.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAE1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK/C,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,aAAa,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;IAC1C,CAAC,EAAE,SAAS,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,iDAM9B,IAAI,KAAG,MAAM,EA4Df,CAAA"}
1
+ {"version":3,"file":"buildUpcomingColumns.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAG1F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,aAAa,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;IAC1C,CAAC,EAAE,SAAS,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,gEAO9B,IAAI,KAAG,MAAM,EAmFf,CAAA"}
@@ -1,9 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getTranslation } from '@payloadcms/translations';
3
+ import React from 'react';
3
4
  import { formatDate } from '../../../utilities/formatDate.js';
5
+ import { Button } from '../../Button/index.js';
4
6
  import { Pill } from '../../Pill/index.js';
5
7
  export const buildUpcomingColumns = ({
6
8
  dateFormat,
9
+ deleteHandler,
7
10
  docs,
8
11
  i18n,
9
12
  localization,
@@ -70,6 +73,27 @@ export const buildUpcomingColumns = ({
70
73
  })
71
74
  });
72
75
  }
76
+ columns.push({
77
+ accessor: 'delete',
78
+ active: true,
79
+ field: {
80
+ name: 'delete',
81
+ type: 'text'
82
+ },
83
+ Heading: /*#__PURE__*/_jsx("span", {
84
+ children: t('general:delete')
85
+ }),
86
+ renderedCells: docs.map(doc => /*#__PURE__*/_jsx(Button, {
87
+ buttonStyle: "icon-label",
88
+ className: "schedule-publish__delete",
89
+ icon: "x",
90
+ onClick: e => {
91
+ e.preventDefault();
92
+ deleteHandler(doc.id);
93
+ },
94
+ tooltip: t('general:delete')
95
+ }, doc.id))
96
+ });
73
97
  return columns;
74
98
  };
75
99
  //# sourceMappingURL=buildUpcomingColumns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildUpcomingColumns.js","names":["getTranslation","formatDate","Pill","buildUpcomingColumns","dateFormat","docs","i18n","localization","t","columns","accessor","active","field","name","type","Heading","_jsx","renderedCells","map","doc","input","_jsxs","pillStyle","id","date","waitUntil","pattern","push","locale","matchedLocale","locales","find","code","label"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"sourcesContent":["import type { ClientConfig } from 'payload'\n\nimport { getTranslation, type I18nClient, type TFunction } from '@payloadcms/translations'\n\nimport type { Column } from '../../Table/index.js'\nimport type { UpcomingEvent } from './types.js'\n\nimport { formatDate } from '../../../utilities/formatDate.js'\nimport { Pill } from '../../Pill/index.js'\n\ntype Args = {\n dateFormat: string\n docs: UpcomingEvent[]\n i18n: I18nClient\n localization: ClientConfig['localization']\n t: TFunction\n}\n\nexport const buildUpcomingColumns = ({\n dateFormat,\n docs,\n i18n,\n localization,\n t,\n}: Args): Column[] => {\n const columns: Column[] = [\n {\n accessor: 'input.type',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('version:type')}</span>,\n renderedCells: docs.map((doc) => {\n const type = doc.input?.type\n\n return (\n <Pill key={doc.id} pillStyle={type === 'publish' ? 'success' : 'warning'}>\n {type === 'publish' && t('version:publish')}\n {type === 'unpublish' && t('version:unpublish')}\n </Pill>\n )\n }),\n },\n {\n accessor: 'waitUntil',\n active: true,\n field: {\n name: '',\n type: 'date',\n },\n Heading: <span>{t('general:time')}</span>,\n renderedCells: docs.map((doc) => (\n <span key={doc.id}>{formatDate({ date: doc.waitUntil, i18n, pattern: dateFormat })}</span>\n )),\n },\n ]\n\n if (localization) {\n columns.push({\n accessor: 'input.locale',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:locale')}</span>,\n renderedCells: docs.map((doc) => {\n if (doc.input.locale) {\n const matchedLocale = localization.locales.find(\n (locale) => locale.code === doc.input.locale,\n )\n if (matchedLocale) {\n return <span key={doc.id}>{getTranslation(matchedLocale.label, i18n)}</span>\n }\n }\n\n return <span key={doc.id}>{t('general:all')}</span>\n }),\n })\n }\n\n return columns\n}\n"],"mappings":";AAEA,SAASA,cAAc,QAAyC;AAKhE,SAASC,UAAU,QAAQ;AAC3B,SAASC,IAAI,QAAQ;AAUrB,OAAO,MAAMC,oBAAA,GAAuBA,CAAC;EACnCC,UAAU;EACVC,IAAI;EACJC,IAAI;EACJC,YAAY;EACZC;AAAC,CACI;EACL,MAAMC,OAAA,GAAoB,CACxB;IACEC,QAAA,EAAU;IACVC,MAAA,EAAQ;IACRC,KAAA,EAAO;MACLC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACAC,OAAA,eAASC,IAAA,CAAC;gBAAMR,CAAA,CAAE;;IAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA;MACvB,MAAML,IAAA,GAAOK,GAAA,CAAIC,KAAK,EAAEN,IAAA;MAExB,oBACEO,KAAA,CAACnB,IAAA;QAAkBoB,SAAA,EAAWR,IAAA,KAAS,YAAY,YAAY;mBAC5DA,IAAA,KAAS,aAAaN,CAAA,CAAE,oBACxBM,IAAA,KAAS,eAAeN,CAAA,CAAE;SAFlBW,GAAA,CAAII,EAAE;IAKrB;EACF,GACA;IACEb,QAAA,EAAU;IACVC,MAAA,EAAQ;IACRC,KAAA,EAAO;MACLC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACAC,OAAA,eAASC,IAAA,CAAC;gBAAMR,CAAA,CAAE;;IAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA,iBACvBH,IAAA,CAAC;gBAAmBf,UAAA,CAAW;QAAEuB,IAAA,EAAML,GAAA,CAAIM,SAAS;QAAEnB,IAAA;QAAMoB,OAAA,EAAStB;MAAW;OAArEe,GAAA,CAAII,EAAE;EAErB,EACD;EAED,IAAIhB,YAAA,EAAc;IAChBE,OAAA,CAAQkB,IAAI,CAAC;MACXjB,QAAA,EAAU;MACVC,MAAA,EAAQ;MACRC,KAAA,EAAO;QACLC,IAAA,EAAM;QACNC,IAAA,EAAM;MACR;MACAC,OAAA,eAASC,IAAA,CAAC;kBAAMR,CAAA,CAAE;;MAClBS,aAAA,EAAeZ,IAAA,CAAKa,GAAG,CAAEC,GAAA;QACvB,IAAIA,GAAA,CAAIC,KAAK,CAACQ,MAAM,EAAE;UACpB,MAAMC,aAAA,GAAgBtB,YAAA,CAAauB,OAAO,CAACC,IAAI,CAC5CH,MAAA,IAAWA,MAAA,CAAOI,IAAI,KAAKb,GAAA,CAAIC,KAAK,CAACQ,MAAM;UAE9C,IAAIC,aAAA,EAAe;YACjB,oBAAOb,IAAA,CAAC;wBAAmBhB,cAAA,CAAe6B,aAAA,CAAcI,KAAK,EAAE3B,IAAA;eAA7Ca,GAAA,CAAII,EAAE;UAC1B;QACF;QAEA,oBAAOP,IAAA,CAAC;oBAAmBR,CAAA,CAAE;WAAXW,GAAA,CAAII,EAAE;MAC1B;IACF;EACF;EAEA,OAAOd,OAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"buildUpcomingColumns.js","names":["getTranslation","React","formatDate","Button","Pill","buildUpcomingColumns","dateFormat","deleteHandler","docs","i18n","localization","t","columns","accessor","active","field","name","type","Heading","_jsx","renderedCells","map","doc","input","_jsxs","pillStyle","id","date","waitUntil","pattern","push","locale","matchedLocale","locales","find","code","label","buttonStyle","className","icon","onClick","e","preventDefault","tooltip"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"sourcesContent":["import type { ClientConfig } from 'payload'\n\nimport { getTranslation, type I18nClient, type TFunction } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { Column } from '../../Table/index.js'\nimport type { UpcomingEvent } from './types.js'\n\nimport { formatDate } from '../../../utilities/formatDate.js'\nimport { Button } from '../../Button/index.js'\nimport { Pill } from '../../Pill/index.js'\n\ntype Args = {\n dateFormat: string\n deleteHandler: (id: number | string) => void\n docs: UpcomingEvent[]\n i18n: I18nClient\n localization: ClientConfig['localization']\n t: TFunction\n}\n\nexport const buildUpcomingColumns = ({\n dateFormat,\n deleteHandler,\n docs,\n i18n,\n localization,\n t,\n}: Args): Column[] => {\n const columns: Column[] = [\n {\n accessor: 'input.type',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('version:type')}</span>,\n renderedCells: docs.map((doc) => {\n const type = doc.input?.type\n\n return (\n <Pill key={doc.id} pillStyle={type === 'publish' ? 'success' : 'warning'}>\n {type === 'publish' && t('version:publish')}\n {type === 'unpublish' && t('version:unpublish')}\n </Pill>\n )\n }),\n },\n {\n accessor: 'waitUntil',\n active: true,\n field: {\n name: '',\n type: 'date',\n },\n Heading: <span>{t('general:time')}</span>,\n renderedCells: docs.map((doc) => (\n <span key={doc.id}>{formatDate({ date: doc.waitUntil, i18n, pattern: dateFormat })}</span>\n )),\n },\n ]\n\n if (localization) {\n columns.push({\n accessor: 'input.locale',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:locale')}</span>,\n renderedCells: docs.map((doc) => {\n if (doc.input.locale) {\n const matchedLocale = localization.locales.find(\n (locale) => locale.code === doc.input.locale,\n )\n if (matchedLocale) {\n return <span key={doc.id}>{getTranslation(matchedLocale.label, i18n)}</span>\n }\n }\n\n return <span key={doc.id}>{t('general:all')}</span>\n }),\n })\n }\n\n columns.push({\n accessor: 'delete',\n active: true,\n field: {\n name: 'delete',\n type: 'text',\n },\n Heading: <span>{t('general:delete')}</span>,\n renderedCells: docs.map((doc) => (\n <Button\n buttonStyle=\"icon-label\"\n className=\"schedule-publish__delete\"\n icon=\"x\"\n key={doc.id}\n onClick={(e) => {\n e.preventDefault()\n deleteHandler(doc.id)\n }}\n tooltip={t('general:delete')}\n />\n )),\n })\n\n return columns\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuBzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwN1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAA;AAuBzB,OAAO,cAAc,CAAA;AAIrB,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuP1C,CAAA"}
@@ -69,6 +69,7 @@ export const ScheduleDrawer = ({
69
69
  });
70
70
  const [upcoming, setUpcoming] = React.useState();
71
71
  const [upcomingColumns, setUpcomingColumns] = React.useState();
72
+ const deleteHandlerRef = React.useRef(() => null);
72
73
  const localeOptions = React.useMemo(() => {
73
74
  if (localization) {
74
75
  const options = localization.locales.map(({
@@ -129,13 +130,30 @@ export const ScheduleDrawer = ({
129
130
  }).then(res => res.json());
130
131
  setUpcomingColumns(buildUpcomingColumns({
131
132
  dateFormat,
133
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
134
+ deleteHandler: deleteHandlerRef.current,
132
135
  docs,
133
136
  i18n,
134
137
  localization,
135
138
  t
136
139
  }));
137
140
  setUpcoming(docs);
138
- }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization]);
141
+ }, [collectionSlug, globalSlug, serverURL, api, dateFormat, id, t, i18n, localization]);
142
+ const deleteHandler = React.useCallback(async id_0 => {
143
+ try {
144
+ await schedulePublish({
145
+ deleteID: id_0
146
+ });
147
+ await fetchUpcoming();
148
+ toast.success(t('general:deletedSuccessfully'));
149
+ } catch (err) {
150
+ console.error(err);
151
+ toast.error(err.message);
152
+ }
153
+ }, [fetchUpcoming, schedulePublish, t]);
154
+ React.useEffect(() => {
155
+ deleteHandlerRef.current = deleteHandler;
156
+ }, [deleteHandler]);
139
157
  const handleSave = React.useCallback(async () => {
140
158
  if (!date) {
141
159
  return toast.error(t('general:noDateSelected'));
@@ -159,9 +177,9 @@ export const ScheduleDrawer = ({
159
177
  setDate(undefined);
160
178
  toast.success(t('version:scheduledSuccessfully'));
161
179
  void fetchUpcoming();
162
- } catch (err) {
163
- console.error(err);
164
- toast.error(err.message);
180
+ } catch (err_0) {
181
+ console.error(err_0);
182
+ toast.error(err_0.message);
165
183
  }
166
184
  setProcessing(false);
167
185
  }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useModal","getTranslation","qs","React","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","toggleModal","config","admin","dateFormat","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","localeOptions","useMemo","options","locales","map","code","unshift","fetchUpcoming","useCallback","query","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","String","docs","post","body","stringify","headers","language","then","res","json","handleSave","error","publishSpecificLocale","doc","relationTo","undefined","global","success","err","console","message","useEffect","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { Column } from '../../Table/index.js'\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\nimport './index.scss'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: { dateFormat },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>('publish')\n const [date, setDate] = React.useState<Date>()\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const query: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n query.where.and.push({\n 'input.doc.value': {\n equals: String(id),\n },\n })\n query.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n query.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .post(`${serverURL}${api}/payload-jobs`, {\n body: qs.stringify(query),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n })\n .then((res) => res.json())\n\n setUpcomingColumns(buildUpcomingColumns({ dateFormat, docs, i18n, localization, t }))\n setUpcoming(docs)\n }, [api, collectionSlug, dateFormat, globalSlug, i18n, id, serverURL, t, localization])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: String(id),\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming])\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} required />\n <DatePickerField\n minDate={new Date()}\n onChange={(e) => setDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={date}\n />\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"primary\" disabled={processing} onClick={handleSave} type=\"button\">\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"AAAA,+BACA;;;AAIA,SAASA,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,YAAYC,EAAA,MAAQ;AACpB,OAAOC,KAAA,MAAW;AAClB,SAASC,KAAK,QAAQ;AAKtB,SAASC,UAAU,QAAQ;AAC3B,SAASC,KAAK,QAAQ;AACtB,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAkB,QAAQ;AACnC,SAASC,cAAc,QAAQ;AAC/B,SAASC,QAAQ,QAAQ;AACzB,SAASC,MAAM,QAAQ;AACvB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,MAAM,QAAQ;AACvB,SAASC,eAAe,QAAQ;AAChC,SAASC,MAAM,QAAQ;AACvB,SAASC,MAAM,QAAQ;AACvB,SAASC,WAAW,QAAQ;AAC5B,SAASC,aAAa,QAAQ;AAC9B,SAASC,KAAK,QAAQ;AACtB,SAASC,oBAAoB,QAAQ;AACrC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAMlB,MAAMC,mBAAA,GAAsB;EAC1BC,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,OAAO,MAAMC,cAAA,GAAkCA,CAAC;EAAEC;AAAI,CAAE;EACtD,MAAM;IAAEC;EAAW,CAAE,GAAG5B,QAAA;EACxB,MAAM;IACJ6B,MAAA,EAAQ;MACNC,KAAA,EAAO;QAAEC;MAAU,CAAE;MACrBC,YAAY;MACZC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAG5B,SAAA;EACJ,MAAM;IAAE6B,EAAE;IAAEC,cAAc;IAAEC,UAAU;IAAEC;EAAK,CAAE,GAAG/B,eAAA;EAClD,MAAM;IAAEgC,IAAI;IAAEC;EAAC,CAAE,GAAG/B,cAAA;EACpB,MAAM;IAAEgC;EAAe,CAAE,GAAGjC,kBAAA;EAC5B,MAAM,CAACkC,IAAA,EAAMC,OAAA,CAAQ,GAAGzC,KAAA,CAAM0C,QAAQ,CAAc;EACpD,MAAM,CAACC,IAAA,EAAMC,OAAA,CAAQ,GAAG5C,KAAA,CAAM0C,QAAQ;EACtC,MAAM,CAACG,MAAA,EAAQC,SAAA,CAAU,GAAG9C,KAAA,CAAM0C,QAAQ,CAAmCtB,mBAAA;EAC7E,MAAM,CAAC2B,UAAA,EAAYC,aAAA,CAAc,GAAGhD,KAAA,CAAM0C,QAAQ,CAAC;EACnD,MAAMO,UAAA,GAAaX,CAAA,CAAE,8BAA8B;IAAEF;EAAM;EAC3D,MAAM,CAACc,QAAA,EAAUC,WAAA,CAAY,GAAGnD,KAAA,CAAM0C,QAAQ;EAC9C,MAAM,CAACU,eAAA,EAAiBC,kBAAA,CAAmB,GAAGrD,KAAA,CAAM0C,QAAQ;EAE5D,MAAMY,aAAA,GAAgBtD,KAAA,CAAMuD,OAAO,CAAC;IAClC,IAAI1B,YAAA,EAAc;MAChB,MAAM2B,OAAA,GAAU3B,YAAA,CAAa4B,OAAO,CAACC,GAAG,CAAC,CAAC;QAAEC,IAAI;QAAEtC;MAAK,CAAE,MAAM;QAC7DA,KAAA,EAAOvB,cAAA,CAAeuB,KAAA,EAAOgB,IAAA;QAC7Bf,KAAA,EAAOqC;MACT;MAEAH,OAAA,CAAQI,OAAO,CAACxC,mBAAA;MAEhB,OAAOoC,OAAA;IACT;IAEA,OAAO,EAAE;EACX,GAAG,CAAC3B,YAAA,EAAcQ,IAAA,CAAK;EAEvB,MAAMwB,aAAA,GAAgB7D,KAAA,CAAM8D,WAAW,CAAC;IACtC,MAAMC,KAAA,GAAwC;MAC5CC,IAAA,EAAM;MACNC,KAAA,EAAO;QACLC,GAAA,EAAK,CACH;UACEC,QAAA,EAAU;YACRC,MAAA,EAAQ;UACV;QACF,GACA;UACEC,SAAA,EAAW;YACTC,YAAA,EAAc,IAAIC,IAAA;UACpB;QACF;MAEJ;IACF;IAEA,IAAIrC,cAAA,EAAgB;MAClB6B,KAAA,CAAME,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACnB,mBAAmB;UACjBJ,MAAA,EAAQK,MAAA,CAAOxC,EAAA;QACjB;MACF;MACA8B,KAAA,CAAME,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACnB,wBAAwB;UACtBJ,MAAA,EAAQlC;QACV;MACF;IACF;IAEA,IAAIC,UAAA,EAAY;MACd4B,KAAA,CAAME,KAAK,CAACC,GAAG,CAACM,IAAI,CAAC;QACnB,gBAAgB;UACdJ,MAAA,EAAQjC;QACV;MACF;IACF;IAEA,MAAM;MAAEuC;IAAI,CAAE,GAAG,MAAMlE,QAAA,CACpBmE,IAAI,CAAC,GAAG3C,SAAA,GAAYD,GAAA,eAAkB,EAAE;MACvC6C,IAAA,EAAM7E,EAAA,CAAG8E,SAAS,CAACd,KAAA;MACnBe,OAAA,EAAS;QACP,mBAAmBzC,IAAA,CAAK0C,QAAQ;QAChC,gBAAgB;QAChB,0BAA0B;MAC5B;IACF,GACCC,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI;IAEzB7B,kBAAA,CAAmBnC,oBAAA,CAAqB;MAAEU,UAAA;MAAY8C,IAAA;MAAMrC,IAAA;MAAMR,YAAA;MAAcS;IAAE;IAClFa,WAAA,CAAYuB,IAAA;EACd,GAAG,CAAC3C,GAAA,EAAKG,cAAA,EAAgBN,UAAA,EAAYO,UAAA,EAAYE,IAAA,EAAMJ,EAAA,EAAID,SAAA,EAAWM,CAAA,EAAGT,YAAA,CAAa;EAEtF,MAAMsD,UAAA,GAAanF,KAAA,CAAM8D,WAAW,CAAC;IACnC,IAAI,CAACnB,IAAA,EAAM;MACT,OAAO1C,KAAA,CAAMmF,KAAK,CAAC9C,CAAA,CAAE;IACvB;IAEAU,aAAA,CAAc;IAEd,IAAIqC,qBAAA;IAEJ,IAAI,OAAOxC,MAAA,KAAW,YAAYA,MAAA,CAAOvB,KAAK,KAAK,SAASkB,IAAA,KAAS,WAAW;MAC9E6C,qBAAA,GAAwBxC,MAAA,CAAOvB,KAAK;IACtC;IAEA,IAAI;MACF,MAAMiB,eAAA,CAAgB;QACpBC,IAAA;QACAG,IAAA;QACA2C,GAAA,EAAKpD,cAAA,GACD;UACEqD,UAAA,EAAYrD,cAAA;UACZZ,KAAA,EAAOmD,MAAA,CAAOxC,EAAA;QAChB,IACAuD,SAAA;QACJC,MAAA,EAAQtD,UAAA,IAAcqD,SAAA;QACtB3C,MAAA,EAAQwC;MACV;MAEAzC,OAAA,CAAQ4C,SAAA;MACRvF,KAAA,CAAMyF,OAAO,CAACpD,CAAA,CAAE;MAChB,KAAKuB,aAAA;IACP,EAAE,OAAO8B,GAAA,EAAK;MACZC,OAAA,CAAQR,KAAK,CAACO,GAAA;MACd1F,KAAA,CAAMmF,KAAK,CAACO,GAAA,CAAIE,OAAO;IACzB;IAEA7C,aAAA,CAAc;EAChB,GAAG,CAACL,IAAA,EAAML,CAAA,EAAGC,eAAA,EAAiBC,IAAA,EAAMK,MAAA,EAAQX,cAAA,EAAgBD,EAAA,EAAIE,UAAA,EAAY0B,aAAA,CAAc;EAE1F7D,KAAA,CAAM8F,SAAS,CAAC;IACd,IAAI,CAAC5C,QAAA,EAAU;MACb,MAAM6C,oBAAA,GAAuB,MAAAA,CAAA;QAC3B,MAAMlC,aAAA;MACR;MAEA,KAAKkC,oBAAA;IACP;EACF,GAAG,CAAC7C,QAAA,EAAUW,aAAA,CAAc;EAE5B,oBACEmC,KAAA,CAACnF,MAAA;IACCoF,SAAA,EAAW9E,SAAA;IACX+E,MAAA,EAAQ;IACRC,MAAA,eACEH,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAG9E,SAAA,iBAA0B;8BAC3CiF,IAAA,CAAC;QAAGhE,KAAA,EAAOa,UAAA;kBAAaA;uBACxBmD,IAAA,CAAC1F,iBAAA;QAAkB2F,OAAA,EAASA,CAAA,KAAM5E,WAAA,CAAYD,IAAA;;;IAGlDA,IAAA,EAAMA,IAAA;4BAENwE,KAAA,CAAClF,MAAA;MAAOmF,SAAA,EAAW,GAAG9E,SAAA,aAAsB;8BAC1CiF,IAAA,CAAClG,UAAA;QAAWmB,KAAA,EAAOiB,CAAA,CAAE;QAAiBgE,QAAQ;uBAC9CN,KAAA,CAAC;QAAGC,SAAA,EAAW,GAAG9E,SAAA,QAAiB;gCACjCiF,IAAA,CAAC;oBACC,aAAAA,IAAA,CAACjG,KAAA;YACC8B,EAAA,EAAI,GAAGT,IAAA,OAAW;YAClB+E,UAAA,EAAY/D,IAAA,KAAS;YACrBgE,QAAA,EAAUA,CAAA,KAAM/D,OAAA,CAAQ;YACxBgE,MAAA,EAAQ;cAAEpF,KAAA,EAAOiB,CAAA,CAAE;cAAoBhB,KAAA,EAAO;YAAU;YACxDoF,IAAA,EAAM,GAAGlF,IAAA,OAAW;YACpBmF,QAAA,EAAU5D;;yBAGdqD,IAAA,CAAC;oBACC,aAAAA,IAAA,CAACjG,KAAA;YACC8B,EAAA,EAAI,GAAGT,IAAA,OAAW;YAClB+E,UAAA,EAAY/D,IAAA,KAAS;YACrBgE,QAAA,EAAUA,CAAA,KAAM/D,OAAA,CAAQ;YACxBgE,MAAA,EAAQ;cAAEpF,KAAA,EAAOiB,CAAA,CAAE;cAAsBhB,KAAA,EAAO;YAAY;YAC5DoF,IAAA,EAAM,GAAGlF,IAAA,OAAW;YACpBmF,QAAA,EAAU5D;;;uBAIhBqD,IAAA,CAAC,W,aACDA,IAAA,CAAClG,UAAA;QAAWmB,KAAA,EAAOiB,CAAA,CAAE;QAAiBgE,QAAQ;uBAC9CF,IAAA,CAACxF,eAAA;QACCgG,OAAA,EAAS,IAAIrC,IAAA;QACbiC,QAAA,EAAWK,CAAA,IAAMjE,OAAA,CAAQiE,CAAA;QACzBC,gBAAA,EAAiB;QACjBH,QAAA,EAAU5D,UAAA;QACVgE,aAAA,EAAe;QACfzF,KAAA,EAAOqB;uBAETyD,IAAA,CAAC,WACA9C,aAAA,CAAc0D,MAAM,GAAG,KAAKxE,IAAA,KAAS,0BACpCwD,KAAA,CAAChG,KAAA,CAAMiH,QAAQ;gCACbb,IAAA,CAAClG,UAAA;UAAWmB,KAAA,EAAOiB,CAAA,CAAE;yBACrB8D,IAAA,CAACrF,WAAA;UACCyF,QAAA,EAAWK,GAAA,IAAM/D,SAAA,CAAU+D,GAAA;UAC3BrD,OAAA,EAASF,aAAA;UACThC,KAAA,EAAOuB;yBAETuD,IAAA,CAAC;uBAGLJ,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAG9E,SAAA,WAAoB;gCACrCiF,IAAA,CAACzF,MAAA;UAAOuG,WAAA,EAAY;UAAUC,QAAA,EAAUpE,UAAA;UAAYsD,OAAA,EAASlB,UAAA;UAAY3C,IAAA,EAAK;oBAC3EF,CAAA,CAAE;YAEJS,UAAA,gBAAaqD,IAAA,CAAC;oBAAM9D,CAAA,CAAE;aAA4B;;qBAGvD0D,KAAA,CAAClF,MAAA;MAAOmF,SAAA,EAAW,GAAG9E,SAAA,YAAqB;8BACzCiF,IAAA,CAAC;kBAAI9D,CAAA,CAAE;UACN,CAACY,QAAA,iBAAYkD,IAAA,CAACpF,aAAA,OACdkC,QAAA,EAAU8D,MAAA,KAAW,kBACpBZ,IAAA,CAAC3F,MAAA;QAAO+B,IAAA,EAAK;kBAAQF,CAAA,CAAE;UAExBY,QAAA,EAAU8D,MAAA,GAAS,kBAClBZ,IAAA,CAACnF,KAAA;QAAMmG,UAAA,EAAW;QAAYC,OAAA,EAASjE,eAAA;QAAiBkE,IAAA,EAAMpE;;;;AAKxE","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["useModal","getTranslation","qs","React","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","toggleModal","config","admin","dateFormat","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","deleteHandlerRef","useRef","localeOptions","useMemo","options","locales","map","code","unshift","fetchUpcoming","useCallback","query","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","String","docs","post","body","stringify","headers","language","then","res","json","deleteHandler","current","deleteID","success","err","console","error","message","useEffect","handleSave","publishSpecificLocale","doc","relationTo","undefined","global","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport type { Column } from '../../Table/index.js'\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\nimport './index.scss'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: { dateFormat },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>('publish')\n const [date, setDate] = React.useState<Date>()\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n const deleteHandlerRef = React.useRef<((id: number | string) => Promise<void>) | null>(() => null)\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const query: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n query.where.and.push({\n 'input.doc.value': {\n equals: String(id),\n },\n })\n query.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n query.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .post(`${serverURL}${api}/payload-jobs`, {\n body: qs.stringify(query),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n })\n .then((res) => res.json())\n\n setUpcomingColumns(\n buildUpcomingColumns({\n dateFormat,\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n deleteHandler: deleteHandlerRef.current,\n docs,\n i18n,\n localization,\n t,\n }),\n )\n setUpcoming(docs)\n }, [collectionSlug, globalSlug, serverURL, api, dateFormat, id, t, i18n, localization])\n\n const deleteHandler = React.useCallback(\n async (id: number | string) => {\n try {\n await schedulePublish({\n deleteID: id,\n })\n await fetchUpcoming()\n toast.success(t('general:deletedSuccessfully'))\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n },\n [fetchUpcoming, schedulePublish, t],\n )\n\n React.useEffect(() => {\n deleteHandlerRef.current = deleteHandler\n }, [deleteHandler])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: String(id),\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [date, t, schedulePublish, type, locale, collectionSlug, id, globalSlug, fetchUpcoming])\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} required />\n <DatePickerField\n minDate={new Date()}\n onChange={(e) => setDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={date}\n />\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button buttonStyle=\"primary\" disabled={processing} onClick={handleSave} type=\"button\">\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -44,5 +44,9 @@
44
44
  margin-bottom: var(--base);
45
45
  }
46
46
  }
47
+
48
+ &__delete {
49
+ margin: 0;
50
+ }
47
51
  }
48
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAA;AAM1D,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwV7C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAA;AAM1D,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAqV7C,CAAA"}
@@ -179,11 +179,11 @@ export const RelationshipField = props => {
179
179
  }
180
180
  return undefined;
181
181
  }, [hasMany, hasMultipleRelations, value, options]);
182
- const handleInputChange = useCallback(newSearch => {
183
- if (search !== newSearch) {
184
- setSearch(newSearch);
185
- }
186
- }, [search]);
182
+ const handleInputChange = input => {
183
+ const relationSlug_0 = partiallyLoadedRelationshipSlugs.current[0];
184
+ nextPageByRelationshipRef.current.set(relationSlug_0, 1);
185
+ setSearch(input);
186
+ };
187
187
  const addOptionByID = useCallback(async (id, relation_1) => {
188
188
  if (!errorLoading && id !== 'null' && id && relation_1) {
189
189
  const response_0 = await fetch(`${serverURL}${api}/${relation_1}/${id}?depth=0`, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipField","props","disabled","field","admin","isSortable","hasMany","relationTo","onChange","value","config","collections","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","debouncedSearch","i18n","t","relationSlugs","initialRelationMap","map","Map","forEach","relation","set","nextPageByRelationshipRef","useRef","partiallyLoadedRelationshipSlugs","addOptions","data","collection","collectionSlug","type","loadRelationOptions","abortController","relationSlug","current","includes","fieldToSearch","useAsTitle","pageIndex","get","query","depth","limit","page","where","and","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","nextPage","filter","partiallyLoadedRelation","e","aborted","console","error","loadMoreOptions","AbortController","findOptionsByValue","val","matchedOption","opt","some","subOpt","find","undefined","valueWithRelation","handleInputChange","newSearch","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","Boolean","join","valueToRender","_jsxs","className","_jsx","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\nimport optionsReducer from './optionsReducer.js'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipField: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin: { isSortable } = {}, hasMany, relationTo },\n onChange,\n value,\n } = props\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const debouncedSearch = useDebounce(search, 300)\n const { i18n, t } = useTranslation()\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n const initialRelationMap = () => {\n const map: Map<string, number> = new Map()\n relationSlugs.forEach((relation) => {\n map.set(relation, 1)\n })\n return map\n }\n const nextPageByRelationshipRef = React.useRef<Map<string, number>>(initialRelationMap())\n const partiallyLoadedRelationshipSlugs = React.useRef<string[]>(relationSlugs)\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation }) as ClientCollectionConfig\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadRelationOptions = React.useCallback(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n if (relationSlug && partiallyLoadedRelationshipSlugs.current.includes(relationSlug)) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n }) as ClientCollectionConfig\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n const pageIndex = nextPageByRelationshipRef.current.get(relationSlug)\n\n const query: {\n depth?: number\n limit?: number\n page?: number\n where: Where\n } = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: pageIndex,\n where: {\n and: [],\n },\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (!debouncedSearch) {\n if (data.nextPage) {\n nextPageByRelationshipRef.current.set(relationSlug, data.nextPage)\n } else {\n partiallyLoadedRelationshipSlugs.current =\n partiallyLoadedRelationshipSlugs.current.filter(\n (partiallyLoadedRelation) => partiallyLoadedRelation !== relationSlug,\n )\n }\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e)\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n [addOptions, api, collections, debouncedSearch, i18n.language, serverURL, t],\n )\n\n const loadMoreOptions = React.useCallback(() => {\n if (partiallyLoadedRelationshipSlugs.current.length > 0) {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: partiallyLoadedRelationshipSlugs.current[0],\n })\n }\n }, [loadRelationOptions])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (newSearch) => {\n if (search !== newSearch) {\n setSearch(newSearch)\n }\n },\n [search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * 1. Trigger initial relationship options fetch\n * 2. When search changes, loadRelationOptions will\n * fire off again\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const abortControllers: AbortController[] = []\n relations.forEach((relation) => {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: relation,\n })\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, loadRelationOptions, relationTo])\n\n /**\n * Load any options that were not returned\n * in the first 10 of each relation fetch\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={loadMoreOptions}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"mappings":"AAAA;;;AAGA,YAAYA,EAAA,MAAQ;AACpB,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,QAAQ;AAKpE,SAASC,WAAW,QAAQ;AAC5B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,WAAW,QAAQ;AAC5B,OAAO;AACP,OAAOC,cAAA,MAAoB;AAE3B,MAAMC,SAAA,GAAY;AAElB,MAAMC,oBAAA,GAAuB;AAE7B,OAAO,MAAMC,iBAAA,GAAsCC,KAAA;EACjD,MAAM;IACJC,QAAQ;IACRC,KAAA,EAAO;MAAEC,KAAA,EAAO;QAAEC;MAAU,CAAE,GAAG,CAAC,CAAC;MAAEC,OAAO;MAAEC;IAAU,CAAE;IAC1DC,QAAQ;IACRC;EAAK,CACN,GAAGR,KAAA;EAEJ,MAAM;IACJS,MAAA,EAAQ;MACNC,WAAW;MACXC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS,CACV;IACDC;EAAe,CAChB,GAAGrB,SAAA;EAEJ,MAAMsB,oBAAA,GAAuBC,KAAA,CAAMC,OAAO,CAACX,UAAA;EAC3C,MAAM,CAACY,OAAA,EAASC,eAAA,CAAgB,GAAG7B,UAAA,CAAWM,cAAA,EAAgB,EAAE;EAChE,MAAM,CAACwB,MAAA,EAAQC,SAAA,CAAU,GAAG9B,QAAA,CAAS;EACrC,MAAM,CAAC+B,YAAA,EAAcC,eAAA,CAAgB,GAAGhC,QAAA,CAAS;EACjD,MAAM,CAACiC,qBAAA,EAAuBC,wBAAA,CAAyB,GAAGlC,QAAA,CAAS;EACnE,MAAMmC,eAAA,GAAkBlC,WAAA,CAAY4B,MAAA,EAAQ;EAC5C,MAAM;IAAEO,IAAI;IAAEC;EAAC,CAAE,GAAGlC,cAAA;EACpB,MAAMmC,aAAA,GAAgBd,oBAAA,GAAuBT,UAAA,GAAa,CAACA,UAAA,CAAW;EACtE,MAAMwB,kBAAA,GAAqBA,CAAA;IACzB,MAAMC,GAAA,GAA2B,IAAIC,GAAA;IACrCH,aAAA,CAAcI,OAAO,CAAEC,QAAA;MACrBH,GAAA,CAAII,GAAG,CAACD,QAAA,EAAU;IACpB;IACA,OAAOH,GAAA;EACT;EACA,MAAMK,yBAAA,GAA4BjD,KAAA,CAAMkD,MAAM,CAAsBP,kBAAA;EACpE,MAAMQ,gCAAA,GAAmCnD,KAAA,CAAMkD,MAAM,CAAWR,aAAA;EAEhE,MAAMU,UAAA,GAAanD,WAAA,CACjB,CAACoD,IAAA,EAAMN,UAAA;IACL,MAAMO,UAAA,GAAa3B,eAAA,CAAgB;MAAE4B,cAAA,EAAgBR;IAAS;IAC9Df,eAAA,CAAgB;MAAEwB,IAAA,EAAM;MAAOF,UAAA;MAAYD,IAAA;MAAMzB,oBAAA;MAAsBY,IAAA;MAAMO,QAAA,EAAAA;IAAS;EACxF,GACA,CAACnB,oBAAA,EAAsBY,IAAA,EAAMb,eAAA,CAAgB;EAG/C,MAAM8B,mBAAA,GAAsBzD,KAAA,CAAMC,WAAW,CAC3C,OAAO;IACLyD,eAAe;IACfC;EAAY,CAIb;IACC,IAAIA,YAAA,IAAgBR,gCAAA,CAAiCS,OAAO,CAACC,QAAQ,CAACF,YAAA,GAAe;MACnF,MAAML,YAAA,GAAa3B,eAAA,CAAgB;QACjC4B,cAAA,EAAgBI;MAClB;MACA,MAAMG,aAAA,GAAgBR,YAAA,EAAYtC,KAAA,EAAO+C,UAAA,IAAc;MACvD,MAAMC,SAAA,GAAYf,yBAAA,CAA0BW,OAAO,CAACK,GAAG,CAACN,YAAA;MAExD,MAAMO,KAAA,GAKF;QACFC,KAAA,EAAO;QACPC,KAAA,EAAOzD,oBAAA;QACP0D,IAAA,EAAML,SAAA;QACNM,KAAA,EAAO;UACLC,GAAA,EAAK;QACP;MACF;MAEA,IAAIhC,eAAA,EAAiB;QACnB2B,KAAA,CAAMI,KAAK,CAACC,GAAG,CAACC,IAAI,CAAC;UACnB,CAACV,aAAA,GAAgB;YACfW,IAAA,EAAMlC;UACR;QACF;MACF;MAEA,IAAI;QACF,MAAMmC,QAAA,GAAW,MAAMC,KAAA,CACrB,GAAGjD,SAAA,GAAYD,GAAA,IAAOkC,YAAA,GAAe5D,EAAA,CAAG6E,SAAS,CAACV,KAAA,EAAO;UAAEW,cAAA,EAAgB;QAAK,IAAI,EACpF;UACEC,WAAA,EAAa;UACbC,OAAA,EAAS;YACP,mBAAmBvC,IAAA,CAAKwC;UAC1B;UACAC,MAAA,EAAQvB,eAAA,CAAgBuB;QAC1B;QAGF,IAAIP,QAAA,CAASQ,EAAE,EAAE;UACf,MAAM7B,MAAA,GAAsB,MAAMqB,QAAA,CAASS,IAAI;UAC/C,IAAI9B,MAAA,CAAK+B,IAAI,CAACC,MAAM,GAAG,GAAG;YACxBjC,UAAA,CAAWC,MAAA,EAAMM,YAAA;YAEjB,IAAI,CAACpB,eAAA,EAAiB;cACpB,IAAIc,MAAA,CAAKiC,QAAQ,EAAE;gBACjBrC,yBAAA,CAA0BW,OAAO,CAACZ,GAAG,CAACW,YAAA,EAAcN,MAAA,CAAKiC,QAAQ;cACnE,OAAO;gBACLnC,gCAAA,CAAiCS,OAAO,GACtCT,gCAAA,CAAiCS,OAAO,CAAC2B,MAAM,CAC5CC,uBAAA,IAA4BA,uBAAA,KAA4B7B,YAAA;cAE/D;YACF;UACF;QACF,OAAO;UACLvB,eAAA,CAAgBK,CAAA,CAAE;QACpB;MACF,EAAE,OAAOgD,CAAA,EAAG;QACV,IAAI,CAAC/B,eAAA,CAAgBuB,MAAM,CAACS,OAAO,EAAE;UACnCC,OAAA,CAAQC,KAAK,CAACH,CAAA;QAChB;MACF;IACF;IAEAnD,wBAAA,CAAyB;EAC3B,GACA,CAACc,UAAA,EAAY3B,GAAA,EAAKF,WAAA,EAAagB,eAAA,EAAiBC,IAAA,CAAKwC,QAAQ,EAAEtD,SAAA,EAAWe,CAAA,CAAE;EAG9E,MAAMoD,eAAA,GAAkB7F,KAAA,CAAMC,WAAW,CAAC;IACxC,IAAIkD,gCAAA,CAAiCS,OAAO,CAACyB,MAAM,GAAG,GAAG;MACvD,MAAM3B,iBAAA,GAAkB,IAAIoC,eAAA;MAC5B,KAAKrC,mBAAA,CAAoB;QACvBC,eAAA,EAAAA,iBAAA;QACAC,YAAA,EAAcR,gCAAA,CAAiCS,OAAO,CAAC;MACzD;IACF;EACF,GAAG,CAACH,mBAAA,CAAoB;EAExB,MAAMsC,kBAAA,GAAqB9F,WAAA,CAAY;IACrC,IAAIoB,KAAA,EAAO;MACT,IAAIH,OAAA,EAAS;QACX,IAAIW,KAAA,CAAMC,OAAO,CAACT,KAAA,GAAQ;UACxB,OAAOA,KAAA,CAAMuB,GAAG,CAAEoD,GAAA;YAChB,IAAIpE,oBAAA,EAAsB;cACxB,IAAIqE,aAAA;cAEJlE,OAAA,CAAQe,OAAO,CAAEoD,GAAA;gBACf,IAAIA,GAAA,CAAInE,OAAO,EAAE;kBACfmE,GAAA,CAAInE,OAAO,CAACoE,IAAI,CAAEC,MAAA;oBAChB,IAAIA,MAAA,EAAQ/E,KAAA,IAAS2E,GAAA,CAAI3E,KAAK,EAAE;sBAC9B4E,aAAA,GAAgBG,MAAA;sBAChB,OAAO;oBACT;oBAEA,OAAO;kBACT;gBACF;cACF;cAEA,OAAOH,aAAA;YACT;YAEA,OAAOlE,OAAA,CAAQsE,IAAI,CAAEH,KAAA,IAAQA,KAAA,CAAI7E,KAAK,IAAI2E,GAAA;UAC5C;QACF;QAEA,OAAOM,SAAA;MACT;MAEA,IAAI1E,oBAAA,EAAsB;QACxB,IAAIqE,eAAA;QAEJ,MAAMM,iBAAA,GAAoBlF,KAAA;QAE1BU,OAAA,CAAQe,OAAO,CAAEoD,KAAA;UACf,IAAIA,KAAA,EAAKnE,OAAA,EAAS;YAChBmE,KAAA,CAAInE,OAAO,CAACoE,IAAI,CAAEC,QAAA;cAChB,IAAIA,QAAA,EAAQ/E,KAAA,IAASkF,iBAAA,CAAkBlF,KAAK,EAAE;gBAC5C4E,eAAA,GAAgBG,QAAA;gBAChB,OAAO;cACT;cACA,OAAO;YACT;UACF;QACF;QAEA,OAAOH,eAAA;MACT;MAEA,OAAOlE,OAAA,CAAQsE,IAAI,CAAEH,KAAA,IAAQA,KAAA,CAAI7E,KAAK,IAAIA,KAAA;IAC5C;IAEA,OAAOiF,SAAA;EACT,GAAG,CAACpF,OAAA,EAASU,oBAAA,EAAsBP,KAAA,EAAOU,OAAA,CAAQ;EAElD,MAAMyE,iBAAA,GAAoBvG,WAAA,CACvBwG,SAAA;IACC,IAAIxE,MAAA,KAAWwE,SAAA,EAAW;MACxBvE,SAAA,CAAUuE,SAAA;IACZ;EACF,GACA,CAACxE,MAAA,CAAO;EAGV,MAAMyE,aAAA,GAAgBzG,WAAA,CACpB,OAAO0G,EAAA,EAAI5D,UAAA;IACT,IAAI,CAACZ,YAAA,IAAgBwE,EAAA,KAAO,UAAUA,EAAA,IAAM5D,UAAA,EAAU;MACpD,MAAM2B,UAAA,GAAW,MAAMC,KAAA,CAAM,GAAGjD,SAAA,GAAYD,GAAA,IAAOsB,UAAA,IAAY4D,EAAA,UAAY,EAAE;QAC3E7B,WAAA,EAAa;QACbC,OAAA,EAAS;UACP,mBAAmBvC,IAAA,CAAKwC;QAC1B;MACF;MAEA,IAAIN,UAAA,CAASQ,EAAE,EAAE;QACf,MAAM7B,MAAA,GAAO,MAAMqB,UAAA,CAASS,IAAI;QAChC/B,UAAA,CAAW;UAAEgC,IAAA,EAAM,CAAC/B,MAAA;QAAM,GAAGN,UAAA;MAC/B,OAAO;QACL;QACA4C,OAAA,CAAQC,KAAK,CAACnD,CAAA,CAAE,yBAAyB;UAAEkE;QAAG;MAChD;IACF;EACF,GACA,CAACnE,IAAA,EAAMY,UAAA,EAAY3B,GAAA,EAAKU,YAAA,EAAcT,SAAA,EAAWe,CAAA,CAAE;EAGrD;;;;;EAKAvC,SAAA,CAAU;IACR,MAAM0G,SAAA,GAAY/E,KAAA,CAAMC,OAAO,CAACX,UAAA,IAAcA,UAAA,GAAa,CAACA,UAAA,CAAW;IACvE,MAAM0F,gBAAA,GAAsC,EAAE;IAC9CD,SAAA,CAAU9D,OAAO,CAAEC,UAAA;MACjB,MAAMW,iBAAA,GAAkB,IAAIoC,eAAA;MAC5B,KAAKrC,mBAAA,CAAoB;QACvBC,eAAA,EAAAA,iBAAA;QACAC,YAAA,EAAcZ;MAChB;MACA8D,gBAAA,CAAiBrC,IAAI,CAACd,iBAAA;IACxB;IAEA,OAAO;MACLmD,gBAAA,CAAiB/D,OAAO,CAAEgE,UAAA;QACxB,IAAIA,UAAA,CAAW7B,MAAM,EAAE;UACrB,IAAI;YACF6B,UAAA,CAAWC,KAAK;UAClB,EAAE,OAAOC,IAAA,EAAM;YACb;UAAA;QAEJ;MACF;IACF;EACF,GAAG,CAACxE,IAAA,EAAMiB,mBAAA,EAAqBtC,UAAA,CAAW;EAE1C;;;;EAIAjB,SAAA,CAAU;IACR,IAAImB,KAAA,IAASgB,qBAAA,EAAuB;MAClC,IAAInB,OAAA,EAAS;QACX,MAAM+F,cAAA,GAAiBlB,kBAAA;QAErB,CAAAkB,cAAC,IAA+B,EAAE,EAAEnE,OAAO,CAAC,CAACoE,MAAA,EAAQC,CAAA;UACrD,IAAI,CAACD,MAAA,EAAQ;YACX,IAAItF,oBAAA,EAAsB;cACxB,KAAK8E,aAAA,CAAcrF,KAAK,CAAC8F,CAAA,CAAE,CAAC9F,KAAK,EAAEA,KAAK,CAAC8F,CAAA,CAAE,CAAChG,UAAU;YACxD,OAAO;cACL,KAAKuF,aAAA,CAAcrF,KAAK,CAAC8F,CAAA,CAAE,EAAEhG,UAAA;YAC/B;UACF;QACF;MACF,OAAO;QACL,MAAM8E,eAAA,GAAgBF,kBAAA;QAEtB,IAAI,CAACE,eAAA,EAAe;UAClB,IAAIrE,oBAAA,EAAsB;YACxB,MAAM2E,mBAAA,GAAoBlF,KAAA;YAC1B,KAAKqF,aAAA,CAAcH,mBAAA,CAAkBlF,KAAK,EAAEkF,mBAAA,CAAkBpF,UAAU;UAC1E,OAAO;YACL,KAAKuF,aAAA,CAAcrF,KAAA,EAAOF,UAAA;UAC5B;QACF;MACF;IACF;EACF,GAAG,CACDuF,aAAA,EACAX,kBAAA,EACA7E,OAAA,EACAU,oBAAA,EACAT,UAAA,EACAE,KAAA,EACAgB,qBAAA,CACD;EAED,MAAM+E,OAAA,GAAU,CAAC,cAAc1G,SAAA,EAAWyB,YAAA,IAAgB,gBAAgB,CACvEoD,MAAM,CAAC8B,OAAA,EACPC,IAAI,CAAC;EAER,MAAMC,aAAA,GAAiBxB,kBAAA,MAAwB1E,KAAA;EAE/C,oBACEmG,KAAA,CAAC;IAAIC,SAAA,EAAWL,OAAA;eACb,CAACjF,YAAA,iBACAuF,IAAA,CAAClH,WAAA;MACCM,QAAA,EAAUA,QAAA;MACV6G,OAAA,EAASzG,OAAA;MACTD,UAAA,EAAYA,UAAA;MACZG,QAAA,EAAWwG,QAAA;QACT,IAAI,CAACA,QAAA,EAAU;UACbxG,QAAA,CAAS;UACT;QACF;QACA,IAAIF,OAAA,IAAWW,KAAA,CAAMC,OAAO,CAAC8F,QAAA,GAAW;UACtCxG,QAAA,CACEwG,QAAA,GACIA,QAAA,CAAShF,GAAG,CAAEsE,QAAA;YACZ,IAAItF,oBAAA,EAAsB;cACxB,OAAO;gBACLT,UAAA,EAAY+F,QAAA,EAAQ/F,UAAA;gBACpBE,KAAA,EAAO6F,QAAA,EAAQ7F;cACjB;YACF;YAEA,OAAO6F,QAAA,EAAQ7F,KAAA;UACjB,KACA;QAER,OAAO,IAAIO,oBAAA,IAAwB,CAACC,KAAA,CAAMC,OAAO,CAAC8F,QAAA,GAAW;UAC3DxG,QAAA,CAAS;YACPD,UAAA,EAAYyG,QAAA,EAAUzG,UAAA;YACtBE,KAAA,EAAOuG,QAAA,EAAUvG;UACnB;QACF,OAAO,IAAI,CAACQ,KAAA,CAAMC,OAAO,CAAC8F,QAAA,GAAW;UACnCxG,QAAA,CAASwG,QAAA,EAAUvG,KAAA;QACrB;MACF;MACAwG,aAAA,EAAerB,iBAAA;MACfsB,oBAAA,EAAsBjC,eAAA;MACtB9D,OAAA,EAASA,OAAA;MACTgG,WAAA,EAAatF,CAAA,CAAE;MACfpB,KAAA,EAAOkG;QAGVpF,YAAA,iBAAgBuF,IAAA,CAAC;MAAID,SAAA,EAAW,GAAG/G,SAAA,iBAA0B;gBAAGyB;;;AAGvE","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipField","props","disabled","field","admin","isSortable","hasMany","relationTo","onChange","value","config","collections","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","debouncedSearch","i18n","t","relationSlugs","initialRelationMap","map","Map","forEach","relation","set","nextPageByRelationshipRef","useRef","partiallyLoadedRelationshipSlugs","addOptions","data","collection","collectionSlug","type","loadRelationOptions","abortController","relationSlug","current","includes","fieldToSearch","useAsTitle","pageIndex","get","query","depth","limit","page","where","and","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","nextPage","filter","partiallyLoadedRelation","e","aborted","console","error","loadMoreOptions","AbortController","findOptionsByValue","val","matchedOption","opt","some","subOpt","find","undefined","valueWithRelation","handleInputChange","input","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","Boolean","join","valueToRender","_jsxs","className","_jsx","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\nimport optionsReducer from './optionsReducer.js'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipField: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin: { isSortable } = {}, hasMany, relationTo },\n onChange,\n value,\n } = props\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const debouncedSearch = useDebounce(search, 300)\n const { i18n, t } = useTranslation()\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n const initialRelationMap = () => {\n const map: Map<string, number> = new Map()\n relationSlugs.forEach((relation) => {\n map.set(relation, 1)\n })\n return map\n }\n const nextPageByRelationshipRef = React.useRef<Map<string, number>>(initialRelationMap())\n const partiallyLoadedRelationshipSlugs = React.useRef<string[]>(relationSlugs)\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation }) as ClientCollectionConfig\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadRelationOptions = React.useCallback(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n if (relationSlug && partiallyLoadedRelationshipSlugs.current.includes(relationSlug)) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n }) as ClientCollectionConfig\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n const pageIndex = nextPageByRelationshipRef.current.get(relationSlug)\n\n const query: {\n depth?: number\n limit?: number\n page?: number\n where: Where\n } = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: pageIndex,\n where: {\n and: [],\n },\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (!debouncedSearch) {\n if (data.nextPage) {\n nextPageByRelationshipRef.current.set(relationSlug, data.nextPage)\n } else {\n partiallyLoadedRelationshipSlugs.current =\n partiallyLoadedRelationshipSlugs.current.filter(\n (partiallyLoadedRelation) => partiallyLoadedRelation !== relationSlug,\n )\n }\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e)\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n [addOptions, api, collections, debouncedSearch, i18n.language, serverURL, t],\n )\n\n const loadMoreOptions = React.useCallback(() => {\n if (partiallyLoadedRelationshipSlugs.current.length > 0) {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: partiallyLoadedRelationshipSlugs.current[0],\n })\n }\n }, [loadRelationOptions])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = (input: string) => {\n const relationSlug = partiallyLoadedRelationshipSlugs.current[0]\n nextPageByRelationshipRef.current.set(relationSlug, 1)\n setSearch(input)\n }\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * 1. Trigger initial relationship options fetch\n * 2. When search changes, loadRelationOptions will\n * fire off again\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const abortControllers: AbortController[] = []\n relations.forEach((relation) => {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: relation,\n })\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, loadRelationOptions, relationTo])\n\n /**\n * Load any options that were not returned\n * in the first 10 of each relation fetch\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={loadMoreOptions}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}