(
name: InternalFieldName,
value: SetFieldValue<TFieldValues>,
options: SetValueConfig = {},
skipClone = false,
skipRender = false,
)
| 775 | ); |
| 776 | |
| 777 | const setFieldValue = ( |
| 778 | name: InternalFieldName, |
| 779 | value: SetFieldValue<TFieldValues>, |
| 780 | options: SetValueConfig = {}, |
| 781 | skipClone = false, |
| 782 | skipRender = false, |
| 783 | ) => { |
| 784 | const field: Field = get(_fields, name); |
| 785 | let fieldValue: unknown = value; |
| 786 | |
| 787 | if (field) { |
| 788 | const fieldReference = field._f; |
| 789 | |
| 790 | if (fieldReference) { |
| 791 | !fieldReference.disabled && |
| 792 | set(_formValues, name, getFieldValueAs(value, fieldReference)); |
| 793 | |
| 794 | fieldValue = |
| 795 | isHTMLElement(fieldReference.ref) && isNullOrUndefined(value) |
| 796 | ? '' |
| 797 | : value; |
| 798 | |
| 799 | if (isMultipleSelect(fieldReference.ref)) { |
| 800 | [...fieldReference.ref.options].forEach( |
| 801 | (optionRef) => |
| 802 | (optionRef.selected = ( |
| 803 | fieldValue as InternalFieldName[] |
| 804 | ).includes(optionRef.value)), |
| 805 | ); |
| 806 | } else if (fieldReference.refs) { |
| 807 | if (isCheckBoxInput(fieldReference.ref)) { |
| 808 | fieldReference.refs.forEach((checkboxRef) => { |
| 809 | if (!checkboxRef.defaultChecked || !checkboxRef.disabled) { |
| 810 | if (Array.isArray(fieldValue)) { |
| 811 | checkboxRef.checked = !!fieldValue.find( |
| 812 | (data: string) => data === checkboxRef.value, |
| 813 | ); |
| 814 | } else { |
| 815 | checkboxRef.checked = |
| 816 | fieldValue === checkboxRef.value || !!fieldValue; |
| 817 | } |
| 818 | } |
| 819 | }); |
| 820 | } else { |
| 821 | fieldReference.refs.forEach( |
| 822 | (radioRef: HTMLInputElement) => |
| 823 | (radioRef.checked = radioRef.value === fieldValue), |
| 824 | ); |
| 825 | } |
| 826 | } else if (isFileInput(fieldReference.ref)) { |
| 827 | fieldReference.ref.value = ''; |
| 828 | } else { |
| 829 | fieldReference.ref.value = fieldValue; |
| 830 | |
| 831 | if (!fieldReference.ref.type && !skipRender) { |
| 832 | _subjects.state.next({ |
| 833 | name, |
| 834 | values: skipClone ? _formValues : cloneObject(_formValues), |
no test coverage detected
searching dependent graphs…