@sandlada/vue-mdc
Version:

81 lines (80 loc) • 2.14 kB
JavaScript
/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*
* @link
* https://github.com/material-components/material-web/blob/main/internal/controller/form-submitter.ts
*
* [Modified by Sandlada & Kai Orion]
*
* @license
* Copyright 2025 Sandlada & Kai Orion
* SPDX-License-Identifier: MIT
*/
import { isServer } from "../../utils/is-server.js";
const FormSubmitterType = {
Button: "button",
Submit: "submit",
Reset: "reset"
};
const clickHandlers = /* @__PURE__ */ new WeakMap();
function setupFormSubmitter(elementInstance) {
if (isServer()) {
return;
}
if (clickHandlers.has(elementInstance)) {
return;
}
const handleClick = async (event) => {
const { type, form } = elementInstance;
if (!form || type === "button") {
return;
}
if (elementInstance.hasAttribute("disabled")) {
return;
}
await new Promise((resolve) => {
requestAnimationFrame(() => resolve());
});
if (event.defaultPrevented) {
return;
}
if (type === "reset") {
form.reset();
return;
}
const patchSubmitEvent = (submitEvent) => {
Object.defineProperty(submitEvent, "submitter", {
configurable: true,
enumerable: true,
get: () => elementInstance
});
};
form.addEventListener("submit", patchSubmitEvent, { capture: true, once: true });
try {
if (elementInstance.name) {
} else {
}
} catch (error) {
console.error("Error during form submission request:", error);
form.removeEventListener("submit", patchSubmitEvent, { capture: true });
}
form.requestSubmit(elementInstance);
};
elementInstance.addEventListener("click", handleClick);
clickHandlers.set(elementInstance, handleClick);
}
function cleanupFormSubmitter(elementInstance) {
const handler = clickHandlers.get(elementInstance);
if (handler) {
elementInstance.removeEventListener("click", handler);
clickHandlers.delete(elementInstance);
}
}
export {
FormSubmitterType,
cleanupFormSubmitter,
setupFormSubmitter
};
//# sourceMappingURL=form-submitter.js.map