# All files / draggable useLocalStorageDraggableLatest.ts

0% Statements 0/83
0% Branches 0/1
0% Functions 0/1
0% Lines 0/83

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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84

     "use client";
    import type {
      BaseDraggableOptions,
      ControlledDraggableImplementation,
    } from "./useControlledDraggable";
    import { useControlledDraggable } from "./useControlledDraggable";
    import type {
      LocalStorageDraggableControls,
      LocalStorageDraggableControlsOptions,
    } from "./useLocalStorageDraggableControls";
    import {
      useLocalStorageDraggableControls,
      useLocalStorageDraggablePersistance,
    } from "./useLocalStorageDraggableControls";

    /**
     * @remarks \@since 6.0.0
     */
    export interface LocalStorageDraggableOptions<E extends HTMLElement>
      extends LocalStorageDraggableControlsOptions,
        BaseDraggableOptions<E> {}

    /**
     * @remarks \@since 6.0.0
     */
    export interface LocalStorageDraggableImplementation<E extends HTMLElement>
      extends ControlledDraggableImplementation<E>,
        Omit<LocalStorageDraggableControls, "setDragging"> {}

    /**
     * An implementation of the {@link useControlledDraggable} hook that uses
     * `localStorage` for state.
     *
     * @remarks \@since 6.0.0
     */
    export function useLocalStorageDraggable<E extends HTMLElement>(
      options: LocalStorageDraggableOptions<E>
    ): LocalStorageDraggableImplementation<E> {
      const {
        min,
        max,
        defaultValue,
        localStorageKey,
        localStorageManual,
        ...dragOptions
      } = options;
      const {
        value,
        setValue,
        dragging,
        setDragging,
        persistToLocalStorage,
        removeFromLocalStorage,
      } = useLocalStorageDraggableControls({
        localStorageKey,
        localStorageManual,
        min,
        max,
        defaultValue,
      });
      const draggable = useControlledDraggable({
        ...dragOptions,
        min,
        max,
        setValue,
        dragging,
        setDragging,
      });
      useLocalStorageDraggablePersistance({
        dragging,
        draggedOnce: draggable.draggedOnce,
        persistToLocalStorage,
      });

      return {
        ...draggable,
        value,
        setValue,
        dragging,
        persistToLocalStorage,
        removeFromLocalStorage,
      };
    }