@payloadcms/ui 3.62.0-canary.0 → 3.62.0-canary.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DocumentDrawer/DrawerHeader/index.tsx"],"names":[],"mappings":"AAWA,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAyBA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DocumentDrawer/DrawerHeader/index.tsx"],"names":[],"mappings":"AAeA,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAuCA,CAAA"}
@@ -2,18 +2,22 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { useCallback } from 'react';
5
6
  import { Gutter } from '../../../elements/Gutter/index.js';
6
7
  import { useModal } from '../../../elements/Modal/index.js';
7
8
  import { RenderTitle } from '../../../elements/RenderTitle/index.js';
9
+ import { useFormModified } from '../../../forms/Form/index.js';
8
10
  import { XIcon } from '../../../icons/X/index.js';
9
11
  import { useDocumentInfo } from '../../../providers/DocumentInfo/index.js';
10
12
  import { useDocumentTitle } from '../../../providers/DocumentTitle/index.js';
11
13
  import { useTranslation } from '../../../providers/Translation/index.js';
12
14
  import { IDLabel } from '../../IDLabel/index.js';
15
+ import { LeaveWithoutSavingModal } from '../../LeaveWithoutSaving/index.js';
13
16
  import { documentDrawerBaseClass } from '../index.js';
14
17
  import './index.scss';
18
+ const leaveWithoutSavingModalSlug = 'leave-without-saving-doc-drawer';
15
19
  export const DocumentDrawerHeader = t0 => {
16
- const $ = _c(9);
20
+ const $ = _c(15);
17
21
  const {
18
22
  AfterHeader,
19
23
  drawerSlug,
@@ -21,23 +25,43 @@ export const DocumentDrawerHeader = t0 => {
21
25
  } = t0;
22
26
  const showDocumentID = t1 === undefined ? true : t1;
23
27
  const {
24
- closeModal
28
+ closeModal,
29
+ openModal
25
30
  } = useModal();
26
31
  const {
27
32
  t
28
33
  } = useTranslation();
34
+ const isModified = useFormModified();
29
35
  let t2;
30
- if ($[0] !== AfterHeader || $[1] !== closeModal || $[2] !== drawerSlug || $[3] !== showDocumentID || $[4] !== t) {
31
- let t3;
32
- if ($[6] !== closeModal || $[7] !== drawerSlug) {
33
- t3 = () => closeModal(drawerSlug);
34
- $[6] = closeModal;
35
- $[7] = drawerSlug;
36
- $[8] = t3;
36
+ if ($[0] !== closeModal || $[1] !== drawerSlug || $[2] !== isModified || $[3] !== openModal) {
37
+ t2 = () => {
38
+ if (isModified) {
39
+ openModal(leaveWithoutSavingModalSlug);
40
+ } else {
41
+ closeModal(drawerSlug);
42
+ }
43
+ };
44
+ $[0] = closeModal;
45
+ $[1] = drawerSlug;
46
+ $[2] = isModified;
47
+ $[3] = openModal;
48
+ $[4] = t2;
49
+ } else {
50
+ t2 = $[4];
51
+ }
52
+ const handleOnClose = t2;
53
+ let t3;
54
+ if ($[5] !== AfterHeader || $[6] !== closeModal || $[7] !== drawerSlug || $[8] !== handleOnClose || $[9] !== showDocumentID || $[10] !== t) {
55
+ let t4;
56
+ if ($[12] !== closeModal || $[13] !== drawerSlug) {
57
+ t4 = () => closeModal(drawerSlug);
58
+ $[12] = closeModal;
59
+ $[13] = drawerSlug;
60
+ $[14] = t4;
37
61
  } else {
38
- t3 = $[8];
62
+ t4 = $[14];
39
63
  }
40
- t2 = _jsxs(Gutter, {
64
+ t3 = _jsxs(Gutter, {
41
65
  className: `${documentDrawerBaseClass}__header`,
42
66
  children: [_jsxs("div", {
43
67
  className: `${documentDrawerBaseClass}__header-content`,
@@ -49,25 +73,29 @@ export const DocumentDrawerHeader = t0 => {
49
73
  }), _jsx("button", {
50
74
  "aria-label": t("general:close"),
51
75
  className: `${documentDrawerBaseClass}__header-close`,
52
- onClick: t3,
76
+ onClick: handleOnClose,
53
77
  type: "button",
54
78
  children: _jsx(XIcon, {})
55
79
  })]
56
80
  }), showDocumentID && _jsx(DocumentID, {}), AfterHeader ? _jsx("div", {
57
81
  className: `${documentDrawerBaseClass}__after-header`,
58
82
  children: AfterHeader
59
- }) : null]
83
+ }) : null, _jsx(LeaveWithoutSavingModal, {
84
+ modalSlug: leaveWithoutSavingModalSlug,
85
+ onConfirm: t4
86
+ })]
60
87
  });
61
- $[0] = AfterHeader;
62
- $[1] = closeModal;
63
- $[2] = drawerSlug;
64
- $[3] = showDocumentID;
65
- $[4] = t;
66
- $[5] = t2;
88
+ $[5] = AfterHeader;
89
+ $[6] = closeModal;
90
+ $[7] = drawerSlug;
91
+ $[8] = handleOnClose;
92
+ $[9] = showDocumentID;
93
+ $[10] = t;
94
+ $[11] = t3;
67
95
  } else {
68
- t2 = $[5];
96
+ t3 = $[11];
69
97
  }
70
- return t2;
98
+ return t3;
71
99
  };
72
100
  const DocumentID = () => {
73
101
  const $ = _c(3);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","Gutter","useModal","RenderTitle","XIcon","useDocumentInfo","useDocumentTitle","useTranslation","IDLabel","documentDrawerBaseClass","DocumentDrawerHeader","t0","$","AfterHeader","drawerSlug","showDocumentID","t1","undefined","closeModal","t","t2","t3","_jsxs","className","children","_jsx","element","onClick","type","DocumentID","id","title","toString"],"sources":["../../../../src/elements/DocumentDrawer/DrawerHeader/index.tsx"],"sourcesContent":["'use client'\n\nimport { Gutter } from '../../../elements/Gutter/index.js'\nimport { useModal } from '../../../elements/Modal/index.js'\nimport { RenderTitle } from '../../../elements/RenderTitle/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { IDLabel } from '../../IDLabel/index.js'\nimport { documentDrawerBaseClass } from '../index.js'\nimport './index.scss'\n\nexport const DocumentDrawerHeader: React.FC<{\n AfterHeader?: React.ReactNode\n drawerSlug: string\n showDocumentID?: boolean\n}> = ({ AfterHeader, drawerSlug, showDocumentID = true }) => {\n const { closeModal } = useModal()\n const { t } = useTranslation()\n\n return (\n <Gutter className={`${documentDrawerBaseClass}__header`}>\n <div className={`${documentDrawerBaseClass}__header-content`}>\n <h2 className={`${documentDrawerBaseClass}__header-text`}>\n {<RenderTitle element=\"span\" />}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${documentDrawerBaseClass}__header-close`}\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n {showDocumentID && <DocumentID />}\n {AfterHeader ? (\n <div className={`${documentDrawerBaseClass}__after-header`}>{AfterHeader}</div>\n ) : null}\n </Gutter>\n )\n}\n\nconst DocumentID: React.FC = () => {\n const { id } = useDocumentInfo()\n const { title } = useDocumentTitle()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,MAAM,QAAQ;AACvB,SAASC,QAAQ,QAAQ;AACzB,SAASC,WAAW,QAAQ;AAC5B,SAASC,KAAK,QAAQ;AACtB,SAASC,eAAe,QAAQ;AAChC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,QAAQ;AACxB,SAASC,uBAAuB,QAAQ;AACxC,OAAO;AAEP,OAAO,MAAMC,oBAAA,GAIRC,EAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAAC;IAAAa,WAAA;IAAAC,UAAA;IAAAC,cAAA,EAAAC;EAAA,IAAAL,EAAkD;EAAvB,MAAAI,cAAA,GAAAC,EAAqB,KAAAC,SAAA,UAArBD,EAAqB;EACpD;IAAAE;EAAA,IAAuBhB,QAAA;EACvB;IAAAiB;EAAA,IAAcZ,cAAA;EAAA,IAAAa,EAAA;EAAA,IAAAR,CAAA,QAAAC,WAAA,IAAAD,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAG,cAAA,IAAAH,CAAA,QAAAO,CAAA;IAAA,IAAAE,EAAA;IAAA,IAAAT,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAE,UAAA;MAWGO,EAAA,GAAAA,CAAA,KAAMH,UAAA,CAAWJ,UAAA;MAAAF,CAAA,MAAAM,UAAA;MAAAN,CAAA,MAAAE,UAAA;MAAAF,CAAA,MAAAS,EAAA;IAAA;MAAAA,EAAA,GAAAT,CAAA;IAAA;IARhCQ,EAAA,GAAAE,KAAA,CAAArB,MAAA;MAAAsB,SAAA,EAAmB,GAAAd,uBAAA,UAAoC;MAAAe,QAAA,GACrDF,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAAd,uBAAA,kBAA4C;QAAAe,QAAA,GAC1DC,IAAA,CAAC;UAAAF,SAAA,EAAc,GAAAd,uBAAA,eAAyC;UAAAe,QAAA,EACrDC,IAAA,CAAAtB,WAAA;YAAAuB,OAAA,EAAqB;UAAA,C;YAExBD,IAAA,CAAC;UAAA,cACaN,CAAA,CAAE;UAAAI,SAAA,EACH,GAAAd,uBAAA,gBAA0C;UAAAkB,OAAA,EAC5CN,EAAiB;UAAAO,IAAA,EACrB;UAAAJ,QAAA,EAELC,IAAA,CAAArB,KAAA,IAAC;QAAA,C;UAGJW,cAAA,IAAkBU,IAAA,CAAAI,UAAA,IAAC,GACnBhB,WAAA,GACCY,IAAA,CAAC;QAAAF,SAAA,EAAe,GAAAd,uBAAA,gBAA0C;QAAAe,QAAA,EAAGX;MAAA,C,QAC3D;IAAA,C;;;;;;;;;;SAjBNO,E;CAoBJ;AAEA,MAAMS,UAAA,GAAuBA,CAAA;EAAA,MAAAjB,CAAA,GAAAZ,EAAA;EAC3B;IAAA8B;EAAA,IAAezB,eAAA;EACf;IAAA0B;EAAA,IAAkBzB,gBAAA;EAAA,IAAAK,EAAA;EAAA,IAAAC,CAAA,QAAAkB,EAAA,IAAAlB,CAAA,QAAAmB,KAAA;IACXpB,EAAA,GAAAmB,EAAA,IAAMA,EAAA,KAAOC,KAAA,GAAQN,IAAA,CAAAjB,OAAA;MAAAsB,EAAA,EAAaA,EAAA,CAAAE,QAAA,CAAW;IAAA,C,QAAS;IAAApB,CAAA,MAAAkB,EAAA;IAAAlB,CAAA,MAAAmB,KAAA;IAAAnB,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAAA,OAAtDD,EAAsD;AAAA,CAC/D","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useCallback","Gutter","useModal","RenderTitle","useFormModified","XIcon","useDocumentInfo","useDocumentTitle","useTranslation","IDLabel","LeaveWithoutSavingModal","documentDrawerBaseClass","leaveWithoutSavingModalSlug","DocumentDrawerHeader","t0","$","AfterHeader","drawerSlug","showDocumentID","t1","undefined","closeModal","openModal","t","isModified","t2","handleOnClose","t3","t4","_jsxs","className","children","_jsx","element","onClick","type","DocumentID","modalSlug","onConfirm","id","title","toString"],"sources":["../../../../src/elements/DocumentDrawer/DrawerHeader/index.tsx"],"sourcesContent":["'use client'\n\nimport { useCallback } from 'react'\n\nimport { Gutter } from '../../../elements/Gutter/index.js'\nimport { useModal } from '../../../elements/Modal/index.js'\nimport { RenderTitle } from '../../../elements/RenderTitle/index.js'\nimport { useFormModified } from '../../../forms/Form/index.js'\nimport { XIcon } from '../../../icons/X/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { IDLabel } from '../../IDLabel/index.js'\nimport { LeaveWithoutSavingModal } from '../../LeaveWithoutSaving/index.js'\nimport { documentDrawerBaseClass } from '../index.js'\nimport './index.scss'\n\nconst leaveWithoutSavingModalSlug = 'leave-without-saving-doc-drawer'\n\nexport const DocumentDrawerHeader: React.FC<{\n AfterHeader?: React.ReactNode\n drawerSlug: string\n showDocumentID?: boolean\n}> = ({ AfterHeader, drawerSlug, showDocumentID = true }) => {\n const { closeModal, openModal } = useModal()\n const { t } = useTranslation()\n const isModified = useFormModified()\n\n const handleOnClose = useCallback(() => {\n if (isModified) {\n openModal(leaveWithoutSavingModalSlug)\n } else {\n closeModal(drawerSlug)\n }\n }, [isModified, openModal, closeModal, drawerSlug])\n\n return (\n <Gutter className={`${documentDrawerBaseClass}__header`}>\n <div className={`${documentDrawerBaseClass}__header-content`}>\n <h2 className={`${documentDrawerBaseClass}__header-text`}>\n {<RenderTitle element=\"span\" />}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${documentDrawerBaseClass}__header-close`}\n onClick={handleOnClose}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n {showDocumentID && <DocumentID />}\n {AfterHeader ? (\n <div className={`${documentDrawerBaseClass}__after-header`}>{AfterHeader}</div>\n ) : null}\n\n <LeaveWithoutSavingModal\n modalSlug={leaveWithoutSavingModalSlug}\n onConfirm={() => closeModal(drawerSlug)}\n />\n </Gutter>\n )\n}\n\nconst DocumentID: React.FC = () => {\n const { id } = useDocumentInfo()\n const { title } = useDocumentTitle()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,WAAW,QAAQ;AAE5B,SAASC,MAAM,QAAQ;AACvB,SAASC,QAAQ,QAAQ;AACzB,SAASC,WAAW,QAAQ;AAC5B,SAASC,eAAe,QAAQ;AAChC,SAASC,KAAK,QAAQ;AACtB,SAASC,eAAe,QAAQ;AAChC,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,OAAO,QAAQ;AACxB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,uBAAuB,QAAQ;AACxC,OAAO;AAEP,MAAMC,2BAAA,GAA8B;AAEpC,OAAO,MAAMC,oBAAA,GAIRC,EAAA;EAAA,MAAAC,CAAA,GAAAhB,EAAA;EAAC;IAAAiB,WAAA;IAAAC,UAAA;IAAAC,cAAA,EAAAC;EAAA,IAAAL,EAAkD;EAAvB,MAAAI,cAAA,GAAAC,EAAqB,KAAAC,SAAA,UAArBD,EAAqB;EACpD;IAAAE,UAAA;IAAAC;EAAA,IAAkCpB,QAAA;EAClC;IAAAqB;EAAA,IAAcf,cAAA;EACd,MAAAgB,UAAA,GAAmBpB,eAAA;EAAA,IAAAqB,EAAA;EAAA,IAAAV,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAS,UAAA,IAAAT,CAAA,QAAAO,SAAA;IAEeG,EAAA,GAAAA,CAAA;MAAA,IAC5BD,UAAA;QACFF,SAAA,CAAAV,2BAAU;MAAA;QAEVS,UAAA,CAAWJ,UAAA;MAAA;IAAA;IAEfF,CAAA,MAAAM,UAAA;IAAAN,CAAA,MAAAE,UAAA;IAAAF,CAAA,MAAAS,UAAA;IAAAT,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EANA,MAAAW,aAAA,GAAsBD,EAM4B;EAAA,IAAAE,EAAA;EAAA,IAAAZ,CAAA,QAAAC,WAAA,IAAAD,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAW,aAAA,IAAAX,CAAA,QAAAG,cAAA,IAAAH,CAAA,SAAAQ,CAAA;IAAA,IAAAK,EAAA;IAAA,IAAAb,CAAA,SAAAM,UAAA,IAAAN,CAAA,SAAAE,UAAA;MAwBjCW,EAAA,GAAAA,CAAA,KAAMP,UAAA,CAAWJ,UAAA;MAAAF,CAAA,OAAAM,UAAA;MAAAN,CAAA,OAAAE,UAAA;MAAAF,CAAA,OAAAa,EAAA;IAAA;MAAAA,EAAA,GAAAb,CAAA;IAAA;IArBhCY,EAAA,GAAAE,KAAA,CAAA5B,MAAA;MAAA6B,SAAA,EAAmB,GAAAnB,uBAAA,UAAoC;MAAAoB,QAAA,GACrDF,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAAnB,uBAAA,kBAA4C;QAAAoB,QAAA,GAC1DC,IAAA,CAAC;UAAAF,SAAA,EAAc,GAAAnB,uBAAA,eAAyC;UAAAoB,QAAA,EACrDC,IAAA,CAAA7B,WAAA;YAAA8B,OAAA,EAAqB;UAAA,C;YAExBD,IAAA,CAAC;UAAA,cACaT,CAAA,CAAE;UAAAO,SAAA,EACH,GAAAnB,uBAAA,gBAA0C;UAAAuB,OAAA,EAC5CR,aAAA;UAAAS,IAAA,EACJ;UAAAJ,QAAA,EAELC,IAAA,CAAA3B,KAAA,IAAC;QAAA,C;UAGJa,cAAA,IAAkBc,IAAA,CAAAI,UAAA,IAAC,GACnBpB,WAAA,GACCgB,IAAA,CAAC;QAAAF,SAAA,EAAe,GAAAnB,uBAAA,gBAA0C;QAAAoB,QAAA,EAAGf;MAAA,C,QAC3D,EAEJgB,IAAA,CAAAtB,uBAAA;QAAA2B,SAAA,EAAAzB,2BAAA;QAAA0B,SAAA,EAEaV;MAAiB,C;;;;;;;;;;;;SArBhCD,E;CAyBJ;AAEA,MAAMS,UAAA,GAAuBA,CAAA;EAAA,MAAArB,CAAA,GAAAhB,EAAA;EAC3B;IAAAwC;EAAA,IAAejC,eAAA;EACf;IAAAkC;EAAA,IAAkBjC,gBAAA;EAAA,IAAAO,EAAA;EAAA,IAAAC,CAAA,QAAAwB,EAAA,IAAAxB,CAAA,QAAAyB,KAAA;IACX1B,EAAA,GAAAyB,EAAA,IAAMA,EAAA,KAAOC,KAAA,GAAQR,IAAA,CAAAvB,OAAA;MAAA8B,EAAA,EAAaA,EAAA,CAAAE,QAAA,CAAW;IAAA,C,QAAS;IAAA1B,CAAA,MAAAwB,EAAA;IAAAxB,CAAA,MAAAyB,KAAA;IAAAzB,CAAA,MAAAD,EAAA;EAAA;IAAAA,EAAA,GAAAC,CAAA;EAAA;EAAA,OAAtDD,EAAsD;AAAA,CAC/D","ignoreList":[]}
@@ -1,8 +1,16 @@
1
1
  import React from 'react';
2
+ import type { OnCancel } from '../ConfirmationModal/index.js';
2
3
  type LeaveWithoutSavingProps = {
4
+ disablePreventLeave?: boolean;
5
+ modalSlug?: string;
3
6
  onConfirm?: () => Promise<void> | void;
4
7
  onPrevent?: (nextHref: null | string) => void;
5
8
  };
6
9
  export declare const LeaveWithoutSaving: React.FC<LeaveWithoutSavingProps>;
10
+ export declare const LeaveWithoutSavingModal: ({ modalSlug, onCancel, onConfirm, }: {
11
+ modalSlug: string;
12
+ onCancel?: OnCancel;
13
+ onConfirm: () => Promise<void> | void;
14
+ }) => React.JSX.Element;
7
15
  export {};
8
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAa1C,KAAK,uBAAuB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkDhE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAS7D,KAAK,uBAAuB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAA;CAC9C,CAAA;AAID,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA8ChE,CAAA;AAED,eAAO,MAAM,uBAAuB,wCAIjC;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACtC,sBAcA,CAAA"}
@@ -9,13 +9,16 @@ import { useTranslation } from '../../providers/Translation/index.js';
9
9
  import { ConfirmationModal } from '../ConfirmationModal/index.js';
10
10
  import { useModal } from '../Modal/index.js';
11
11
  import { usePreventLeave } from './usePreventLeave.js';
12
- const modalSlug = 'leave-without-saving';
12
+ const leaveWithoutSavingModalSlug = 'leave-without-saving';
13
13
  export const LeaveWithoutSaving = t0 => {
14
- const $ = _c(18);
14
+ const $ = _c(17);
15
15
  const {
16
+ disablePreventLeave: t1,
16
17
  onConfirm,
17
18
  onPrevent
18
19
  } = t0;
20
+ const disablePreventLeave = t1 === undefined ? false : t1;
21
+ const modalSlug = leaveWithoutSavingModalSlug;
19
22
  const {
20
23
  closeModal,
21
24
  openModal
@@ -28,40 +31,37 @@ export const LeaveWithoutSaving = t0 => {
28
31
  user
29
32
  } = useAuth();
30
33
  const [hasAccepted, setHasAccepted] = React.useState(false);
31
- const {
32
- t
33
- } = useTranslation();
34
- const prevent = Boolean((modified || !isValid) && user);
35
- let t1;
34
+ const prevent = !disablePreventLeave && Boolean((modified || !isValid) && user);
35
+ let t2;
36
36
  if ($[0] !== onPrevent || $[1] !== openModal) {
37
- t1 = () => {
37
+ t2 = () => {
38
38
  const activeHref = document.activeElement?.href || null;
39
39
  if (onPrevent) {
40
40
  onPrevent(activeHref);
41
41
  }
42
- openModal(modalSlug);
42
+ openModal(leaveWithoutSavingModalSlug);
43
43
  };
44
44
  $[0] = onPrevent;
45
45
  $[1] = openModal;
46
- $[2] = t1;
46
+ $[2] = t2;
47
47
  } else {
48
- t1 = $[2];
48
+ t2 = $[2];
49
49
  }
50
- const handlePrevent = t1;
51
- let t2;
50
+ const handlePrevent = t2;
51
+ let t3;
52
52
  if ($[3] !== closeModal) {
53
- t2 = () => {
54
- closeModal(modalSlug);
53
+ t3 = () => {
54
+ closeModal(leaveWithoutSavingModalSlug);
55
55
  };
56
56
  $[3] = closeModal;
57
- $[4] = t2;
57
+ $[4] = t3;
58
58
  } else {
59
- t2 = $[4];
59
+ t3 = $[4];
60
60
  }
61
- const handleAccept = t2;
62
- let t3;
61
+ const handleAccept = t3;
62
+ let t4;
63
63
  if ($[5] !== handleAccept || $[6] !== handlePrevent || $[7] !== hasAccepted || $[8] !== prevent) {
64
- t3 = {
64
+ t4 = {
65
65
  hasAccepted,
66
66
  onAccept: handleAccept,
67
67
  onPrevent: handlePrevent,
@@ -71,60 +71,86 @@ export const LeaveWithoutSaving = t0 => {
71
71
  $[6] = handlePrevent;
72
72
  $[7] = hasAccepted;
73
73
  $[8] = prevent;
74
- $[9] = t3;
74
+ $[9] = t4;
75
75
  } else {
76
- t3 = $[9];
76
+ t4 = $[9];
77
77
  }
78
- usePreventLeave(t3);
79
- let t4;
78
+ usePreventLeave(t4);
79
+ let t5;
80
80
  if ($[10] !== closeModal) {
81
- t4 = () => {
82
- closeModal(modalSlug);
81
+ t5 = () => {
82
+ closeModal(leaveWithoutSavingModalSlug);
83
83
  };
84
84
  $[10] = closeModal;
85
- $[11] = t4;
85
+ $[11] = t5;
86
86
  } else {
87
- t4 = $[11];
87
+ t5 = $[11];
88
88
  }
89
- const onCancel = t4;
90
- let t5;
89
+ const onCancel = t5;
90
+ let t6;
91
91
  if ($[12] !== onConfirm) {
92
- t5 = async () => {
92
+ t6 = async () => {
93
93
  if (onConfirm) {
94
94
  ;
95
95
  try {
96
96
  await onConfirm();
97
- } catch (t6) {
98
- const err = t6;
97
+ } catch (t7) {
98
+ const err = t7;
99
99
  console.error("Error in LeaveWithoutSaving onConfirm:", err);
100
100
  }
101
101
  }
102
102
  setHasAccepted(true);
103
103
  };
104
104
  $[12] = onConfirm;
105
- $[13] = t5;
105
+ $[13] = t6;
106
106
  } else {
107
- t5 = $[13];
107
+ t6 = $[13];
108
108
  }
109
- const handleConfirm = t5;
110
- let t6;
111
- if ($[14] !== handleConfirm || $[15] !== onCancel || $[16] !== t) {
112
- t6 = _jsx(ConfirmationModal, {
109
+ const handleConfirm = t6;
110
+ let t7;
111
+ if ($[14] !== handleConfirm || $[15] !== onCancel) {
112
+ t7 = _jsx(LeaveWithoutSavingModal, {
113
+ modalSlug: leaveWithoutSavingModalSlug,
114
+ onCancel,
115
+ onConfirm: handleConfirm
116
+ });
117
+ $[14] = handleConfirm;
118
+ $[15] = onCancel;
119
+ $[16] = t7;
120
+ } else {
121
+ t7 = $[16];
122
+ }
123
+ return t7;
124
+ };
125
+ export const LeaveWithoutSavingModal = t0 => {
126
+ const $ = _c(5);
127
+ const {
128
+ modalSlug,
129
+ onCancel,
130
+ onConfirm
131
+ } = t0;
132
+ const {
133
+ t
134
+ } = useTranslation();
135
+ let t1;
136
+ if ($[0] !== modalSlug || $[1] !== onCancel || $[2] !== onConfirm || $[3] !== t) {
137
+ t1 = _jsx(ConfirmationModal, {
113
138
  body: t("general:changesNotSaved"),
114
139
  cancelLabel: t("general:stayOnThisPage"),
115
140
  confirmLabel: t("general:leaveAnyway"),
116
141
  heading: t("general:leaveWithoutSaving"),
117
142
  modalSlug,
118
143
  onCancel,
119
- onConfirm: handleConfirm
144
+ onConfirm
120
145
  });
121
- $[14] = handleConfirm;
122
- $[15] = onCancel;
123
- $[16] = t;
124
- $[17] = t6;
146
+ $[0] = modalSlug;
147
+ $[1] = onCancel;
148
+ $[2] = onConfirm;
149
+ $[3] = t;
150
+ $[4] = t1;
125
151
  } else {
126
- t6 = $[17];
152
+ t1 = $[4];
127
153
  }
128
- return t6;
154
+ return t1;
129
155
  };
130
156
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useForm","useFormModified","useAuth","useTranslation","ConfirmationModal","useModal","usePreventLeave","modalSlug","LeaveWithoutSaving","t0","$","onConfirm","onPrevent","closeModal","openModal","modified","isValid","user","hasAccepted","setHasAccepted","useState","t","prevent","Boolean","t1","activeHref","document","activeElement","href","handlePrevent","t2","handleAccept","t3","onAccept","t4","onCancel","t5","t6","err","console","error","handleConfirm","_jsx","body","cancelLabel","confirmLabel","heading"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback } from 'react'\n\nimport type { OnCancel } from '../ConfirmationModal/index.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useModal } from '../Modal/index.js'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\ntype LeaveWithoutSavingProps = {\n onConfirm?: () => Promise<void> | void\n onPrevent?: (nextHref: null | string) => void\n}\n\nexport const LeaveWithoutSaving: React.FC<LeaveWithoutSavingProps> = ({ onConfirm, onPrevent }) => {\n const { closeModal, openModal } = useModal()\n const modified = useFormModified()\n const { isValid } = useForm()\n const { user } = useAuth()\n const [hasAccepted, setHasAccepted] = React.useState(false)\n const { t } = useTranslation()\n\n const prevent = Boolean((modified || !isValid) && user)\n\n const handlePrevent = useCallback(() => {\n const activeHref = (document.activeElement as HTMLAnchorElement)?.href || null\n if (onPrevent) {\n onPrevent(activeHref)\n }\n openModal(modalSlug)\n }, [openModal, onPrevent])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent: handlePrevent, prevent })\n\n const onCancel: OnCancel = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal])\n\n const handleConfirm = useCallback(async () => {\n if (onConfirm) {\n try {\n await onConfirm()\n } catch (err) {\n console.error('Error in LeaveWithoutSaving onConfirm:', err)\n }\n }\n setHasAccepted(true)\n }, [onConfirm])\n\n return (\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={modalSlug}\n onCancel={onCancel}\n onConfirm={handleConfirm}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useForm","useFormModified","useAuth","useTranslation","ConfirmationModal","useModal","usePreventLeave","leaveWithoutSavingModalSlug","LeaveWithoutSaving","t0","$","disablePreventLeave","t1","onConfirm","onPrevent","undefined","modalSlug","closeModal","openModal","modified","isValid","user","hasAccepted","setHasAccepted","useState","prevent","Boolean","t2","activeHref","document","activeElement","href","handlePrevent","t3","handleAccept","t4","onAccept","t5","onCancel","t6","t7","err","console","error","handleConfirm","_jsx","LeaveWithoutSavingModal","t","body","cancelLabel","confirmLabel","heading"],"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback } from 'react'\n\nimport type { OnCancel } from '../ConfirmationModal/index.js'\n\nimport { useForm, useFormModified } from '../../forms/Form/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useModal } from '../Modal/index.js'\nimport { usePreventLeave } from './usePreventLeave.js'\n\ntype LeaveWithoutSavingProps = {\n disablePreventLeave?: boolean\n modalSlug?: string\n onConfirm?: () => Promise<void> | void\n onPrevent?: (nextHref: null | string) => void\n}\n\nconst leaveWithoutSavingModalSlug = 'leave-without-saving'\n\nexport const LeaveWithoutSaving: React.FC<LeaveWithoutSavingProps> = ({\n disablePreventLeave = false,\n onConfirm,\n onPrevent,\n}) => {\n const modalSlug = leaveWithoutSavingModalSlug\n const { closeModal, openModal } = useModal()\n const modified = useFormModified()\n const { isValid } = useForm()\n const { user } = useAuth()\n const [hasAccepted, setHasAccepted] = React.useState(false)\n\n const prevent = !disablePreventLeave && Boolean((modified || !isValid) && user)\n\n const handlePrevent = useCallback(() => {\n const activeHref = (document.activeElement as HTMLAnchorElement)?.href || null\n if (onPrevent) {\n onPrevent(activeHref)\n }\n openModal(modalSlug)\n }, [openModal, onPrevent, modalSlug])\n\n const handleAccept = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal, modalSlug])\n\n usePreventLeave({ hasAccepted, onAccept: handleAccept, onPrevent: handlePrevent, prevent })\n\n const onCancel: OnCancel = useCallback(() => {\n closeModal(modalSlug)\n }, [closeModal, modalSlug])\n\n const handleConfirm = useCallback(async () => {\n if (onConfirm) {\n try {\n await onConfirm()\n } catch (err) {\n console.error('Error in LeaveWithoutSaving onConfirm:', err)\n }\n }\n setHasAccepted(true)\n }, [onConfirm])\n\n return (\n <LeaveWithoutSavingModal modalSlug={modalSlug} onCancel={onCancel} onConfirm={handleConfirm} />\n )\n}\n\nexport const LeaveWithoutSavingModal = ({\n modalSlug,\n onCancel,\n onConfirm,\n}: {\n modalSlug: string\n onCancel?: OnCancel\n onConfirm: () => Promise<void> | void\n}) => {\n const { t } = useTranslation()\n\n return (\n <ConfirmationModal\n body={t('general:changesNotSaved')}\n cancelLabel={t('general:stayOnThisPage')}\n confirmLabel={t('general:leaveAnyway')}\n heading={t('general:leaveWithoutSaving')}\n modalSlug={modalSlug}\n onCancel={onCancel}\n onConfirm={onConfirm}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SA0FA,CAAA"}
1
+ {"version":3,"file":"usePreventLeave.d.ts","sourceRoot":"","sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"names":[],"mappings":"AA4BA,eAAO,MAAM,eAAe,aAAa,CAAC,MAAM,OAAO,CAAC,GAAG,OAAO,YAAmB,MAAM,SA6B1F,CAAA;AAED,eAAO,MAAM,eAAe,4DAMzB;IACD,WAAW,EAAE,OAAO,CAAA;IAEpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,SA4FA,CAAA"}
@@ -126,8 +126,10 @@ export const usePreventLeave = ({
126
126
  console.log('Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave', err_0);
127
127
  }
128
128
  }
129
- // Add the global click event listener
130
- document.addEventListener('click', handleClick, true);
129
+ if (prevent) {
130
+ // Add the global click event listener
131
+ document.addEventListener('click', handleClick, true);
132
+ }
131
133
  // Clean up the global click event listener when the component is unmounted
132
134
  return () => {
133
135
  document.removeEventListener('click', handleClick, true);
@@ -1 +1 @@
1
- {"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","useRouteTransition","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","startRouteTransition","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","err","console","log","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isNewTab","metaKey","ctrlKey","isPageLeaving","confirm","current","stopPropagation","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n const { startRouteTransition } = useRouteTransition()\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n try {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:isAnchorOfCurrentUrl', err)\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n const isNewTab = anchor.target === '_blank' || event.metaKey || event.ctrlKey\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink || isNewTab)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave', err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) {\n onAccept()\n }\n\n startRouteTransition(() => router.push(cancelledURL.current))\n }\n }, [hasAccepted, onAccept, router, startRouteTransition])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"usePreventLeave.js","names":["c","_c","useRouter","useCallback","useEffect","useRef","useRouteTransition","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","t0","message","$","enabled","undefined","t1","event","finalEnabled","preventDefault","returnValue","handler","t2","t3","window","usePreventLeave","hasAccepted","onAccept","onPrevent","prevent","startRouteTransition","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","err","console","log","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isNewTab","metaKey","ctrlKey","isPageLeaving","confirm","current","stopPropagation","document","push"],"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["'use client'\n// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: null | T,\n ...args: [string, (() => void) | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onAccept,\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n onAccept?: () => void\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n const { startRouteTransition } = useRouteTransition()\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n try {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:isAnchorOfCurrentUrl', err)\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n const isNewTab = anchor.target === '_blank' || event.metaKey || event.ctrlKey\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink || isNewTab)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n console.log('Unexpected exception thrown in LeaveWithoutSaving:usePreventLeave', err)\n }\n }\n\n if (prevent) {\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n }\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n if (onAccept) {\n onAccept()\n }\n\n startRouteTransition(() => router.push(cancelledURL.current))\n }\n }, [hasAccepted, onAccept, router, startRouteTransition])\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/QueryPresets/cells/WhereCell/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAS,MAAM,SAAS,CAAA;AAG/D,OAAO,KAAK,MAAM,OAAO,CAAA;AA2BzB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAErE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/QueryPresets/cells/WhereCell/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAS,MAAM,SAAS,CAAA;AAG/D,OAAO,KAAK,MAAM,OAAO,CAAA;AA+BzB,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAErE,CAAA"}
@@ -15,7 +15,11 @@ const transformWhereToNaturalLanguage = where => {
15
15
  }
16
16
  const operator = Object.keys(andQuery[key])[0];
17
17
  const value = andQuery[key][operator];
18
- return `${toWords(key)} ${operator} ${toWords(value)}`;
18
+ if (typeof value === 'string') {
19
+ return `${toWords(key)} ${operator} ${toWords(value)}`;
20
+ } else if (Array.isArray(value)) {
21
+ return `${toWords(key)} ${operator} ${value.map(val => toWords(val)).join(' or ')}`;
22
+ }
19
23
  }
20
24
  return '';
21
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["toWords","React","transformWhereToNaturalLanguage","where","or","length","and","orQuery","andQuery","key","Object","keys","operator","value","QueryPresetsWhereCell","cellData","_jsx"],"sources":["../../../../../src/elements/QueryPresets/cells/WhereCell/index.tsx"],"sourcesContent":["import type { DefaultCellComponentProps, Where } from 'payload'\n\nimport { toWords } from 'payload/shared'\nimport React from 'react'\n\n/** @todo: improve this */\nconst transformWhereToNaturalLanguage = (where: Where): string => {\n if (where.or && where.or.length > 0 && where.or[0].and && where.or[0].and.length > 0) {\n const orQuery = where.or[0]\n const andQuery = orQuery?.and?.[0]\n\n if (!andQuery) {\n return 'No where query'\n }\n\n const key = Object.keys(andQuery)[0]\n\n if (!andQuery[key]) {\n return 'No where query'\n }\n\n const operator = Object.keys(andQuery[key])[0]\n const value = andQuery[key][operator]\n\n return `${toWords(key)} ${operator} ${toWords(value)}`\n }\n\n return ''\n}\n\nexport const QueryPresetsWhereCell: React.FC<DefaultCellComponentProps> = ({ cellData }) => {\n return <div>{cellData ? transformWhereToNaturalLanguage(cellData) : 'No where query'}</div>\n}\n"],"mappings":";AAEA,SAASA,OAAO,QAAQ;AACxB,OAAOC,KAAA,MAAW;AAElB;AACA,MAAMC,+BAAA,GAAmCC,KAAA;EACvC,IAAIA,KAAA,CAAMC,EAAE,IAAID,KAAA,CAAMC,EAAE,CAACC,MAAM,GAAG,KAAKF,KAAA,CAAMC,EAAE,CAAC,EAAE,CAACE,GAAG,IAAIH,KAAA,CAAMC,EAAE,CAAC,EAAE,CAACE,GAAG,CAACD,MAAM,GAAG,GAAG;IACpF,MAAME,OAAA,GAAUJ,KAAA,CAAMC,EAAE,CAAC,EAAE;IAC3B,MAAMI,QAAA,GAAWD,OAAA,EAASD,GAAA,GAAM,EAAE;IAElC,IAAI,CAACE,QAAA,EAAU;MACb,OAAO;IACT;IAEA,MAAMC,GAAA,GAAMC,MAAA,CAAOC,IAAI,CAACH,QAAA,CAAS,CAAC,EAAE;IAEpC,IAAI,CAACA,QAAQ,CAACC,GAAA,CAAI,EAAE;MAClB,OAAO;IACT;IAEA,MAAMG,QAAA,GAAWF,MAAA,CAAOC,IAAI,CAACH,QAAQ,CAACC,GAAA,CAAI,CAAC,CAAC,EAAE;IAC9C,MAAMI,KAAA,GAAQL,QAAQ,CAACC,GAAA,CAAI,CAACG,QAAA,CAAS;IAErC,OAAO,GAAGZ,OAAA,CAAQS,GAAA,KAAQG,QAAA,IAAYZ,OAAA,CAAQa,KAAA,GAAQ;EACxD;EAEA,OAAO;AACT;AAEA,OAAO,MAAMC,qBAAA,GAA6DA,CAAC;EAAEC;AAAQ,CAAE;EACrF,oBAAOC,IAAA,CAAC;cAAKD,QAAA,GAAWb,+BAAA,CAAgCa,QAAA,IAAY;;AACtE","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["toWords","React","transformWhereToNaturalLanguage","where","or","length","and","orQuery","andQuery","key","Object","keys","operator","value","Array","isArray","map","val","join","QueryPresetsWhereCell","cellData","_jsx"],"sources":["../../../../../src/elements/QueryPresets/cells/WhereCell/index.tsx"],"sourcesContent":["import type { DefaultCellComponentProps, Where } from 'payload'\n\nimport { toWords } from 'payload/shared'\nimport React from 'react'\n\n/** @todo: improve this */\nconst transformWhereToNaturalLanguage = (where: Where): string => {\n if (where.or && where.or.length > 0 && where.or[0].and && where.or[0].and.length > 0) {\n const orQuery = where.or[0]\n const andQuery = orQuery?.and?.[0]\n\n if (!andQuery) {\n return 'No where query'\n }\n\n const key = Object.keys(andQuery)[0]\n\n if (!andQuery[key]) {\n return 'No where query'\n }\n\n const operator = Object.keys(andQuery[key])[0]\n const value = andQuery[key][operator]\n\n if (typeof value === 'string') {\n return `${toWords(key)} ${operator} ${toWords(value)}`\n } else if (Array.isArray(value)) {\n return `${toWords(key)} ${operator} ${value.map((val) => toWords(val)).join(' or ')}`\n }\n }\n\n return ''\n}\n\nexport const QueryPresetsWhereCell: React.FC<DefaultCellComponentProps> = ({ cellData }) => {\n return <div>{cellData ? transformWhereToNaturalLanguage(cellData) : 'No where query'}</div>\n}\n"],"mappings":";AAEA,SAASA,OAAO,QAAQ;AACxB,OAAOC,KAAA,MAAW;AAElB;AACA,MAAMC,+BAAA,GAAmCC,KAAA;EACvC,IAAIA,KAAA,CAAMC,EAAE,IAAID,KAAA,CAAMC,EAAE,CAACC,MAAM,GAAG,KAAKF,KAAA,CAAMC,EAAE,CAAC,EAAE,CAACE,GAAG,IAAIH,KAAA,CAAMC,EAAE,CAAC,EAAE,CAACE,GAAG,CAACD,MAAM,GAAG,GAAG;IACpF,MAAME,OAAA,GAAUJ,KAAA,CAAMC,EAAE,CAAC,EAAE;IAC3B,MAAMI,QAAA,GAAWD,OAAA,EAASD,GAAA,GAAM,EAAE;IAElC,IAAI,CAACE,QAAA,EAAU;MACb,OAAO;IACT;IAEA,MAAMC,GAAA,GAAMC,MAAA,CAAOC,IAAI,CAACH,QAAA,CAAS,CAAC,EAAE;IAEpC,IAAI,CAACA,QAAQ,CAACC,GAAA,CAAI,EAAE;MAClB,OAAO;IACT;IAEA,MAAMG,QAAA,GAAWF,MAAA,CAAOC,IAAI,CAACH,QAAQ,CAACC,GAAA,CAAI,CAAC,CAAC,EAAE;IAC9C,MAAMI,KAAA,GAAQL,QAAQ,CAACC,GAAA,CAAI,CAACG,QAAA,CAAS;IAErC,IAAI,OAAOC,KAAA,KAAU,UAAU;MAC7B,OAAO,GAAGb,OAAA,CAAQS,GAAA,KAAQG,QAAA,IAAYZ,OAAA,CAAQa,KAAA,GAAQ;IACxD,OAAO,IAAIC,KAAA,CAAMC,OAAO,CAACF,KAAA,GAAQ;MAC/B,OAAO,GAAGb,OAAA,CAAQS,GAAA,KAAQG,QAAA,IAAYC,KAAA,CAAMG,GAAG,CAAEC,GAAA,IAAQjB,OAAA,CAAQiB,GAAA,GAAMC,IAAI,CAAC,SAAS;IACvF;EACF;EAEA,OAAO;AACT;AAEA,OAAO,MAAMC,qBAAA,GAA6DA,CAAC;EAAEC;AAAQ,CAAE;EACrF,oBAAOC,IAAA,CAAC;cAAKD,QAAA,GAAWlB,+BAAA,CAAgCkB,QAAA,IAAY;;AACtE","ignoreList":[]}