# All files / form useFormReset.ts

100% Statements 48/48
100% Branches 11/11
100% Functions 2/2
100% Lines 48/48

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    491x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    57x
    57x
    57x
    4x
    4x
    1x
    1x
    3x
    3x
    4x
    2x
    1x
    4x
    1x
    1x
    2x
    2x
    4x
    4x
    2x
    2x
    2x
    2x
    2x
    57x
    57x
     "use client";
    import { useEffect, type RefObject } from "react";
    import {
      triggerManualChangeEvent,
      type ChangeableHTMLElement,
    } from "./utils.js";

    /**
     * @remarks \@since 6.0.0
     * @internal
     */
    export interface FormResetOptions {
      form?: string;
      elementRef: RefObject<ChangeableHTMLElement>;
      defaultValue: string;
    }

    /**
     * @remarks \@since 6.0.0
     * @internal
     */
    export function useFormReset(options: FormResetOptions): void {
      const { form, elementRef, defaultValue } = options;

      useEffect(() => {
        const element = elementRef.current;
        if (!element) {
          return;
        }

        const formElement =
          (form && document.getElementById(form)) ||
          element.closest<HTMLFormElement>("form") ||
          null;
        if (!formElement) {
          return;
        }

        const handleReset = (): void => {
          triggerManualChangeEvent(element, defaultValue);
        };

        formElement.addEventListener("reset", handleReset);
        return () => {
          formElement.removeEventListener("reset", handleReset);
        };
      }, [defaultValue, elementRef, form]);
    }