Skip to content

Commit

Permalink
feat: make getFormControlPayload as generic fp-100 (#111)
Browse files Browse the repository at this point in the history
  • Loading branch information
what1s1ove authored Dec 10, 2023
1 parent f02913e commit 656c577
Showing 1 changed file with 33 additions and 22 deletions.
55 changes: 33 additions & 22 deletions src/packages/get-form-control-payload/get-form-control-payload.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,9 @@ const getFormControlsPayload = (...controlElements) => {
};

/**
* @template {unknown} T
* @param {HTMLFormOperationalControlElement} controlNode
* @returns {unknown}
* @returns {T}
* @throws {FormPayloadError}
*/
const getFormControlPayload = (controlNode) => {
Expand All @@ -63,56 +64,66 @@ const getFormControlPayload = (controlNode) => {
case ControlType.TEXTAREA:
case ControlType.SELECT_ONE:
case ControlType.OUTPUT: {
return getFormControlValue(
/**
* @type {HTMLInputElement
* | HTMLOutputElement
* | HTMLTextAreaElement
* | HTMLSelectElement}
*/ (controlNode),
return /** @type {T} */ (
getFormControlValue(
/**
* @type {HTMLInputElement
* | HTMLOutputElement
* | HTMLTextAreaElement
* | HTMLSelectElement}
*/ (controlNode),
)
);
}
case ControlType.NUMBER:
case ControlType.RANGE: {
return getInputNumericValue(
/** @type {HTMLInputElement} */ (controlNode),
return /** @type {T} */ (
getInputNumericValue(
/** @type {HTMLInputElement} */ (controlNode),
)
);
}
case ControlType.CHECKBOX: {
return getCheckboxValue(
/** @type {HTMLInputElement} */ (controlNode),
return /** @type {T} */ (
getCheckboxValue(/** @type {HTMLInputElement} */ (controlNode))
);
}
case ControlType.DATE:
case ControlType.TIME:
case ControlType.MONTH:
case ControlType.WEEK: {
return getInputDateValue(
/** @type {HTMLInputElement} */ (controlNode),
return /** @type {T} */ (
getInputDateValue(/** @type {HTMLInputElement} */ (controlNode))
);
}
case ControlType.DATETIME_LOCAL: {
return getDatetimeLocalValue(
/** @type {HTMLInputElement} */ (controlNode),
return /** @type {T} */ (
getDatetimeLocalValue(
/** @type {HTMLInputElement} */ (controlNode),
)
);
}
case ControlType.FILE: {
return getInputFileValue(
/** @type {HTMLInputElement} */ (controlNode),
return /** @type {T} */ (
getInputFileValue(/** @type {HTMLInputElement} */ (controlNode))
);
}
case ControlType.SELECT_MULTIPLE: {
return getMultiSelectValues(
/** @type {HTMLSelectElement} */ (controlNode),
return /** @type {T} */ (
getMultiSelectValues(
/** @type {HTMLSelectElement} */ (controlNode),
)
);
}
case ControlType.FIELDSET: {
const elements = [
.../** @type {HTMLFieldSetElement} */ (controlNode).elements,
];

return getFormControlsPayload(
.../** @type {HTMLFormControlElement[]} */ (elements),
return /** @type {T} */ (
getFormControlsPayload(
.../** @type {HTMLFormControlElement[]} */ (elements),
)
);
}
}
Expand Down

0 comments on commit 656c577

Please sign in to comment.