@sanity/form-toolkit 1.2.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/_chunks-cjs/create-handler.js +68 -0
- package/dist/_chunks-cjs/create-handler.js.map +1 -0
- package/dist/_chunks-es/create-handler.mjs +69 -0
- package/dist/_chunks-es/create-handler.mjs.map +1 -0
- package/dist/form-schema/index.d.mts +69 -0
- package/dist/form-schema/index.d.ts +69 -0
- package/dist/{index.js → form-schema/index.js} +9 -148
- package/dist/form-schema/index.js.map +1 -0
- package/dist/{index.mjs → form-schema/index.mjs} +10 -149
- package/dist/form-schema/index.mjs.map +1 -0
- package/dist/formium/index.d.mts +20 -0
- package/dist/formium/index.d.ts +20 -0
- package/dist/formium/index.js +28 -0
- package/dist/formium/index.js.map +1 -0
- package/dist/formium/index.mjs +30 -0
- package/dist/formium/index.mjs.map +1 -0
- package/dist/hubspot/index.d.mts +49 -0
- package/dist/hubspot/index.d.ts +49 -0
- package/dist/hubspot/index.js +44 -0
- package/dist/hubspot/index.js.map +1 -0
- package/dist/hubspot/index.mjs +48 -0
- package/dist/hubspot/index.mjs.map +1 -0
- package/dist/mailchimp/index.d.mts +45 -0
- package/dist/mailchimp/index.d.ts +45 -0
- package/dist/mailchimp/index.js +48 -0
- package/dist/mailchimp/index.js.map +1 -0
- package/dist/mailchimp/index.mjs +49 -0
- package/dist/mailchimp/index.mjs.map +1 -0
- package/package.json +36 -6
- package/src/form-schema/components/default-field.tsx +3 -1
- package/src/form-schema/components/form-renderer.tsx +5 -1
- package/src/form-schema/components/types.ts +2 -2
- package/src/form-schema/index.ts +2 -1
- package/src/hubspot/index.ts +5 -3
- package/src/index.ts +18 -18
- package/src/mailchimp/index.ts +5 -4
- package/dist/index.d.mts +0 -166
- package/dist/index.d.ts +0 -166
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { defineType, defineField, definePlugin } from "sanity";
|
|
2
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
3
|
import { FaWpforms } from "react-icons/fa";
|
|
3
4
|
import { LuTextCursorInput } from "react-icons/lu";
|
|
4
|
-
import { asyncList } from "@sanity/sanity-plugin-async-list";
|
|
5
|
-
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
6
|
-
import { Card, Text } from "@sanity/ui";
|
|
7
|
-
import { defineEventHandler } from "h3";
|
|
8
|
-
import mailchimp from "@mailchimp/mailchimp_marketing";
|
|
9
5
|
const DefaultField = ({ field, fieldState, error }) => {
|
|
10
6
|
const { type, label, name, options = {}, choices = [] } = field;
|
|
11
7
|
if (!type || !name) return null;
|
|
@@ -19,6 +15,8 @@ const DefaultField = ({ field, fieldState, error }) => {
|
|
|
19
15
|
onChange(e.target.checked ? choiceValue : "");
|
|
20
16
|
}, renderInput = () => {
|
|
21
17
|
switch (type) {
|
|
18
|
+
case "submit":
|
|
19
|
+
return /* @__PURE__ */ jsx("button", { type: "submit", children: label || "Submit" });
|
|
22
20
|
case "textarea":
|
|
23
21
|
return /* @__PURE__ */ jsx(
|
|
24
22
|
"textarea",
|
|
@@ -91,7 +89,7 @@ const DefaultField = ({ field, fieldState, error }) => {
|
|
|
91
89
|
}
|
|
92
90
|
};
|
|
93
91
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
94
|
-
label &&
|
|
92
|
+
label && !["hidden", "submit"].includes(type) && /* @__PURE__ */ jsx("label", { htmlFor: name, children: label }),
|
|
95
93
|
renderInput(),
|
|
96
94
|
error && /* @__PURE__ */ jsx("span", { className: "error", children: error })
|
|
97
95
|
] });
|
|
@@ -115,7 +113,11 @@ const DefaultField = ({ field, fieldState, error }) => {
|
|
|
115
113
|
return delete elProps.formData, delete elProps.getFieldState, delete elProps.getFieldError, delete elProps.fieldComponents, /* @__PURE__ */ jsxs("form", { ...elProps, id: elProps.id ?? formData?.id?.current, children: [
|
|
116
114
|
formData?.fields?.map((field) => /* @__PURE__ */ jsx("div", { className: "form-field", children: renderField(field) }, field._key)),
|
|
117
115
|
children,
|
|
118
|
-
|
|
116
|
+
renderField({
|
|
117
|
+
type: "submit",
|
|
118
|
+
name: "submit",
|
|
119
|
+
label: formData?.submitButton?.text || "Submit"
|
|
120
|
+
})
|
|
119
121
|
] });
|
|
120
122
|
}, formType = defineType({
|
|
121
123
|
name: "form",
|
|
@@ -334,150 +336,9 @@ const DefaultField = ({ field, fieldState, error }) => {
|
|
|
334
336
|
name: "form-toolkit_form-schema",
|
|
335
337
|
schema
|
|
336
338
|
// plugins: [structureTool({defaultDocumentNode})],
|
|
337
|
-
})), Option$1 = (option) => /* @__PURE__ */ jsxs(Card, { "data-as": "button", padding: 3, radius: 2, tone: "inherit", children: [
|
|
338
|
-
/* @__PURE__ */ jsx(Text, { size: 2, textOverflow: "ellipsis", children: option.name }),
|
|
339
|
-
/* @__PURE__ */ jsx(Card, { paddingTop: 2, tone: "inherit", style: { background: "inherit" }, children: /* @__PURE__ */ jsx(Text, { size: 1, textOverflow: "ellipsis", children: `ID: ${option.value}` }) })
|
|
340
|
-
] }), hubSpotInput = definePlugin((options) => ({
|
|
341
|
-
name: "sanity-plugin-form-toolkit_hubspot-input",
|
|
342
|
-
plugins: [
|
|
343
|
-
asyncList({
|
|
344
|
-
schemaType: "hubSpotForm",
|
|
345
|
-
loader: async () => await (await fetch(options.url)).json(),
|
|
346
|
-
autocompleteProps: {
|
|
347
|
-
renderOption: (option) => Option$1(option),
|
|
348
|
-
renderValue(value, option) {
|
|
349
|
-
return option?.name ?? value;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
})
|
|
353
|
-
]
|
|
354
|
-
})), detectFramework = () => {
|
|
355
|
-
if (process.env.NEXT_RUNTIME)
|
|
356
|
-
return "nextjs";
|
|
357
|
-
if (process.env.NUXT_ENV)
|
|
358
|
-
return "nuxt";
|
|
359
|
-
if (process.env.SVELTEKIT_ENV)
|
|
360
|
-
return "sveltekit";
|
|
361
|
-
if (process.env.REMIX_ENV)
|
|
362
|
-
return "remix";
|
|
363
|
-
if (process.env.ASTRO_ENV)
|
|
364
|
-
return "astro";
|
|
365
|
-
throw new Error("Unable to detect framework.");
|
|
366
|
-
}, createHandler = (handlerFunc) => {
|
|
367
|
-
const framework = detectFramework(), handlerLogic = async ({
|
|
368
|
-
// eslint-disable-next-line
|
|
369
|
-
req,
|
|
370
|
-
res
|
|
371
|
-
}) => {
|
|
372
|
-
try {
|
|
373
|
-
const data = await handlerFunc();
|
|
374
|
-
return res && (res.writeHead(200, { "Content-Type": "application/json" }), res.end(JSON.stringify(data))), data;
|
|
375
|
-
} catch (error) {
|
|
376
|
-
return error instanceof Error ? (res && (res.writeHead(500, { "Content-Type": "application/json" }), res.end(JSON.stringify({ error: error.message }))), { error: error.message }) : (res && (res.writeHead(500, { "Content-Type": "application/json" }), res.end(JSON.stringify({ error: "An unexpected error occurred" }))), { error: "An unexpected error occurred" });
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
if (framework === "nextjs")
|
|
380
|
-
return async (req, res) => {
|
|
381
|
-
res.setHeader("Access-Control-Allow-Origin", "*"), res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"), res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"), await handlerLogic({ req, res });
|
|
382
|
-
};
|
|
383
|
-
if (framework === "nuxt")
|
|
384
|
-
return defineEventHandler(async (event) => {
|
|
385
|
-
const req = event.node.req, res = event.node.res;
|
|
386
|
-
return handlerLogic({ req, res });
|
|
387
|
-
});
|
|
388
|
-
if (framework === "sveltekit")
|
|
389
|
-
return {
|
|
390
|
-
GET: async ({ request }) => {
|
|
391
|
-
const result = await handlerLogic({ req: request });
|
|
392
|
-
return new Response(JSON.stringify(result), {
|
|
393
|
-
headers: { "Content-Type": "application/json" }
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
|
-
};
|
|
397
|
-
if (framework === "remix")
|
|
398
|
-
return {
|
|
399
|
-
loader: async ({ request }) => {
|
|
400
|
-
const result = await handlerLogic({ req: request });
|
|
401
|
-
return new Response(JSON.stringify(result), {
|
|
402
|
-
headers: { "Content-Type": "application/json" }
|
|
403
|
-
});
|
|
404
|
-
}
|
|
405
|
-
};
|
|
406
|
-
if (framework === "astro")
|
|
407
|
-
return {
|
|
408
|
-
get: async ({ request }) => {
|
|
409
|
-
const result = await handlerLogic({ req: request });
|
|
410
|
-
return {
|
|
411
|
-
body: JSON.stringify(result),
|
|
412
|
-
headers: { "Content-Type": "application/json" }
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
};
|
|
416
|
-
throw new Error(`Unsupported framework: ${framework}`);
|
|
417
|
-
};
|
|
418
|
-
async function fetchHubSpotData({ token }) {
|
|
419
|
-
try {
|
|
420
|
-
const apiResponse = await fetch("https://api.hubapi.com/marketing/v3/forms/?limit=9999", {
|
|
421
|
-
headers: {
|
|
422
|
-
Authorization: `Bearer ${token}`
|
|
423
|
-
}
|
|
424
|
-
});
|
|
425
|
-
if (!apiResponse.ok)
|
|
426
|
-
return console.error(`Failed to fetch data: ${apiResponse.statusText}`), null;
|
|
427
|
-
const { results } = await apiResponse.json();
|
|
428
|
-
return results.map((result) => ({
|
|
429
|
-
...result,
|
|
430
|
-
value: result.id
|
|
431
|
-
}));
|
|
432
|
-
} catch (e) {
|
|
433
|
-
return console.error(e), null;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
const hubSpotHandler = ({ token }) => createHandler(() => fetchHubSpotData({ token })), Option = (option) => /* @__PURE__ */ jsxs(Card, { "data-as": "button", padding: 3, radius: 2, tone: "inherit", children: [
|
|
437
|
-
/* @__PURE__ */ jsx(Text, { size: 2, textOverflow: "ellipsis", children: `${option.form.header.text ? `${option.form.header.text} - ` : ""}${option.value}` }),
|
|
438
|
-
/* @__PURE__ */ jsx(Card, { paddingTop: 2, tone: "inherit", style: { background: "inherit" }, children: /* @__PURE__ */ jsx(Text, { size: 1, textOverflow: "ellipsis", children: `${option.list.name} - ${option.list.stats.member_count} member${option.list.stats.member_count == 1 ? "" : "s"}` }) })
|
|
439
|
-
] }), mailchimpInput = definePlugin((options) => ({
|
|
440
|
-
name: "sanity-plugin-form-toolkit_mailchimp-input",
|
|
441
|
-
plugins: [
|
|
442
|
-
asyncList({
|
|
443
|
-
schemaType: "mailchimpForm",
|
|
444
|
-
loader: async () => await (await fetch(options.url)).json(),
|
|
445
|
-
autocompleteProps: {
|
|
446
|
-
//@ts-expect-error incorrect typing on props?
|
|
447
|
-
renderOption: (option) => Option(option)
|
|
448
|
-
}
|
|
449
|
-
})
|
|
450
|
-
]
|
|
451
339
|
}));
|
|
452
|
-
async function fetchMailchimpData({
|
|
453
|
-
key,
|
|
454
|
-
server
|
|
455
|
-
}) {
|
|
456
|
-
mailchimp.setConfig({
|
|
457
|
-
apiKey: key,
|
|
458
|
-
server
|
|
459
|
-
});
|
|
460
|
-
const signupForms = [], { lists } = await mailchimp.lists.getAllLists();
|
|
461
|
-
for (const list of lists) {
|
|
462
|
-
const { signup_forms } = await mailchimp.lists.getListSignupForms(list.id);
|
|
463
|
-
for (const form of signup_forms)
|
|
464
|
-
signupForms.push({
|
|
465
|
-
list,
|
|
466
|
-
form,
|
|
467
|
-
value: form.signup_form_url
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
return signupForms;
|
|
471
|
-
}
|
|
472
|
-
const mailchimpHandler = (keys) => createHandler(() => fetchMailchimpData(keys));
|
|
473
340
|
export {
|
|
474
341
|
FormRenderer,
|
|
475
|
-
|
|
476
|
-
fetchMailchimpData,
|
|
477
|
-
formSchema,
|
|
478
|
-
hubSpotHandler,
|
|
479
|
-
hubSpotInput,
|
|
480
|
-
mailchimpHandler,
|
|
481
|
-
mailchimpInput
|
|
342
|
+
formSchema
|
|
482
343
|
};
|
|
483
344
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/form-schema/components/default-field.tsx","../../src/form-schema/components/form-renderer.tsx","../../src/form-schema/schema-types/form.ts","../../src/form-schema/schema-types/form-field.ts","../../src/form-schema/schema-types/index.ts","../../src/form-schema/index.ts"],"sourcesContent":["import type {ChangeEvent, FC, LegacyRef} from 'react'\n\nimport type {FieldComponentProps} from './types'\n\nexport const DefaultField: FC<FieldComponentProps> = ({field, fieldState, error}) => {\n const {type, label, name, options = {}, choices = []} = field\n if (!type || !name) return null\n\n const {value, onChange, onBlur, ref} = fieldState\n\n const handleChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>,\n ) => {\n onChange(e.target.value)\n }\n\n const handleCheckboxChange = (e: ChangeEvent<HTMLInputElement>, choiceValue: string) => {\n if (Array.isArray(value)) {\n const newValue = e.target.checked\n ? [...value, choiceValue]\n : value.filter((v: string) => v !== choiceValue)\n onChange(newValue)\n } else {\n onChange(e.target.checked ? choiceValue : '')\n }\n }\n\n const renderInput = () => {\n switch (type) {\n case 'submit':\n return <button type=\"submit\">{label || 'Submit'}</button>\n case 'textarea':\n return (\n <textarea\n ref={ref as LegacyRef<HTMLTextAreaElement>}\n name={name}\n value={value ?? ''}\n onChange={handleChange}\n onBlur={onBlur}\n placeholder={options.placeholder}\n />\n )\n\n case 'select':\n return (\n <select\n ref={ref as LegacyRef<HTMLSelectElement>}\n name={name}\n value={value ?? ''}\n onChange={handleChange}\n onBlur={onBlur}\n >\n {choices?.map((choice, i) => (\n <option key={i} value={choice.value}>\n {choice.label}\n </option>\n ))}\n </select>\n )\n\n case 'radio':\n return choices?.map((choice, i) => (\n <label key={i}>\n <input\n type=\"radio\"\n name={name}\n ref={ref as LegacyRef<HTMLInputElement>}\n value={choice.value}\n checked={value === choice.value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n {choice.label}\n </label>\n ))\n\n case 'checkbox':\n return choices?.map((choice, i) => (\n <label key={i}>\n <input\n type=\"checkbox\"\n name={name}\n ref={ref as LegacyRef<HTMLInputElement>}\n value={choice.value}\n checked={Array.isArray(value) ? value.includes(choice.value) : value === choice.value}\n onChange={(e) => handleCheckboxChange(e, choice.value)}\n onBlur={onBlur}\n />\n {choice.label}\n </label>\n ))\n\n default:\n return (\n <input\n type={type}\n ref={ref as LegacyRef<HTMLInputElement>}\n name={name}\n value={value ?? options.defaultValue ?? ''}\n onChange={handleChange}\n onBlur={onBlur}\n placeholder={options.placeholder}\n />\n )\n }\n }\n\n return (\n <>\n {label && !['hidden', 'submit'].includes(type) && <label htmlFor={name}>{label}</label>}\n {renderInput()}\n {error && <span className=\"error\">{error}</span>}\n </>\n )\n}\n","import type {ComponentType, FC, HTMLProps} from 'react'\n\nimport {DefaultField} from './default-field'\nimport type {FieldComponentProps, FieldState, FormDataProps, FormField} from './types'\n\ninterface FormRendererProps extends HTMLProps<HTMLFormElement> {\n formData?: FormDataProps\n // Function to get field state for a given field name\n getFieldState?: (fieldName: string) => FieldState\n // Function to get field error for a given field name\n getFieldError?: (fieldName: string) => string | undefined\n // Override default field components\n fieldComponents?: Record<string, ComponentType<FieldComponentProps>>\n}\n\nexport const FormRenderer: FC<FormRendererProps> = (props) => {\n const {\n formData,\n getFieldState = (name) => ({\n value: undefined,\n onChange: () => {},\n name, // Pass name to field for native form handling\n }),\n getFieldError,\n fieldComponents = {},\n children,\n } = props\n const renderField = (field: FormField) => {\n const CustomComponent = fieldComponents[field.type]\n const fieldState = getFieldState(field.name)\n const error = getFieldError?.(field.name)\n\n if (CustomComponent) {\n return <CustomComponent field={field} fieldState={fieldState} error={error} />\n }\n\n return <DefaultField field={field} fieldState={fieldState} error={error} />\n }\n const elProps = Object.assign({}, props)\n delete elProps.formData\n delete elProps.getFieldState\n delete elProps.getFieldError\n delete elProps.fieldComponents\n\n return (\n <form {...elProps} id={elProps.id ?? formData?.id?.current}>\n {formData?.fields?.map((field) => (\n <div key={field._key} className=\"form-field\">\n {renderField(field)}\n </div>\n ))}\n\n {children}\n\n {renderField({\n type: 'submit',\n name: 'submit',\n label: formData?.submitButton?.text || 'Submit',\n })}\n </form>\n )\n}\n","import {FaWpforms} from 'react-icons/fa'\nimport {defineField, defineType} from 'sanity'\n\nexport const formType = defineType({\n name: 'form',\n title: 'Form',\n type: 'document',\n icon: FaWpforms,\n fields: [\n defineField({\n name: 'title',\n title: 'Form Title',\n type: 'string',\n description: 'Internal title for the form',\n validation: (Rule) => Rule.required(),\n }),\n defineField({\n name: 'id',\n title: 'Form ID',\n type: 'slug',\n options: {\n source: 'title',\n },\n // validation: (Rule) => Rule.required(),\n }),\n defineField({\n name: 'fields',\n title: 'Form Fields',\n type: 'array',\n of: [{type: 'formField'}],\n }),\n defineField({\n name: 'submitButton',\n title: 'Submit Button',\n type: 'object',\n fields: [\n defineField({\n name: 'text',\n title: 'Button Text',\n type: 'string',\n initialValue: 'Submit',\n }),\n // defineField({\n // name: 'position',\n // title: 'Button Position',\n // type: 'string',\n // options: {\n // list: ['left', 'center', 'right'],\n // },\n // initialValue: 'center',\n // }),\n ],\n }),\n ],\n})\n","import {LuTextCursorInput} from 'react-icons/lu'\nimport {defineField, defineType} from 'sanity'\n\ninterface ValidationContextDocument {\n fields?: Array<{\n name: string\n type?: string\n }>\n}\n// Validation options by field type\nexport const validationTypesByFieldType = {\n checkbox: ['minSelectedCount', 'maxSelectedCount', 'custom'],\n color: ['custom'],\n date: ['minDate', 'maxDate', 'custom'],\n 'datetime-local': ['minDate', 'maxDate', 'custom'],\n email: ['pattern', 'custom'],\n file: ['maxSize', 'fileType', 'custom'],\n hidden: ['custom'],\n number: ['min', 'max', 'custom'],\n // password: ['minLength', 'pattern', 'custom'],\n radio: ['custom'],\n range: ['min', 'max', 'step', 'custom'],\n select: ['custom'],\n tel: ['pattern', 'custom'],\n text: ['minLength', 'maxLength', 'pattern', 'custom'],\n textarea: ['minLength', 'maxLength', 'custom'],\n time: ['custom'],\n url: ['pattern', 'custom'],\n}\nexport const formFieldType = defineType({\n name: 'formField',\n title: 'Form Field',\n type: 'object',\n icon: LuTextCursorInput,\n fields: [\n defineField({\n name: 'type',\n title: 'Field Type',\n type: 'string',\n options: {\n list: Object.keys(validationTypesByFieldType).map((type) => {\n const title = (fieldType: string) => {\n switch (fieldType) {\n case 'datetime-local':\n return 'Date & Time'\n case 'textarea':\n return 'Text Area'\n case 'tel':\n return 'Phone Number'\n default:\n return fieldType.charAt(0).toUpperCase() + fieldType.slice(1)\n }\n }\n return {title: title(type), value: type}\n }),\n },\n }),\n defineField({\n name: 'label',\n title: 'Field Label',\n type: 'string',\n }),\n defineField({\n name: 'name',\n title: 'Field Name',\n type: 'string',\n description:\n 'Must start with a letter and contain only letters, numbers, underscores, or hyphens. Must be unique within the form.',\n validation: (Rule) =>\n Rule.required().custom((name, context) => {\n if (!name) {\n return 'Required'\n }\n // Check format (HTML ID/name rules)\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {\n return 'Field name must start with a letter and contain only letters, numbers, underscores, or hyphens'\n }\n\n // Check uniqueness across all fields\n const doc = context.document as ValidationContextDocument\n const allFieldNames = doc?.fields?.map((field) => field.name) || []\n\n // Count occurrences of this name\n const nameCount = allFieldNames.filter((n) => n === name).length\n\n // If we find more than one occurrence (including current field), it's not unique\n if (nameCount > 1) {\n return 'Field name must be unique across all form fields'\n }\n\n // Check for reserved HTML form attributes\n const reservedNames = [\n 'action',\n 'method',\n 'target',\n 'enctype',\n 'accept-charset',\n 'autocomplete',\n 'novalidate',\n 'rel',\n 'submit',\n 'reset',\n ]\n if (reservedNames.includes(name.toLowerCase())) {\n return 'This name is reserved for HTML form attributes. Please choose a different name.'\n }\n\n return true\n }),\n }),\n defineField({\n name: 'required',\n title: 'Required',\n type: 'boolean',\n initialValue: false,\n }),\n // defineField({\n // name: 'validation',\n // title: 'Validation Rules',\n // type: 'array',\n // of: [\n // {\n // type: 'object',\n // fields: [\n // defineField({\n // name: 'type',\n // title: 'Validation Type',\n // type: 'string',\n\n // hidden: ({parent}) => !parent?.type,\n // options: {\n // // TODO: I think this needs to be a custom input component?\n // // list: ({parent}) => (parent?.type ? validationTypesByFieldType[parent.type] : []),\n // list: [],\n // },\n // }),\n // defineField({\n // name: 'value',\n // title: 'Value',\n // type: 'string',\n // }),\n // defineField({\n // name: 'message',\n // title: 'Error Message',\n // type: 'string',\n // }),\n // ],\n // },\n // ],\n // }),\n defineField({\n name: 'choices',\n title: 'Choices',\n type: 'array',\n hidden: ({parent}) => {\n return !['select', 'radio', 'checkbox'].includes(parent?.type)\n },\n of: [\n {\n type: 'object',\n fields: [\n defineField({\n name: 'label',\n title: 'Label',\n type: 'string',\n }),\n defineField({\n name: 'value',\n title: 'Value',\n type: 'string',\n }),\n ],\n },\n ],\n }),\n defineField({\n name: 'options',\n title: 'Field Options',\n type: 'object',\n hidden: ({parent}) => {\n return ['select', 'radio', 'checkbox', 'file'].includes(parent?.type)\n },\n fields: [\n defineField({\n name: 'placeholder',\n title: 'Placeholder',\n type: 'string',\n }),\n defineField({\n name: 'defaultValue',\n title: 'Default Value',\n type: 'string',\n }),\n ],\n }),\n ],\n preview: {\n select: {\n label: 'label',\n name: 'name',\n type: 'type',\n },\n prepare({label, name, type}) {\n return {\n title: label || name,\n subtitle: type,\n }\n },\n },\n})\n","import type {SchemaTypeDefinition} from 'sanity'\n\nimport {formType} from './form'\nimport {formFieldType} from './form-field'\n\nexport const schema: {types: SchemaTypeDefinition[]} = {\n types: [formType, formFieldType],\n}\n","import {definePlugin} from 'sanity'\n\n// import {structureTool} from 'sanity/structure'\nimport {FormRenderer} from './components/form-renderer'\nimport {schema} from './schema-types'\n// import {defaultDocumentNode} from './structure'\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {formSchema} from '@sanity/form-toolkit'\n *\n * export default defineConfig({\n * // ...\n * plugins: [formSchema()],\n * })\n * ```\n */\nexport type {FormDataProps} from './components/types'\nexport {FormRenderer}\nexport const formSchema = definePlugin(() => {\n return {\n name: 'form-toolkit_form-schema',\n schema,\n // plugins: [structureTool({defaultDocumentNode})],\n }\n})\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {Plugin as Plugin_2} from 'sanity'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Usage in `sanity.config.ts` (or .js)
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import {defineConfig} from 'sanity'
|
|
8
|
+
* import {formiumInput} from 'sanity-plugin-form-toolkit'
|
|
9
|
+
*
|
|
10
|
+
* export default defineConfig({
|
|
11
|
+
* // ...
|
|
12
|
+
* plugins: [formiumInput()],
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const formiumInput: Plugin_2<void | FormiumInputConfig>
|
|
17
|
+
|
|
18
|
+
declare interface FormiumInputConfig {}
|
|
19
|
+
|
|
20
|
+
export {}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {Plugin as Plugin_2} from 'sanity'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Usage in `sanity.config.ts` (or .js)
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import {defineConfig} from 'sanity'
|
|
8
|
+
* import {formiumInput} from 'sanity-plugin-form-toolkit'
|
|
9
|
+
*
|
|
10
|
+
* export default defineConfig({
|
|
11
|
+
* // ...
|
|
12
|
+
* plugins: [formiumInput()],
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const formiumInput: Plugin_2<void | FormiumInputConfig>
|
|
17
|
+
|
|
18
|
+
declare interface FormiumInputConfig {}
|
|
19
|
+
|
|
20
|
+
export {}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
+
var client = require("@formium/client"), sanityPluginAsyncList = require("@sanity/sanity-plugin-async-list"), sanity = require("sanity");
|
|
4
|
+
const formiumInput = sanity.definePlugin(() => ({
|
|
5
|
+
name: "sanity-plugin-form-toolkit_formium-input",
|
|
6
|
+
plugins: [
|
|
7
|
+
sanityPluginAsyncList.asyncList({
|
|
8
|
+
schemaType: "formiumInput",
|
|
9
|
+
secrets: {
|
|
10
|
+
keys: [
|
|
11
|
+
{ key: "projectId", title: "Project ID" },
|
|
12
|
+
{ key: "token", title: "Token" }
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
loader: async ({ secrets }) => {
|
|
16
|
+
const formium = client.createClient(secrets?.projectId || "", {
|
|
17
|
+
apiToken: secrets?.token
|
|
18
|
+
}), { data } = await formium.findForms();
|
|
19
|
+
return data && data.length ? data.map(({ name, id }) => ({
|
|
20
|
+
title: name,
|
|
21
|
+
value: id
|
|
22
|
+
})) : [];
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
]
|
|
26
|
+
}));
|
|
27
|
+
exports.formiumInput = formiumInput;
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/formium/index.ts"],"sourcesContent":["import {createClient, type Form} from '@formium/client'\nimport {asyncList} from '@sanity/sanity-plugin-async-list'\nimport {definePlugin} from 'sanity'\n\ninterface FormiumInputConfig {\n /* nothing here yet */\n}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {formiumInput} from 'sanity-plugin-form-toolkit'\n *\n * export default defineConfig({\n * // ...\n * plugins: [formiumInput()],\n * })\n * ```\n */\n// Is Formium dead? All attempts to use the API come back with an expired cert https://github.com/formium/formium/issues/77\nexport const formiumInput = definePlugin<FormiumInputConfig | void>(() => {\n return {\n name: 'sanity-plugin-form-toolkit_formium-input',\n plugins: [\n asyncList({\n schemaType: 'formiumInput',\n secrets: {\n keys: [\n {key: 'projectId', title: 'Project ID'},\n {key: 'token', title: 'Token'},\n ],\n },\n loader: async ({secrets}) => {\n const formium = createClient(secrets?.projectId || '', {\n apiToken: secrets?.token,\n })\n const {data}: {data: Form[]} = await formium.findForms()\n return data && data.length\n ? data.map(({name, id}) => {\n return {\n title: name,\n value: id,\n }\n })\n : []\n },\n }),\n ],\n }\n})\n"],"names":["definePlugin","asyncList","createClient"],"mappings":";;;AAsBa,MAAA,eAAeA,oBAAwC,OAC3D;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,IACPC,gCAAU;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,EAAC,KAAK,aAAa,OAAO,aAAY;AAAA,UACtC,EAAC,KAAK,SAAS,OAAO,QAAO;AAAA,QAAA;AAAA,MAEjC;AAAA,MACA,QAAQ,OAAO,EAAC,cAAa;AAC3B,cAAM,UAAUC,OAAA,aAAa,SAAS,aAAa,IAAI;AAAA,UACrD,UAAU,SAAS;AAAA,QACpB,CAAA,GACK,EAAC,SAAwB,MAAM,QAAQ,UAAU;AAChD,eAAA,QAAQ,KAAK,SAChB,KAAK,IAAI,CAAC,EAAC,MAAM,UACR;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT,EACD,IACD,CAAC;AAAA,MAAA;AAAA,IAER,CAAA;AAAA,EAAA;AAEL,EACD;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createClient } from "@formium/client";
|
|
2
|
+
import { asyncList } from "@sanity/sanity-plugin-async-list";
|
|
3
|
+
import { definePlugin } from "sanity";
|
|
4
|
+
const formiumInput = definePlugin(() => ({
|
|
5
|
+
name: "sanity-plugin-form-toolkit_formium-input",
|
|
6
|
+
plugins: [
|
|
7
|
+
asyncList({
|
|
8
|
+
schemaType: "formiumInput",
|
|
9
|
+
secrets: {
|
|
10
|
+
keys: [
|
|
11
|
+
{ key: "projectId", title: "Project ID" },
|
|
12
|
+
{ key: "token", title: "Token" }
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
loader: async ({ secrets }) => {
|
|
16
|
+
const formium = createClient(secrets?.projectId || "", {
|
|
17
|
+
apiToken: secrets?.token
|
|
18
|
+
}), { data } = await formium.findForms();
|
|
19
|
+
return data && data.length ? data.map(({ name, id }) => ({
|
|
20
|
+
title: name,
|
|
21
|
+
value: id
|
|
22
|
+
})) : [];
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
]
|
|
26
|
+
}));
|
|
27
|
+
export {
|
|
28
|
+
formiumInput
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/formium/index.ts"],"sourcesContent":["import {createClient, type Form} from '@formium/client'\nimport {asyncList} from '@sanity/sanity-plugin-async-list'\nimport {definePlugin} from 'sanity'\n\ninterface FormiumInputConfig {\n /* nothing here yet */\n}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {formiumInput} from 'sanity-plugin-form-toolkit'\n *\n * export default defineConfig({\n * // ...\n * plugins: [formiumInput()],\n * })\n * ```\n */\n// Is Formium dead? All attempts to use the API come back with an expired cert https://github.com/formium/formium/issues/77\nexport const formiumInput = definePlugin<FormiumInputConfig | void>(() => {\n return {\n name: 'sanity-plugin-form-toolkit_formium-input',\n plugins: [\n asyncList({\n schemaType: 'formiumInput',\n secrets: {\n keys: [\n {key: 'projectId', title: 'Project ID'},\n {key: 'token', title: 'Token'},\n ],\n },\n loader: async ({secrets}) => {\n const formium = createClient(secrets?.projectId || '', {\n apiToken: secrets?.token,\n })\n const {data}: {data: Form[]} = await formium.findForms()\n return data && data.length\n ? data.map(({name, id}) => {\n return {\n title: name,\n value: id,\n }\n })\n : []\n },\n }),\n ],\n }\n})\n"],"names":[],"mappings":";;;AAsBa,MAAA,eAAe,aAAwC,OAC3D;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,IACP,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,QACP,MAAM;AAAA,UACJ,EAAC,KAAK,aAAa,OAAO,aAAY;AAAA,UACtC,EAAC,KAAK,SAAS,OAAO,QAAO;AAAA,QAAA;AAAA,MAEjC;AAAA,MACA,QAAQ,OAAO,EAAC,cAAa;AAC3B,cAAM,UAAU,aAAa,SAAS,aAAa,IAAI;AAAA,UACrD,UAAU,SAAS;AAAA,QACpB,CAAA,GACK,EAAC,SAAwB,MAAM,QAAQ,UAAU;AAChD,eAAA,QAAQ,KAAK,SAChB,KAAK,IAAI,CAAC,EAAC,MAAM,UACR;AAAA,UACL,OAAO;AAAA,UACP,OAAO;AAAA,QACT,EACD,IACD,CAAC;AAAA,MAAA;AAAA,IAER,CAAA;AAAA,EAAA;AAEL,EACD;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {EventHandler} from 'h3'
|
|
2
|
+
import {EventHandlerRequest} from 'h3'
|
|
3
|
+
import {IncomingMessage} from 'http'
|
|
4
|
+
import {Plugin as Plugin_2} from 'sanity'
|
|
5
|
+
import {ServerResponse} from 'http'
|
|
6
|
+
|
|
7
|
+
export declare function fetchHubSpotData({token}: {token: string}): Promise<MappedResult[] | null>
|
|
8
|
+
|
|
9
|
+
declare type HubSpotForm = {
|
|
10
|
+
id: string
|
|
11
|
+
name: string
|
|
12
|
+
[key: string]: unknown
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export declare const hubSpotHandler: ({token}: {token: string}) =>
|
|
16
|
+
| ((req: IncomingMessage, res: ServerResponse) => Promise<void>)
|
|
17
|
+
| EventHandler<EventHandlerRequest, Promise<unknown>>
|
|
18
|
+
| {
|
|
19
|
+
GET: ({request}: {request: Request}) => Promise<Response>
|
|
20
|
+
loader?: undefined
|
|
21
|
+
get?: undefined
|
|
22
|
+
}
|
|
23
|
+
| {
|
|
24
|
+
loader: ({request}: {request: Request}) => Promise<Response>
|
|
25
|
+
GET?: undefined
|
|
26
|
+
get?: undefined
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
get: ({request}: {request: Request}) => Promise<{
|
|
30
|
+
body: string
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': string
|
|
33
|
+
}
|
|
34
|
+
}>
|
|
35
|
+
GET?: undefined
|
|
36
|
+
loader?: undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare const hubSpotInput: Plugin_2<HubSpotInputConfig>
|
|
40
|
+
|
|
41
|
+
declare interface HubSpotInputConfig {
|
|
42
|
+
url: string | URL
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare type MappedResult = HubSpotForm & {
|
|
46
|
+
value: string
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export {}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {EventHandler} from 'h3'
|
|
2
|
+
import {EventHandlerRequest} from 'h3'
|
|
3
|
+
import {IncomingMessage} from 'http'
|
|
4
|
+
import {Plugin as Plugin_2} from 'sanity'
|
|
5
|
+
import {ServerResponse} from 'http'
|
|
6
|
+
|
|
7
|
+
export declare function fetchHubSpotData({token}: {token: string}): Promise<MappedResult[] | null>
|
|
8
|
+
|
|
9
|
+
declare type HubSpotForm = {
|
|
10
|
+
id: string
|
|
11
|
+
name: string
|
|
12
|
+
[key: string]: unknown
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export declare const hubSpotHandler: ({token}: {token: string}) =>
|
|
16
|
+
| ((req: IncomingMessage, res: ServerResponse) => Promise<void>)
|
|
17
|
+
| EventHandler<EventHandlerRequest, Promise<unknown>>
|
|
18
|
+
| {
|
|
19
|
+
GET: ({request}: {request: Request}) => Promise<Response>
|
|
20
|
+
loader?: undefined
|
|
21
|
+
get?: undefined
|
|
22
|
+
}
|
|
23
|
+
| {
|
|
24
|
+
loader: ({request}: {request: Request}) => Promise<Response>
|
|
25
|
+
GET?: undefined
|
|
26
|
+
get?: undefined
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
get: ({request}: {request: Request}) => Promise<{
|
|
30
|
+
body: string
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': string
|
|
33
|
+
}
|
|
34
|
+
}>
|
|
35
|
+
GET?: undefined
|
|
36
|
+
loader?: undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare const hubSpotInput: Plugin_2<HubSpotInputConfig>
|
|
40
|
+
|
|
41
|
+
declare interface HubSpotInputConfig {
|
|
42
|
+
url: string | URL
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare type MappedResult = HubSpotForm & {
|
|
46
|
+
value: string
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export {}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
+
var sanityPluginAsyncList = require("@sanity/sanity-plugin-async-list"), sanity = require("sanity"), jsxRuntime = require("react/jsx-runtime"), ui = require("@sanity/ui"), createHandler = require("../_chunks-cjs/create-handler.js");
|
|
4
|
+
const Option = (option) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Card, { "data-as": "button", padding: 3, radius: 2, tone: "inherit", children: [
|
|
5
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 2, textOverflow: "ellipsis", children: option.name }),
|
|
6
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Card, { paddingTop: 2, tone: "inherit", style: { background: "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 1, textOverflow: "ellipsis", children: `ID: ${option.value}` }) })
|
|
7
|
+
] });
|
|
8
|
+
async function fetchHubSpotData({ token }) {
|
|
9
|
+
try {
|
|
10
|
+
const apiResponse = await fetch("https://api.hubapi.com/marketing/v3/forms/?limit=9999", {
|
|
11
|
+
headers: {
|
|
12
|
+
Authorization: `Bearer ${token}`
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
if (!apiResponse.ok)
|
|
16
|
+
return console.error(`Failed to fetch data: ${apiResponse.statusText}`), null;
|
|
17
|
+
const { results } = await apiResponse.json();
|
|
18
|
+
return results.map((result) => ({
|
|
19
|
+
...result,
|
|
20
|
+
value: result.id
|
|
21
|
+
}));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return console.error(e), null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const hubSpotHandler = ({ token }) => createHandler.createHandler(() => fetchHubSpotData({ token })), hubSpotInput = sanity.definePlugin((options) => ({
|
|
27
|
+
name: "sanity-plugin-form-toolkit_hubspot-input",
|
|
28
|
+
plugins: [
|
|
29
|
+
sanityPluginAsyncList.asyncList({
|
|
30
|
+
schemaType: "hubSpotForm",
|
|
31
|
+
loader: async () => await (await fetch(options.url)).json(),
|
|
32
|
+
autocompleteProps: {
|
|
33
|
+
renderOption: (option) => Option(option),
|
|
34
|
+
renderValue(value, option) {
|
|
35
|
+
return option?.name ?? value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
]
|
|
40
|
+
}));
|
|
41
|
+
exports.fetchHubSpotData = fetchHubSpotData;
|
|
42
|
+
exports.hubSpotHandler = hubSpotHandler;
|
|
43
|
+
exports.hubSpotInput = hubSpotInput;
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/hubspot/components/option.tsx","../../src/hubspot/fetch-hubspot-data.ts","../../src/hubspot/create-handler.ts","../../src/hubspot/index.ts"],"sourcesContent":["import {Card, Text} from '@sanity/ui'\nimport type {ReactElement} from 'react'\n\nexport const Option = (option: {value: string; name: string}): ReactElement => {\n return (\n <Card data-as=\"button\" padding={3} radius={2} tone=\"inherit\">\n <Text size={2} textOverflow=\"ellipsis\">\n {option.name}\n </Text>\n <Card paddingTop={2} tone=\"inherit\" style={{background: 'inherit'}}>\n <Text size={1} textOverflow=\"ellipsis\">\n {`ID: ${option.value}`}\n </Text>\n </Card>\n </Card>\n )\n}\n","type HubSpotForm = {\n id: string\n name: string\n [key: string]: unknown // Additional properties from the API response\n}\n\ntype MappedResult = HubSpotForm & {\n value: string\n}\nexport async function fetchHubSpotData({token}: {token: string}): Promise<MappedResult[] | null> {\n try {\n const apiResponse = await fetch('https://api.hubapi.com/marketing/v3/forms/?limit=9999', {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n\n if (!apiResponse.ok) {\n console.error(`Failed to fetch data: ${apiResponse.statusText}`)\n return null\n }\n\n const {results}: {results: HubSpotForm[]} = await apiResponse.json()\n\n return results.map((result) => ({\n ...result,\n value: result.id,\n }))\n } catch (e: unknown) {\n console.error(e)\n return null // Explicitly return null on error\n }\n}\n","import createHandler from '../shared/create-handler'\nimport {fetchHubSpotData} from './fetch-hubspot-data'\n\nexport const hubSpotHandler = ({token}: {token: string}) => {\n return createHandler(() => fetchHubSpotData({token}))\n}\n","import {asyncList} from '@sanity/sanity-plugin-async-list'\nimport {definePlugin} from 'sanity'\n\nimport {Option} from './components/option'\nimport {hubSpotHandler} from './create-handler'\nimport {fetchHubSpotData} from './fetch-hubspot-data'\ninterface HubSpotInputConfig {\n url: string | URL\n}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {hubSpotInput} from '@sanity/form-toolkit/hubspot'\n *\n * export default defineConfig({\n * // ...\n * plugins: [\n * hubSpotInput({\n * url: 'http://localhost:3000/api/hubspot'\n * })\n * ],\n * })\n * ```\n */\n\ntype ExtendedOption = {value: string; name: string}\nexport {fetchHubSpotData, hubSpotHandler}\nexport const hubSpotInput = definePlugin<HubSpotInputConfig>((options) => {\n return {\n name: 'sanity-plugin-form-toolkit_hubspot-input',\n plugins: [\n asyncList({\n schemaType: 'hubSpotForm',\n loader: async () => {\n const data = await fetch(options.url)\n const body = await data.json()\n return body\n },\n autocompleteProps: {\n renderOption: (option) => Option(option as ExtendedOption),\n renderValue(value, option) {\n // @ts-expect-error can't extend default type?\n return option?.name ?? value\n },\n },\n }),\n ],\n }\n})\n"],"names":["jsxs","Card","jsx","Text","createHandler","definePlugin","asyncList"],"mappings":";;;AAGO,MAAM,SAAS,CAAC,WAEnBA,2BAAA,KAACC,GAAK,MAAA,EAAA,WAAQ,UAAS,SAAS,GAAG,QAAQ,GAAG,MAAK,WACjD,UAAA;AAAA,EAAAC,+BAACC,GAAAA,QAAK,MAAM,GAAG,cAAa,YACzB,iBAAO,MACV;AAAA,EACAD,2BAAAA,IAACD,WAAK,YAAY,GAAG,MAAK,WAAU,OAAO,EAAC,YAAY,UAAA,GACtD,UAACC,2BAAAA,IAAAC,GAAA,MAAA,EAAK,MAAM,GAAG,cAAa,YACzB,UAAO,OAAA,OAAO,KAAK,GACtB,CAAA,EACF,CAAA;AAAA,GACF;ACLkB,eAAA,iBAAiB,EAAC,SAAyD;AAC3F,MAAA;AACI,UAAA,cAAc,MAAM,MAAM,yDAAyD;AAAA,MACvF,SAAS;AAAA,QACP,eAAe,UAAU,KAAK;AAAA,MAAA;AAAA,IAChC,CACD;AAED,QAAI,CAAC,YAAY;AACf,aAAA,QAAQ,MAAM,yBAAyB,YAAY,UAAU,EAAE,GACxD;AAGT,UAAM,EAAC,QAAA,IAAqC,MAAM,YAAY,KAAK;AAE5D,WAAA,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9B,GAAG;AAAA,MACH,OAAO,OAAO;AAAA,IAAA,EACd;AAAA,WACK,GAAY;AACX,WAAA,QAAA,MAAM,CAAC,GACR;AAAA,EAAA;AAEX;AC7Ba,MAAA,iBAAiB,CAAC,EAAC,MAAK,MAC5BC,cAAc,cAAA,MAAM,iBAAiB,EAAC,OAAM,CAAC,GC0BzC,eAAeC,OAAAA,aAAiC,CAAC,aACrD;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,IACPC,gCAAU;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ,YAEO,OADA,MAAM,MAAM,QAAQ,GAAG,GACZ,KAAK;AAAA,MAG/B,mBAAmB;AAAA,QACjB,cAAc,CAAC,WAAW,OAAO,MAAwB;AAAA,QACzD,YAAY,OAAO,QAAQ;AAEzB,iBAAO,QAAQ,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IAEH,CAAA;AAAA,EAAA;AAEL,EACD;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { asyncList } from "@sanity/sanity-plugin-async-list";
|
|
2
|
+
import { definePlugin } from "sanity";
|
|
3
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Card, Text } from "@sanity/ui";
|
|
5
|
+
import { createHandler } from "../_chunks-es/create-handler.mjs";
|
|
6
|
+
const Option = (option) => /* @__PURE__ */ jsxs(Card, { "data-as": "button", padding: 3, radius: 2, tone: "inherit", children: [
|
|
7
|
+
/* @__PURE__ */ jsx(Text, { size: 2, textOverflow: "ellipsis", children: option.name }),
|
|
8
|
+
/* @__PURE__ */ jsx(Card, { paddingTop: 2, tone: "inherit", style: { background: "inherit" }, children: /* @__PURE__ */ jsx(Text, { size: 1, textOverflow: "ellipsis", children: `ID: ${option.value}` }) })
|
|
9
|
+
] });
|
|
10
|
+
async function fetchHubSpotData({ token }) {
|
|
11
|
+
try {
|
|
12
|
+
const apiResponse = await fetch("https://api.hubapi.com/marketing/v3/forms/?limit=9999", {
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${token}`
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
if (!apiResponse.ok)
|
|
18
|
+
return console.error(`Failed to fetch data: ${apiResponse.statusText}`), null;
|
|
19
|
+
const { results } = await apiResponse.json();
|
|
20
|
+
return results.map((result) => ({
|
|
21
|
+
...result,
|
|
22
|
+
value: result.id
|
|
23
|
+
}));
|
|
24
|
+
} catch (e) {
|
|
25
|
+
return console.error(e), null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const hubSpotHandler = ({ token }) => createHandler(() => fetchHubSpotData({ token })), hubSpotInput = definePlugin((options) => ({
|
|
29
|
+
name: "sanity-plugin-form-toolkit_hubspot-input",
|
|
30
|
+
plugins: [
|
|
31
|
+
asyncList({
|
|
32
|
+
schemaType: "hubSpotForm",
|
|
33
|
+
loader: async () => await (await fetch(options.url)).json(),
|
|
34
|
+
autocompleteProps: {
|
|
35
|
+
renderOption: (option) => Option(option),
|
|
36
|
+
renderValue(value, option) {
|
|
37
|
+
return option?.name ?? value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
]
|
|
42
|
+
}));
|
|
43
|
+
export {
|
|
44
|
+
fetchHubSpotData,
|
|
45
|
+
hubSpotHandler,
|
|
46
|
+
hubSpotInput
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/hubspot/components/option.tsx","../../src/hubspot/fetch-hubspot-data.ts","../../src/hubspot/create-handler.ts","../../src/hubspot/index.ts"],"sourcesContent":["import {Card, Text} from '@sanity/ui'\nimport type {ReactElement} from 'react'\n\nexport const Option = (option: {value: string; name: string}): ReactElement => {\n return (\n <Card data-as=\"button\" padding={3} radius={2} tone=\"inherit\">\n <Text size={2} textOverflow=\"ellipsis\">\n {option.name}\n </Text>\n <Card paddingTop={2} tone=\"inherit\" style={{background: 'inherit'}}>\n <Text size={1} textOverflow=\"ellipsis\">\n {`ID: ${option.value}`}\n </Text>\n </Card>\n </Card>\n )\n}\n","type HubSpotForm = {\n id: string\n name: string\n [key: string]: unknown // Additional properties from the API response\n}\n\ntype MappedResult = HubSpotForm & {\n value: string\n}\nexport async function fetchHubSpotData({token}: {token: string}): Promise<MappedResult[] | null> {\n try {\n const apiResponse = await fetch('https://api.hubapi.com/marketing/v3/forms/?limit=9999', {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n\n if (!apiResponse.ok) {\n console.error(`Failed to fetch data: ${apiResponse.statusText}`)\n return null\n }\n\n const {results}: {results: HubSpotForm[]} = await apiResponse.json()\n\n return results.map((result) => ({\n ...result,\n value: result.id,\n }))\n } catch (e: unknown) {\n console.error(e)\n return null // Explicitly return null on error\n }\n}\n","import createHandler from '../shared/create-handler'\nimport {fetchHubSpotData} from './fetch-hubspot-data'\n\nexport const hubSpotHandler = ({token}: {token: string}) => {\n return createHandler(() => fetchHubSpotData({token}))\n}\n","import {asyncList} from '@sanity/sanity-plugin-async-list'\nimport {definePlugin} from 'sanity'\n\nimport {Option} from './components/option'\nimport {hubSpotHandler} from './create-handler'\nimport {fetchHubSpotData} from './fetch-hubspot-data'\ninterface HubSpotInputConfig {\n url: string | URL\n}\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {hubSpotInput} from '@sanity/form-toolkit/hubspot'\n *\n * export default defineConfig({\n * // ...\n * plugins: [\n * hubSpotInput({\n * url: 'http://localhost:3000/api/hubspot'\n * })\n * ],\n * })\n * ```\n */\n\ntype ExtendedOption = {value: string; name: string}\nexport {fetchHubSpotData, hubSpotHandler}\nexport const hubSpotInput = definePlugin<HubSpotInputConfig>((options) => {\n return {\n name: 'sanity-plugin-form-toolkit_hubspot-input',\n plugins: [\n asyncList({\n schemaType: 'hubSpotForm',\n loader: async () => {\n const data = await fetch(options.url)\n const body = await data.json()\n return body\n },\n autocompleteProps: {\n renderOption: (option) => Option(option as ExtendedOption),\n renderValue(value, option) {\n // @ts-expect-error can't extend default type?\n return option?.name ?? value\n },\n },\n }),\n ],\n }\n})\n"],"names":[],"mappings":";;;;;AAGO,MAAM,SAAS,CAAC,WAEnB,qBAAC,MAAK,EAAA,WAAQ,UAAS,SAAS,GAAG,QAAQ,GAAG,MAAK,WACjD,UAAA;AAAA,EAAA,oBAAC,QAAK,MAAM,GAAG,cAAa,YACzB,iBAAO,MACV;AAAA,EACA,oBAAC,QAAK,YAAY,GAAG,MAAK,WAAU,OAAO,EAAC,YAAY,UAAA,GACtD,UAAC,oBAAA,MAAA,EAAK,MAAM,GAAG,cAAa,YACzB,UAAO,OAAA,OAAO,KAAK,GACtB,CAAA,EACF,CAAA;AAAA,GACF;ACLkB,eAAA,iBAAiB,EAAC,SAAyD;AAC3F,MAAA;AACI,UAAA,cAAc,MAAM,MAAM,yDAAyD;AAAA,MACvF,SAAS;AAAA,QACP,eAAe,UAAU,KAAK;AAAA,MAAA;AAAA,IAChC,CACD;AAED,QAAI,CAAC,YAAY;AACf,aAAA,QAAQ,MAAM,yBAAyB,YAAY,UAAU,EAAE,GACxD;AAGT,UAAM,EAAC,QAAA,IAAqC,MAAM,YAAY,KAAK;AAE5D,WAAA,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC9B,GAAG;AAAA,MACH,OAAO,OAAO;AAAA,IAAA,EACd;AAAA,WACK,GAAY;AACX,WAAA,QAAA,MAAM,CAAC,GACR;AAAA,EAAA;AAEX;AC7Ba,MAAA,iBAAiB,CAAC,EAAC,MAAK,MAC5B,cAAc,MAAM,iBAAiB,EAAC,OAAM,CAAC,GC0BzC,eAAe,aAAiC,CAAC,aACrD;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,IACP,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ,YAEO,OADA,MAAM,MAAM,QAAQ,GAAG,GACZ,KAAK;AAAA,MAG/B,mBAAmB;AAAA,QACjB,cAAc,CAAC,WAAW,OAAO,MAAwB;AAAA,QACzD,YAAY,OAAO,QAAQ;AAEzB,iBAAO,QAAQ,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IAEH,CAAA;AAAA,EAAA;AAEL,EACD;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {EventHandler} from 'h3'
|
|
2
|
+
import {EventHandlerRequest} from 'h3'
|
|
3
|
+
import {IncomingMessage} from 'http'
|
|
4
|
+
import {Plugin as Plugin_2} from 'sanity'
|
|
5
|
+
import {ServerResponse} from 'http'
|
|
6
|
+
|
|
7
|
+
export declare function fetchMailchimpData({
|
|
8
|
+
key,
|
|
9
|
+
server,
|
|
10
|
+
}: {
|
|
11
|
+
key: string
|
|
12
|
+
server: string
|
|
13
|
+
}): Promise<unknown>
|
|
14
|
+
|
|
15
|
+
export declare const mailchimpHandler: (keys: {key: string; server: string}) =>
|
|
16
|
+
| ((req: IncomingMessage, res: ServerResponse) => Promise<void>)
|
|
17
|
+
| EventHandler<EventHandlerRequest, Promise<unknown>>
|
|
18
|
+
| {
|
|
19
|
+
GET: ({request}: {request: Request}) => Promise<Response>
|
|
20
|
+
loader?: undefined
|
|
21
|
+
get?: undefined
|
|
22
|
+
}
|
|
23
|
+
| {
|
|
24
|
+
loader: ({request}: {request: Request}) => Promise<Response>
|
|
25
|
+
GET?: undefined
|
|
26
|
+
get?: undefined
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
get: ({request}: {request: Request}) => Promise<{
|
|
30
|
+
body: string
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-Type': string
|
|
33
|
+
}
|
|
34
|
+
}>
|
|
35
|
+
GET?: undefined
|
|
36
|
+
loader?: undefined
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare const mailchimpInput: Plugin_2<MailchimpInputConfig>
|
|
40
|
+
|
|
41
|
+
declare interface MailchimpInputConfig {
|
|
42
|
+
url: string | URL
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export {}
|