/v1.0

EditableMonthYearField

EditableMonthYearField permite seleccionar una combinación de mes y año. En modo lectura el valor YYYY-MM actual se muestra en un input deshabilitado. Al hacer clic en el ícono de edición se activa un selector <input type="month">. Soporta restricciones opcionales de mínimo y máximo. Al guardar, la cadena YYYY-MM se persiste mediante la API.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | name | string | Sí | — | Nombre del campo enviado como clave en el payload de actualización. | | value | string | No | — | Valor actual en formato YYYY-MM. | | updatePath | string | Sí | — | Ruta del endpoint API para persistir el cambio. | | label | string | No | — | Etiqueta mostrada sobre el input. | | description | string | No | — | Texto de ayuda mostrado debajo de la etiqueta. | | minMonthYear | string | No | — | Mes/año mínimo seleccionable en formato YYYY-MM. | | maxMonthYear | string | No | — | Mes/año máximo seleccionable en formato YYYY-MM. | | apiBaseUrl | string | No | — | URL base que se antepone a updatePath. | | useAuthToken | boolean | No | false | Cuando es true, el request incluye el token de autorización. | | onEditStart | () => void | No | — | Llamado cuando comienza el modo edición. | | onEditSuccess | (updatedValue: string, newFormData: any) => void | No | — | Llamado tras un guardado exitoso. | | onEditError | (error: any) => void | No | — | Llamado al fallar el request; el valor se revierte. | | onEditCancel | () => void | No | — | Llamado al cancelar; el valor se revierte. | | editIcon | string | No | "pencil" | Nombre del ícono para el botón de edición. | | saveIcon | string | No | "check" | Nombre del ícono para el botón de guardar. | | cancelIcon | string | No | "close" | Nombre del ícono para el botón de cancelar. | | containerStyle | React.CSSProperties | No | — | Estilo del contenedor externo. | | inputStyle | React.CSSProperties | No | — | Estilo del elemento <input>. | | labelStyle | React.CSSProperties | No | — | Estilo del elemento <label>. | | descriptionStyle | React.CSSProperties | No | — | Estilo del <p> de descripción. |

Uso

Básico

import React, { useState } from 'react';
import EditableMonthYearField from '@/components/editable-fields/EditableMonthYearField';

export default function Example() {
  const [reportMonth, setReportMonth] = useState('2024-03');

  return (
    <EditableMonthYearField
      label="Report Month"
      name="report_month"
      value={reportMonth}
      updatePath="/v1/reports/12"
      apiBaseUrl="https://api.example.com"
      useAuthToken
      onEditSuccess={(updated) => setReportMonth(updated)}
    />
  );
}

Con restricciones

<EditableMonthYearField
  label="Billing Period"
  name="billing_period"
  value={billingPeriod}
  minMonthYear="2023-01"
  maxMonthYear="2025-12"
  updatePath="/v1/invoices/55"
  apiBaseUrl="https://api.example.com"
  useAuthToken
  onEditSuccess={(updated) => setBillingPeriod(updated)}
/>