@payloadcms/ui 3.68.0-internal.35482da → 3.68.0-internal.4c88018

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.
Files changed (59) hide show
  1. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +1 -2
  2. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
  3. package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts.map +1 -1
  4. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +2 -1
  5. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js.map +1 -1
  6. package/dist/elements/DraggableSortable/index.d.ts.map +1 -1
  7. package/dist/elements/DraggableSortable/index.js +15 -12
  8. package/dist/elements/DraggableSortable/index.js.map +1 -1
  9. package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts.map +1 -1
  10. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +2 -1
  11. package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
  12. package/dist/elements/Link/index.d.ts.map +1 -1
  13. package/dist/elements/ListDrawer/DrawerContent.js +1 -2
  14. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  15. package/dist/elements/Thumbnail/createThumbnail.js +4 -8
  16. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  17. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -2
  18. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  19. package/dist/elements/WhereBuilder/index.js +1 -2
  20. package/dist/elements/WhereBuilder/index.js.map +1 -1
  21. package/dist/exports/client/{CodeEditor-QOURTFMT.js → CodeEditor-YX3DTLLV.js} +2 -2
  22. package/dist/exports/client/{DatePicker-VMLA35FO.js → DatePicker-KHWHHBGL.js} +2 -2
  23. package/dist/exports/client/chunk-AIZM2QMN.js +27 -0
  24. package/dist/exports/client/chunk-AIZM2QMN.js.map +7 -0
  25. package/dist/exports/client/chunk-KF6HIYPT.js +29 -0
  26. package/dist/exports/client/{chunk-7V3NHDV6.js.map → chunk-KF6HIYPT.js.map} +4 -4
  27. package/dist/exports/client/index.js +12 -12
  28. package/dist/exports/client/index.js.map +4 -4
  29. package/dist/exports/shared/index.js +1 -1
  30. package/dist/exports/shared/index.js.map +1 -1
  31. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  32. package/dist/fields/Checkbox/Input.js +1 -0
  33. package/dist/fields/Checkbox/Input.js.map +1 -1
  34. package/dist/forms/Form/index.js +3 -6
  35. package/dist/forms/Form/index.js.map +1 -1
  36. package/dist/forms/Form/mergeServerFormState.js +1 -2
  37. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  38. package/dist/hooks/useQueue.js +2 -4
  39. package/dist/hooks/useQueue.js.map +1 -1
  40. package/dist/providers/DocumentInfo/index.js +1 -2
  41. package/dist/providers/DocumentInfo/index.js.map +1 -1
  42. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  43. package/dist/providers/LivePreview/index.js +4 -1
  44. package/dist/providers/LivePreview/index.js.map +1 -1
  45. package/dist/providers/Root/index.d.ts.map +1 -1
  46. package/dist/providers/Root/index.js.map +1 -1
  47. package/dist/providers/ServerFunctions/index.js +8 -16
  48. package/dist/providers/ServerFunctions/index.js.map +1 -1
  49. package/dist/providers/TableColumns/buildColumnState/index.js +1 -2
  50. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  51. package/dist/styles.css +1 -1
  52. package/dist/views/Edit/index.js +1 -2
  53. package/dist/views/Edit/index.js.map +1 -1
  54. package/package.json +11 -12
  55. package/dist/exports/client/chunk-53XJ3K67.js +0 -27
  56. package/dist/exports/client/chunk-53XJ3K67.js.map +0 -7
  57. package/dist/exports/client/chunk-7V3NHDV6.js +0 -29
  58. /package/dist/exports/client/{CodeEditor-QOURTFMT.js.map → CodeEditor-YX3DTLLV.js.map} +0 -0
  59. /package/dist/exports/client/{DatePicker-VMLA35FO.js.map → DatePicker-KHWHHBGL.js.map} +0 -0
@@ -38,8 +38,7 @@ export const usePatchAnimateHeight = ({
38
38
  setContainerHeight(open ? '0px' : `${content.scrollHeight}px`);
39
39
  }
40
40
  // Trigger reflow
41
- container.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions
42
- ;
41
+ container.offsetHeight; // eslint-disable-line @typescript-eslint/no-unused-expressions
43
42
  setIsAnimating(true);
44
43
  container.style.transition = `height ${duration}ms ease`;
45
44
  setContainerHeight(open ? `${content.scrollHeight}px` : '0px');
@@ -1 +1 @@
1
- {"version":3,"file":"usePatchAnimateHeight.js","names":["useEffect","useMemo","useRef","useState","usePatchAnimateHeight","containerRef","contentRef","duration","open","browserSupportsKeywordAnimation","CSS","supports","hasInitialized","previousOpenState","isAnimating","setIsAnimating","resizeObserverRef","container","current","content","setContainerHeight","height","style","handleTransitionEnd","transition","animate","scrollHeight","offsetHeight","onTransitionEnd","removeEventListener","addEventListener","ResizeObserver","observe","disconnect"],"sources":["../../../src/elements/AnimateHeight/usePatchAnimateHeight.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react'\n\nexport const usePatchAnimateHeight = ({\n containerRef,\n contentRef,\n duration,\n open,\n}: {\n containerRef: React.RefObject<HTMLDivElement>\n contentRef: React.RefObject<HTMLDivElement>\n duration: number\n open: boolean\n}): { browserSupportsKeywordAnimation: boolean } => {\n const browserSupportsKeywordAnimation = useMemo(\n () =>\n typeof CSS !== 'undefined' && CSS && CSS.supports\n ? CSS.supports('interpolate-size', 'allow-keywords')\n : false,\n [],\n )\n\n const hasInitialized = useRef(false)\n const previousOpenState = useRef(open)\n const [isAnimating, setIsAnimating] = useState(false)\n const resizeObserverRef = useRef<null | ResizeObserver>(null)\n\n useEffect(() => {\n const container = containerRef.current\n const content = contentRef.current\n\n if (!container || !content || browserSupportsKeywordAnimation) {\n return\n }\n\n const setContainerHeight = (height: string) => {\n container.style.height = height\n }\n\n const handleTransitionEnd = () => {\n if (container) {\n container.style.transition = ''\n container.style.height = open ? 'auto' : '0px'\n setIsAnimating(false)\n }\n }\n\n const animate = () => {\n if (!hasInitialized.current && open) {\n // Skip animation on first render\n setContainerHeight('auto')\n setIsAnimating(false)\n return\n }\n\n hasInitialized.current = true\n\n if (previousOpenState.current !== open) {\n setContainerHeight(open ? '0px' : `${content.scrollHeight}px`)\n }\n\n // Trigger reflow\n container.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions\n\n setIsAnimating(true)\n container.style.transition = `height ${duration}ms ease`\n setContainerHeight(open ? `${content.scrollHeight}px` : '0px')\n\n const onTransitionEnd = () => {\n handleTransitionEnd()\n container.removeEventListener('transitionend', onTransitionEnd)\n }\n\n container.addEventListener('transitionend', onTransitionEnd)\n }\n\n animate()\n previousOpenState.current = open\n\n // Setup ResizeObserver\n resizeObserverRef.current = new ResizeObserver(() => {\n if (isAnimating) {\n container.style.height = open ? `${content.scrollHeight}px` : '0px'\n }\n })\n resizeObserverRef.current.observe(content)\n\n return () => {\n if (container) {\n container.style.transition = ''\n container.style.height = ''\n }\n resizeObserverRef.current?.disconnect()\n }\n }, [open, duration, containerRef, contentRef, browserSupportsKeywordAnimation])\n\n return { browserSupportsKeywordAnimation }\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAErD,OAAO,MAAMC,qBAAA,GAAwBA,CAAC;EACpCC,YAAY;EACZC,UAAU;EACVC,QAAQ;EACRC;AAAI,CAML;EACC,MAAMC,+BAAA,GAAkCR,OAAA,CACtC,MACE,OAAOS,GAAA,KAAQ,eAAeA,GAAA,IAAOA,GAAA,CAAIC,QAAQ,GAC7CD,GAAA,CAAIC,QAAQ,CAAC,oBAAoB,oBACjC,OACN,EAAE;EAGJ,MAAMC,cAAA,GAAiBV,MAAA,CAAO;EAC9B,MAAMW,iBAAA,GAAoBX,MAAA,CAAOM,IAAA;EACjC,MAAM,CAACM,WAAA,EAAaC,cAAA,CAAe,GAAGZ,QAAA,CAAS;EAC/C,MAAMa,iBAAA,GAAoBd,MAAA,CAA8B;EAExDF,SAAA,CAAU;IACR,MAAMiB,SAAA,GAAYZ,YAAA,CAAaa,OAAO;IACtC,MAAMC,OAAA,GAAUb,UAAA,CAAWY,OAAO;IAElC,IAAI,CAACD,SAAA,IAAa,CAACE,OAAA,IAAWV,+BAAA,EAAiC;MAC7D;IACF;IAEA,MAAMW,kBAAA,GAAsBC,MAAA;MAC1BJ,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGA,MAAA;IAC3B;IAEA,MAAME,mBAAA,GAAsBA,CAAA;MAC1B,IAAIN,SAAA,EAAW;QACbA,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG;QAC7BP,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGb,IAAA,GAAO,SAAS;QACzCO,cAAA,CAAe;MACjB;IACF;IAEA,MAAMU,OAAA,GAAUA,CAAA;MACd,IAAI,CAACb,cAAA,CAAeM,OAAO,IAAIV,IAAA,EAAM;QACnC;QACAY,kBAAA,CAAmB;QACnBL,cAAA,CAAe;QACf;MACF;MAEAH,cAAA,CAAeM,OAAO,GAAG;MAEzB,IAAIL,iBAAA,CAAkBK,OAAO,KAAKV,IAAA,EAAM;QACtCY,kBAAA,CAAmBZ,IAAA,GAAO,QAAQ,GAAGW,OAAA,CAAQO,YAAY,IAAI;MAC/D;MAEA;MACAT,SAAA,CAAUU,YAAY,CAAC;MAAA;MAEvBZ,cAAA,CAAe;MACfE,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG,UAAUjB,QAAA,SAAiB;MACxDa,kBAAA,CAAmBZ,IAAA,GAAO,GAAGW,OAAA,CAAQO,YAAY,IAAI,GAAG;MAExD,MAAME,eAAA,GAAkBA,CAAA;QACtBL,mBAAA;QACAN,SAAA,CAAUY,mBAAmB,CAAC,iBAAiBD,eAAA;MACjD;MAEAX,SAAA,CAAUa,gBAAgB,CAAC,iBAAiBF,eAAA;IAC9C;IAEAH,OAAA;IACAZ,iBAAA,CAAkBK,OAAO,GAAGV,IAAA;IAE5B;IACAQ,iBAAA,CAAkBE,OAAO,GAAG,IAAIa,cAAA,CAAe;MAC7C,IAAIjB,WAAA,EAAa;QACfG,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGb,IAAA,GAAO,GAAGW,OAAA,CAAQO,YAAY,IAAI,GAAG;MAChE;IACF;IACAV,iBAAA,CAAkBE,OAAO,CAACc,OAAO,CAACb,OAAA;IAElC,OAAO;MACL,IAAIF,SAAA,EAAW;QACbA,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG;QAC7BP,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAG;MAC3B;MACAL,iBAAA,CAAkBE,OAAO,EAAEe,UAAA;IAC7B;EACF,GAAG,CAACzB,IAAA,EAAMD,QAAA,EAAUF,YAAA,EAAcC,UAAA,EAAYG,+BAAA,CAAgC;EAE9E,OAAO;IAAEA;EAAgC;AAC3C","ignoreList":[]}
1
+ {"version":3,"file":"usePatchAnimateHeight.js","names":["useEffect","useMemo","useRef","useState","usePatchAnimateHeight","containerRef","contentRef","duration","open","browserSupportsKeywordAnimation","CSS","supports","hasInitialized","previousOpenState","isAnimating","setIsAnimating","resizeObserverRef","container","current","content","setContainerHeight","height","style","handleTransitionEnd","transition","animate","scrollHeight","offsetHeight","onTransitionEnd","removeEventListener","addEventListener","ResizeObserver","observe","disconnect"],"sources":["../../../src/elements/AnimateHeight/usePatchAnimateHeight.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react'\n\nexport const usePatchAnimateHeight = ({\n containerRef,\n contentRef,\n duration,\n open,\n}: {\n containerRef: React.RefObject<HTMLDivElement>\n contentRef: React.RefObject<HTMLDivElement>\n duration: number\n open: boolean\n}): { browserSupportsKeywordAnimation: boolean } => {\n const browserSupportsKeywordAnimation = useMemo(\n () =>\n typeof CSS !== 'undefined' && CSS && CSS.supports\n ? CSS.supports('interpolate-size', 'allow-keywords')\n : false,\n [],\n )\n\n const hasInitialized = useRef(false)\n const previousOpenState = useRef(open)\n const [isAnimating, setIsAnimating] = useState(false)\n const resizeObserverRef = useRef<null | ResizeObserver>(null)\n\n useEffect(() => {\n const container = containerRef.current\n const content = contentRef.current\n\n if (!container || !content || browserSupportsKeywordAnimation) {\n return\n }\n\n const setContainerHeight = (height: string) => {\n container.style.height = height\n }\n\n const handleTransitionEnd = () => {\n if (container) {\n container.style.transition = ''\n container.style.height = open ? 'auto' : '0px'\n setIsAnimating(false)\n }\n }\n\n const animate = () => {\n if (!hasInitialized.current && open) {\n // Skip animation on first render\n setContainerHeight('auto')\n setIsAnimating(false)\n return\n }\n\n hasInitialized.current = true\n\n if (previousOpenState.current !== open) {\n setContainerHeight(open ? '0px' : `${content.scrollHeight}px`)\n }\n\n // Trigger reflow\n container.offsetHeight // eslint-disable-line @typescript-eslint/no-unused-expressions\n\n setIsAnimating(true)\n container.style.transition = `height ${duration}ms ease`\n setContainerHeight(open ? `${content.scrollHeight}px` : '0px')\n\n const onTransitionEnd = () => {\n handleTransitionEnd()\n container.removeEventListener('transitionend', onTransitionEnd)\n }\n\n container.addEventListener('transitionend', onTransitionEnd)\n }\n\n animate()\n previousOpenState.current = open\n\n // Setup ResizeObserver\n resizeObserverRef.current = new ResizeObserver(() => {\n if (isAnimating) {\n container.style.height = open ? `${content.scrollHeight}px` : '0px'\n }\n })\n resizeObserverRef.current.observe(content)\n\n return () => {\n if (container) {\n container.style.transition = ''\n container.style.height = ''\n }\n resizeObserverRef.current?.disconnect()\n }\n }, [open, duration, containerRef, contentRef, browserSupportsKeywordAnimation])\n\n return { browserSupportsKeywordAnimation }\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAErD,OAAO,MAAMC,qBAAA,GAAwBA,CAAC;EACpCC,YAAY;EACZC,UAAU;EACVC,QAAQ;EACRC;AAAI,CAML;EACC,MAAMC,+BAAA,GAAkCR,OAAA,CACtC,MACE,OAAOS,GAAA,KAAQ,eAAeA,GAAA,IAAOA,GAAA,CAAIC,QAAQ,GAC7CD,GAAA,CAAIC,QAAQ,CAAC,oBAAoB,oBACjC,OACN,EAAE;EAGJ,MAAMC,cAAA,GAAiBV,MAAA,CAAO;EAC9B,MAAMW,iBAAA,GAAoBX,MAAA,CAAOM,IAAA;EACjC,MAAM,CAACM,WAAA,EAAaC,cAAA,CAAe,GAAGZ,QAAA,CAAS;EAC/C,MAAMa,iBAAA,GAAoBd,MAAA,CAA8B;EAExDF,SAAA,CAAU;IACR,MAAMiB,SAAA,GAAYZ,YAAA,CAAaa,OAAO;IACtC,MAAMC,OAAA,GAAUb,UAAA,CAAWY,OAAO;IAElC,IAAI,CAACD,SAAA,IAAa,CAACE,OAAA,IAAWV,+BAAA,EAAiC;MAC7D;IACF;IAEA,MAAMW,kBAAA,GAAsBC,MAAA;MAC1BJ,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGA,MAAA;IAC3B;IAEA,MAAME,mBAAA,GAAsBA,CAAA;MAC1B,IAAIN,SAAA,EAAW;QACbA,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG;QAC7BP,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGb,IAAA,GAAO,SAAS;QACzCO,cAAA,CAAe;MACjB;IACF;IAEA,MAAMU,OAAA,GAAUA,CAAA;MACd,IAAI,CAACb,cAAA,CAAeM,OAAO,IAAIV,IAAA,EAAM;QACnC;QACAY,kBAAA,CAAmB;QACnBL,cAAA,CAAe;QACf;MACF;MAEAH,cAAA,CAAeM,OAAO,GAAG;MAEzB,IAAIL,iBAAA,CAAkBK,OAAO,KAAKV,IAAA,EAAM;QACtCY,kBAAA,CAAmBZ,IAAA,GAAO,QAAQ,GAAGW,OAAA,CAAQO,YAAY,IAAI;MAC/D;MAEA;MACAT,SAAA,CAAUU,YAAY,EAAC;MAEvBZ,cAAA,CAAe;MACfE,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG,UAAUjB,QAAA,SAAiB;MACxDa,kBAAA,CAAmBZ,IAAA,GAAO,GAAGW,OAAA,CAAQO,YAAY,IAAI,GAAG;MAExD,MAAME,eAAA,GAAkBA,CAAA;QACtBL,mBAAA;QACAN,SAAA,CAAUY,mBAAmB,CAAC,iBAAiBD,eAAA;MACjD;MAEAX,SAAA,CAAUa,gBAAgB,CAAC,iBAAiBF,eAAA;IAC9C;IAEAH,OAAA;IACAZ,iBAAA,CAAkBK,OAAO,GAAGV,IAAA;IAE5B;IACAQ,iBAAA,CAAkBE,OAAO,GAAG,IAAIa,cAAA,CAAe;MAC7C,IAAIjB,WAAA,EAAa;QACfG,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAGb,IAAA,GAAO,GAAGW,OAAA,CAAQO,YAAY,IAAI,GAAG;MAChE;IACF;IACAV,iBAAA,CAAkBE,OAAO,CAACc,OAAO,CAACb,OAAA;IAElC,OAAO;MACL,IAAIF,SAAA,EAAW;QACbA,SAAA,CAAUK,KAAK,CAACE,UAAU,GAAG;QAC7BP,SAAA,CAAUK,KAAK,CAACD,MAAM,GAAG;MAC3B;MACAL,iBAAA,CAAkBE,OAAO,EAAEe,UAAA;IAC7B;EACF,GAAG,CAACzB,IAAA,EAAMD,QAAA,EAAUF,YAAA,EAAcC,UAAA,EAAYG,+BAAA,CAAgC;EAE9E,OAAO;IAAEA;EAAgC;AAC3C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DraggableSortable/DraggableSortableItem/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAC1C;IACE,QAAQ,EAAE,aAAa,CAAA;CACxB,GAAG,qBAAqB,CA2B1B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DraggableSortable/DraggableSortableItem/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAC1C;IACE,QAAQ,EAAE,aAAa,CAAA;CACxB,GAAG,qBAAqB,CA8B1B,CAAA"}
@@ -40,7 +40,8 @@ export const DraggableSortableItem = props => {
40
40
  ...attributes,
41
41
  style: {
42
42
  cursor: t1
43
- }
43
+ },
44
+ suppressHydrationWarning: true
44
45
  },
45
46
  isDragging,
46
47
  listeners,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","Fragment","useDraggableSortable","DraggableSortableItem","props","$","id","children","disabled","t0","attributes","isDragging","listeners","setNodeRef","transform","transition","t1","t2","_jsx","style","cursor"],"sources":["../../../../src/elements/DraggableSortable/DraggableSortableItem/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport React, { Fragment } from 'react'\n\nimport type { ChildFunction } from './types.js'\n\nimport { useDraggableSortable } from '../useDraggableSortable/index.js'\n\nexport const DraggableSortableItem: React.FC<\n {\n children: ChildFunction\n } & UseDraggableArguments\n> = (props) => {\n const { id, children, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } =\n useDraggableSortable({\n id,\n disabled,\n })\n\n return (\n <Fragment>\n {children({\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n },\n },\n isDragging,\n listeners,\n setNodeRef,\n transform,\n transition,\n })}\n </Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAIhC,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,qBAAA,GAITC,KAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EACF;IAAAO,EAAA;IAAAC,QAAA;IAAAC;EAAA,IAAmCJ,KAAA;EAAA,IAAAK,EAAA;EAAA,IAAAJ,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAC,EAAA;IAGZG,EAAA;MAAAH,EAAA;MAAAE;IAAA;IAGrBH,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAJF;IAAAK,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC;EAAA,IACEb,oBAAA,CAAqBO,EAGrB;EAQgB,MAAAO,EAAA,GAAAL,UAAA,GAAa,aAAa;EAAA,IAAAM,EAAA;EAAA,IAAAZ,CAAA,QAAAK,UAAA,IAAAL,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAQ,UAAA,IAAAR,CAAA,QAAAW,EAAA,IAAAX,CAAA,QAAAS,SAAA,IAAAT,CAAA,SAAAU,UAAA;IAL1CE,EAAA,GAAAC,IAAA,CAAAjB,QAAA;MAAAM,QAAA,EACGA,QAAA;QAAAG,UAAA;UAAA,GAEMA,UAAU;UAAAS,KAAA;YAAAC,MAAA,EAEHJ;UAA0B;QAAA;QAAAL,UAAA;QAAAC,SAAA;QAAAC,UAAA;QAAAC,SAAA;QAAAC;MAAA,CAQxC;IAAA,C;;;;;;;;;;;;;SAbFE,E;CAgBJ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","Fragment","useDraggableSortable","DraggableSortableItem","props","$","id","children","disabled","t0","attributes","isDragging","listeners","setNodeRef","transform","transition","t1","t2","_jsx","style","cursor","suppressHydrationWarning"],"sources":["../../../../src/elements/DraggableSortable/DraggableSortableItem/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport React, { Fragment } from 'react'\n\nimport type { ChildFunction } from './types.js'\n\nimport { useDraggableSortable } from '../useDraggableSortable/index.js'\n\nexport const DraggableSortableItem: React.FC<\n {\n children: ChildFunction\n } & UseDraggableArguments\n> = (props) => {\n const { id, children, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } =\n useDraggableSortable({\n id,\n disabled,\n })\n\n return (\n <Fragment>\n {children({\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n },\n // TODO: due to a bug in Next.js or react, the useId() we pass to the DnDContext, which is used for the aria-describedBy attribute here, occasionally does not match the server side rendering, even though it should.\n // Issue: https://github.com/vercel/next.js/issues/84029 - revisit this when the issue is fixed.\n suppressHydrationWarning: true,\n },\n isDragging,\n listeners,\n setNodeRef,\n transform,\n transition,\n })}\n </Fragment>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,IAASC,QAAQ,QAAQ;AAIhC,SAASC,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,qBAAA,GAITC,KAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EACF;IAAAO,EAAA;IAAAC,QAAA;IAAAC;EAAA,IAAmCJ,KAAA;EAAA,IAAAK,EAAA;EAAA,IAAAJ,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAC,EAAA;IAGZG,EAAA;MAAAH,EAAA;MAAAE;IAAA;IAGrBH,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAJF;IAAAK,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC;EAAA,IACEb,oBAAA,CAAqBO,EAGrB;EAQgB,MAAAO,EAAA,GAAAL,UAAA,GAAa,aAAa;EAAA,IAAAM,EAAA;EAAA,IAAAZ,CAAA,QAAAK,UAAA,IAAAL,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAQ,UAAA,IAAAR,CAAA,QAAAW,EAAA,IAAAX,CAAA,QAAAS,SAAA,IAAAT,CAAA,SAAAU,UAAA;IAL1CE,EAAA,GAAAC,IAAA,CAAAjB,QAAA;MAAAM,QAAA,EACGA,QAAA;QAAAG,UAAA;UAAA,GAEMA,UAAU;UAAAS,KAAA;YAAAC,MAAA,EAEHJ;UAA0B;UAAAK,wBAAA;QAAA;QAAAV,UAAA;QAAAC,SAAA;QAAAC,UAAA;QAAAC,SAAA;QAAAC;MAAA,CAWxC;IAAA,C;;;;;;;;;;;;;SAhBFE,E;CAmBJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DraggableSortable/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA6B,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuE7C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DraggableSortable/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAA6B,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,KAAK,EAAE,CAAA;AAEhB,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6E7C,CAAA"}
@@ -6,7 +6,7 @@ import { closestCenter, DndContext, KeyboardSensor, PointerSensor, useDroppable,
6
6
  import { SortableContext, sortableKeyboardCoordinates } from '@dnd-kit/sortable';
7
7
  import React, { useCallback, useId } from 'react';
8
8
  export const DraggableSortable = props => {
9
- const $ = _c(18);
9
+ const $ = _c(19);
10
10
  const {
11
11
  children,
12
12
  className,
@@ -14,13 +14,14 @@ export const DraggableSortable = props => {
14
14
  onDragEnd,
15
15
  onDragStart
16
16
  } = props;
17
- const id = useId();
17
+ const dndContextID = useId();
18
+ const sortableContextID = useId();
18
19
  let t0;
19
- if ($[0] !== id) {
20
+ if ($[0] !== dndContextID) {
20
21
  t0 = {
21
- id
22
+ id: dndContextID
22
23
  };
23
- $[0] = id;
24
+ $[0] = dndContextID;
24
25
  $[1] = t0;
25
26
  } else {
26
27
  t0 = $[1];
@@ -98,14 +99,15 @@ export const DraggableSortable = props => {
98
99
  }
99
100
  const handleDragStart = t4;
100
101
  let t5;
101
- if ($[9] !== children || $[10] !== className || $[11] !== handleDragEnd || $[12] !== handleDragStart || $[13] !== id || $[14] !== ids || $[15] !== sensors || $[16] !== setNodeRef) {
102
+ if ($[9] !== children || $[10] !== className || $[11] !== dndContextID || $[12] !== handleDragEnd || $[13] !== handleDragStart || $[14] !== ids || $[15] !== sensors || $[16] !== setNodeRef || $[17] !== sortableContextID) {
102
103
  t5 = _jsx(DndContext, {
103
104
  collisionDetection: closestCenter,
104
- id,
105
+ id: dndContextID,
105
106
  onDragEnd: handleDragEnd,
106
107
  onDragStart: handleDragStart,
107
108
  sensors,
108
109
  children: _jsx(SortableContext, {
110
+ id: sortableContextID,
109
111
  items: ids,
110
112
  children: _jsx("div", {
111
113
  className,
@@ -116,15 +118,16 @@ export const DraggableSortable = props => {
116
118
  });
117
119
  $[9] = children;
118
120
  $[10] = className;
119
- $[11] = handleDragEnd;
120
- $[12] = handleDragStart;
121
- $[13] = id;
121
+ $[11] = dndContextID;
122
+ $[12] = handleDragEnd;
123
+ $[13] = handleDragStart;
122
124
  $[14] = ids;
123
125
  $[15] = sensors;
124
126
  $[16] = setNodeRef;
125
- $[17] = t5;
127
+ $[17] = sortableContextID;
128
+ $[18] = t5;
126
129
  } else {
127
- t5 = $[17];
130
+ t5 = $[18];
128
131
  }
129
132
  return t5;
130
133
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","closestCenter","DndContext","KeyboardSensor","PointerSensor","useDroppable","useSensor","useSensors","SortableContext","sortableKeyboardCoordinates","React","useCallback","useId","DraggableSortable","props","$","children","className","ids","onDragEnd","onDragStart","id","t0","setNodeRef","t1","Symbol","for","activationConstraint","distance","t2","coordinateGetter","sensors","t3","event","active","over","activatorEvent","stopPropagation","moveFromIndex","findIndex","_id","moveToIndex","_id_0","handleDragEnd","t4","event_0","active_0","handleDragStart","t5","_jsx","collisionDetection","items","ref"],"sources":["../../../src/elements/DraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { DragEndEvent, DragStartEvent } from '@dnd-kit/core'\n\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport { SortableContext, sortableKeyboardCoordinates } from '@dnd-kit/sortable'\nimport React, { useCallback, useId } from 'react'\n\nimport type { Props } from './types.js'\n\nexport { Props }\n\nexport const DraggableSortable: React.FC<Props> = (props) => {\n const { children, className, ids, onDragEnd, onDragStart } = props\n\n const id = useId()\n\n const { setNodeRef } = useDroppable({\n id,\n })\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n\n event.activatorEvent.stopPropagation()\n\n if (!active || !over) {\n return\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd({\n event,\n moveFromIndex: ids.findIndex((_id) => _id === active.id),\n moveToIndex: ids.findIndex((_id) => _id === over.id),\n })\n }\n },\n [onDragEnd, ids],\n )\n\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n const { active } = event\n\n if (!active) {\n return\n }\n\n if (typeof onDragStart === 'function') {\n onDragStart({ id: active.id, event })\n }\n },\n [onDragStart],\n )\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n id={id}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <SortableContext items={ids}>\n <div className={className} ref={setNodeRef}>\n {children}\n </div>\n </SortableContext>\n </DndContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","closestCenter","DndContext","KeyboardSensor","PointerSensor","useDroppable","useSensor","useSensors","SortableContext","sortableKeyboardCoordinates","React","useCallback","useId","DraggableSortable","props","$","children","className","ids","onDragEnd","onDragStart","dndContextID","sortableContextID","t0","id","setNodeRef","t1","Symbol","for","activationConstraint","distance","t2","coordinateGetter","sensors","t3","event","active","over","activatorEvent","stopPropagation","moveFromIndex","findIndex","_id","moveToIndex","_id_0","handleDragEnd","t4","event_0","active_0","handleDragStart","t5","_jsx","collisionDetection","items","ref"],"sources":["../../../src/elements/DraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { DragEndEvent, DragStartEvent } from '@dnd-kit/core'\n\nimport {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport { SortableContext, sortableKeyboardCoordinates } from '@dnd-kit/sortable'\nimport React, { useCallback, useId } from 'react'\n\nimport type { Props } from './types.js'\n\nexport { Props }\n\nexport const DraggableSortable: React.FC<Props> = (props) => {\n const { children, className, ids, onDragEnd, onDragStart } = props\n\n const dndContextID = useId()\n const sortableContextID = useId()\n\n const { setNodeRef } = useDroppable({\n id: dndContextID,\n })\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event\n\n event.activatorEvent.stopPropagation()\n\n if (!active || !over) {\n return\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd({\n event,\n moveFromIndex: ids.findIndex((_id) => _id === active.id),\n moveToIndex: ids.findIndex((_id) => _id === over.id),\n })\n }\n },\n [onDragEnd, ids],\n )\n\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n const { active } = event\n\n if (!active) {\n return\n }\n\n if (typeof onDragStart === 'function') {\n onDragStart({ id: active.id, event })\n }\n },\n [onDragStart],\n )\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n // Provide stable ID to fix hydration issues: https://github.com/clauderic/dnd-kit/issues/926\n id={dndContextID}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n sensors={sensors}\n >\n <SortableContext\n // Provide stable ID to fix hydration issues: https://github.com/clauderic/dnd-kit/issues/926\n id={sortableContextID}\n items={ids}\n >\n <div className={className} ref={setNodeRef}>\n {children}\n </div>\n </SortableContext>\n </DndContext>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SACEC,aAAa,EACbC,UAAU,EACVC,cAAc,EACdC,aAAa,EACbC,YAAY,EACZC,SAAS,EACTC,UAAU,QACL;AACP,SAASC,eAAe,EAAEC,2BAA2B,QAAQ;AAC7D,OAAOC,KAAA,IAASC,WAAW,EAAEC,KAAK,QAAQ;AAM1C,OAAO,MAAMC,iBAAA,GAAqCC,KAAA;EAAA,MAAAC,CAAA,GAAAf,EAAA;EAChD;IAAAgB,QAAA;IAAAC,SAAA;IAAAC,GAAA;IAAAC,SAAA;IAAAC;EAAA,IAA6DN,KAAA;EAE7D,MAAAO,YAAA,GAAqBT,KAAA;EACrB,MAAAU,iBAAA,GAA0BV,KAAA;EAAA,IAAAW,EAAA;EAAA,IAAAR,CAAA,QAAAM,YAAA;IAEUE,EAAA;MAAAC,EAAA,EAC9BH;IAAA;IACNN,CAAA,MAAAM,YAAA;IAAAN,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAFA;IAAAU;EAAA,IAAuBpB,YAAA,CAAakB,EAEpC;EAAA,IAAAG,EAAA;EAAA,IAAAX,CAAA,QAAAY,MAAA,CAAAC,GAAA;IAG2BF,EAAA;MAAAG,oBAAA;QAAAC,QAAA;MAAA;IAAA;IAIzBf,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAhB,CAAA,QAAAY,MAAA,CAAAC,GAAA;IAC0BG,EAAA;MAAAC,gBAAA,EAAAvB;IAAA;IAE1BM,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EARF,MAAAkB,OAAA,GAAgB1B,UAAA,CACdD,SAAA,CAAAF,aAAA,EAAyBsB,EAIzB,GACApB,SAAA,CAAAH,cAAA,EAA0B4B,EAE1B;EAAA,IAAAG,EAAA;EAAA,IAAAnB,CAAA,QAAAG,GAAA,IAAAH,CAAA,QAAAI,SAAA;IAIAe,EAAA,GAAAC,KAAA;MACE;QAAAC,MAAA;QAAAC;MAAA,IAAyBF,KAAA;MAEzBA,KAAA,CAAAG,cAAA,CAAAC,eAAA,CAAoC;MAAA,IAEhC,CAACH,MAAA,KAAWC,IAAA;QAAA;MAAA;MAAA,IAIZ,OAAOlB,SAAA,KAAc;QACvBA,SAAA;UAAAgB,KAAA;UAAAK,aAAA,EAEiBtB,GAAA,CAAAuB,SAAA,CAAAC,GAAA,IAAuBA,GAAA,KAAQN,MAAA,CAAAZ,EAAS;UAAAmB,WAAA,EAC1CzB,GAAA,CAAAuB,SAAA,CAAAG,KAAA,IAAuBF,KAAA,KAAQL,IAAA,CAAAb,EAAO;QAAA,CACrD;MAAA;IAAA;IAEJT,CAAA,MAAAG,GAAA;IAAAH,CAAA,MAAAI,SAAA;IAAAJ,CAAA,MAAAmB,EAAA;EAAA;IAAAA,EAAA,GAAAnB,CAAA;EAAA;EAjBF,MAAA8B,aAAA,GAAsBX,EAkBJ;EAAA,IAAAY,EAAA;EAAA,IAAA/B,CAAA,QAAAK,WAAA;IAIhB0B,EAAA,GAAAC,OAAA;MACE;QAAAX,MAAA,EAAAY;MAAA,IAAmBb,OAAA;MAAA,KAEdC,QAAA;QAAA;MAAA;MAAA,IAID,OAAOhB,WAAA,KAAgB;QACzBA,WAAA;UAAAI,EAAA,EAAkBY,QAAA,CAAAZ,EAAA;UAAAW,KAAA,EAAWA;QAAA,CAAM;MAAA;IAAA;IAEvCpB,CAAA,MAAAK,WAAA;IAAAL,CAAA,MAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAXF,MAAAkC,eAAA,GAAwBH,EAYT;EAAA,IAAAI,EAAA;EAAA,IAAAnC,CAAA,QAAAC,QAAA,IAAAD,CAAA,SAAAE,SAAA,IAAAF,CAAA,SAAAM,YAAA,IAAAN,CAAA,SAAA8B,aAAA,IAAA9B,CAAA,SAAAkC,eAAA,IAAAlC,CAAA,SAAAG,GAAA,IAAAH,CAAA,SAAAkB,OAAA,IAAAlB,CAAA,SAAAU,UAAA,IAAAV,CAAA,SAAAO,iBAAA;IAIb4B,EAAA,GAAAC,IAAA,CAAAjD,UAAA;MAAAkD,kBAAA,EAAAnD,aAAA;MAAAuB,EAAA,EAGMH,YAAA;MAAAF,SAAA,EACO0B,aAAA;MAAAzB,WAAA,EACE6B,eAAA;MAAAhB,OAAA;MAAAjB,QAAA,EAGbmC,IAAA,CAAA3C,eAAA;QAAAgB,EAAA,EAEMF,iBAAA;QAAA+B,KAAA,EACGnC,GAAA;QAAAF,QAAA,EAEPmC,IAAA,CAAC;UAAAlC,SAAA;UAAAqC,GAAA,EAA+B7B,UAAA;UAAAT;QAAA,C;;;;;;;;;;;;;;;;SAbpCkC,E;CAmBJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAI1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAE5D,eAAO,MAAM,oBAAoB,UAAW,qBAAqB,KAAG,0BA0BnE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAI1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAE5D,eAAO,MAAM,oBAAoB,UAAW,qBAAqB,KAAG,0BA6BnE,CAAA"}
@@ -56,7 +56,8 @@ export const useDraggableSortable = props => {
56
56
  if ($[7] !== attributes || $[8] !== t3) {
57
57
  t4 = {
58
58
  ...attributes,
59
- style: t3
59
+ style: t3,
60
+ suppressHydrationWarning: true
60
61
  };
61
62
  $[7] = attributes;
62
63
  $[8] = t3;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useSortable","useDraggableSortable","props","$","id","disabled","t0","Symbol","for","duration","easing","t1","transition","attributes","isDragging","listeners","setNodeRef","transform","t2","t3","cursor","t4","style","t5","x","y","t6"],"sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport { useSortable } from '@dnd-kit/sortable'\n\nimport type { UseDraggableSortableReturn } from './types.js'\n\nexport const useDraggableSortable = (props: UseDraggableArguments): UseDraggableSortableReturn => {\n const { id, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n id,\n disabled,\n transition: {\n duration: 250,\n easing: 'cubic-bezier(0, 0.2, 0.2, 1)',\n },\n })\n\n return {\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n transition,\n },\n },\n isDragging,\n listeners,\n setNodeRef,\n transform: transform && `translate3d(${transform.x}px, ${transform.y}px, 0)`, // translate3d is faster than translate in most browsers\n transition,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,WAAW,QAAQ;AAI5B,OAAO,MAAMC,oBAAA,GAAuBC,KAAA;EAAA,MAAAC,CAAA,GAAAJ,EAAA;EAClC;IAAAK,EAAA;IAAAC;EAAA,IAAyBH,KAAA;EAAA,IAAAI,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAKXF,EAAA;MAAAG,QAAA;MAAAC,MAAA,EAEF;IAAA;IACVP,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAC,EAAA;IAN2FO,EAAA;MAAAP,EAAA;MAAAC,QAAA;MAAAO,UAAA,EAG/EN;IAGZ;IACFH,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAPA;IAAAU,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAL;EAAA,IAAiFZ,WAAA,CAAYW,EAO7F;EAMc,MAAAO,EAAA,GAAAJ,UAAA,GAAa,aAAa;EAAA,IAAAK,EAAA;EAAA,IAAAhB,CAAA,QAAAe,EAAA,IAAAf,CAAA,QAAAS,UAAA;IAD7BO,EAAA;MAAAC,MAAA,EACGF,EAA0B;MAAAN;IAAA;IAEpCT,CAAA,MAAAe,EAAA;IAAAf,CAAA,MAAAS,UAAA;IAAAT,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAU,UAAA,IAAAV,CAAA,QAAAgB,EAAA;IALUE,EAAA;MAAA,GACPR,UAAU;MAAAS,KAAA,EACNH;IAGP;IACFhB,CAAA,MAAAU,UAAA;IAAAV,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAIW,MAAAoB,EAAA,GAAAN,SAAA,IAAa,eAAeA,SAAA,CAAAO,CAAA,OAAkBP,SAAA,CAAAQ,CAAA,QAAmB;EAAA,IAAAC,EAAA;EAAA,IAAAvB,CAAA,SAAAW,UAAA,IAAAX,CAAA,SAAAY,SAAA,IAAAZ,CAAA,SAAAa,UAAA,IAAAb,CAAA,SAAAkB,EAAA,IAAAlB,CAAA,SAAAoB,EAAA,IAAApB,CAAA,SAAAS,UAAA;IAXvEc,EAAA;MAAAb,UAAA,EACOQ,EAMZ;MAAAP,UAAA;MAAAC,SAAA;MAAAC,UAAA;MAAAC,SAAA,EAIWM,EAAiE;MAAAX;IAAA;IAE9ET,CAAA,OAAAW,UAAA;IAAAX,CAAA,OAAAY,SAAA;IAAAZ,CAAA,OAAAa,UAAA;IAAAb,CAAA,OAAAkB,EAAA;IAAAlB,CAAA,OAAAoB,EAAA;IAAApB,CAAA,OAAAS,UAAA;IAAAT,CAAA,OAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAAA,OAbOuB,EAaP;AAAA,CACF","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useSortable","useDraggableSortable","props","$","id","disabled","t0","Symbol","for","duration","easing","t1","transition","attributes","isDragging","listeners","setNodeRef","transform","t2","t3","cursor","t4","style","suppressHydrationWarning","t5","x","y","t6"],"sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport { useSortable } from '@dnd-kit/sortable'\n\nimport type { UseDraggableSortableReturn } from './types.js'\n\nexport const useDraggableSortable = (props: UseDraggableArguments): UseDraggableSortableReturn => {\n const { id, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n id,\n disabled,\n transition: {\n duration: 250,\n easing: 'cubic-bezier(0, 0.2, 0.2, 1)',\n },\n })\n\n return {\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n transition,\n },\n // TODO: due to a bug in Next.js or react, the useId() we pass to the DnDContext, which is used for the aria-describedBy attribute here, occasionally does not match the server side rendering, even though it should.\n // Issue: https://github.com/vercel/next.js/issues/84029 - revisit this when the issue is fixed.\n suppressHydrationWarning: true,\n },\n isDragging,\n listeners,\n setNodeRef,\n transform: transform && `translate3d(${transform.x}px, ${transform.y}px, 0)`, // translate3d is faster than translate in most browsers\n transition,\n }\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,WAAW,QAAQ;AAI5B,OAAO,MAAMC,oBAAA,GAAuBC,KAAA;EAAA,MAAAC,CAAA,GAAAJ,EAAA;EAClC;IAAAK,EAAA;IAAAC;EAAA,IAAyBH,KAAA;EAAA,IAAAI,EAAA;EAAA,IAAAH,CAAA,QAAAI,MAAA,CAAAC,GAAA;IAKXF,EAAA;MAAAG,QAAA;MAAAC,MAAA,EAEF;IAAA;IACVP,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAR,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAC,EAAA;IAN2FO,EAAA;MAAAP,EAAA;MAAAC,QAAA;MAAAO,UAAA,EAG/EN;IAGZ;IACFH,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAPA;IAAAU,UAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC,SAAA;IAAAL;EAAA,IAAiFZ,WAAA,CAAYW,EAO7F;EAMc,MAAAO,EAAA,GAAAJ,UAAA,GAAa,aAAa;EAAA,IAAAK,EAAA;EAAA,IAAAhB,CAAA,QAAAe,EAAA,IAAAf,CAAA,QAAAS,UAAA;IAD7BO,EAAA;MAAAC,MAAA,EACGF,EAA0B;MAAAN;IAAA;IAEpCT,CAAA,MAAAe,EAAA;IAAAf,CAAA,MAAAS,UAAA;IAAAT,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAU,UAAA,IAAAV,CAAA,QAAAgB,EAAA;IALUE,EAAA;MAAA,GACPR,UAAU;MAAAS,KAAA,EACNH,EAGP;MAAAI,wBAAA;IAAA;IAIFpB,CAAA,MAAAU,UAAA;IAAAV,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAIW,MAAAqB,EAAA,GAAAP,SAAA,IAAa,eAAeA,SAAA,CAAAQ,CAAA,OAAkBR,SAAA,CAAAS,CAAA,QAAmB;EAAA,IAAAC,EAAA;EAAA,IAAAxB,CAAA,SAAAW,UAAA,IAAAX,CAAA,SAAAY,SAAA,IAAAZ,CAAA,SAAAa,UAAA,IAAAb,CAAA,SAAAkB,EAAA,IAAAlB,CAAA,SAAAqB,EAAA,IAAArB,CAAA,SAAAS,UAAA;IAdvEe,EAAA;MAAAd,UAAA,EACOQ,EASZ;MAAAP,UAAA;MAAAC,SAAA;MAAAC,UAAA;MAAAC,SAAA,EAIWO,EAAiE;MAAAZ;IAAA;IAE9ET,CAAA,OAAAW,UAAA;IAAAX,CAAA,OAAAY,SAAA;IAAAZ,CAAA,OAAAa,UAAA;IAAAb,CAAA,OAAAkB,EAAA;IAAAlB,CAAA,OAAAqB,EAAA;IAAArB,CAAA,OAAAS,UAAA;IAAAT,CAAA,OAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EAAA,OAhBOwB,EAgBP;AAAA,CACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eAyE2tF,MAAO,SAAS;2CAzEnqF,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+ChC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eAyEmvF,MAAO,SAAS;2CAzE3rF,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+ChC,CAAA"}
@@ -111,8 +111,7 @@ export const ListDrawerContent = ({
111
111
  }
112
112
  setIsLoading(false);
113
113
  } catch (_err) {
114
- console.error('Error rendering List View: ', _err) // eslint-disable-line no-console
115
- ;
114
+ console.error('Error rendering List View: ', _err); // eslint-disable-line no-console
116
115
  if (isOpen) {
117
116
  closeModal(drawerSlug);
118
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.js","names":["useModal","hoistQueryParamsToAnd","React","useCallback","useEffect","useState","useDocumentDrawer","useEffectEvent","useConfig","useServerFunctions","ListDrawerContextProvider","LoadingOverlay","ListDrawerContent","allowCreate","collectionSlugs","disableQueryPresets","drawerSlug","enableRowSelections","filterOptions","onBulkSelect","onSelect","overrideEntityVisibility","selectedCollection","collectionSlugFromProps","closeModal","isModalOpen","serverFunction","ListView","setListView","undefined","isLoading","setIsLoading","config","collections","getEntityConfig","isOpen","enabledCollections","filter","slug","includes","selectedOption","setSelectedOption","initialSelection","found","collectionSlug","label","labels","value","DocumentDrawer","DocumentDrawerToggler","documentDrawerSlug","updateSelectedOption","refresh","query","newQuery","where","filterOption","result","name","args","disableBulkDelete","disableBulkEdit","List","_err","console","error","onCreateNew","doc","docID","id","onQueryChange","setMySelectedOption","incomingSelection","refreshSelf","incomingCollectionSlug","_jsx","_jsxs","createNewDrawerSlug","onSave"],"sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { CollectionSlug, ListQuery } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { hoistQueryParamsToAnd } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ListDrawerContextProps, ListDrawerContextType } from '../ListDrawer/Provider.js'\nimport type {\n ListDrawerProps,\n RenderListServerFnArgs,\n RenderListServerFnReturnType,\n} from './types.js'\n\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { ListDrawerContextProvider } from '../ListDrawer/Provider.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { type Option } from '../ReactSelect/index.js'\n\nexport const ListDrawerContent: React.FC<ListDrawerProps> = ({\n allowCreate = true,\n collectionSlugs,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n filterOptions,\n onBulkSelect,\n onSelect,\n overrideEntityVisibility = true,\n selectedCollection: collectionSlugFromProps,\n}) => {\n const { closeModal, isModalOpen } = useModal()\n\n const { serverFunction } = useServerFunctions()\n const [ListView, setListView] = useState<React.ReactNode>(undefined)\n const [isLoading, setIsLoading] = useState(true)\n\n const {\n config: { collections },\n getEntityConfig,\n } = useConfig()\n\n const isOpen = isModalOpen(drawerSlug)\n\n const enabledCollections = collections.filter(({ slug }) => {\n return collectionSlugs.includes(slug)\n })\n\n const [selectedOption, setSelectedOption] = useState<Option<string>>(() => {\n const initialSelection = collectionSlugFromProps || enabledCollections[0]?.slug\n const found = getEntityConfig({ collectionSlug: initialSelection })\n\n return found\n ? {\n label: found.labels,\n value: found.slug,\n }\n : undefined\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { drawerSlug: documentDrawerSlug }] =\n useDocumentDrawer({\n collectionSlug: selectedOption.value,\n })\n\n const updateSelectedOption = useEffectEvent((collectionSlug: CollectionSlug) => {\n if (collectionSlug && collectionSlug !== selectedOption?.value) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug })?.labels,\n value: collectionSlug,\n })\n }\n })\n\n useEffect(() => {\n updateSelectedOption(collectionSlugFromProps)\n }, [collectionSlugFromProps])\n\n /**\n * This performs a full server round trip to get the list view for the selected collection.\n * On the server, the data is freshly queried for the list view and all components are fully rendered.\n * This work includes building column state, rendering custom components, etc.\n */\n const refresh = useCallback(\n async ({ slug, query }: { query?: ListQuery; slug: string }) => {\n try {\n const newQuery: ListQuery = { ...(query || {}), where: { ...(query?.where || {}) } }\n\n const filterOption = filterOptions?.[slug]\n\n if (filterOptions && typeof filterOption !== 'boolean') {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOption)\n }\n\n if (slug) {\n const result: RenderListServerFnReturnType = (await serverFunction({\n name: 'render-list',\n args: {\n collectionSlug: slug,\n disableBulkDelete: true,\n disableBulkEdit: true,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n overrideEntityVisibility,\n query: newQuery,\n } satisfies RenderListServerFnArgs,\n })) as RenderListServerFnReturnType\n\n setListView(result?.List || null)\n } else {\n setListView(null)\n }\n setIsLoading(false)\n } catch (_err) {\n console.error('Error rendering List View: ', _err) // eslint-disable-line no-console\n\n if (isOpen) {\n closeModal(drawerSlug)\n }\n }\n },\n [\n serverFunction,\n closeModal,\n drawerSlug,\n isOpen,\n enableRowSelections,\n filterOptions,\n overrideEntityVisibility,\n disableQueryPresets,\n ],\n )\n\n useEffect(() => {\n if (!ListView) {\n void refresh({ slug: selectedOption?.value })\n }\n }, [refresh, ListView, selectedOption.value])\n\n const onCreateNew = useCallback(\n ({ doc }) => {\n if (typeof onSelect === 'function') {\n onSelect({\n collectionSlug: selectedOption?.value,\n doc,\n docID: doc.id,\n })\n }\n\n closeModal(documentDrawerSlug)\n closeModal(drawerSlug)\n },\n [closeModal, documentDrawerSlug, drawerSlug, onSelect, selectedOption.value],\n )\n\n const onQueryChange: ListDrawerContextProps['onQueryChange'] = useCallback(\n (query) => {\n void refresh({ slug: selectedOption?.value, query })\n },\n [refresh, selectedOption.value],\n )\n\n const setMySelectedOption: ListDrawerContextProps['setSelectedOption'] = useCallback(\n (incomingSelection) => {\n setSelectedOption(incomingSelection)\n void refresh({ slug: incomingSelection?.value })\n },\n [refresh],\n )\n\n const refreshSelf: ListDrawerContextType['refresh'] = useCallback(\n async (incomingCollectionSlug) => {\n if (incomingCollectionSlug) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug: incomingCollectionSlug })?.labels,\n value: incomingCollectionSlug,\n })\n }\n\n await refresh({ slug: selectedOption.value || incomingCollectionSlug })\n },\n [getEntityConfig, refresh, selectedOption.value],\n )\n\n if (isLoading) {\n return <LoadingOverlay />\n }\n\n return (\n <ListDrawerContextProvider\n allowCreate={allowCreate}\n createNewDrawerSlug={documentDrawerSlug}\n DocumentDrawerToggler={DocumentDrawerToggler}\n drawerSlug={drawerSlug}\n enabledCollections={collectionSlugs}\n onBulkSelect={onBulkSelect}\n onQueryChange={onQueryChange}\n onSelect={onSelect}\n refresh={refreshSelf}\n selectedOption={selectedOption}\n setSelectedOption={setMySelectedOption}\n >\n {ListView}\n <DocumentDrawer onSave={onCreateNew} />\n </ListDrawerContextProvider>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,QAAQ,QAAQ;AACzB,SAASC,qBAAqB,QAAQ;AACtC,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AASxD,SAASC,iBAAiB,QAAQ;AAClC,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAG/B,OAAO,MAAMC,iBAAA,GAA+CA,CAAC;EAC3DC,WAAA,GAAc,IAAI;EAClBC,eAAe;EACfC,mBAAmB;EACnBC,UAAU;EACVC,mBAAmB;EACnBC,aAAa;EACbC,YAAY;EACZC,QAAQ;EACRC,wBAAA,GAA2B,IAAI;EAC/BC,kBAAA,EAAoBC;AAAuB,CAC5C;EACC,MAAM;IAAEC,UAAU;IAAEC;EAAW,CAAE,GAAGzB,QAAA;EAEpC,MAAM;IAAE0B;EAAc,CAAE,GAAGjB,kBAAA;EAC3B,MAAM,CAACkB,QAAA,EAAUC,WAAA,CAAY,GAAGvB,QAAA,CAA0BwB,SAAA;EAC1D,MAAM,CAACC,SAAA,EAAWC,YAAA,CAAa,GAAG1B,QAAA,CAAS;EAE3C,MAAM;IACJ2B,MAAA,EAAQ;MAAEC;IAAW,CAAE;IACvBC;EAAe,CAChB,GAAG1B,SAAA;EAEJ,MAAM2B,MAAA,GAASV,WAAA,CAAYT,UAAA;EAE3B,MAAMoB,kBAAA,GAAqBH,WAAA,CAAYI,MAAM,CAAC,CAAC;IAAEC;EAAI,CAAE;IACrD,OAAOxB,eAAA,CAAgByB,QAAQ,CAACD,IAAA;EAClC;EAEA,MAAM,CAACE,cAAA,EAAgBC,iBAAA,CAAkB,GAAGpC,QAAA,CAAyB;IACnE,MAAMqC,gBAAA,GAAmBnB,uBAAA,IAA2Ba,kBAAkB,CAAC,EAAE,EAAEE,IAAA;IAC3E,MAAMK,KAAA,GAAQT,eAAA,CAAgB;MAAEU,cAAA,EAAgBF;IAAiB;IAEjE,OAAOC,KAAA,GACH;MACEE,KAAA,EAAOF,KAAA,CAAMG,MAAM;MACnBC,KAAA,EAAOJ,KAAA,CAAML;IACf,IACAT,SAAA;EACN;EAEA,MAAM,CAACmB,cAAA,EAAgBC,qBAAA,EAAuB;IAAEjC,UAAA,EAAYkC;EAAkB,CAAE,CAAC,GAC/E5C,iBAAA,CAAkB;IAChBsC,cAAA,EAAgBJ,cAAA,CAAeO;EACjC;EAEF,MAAMI,oBAAA,GAAuB5C,cAAA,CAAgBqC,cAAA;IAC3C,IAAIA,cAAA,IAAkBA,cAAA,KAAmBJ,cAAA,EAAgBO,KAAA,EAAO;MAC9DN,iBAAA,CAAkB;QAChBI,KAAA,EAAOX,eAAA,CAAgB;UAAEU;QAAe,IAAIE,MAAA;QAC5CC,KAAA,EAAOH;MACT;IACF;EACF;EAEAxC,SAAA,CAAU;IACR+C,oBAAA,CAAqB5B,uBAAA;EACvB,GAAG,CAACA,uBAAA,CAAwB;EAE5B;;;;;EAKA,MAAM6B,OAAA,GAAUjD,WAAA,CACd,OAAO;IAAEmC,IAAI,EAAJA,MAAI;IAAEe;EAAK,CAAuC;IACzD,IAAI;MACF,MAAMC,QAAA,GAAsB;QAAE,IAAID,KAAA,IAAS,CAAC,CAAC;QAAGE,KAAA,EAAO;UAAE,IAAIF,KAAA,EAAOE,KAAA,IAAS,CAAC,CAAC;QAAE;MAAE;MAEnF,MAAMC,YAAA,GAAetC,aAAA,GAAgBoB,MAAA,CAAK;MAE1C,IAAIpB,aAAA,IAAiB,OAAOsC,YAAA,KAAiB,WAAW;QACtDF,QAAA,CAASC,KAAK,GAAGtD,qBAAA,CAAsBqD,QAAA,CAASC,KAAK,EAAEC,YAAA;MACzD;MAEA,IAAIlB,MAAA,EAAM;QACR,MAAMmB,MAAA,GAAwC,MAAM/B,cAAA,CAAe;UACjEgC,IAAA,EAAM;UACNC,IAAA,EAAM;YACJf,cAAA,EAAgBN,MAAA;YAChBsB,iBAAA,EAAmB;YACnBC,eAAA,EAAiB;YACjB9C,mBAAA;YACAC,UAAA;YACAC,mBAAA;YACAI,wBAAA;YACAgC,KAAA,EAAOC;UACT;QACF;QAEA1B,WAAA,CAAY6B,MAAA,EAAQK,IAAA,IAAQ;MAC9B,OAAO;QACLlC,WAAA,CAAY;MACd;MACAG,YAAA,CAAa;IACf,EAAE,OAAOgC,IAAA,EAAM;MACbC,OAAA,CAAQC,KAAK,CAAC,+BAA+BF,IAAA,EAAM;MAAA;MAEnD,IAAI5B,MAAA,EAAQ;QACVX,UAAA,CAAWR,UAAA;MACb;IACF;EACF,GACA,CACEU,cAAA,EACAF,UAAA,EACAR,UAAA,EACAmB,MAAA,EACAlB,mBAAA,EACAC,aAAA,EACAG,wBAAA,EACAN,mBAAA,CACD;EAGHX,SAAA,CAAU;IACR,IAAI,CAACuB,QAAA,EAAU;MACb,KAAKyB,OAAA,CAAQ;QAAEd,IAAA,EAAME,cAAA,EAAgBO;MAAM;IAC7C;EACF,GAAG,CAACK,OAAA,EAASzB,QAAA,EAAUa,cAAA,CAAeO,KAAK,CAAC;EAE5C,MAAMmB,WAAA,GAAc/D,WAAA,CAClB,CAAC;IAAEgE;EAAG,CAAE;IACN,IAAI,OAAO/C,QAAA,KAAa,YAAY;MAClCA,QAAA,CAAS;QACPwB,cAAA,EAAgBJ,cAAA,EAAgBO,KAAA;QAChCoB,GAAA;QACAC,KAAA,EAAOD,GAAA,CAAIE;MACb;IACF;IAEA7C,UAAA,CAAW0B,kBAAA;IACX1B,UAAA,CAAWR,UAAA;EACb,GACA,CAACQ,UAAA,EAAY0B,kBAAA,EAAoBlC,UAAA,EAAYI,QAAA,EAAUoB,cAAA,CAAeO,KAAK,CAAC;EAG9E,MAAMuB,aAAA,GAAyDnE,WAAA,CAC5DkD,OAAA;IACC,KAAKD,OAAA,CAAQ;MAAEd,IAAA,EAAME,cAAA,EAAgBO,KAAA;MAAOM,KAAA,EAAAA;IAAM;EACpD,GACA,CAACD,OAAA,EAASZ,cAAA,CAAeO,KAAK,CAAC;EAGjC,MAAMwB,mBAAA,GAAmEpE,WAAA,CACtEqE,iBAAA;IACC/B,iBAAA,CAAkB+B,iBAAA;IAClB,KAAKpB,OAAA,CAAQ;MAAEd,IAAA,EAAMkC,iBAAA,EAAmBzB;IAAM;EAChD,GACA,CAACK,OAAA,CAAQ;EAGX,MAAMqB,WAAA,GAAgDtE,WAAA,CACpD,MAAOuE,sBAAA;IACL,IAAIA,sBAAA,EAAwB;MAC1BjC,iBAAA,CAAkB;QAChBI,KAAA,EAAOX,eAAA,CAAgB;UAAEU,cAAA,EAAgB8B;QAAuB,IAAI5B,MAAA;QACpEC,KAAA,EAAO2B;MACT;IACF;IAEA,MAAMtB,OAAA,CAAQ;MAAEd,IAAA,EAAME,cAAA,CAAeO,KAAK,IAAI2B;IAAuB;EACvE,GACA,CAACxC,eAAA,EAAiBkB,OAAA,EAASZ,cAAA,CAAeO,KAAK,CAAC;EAGlD,IAAIjB,SAAA,EAAW;IACb,oBAAO6C,IAAA,CAAChE,cAAA;EACV;EAEA,oBACEiE,KAAA,CAAClE,yBAAA;IACCG,WAAA,EAAaA,WAAA;IACbgE,mBAAA,EAAqB3B,kBAAA;IACrBD,qBAAA,EAAuBA,qBAAA;IACvBjC,UAAA,EAAYA,UAAA;IACZoB,kBAAA,EAAoBtB,eAAA;IACpBK,YAAA,EAAcA,YAAA;IACdmD,aAAA,EAAeA,aAAA;IACflD,QAAA,EAAUA,QAAA;IACVgC,OAAA,EAASqB,WAAA;IACTjC,cAAA,EAAgBA,cAAA;IAChBC,iBAAA,EAAmB8B,mBAAA;eAElB5C,QAAA,E,aACDgD,IAAA,CAAC3B,cAAA;MAAe8B,MAAA,EAAQZ;;;AAG9B","ignoreList":[]}
1
+ {"version":3,"file":"DrawerContent.js","names":["useModal","hoistQueryParamsToAnd","React","useCallback","useEffect","useState","useDocumentDrawer","useEffectEvent","useConfig","useServerFunctions","ListDrawerContextProvider","LoadingOverlay","ListDrawerContent","allowCreate","collectionSlugs","disableQueryPresets","drawerSlug","enableRowSelections","filterOptions","onBulkSelect","onSelect","overrideEntityVisibility","selectedCollection","collectionSlugFromProps","closeModal","isModalOpen","serverFunction","ListView","setListView","undefined","isLoading","setIsLoading","config","collections","getEntityConfig","isOpen","enabledCollections","filter","slug","includes","selectedOption","setSelectedOption","initialSelection","found","collectionSlug","label","labels","value","DocumentDrawer","DocumentDrawerToggler","documentDrawerSlug","updateSelectedOption","refresh","query","newQuery","where","filterOption","result","name","args","disableBulkDelete","disableBulkEdit","List","_err","console","error","onCreateNew","doc","docID","id","onQueryChange","setMySelectedOption","incomingSelection","refreshSelf","incomingCollectionSlug","_jsx","_jsxs","createNewDrawerSlug","onSave"],"sources":["../../../src/elements/ListDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\nimport type { CollectionSlug, ListQuery } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { hoistQueryParamsToAnd } from 'payload/shared'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type { ListDrawerContextProps, ListDrawerContextType } from '../ListDrawer/Provider.js'\nimport type {\n ListDrawerProps,\n RenderListServerFnArgs,\n RenderListServerFnReturnType,\n} from './types.js'\n\nimport { useDocumentDrawer } from '../../elements/DocumentDrawer/index.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { ListDrawerContextProvider } from '../ListDrawer/Provider.js'\nimport { LoadingOverlay } from '../Loading/index.js'\nimport { type Option } from '../ReactSelect/index.js'\n\nexport const ListDrawerContent: React.FC<ListDrawerProps> = ({\n allowCreate = true,\n collectionSlugs,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n filterOptions,\n onBulkSelect,\n onSelect,\n overrideEntityVisibility = true,\n selectedCollection: collectionSlugFromProps,\n}) => {\n const { closeModal, isModalOpen } = useModal()\n\n const { serverFunction } = useServerFunctions()\n const [ListView, setListView] = useState<React.ReactNode>(undefined)\n const [isLoading, setIsLoading] = useState(true)\n\n const {\n config: { collections },\n getEntityConfig,\n } = useConfig()\n\n const isOpen = isModalOpen(drawerSlug)\n\n const enabledCollections = collections.filter(({ slug }) => {\n return collectionSlugs.includes(slug)\n })\n\n const [selectedOption, setSelectedOption] = useState<Option<string>>(() => {\n const initialSelection = collectionSlugFromProps || enabledCollections[0]?.slug\n const found = getEntityConfig({ collectionSlug: initialSelection })\n\n return found\n ? {\n label: found.labels,\n value: found.slug,\n }\n : undefined\n })\n\n const [DocumentDrawer, DocumentDrawerToggler, { drawerSlug: documentDrawerSlug }] =\n useDocumentDrawer({\n collectionSlug: selectedOption.value,\n })\n\n const updateSelectedOption = useEffectEvent((collectionSlug: CollectionSlug) => {\n if (collectionSlug && collectionSlug !== selectedOption?.value) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug })?.labels,\n value: collectionSlug,\n })\n }\n })\n\n useEffect(() => {\n updateSelectedOption(collectionSlugFromProps)\n }, [collectionSlugFromProps])\n\n /**\n * This performs a full server round trip to get the list view for the selected collection.\n * On the server, the data is freshly queried for the list view and all components are fully rendered.\n * This work includes building column state, rendering custom components, etc.\n */\n const refresh = useCallback(\n async ({ slug, query }: { query?: ListQuery; slug: string }) => {\n try {\n const newQuery: ListQuery = { ...(query || {}), where: { ...(query?.where || {}) } }\n\n const filterOption = filterOptions?.[slug]\n\n if (filterOptions && typeof filterOption !== 'boolean') {\n newQuery.where = hoistQueryParamsToAnd(newQuery.where, filterOption)\n }\n\n if (slug) {\n const result: RenderListServerFnReturnType = (await serverFunction({\n name: 'render-list',\n args: {\n collectionSlug: slug,\n disableBulkDelete: true,\n disableBulkEdit: true,\n disableQueryPresets,\n drawerSlug,\n enableRowSelections,\n overrideEntityVisibility,\n query: newQuery,\n } satisfies RenderListServerFnArgs,\n })) as RenderListServerFnReturnType\n\n setListView(result?.List || null)\n } else {\n setListView(null)\n }\n setIsLoading(false)\n } catch (_err) {\n console.error('Error rendering List View: ', _err) // eslint-disable-line no-console\n\n if (isOpen) {\n closeModal(drawerSlug)\n }\n }\n },\n [\n serverFunction,\n closeModal,\n drawerSlug,\n isOpen,\n enableRowSelections,\n filterOptions,\n overrideEntityVisibility,\n disableQueryPresets,\n ],\n )\n\n useEffect(() => {\n if (!ListView) {\n void refresh({ slug: selectedOption?.value })\n }\n }, [refresh, ListView, selectedOption.value])\n\n const onCreateNew = useCallback(\n ({ doc }) => {\n if (typeof onSelect === 'function') {\n onSelect({\n collectionSlug: selectedOption?.value,\n doc,\n docID: doc.id,\n })\n }\n\n closeModal(documentDrawerSlug)\n closeModal(drawerSlug)\n },\n [closeModal, documentDrawerSlug, drawerSlug, onSelect, selectedOption.value],\n )\n\n const onQueryChange: ListDrawerContextProps['onQueryChange'] = useCallback(\n (query) => {\n void refresh({ slug: selectedOption?.value, query })\n },\n [refresh, selectedOption.value],\n )\n\n const setMySelectedOption: ListDrawerContextProps['setSelectedOption'] = useCallback(\n (incomingSelection) => {\n setSelectedOption(incomingSelection)\n void refresh({ slug: incomingSelection?.value })\n },\n [refresh],\n )\n\n const refreshSelf: ListDrawerContextType['refresh'] = useCallback(\n async (incomingCollectionSlug) => {\n if (incomingCollectionSlug) {\n setSelectedOption({\n label: getEntityConfig({ collectionSlug: incomingCollectionSlug })?.labels,\n value: incomingCollectionSlug,\n })\n }\n\n await refresh({ slug: selectedOption.value || incomingCollectionSlug })\n },\n [getEntityConfig, refresh, selectedOption.value],\n )\n\n if (isLoading) {\n return <LoadingOverlay />\n }\n\n return (\n <ListDrawerContextProvider\n allowCreate={allowCreate}\n createNewDrawerSlug={documentDrawerSlug}\n DocumentDrawerToggler={DocumentDrawerToggler}\n drawerSlug={drawerSlug}\n enabledCollections={collectionSlugs}\n onBulkSelect={onBulkSelect}\n onQueryChange={onQueryChange}\n onSelect={onSelect}\n refresh={refreshSelf}\n selectedOption={selectedOption}\n setSelectedOption={setMySelectedOption}\n >\n {ListView}\n <DocumentDrawer onSave={onCreateNew} />\n </ListDrawerContextProvider>\n )\n}\n"],"mappings":"AAAA;;;AAGA,SAASA,QAAQ,QAAQ;AACzB,SAASC,qBAAqB,QAAQ;AACtC,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ;AASxD,SAASC,iBAAiB,QAAQ;AAClC,SAASC,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,cAAc,QAAQ;AAG/B,OAAO,MAAMC,iBAAA,GAA+CA,CAAC;EAC3DC,WAAA,GAAc,IAAI;EAClBC,eAAe;EACfC,mBAAmB;EACnBC,UAAU;EACVC,mBAAmB;EACnBC,aAAa;EACbC,YAAY;EACZC,QAAQ;EACRC,wBAAA,GAA2B,IAAI;EAC/BC,kBAAA,EAAoBC;AAAuB,CAC5C;EACC,MAAM;IAAEC,UAAU;IAAEC;EAAW,CAAE,GAAGzB,QAAA;EAEpC,MAAM;IAAE0B;EAAc,CAAE,GAAGjB,kBAAA;EAC3B,MAAM,CAACkB,QAAA,EAAUC,WAAA,CAAY,GAAGvB,QAAA,CAA0BwB,SAAA;EAC1D,MAAM,CAACC,SAAA,EAAWC,YAAA,CAAa,GAAG1B,QAAA,CAAS;EAE3C,MAAM;IACJ2B,MAAA,EAAQ;MAAEC;IAAW,CAAE;IACvBC;EAAe,CAChB,GAAG1B,SAAA;EAEJ,MAAM2B,MAAA,GAASV,WAAA,CAAYT,UAAA;EAE3B,MAAMoB,kBAAA,GAAqBH,WAAA,CAAYI,MAAM,CAAC,CAAC;IAAEC;EAAI,CAAE;IACrD,OAAOxB,eAAA,CAAgByB,QAAQ,CAACD,IAAA;EAClC;EAEA,MAAM,CAACE,cAAA,EAAgBC,iBAAA,CAAkB,GAAGpC,QAAA,CAAyB;IACnE,MAAMqC,gBAAA,GAAmBnB,uBAAA,IAA2Ba,kBAAkB,CAAC,EAAE,EAAEE,IAAA;IAC3E,MAAMK,KAAA,GAAQT,eAAA,CAAgB;MAAEU,cAAA,EAAgBF;IAAiB;IAEjE,OAAOC,KAAA,GACH;MACEE,KAAA,EAAOF,KAAA,CAAMG,MAAM;MACnBC,KAAA,EAAOJ,KAAA,CAAML;IACf,IACAT,SAAA;EACN;EAEA,MAAM,CAACmB,cAAA,EAAgBC,qBAAA,EAAuB;IAAEjC,UAAA,EAAYkC;EAAkB,CAAE,CAAC,GAC/E5C,iBAAA,CAAkB;IAChBsC,cAAA,EAAgBJ,cAAA,CAAeO;EACjC;EAEF,MAAMI,oBAAA,GAAuB5C,cAAA,CAAgBqC,cAAA;IAC3C,IAAIA,cAAA,IAAkBA,cAAA,KAAmBJ,cAAA,EAAgBO,KAAA,EAAO;MAC9DN,iBAAA,CAAkB;QAChBI,KAAA,EAAOX,eAAA,CAAgB;UAAEU;QAAe,IAAIE,MAAA;QAC5CC,KAAA,EAAOH;MACT;IACF;EACF;EAEAxC,SAAA,CAAU;IACR+C,oBAAA,CAAqB5B,uBAAA;EACvB,GAAG,CAACA,uBAAA,CAAwB;EAE5B;;;;;EAKA,MAAM6B,OAAA,GAAUjD,WAAA,CACd,OAAO;IAAEmC,IAAI,EAAJA,MAAI;IAAEe;EAAK,CAAuC;IACzD,IAAI;MACF,MAAMC,QAAA,GAAsB;QAAE,IAAID,KAAA,IAAS,CAAC,CAAC;QAAGE,KAAA,EAAO;UAAE,IAAIF,KAAA,EAAOE,KAAA,IAAS,CAAC,CAAC;QAAE;MAAE;MAEnF,MAAMC,YAAA,GAAetC,aAAA,GAAgBoB,MAAA,CAAK;MAE1C,IAAIpB,aAAA,IAAiB,OAAOsC,YAAA,KAAiB,WAAW;QACtDF,QAAA,CAASC,KAAK,GAAGtD,qBAAA,CAAsBqD,QAAA,CAASC,KAAK,EAAEC,YAAA;MACzD;MAEA,IAAIlB,MAAA,EAAM;QACR,MAAMmB,MAAA,GAAwC,MAAM/B,cAAA,CAAe;UACjEgC,IAAA,EAAM;UACNC,IAAA,EAAM;YACJf,cAAA,EAAgBN,MAAA;YAChBsB,iBAAA,EAAmB;YACnBC,eAAA,EAAiB;YACjB9C,mBAAA;YACAC,UAAA;YACAC,mBAAA;YACAI,wBAAA;YACAgC,KAAA,EAAOC;UACT;QACF;QAEA1B,WAAA,CAAY6B,MAAA,EAAQK,IAAA,IAAQ;MAC9B,OAAO;QACLlC,WAAA,CAAY;MACd;MACAG,YAAA,CAAa;IACf,EAAE,OAAOgC,IAAA,EAAM;MACbC,OAAA,CAAQC,KAAK,CAAC,+BAA+BF,IAAA,GAAM;MAEnD,IAAI5B,MAAA,EAAQ;QACVX,UAAA,CAAWR,UAAA;MACb;IACF;EACF,GACA,CACEU,cAAA,EACAF,UAAA,EACAR,UAAA,EACAmB,MAAA,EACAlB,mBAAA,EACAC,aAAA,EACAG,wBAAA,EACAN,mBAAA,CACD;EAGHX,SAAA,CAAU;IACR,IAAI,CAACuB,QAAA,EAAU;MACb,KAAKyB,OAAA,CAAQ;QAAEd,IAAA,EAAME,cAAA,EAAgBO;MAAM;IAC7C;EACF,GAAG,CAACK,OAAA,EAASzB,QAAA,EAAUa,cAAA,CAAeO,KAAK,CAAC;EAE5C,MAAMmB,WAAA,GAAc/D,WAAA,CAClB,CAAC;IAAEgE;EAAG,CAAE;IACN,IAAI,OAAO/C,QAAA,KAAa,YAAY;MAClCA,QAAA,CAAS;QACPwB,cAAA,EAAgBJ,cAAA,EAAgBO,KAAA;QAChCoB,GAAA;QACAC,KAAA,EAAOD,GAAA,CAAIE;MACb;IACF;IAEA7C,UAAA,CAAW0B,kBAAA;IACX1B,UAAA,CAAWR,UAAA;EACb,GACA,CAACQ,UAAA,EAAY0B,kBAAA,EAAoBlC,UAAA,EAAYI,QAAA,EAAUoB,cAAA,CAAeO,KAAK,CAAC;EAG9E,MAAMuB,aAAA,GAAyDnE,WAAA,CAC5DkD,OAAA;IACC,KAAKD,OAAA,CAAQ;MAAEd,IAAA,EAAME,cAAA,EAAgBO,KAAA;MAAOM,KAAA,EAAAA;IAAM;EACpD,GACA,CAACD,OAAA,EAASZ,cAAA,CAAeO,KAAK,CAAC;EAGjC,MAAMwB,mBAAA,GAAmEpE,WAAA,CACtEqE,iBAAA;IACC/B,iBAAA,CAAkB+B,iBAAA;IAClB,KAAKpB,OAAA,CAAQ;MAAEd,IAAA,EAAMkC,iBAAA,EAAmBzB;IAAM;EAChD,GACA,CAACK,OAAA,CAAQ;EAGX,MAAMqB,WAAA,GAAgDtE,WAAA,CACpD,MAAOuE,sBAAA;IACL,IAAIA,sBAAA,EAAwB;MAC1BjC,iBAAA,CAAkB;QAChBI,KAAA,EAAOX,eAAA,CAAgB;UAAEU,cAAA,EAAgB8B;QAAuB,IAAI5B,MAAA;QACpEC,KAAA,EAAO2B;MACT;IACF;IAEA,MAAMtB,OAAA,CAAQ;MAAEd,IAAA,EAAME,cAAA,CAAeO,KAAK,IAAI2B;IAAuB;EACvE,GACA,CAACxC,eAAA,EAAiBkB,OAAA,EAASZ,cAAA,CAAeO,KAAK,CAAC;EAGlD,IAAIjB,SAAA,EAAW;IACb,oBAAO6C,IAAA,CAAChE,cAAA;EACV;EAEA,oBACEiE,KAAA,CAAClE,yBAAA;IACCG,WAAA,EAAaA,WAAA;IACbgE,mBAAA,EAAqB3B,kBAAA;IACrBD,qBAAA,EAAuBA,qBAAA;IACvBjC,UAAA,EAAYA,UAAA;IACZoB,kBAAA,EAAoBtB,eAAA;IACpBK,YAAA,EAAcA,YAAA;IACdmD,aAAA,EAAeA,aAAA;IACflD,QAAA,EAAUA,QAAA;IACVgC,OAAA,EAASqB,WAAA;IACTjC,cAAA,EAAgBA,cAAA;IAChBC,iBAAA,EAAmB8B,mBAAA;eAElB5C,QAAA,E,aACDgD,IAAA,CAAC3B,cAAA;MAAe8B,MAAA,EAAQZ;;;AAG9B","ignoreList":[]}
@@ -3,8 +3,7 @@
3
3
  */export const createThumbnail = file => {
4
4
  return new Promise((resolve, reject) => {
5
5
  const img = new Image();
6
- img.src = URL.createObjectURL(file) // Use Object URL directly
7
- ;
6
+ img.src = URL.createObjectURL(file); // Use Object URL directly
8
7
  img.onload = () => {
9
8
  const maxDimension = 280;
10
9
  let drawHeight, drawWidth;
@@ -36,18 +35,15 @@
36
35
  quality
37
36
  })
38
37
  }).then(blob => {
39
- URL.revokeObjectURL(img.src) // Release the Object URL
40
- ;
38
+ URL.revokeObjectURL(img.src); // Release the Object URL
41
39
  const reader = new FileReader();
42
- reader.onload = () => resolve(reader.result) // Resolve as data URL
43
- ;
40
+ reader.onload = () => resolve(reader.result); // Resolve as data URL
44
41
  reader.onerror = reject;
45
42
  reader.readAsDataURL(blob);
46
43
  }).catch(reject);
47
44
  };
48
45
  img.onerror = error => {
49
- URL.revokeObjectURL(img.src) // Release Object URL on error
50
- ;
46
+ URL.revokeObjectURL(img.src); // Release Object URL on error
51
47
  // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
52
48
  reject(error);
53
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createThumbnail.js","names":["createThumbnail","file","Promise","resolve","reject","img","Image","src","URL","createObjectURL","onload","maxDimension","drawHeight","drawWidth","aspectRatio","width","height","canvas","OffscreenCanvas","ctx","getContext","outputFormat","type","quality","undefined","drawImage","convertToBlob","then","blob","revokeObjectURL","reader","FileReader","result","onerror","readAsDataURL","catch","error"],"sources":["../../../src/elements/Thumbnail/createThumbnail.ts"],"sourcesContent":["/**\n * Create a thumbnail from a File object by drawing it onto an OffscreenCanvas\n */\nexport const createThumbnail = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.src = URL.createObjectURL(file) // Use Object URL directly\n\n img.onload = () => {\n const maxDimension = 280\n let drawHeight: number, drawWidth: number\n\n // Calculate aspect ratio\n const aspectRatio = img.width / img.height\n\n // Determine dimensions to fit within maxDimension while maintaining aspect ratio\n if (aspectRatio > 1) {\n // Image is wider than tall\n drawWidth = maxDimension\n drawHeight = maxDimension / aspectRatio\n } else {\n // Image is taller than wide, or square\n drawWidth = maxDimension * aspectRatio\n drawHeight = maxDimension\n }\n\n const canvas = new OffscreenCanvas(drawWidth, drawHeight) // Create an OffscreenCanvas\n const ctx = canvas.getContext('2d')\n\n // Determine output format based on input file type\n const outputFormat = file.type === 'image/png' ? 'image/png' : 'image/jpeg'\n const quality = file.type === 'image/png' ? undefined : 0.8 // PNG doesn't use quality, use higher quality for JPEG\n\n // Draw the image onto the OffscreenCanvas with calculated dimensions\n ctx.drawImage(img, 0, 0, drawWidth, drawHeight)\n\n // Convert the OffscreenCanvas to a Blob and free up memory\n canvas\n .convertToBlob({ type: outputFormat, ...(quality && { quality }) })\n .then((blob) => {\n URL.revokeObjectURL(img.src) // Release the Object URL\n const reader = new FileReader()\n reader.onload = () => resolve(reader.result as string) // Resolve as data URL\n reader.onerror = reject\n reader.readAsDataURL(blob)\n })\n .catch(reject)\n }\n\n img.onerror = (error) => {\n URL.revokeObjectURL(img.src) // Release Object URL on error\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(error)\n }\n })\n}\n"],"mappings":"AAAA;;GAGA,OAAO,MAAMA,eAAA,GAAmBC,IAAA;EAC9B,OAAO,IAAIC,OAAA,CAAQ,CAACC,OAAA,EAASC,MAAA;IAC3B,MAAMC,GAAA,GAAM,IAAIC,KAAA;IAChBD,GAAA,CAAIE,GAAG,GAAGC,GAAA,CAAIC,eAAe,CAACR,IAAA,EAAM;IAAA;IAEpCI,GAAA,CAAIK,MAAM,GAAG;MACX,MAAMC,YAAA,GAAe;MACrB,IAAIC,UAAA,EAAoBC,SAAA;MAExB;MACA,MAAMC,WAAA,GAAcT,GAAA,CAAIU,KAAK,GAAGV,GAAA,CAAIW,MAAM;MAE1C;MACA,IAAIF,WAAA,GAAc,GAAG;QACnB;QACAD,SAAA,GAAYF,YAAA;QACZC,UAAA,GAAaD,YAAA,GAAeG,WAAA;MAC9B,OAAO;QACL;QACAD,SAAA,GAAYF,YAAA,GAAeG,WAAA;QAC3BF,UAAA,GAAaD,YAAA;MACf;MAEA,MAAMM,MAAA,GAAS,IAAIC,eAAA,CAAgBL,SAAA,EAAWD,UAAA,EAAY;MAAA;MAC1D,MAAMO,GAAA,GAAMF,MAAA,CAAOG,UAAU,CAAC;MAE9B;MACA,MAAMC,YAAA,GAAepB,IAAA,CAAKqB,IAAI,KAAK,cAAc,cAAc;MAC/D,MAAMC,OAAA,GAAUtB,IAAA,CAAKqB,IAAI,KAAK,cAAcE,SAAA,GAAY,IAAI;MAAA;MAE5D;MACAL,GAAA,CAAIM,SAAS,CAACpB,GAAA,EAAK,GAAG,GAAGQ,SAAA,EAAWD,UAAA;MAEpC;MACAK,MAAA,CACGS,aAAa,CAAC;QAAEJ,IAAA,EAAMD,YAAA;QAAc,IAAIE,OAAA,IAAW;UAAEA;QAAQ,CAAC;MAAE,GAChEI,IAAI,CAAEC,IAAA;QACLpB,GAAA,CAAIqB,eAAe,CAACxB,GAAA,CAAIE,GAAG,EAAE;QAAA;QAC7B,MAAMuB,MAAA,GAAS,IAAIC,UAAA;QACnBD,MAAA,CAAOpB,MAAM,GAAG,MAAMP,OAAA,CAAQ2B,MAAA,CAAOE,MAAM,EAAY;QAAA;QACvDF,MAAA,CAAOG,OAAO,GAAG7B,MAAA;QACjB0B,MAAA,CAAOI,aAAa,CAACN,IAAA;MACvB,GACCO,KAAK,CAAC/B,MAAA;IACX;IAEAC,GAAA,CAAI4B,OAAO,GAAIG,KAAA;MACb5B,GAAA,CAAIqB,eAAe,CAACxB,GAAA,CAAIE,GAAG,EAAE;MAAA;MAC7B;MACAH,MAAA,CAAOgC,KAAA;IACT;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"createThumbnail.js","names":["createThumbnail","file","Promise","resolve","reject","img","Image","src","URL","createObjectURL","onload","maxDimension","drawHeight","drawWidth","aspectRatio","width","height","canvas","OffscreenCanvas","ctx","getContext","outputFormat","type","quality","undefined","drawImage","convertToBlob","then","blob","revokeObjectURL","reader","FileReader","result","onerror","readAsDataURL","catch","error"],"sources":["../../../src/elements/Thumbnail/createThumbnail.ts"],"sourcesContent":["/**\n * Create a thumbnail from a File object by drawing it onto an OffscreenCanvas\n */\nexport const createThumbnail = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.src = URL.createObjectURL(file) // Use Object URL directly\n\n img.onload = () => {\n const maxDimension = 280\n let drawHeight: number, drawWidth: number\n\n // Calculate aspect ratio\n const aspectRatio = img.width / img.height\n\n // Determine dimensions to fit within maxDimension while maintaining aspect ratio\n if (aspectRatio > 1) {\n // Image is wider than tall\n drawWidth = maxDimension\n drawHeight = maxDimension / aspectRatio\n } else {\n // Image is taller than wide, or square\n drawWidth = maxDimension * aspectRatio\n drawHeight = maxDimension\n }\n\n const canvas = new OffscreenCanvas(drawWidth, drawHeight) // Create an OffscreenCanvas\n const ctx = canvas.getContext('2d')\n\n // Determine output format based on input file type\n const outputFormat = file.type === 'image/png' ? 'image/png' : 'image/jpeg'\n const quality = file.type === 'image/png' ? undefined : 0.8 // PNG doesn't use quality, use higher quality for JPEG\n\n // Draw the image onto the OffscreenCanvas with calculated dimensions\n ctx.drawImage(img, 0, 0, drawWidth, drawHeight)\n\n // Convert the OffscreenCanvas to a Blob and free up memory\n canvas\n .convertToBlob({ type: outputFormat, ...(quality && { quality }) })\n .then((blob) => {\n URL.revokeObjectURL(img.src) // Release the Object URL\n const reader = new FileReader()\n reader.onload = () => resolve(reader.result as string) // Resolve as data URL\n reader.onerror = reject\n reader.readAsDataURL(blob)\n })\n .catch(reject)\n }\n\n img.onerror = (error) => {\n URL.revokeObjectURL(img.src) // Release Object URL on error\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(error)\n }\n })\n}\n"],"mappings":"AAAA;;GAGA,OAAO,MAAMA,eAAA,GAAmBC,IAAA;EAC9B,OAAO,IAAIC,OAAA,CAAQ,CAACC,OAAA,EAASC,MAAA;IAC3B,MAAMC,GAAA,GAAM,IAAIC,KAAA;IAChBD,GAAA,CAAIE,GAAG,GAAGC,GAAA,CAAIC,eAAe,CAACR,IAAA,GAAM;IAEpCI,GAAA,CAAIK,MAAM,GAAG;MACX,MAAMC,YAAA,GAAe;MACrB,IAAIC,UAAA,EAAoBC,SAAA;MAExB;MACA,MAAMC,WAAA,GAAcT,GAAA,CAAIU,KAAK,GAAGV,GAAA,CAAIW,MAAM;MAE1C;MACA,IAAIF,WAAA,GAAc,GAAG;QACnB;QACAD,SAAA,GAAYF,YAAA;QACZC,UAAA,GAAaD,YAAA,GAAeG,WAAA;MAC9B,OAAO;QACL;QACAD,SAAA,GAAYF,YAAA,GAAeG,WAAA;QAC3BF,UAAA,GAAaD,YAAA;MACf;MAEA,MAAMM,MAAA,GAAS,IAAIC,eAAA,CAAgBL,SAAA,EAAWD,UAAA,EAAY;MAAA;MAC1D,MAAMO,GAAA,GAAMF,MAAA,CAAOG,UAAU,CAAC;MAE9B;MACA,MAAMC,YAAA,GAAepB,IAAA,CAAKqB,IAAI,KAAK,cAAc,cAAc;MAC/D,MAAMC,OAAA,GAAUtB,IAAA,CAAKqB,IAAI,KAAK,cAAcE,SAAA,GAAY,IAAI;MAAA;MAE5D;MACAL,GAAA,CAAIM,SAAS,CAACpB,GAAA,EAAK,GAAG,GAAGQ,SAAA,EAAWD,UAAA;MAEpC;MACAK,MAAA,CACGS,aAAa,CAAC;QAAEJ,IAAA,EAAMD,YAAA;QAAc,IAAIE,OAAA,IAAW;UAAEA;QAAQ,CAAC;MAAE,GAChEI,IAAI,CAAEC,IAAA;QACLpB,GAAA,CAAIqB,eAAe,CAACxB,GAAA,CAAIE,GAAG,GAAE;QAC7B,MAAMuB,MAAA,GAAS,IAAIC,UAAA;QACnBD,MAAA,CAAOpB,MAAM,GAAG,MAAMP,OAAA,CAAQ2B,MAAA,CAAOE,MAAM,GAAY;QACvDF,MAAA,CAAOG,OAAO,GAAG7B,MAAA;QACjB0B,MAAA,CAAOI,aAAa,CAACN,IAAA;MACvB,GACCO,KAAK,CAAC/B,MAAA;IACX;IAEAC,GAAA,CAAI4B,OAAO,GAAIG,KAAA;MACb5B,GAAA,CAAIqB,eAAe,CAACxB,GAAA,CAAIE,GAAG,GAAE;MAC7B;MACAH,MAAA,CAAOgC,KAAA;IACT;EACF;AACF","ignoreList":[]}
@@ -129,8 +129,7 @@ export const RelationshipFilter = props => {
129
129
  }
130
130
  } catch (e) {
131
131
  if (!abortController.signal.aborted) {
132
- console.error(e) // eslint-disable-line no-console
133
- ;
132
+ console.error(e); // eslint-disable-line no-console
134
133
  }
135
134
  }
136
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","value","placeholder","undefined","isSortable","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","relationSlugs","loadedRelationships","useRef","Map","map","relation","hasLoadedAll","nextPage","addOptions","data","collection","collectionSlug","type","loadOptions","abortController","relationSlug","loadedRelationship","current","get","fieldToSearch","useAsTitle","where","and","query","depth","limit","code","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","set","e","aborted","console","error","handleScrollToBottom","relationshipToLoad","entries","next","AbortController","findOptionsByValue","val","matchedOption","forEach","opt","some","subOpt","find","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","_jsx","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { 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 { RelationshipFilterProps as Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useLocale } from '../../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport optionsReducer from './optionsReducer.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const {\n config: {\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 debouncedSearch = useDebounce(search, 300)\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const { i18n, t } = useTranslation()\n const locale = useLocale()\n\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const loadedRelationships = React.useRef<\n Map<\n string,\n {\n hasLoadedAll: boolean\n nextPage: number\n }\n >\n >(\n new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n ),\n )\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadOptions = useEffectEvent(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const loadedRelationship = loadedRelationships.current.get(relationSlug)\n\n if (relationSlug && !loadedRelationship.hasLoadedAll) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n\n const where: Where = {\n and: [],\n }\n\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\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 (data.nextPage) {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: false,\n nextPage: data.nextPage,\n })\n } else {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: true,\n nextPage: null,\n })\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n )\n\n const handleScrollToBottom = React.useCallback(() => {\n const relationshipToLoad = loadedRelationships.current.entries().next().value\n\n if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relationshipToLoad[0],\n })\n }\n }, [])\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 (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n\n const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n setSearch(input)\n }\n },\n [i18n, relationTo, 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 * When `relationTo` changes externally, reset the options and reload them from scratch\n * The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own\n * This means we can safely depend on it without it triggering this effect to run\n * This is useful because this effect should _only_ run when `relationTo` changes\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relations.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n setHasLoadedFirstOptions(false)\n\n const abortControllers: AbortController[] = []\n\n relations.forEach((relation) => {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relation,\n })\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, relationTo, debouncedSearch, filterOptions])\n\n /**\n * Load any other options that might exist in the value that were not loaded already\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 <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\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={handleScrollToBottom}\n options={options}\n placeholder={placeholder}\n value={valueToRender}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","value","placeholder","undefined","isSortable","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","relationSlugs","loadedRelationships","useRef","Map","map","relation","hasLoadedAll","nextPage","addOptions","data","collection","collectionSlug","type","loadOptions","abortController","relationSlug","loadedRelationship","current","get","fieldToSearch","useAsTitle","where","and","query","depth","limit","code","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","set","e","aborted","console","error","handleScrollToBottom","relationshipToLoad","entries","next","AbortController","findOptionsByValue","val","matchedOption","forEach","opt","some","subOpt","find","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","_jsx","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { 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 { RelationshipFilterProps as Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useLocale } from '../../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport optionsReducer from './optionsReducer.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const {\n config: {\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 debouncedSearch = useDebounce(search, 300)\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const { i18n, t } = useTranslation()\n const locale = useLocale()\n\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const loadedRelationships = React.useRef<\n Map<\n string,\n {\n hasLoadedAll: boolean\n nextPage: number\n }\n >\n >(\n new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n ),\n )\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadOptions = useEffectEvent(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const loadedRelationship = loadedRelationships.current.get(relationSlug)\n\n if (relationSlug && !loadedRelationship.hasLoadedAll) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n\n const where: Where = {\n and: [],\n }\n\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\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 (data.nextPage) {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: false,\n nextPage: data.nextPage,\n })\n } else {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: true,\n nextPage: null,\n })\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n )\n\n const handleScrollToBottom = React.useCallback(() => {\n const relationshipToLoad = loadedRelationships.current.entries().next().value\n\n if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relationshipToLoad[0],\n })\n }\n }, [])\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 (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n\n const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n setSearch(input)\n }\n },\n [i18n, relationTo, 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 * When `relationTo` changes externally, reset the options and reload them from scratch\n * The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own\n * This means we can safely depend on it without it triggering this effect to run\n * This is useful because this effect should _only_ run when `relationTo` changes\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relations.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n setHasLoadedFirstOptions(false)\n\n const abortControllers: AbortController[] = []\n\n relations.forEach((relation) => {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relation,\n })\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, relationTo, debouncedSearch, filterOptions])\n\n /**\n * Load any other options that might exist in the value that were not loaded already\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 <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\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={handleScrollToBottom}\n options={options}\n placeholder={placeholder}\n value={valueToRender}\n />\n )}\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,cAAc,QAAQ;AAC/B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,WAAW,QAAQ;AAC5B,OAAOC,cAAA,MAAoB;AAC3B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,MAAMC,oBAAA,GAAuB;AAE7B,OAAO,MAAMC,kBAAA,GAAuCC,KAAA;EAClD,MAAM;IACJC,QAAQ;IACRC,KAAA,EAAO;MAAEC,KAAA,GAAQ,CAAC,CAAC;MAAEC,OAAO;MAAEC;IAAU,CAAE;IAC1CC,aAAa;IACbC,QAAQ;IACRC;EAAK,CACN,GAAGR,KAAA;EAEJ,MAAMS,WAAA,GAAc,iBAAiBN,KAAA,GAAQA,KAAA,EAAOM,WAAA,GAAcC,SAAA;EAClE,MAAMC,UAAA,GAAaR,KAAA,EAAOQ,UAAA;EAE1B,MAAM;IACJC,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS,CACV;IACDC;EAAe,CAChB,GAAGxB,SAAA;EAEJ,MAAMyB,oBAAA,GAAuBC,KAAA,CAAMC,OAAO,CAACd,UAAA;EAC3C,MAAM,CAACe,OAAA,EAASC,eAAA,CAAgB,GAAGjC,UAAA,CAAWQ,cAAA,EAAgB,EAAE;EAChE,MAAM,CAAC0B,MAAA,EAAQC,SAAA,CAAU,GAAGlC,QAAA,CAAS;EACrC,MAAMmC,eAAA,GAAkBlC,WAAA,CAAYgC,MAAA,EAAQ;EAC5C,MAAM,CAACG,YAAA,EAAcC,eAAA,CAAgB,GAAGrC,QAAA,CAAS;EACjD,MAAM,CAACsC,qBAAA,EAAuBC,wBAAA,CAAyB,GAAGvC,QAAA,CAAS;EACnE,MAAM;IAAEwC,IAAI;IAAEC;EAAC,CAAE,GAAGpC,cAAA;EACpB,MAAMqC,MAAA,GAAStC,SAAA;EAEf,MAAMuC,aAAA,GAAgBf,oBAAA,GAAuBZ,UAAA,GAAa,CAACA,UAAA,CAAW;EAEtE,MAAM4B,mBAAA,GAAsBhD,KAAA,CAAMiD,MAAM,CAStC,IAAIC,GAAA,CACFH,aAAA,CAAcI,GAAG,CAAEC,QAAA,IAAa,CAC9BA,QAAA,EACA;IACEC,YAAA,EAAc;IACdC,QAAA,EAAU;EACZ,EACD;EAIL,MAAMC,UAAA,GAAatD,WAAA,CACjB,CAACuD,IAAA,EAAMJ,UAAA;IACL,MAAMK,UAAA,GAAa1B,eAAA,CAAgB;MAAE2B,cAAA,EAAgBN;IAAS;IAC9DhB,eAAA,CAAgB;MAAEuB,IAAA,EAAM;MAAOF,UAAA;MAAYD,IAAA;MAAMxB,oBAAA;MAAsBY,IAAA;MAAMQ,QAAA,EAAAA;IAAS;EACxF,GACA,CAACpB,oBAAA,EAAsBY,IAAA,EAAMb,eAAA,CAAgB;EAG/C,MAAM6B,WAAA,GAActD,cAAA,CAClB,OAAO;IACLuD,eAAe;IACfC;EAAY,CAIb;IACC,MAAMC,kBAAA,GAAqBf,mBAAA,CAAoBgB,OAAO,CAACC,GAAG,CAACH,YAAA;IAE3D,IAAIA,YAAA,IAAgB,CAACC,kBAAA,CAAmBV,YAAY,EAAE;MACpD,MAAMI,YAAA,GAAa1B,eAAA,CAAgB;QACjC2B,cAAA,EAAgBI;MAClB;MAEA,MAAMI,aAAA,GAAgBT,YAAA,EAAYvC,KAAA,EAAOiD,UAAA,IAAc;MAEvD,MAAMC,KAAA,GAAe;QACnBC,GAAA,EAAK;MACP;MAEA,MAAMC,KAAA,GAAQ;QACZC,KAAA,EAAO;QACPC,KAAA,EAAO3D,oBAAA;QACPiC,MAAA,EAAQA,MAAA,CAAO2B,IAAI;QACnBC,IAAA,EAAMX,kBAAA,CAAmBT,QAAQ;QACjCqB,MAAA,EAAQ;UACN,CAACT,aAAA,GAAgB;QACnB;QACAE;MACF;MAEA,IAAI/C,aAAA,IAAiBA,aAAA,GAAgByC,YAAA,CAAa,EAAE;QAClDQ,KAAA,CAAMF,KAAK,CAACC,GAAG,CAACO,IAAI,CAACvD,aAAa,CAACyC,YAAA,CAAa;MAClD;MAEA,IAAIvB,eAAA,EAAiB;QACnB+B,KAAA,CAAMF,KAAK,CAACC,GAAG,CAACO,IAAI,CAAC;UACnB,CAACV,aAAA,GAAgB;YACfW,IAAA,EAAMtC;UACR;QACF;MACF;MAEA,IAAI;QACF,MAAMuC,QAAA,GAAW,MAAMC,KAAA,CACrB,GAAGjD,SAAA,GAAYD,GAAA,IAAOiC,YAAA,GAAe/D,EAAA,CAAGiF,SAAS,CAACV,KAAA,EAAO;UAAEW,cAAA,EAAgB;QAAK,IAAI,EACpF;UACEC,WAAA,EAAa;UACbC,OAAA,EAAS;YACP,mBAAmBvC,IAAA,CAAKwC;UAC1B;UACAC,MAAA,EAAQxB,eAAA,CAAgBwB;QAC1B;QAGF,IAAIP,QAAA,CAASQ,EAAE,EAAE;UACf,MAAM9B,MAAA,GAAsB,MAAMsB,QAAA,CAASS,IAAI;UAC/C,IAAI/B,MAAA,CAAKgC,IAAI,CAACC,MAAM,GAAG,GAAG;YACxBlC,UAAA,CAAWC,MAAA,EAAMM,YAAA;YAEjB,IAAIN,MAAA,CAAKF,QAAQ,EAAE;cACjBN,mBAAA,CAAoBgB,OAAO,CAAC0B,GAAG,CAAC5B,YAAA,EAAc;gBAC5CT,YAAA,EAAc;gBACdC,QAAA,EAAUE,MAAA,CAAKF;cACjB;YACF,OAAO;cACLN,mBAAA,CAAoBgB,OAAO,CAAC0B,GAAG,CAAC5B,YAAA,EAAc;gBAC5CT,YAAA,EAAc;gBACdC,QAAA,EAAU;cACZ;YACF;UACF;QACF,OAAO;UACLb,eAAA,CAAgBI,CAAA,CAAE;QACpB;MACF,EAAE,OAAO8C,CAAA,EAAG;QACV,IAAI,CAAC9B,eAAA,CAAgBwB,MAAM,CAACO,OAAO,EAAE;UACnCC,OAAA,CAAQC,KAAK,CAACH,CAAA,GAAG;QACnB;MACF;IACF;IAEAhD,wBAAA,CAAyB;EAC3B;EAGF,MAAMoD,oBAAA,GAAuB/F,KAAA,CAAMC,WAAW,CAAC;IAC7C,MAAM+F,kBAAA,GAAqBhD,mBAAA,CAAoBgB,OAAO,CAACiC,OAAO,GAAGC,IAAI,GAAG3E,KAAK;IAE7E,IAAIyE,kBAAkB,CAAC,EAAE,IAAI,CAACA,kBAAkB,CAAC,EAAE,CAAC3C,YAAY,EAAE;MAChE,MAAMQ,iBAAA,GAAkB,IAAIsC,eAAA;MAE5B,KAAKvC,WAAA,CAAY;QACfC,eAAA,EAAAA,iBAAA;QACAC,YAAA,EAAckC,kBAAkB,CAAC;MACnC;IACF;EACF,GAAG,EAAE;EAEL,MAAMI,kBAAA,GAAqBnG,WAAA,CAAY;IACrC,IAAIsB,KAAA,EAAO;MACT,IAAIJ,OAAA,EAAS;QACX,IAAIc,KAAA,CAAMC,OAAO,CAACX,KAAA,GAAQ;UACxB,OAAOA,KAAA,CAAM4B,GAAG,CAAEkD,GAAA;YAChB,IAAIrE,oBAAA,EAAsB;cACxB,IAAIsE,aAAA;cAEJnE,OAAA,CAAQoE,OAAO,CAAEC,GAAA;gBACf,IAAIA,GAAA,CAAIrE,OAAO,EAAE;kBACfqE,GAAA,CAAIrE,OAAO,CAACsE,IAAI,CAAEC,MAAA;oBAChB,IAAIA,MAAA,EAAQnF,KAAA,IAAS8E,GAAA,CAAI9E,KAAK,EAAE;sBAC9B+E,aAAA,GAAgBI,MAAA;sBAChB,OAAO;oBACT;oBAEA,OAAO;kBACT;gBACF;cACF;cAEA,OAAOJ,aAAA;YACT;YAEA,OAAOnE,OAAA,CAAQwE,IAAI,CAAEH,KAAA,IAAQA,KAAA,CAAIjF,KAAK,IAAI8E,GAAA;UAC5C;QACF;QAEA,OAAO5E,SAAA;MACT;MAEA,IAAIO,oBAAA,EAAsB;QACxB,IAAIsE,eAAA;QAEJ,MAAMM,iBAAA,GAAoBrF,KAAA;QAE1BY,OAAA,CAAQoE,OAAO,CAAEC,KAAA;UACf,IAAIA,KAAA,EAAKrE,OAAA,EAAS;YAChBqE,KAAA,CAAIrE,OAAO,CAACsE,IAAI,CAAEC,QAAA;cAChB,IAAIA,QAAA,EAAQnF,KAAA,IAASqF,iBAAA,CAAkBrF,KAAK,EAAE;gBAC5C+E,eAAA,GAAgBI,QAAA;gBAChB,OAAO;cACT;cACA,OAAO;YACT;UACF;QACF;QAEA,OAAOJ,eAAA;MACT;MAEA,OAAOnE,OAAA,CAAQwE,IAAI,CAAEH,KAAA,IAAQA,KAAA,CAAIjF,KAAK,IAAIA,KAAA;IAC5C;IAEA,OAAOE,SAAA;EACT,GAAG,CAACN,OAAA,EAASa,oBAAA,EAAsBT,KAAA,EAAOY,OAAA,CAAQ;EAElD,MAAM0E,iBAAA,GAAoB5G,WAAA,CACvB6G,KAAA;IACC,IAAIA,KAAA,KAAUzE,MAAA,EAAQ;MACpBD,eAAA,CAAgB;QAAEuB,IAAA,EAAM;QAASf,IAAA;QAAMmE,QAAA,EAAU;MAAM;MAEvD,MAAMhE,eAAA,GAAgBd,KAAA,CAAMC,OAAO,CAACd,UAAA,IAAcA,UAAA,GAAa,CAACA,UAAA,CAAW;MAE3E4B,mBAAA,CAAoBgB,OAAO,GAAG,IAAId,GAAA,CAChCH,eAAA,CAAcI,GAAG,CAAEC,UAAA,IAAa,CAC9BA,UAAA,EACA;QACEC,YAAA,EAAc;QACdC,QAAA,EAAU;MACZ,EACD;MAGHhB,SAAA,CAAUwE,KAAA;IACZ;EACF,GACA,CAAClE,IAAA,EAAMxB,UAAA,EAAYiB,MAAA,CAAO;EAG5B,MAAM2E,aAAA,GAAgB/G,WAAA,CACpB,OAAOgH,EAAA,EAAI7D,UAAA;IACT,IAAI,CAACZ,YAAA,IAAgByE,EAAA,KAAO,UAAUA,EAAA,IAAM7D,UAAA,EAAU;MACpD,MAAM0B,UAAA,GAAW,MAAMC,KAAA,CAAM,GAAGjD,SAAA,GAAYD,GAAA,IAAOuB,UAAA,IAAY6D,EAAA,UAAY,EAAE;QAC3E/B,WAAA,EAAa;QACbC,OAAA,EAAS;UACP,mBAAmBvC,IAAA,CAAKwC;QAC1B;MACF;MAEA,IAAIN,UAAA,CAASQ,EAAE,EAAE;QACf,MAAM9B,MAAA,GAAO,MAAMsB,UAAA,CAASS,IAAI;QAChChC,UAAA,CAAW;UAAEiC,IAAA,EAAM,CAAChC,MAAA;QAAM,GAAGJ,UAAA;MAC/B,OAAO;QACL;QACAyC,OAAA,CAAQC,KAAK,CAACjD,CAAA,CAAE,yBAAyB;UAAEoE;QAAG;MAChD;IACF;EACF,GACA,CAACrE,IAAA,EAAMW,UAAA,EAAY1B,GAAA,EAAKW,YAAA,EAAcV,SAAA,EAAWe,CAAA,CAAE;EAGrD;;;;;;EAMA3C,SAAA,CAAU;IACR,MAAMgH,SAAA,GAAYjF,KAAA,CAAMC,OAAO,CAACd,UAAA,IAAcA,UAAA,GAAa,CAACA,UAAA,CAAW;IAEvE4B,mBAAA,CAAoBgB,OAAO,GAAG,IAAId,GAAA,CAChCgE,SAAA,CAAU/D,GAAG,CAAEC,UAAA,IAAa,CAC1BA,UAAA,EACA;MACEC,YAAA,EAAc;MACdC,QAAA,EAAU;IACZ,EACD;IAGHlB,eAAA,CAAgB;MAAEuB,IAAA,EAAM;MAASf,IAAA;MAAMmE,QAAA,EAAU;IAAM;IACvDpE,wBAAA,CAAyB;IAEzB,MAAMwE,gBAAA,GAAsC,EAAE;IAE9CD,SAAA,CAAUX,OAAO,CAAEnD,UAAA;MACjB,MAAMS,iBAAA,GAAkB,IAAIsC,eAAA;MAE5B,KAAKvC,WAAA,CAAY;QACfC,eAAA,EAAAA,iBAAA;QACAC,YAAA,EAAcV;MAChB;MAEA+D,gBAAA,CAAiBvC,IAAI,CAACf,iBAAA;IACxB;IAEA,OAAO;MACLsD,gBAAA,CAAiBZ,OAAO,CAAEa,UAAA;QACxB,IAAIA,UAAA,CAAW/B,MAAM,EAAE;UACrB,IAAI;YACF+B,UAAA,CAAWC,KAAK;UAClB,EAAE,OAAOC,IAAA,EAAM;YACb;UAAA;QAEJ;MACF;IACF;EACF,GAAG,CAAC1E,IAAA,EAAMxB,UAAA,EAAYmB,eAAA,EAAiBlB,aAAA,CAAc;EAErD;;;EAGAnB,SAAA,CAAU;IACR,IAAIqB,KAAA,IAASmB,qBAAA,EAAuB;MAClC,IAAIvB,OAAA,EAAS;QACX,MAAMoG,cAAA,GAAiBnB,kBAAA;QAErB,CAAAmB,cAAC,IAA+B,EAAE,EAAEhB,OAAO,CAAC,CAACiB,MAAA,EAAQC,CAAA;UACrD,IAAI,CAACD,MAAA,EAAQ;YACX,IAAIxF,oBAAA,EAAsB;cACxB,KAAKgF,aAAA,CAAczF,KAAK,CAACkG,CAAA,CAAE,CAAClG,KAAK,EAAEA,KAAK,CAACkG,CAAA,CAAE,CAACrG,UAAU;YACxD,OAAO;cACL,KAAK4F,aAAA,CAAczF,KAAK,CAACkG,CAAA,CAAE,EAAErG,UAAA;YAC/B;UACF;QACF;MACF,OAAO;QACL,MAAMkF,eAAA,GAAgBF,kBAAA;QAEtB,IAAI,CAACE,eAAA,EAAe;UAClB,IAAItE,oBAAA,EAAsB;YACxB,MAAM4E,mBAAA,GAAoBrF,KAAA;YAC1B,KAAKyF,aAAA,CAAcJ,mBAAA,CAAkBrF,KAAK,EAAEqF,mBAAA,CAAkBxF,UAAU;UAC1E,OAAO;YACL,KAAK4F,aAAA,CAAczF,KAAA,EAAOH,UAAA;UAC5B;QACF;MACF;IACF;EACF,GAAG,CACD4F,aAAA,EACAZ,kBAAA,EACAjF,OAAA,EACAa,oBAAA,EACAZ,UAAA,EACAG,KAAA,EACAmB,qBAAA,CACD;EAED,MAAMgF,OAAA,GAAU,CAAC,cAAc9G,SAAA,EAAW4B,YAAA,IAAgB,gBAAgB,CACvEmF,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EAER,MAAMC,aAAA,GAAiB1B,kBAAA,MAAwB7E,KAAA;EAE/C,oBACEwG,IAAA,CAAC;IAAIC,SAAA,EAAWN,OAAA;cACblF,YAAA,gBACCuF,IAAA,CAAC;MAAIC,SAAA,EAAW,GAAGpH,SAAA,iBAA0B;gBAAG4B;sBAEhDuF,IAAA,CAACrH,WAAA;MACCM,QAAA,EAAUA,QAAA;MACViH,OAAA,EAAS9G,OAAA;MACTO,UAAA,EAAYA,UAAA;MACZJ,QAAA,EAAW4G,QAAA;QACT,IAAI,CAACA,QAAA,EAAU;UACb5G,QAAA,CAAS;UACT;QACF;QAEA,IAAIH,OAAA,IAAWc,KAAA,CAAMC,OAAO,CAACgG,QAAA,GAAW;UACtC5G,QAAA,CACE4G,QAAA,GACIA,QAAA,CAAS/E,GAAG,CAAEqE,QAAA;YACZ,IAAIxF,oBAAA,EAAsB;cACxB,OAAO;gBACLZ,UAAA,EAAYoG,QAAA,EAAQpG,UAAA;gBACpBG,KAAA,EAAOiG,QAAA,EAAQjG;cACjB;YACF;YAEA,OAAOiG,QAAA,EAAQjG,KAAA;UACjB,KACA;QAER,OAAO,IAAIS,oBAAA,IAAwB,CAACC,KAAA,CAAMC,OAAO,CAACgG,QAAA,GAAW;UAC3D5G,QAAA,CAAS;YACPF,UAAA,EAAY8G,QAAA,EAAU9G,UAAA;YACtBG,KAAA,EAAO2G,QAAA,EAAU3G;UACnB;QACF,OAAO,IAAI,CAACU,KAAA,CAAMC,OAAO,CAACgG,QAAA,GAAW;UACnC5G,QAAA,CAAS4G,QAAA,EAAU3G,KAAA;QACrB;MACF;MACA4G,aAAA,EAAetB,iBAAA;MACfuB,oBAAA,EAAsBrC,oBAAA;MACtB5D,OAAA,EAASA,OAAA;MACTX,WAAA,EAAaA,WAAA;MACbD,KAAA,EAAOuG;;;AAKjB","ignoreList":[]}
@@ -53,8 +53,7 @@ export const WhereBuilder = props => {
53
53
  if (validateWhereQuery(transformedWhere)) {
54
54
  return transformedWhere.or;
55
55
  }
56
- console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console
57
- ;
56
+ console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`); // eslint-disable-line no-console
58
57
  }
59
58
  return [];
60
59
  }, [query.where]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionSlug","fields","renderedFilters","resolvedFilterOptions","i18n","t","permissions","fieldPermissions","collections","reducedFields","handleWhereChange","query","conditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","value","and","splice","String","undefined","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","newRowCondition","removeCondition","length","_jsxs","className","Fragment","_jsx","label","map","compoundOrKey","Array","isArray","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type { AddCondition, RemoveCondition, UpdateCondition, WhereBuilderProps } from './types.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field.value) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <p className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </p>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <li key={compoundOrKey}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = conditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n value={value}\n />\n </li>\n )\n })}\n </ul>\n </li>\n )\n })}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n if (reducedFields.length > 0) {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionSlug","fields","renderedFilters","resolvedFilterOptions","i18n","t","permissions","fieldPermissions","collections","reducedFields","handleWhereChange","query","conditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","value","and","splice","String","undefined","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","newRowCondition","removeCondition","length","_jsxs","className","Fragment","_jsx","label","map","compoundOrKey","Array","isArray","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type { AddCondition, RemoveCondition, UpdateCondition, WhereBuilderProps } from './types.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field.value) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <p className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </p>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <li key={compoundOrKey}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = conditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n value={value}\n />\n </li>\n )\n })}\n </ul>\n </li>\n )\n })}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n if (reducedFields.length > 0) {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,5 +10,5 @@ function require(m) {
10
10
  }
11
11
  // Workaround end
12
12
 
13
- import{l as a}from"./chunk-53XJ3K67.js";import"./chunk-5LKBKI4T.js";export{a as default};
14
- //# sourceMappingURL=CodeEditor-QOURTFMT.js.map
13
+ import{l as a}from"./chunk-AIZM2QMN.js";import"./chunk-5LKBKI4T.js";export{a as default};
14
+ //# sourceMappingURL=CodeEditor-YX3DTLLV.js.map