@payloadcms/plugin-form-builder 3.0.0-canary.291e44c → 3.0.0-canary.2d0dd26
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.
- package/dist/collections/FormSubmissions/hooks/sendEmail.d.ts.map +1 -1
- package/dist/collections/FormSubmissions/hooks/sendEmail.js +4 -2
- package/dist/collections/FormSubmissions/hooks/sendEmail.js.map +1 -1
- package/dist/collections/Forms/DynamicPriceSelector.js +5 -5
- package/dist/collections/Forms/DynamicPriceSelector.js.map +1 -1
- package/dist/utilities/getPaymentTotal.js +4 -4
- package/dist/utilities/getPaymentTotal.js.map +1 -1
- package/dist/utilities/slate/serializeSlate.js +18 -18
- package/dist/utilities/slate/serializeSlate.js.map +1 -1
- package/license.md +22 -0
- package/package.json +14 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendEmail.d.ts","sourceRoot":"","sources":["../../../../src/collections/FormSubmissions/hooks/sendEmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAyB,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAMvF,KAAK,kBAAkB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnE,eAAO,MAAM,SAAS,2BACI,kBAAkB,cAC9B,uBAAuB,KAClC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"sendEmail.d.ts","sourceRoot":"","sources":["../../../../src/collections/FormSubmissions/hooks/sendEmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD,OAAO,KAAK,EAAyB,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAMvF,KAAK,kBAAkB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnE,eAAO,MAAM,SAAS,2BACI,kBAAkB,cAC9B,uBAAuB,KAClC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CA4FpC,CAAA"}
|
|
@@ -47,7 +47,8 @@ export const sendEmail = async (beforeChangeParameters, formConfig)=>{
|
|
|
47
47
|
return emailPromise;
|
|
48
48
|
} catch (err) {
|
|
49
49
|
payload.logger.error({
|
|
50
|
-
err
|
|
50
|
+
err,
|
|
51
|
+
msg: `Error while sending email to address: ${to}. Email not sent.`
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
}));
|
|
@@ -59,7 +60,8 @@ export const sendEmail = async (beforeChangeParameters, formConfig)=>{
|
|
|
59
60
|
} catch (err) {
|
|
60
61
|
const msg = `Error while sending one or more emails in form submission id: ${formSubmissionID}.`;
|
|
61
62
|
payload.logger.error({
|
|
62
|
-
err
|
|
63
|
+
err,
|
|
64
|
+
msg
|
|
63
65
|
});
|
|
64
66
|
}
|
|
65
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/collections/FormSubmissions/hooks/sendEmail.ts"],"sourcesContent":["import type { CollectionBeforeChangeHook } from 'payload'\n\nimport type { Email, FormattedEmail, FormBuilderPluginConfig } from '../../../types.js'\n\nimport { serializeLexical } from '../../../utilities/lexical/serializeLexical.js'\nimport { replaceDoubleCurlys } from '../../../utilities/replaceDoubleCurlys.js'\nimport { serializeSlate } from '../../../utilities/slate/serializeSlate.js'\n\ntype BeforeChangeParams = Parameters<CollectionBeforeChangeHook>[0]\n\nexport const sendEmail = async (\n beforeChangeParameters: BeforeChangeParams,\n formConfig: FormBuilderPluginConfig,\n): Promise<BeforeChangeParams['data']> => {\n const { data, operation, req } = beforeChangeParameters\n\n if (operation === 'create') {\n const {\n data: { id: formSubmissionID },\n req: { locale, payload },\n } = beforeChangeParameters\n\n const { form: formID, submissionData } = data || {}\n\n const { beforeEmail, defaultToEmail, formOverrides } = formConfig || {}\n\n try {\n const form = await payload.findByID({\n id: formID,\n collection: formOverrides?.slug || 'forms',\n locale,\n req,\n })\n\n const emails = form.emails as Email[]\n\n if (emails && emails.length) {\n const formattedEmails: FormattedEmail[] = await Promise.all(\n emails.map(async (email: Email): Promise<FormattedEmail | null> => {\n const {\n bcc: emailBCC,\n cc: emailCC,\n emailFrom,\n emailTo: emailToFromConfig,\n message,\n replyTo: emailReplyTo,\n subject,\n } = email\n\n const emailTo = emailToFromConfig || defaultToEmail || payload.email.defaultFromAddress\n\n const to = replaceDoubleCurlys(emailTo, submissionData)\n const cc = emailCC ? replaceDoubleCurlys(emailCC, submissionData) : ''\n const bcc = emailBCC ? replaceDoubleCurlys(emailBCC, submissionData) : ''\n const from = replaceDoubleCurlys(emailFrom, submissionData)\n const replyTo = replaceDoubleCurlys(emailReplyTo || emailFrom, submissionData)\n\n const isLexical = message && !Array.isArray(message) && 'root' in message\n\n const serializedMessage = isLexical\n ? await serializeLexical(message, submissionData)\n : serializeSlate(message, submissionData)\n\n return {\n bcc,\n cc,\n from,\n html: `<div>${serializedMessage}</div>`,\n replyTo,\n subject: replaceDoubleCurlys(subject, submissionData),\n to,\n }\n }),\n )\n\n let emailsToSend = formattedEmails\n\n if (typeof beforeEmail === 'function') {\n emailsToSend = await beforeEmail(formattedEmails, beforeChangeParameters)\n }\n\n await Promise.all(\n emailsToSend.map(async (email) => {\n const { to } = email\n try {\n const emailPromise = await payload.sendEmail(email)\n return emailPromise\n } catch (err: unknown) {\n payload.logger.error({\n err: `Error while sending email to address: ${to}. Email not sent
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/FormSubmissions/hooks/sendEmail.ts"],"sourcesContent":["import type { CollectionBeforeChangeHook } from 'payload'\n\nimport type { Email, FormattedEmail, FormBuilderPluginConfig } from '../../../types.js'\n\nimport { serializeLexical } from '../../../utilities/lexical/serializeLexical.js'\nimport { replaceDoubleCurlys } from '../../../utilities/replaceDoubleCurlys.js'\nimport { serializeSlate } from '../../../utilities/slate/serializeSlate.js'\n\ntype BeforeChangeParams = Parameters<CollectionBeforeChangeHook>[0]\n\nexport const sendEmail = async (\n beforeChangeParameters: BeforeChangeParams,\n formConfig: FormBuilderPluginConfig,\n): Promise<BeforeChangeParams['data']> => {\n const { data, operation, req } = beforeChangeParameters\n\n if (operation === 'create') {\n const {\n data: { id: formSubmissionID },\n req: { locale, payload },\n } = beforeChangeParameters\n\n const { form: formID, submissionData } = data || {}\n\n const { beforeEmail, defaultToEmail, formOverrides } = formConfig || {}\n\n try {\n const form = await payload.findByID({\n id: formID,\n collection: formOverrides?.slug || 'forms',\n locale,\n req,\n })\n\n const emails = form.emails as Email[]\n\n if (emails && emails.length) {\n const formattedEmails: FormattedEmail[] = await Promise.all(\n emails.map(async (email: Email): Promise<FormattedEmail | null> => {\n const {\n bcc: emailBCC,\n cc: emailCC,\n emailFrom,\n emailTo: emailToFromConfig,\n message,\n replyTo: emailReplyTo,\n subject,\n } = email\n\n const emailTo = emailToFromConfig || defaultToEmail || payload.email.defaultFromAddress\n\n const to = replaceDoubleCurlys(emailTo, submissionData)\n const cc = emailCC ? replaceDoubleCurlys(emailCC, submissionData) : ''\n const bcc = emailBCC ? replaceDoubleCurlys(emailBCC, submissionData) : ''\n const from = replaceDoubleCurlys(emailFrom, submissionData)\n const replyTo = replaceDoubleCurlys(emailReplyTo || emailFrom, submissionData)\n\n const isLexical = message && !Array.isArray(message) && 'root' in message\n\n const serializedMessage = isLexical\n ? await serializeLexical(message, submissionData)\n : serializeSlate(message, submissionData)\n\n return {\n bcc,\n cc,\n from,\n html: `<div>${serializedMessage}</div>`,\n replyTo,\n subject: replaceDoubleCurlys(subject, submissionData),\n to,\n }\n }),\n )\n\n let emailsToSend = formattedEmails\n\n if (typeof beforeEmail === 'function') {\n emailsToSend = await beforeEmail(formattedEmails, beforeChangeParameters)\n }\n\n await Promise.all(\n emailsToSend.map(async (email) => {\n const { to } = email\n try {\n const emailPromise = await payload.sendEmail(email)\n return emailPromise\n } catch (err: unknown) {\n payload.logger.error({\n err,\n msg: `Error while sending email to address: ${to}. Email not sent.`,\n })\n }\n }),\n )\n } else {\n payload.logger.info({ msg: 'No emails to send.' })\n }\n } catch (err: unknown) {\n const msg = `Error while sending one or more emails in form submission id: ${formSubmissionID}.`\n payload.logger.error({ err, msg })\n }\n }\n\n return data\n}\n"],"names":["serializeLexical","replaceDoubleCurlys","serializeSlate","sendEmail","beforeChangeParameters","formConfig","data","operation","req","id","formSubmissionID","locale","payload","form","formID","submissionData","beforeEmail","defaultToEmail","formOverrides","findByID","collection","slug","emails","length","formattedEmails","Promise","all","map","email","bcc","emailBCC","cc","emailCC","emailFrom","emailTo","emailToFromConfig","message","replyTo","emailReplyTo","subject","defaultFromAddress","to","from","isLexical","Array","isArray","serializedMessage","html","emailsToSend","emailPromise","err","logger","error","msg","info"],"mappings":"AAIA,SAASA,gBAAgB,QAAQ,iDAAgD;AACjF,SAASC,mBAAmB,QAAQ,4CAA2C;AAC/E,SAASC,cAAc,QAAQ,6CAA4C;AAI3E,OAAO,MAAMC,YAAY,OACvBC,wBACAC;IAEA,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,GAAG,EAAE,GAAGJ;IAEjC,IAAIG,cAAc,UAAU;QAC1B,MAAM,EACJD,MAAM,EAAEG,IAAIC,gBAAgB,EAAE,EAC9BF,KAAK,EAAEG,MAAM,EAAEC,OAAO,EAAE,EACzB,GAAGR;QAEJ,MAAM,EAAES,MAAMC,MAAM,EAAEC,cAAc,EAAE,GAAGT,QAAQ,CAAC;QAElD,MAAM,EAAEU,WAAW,EAAEC,cAAc,EAAEC,aAAa,EAAE,GAAGb,cAAc,CAAC;QAEtE,IAAI;YACF,MAAMQ,OAAO,MAAMD,QAAQO,QAAQ,CAAC;gBAClCV,IAAIK;gBACJM,YAAYF,eAAeG,QAAQ;gBACnCV;gBACAH;YACF;YAEA,MAAMc,SAAST,KAAKS,MAAM;YAE1B,IAAIA,UAAUA,OAAOC,MAAM,EAAE;gBAC3B,MAAMC,kBAAoC,MAAMC,QAAQC,GAAG,CACzDJ,OAAOK,GAAG,CAAC,OAAOC;oBAChB,MAAM,EACJC,KAAKC,QAAQ,EACbC,IAAIC,OAAO,EACXC,SAAS,EACTC,SAASC,iBAAiB,EAC1BC,OAAO,EACPC,SAASC,YAAY,EACrBC,OAAO,EACR,GAAGX;oBAEJ,MAAMM,UAAUC,qBAAqBlB,kBAAkBL,QAAQgB,KAAK,CAACY,kBAAkB;oBAEvF,MAAMC,KAAKxC,oBAAoBiC,SAASnB;oBACxC,MAAMgB,KAAKC,UAAU/B,oBAAoB+B,SAASjB,kBAAkB;oBACpE,MAAMc,MAAMC,WAAW7B,oBAAoB6B,UAAUf,kBAAkB;oBACvE,MAAM2B,OAAOzC,oBAAoBgC,WAAWlB;oBAC5C,MAAMsB,UAAUpC,oBAAoBqC,gBAAgBL,WAAWlB;oBAE/D,MAAM4B,YAAYP,WAAW,CAACQ,MAAMC,OAAO,CAACT,YAAY,UAAUA;oBAElE,MAAMU,oBAAoBH,YACtB,MAAM3C,iBAAiBoC,SAASrB,kBAChCb,eAAekC,SAASrB;oBAE5B,OAAO;wBACLc;wBACAE;wBACAW;wBACAK,MAAM,CAAC,KAAK,EAAED,kBAAkB,MAAM,CAAC;wBACvCT;wBACAE,SAAStC,oBAAoBsC,SAASxB;wBACtC0B;oBACF;gBACF;gBAGF,IAAIO,eAAexB;gBAEnB,IAAI,OAAOR,gBAAgB,YAAY;oBACrCgC,eAAe,MAAMhC,YAAYQ,iBAAiBpB;gBACpD;gBAEA,MAAMqB,QAAQC,GAAG,CACfsB,aAAarB,GAAG,CAAC,OAAOC;oBACtB,MAAM,EAAEa,EAAE,EAAE,GAAGb;oBACf,IAAI;wBACF,MAAMqB,eAAe,MAAMrC,QAAQT,SAAS,CAACyB;wBAC7C,OAAOqB;oBACT,EAAE,OAAOC,KAAc;wBACrBtC,QAAQuC,MAAM,CAACC,KAAK,CAAC;4BACnBF;4BACAG,KAAK,CAAC,sCAAsC,EAAEZ,GAAG,iBAAiB,CAAC;wBACrE;oBACF;gBACF;YAEJ,OAAO;gBACL7B,QAAQuC,MAAM,CAACG,IAAI,CAAC;oBAAED,KAAK;gBAAqB;YAClD;QACF,EAAE,OAAOH,KAAc;YACrB,MAAMG,MAAM,CAAC,8DAA8D,EAAE3C,iBAAiB,CAAC,CAAC;YAChGE,QAAQuC,MAAM,CAACC,KAAK,CAAC;gBAAEF;gBAAKG;YAAI;QAClC;IACF;IAEA,OAAO/C;AACT,EAAC"}
|
|
@@ -3,15 +3,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { TextField, useLocale, useWatchForm } from '@payloadcms/ui';
|
|
4
4
|
import React, { useEffect, useState } from 'react';
|
|
5
5
|
export const DynamicPriceSelector = (props)=>{
|
|
6
|
-
const { field } = props;
|
|
6
|
+
const { field, path } = props;
|
|
7
7
|
const { fields, getData, getDataByPath } = useWatchForm();
|
|
8
8
|
const locale = useLocale();
|
|
9
9
|
const [isNumberField, setIsNumberField] = useState();
|
|
10
10
|
const [valueType, setValueType] = useState();
|
|
11
11
|
// only number fields can use 'valueOfField`
|
|
12
12
|
useEffect(()=>{
|
|
13
|
-
if (
|
|
14
|
-
const parentPath =
|
|
13
|
+
if (path) {
|
|
14
|
+
const parentPath = path.split('.').slice(0, -1).join('.');
|
|
15
15
|
const paymentFieldData = getDataByPath(parentPath);
|
|
16
16
|
if (paymentFieldData) {
|
|
17
17
|
const { fieldToUse, valueType } = paymentFieldData;
|
|
@@ -26,9 +26,9 @@ export const DynamicPriceSelector = (props)=>{
|
|
|
26
26
|
}
|
|
27
27
|
}, [
|
|
28
28
|
fields,
|
|
29
|
-
field._path,
|
|
30
29
|
getDataByPath,
|
|
31
|
-
getData
|
|
30
|
+
getData,
|
|
31
|
+
path
|
|
32
32
|
]);
|
|
33
33
|
// TODO: make this a number field, block by Payload
|
|
34
34
|
if (valueType === 'static') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/Forms/DynamicPriceSelector.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, TextFieldClientComponent } from 'payload'\n\nimport { TextField, useLocale, useWatchForm } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\ntype FieldWithID = {\n id: string\n name: string\n}\n\nexport const DynamicPriceSelector: TextFieldClientComponent = (props) => {\n const { field } = props\n\n const { fields, getData, getDataByPath } = useWatchForm()\n\n const locale = useLocale()\n\n const [isNumberField, setIsNumberField] = useState<boolean>()\n const [valueType, setValueType] = useState<'static' | 'valueOfField'>()\n\n // only number fields can use 'valueOfField`\n useEffect(() => {\n if (
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/Forms/DynamicPriceSelector.tsx"],"sourcesContent":["'use client'\n\nimport type { Data, TextFieldClientComponent } from 'payload'\n\nimport { TextField, useLocale, useWatchForm } from '@payloadcms/ui'\nimport React, { useEffect, useState } from 'react'\n\ntype FieldWithID = {\n id: string\n name: string\n}\n\nexport const DynamicPriceSelector: TextFieldClientComponent = (props) => {\n const { field, path } = props\n\n const { fields, getData, getDataByPath } = useWatchForm()\n\n const locale = useLocale()\n\n const [isNumberField, setIsNumberField] = useState<boolean>()\n const [valueType, setValueType] = useState<'static' | 'valueOfField'>()\n\n // only number fields can use 'valueOfField`\n useEffect(() => {\n if (path) {\n const parentPath = path.split('.').slice(0, -1).join('.')\n const paymentFieldData: any = getDataByPath(parentPath)\n\n if (paymentFieldData) {\n const { fieldToUse, valueType } = paymentFieldData\n\n setValueType(valueType)\n\n const { fields: allFields }: Data = getData()\n const field = allFields.find((field: FieldWithID) => field.name === fieldToUse)\n\n if (field) {\n const { blockType } = field\n setIsNumberField(blockType === 'number')\n }\n }\n }\n }, [fields, getDataByPath, getData, path])\n\n // TODO: make this a number field, block by Payload\n if (valueType === 'static') {\n return <TextField {...props} />\n }\n\n const localeCode = typeof locale === 'object' && 'code' in locale ? locale.code : locale\n\n const localLabels = typeof field.label === 'object' ? field.label : { [localeCode]: field.label }\n\n const labelValue = localLabels[localeCode] || localLabels['en'] || ''\n\n if (valueType === 'valueOfField' && !isNumberField) {\n return (\n <div>\n <div>{String(labelValue)}</div>\n <div\n style={{\n color: '#9A9A9A',\n }}\n >\n The selected field must be a number field.\n </div>\n </div>\n )\n }\n\n return null\n}\n"],"names":["TextField","useLocale","useWatchForm","React","useEffect","useState","DynamicPriceSelector","props","field","path","fields","getData","getDataByPath","locale","isNumberField","setIsNumberField","valueType","setValueType","parentPath","split","slice","join","paymentFieldData","fieldToUse","allFields","find","name","blockType","localeCode","code","localLabels","label","labelValue","div","String","style","color"],"mappings":"AAAA;;AAIA,SAASA,SAAS,EAAEC,SAAS,EAAEC,YAAY,QAAQ,iBAAgB;AACnE,OAAOC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAOlD,OAAO,MAAMC,uBAAiD,CAACC;IAC7D,MAAM,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGF;IAExB,MAAM,EAAEG,MAAM,EAAEC,OAAO,EAAEC,aAAa,EAAE,GAAGV;IAE3C,MAAMW,SAASZ;IAEf,MAAM,CAACa,eAAeC,iBAAiB,GAAGV;IAC1C,MAAM,CAACW,WAAWC,aAAa,GAAGZ;IAElC,4CAA4C;IAC5CD,UAAU;QACR,IAAIK,MAAM;YACR,MAAMS,aAAaT,KAAKU,KAAK,CAAC,KAAKC,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;YACrD,MAAMC,mBAAwBV,cAAcM;YAE5C,IAAII,kBAAkB;gBACpB,MAAM,EAAEC,UAAU,EAAEP,SAAS,EAAE,GAAGM;gBAElCL,aAAaD;gBAEb,MAAM,EAAEN,QAAQc,SAAS,EAAE,GAASb;gBACpC,MAAMH,QAAQgB,UAAUC,IAAI,CAAC,CAACjB,QAAuBA,MAAMkB,IAAI,KAAKH;gBAEpE,IAAIf,OAAO;oBACT,MAAM,EAAEmB,SAAS,EAAE,GAAGnB;oBACtBO,iBAAiBY,cAAc;gBACjC;YACF;QACF;IACF,GAAG;QAACjB;QAAQE;QAAeD;QAASF;KAAK;IAEzC,mDAAmD;IACnD,IAAIO,cAAc,UAAU;QAC1B,qBAAO,KAAChB;YAAW,GAAGO,KAAK;;IAC7B;IAEA,MAAMqB,aAAa,OAAOf,WAAW,YAAY,UAAUA,SAASA,OAAOgB,IAAI,GAAGhB;IAElF,MAAMiB,cAAc,OAAOtB,MAAMuB,KAAK,KAAK,WAAWvB,MAAMuB,KAAK,GAAG;QAAE,CAACH,WAAW,EAAEpB,MAAMuB,KAAK;IAAC;IAEhG,MAAMC,aAAaF,WAAW,CAACF,WAAW,IAAIE,WAAW,CAAC,KAAK,IAAI;IAEnE,IAAId,cAAc,kBAAkB,CAACF,eAAe;QAClD,qBACE,MAACmB;;8BACC,KAACA;8BAAKC,OAAOF;;8BACb,KAACC;oBACCE,OAAO;wBACLC,OAAO;oBACT;8BACD;;;;IAKP;IAEA,OAAO;AACT,EAAC"}
|
|
@@ -14,9 +14,9 @@ export const getPaymentTotal = (args)=>{
|
|
|
14
14
|
total += valueToUse;
|
|
15
15
|
break;
|
|
16
16
|
}
|
|
17
|
-
case '
|
|
17
|
+
case 'divide':
|
|
18
18
|
{
|
|
19
|
-
total
|
|
19
|
+
total /= valueToUse;
|
|
20
20
|
break;
|
|
21
21
|
}
|
|
22
22
|
case 'multiply':
|
|
@@ -24,9 +24,9 @@ export const getPaymentTotal = (args)=>{
|
|
|
24
24
|
total *= valueToUse;
|
|
25
25
|
break;
|
|
26
26
|
}
|
|
27
|
-
case '
|
|
27
|
+
case 'subtract':
|
|
28
28
|
{
|
|
29
|
-
total
|
|
29
|
+
total -= valueToUse;
|
|
30
30
|
break;
|
|
31
31
|
}
|
|
32
32
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/getPaymentTotal.ts"],"sourcesContent":["import type { FieldValues, PaymentField, PriceCondition } from '../types.js'\n\nexport const getPaymentTotal = (\n args: {\n fieldValues: FieldValues\n } & Partial<PaymentField>,\n): number => {\n const { basePrice = 0, fieldValues, priceConditions } = args\n\n let total = basePrice\n\n if (Array.isArray(priceConditions) && priceConditions.length > 0) {\n priceConditions.forEach((priceCondition: PriceCondition) => {\n const { condition, fieldToUse, operator, valueForCondition, valueForOperator, valueType } =\n priceCondition\n\n const valueOfField = fieldValues?.[fieldToUse]\n\n if (valueOfField) {\n if (\n condition === 'hasValue' ||\n (condition === 'equals' && valueOfField === valueForCondition) ||\n (condition === 'notEquals' && valueOfField !== valueForCondition)\n ) {\n const valueToUse = Number(valueType === 'valueOfField' ? valueOfField : valueForOperator)\n switch (operator) {\n case 'add': {\n total += valueToUse\n break\n }\n case '
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/getPaymentTotal.ts"],"sourcesContent":["import type { FieldValues, PaymentField, PriceCondition } from '../types.js'\n\nexport const getPaymentTotal = (\n args: {\n fieldValues: FieldValues\n } & Partial<PaymentField>,\n): number => {\n const { basePrice = 0, fieldValues, priceConditions } = args\n\n let total = basePrice\n\n if (Array.isArray(priceConditions) && priceConditions.length > 0) {\n priceConditions.forEach((priceCondition: PriceCondition) => {\n const { condition, fieldToUse, operator, valueForCondition, valueForOperator, valueType } =\n priceCondition\n\n const valueOfField = fieldValues?.[fieldToUse]\n\n if (valueOfField) {\n if (\n condition === 'hasValue' ||\n (condition === 'equals' && valueOfField === valueForCondition) ||\n (condition === 'notEquals' && valueOfField !== valueForCondition)\n ) {\n const valueToUse = Number(valueType === 'valueOfField' ? valueOfField : valueForOperator)\n switch (operator) {\n case 'add': {\n total += valueToUse\n break\n }\n case 'divide': {\n total /= valueToUse\n break\n }\n case 'multiply': {\n total *= valueToUse\n break\n }\n case 'subtract': {\n total -= valueToUse\n break\n }\n default: {\n break\n }\n }\n }\n }\n })\n }\n\n return total\n}\n"],"names":["getPaymentTotal","args","basePrice","fieldValues","priceConditions","total","Array","isArray","length","forEach","priceCondition","condition","fieldToUse","operator","valueForCondition","valueForOperator","valueType","valueOfField","valueToUse","Number"],"mappings":"AAEA,OAAO,MAAMA,kBAAkB,CAC7BC;IAIA,MAAM,EAAEC,YAAY,CAAC,EAAEC,WAAW,EAAEC,eAAe,EAAE,GAAGH;IAExD,IAAII,QAAQH;IAEZ,IAAII,MAAMC,OAAO,CAACH,oBAAoBA,gBAAgBI,MAAM,GAAG,GAAG;QAChEJ,gBAAgBK,OAAO,CAAC,CAACC;YACvB,MAAM,EAAEC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,iBAAiB,EAAEC,gBAAgB,EAAEC,SAAS,EAAE,GACvFN;YAEF,MAAMO,eAAed,aAAa,CAACS,WAAW;YAE9C,IAAIK,cAAc;gBAChB,IACEN,cAAc,cACbA,cAAc,YAAYM,iBAAiBH,qBAC3CH,cAAc,eAAeM,iBAAiBH,mBAC/C;oBACA,MAAMI,aAAaC,OAAOH,cAAc,iBAAiBC,eAAeF;oBACxE,OAAQF;wBACN,KAAK;4BAAO;gCACVR,SAASa;gCACT;4BACF;wBACA,KAAK;4BAAU;gCACbb,SAASa;gCACT;4BACF;wBACA,KAAK;4BAAY;gCACfb,SAASa;gCACT;4BACF;wBACA,KAAK;4BAAY;gCACfb,SAASa;gCACT;4BACF;wBACA;4BAAS;gCACP;4BACF;oBACF;gBACF;YACF;QACF;IACF;IAEA,OAAOb;AACT,EAAC"}
|
|
@@ -69,17 +69,23 @@ export const serializeSlate = (children, submissionData)=>children?.map((node)=>
|
|
|
69
69
|
${serializeSlate(node.children, submissionData)}
|
|
70
70
|
</h6>
|
|
71
71
|
`;
|
|
72
|
-
case '
|
|
72
|
+
case 'indent':
|
|
73
73
|
return `
|
|
74
|
-
|
|
74
|
+
<p style="padding-left: 20px">
|
|
75
|
+
${serializeSlate(node.children, submissionData)}
|
|
76
|
+
</p>
|
|
77
|
+
`;
|
|
78
|
+
case 'li':
|
|
79
|
+
return `
|
|
80
|
+
<li>
|
|
75
81
|
${serializeSlate(node.children, submissionData)}
|
|
76
|
-
</
|
|
82
|
+
</li>
|
|
77
83
|
`;
|
|
78
|
-
case '
|
|
84
|
+
case 'link':
|
|
79
85
|
return `
|
|
80
|
-
|
|
86
|
+
<a href={${escapeHTML(replaceDoubleCurlys(node.url, submissionData))}}>
|
|
81
87
|
${serializeSlate(node.children, submissionData)}
|
|
82
|
-
</
|
|
88
|
+
</a>
|
|
83
89
|
`;
|
|
84
90
|
case 'ol':
|
|
85
91
|
return `
|
|
@@ -87,23 +93,17 @@ export const serializeSlate = (children, submissionData)=>children?.map((node)=>
|
|
|
87
93
|
${serializeSlate(node.children, submissionData)}
|
|
88
94
|
</ol>
|
|
89
95
|
`;
|
|
90
|
-
case '
|
|
96
|
+
case 'quote':
|
|
91
97
|
return `
|
|
92
|
-
<
|
|
98
|
+
<blockquote>
|
|
93
99
|
${serializeSlate(node.children, submissionData)}
|
|
94
|
-
</
|
|
100
|
+
</blockquote>
|
|
95
101
|
`;
|
|
96
|
-
case '
|
|
97
|
-
return `
|
|
98
|
-
<p style="padding-left: 20px">
|
|
99
|
-
${serializeSlate(node.children, submissionData)}
|
|
100
|
-
</p>
|
|
101
|
-
`;
|
|
102
|
-
case 'link':
|
|
102
|
+
case 'ul':
|
|
103
103
|
return `
|
|
104
|
-
|
|
104
|
+
<ul>
|
|
105
105
|
${serializeSlate(node.children, submissionData)}
|
|
106
|
-
</
|
|
106
|
+
</ul>
|
|
107
107
|
`;
|
|
108
108
|
default:
|
|
109
109
|
return `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utilities/slate/serializeSlate.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nimport { replaceDoubleCurlys } from '../replaceDoubleCurlys.js'\n\ninterface Node {\n bold?: boolean\n children?: Node[]\n code?: boolean\n italic?: boolean\n text?: string\n type?: string\n url?: string\n}\n\nconst isTextNode = (node: Node): node is { text: string } & Node => {\n return 'text' in node\n}\n\nexport const serializeSlate = (children?: Node[], submissionData?: any): string | undefined =>\n children\n ?.map((node: Node) => {\n if (isTextNode(node)) {\n let text = node.text.includes('{{*')\n ? replaceDoubleCurlys(node.text, submissionData)\n : `<span>${escapeHTML(replaceDoubleCurlys(node.text, submissionData))}</span>`\n\n if (node.bold) {\n text = `\n <strong>\n ${text}\n </strong>\n `\n }\n\n if (node.code) {\n text = `\n <code>\n ${text}\n </code>\n `\n }\n\n if (node.italic) {\n text = `\n <em >\n ${text}\n </em>\n `\n }\n\n return text\n }\n\n if (!node) {\n return null\n }\n\n switch (node.type) {\n case 'h1':\n return `\n <h1>\n ${serializeSlate(node.children, submissionData)}\n </h1>\n `\n case 'h2':\n return `\n <h2>\n ${serializeSlate(node.children, submissionData)}\n </h2>\n `\n case 'h3':\n return `\n <h3>\n ${serializeSlate(node.children, submissionData)}\n </h3>\n `\n case 'h4':\n return `\n <h4>\n ${serializeSlate(node.children, submissionData)}\n </h4>\n `\n case 'h5':\n return `\n <h5>\n ${serializeSlate(node.children, submissionData)}\n </h5>\n `\n case 'h6':\n return `\n <h6>\n ${serializeSlate(node.children, submissionData)}\n </h6>\n `\n case '
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/slate/serializeSlate.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\n\nimport { replaceDoubleCurlys } from '../replaceDoubleCurlys.js'\n\ninterface Node {\n bold?: boolean\n children?: Node[]\n code?: boolean\n italic?: boolean\n text?: string\n type?: string\n url?: string\n}\n\nconst isTextNode = (node: Node): node is { text: string } & Node => {\n return 'text' in node\n}\n\nexport const serializeSlate = (children?: Node[], submissionData?: any): string | undefined =>\n children\n ?.map((node: Node) => {\n if (isTextNode(node)) {\n let text = node.text.includes('{{*')\n ? replaceDoubleCurlys(node.text, submissionData)\n : `<span>${escapeHTML(replaceDoubleCurlys(node.text, submissionData))}</span>`\n\n if (node.bold) {\n text = `\n <strong>\n ${text}\n </strong>\n `\n }\n\n if (node.code) {\n text = `\n <code>\n ${text}\n </code>\n `\n }\n\n if (node.italic) {\n text = `\n <em >\n ${text}\n </em>\n `\n }\n\n return text\n }\n\n if (!node) {\n return null\n }\n\n switch (node.type) {\n case 'h1':\n return `\n <h1>\n ${serializeSlate(node.children, submissionData)}\n </h1>\n `\n case 'h2':\n return `\n <h2>\n ${serializeSlate(node.children, submissionData)}\n </h2>\n `\n case 'h3':\n return `\n <h3>\n ${serializeSlate(node.children, submissionData)}\n </h3>\n `\n case 'h4':\n return `\n <h4>\n ${serializeSlate(node.children, submissionData)}\n </h4>\n `\n case 'h5':\n return `\n <h5>\n ${serializeSlate(node.children, submissionData)}\n </h5>\n `\n case 'h6':\n return `\n <h6>\n ${serializeSlate(node.children, submissionData)}\n </h6>\n `\n case 'indent':\n return `\n <p style=\"padding-left: 20px\">\n ${serializeSlate(node.children, submissionData)}\n </p>\n `\n case 'li':\n return `\n <li>\n ${serializeSlate(node.children, submissionData)}\n </li>\n `\n case 'link':\n return `\n <a href={${escapeHTML(replaceDoubleCurlys(node.url, submissionData))}}>\n ${serializeSlate(node.children, submissionData)}\n </a>\n `\n case 'ol':\n return `\n <ol>\n ${serializeSlate(node.children, submissionData)}\n </ol>\n `\n case 'quote':\n return `\n <blockquote>\n ${serializeSlate(node.children, submissionData)}\n </blockquote>\n `\n case 'ul':\n return `\n <ul>\n ${serializeSlate(node.children, submissionData)}\n </ul>\n `\n\n default:\n return `\n <p>\n ${serializeSlate(node.children, submissionData)}\n </p>\n `\n }\n })\n .filter(Boolean)\n .join('')\n"],"names":["escapeHTML","replaceDoubleCurlys","isTextNode","node","serializeSlate","children","submissionData","map","text","includes","bold","code","italic","type","url","filter","Boolean","join"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AAEpC,SAASC,mBAAmB,QAAQ,4BAA2B;AAY/D,MAAMC,aAAa,CAACC;IAClB,OAAO,UAAUA;AACnB;AAEA,OAAO,MAAMC,iBAAiB,CAACC,UAAmBC,iBAChDD,UACIE,IAAI,CAACJ;QACL,IAAID,WAAWC,OAAO;YACpB,IAAIK,OAAOL,KAAKK,IAAI,CAACC,QAAQ,CAAC,SAC1BR,oBAAoBE,KAAKK,IAAI,EAAEF,kBAC/B,CAAC,MAAM,EAAEN,WAAWC,oBAAoBE,KAAKK,IAAI,EAAEF,iBAAiB,OAAO,CAAC;YAEhF,IAAIH,KAAKO,IAAI,EAAE;gBACbF,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,IAAIL,KAAKQ,IAAI,EAAE;gBACbH,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,IAAIL,KAAKS,MAAM,EAAE;gBACfJ,OAAO,CAAC;;UAER,EAAEA,KAAK;;MAEX,CAAC;YACC;YAEA,OAAOA;QACT;QAEA,IAAI,CAACL,MAAM;YACT,OAAO;QACT;QAEA,OAAQA,KAAKU,IAAI;YACf,KAAK;gBACH,OAAO,CAAC;;UAER,EAAET,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;YAEN,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;QAEpD,CAAC;YACD,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;mBACC,EAAEN,WAAWC,oBAAoBE,KAAKW,GAAG,EAAER,iBAAiB;UACrE,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YACC,KAAK;gBACH,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;YAEC;gBACE,OAAO,CAAC;;UAER,EAAEF,eAAeD,KAAKE,QAAQ,EAAEC,gBAAgB;;MAEpD,CAAC;QACD;IACF,GACCS,OAAOC,SACPC,KAAK,IAAG"}
|
package/license.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018-2024 Payload CMS, Inc. <info@payloadcms.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-form-builder",
|
|
3
|
-
"version": "3.0.0-canary.
|
|
3
|
+
"version": "3.0.0-canary.2d0dd26",
|
|
4
4
|
"description": "Form builder plugin for Payload CMS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -20,6 +20,13 @@
|
|
|
20
20
|
},
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "Payload <dev@payloadcms.com> (https://payloadcms.com)",
|
|
23
|
+
"maintainers": [
|
|
24
|
+
{
|
|
25
|
+
"name": "Payload",
|
|
26
|
+
"email": "info@payloadcms.com",
|
|
27
|
+
"url": "https://payloadcms.com"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
23
30
|
"type": "module",
|
|
24
31
|
"exports": {
|
|
25
32
|
".": {
|
|
@@ -45,22 +52,21 @@
|
|
|
45
52
|
],
|
|
46
53
|
"dependencies": {
|
|
47
54
|
"escape-html": "^1.0.3",
|
|
48
|
-
"@payloadcms/ui": "3.0.0-canary.
|
|
55
|
+
"@payloadcms/ui": "3.0.0-canary.2d0dd26"
|
|
49
56
|
},
|
|
50
57
|
"devDependencies": {
|
|
51
58
|
"@types/escape-html": "^1.0.4",
|
|
52
|
-
"@types/express": "^4.17.21",
|
|
53
59
|
"@types/react": "npm:types-react@19.0.0-rc.1",
|
|
54
60
|
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
|
55
61
|
"copyfiles": "^2.4.1",
|
|
56
62
|
"cross-env": "^7.0.3",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
63
|
+
"payload": "3.0.0-canary.2d0dd26",
|
|
64
|
+
"@payloadcms/eslint-config": "3.0.0-beta.112"
|
|
59
65
|
},
|
|
60
66
|
"peerDependencies": {
|
|
61
|
-
"react": "^19.0.0 || ^19.0.0-rc-
|
|
62
|
-
"react-dom": "^19.0.0 || ^19.0.0-rc-
|
|
63
|
-
"payload": "3.0.0-canary.
|
|
67
|
+
"react": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
68
|
+
"react-dom": "^19.0.0 || ^19.0.0-rc-65a56d0e-20241020",
|
|
69
|
+
"payload": "3.0.0-canary.2d0dd26"
|
|
64
70
|
},
|
|
65
71
|
"publishConfig": {
|
|
66
72
|
"registry": "https://registry.npmjs.org/"
|