datocms-plugin-netlify-forms 0.0.7 → 0.0.8

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,8 +1,8 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.f2605287.chunk.css",
4
- "main.js": "./static/js/main.6e715e0e.chunk.js",
5
- "main.js.map": "./static/js/main.6e715e0e.chunk.js.map",
4
+ "main.js": "./static/js/main.c2cff7a8.chunk.js",
5
+ "main.js.map": "./static/js/main.c2cff7a8.chunk.js.map",
6
6
  "runtime-main.js": "./static/js/runtime-main.bfdb9e12.js",
7
7
  "runtime-main.js.map": "./static/js/runtime-main.bfdb9e12.js.map",
8
8
  "static/css/2.6844907f.chunk.css": "./static/css/2.6844907f.chunk.css",
@@ -18,6 +18,6 @@
18
18
  "static/css/2.6844907f.chunk.css",
19
19
  "static/js/2.991e9e63.chunk.js",
20
20
  "static/css/main.f2605287.chunk.css",
21
- "static/js/main.6e715e0e.chunk.js"
21
+ "static/js/main.c2cff7a8.chunk.js"
22
22
  ]
23
23
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link href="./static/css/2.6844907f.chunk.css" rel="stylesheet"><link href="./static/css/main.f2605287.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,l,f=t[0],i=t[1],a=t[2],c=0,s=[];c<f.length;c++)l=f[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(p&&p(t);s.length;)s.shift()();return u.push.apply(u,a||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,f=1;f<r.length;f++){var i=r[f];0!==o[i]&&(n=!1)}n&&(u.splice(t--,1),e=l(l.s=r[0]))}return e}var n={},o={1:0},u=[];function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="./";var f=this["webpackJsonpdatocms-plugin-netlify-forms"]=this["webpackJsonpdatocms-plugin-netlify-forms"]||[],i=f.push.bind(f);f.push=t,f=f.slice();for(var a=0;a<f.length;a++)t(f[a]);var p=i;r()}([])</script><script src="./static/js/2.991e9e63.chunk.js"></script><script src="./static/js/main.6e715e0e.chunk.js"></script></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link href="./static/css/2.6844907f.chunk.css" rel="stylesheet"><link href="./static/css/main.f2605287.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,l,f=t[0],i=t[1],a=t[2],c=0,s=[];c<f.length;c++)l=f[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(p&&p(t);s.length;)s.shift()();return u.push.apply(u,a||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,f=1;f<r.length;f++){var i=r[f];0!==o[i]&&(n=!1)}n&&(u.splice(t--,1),e=l(l.s=r[0]))}return e}var n={},o={1:0},u=[];function l(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=e,l.c=n,l.d=function(e,t,r){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(l.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)l.d(r,n,function(t){return e[t]}.bind(null,n));return r},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="./";var f=this["webpackJsonpdatocms-plugin-netlify-forms"]=this["webpackJsonpdatocms-plugin-netlify-forms"]||[],i=f.push.bind(f);f.push=t,f=f.slice();for(var a=0;a<f.length;a++)t(f[a]);var p=i;r()}([])</script><script src="./static/js/2.991e9e63.chunk.js"></script><script src="./static/js/main.c2cff7a8.chunk.js"></script></body></html>
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonpdatocms-plugin-netlify-forms"]=this["webpackJsonpdatocms-plugin-netlify-forms"]||[]).push([[0],{34:function(e,t,n){e.exports={row:"SubmissionsPage_row__17uQG",rowHeader:"SubmissionsPage_rowHeader__3GgEA"}},35:function(e,t,n){e.exports={item:"ShowSubmissionModal_item__3iBzF",itemTitle:"ShowSubmissionModal_itemTitle__3n6id"}},66:function(e,t,n){"use strict";n.r(t),n.d(t,"API_ENDPOINT",(function(){return N}));var r=n(76),s=n(0),i=n(8),c=n.n(i),a=n(2);function o(e){c.a.render(Object(a.jsx)(s.StrictMode,{children:e}),document.getElementById("root"))}var u=n(12),l=n(7),d=n.n(l),h=n(9),b=n(3),j=n(77),f=n(68),p=n(69),m=n(78),x=n(75),v=n(73),O=n(25);function g(e){var t=e.ctx,n=t.plugin.attributes.parameters,r=n.accessToken,i=Object(s.useState)([]),c=Object(b.a)(i,2),o=c[0],l=c[1];return Object(s.useEffect)((function(){var e=function(){var e=Object(h.a)(d.a.mark((function e(){var t,n;return d.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.fetch("".concat(N,"/sites/"),{method:"GET",headers:{Authorization:"Bearer ".concat(r)}});case 2:return t=e.sent,e.next=5,t.json();case 5:n=e.sent,l(n);case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();r&&e()}),[r]),Object(a.jsx)(j.a,{ctx:t,children:Object(a.jsx)(O.b,{initialValues:t.plugin.attributes.parameters,validate:function(e){var t={};return e.accessToken||(t.accessToken="This field is required!"),t},onSubmit:function(){var e=Object(h.a)(d.a.mark((function e(n){var s,i,c;return d.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.fetch("".concat(N,"/sites/"),{method:"GET",headers:{Authorization:"Bearer ".concat(n.accessToken)}});case 2:return(s=e.sent).ok||(i="An error has occured: ".concat(s.status),t.alert(i)),e.next=6,s.json();case 6:return c=e.sent,l(c),e.next=10,t.updatePluginParameters(Object(u.a)(Object(u.a)({},n),n.accessToken!==r?{site:null}:{}));case 10:t.notice("Settings updated successfully!");case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),children:function(e){var t=e.handleSubmit,s=e.submitting,i=e.dirty;return Object(a.jsxs)(f.a,{onSubmit:t,children:[Object(a.jsxs)(p.a,{children:[Object(a.jsx)(O.a,{name:"accessToken",children:function(e){var t=e.input,n=e.meta.error;return Object(a.jsx)(m.a,Object(u.a)({id:"accessToken",label:"Access token",hint:Object(a.jsxs)(a.Fragment,{children:["You can generate a"," ",Object(a.jsx)("a",{target:"_blank",rel:"noreferrer",href:"https://app.netlify.com/user/applications#personal-access-tokens",children:"personal access token"})," ","in your Netlify user settings."]}),required:!0,error:n},t))}}),o.length>0||n.site?Object(a.jsx)(O.a,{name:"site",children:function(e){var t=e.input,n=e.meta.error;return Object(a.jsx)(x.a,Object(u.a)({id:"site",label:"Site",error:n,selectInputProps:{options:o.map((function(e){return{label:e.name,value:e.site_id}}))}},t))}}):null]}),Object(a.jsx)(v.a,{type:"submit",fullWidth:!0,buttonSize:"l",buttonType:"primary",disabled:s||!i,children:r?"Save settings":"Connect"})]})}})})}n(60);var w=n(74),y=n(34),k=n.n(y);function S(e){var t=e.ctx,n=t.plugin.attributes.parameters,r=n.site,i=n.accessToken,c=Object(s.useState)([]),o=Object(b.a)(c,2),u=o[0],l=o[1],f=Object(s.useState)(!1),p=Object(b.a)(f,2),m=p[0],x=p[1];Object(s.useEffect)((function(){if(i&&r){var e=function(){var e=Object(h.a)(d.a.mark((function e(){var n,s,c;return d.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return x(!0),e.next=3,window.fetch("".concat(N,"/sites/").concat(r.value,"/submissions"),{method:"GET",headers:{Authorization:"Bearer ".concat(i)}});case 3:return(n=e.sent).ok||(s="An error has occured: ".concat(n.status),t.alert(s)),e.next=7,n.json();case 7:c=e.sent,l(c),x(!1);case 10:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();e()}}),[r,i]);var O=function(){var e=Object(h.a)(d.a.mark((function e(n){return d.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.openModal({id:"showSubmission",title:"Submission (".concat(n.id,")"),width:"l",parameters:n});case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),g=function(){var e=Object(h.a)(d.a.mark((function e(n){var r;return d.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.openConfirm({title:"Delete record?",content:"Are you sure you want to delete this record? This operation is not reversible!",choices:[{label:"Yes, delete this record",value:"negative",intent:"negative"}],cancel:{label:"Cancel",value:!1}});case 2:if(!e.sent){e.next=8;break}return e.next=6,window.fetch("".concat(N,"/submissions/").concat(n.id),{method:"DELETE",headers:{Authorization:"Bearer ".concat(i)}});case 6:(r=e.sent).ok?(l(u.filter((function(e){return e.id!==n.id}))),t.notice("Record successfully removed")):t.alert("An error has occured: ".concat(r.status));case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return Object(a.jsx)(j.a,{ctx:t,children:Object(a.jsxs)("div",{style:{paddingTop:"var(--spacing-l)",paddingLeft:"var(--spacing-xxl)",paddingRight:"var(--spacing-xxl)"},children:[Object(a.jsx)("h1",{style:{fontWeight:500},children:"Form submissions"}),m?Object(a.jsx)("div",{style:{height:"200px",position:"relative"},children:Object(a.jsx)(w.a,{size:48,placement:"centered"})}):u.length>0?Object(a.jsxs)("div",{children:[Object(a.jsxs)("div",{className:k.a.rowHeader,children:[Object(a.jsx)("div",{style:{width:"25%"},children:"Name"}),Object(a.jsx)("div",{style:{width:"25%"},children:"Form"}),Object(a.jsx)("div",{style:{width:"25%"},children:"Date"}),Object(a.jsx)("div",{style:{width:"25%"}})]}),u.map((function(e){return Object(a.jsxs)("div",{className:k.a.row,children:[Object(a.jsx)("div",{style:{width:"25%"},children:e.name}),Object(a.jsx)("div",{style:{width:"25%"},children:e.form_name}),Object(a.jsx)("div",{style:{width:"25%",flexGrow:0},children:new Intl.DateTimeFormat("en-US").format(new Date(e.created_at))}),Object(a.jsxs)("div",{style:{width:"25%",textAlign:"right"},children:[Object(a.jsx)(v.a,{buttonSize:"xs",type:"button",onClick:function(){return O(e)},style:{marginRight:"var(--spacing-m)"},children:"Show"}),Object(a.jsx)(v.a,{buttonSize:"xs",type:"reset",buttonType:"negative",onClick:function(){return g(e)},children:"Delete"})]})]},e.id)}))]}):Object(a.jsx)(a.Fragment,{children:"No form submissions found!"})]})})}var T=n(35),_=n.n(T);function A(e){var t=e.ctx,n=t.parameters.ordered_human_fields;return Object(a.jsx)(j.a,{ctx:t,children:n.length>0?n.map((function(e){return Object(a.jsxs)("div",{className:_.a.item,children:[Object(a.jsx)("div",{className:_.a.itemTitle,children:e.title}),Object(a.jsx)("div",{children:e.value})]},e.title)})):Object(a.jsx)("span",{children:"No form fields found!"})})}var N="https://api.netlify.com/api/v1";Object(r.a)({renderConfigScreen:function(e){return o(Object(a.jsx)(g,{ctx:e}))},mainNavigationTabs:function(e){return[{label:"Netlify Forms",icon:"file-signature",pointsTo:{pageId:"form-submissions"},placement:["before","settings"]}]},renderPage:function(e,t){if("form-submissions"===e)return o(Object(a.jsx)(S,{ctx:t}))},renderModal:function(e,t){if("showSubmission"===e)return o(Object(a.jsx)(A,{ctx:t}))}})}},[[66,1,2]]]);
2
+ //# sourceMappingURL=main.c2cff7a8.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["pages/SubmissionsPage.module.css","modals/ShowSubmissionModal.module.css","utils/render.tsx","entrypoints/ConfigScreen.tsx","pages/SubmissionsPage.tsx","modals/ShowSubmissionModal.tsx","index.tsx"],"names":["module","exports","render","component","ReactDOM","document","getElementById","ConfigScreen","ctx","parameters","plugin","attributes","accessToken","useState","sites","setSites","useEffect","fetchSites","a","window","fetch","API_ENDPOINT","method","headers","Authorization","response","json","Canvas","initialValues","validate","values","errors","onSubmit","ok","message","status","alert","updatePluginParameters","site","notice","handleSubmit","submitting","dirty","Form","FieldGroup","name","input","error","meta","TextField","id","label","hint","target","rel","href","required","length","SelectField","selectInputProps","options","map","value","site_id","Button","type","fullWidth","buttonSize","buttonType","disabled","SubmissionsPage","submissions","setSubmissions","loading","setLoading","getSubmissions","forms","handleShowSubmissionModal","submission","openModal","title","width","handleOpenDeleteSubmissonModal","openConfirm","content","choices","intent","cancel","filter","item","style","paddingTop","paddingLeft","paddingRight","fontWeight","height","position","Spinner","size","placement","className","styles","rowHeader","row","form_name","flexGrow","Intl","DateTimeFormat","format","Date","created_at","textAlign","onClick","marginRight","ShowSubmissionModal","fields","ordered_human_fields","itemTitle","connect","renderConfigScreen","mainNavigationTabs","icon","pointsTo","pageId","renderPage","renderModal","modalId"],"mappings":"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","file":"static/js/main.c2cff7a8.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"row\":\"SubmissionsPage_row__17uQG\",\"rowHeader\":\"SubmissionsPage_rowHeader__3GgEA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"ShowSubmissionModal_item__3iBzF\",\"itemTitle\":\"ShowSubmissionModal_itemTitle__3n6id\"};","import React, { StrictMode } from 'react';\nimport ReactDOM from 'react-dom';\n\nexport function render(component: React.ReactNode): void {\n ReactDOM.render(<StrictMode>{component}</StrictMode>, document.getElementById('root'));\n}\n","import { RenderConfigScreenCtx } from \"datocms-plugin-sdk\";\nimport {\n Button,\n Canvas,\n TextField,\n Form,\n FieldGroup,\n SelectField,\n} from \"datocms-react-ui\";\nimport { useEffect, useState } from \"react\";\nimport { Form as FormHandler, Field } from \"react-final-form\";\nimport { API_ENDPOINT } from \"..\";\n\ntype PropTypes = {\n ctx: RenderConfigScreenCtx;\n};\n\nexport type ValidParameters = {\n accessToken: string;\n site: { label: string; value: string };\n};\n\ntype Parameters = ValidParameters;\n\nexport default function ConfigScreen({ ctx }: PropTypes) {\n const parameters = ctx.plugin.attributes.parameters;\n const accessToken = parameters.accessToken;\n const [sites, setSites] = useState([]);\n\n useEffect(() => {\n const fetchSites = async () => {\n const response = await window.fetch(`${API_ENDPOINT}/sites/`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n const sites = await response.json();\n setSites(sites);\n };\n\n if (accessToken) {\n fetchSites();\n }\n }, [accessToken]);\n\n return (\n <Canvas ctx={ctx}>\n <FormHandler<Parameters>\n initialValues={ctx.plugin.attributes.parameters}\n validate={(values) => {\n const errors: Record<string, string> = {};\n if (!values.accessToken) {\n errors.accessToken = \"This field is required!\";\n }\n return errors;\n }}\n onSubmit={async (values) => {\n const response = await window.fetch(`${API_ENDPOINT}/sites/`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${values.accessToken}`,\n },\n });\n\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n ctx.alert(message);\n }\n\n const sites = await response.json();\n setSites(sites);\n\n await ctx.updatePluginParameters({\n ...values,\n ...(values.accessToken !== accessToken ? { site: null } : {}),\n });\n\n ctx.notice(\"Settings updated successfully!\");\n }}\n >\n {({ handleSubmit, submitting, dirty }) => (\n <Form onSubmit={handleSubmit}>\n <FieldGroup>\n <Field name=\"accessToken\">\n {({ input, meta: { error } }) => (\n <TextField\n id=\"accessToken\"\n label=\"Access token\"\n hint={\n <>\n You can generate a{\" \"}\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n href=\"https://app.netlify.com/user/applications#personal-access-tokens\"\n >\n personal access token\n </a>{\" \"}\n in your Netlify user settings.\n </>\n }\n required\n error={error}\n {...input}\n />\n )}\n </Field>\n\n {sites.length > 0 || parameters.site ? (\n <Field name=\"site\">\n {({ input, meta: { error } }) => (\n <SelectField\n id=\"site\"\n label=\"Site\"\n error={error}\n selectInputProps={{\n options: sites.map((site: any) => ({\n label: site.name,\n value: site.site_id,\n })),\n }}\n {...input}\n />\n )}\n </Field>\n ) : null}\n </FieldGroup>\n <Button\n type=\"submit\"\n fullWidth\n buttonSize=\"l\"\n buttonType=\"primary\"\n disabled={submitting || !dirty}\n >\n {!accessToken ? \"Connect\" : \"Save settings\"}\n </Button>\n </Form>\n )}\n </FormHandler>\n </Canvas>\n );\n}\n","import { RenderPageCtx } from \"datocms-plugin-sdk\";\nimport { Button, Canvas, Spinner } from \"datocms-react-ui\";\nimport { useEffect, useState } from \"react\";\nimport { API_ENDPOINT } from \"..\";\nimport { ValidParameters } from \"../entrypoints/ConfigScreen\";\nimport styles from \"./SubmissionsPage.module.css\";\n\ntype PropTypes = {\n ctx: RenderPageCtx;\n};\n\nexport default function SubmissionsPage({ ctx }: PropTypes) {\n const parameters = ctx.plugin.attributes.parameters as ValidParameters;\n const site = parameters.site;\n const accessToken = parameters.accessToken;\n\n const [submissions, setSubmissions] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (accessToken && site) {\n const getSubmissions = async () => {\n setLoading(true);\n const response = await window.fetch(\n `${API_ENDPOINT}/sites/${site.value}/submissions`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n );\n\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n ctx.alert(message);\n }\n\n const forms = await response.json();\n setSubmissions(forms);\n setLoading(false);\n };\n\n getSubmissions();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [site, accessToken]);\n\n const handleShowSubmissionModal = async (submission: any) => {\n await ctx.openModal({\n id: \"showSubmission\",\n title: `Submission (${submission.id})`,\n width: \"l\",\n parameters: submission,\n });\n };\n\n const handleOpenDeleteSubmissonModal = async (submission: any) => {\n const result: any = await ctx.openConfirm({\n title: \"Delete record?\",\n content:\n \"Are you sure you want to delete this record? This operation is not reversible!\",\n choices: [\n {\n label: \"Yes, delete this record\",\n value: \"negative\",\n intent: \"negative\",\n },\n ],\n cancel: {\n label: \"Cancel\",\n value: false,\n },\n });\n\n if (result) {\n const response = await window.fetch(\n `${API_ENDPOINT}/submissions/${submission.id}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n );\n\n if (!response.ok) {\n ctx.alert(`An error has occured: ${response.status}`);\n } else {\n setSubmissions(\n submissions.filter((item: any) => item.id !== submission.id)\n );\n ctx.notice(\"Record successfully removed\");\n }\n }\n };\n\n return (\n <Canvas ctx={ctx}>\n <div\n style={{\n paddingTop: \"var(--spacing-l)\",\n paddingLeft: \"var(--spacing-xxl)\",\n paddingRight: \"var(--spacing-xxl)\",\n }}\n >\n <h1 style={{ fontWeight: 500 }}>Form submissions</h1>\n\n {loading ? (\n <div style={{ height: \"200px\", position: \"relative\" }}>\n <Spinner size={48} placement=\"centered\" />\n </div>\n ) : submissions.length > 0 ? (\n <div>\n <div className={styles.rowHeader}>\n <div style={{ width: \"25%\" }}>Name</div>\n <div style={{ width: \"25%\" }}>Form</div>\n <div style={{ width: \"25%\" }}>Date</div>\n <div style={{ width: \"25%\" }}></div>\n </div>\n {submissions.map((item: any) => (\n <div key={item.id} className={styles.row}>\n <div style={{ width: \"25%\" }}>{item.name}</div>\n <div style={{ width: \"25%\" }}>{item.form_name}</div>\n <div style={{ width: \"25%\", flexGrow: 0 }}>\n {new Intl.DateTimeFormat(\"en-US\").format(\n new Date(item.created_at)\n )}\n </div>\n <div style={{ width: \"25%\", textAlign: \"right\" }}>\n <Button\n buttonSize=\"xs\"\n type=\"button\"\n onClick={() => handleShowSubmissionModal(item)}\n style={{ marginRight: \"var(--spacing-m)\" }}\n >\n Show\n </Button>\n <Button\n buttonSize=\"xs\"\n type=\"reset\"\n buttonType=\"negative\"\n onClick={() => handleOpenDeleteSubmissonModal(item)}\n >\n Delete\n </Button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>No form submissions found!</>\n )}\n </div>\n </Canvas>\n );\n}\n","import { RenderModalCtx } from \"datocms-plugin-sdk\";\nimport { Canvas } from \"datocms-react-ui\";\n\nimport styles from \"./ShowSubmissionModal.module.css\";\n\ntype PropTypes = {\n ctx: RenderModalCtx;\n};\n\nexport default function ShowSubmissionModal({ ctx }: PropTypes) {\n const fields = ctx.parameters.ordered_human_fields as any;\n\n return (\n <Canvas ctx={ctx}>\n {fields.length > 0 ? (\n fields.map((item: any) => (\n <div key={item.title} className={styles.item}>\n <div className={styles.itemTitle}>{item.title}</div>\n <div>{item.value}</div>\n </div>\n ))\n ) : (\n <span>No form fields found!</span>\n )}\n </Canvas>\n );\n}\n","import {\n connect,\n IntentCtx,\n RenderModalCtx,\n RenderPageCtx,\n} from \"datocms-plugin-sdk\";\nimport { render } from \"./utils/render\";\nimport ConfigScreen from \"./entrypoints/ConfigScreen\";\nimport \"datocms-react-ui/styles.css\";\nimport SubmissionsPage from \"./pages/SubmissionsPage\";\nimport ShowSubmissionModal from \"./modals/ShowSubmissionModal\";\n\nexport const API_ENDPOINT = \"https://api.netlify.com/api/v1\";\n\nconnect({\n renderConfigScreen(ctx) {\n return render(<ConfigScreen ctx={ctx} />);\n },\n mainNavigationTabs(ctx: IntentCtx) {\n return [\n {\n label: \"Netlify Forms\",\n icon: \"file-signature\",\n pointsTo: {\n pageId: \"form-submissions\",\n },\n placement: [\"before\", \"settings\"],\n },\n ];\n },\n renderPage(pageId, ctx: RenderPageCtx) {\n switch (pageId) {\n case \"form-submissions\":\n return render(<SubmissionsPage ctx={ctx} />);\n }\n },\n renderModal(modalId: string, ctx: RenderModalCtx) {\n switch (modalId) {\n case \"showSubmission\":\n return render(<ShowSubmissionModal ctx={ctx} />);\n }\n },\n});\n"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datocms-plugin-netlify-forms",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Plugin that allows DatoCMS show and manage Netlify form submissions",
5
5
  "homepage": "https://github.com/gempi/datocms-plugin-netlify-forms#readme",
6
6
  "author": "Matthias Gemperli <hello@matthiasgemperli.ch>",
@@ -1,2 +0,0 @@
1
- (this["webpackJsonpdatocms-plugin-netlify-forms"]=this["webpackJsonpdatocms-plugin-netlify-forms"]||[]).push([[0],{34:function(e,t,n){e.exports={row:"SubmissionsPage_row__17uQG",rowHeader:"SubmissionsPage_rowHeader__3GgEA"}},35:function(e,t,n){e.exports={item:"ShowSubmissionModal_item__3iBzF",itemTitle:"ShowSubmissionModal_itemTitle__3n6id"}},66:function(e,t,n){"use strict";n.r(t),n.d(t,"API_ENDPOINT",(function(){return A}));var r=n(76),i=n(0),s=n(8),c=n.n(s),a=n(2);function o(e){c.a.render(Object(a.jsx)(i.StrictMode,{children:e}),document.getElementById("root"))}var u=n(7),l=n.n(u),d=n(12),b=n(9),j=n(3),h=n(77),f=n(68),m=n(69),p=n(78),x=n(75),v=n(73),O=n(25);function g(e){var t=e.ctx,n=t.plugin.attributes.parameters.accessToken,r=Object(i.useState)([]),s=Object(j.a)(r,2),c=s[0],o=s[1];return Object(a.jsx)(h.a,{ctx:t,children:Object(a.jsx)(O.b,{initialValues:t.plugin.attributes.parameters,validate:function(e){var t={};return e.accessToken||(t.accessToken="This field is required!"),t},onSubmit:function(){var e=Object(b.a)(l.a.mark((function e(r){var i,s,c;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,window.fetch("".concat(A,"/sites/"),{method:"GET",headers:{Authorization:"Bearer ".concat(r.accessToken)}});case 2:return(i=e.sent).ok||(s="An error has occured: ".concat(i.status),t.alert(s)),e.next=6,i.json();case 6:return c=e.sent,o(c),e.next=10,t.updatePluginParameters(Object(d.a)(Object(d.a)({},r),r.accessToken!==n?{site:null}:{}));case 10:t.notice("Settings updated successfully!");case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),children:function(e){var t=e.handleSubmit,r=e.submitting,i=e.dirty;return Object(a.jsxs)(f.a,{onSubmit:t,children:[Object(a.jsxs)(m.a,{children:[Object(a.jsx)(O.a,{name:"accessToken",children:function(e){var t=e.input,n=e.meta.error;return Object(a.jsx)(p.a,Object(d.a)({id:"accessToken",label:"Access token",hint:Object(a.jsxs)(a.Fragment,{children:["You can generate a"," ",Object(a.jsx)("a",{target:"_blank",rel:"noreferrer",href:"https://app.netlify.com/user/applications#personal-access-tokens",children:"personal access token"})," ","in your Netlify user settings."]}),required:!0,error:n},t))}}),c.length>0?Object(a.jsx)(O.a,{name:"site",children:function(e){var t=e.input,n=e.meta.error;return Object(a.jsx)(x.a,Object(d.a)({id:"site",label:"Site",error:n,selectInputProps:{options:c.map((function(e){return{label:e.name,value:e.site_id}}))}},t))}}):null]}),Object(a.jsx)(v.a,{type:"submit",fullWidth:!0,buttonSize:"l",buttonType:"primary",disabled:r||!i,children:n?"Save settings":"Connect"})]})}})})}n(60);var w=n(74),y=n(34),S=n.n(y);function k(e){var t=e.ctx,n=t.plugin.attributes.parameters,r=n.site,s=n.accessToken,c=Object(i.useState)([]),o=Object(j.a)(c,2),u=o[0],d=o[1],f=Object(i.useState)(!1),m=Object(j.a)(f,2),p=m[0],x=m[1];Object(i.useEffect)((function(){if(s&&r){var e=function(){var e=Object(b.a)(l.a.mark((function e(){var n,i,c;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return x(!0),e.next=3,window.fetch("".concat(A,"/sites/").concat(r.value,"/submissions"),{method:"GET",headers:{Authorization:"Bearer ".concat(s)}});case 3:return(n=e.sent).ok||(i="An error has occured: ".concat(n.status),t.alert(i)),e.next=7,n.json();case 7:c=e.sent,d(c),x(!1);case 10:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();e()}}),[r,s]);var O=function(){var e=Object(b.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.openModal({id:"showSubmission",title:"Submission (".concat(n.id,")"),width:"l",parameters:n});case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),g=function(){var e=Object(b.a)(l.a.mark((function e(n){var r;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.openConfirm({title:"Delete record?",content:"Are you sure you want to delete this record? This operation is not reversible!",choices:[{label:"Yes, delete this record",value:"negative",intent:"negative"}],cancel:{label:"Cancel",value:!1}});case 2:if(!e.sent){e.next=8;break}return e.next=6,window.fetch("".concat(A,"/submissions/").concat(n.id),{method:"DELETE",headers:{Authorization:"Bearer ".concat(s)}});case 6:(r=e.sent).ok?(d(u.filter((function(e){return e.id!==n.id}))),t.notice("Record successfully removed")):t.alert("An error has occured: ".concat(r.status));case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return Object(a.jsx)(h.a,{ctx:t,children:Object(a.jsxs)("div",{style:{paddingTop:"var(--spacing-l)",paddingLeft:"var(--spacing-xxl)",paddingRight:"var(--spacing-xxl)"},children:[Object(a.jsx)("h1",{style:{fontWeight:500},children:"Form submissions"}),p?Object(a.jsx)("div",{style:{height:"200px",position:"relative"},children:Object(a.jsx)(w.a,{size:48,placement:"centered"})}):u.length>0?Object(a.jsxs)("div",{children:[Object(a.jsxs)("div",{className:S.a.rowHeader,children:[Object(a.jsx)("div",{style:{width:"25%"},children:"Name"}),Object(a.jsx)("div",{style:{width:"25%"},children:"Form"}),Object(a.jsx)("div",{style:{width:"25%"},children:"Date"}),Object(a.jsx)("div",{style:{width:"25%"}})]}),u.map((function(e){return Object(a.jsxs)("div",{className:S.a.row,children:[Object(a.jsx)("div",{style:{width:"25%"},children:e.name}),Object(a.jsx)("div",{style:{width:"25%"},children:e.form_name}),Object(a.jsx)("div",{style:{width:"25%",flexGrow:0},children:new Intl.DateTimeFormat("en-US").format(new Date(e.created_at))}),Object(a.jsxs)("div",{style:{width:"25%",textAlign:"right"},children:[Object(a.jsx)(v.a,{buttonSize:"xs",type:"button",onClick:function(){return O(e)},style:{marginRight:"var(--spacing-m)"},children:"Show"}),Object(a.jsx)(v.a,{buttonSize:"xs",type:"reset",buttonType:"negative",onClick:function(){return g(e)},children:"Delete"})]})]},e.id)}))]}):Object(a.jsx)(a.Fragment,{children:"No form submissions found!"})]})})}var T=n(35),_=n.n(T);function N(e){var t=e.ctx,n=t.parameters.ordered_human_fields;return Object(a.jsx)(h.a,{ctx:t,children:n.length>0?n.map((function(e){return Object(a.jsxs)("div",{className:_.a.item,children:[Object(a.jsx)("div",{className:_.a.itemTitle,children:e.title}),Object(a.jsx)("div",{children:e.value})]},e.title)})):Object(a.jsx)("span",{children:"No form fields found!"})})}var A="https://api.netlify.com/api/v1";Object(r.a)({renderConfigScreen:function(e){return o(Object(a.jsx)(g,{ctx:e}))},mainNavigationTabs:function(e){return[{label:"Netlify Forms",icon:"file-signature",pointsTo:{pageId:"form-submissions"},placement:["before","settings"]}]},renderPage:function(e,t){if("form-submissions"===e)return o(Object(a.jsx)(k,{ctx:t}))},renderModal:function(e,t){if("showSubmission"===e)return o(Object(a.jsx)(N,{ctx:t}))}})}},[[66,1,2]]]);
2
- //# sourceMappingURL=main.6e715e0e.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["pages/SubmissionsPage.module.css","modals/ShowSubmissionModal.module.css","utils/render.tsx","entrypoints/ConfigScreen.tsx","pages/SubmissionsPage.tsx","modals/ShowSubmissionModal.tsx","index.tsx"],"names":["module","exports","render","component","ReactDOM","document","getElementById","ConfigScreen","ctx","accessToken","plugin","attributes","parameters","useState","sites","setSites","Canvas","initialValues","validate","values","errors","onSubmit","a","window","fetch","API_ENDPOINT","method","headers","Authorization","response","ok","message","status","alert","json","updatePluginParameters","site","notice","handleSubmit","submitting","dirty","Form","FieldGroup","name","input","error","meta","TextField","id","label","hint","target","rel","href","required","length","SelectField","selectInputProps","options","map","value","site_id","Button","type","fullWidth","buttonSize","buttonType","disabled","SubmissionsPage","submissions","setSubmissions","loading","setLoading","useEffect","getSubmissions","forms","handleShowSubmissionModal","submission","openModal","title","width","handleOpenDeleteSubmissonModal","openConfirm","content","choices","intent","cancel","filter","item","style","paddingTop","paddingLeft","paddingRight","fontWeight","height","position","Spinner","size","placement","className","styles","rowHeader","row","form_name","flexGrow","Intl","DateTimeFormat","format","Date","created_at","textAlign","onClick","marginRight","ShowSubmissionModal","fields","ordered_human_fields","itemTitle","connect","renderConfigScreen","mainNavigationTabs","icon","pointsTo","pageId","renderPage","renderModal","modalId"],"mappings":"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","file":"static/js/main.6e715e0e.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"row\":\"SubmissionsPage_row__17uQG\",\"rowHeader\":\"SubmissionsPage_rowHeader__3GgEA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"ShowSubmissionModal_item__3iBzF\",\"itemTitle\":\"ShowSubmissionModal_itemTitle__3n6id\"};","import React, { StrictMode } from 'react';\nimport ReactDOM from 'react-dom';\n\nexport function render(component: React.ReactNode): void {\n ReactDOM.render(<StrictMode>{component}</StrictMode>, document.getElementById('root'));\n}\n","import { RenderConfigScreenCtx } from \"datocms-plugin-sdk\";\nimport {\n Button,\n Canvas,\n TextField,\n Form,\n FieldGroup,\n SelectField,\n} from \"datocms-react-ui\";\nimport { useState } from \"react\";\nimport { Form as FormHandler, Field } from \"react-final-form\";\nimport { API_ENDPOINT } from \"..\";\n\ntype PropTypes = {\n ctx: RenderConfigScreenCtx;\n};\n\nexport type ValidParameters = {\n accessToken: string;\n site: { label: string; value: string };\n};\n\ntype Parameters = ValidParameters;\n\nexport default function ConfigScreen({ ctx }: PropTypes) {\n const parameters = ctx.plugin.attributes.parameters;\n const accessToken = parameters.accessToken;\n const [sites, setSites] = useState([]);\n\n return (\n <Canvas ctx={ctx}>\n <FormHandler<Parameters>\n initialValues={ctx.plugin.attributes.parameters}\n validate={(values) => {\n const errors: Record<string, string> = {};\n if (!values.accessToken) {\n errors.accessToken = \"This field is required!\";\n }\n return errors;\n }}\n onSubmit={async (values) => {\n const response = await window.fetch(`${API_ENDPOINT}/sites/`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${values.accessToken}`,\n },\n });\n\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n ctx.alert(message);\n }\n\n const sites = await response.json();\n setSites(sites);\n\n await ctx.updatePluginParameters({\n ...values,\n ...(values.accessToken !== accessToken ? { site: null } : {}),\n });\n\n ctx.notice(\"Settings updated successfully!\");\n }}\n >\n {({ handleSubmit, submitting, dirty }) => (\n <Form onSubmit={handleSubmit}>\n <FieldGroup>\n <Field name=\"accessToken\">\n {({ input, meta: { error } }) => (\n <TextField\n id=\"accessToken\"\n label=\"Access token\"\n hint={\n <>\n You can generate a{\" \"}\n <a\n target=\"_blank\"\n rel=\"noreferrer\"\n href=\"https://app.netlify.com/user/applications#personal-access-tokens\"\n >\n personal access token\n </a>{\" \"}\n in your Netlify user settings.\n </>\n }\n required\n error={error}\n {...input}\n />\n )}\n </Field>\n\n {sites.length > 0 ? (\n <Field name=\"site\">\n {({ input, meta: { error } }) => (\n <SelectField\n id=\"site\"\n label=\"Site\"\n error={error}\n selectInputProps={{\n options: sites.map((site: any) => ({\n label: site.name,\n value: site.site_id,\n })),\n }}\n {...input}\n />\n )}\n </Field>\n ) : null}\n </FieldGroup>\n <Button\n type=\"submit\"\n fullWidth\n buttonSize=\"l\"\n buttonType=\"primary\"\n disabled={submitting || !dirty}\n >\n {!accessToken ? \"Connect\" : \"Save settings\"}\n </Button>\n </Form>\n )}\n </FormHandler>\n </Canvas>\n );\n}\n","import { RenderPageCtx } from \"datocms-plugin-sdk\";\nimport { Button, Canvas, Spinner } from \"datocms-react-ui\";\nimport { useEffect, useState } from \"react\";\nimport { API_ENDPOINT } from \"..\";\nimport { ValidParameters } from \"../entrypoints/ConfigScreen\";\nimport styles from \"./SubmissionsPage.module.css\";\n\ntype PropTypes = {\n ctx: RenderPageCtx;\n};\n\nexport default function SubmissionsPage({ ctx }: PropTypes) {\n const parameters = ctx.plugin.attributes.parameters as ValidParameters;\n const site = parameters.site;\n const accessToken = parameters.accessToken;\n\n const [submissions, setSubmissions] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (accessToken && site) {\n const getSubmissions = async () => {\n setLoading(true);\n const response = await window.fetch(\n `${API_ENDPOINT}/sites/${site.value}/submissions`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n );\n\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n ctx.alert(message);\n }\n\n const forms = await response.json();\n setSubmissions(forms);\n setLoading(false);\n };\n\n getSubmissions();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [site, accessToken]);\n\n const handleShowSubmissionModal = async (submission: any) => {\n await ctx.openModal({\n id: \"showSubmission\",\n title: `Submission (${submission.id})`,\n width: \"l\",\n parameters: submission,\n });\n };\n\n const handleOpenDeleteSubmissonModal = async (submission: any) => {\n const result: any = await ctx.openConfirm({\n title: \"Delete record?\",\n content:\n \"Are you sure you want to delete this record? This operation is not reversible!\",\n choices: [\n {\n label: \"Yes, delete this record\",\n value: \"negative\",\n intent: \"negative\",\n },\n ],\n cancel: {\n label: \"Cancel\",\n value: false,\n },\n });\n\n if (result) {\n const response = await window.fetch(\n `${API_ENDPOINT}/submissions/${submission.id}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n );\n\n if (!response.ok) {\n ctx.alert(`An error has occured: ${response.status}`);\n } else {\n setSubmissions(\n submissions.filter((item: any) => item.id !== submission.id)\n );\n ctx.notice(\"Record successfully removed\");\n }\n }\n };\n\n return (\n <Canvas ctx={ctx}>\n <div\n style={{\n paddingTop: \"var(--spacing-l)\",\n paddingLeft: \"var(--spacing-xxl)\",\n paddingRight: \"var(--spacing-xxl)\",\n }}\n >\n <h1 style={{ fontWeight: 500 }}>Form submissions</h1>\n\n {loading ? (\n <div style={{ height: \"200px\", position: \"relative\" }}>\n <Spinner size={48} placement=\"centered\" />\n </div>\n ) : submissions.length > 0 ? (\n <div>\n <div className={styles.rowHeader}>\n <div style={{ width: \"25%\" }}>Name</div>\n <div style={{ width: \"25%\" }}>Form</div>\n <div style={{ width: \"25%\" }}>Date</div>\n <div style={{ width: \"25%\" }}></div>\n </div>\n {submissions.map((item: any) => (\n <div key={item.id} className={styles.row}>\n <div style={{ width: \"25%\" }}>{item.name}</div>\n <div style={{ width: \"25%\" }}>{item.form_name}</div>\n <div style={{ width: \"25%\", flexGrow: 0 }}>\n {new Intl.DateTimeFormat(\"en-US\").format(\n new Date(item.created_at)\n )}\n </div>\n <div style={{ width: \"25%\", textAlign: \"right\" }}>\n <Button\n buttonSize=\"xs\"\n type=\"button\"\n onClick={() => handleShowSubmissionModal(item)}\n style={{ marginRight: \"var(--spacing-m)\" }}\n >\n Show\n </Button>\n <Button\n buttonSize=\"xs\"\n type=\"reset\"\n buttonType=\"negative\"\n onClick={() => handleOpenDeleteSubmissonModal(item)}\n >\n Delete\n </Button>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>No form submissions found!</>\n )}\n </div>\n </Canvas>\n );\n}\n","import { RenderModalCtx } from \"datocms-plugin-sdk\";\nimport { Canvas } from \"datocms-react-ui\";\n\nimport styles from \"./ShowSubmissionModal.module.css\";\n\ntype PropTypes = {\n ctx: RenderModalCtx;\n};\n\nexport default function ShowSubmissionModal({ ctx }: PropTypes) {\n const fields = ctx.parameters.ordered_human_fields as any;\n\n return (\n <Canvas ctx={ctx}>\n {fields.length > 0 ? (\n fields.map((item: any) => (\n <div key={item.title} className={styles.item}>\n <div className={styles.itemTitle}>{item.title}</div>\n <div>{item.value}</div>\n </div>\n ))\n ) : (\n <span>No form fields found!</span>\n )}\n </Canvas>\n );\n}\n","import {\n connect,\n IntentCtx,\n RenderModalCtx,\n RenderPageCtx,\n} from \"datocms-plugin-sdk\";\nimport { render } from \"./utils/render\";\nimport ConfigScreen from \"./entrypoints/ConfigScreen\";\nimport \"datocms-react-ui/styles.css\";\nimport SubmissionsPage from \"./pages/SubmissionsPage\";\nimport ShowSubmissionModal from \"./modals/ShowSubmissionModal\";\n\nexport const API_ENDPOINT = \"https://api.netlify.com/api/v1\";\n\nconnect({\n renderConfigScreen(ctx) {\n return render(<ConfigScreen ctx={ctx} />);\n },\n mainNavigationTabs(ctx: IntentCtx) {\n return [\n {\n label: \"Netlify Forms\",\n icon: \"file-signature\",\n pointsTo: {\n pageId: \"form-submissions\",\n },\n placement: [\"before\", \"settings\"],\n },\n ];\n },\n renderPage(pageId, ctx: RenderPageCtx) {\n switch (pageId) {\n case \"form-submissions\":\n return render(<SubmissionsPage ctx={ctx} />);\n }\n },\n renderModal(modalId: string, ctx: RenderModalCtx) {\n switch (modalId) {\n case \"showSubmission\":\n return render(<ShowSubmissionModal ctx={ctx} />);\n }\n },\n});\n"],"sourceRoot":""}