Skip to content

Commit 91f0d18

Browse files
authored
Merge pull request #65 from adobe/undeprecate-form
feat: allow form block to submit to an arbitraty url
2 parents 2cfda70 + d9c59f5 commit 91f0d18

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

blocks/form/form.js

+10-16
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import createField from './form-fields.js';
2-
import { sampleRUM } from '../../scripts/aem.js';
32

4-
async function createForm(formHref) {
3+
async function createForm(formHref, submitHref) {
54
const { pathname } = new URL(formHref);
65
const resp = await fetch(pathname);
76
const json = await resp.json();
87

98
const form = document.createElement('form');
10-
// eslint-disable-next-line prefer-destructuring
11-
form.dataset.action = pathname.split('.json')[0];
9+
form.dataset.action = submitHref;
1210

1311
const fields = await Promise.all(json.data.map((fd) => createField(fd, form)));
1412
fields.forEach((field) => {
@@ -45,13 +43,6 @@ function generatePayload(form) {
4543
return payload;
4644
}
4745

48-
function handleSubmitError(form, error) {
49-
// eslint-disable-next-line no-console
50-
console.error(error);
51-
form.querySelector('button[type="submit"]').disabled = false;
52-
sampleRUM('form:error', { source: '.form', target: error.stack || error.message || 'unknown error' });
53-
}
54-
5546
async function handleSubmit(form) {
5647
if (form.getAttribute('data-submitting') === 'true') return;
5748

@@ -70,7 +61,6 @@ async function handleSubmit(form) {
7061
},
7162
});
7263
if (response.ok) {
73-
sampleRUM('form:submit', { source: '.form', target: form.dataset.action });
7464
if (form.dataset.confirmation) {
7565
window.location.href = form.dataset.confirmation;
7666
}
@@ -79,17 +69,21 @@ async function handleSubmit(form) {
7969
throw new Error(error);
8070
}
8171
} catch (e) {
82-
handleSubmitError(form, e);
72+
// eslint-disable-next-line no-console
73+
console.error(e);
8374
} finally {
8475
form.setAttribute('data-submitting', 'false');
76+
submit.disabled = false;
8577
}
8678
}
8779

8880
export default async function decorate(block) {
89-
const formLink = block.querySelector('a[href$=".json"]');
90-
if (!formLink) return;
81+
const links = [...block.querySelectorAll('a')].map((a) => a.href);
82+
const formLink = links.find((link) => link.startsWith(window.location.origin) && link.endsWith('.json'));
83+
const submitLink = links.find((link) => link !== formLink);
84+
if (!formLink || !submitLink) return;
9185

92-
const form = await createForm(formLink.href);
86+
const form = await createForm(formLink, submitLink);
9387
block.replaceChildren(form);
9488

9589
form.addEventListener('submit', (e) => {

0 commit comments

Comments
 (0)