# yatra/3.0.13/resources/js/components/trip-form/hooks/useTripForm.ts

Yatra – Travel Booking &amp; Tour Operator Software, version 3.0.13. 51 lines.

- Page: https://pluginprobe.com/plugins/yatra/3.0.13/code/resources/js/components/trip-form/hooks/useTripForm.ts
- Raw: https://pluginprobe.com/plugins/yatra/3.0.13/raw/resources/js/components/trip-form/hooks/useTripForm.ts
- Modified: 2026-04-14T03:47:24+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/yatra/3.0.13/code/resources/js/components/trip-form/hooks/useTripForm.ts#L10-L20`.

```typescript
/**
 * Custom hook for trip form logic
 * Centralizes form state management and handlers
 */

import { useState, useCallback } from "react";
import { TripFormData } from "../types";

export const useTripForm = (initialData: TripFormData) => {
  const [formData, setFormData] = useState<TripFormData>(initialData);
  const [errors, setErrors] = useState<Record<string, string>>({});

  const handleFieldChange = useCallback(
    (field: keyof TripFormData, value: any) => {
      setFormData((prev) => ({ ...prev, [field]: value }));

      // Clear error for this field when user starts typing
      if (errors[field]) {
        setErrors((prev) => {
          const newErrors = { ...prev };
          delete newErrors[field];
          return newErrors;
        });
      }
    },
    [errors],
  );

  const setError = useCallback((field: string, message: string) => {
    setErrors((prev) => ({ ...prev, [field]: message }));
  }, []);

  const clearErrors = useCallback(() => {
    setErrors({});
  }, []);

  const updateFormData = useCallback((data: Partial<TripFormData>) => {
    setFormData((prev) => ({ ...prev, ...data }));
  }, []);

  return {
    formData,
    errors,
    handleFieldChange,
    setError,
    clearErrors,
    updateFormData,
    setFormData,
  };
};

```
