Esta documentación está en fase de desarrollo y puede contener errores.

Inputs y formularios

Inputs para capturar y editar datos: búsqueda con debounce, subida de ficheros, editor de texto rico, editor de imagen, listas de etiquetas, pares clave/valor, pasos y el formulario dinámico de Flex.

Lo que el usuario teclea, pega o sube. Esta familia agrupa los inputs autónomos de DinaZen (una caja de búsqueda, un botón de subida, un editor de etiquetas, un recortador de imagen…). A ellos se suma el sistema de formularios dinámicos de Flex, que pinta una ficha completa a partir de un GUID de sección. Recurre a ella cuando montas una pantalla de alta o edición y no quieres pelearte con cada <input> a mano.

Casi todos son componentes de dos vías: les pasas el dato con Value y te avisan del cambio con ValueChanged. En Razor eso se escribe con @bind-Value=@Modelo.Campo.

Los que suben ficheros (DnzFileUploaderButton, DnzImageEditor) hablan con un endpoint de presign que firma la subida directa a S3. El fichero no viaja por SignalR. Por defecto apuntan a /file/upload/sign.


DnzSearchInput

Caja de búsqueda con icono de lupa y debounce de 500 ms: no dispara en cada tecla, espera a que el usuario pare de escribir. Ideal para filtrar una tabla o una lista sin machacar el servidor.

<DnzSearchInput Placeholder="Buscar cliente..." BounceValueChanged=@OnBuscar />

@code {
    private string _filtro = "";

    private async Task OnBuscar(string texto)
    {
        _filtro = texto;
        await RecargarListaAsync();
    }
}

Parámetros

ParámetroTipoPor defectoQué hace
ValuestringTexto actual del campo.
Placeholderstring"Buscar..."Texto guía cuando está vacío.
BounceValueChangedEventCallback<string>Se dispara 500 ms después de la última tecla, con el texto escrito.
Classstring""Clases CSS del contenedor.
Stylestring""Estilo inline del contenedor.

Usa BounceValueChanged, no ValueChanged: la gracia de este componente es que ya trae el debounce hecho. Si enganchas tu recarga ahí, solo se ejecuta cuando el usuario deja de teclear.

Los atributos extra que pongas (por ejemplo autofocus o maxlength) se pasan tal cual al elemento <input> raíz.


DnzFileUploaderButton

Botón que abre el selector nativo, sube los ficheros a S3 (vía presign + Uppy) y te devuelve los DinaupFileDTO ya registrados en Dinaup. Si subes una sola imagen, abre antes el editor de imagen.

<DnzFileUploaderButton Client=@Cliente OnFilesUploaded=@OnFicherosSubidos AcceptExtensions=@(new[] { ".pdf", ".docx", ".xlsx" }) MaxFiles="5" MaxSizeBytes=@(50 * 1024 * 1024) ButtonText="Adjuntar documento" ButtonIcon="upload_file" OnError=@OnErrorSubida />

@code {
    private async Task OnFicherosSubidos(List<DinaupFileDTO> ficheros)
    {
        foreach (var f in ficheros)
            Factura.Adjuntos.Add(f);
        await InvokeAsync(StateHasChanged);
    }

    private void OnErrorSubida(string mensaje)
    {
        NotificationService.Notify(NotificationSeverity.Error, "Subida", mensaje);
    }
}

Parámetros

ParámetroTipoPor defectoQué hace
ClientDinaupClientCCliente que registra el fichero subido (File_UploadURLAsync). Necesario en modo por lotes.
PresignEndpointstring"/file/upload/sign"Endpoint que firma la subida a S3.
OnFilesUploadedEventCallback<List<DinaupFileDTO>>Se dispara cuando termina el lote, con los ficheros ya registrados.
OnEachFileUploadedEventCallback<PresignUploadResult>Se dispara por cada fichero subido. Si lo enganchas, tú gestionas el registro y se salta el lote.
AcceptExtensionsstring[][]Extensiones permitidas (.pdf, .png...). Vacío = todas.
MaxSizeByteslong157286400 (150 MB)Tamaño máximo por fichero.
MaxFilesint1000Número máximo de ficheros por subida.
DisabledboolfalseInhabilita el botón.
ButtonTextstringTexto del botón.
ButtonIconstring"attach_file"Icono del botón.
ButtonStyleButtonStyleSecondaryEstilo Radzen del botón.
ButtonSizeButtonSizeSmallTamaño Radzen del botón.
ButtonVariantVariantOutlinedVariante visual del botón.
UseDashboardboolfalseAbre el dashboard de Uppy (drag&drop) en vez de un botón simple.
NotestringNota opcional para el dashboard.
EditBeforeUploadbooltrueSi subes 1 imagen, la pasa por el editor antes de subir.
OnErrorEventCallback<string>Se dispara con el mensaje cuando falla una subida o el registro.

Client es opcional, pero si no lo pasas en modo por lotes, los ficheros suben a S3 sin registrarse en Dinaup. Para registrar manualmente engancha OnEachFileUploaded y haz tú la llamada.


DnzFileName

Pinta un fichero ya subido: icono según su extensión, nombre, tamaño y un botón de descarga o una acción propia. Es lo que enseñas en una lista de adjuntos; no sube nada.

@foreach (var adjunto in Factura.Adjuntos)
{
    <DnzFileName DnzFileNameDisplay=@adjunto.Name FileSize=@adjunto.SizeInBytes DownloadURL=@adjunto.url_original Horizontal="true" @key=@adjunto.ID />
}

Parámetros

ParámetroTipoPor defectoQué hace
DnzFileNameDisplaystring""Nombre del fichero. La extensión decide el icono.
FileSizelong?Tamaño en bytes. Se formatea solo (KB, MB...).
DownloadURLstring""URL de descarga. Si la pasas, pinta el botón de descarga.
OnClickEventCallbackAcción propia. Solo se usa si no hay DownloadURL.
OnClick_Iconstring"arrow_right"Icono del botón de la acción propia.
HorizontalboolfalseDisposición en línea, más compacta.
IsCompactboolfalseVariante mínima (icono + nombre + tamaño en una fila).

DnzHtmlEditor

Editor de texto rico (Radzen HtmlEditor) con la barra de herramientas de Dinaup. Para descripciones largas, plantillas de email o notas de un cliente.

<DnzHtmlEditor @bind-Value=@Plantilla.Cuerpo EditorStyle="min-height:400px;" UploadUrl="upload/image" />

Parámetros

ParámetroTipoPor defectoQué hace
ValuestringHTML editado. Úsalo con @bind-Value.
ValueChangedEventCallback<string>Se dispara al cambiar el contenido.
Contextstring""Contexto que recibe la barra (placeholders/variables disponibles).
EditorStylestring"min-height:300px;"Estilo del área de edición (altura mínima, etc.).
UploadUrlstring"upload/image"Endpoint donde sube las imágenes pegadas/insertadas.
Classstring""Clases CSS del contenedor.
Stylestring""Estilo inline del contenedor.

DnzImageEditor

Editor de imagen completo embebido: recorte, rotación, volteo, ajustes, mejora automática y herramientas externas (IDnzImageTool). Trabaja sobre una URL o sobre byte[]. Lo normal es usarlo dentro del diálogo (ver abajo), pero puedes incrustarlo suelto.

<DnzImageEditor @ref=_editor ImageUrl=@Producto.FotoUrl PresignEndpoint="/file/upload/sign" OnSave=@OnImagenGuardada Style="height:600px;" />

@code {
    private DnzImageEditor _editor;

    private async Task Guardar()
    {
        var bytes = await _editor.GetResultBytesAsync();
        // ...persistir bytes
    }
}

Parámetros

ParámetroTipoPor defectoQué hace
ImageUrlstringURL de la imagen a cargar.
ImageBytesbyte[]Imagen en bytes, alternativa a ImageUrl.
PresignEndpointstringEndpoint de presign para las herramientas que hacen round-trip por S3 (evita pasar la imagen por SignalR).
ExternalToolsIEnumerable<IDnzImageTool>Herramientas extra que se añaden a la barra (p. ej. quitar fondo).
OnSaveEventCallback<byte[]>Se dispara al guardar, con los bytes del resultado.
OnCancelEventCallbackSe dispara al cancelar.
StylestringEstilo inline (sobre todo la altura).

Para sacar el resultado tienes dos métodos en el @ref: GetResultBytesAsync() devuelve el byte[] del canvas, y UploadResultToS3Async(endpoint) lo sube directo a S3 y te da la URL. Úsalos desde el padre o el diálogo.


DnzImageEditorDialog

El editor de imagen ya envuelto en un diálogo modal con Aceptar/Cerrar. No lo pones en el markup: lo abres con un método estático y te devuelve el resultado. Es la forma recomendada de editar imágenes.

@code {
    private async Task EditarFoto()
    {
        var bytes = await DnzImageEditorDialog.OpenAsync(DialogService, imageUrl: Producto.FotoUrl);
        if (bytes.IsNull()) return; // cancelado
        // ...persistir bytes
    }
}
@code {
    private async Task EditarYSubir()
    {
        var result = await DnzImageEditorDialog.OpenAndUploadToS3Async(DialogService, "/file/upload/sign", imageUrl: Producto.FotoUrl);
        if (result.IsNull()) return; // cancelado
        Producto.FotoUrl = result.Url;
    }
}

Parámetros

ParámetroTipoPor defectoQué hace
ImageUrlstringURL de la imagen a editar.
ImageBytesbyte[]Imagen en bytes, alternativa a ImageUrl.
PresignEndpointstringEndpoint de presign. Si lo pasas, Aceptar sube a S3 y devuelve PresignUploadResult.

Métodos estáticos

Método estáticoDevuelvePara qué
OpenAsync(dialogService, imageUrl, imageBytes)byte[] (o null si cancela)Edita y devuelve los bytes del resultado.
OpenAndUploadToS3Async(dialogService, presignEndpoint, imageUrl)PresignUploadResult (o null)Edita, sube a S3 y devuelve la URL final. Sin imagen por SignalR.

DnzTagListEditor

Editor de una lista de etiquetas (List<string>). Se escribe y se pulsa Enter para añadir, click en la X para quitar. Admite pegar varias separadas por coma o punto y coma, validación por valor y transformación.

<DnzTagListEditor @bind-Value=@Producto.Etiquetas Title="Etiquetas" Icon="sell" Placeholder="Añade una etiqueta y pulsa Enter..." Transform=@(v => v.Trim().ToLower()) />

Parámetros

ParámetroTipoPor defectoQué hace
ValueList<string>new()La lista de etiquetas. Úsalo con @bind-Value.
ValueChangedEventCallback<List<string>>Se dispara al añadir o quitar una etiqueta.
Titlestring""Título de la cabecera. Vacío = sin cabecera ni botón Clear.
Iconstring""Icono junto al título.
Placeholderstring"Add item..."Texto guía del input.
EmptyTextstring"No items"Texto cuando no hay etiquetas.
ReadOnlyboolfalseSolo lectura (oculta el input y las X).
ValidatorFunc<string, string>Devuelve un mensaje de error si el valor no vale, o vacío si vale.
TransformFunc<string, string>Transforma cada valor antes de añadirlo (Trim, ToLower...).
AllowMultiPastebooltruePermite pegar varias etiquetas de golpe separadas por coma, ;, salto de línea o tabulador.
Classstring""Clases CSS del contenedor.
Stylestring""Estilo inline del contenedor.

DnzJsonKVEditor

Editor de pares clave/valor que entra y sale como JSON (string). Para metadatos sueltos, configuración de una integración, cabeceras HTTP... Trae copiar, pegar JSON e importar. Usa notación con punto (app.apikey) para agrupar visualmente.

<DnzJsonKVEditor @bind-Value=@Integracion.MetadatosJson />

Parámetros

ParámetroTipoPor defectoQué hace
Valuestring"{}"El JSON con los pares. Úsalo con @bind-Value.
ValueChangedEventCallback<string>Se dispara al editar, añadir o quitar un par. Devuelve el JSON indentado.
ReadOnlyboolfalseSolo lectura.
Classstring""Clases CSS del contenedor.
Stylestring""Estilo inline del contenedor.

DnzStepper

Lista vertical de pasos numerados con la línea que los une. Es presentacional: muestra un proceso ("cómo empezar", "qué pasa después"), no controla un wizard ni navega. Los pasos van dentro como DnzStepperStep.

<DnzStepper>
    <DnzStepperStep Index="1">
        <strong>Crea la factura</strong>
        <p>Elige cliente y añade las líneas.</p>
    </DnzStepperStep>
    <DnzStepperStep Index="2">
        <strong>Revisa los importes</strong>
        <p>Comprueba bases, IVA y total.</p>
    </DnzStepperStep>
    <DnzStepperStep Index="3">
        <strong>Emite y envía</strong>
        <p>Genera el PDF y mándalo al cliente.</p>
    </DnzStepperStep>
</DnzStepper>

Parámetros

ParámetroTipoPor defectoQué hace
ChildContentRenderFragmentLos DnzStepperStep que componen la lista.

DnzStepperStep

Un paso suelto dentro del DnzStepper: el círculo numerado y el contenido al lado.

<DnzStepperStep Index="2">
    <strong>Configura el almacén</strong>
    <p>Define ubicaciones y stock inicial.</p>
</DnzStepperStep>

Parámetros

ParámetroTipoPor defectoQué hace
Indexint0Número que se pinta en el círculo.
ChildContentRenderFragmentContenido del paso (título, descripción...).

DnzFormView

El formulario dinámico de Flex. No declaras campos: le pasas el GUID de una sección y el cliente, y pinta la ficha completa (cabecera, pestañas, controles, botones, guardar/cancelar) tal cual está definida en Dinaup. Es lo que usas para dar de alta o editar un registro de cualquier sección sin escribir un solo <input>.

<DnzFormView Client=@Cliente SectionId=@SeccionClientesId DatoId=@ClienteId OnClosed=@OnFichaCerrada />

@code {
    private void OnFichaCerrada(DinaupFormResult result)
    {
        if (result.Reason == DinaupFormCloseReason.Saved)
            RecargarLista();
    }
}

Parámetros

ParámetroTipoPor defectoQué hace
ClientDinaupClientCObligatorio. Cliente DinaupSL ya inicializado.
SectionIdstring""Obligatorio. GUID de la sección a cargar.
DatoIdstring""GUID del registro a editar. Vacío = formulario de alta nuevo.
UserIdstring""ID del usuario (opcional).
OnFormatearCodigoFunc<string, Task<string>>Callback para formatear códigos contables (subcuenta).
OnClosedEventCallback<DinaupFormResult>Se dispara al cerrar el formulario, con el resultado (guardado, cancelado...).
OnAnnotationOpenEventCallback<DinaupAnnotationRequest>Se dispara al abrir comentarios/archivos/galería. La app host puede personalizar el diálogo.
WindowIdstringID de la ventana flotante que lo contiene. Si tiene valor, el form vive dentro de una ventana.
PreFillValuesDictionary<string, string>Valores a precargar en un alta nueva (clave de campo → valor). Solo si DatoId está vacío.
PreFillListList<Dictionary<string, string>>Filas a precargar en los campos de lista de un alta nueva. Solo si DatoId está vacío.
AttachFileIdGuidID de un fichero a adjuntar automáticamente al guardar.

Los formularios de Flex requieren un ancho mínimo de 1.000 px. No hay versión responsive más pequeña: por debajo aparece scroll horizontal. Para pantallas pequeñas, escala el contenedor padre con zoom o transform: scale(...).

En vez de incrustarlo en el markup, lo habitual es abrirlo como modal o como ventana flotante con sus helpers estáticos:

@code {
    private async Task EditarCliente(string clienteId)
    {
        var result = await DnzFormView.OpenAsync(DialogService, Cliente, SeccionClientesId, clienteId);
        if (result.Reason == DinaupFormCloseReason.Saved)
            RecargarLista();
    }
}

Firma: OpenAsync(DialogService dialogService, DinaupClientC client, string sectionId, string datoId = "", string title = "", string width = "1000px", string height = "85%") → devuelve Task<DinaupFormResult>.

@code {
    private void AbrirFichaFlotante(string clienteId)
    {
        DnzFormView.OpenAsWindow(WindowManager, Cliente, SeccionClientesId, clienteId, title: "Cliente");
    }
}

Firma: OpenAsWindow(DnzWindowManagerService windowManager, DinaupClientC client, string sectionId, string datoId = "", string title = "", string icon = "") → devuelve el windowId (string).


DnzFormTab

Es la pieza interna que DnzFormView usa para renderizar cada pestaña del formulario: el título, los contenedores, los controles y los botones de esa pestaña. No lo montas tú directamente; lo gestiona DnzFormView. Lo listamos para que, si depuras un formulario de Flex, sepas qué estás viendo en el árbol de componentes.

@* DnzFormView monta esto por cada pestaña; no se usa suelto *@
<DnzFormTab Tab=@tab Client=@Cliente OnTabChanged=@HandleTabChange OnButtonClick=@HandleButtonClick />

Parámetros

ParámetroTipoPor defectoQué hace
TabVirtualFormDTO.TabObligatorio. La pestaña a renderizar (controles, contenedores y botones).
ClientDinaupClientCObligatorio. Cliente DinaupSL ya inicializado.
OnTabChangedEventCallback<VirtualFormDTO.Tab>Se dispara cuando cambia un control de la pestaña.
OnButtonClickEventCallback<string>Se dispara al pulsar un botón de la pestaña.
OnDeleteItemPrimaryListEventCallback<string>Se dispara al borrar un ítem de la lista principal.
OnMostrarDialogRequiereGuardarEventCallback<string>Se dispara cuando una acción exige guardar primero.
OnOpenListItemEventCallback<VirtualFormDTO.FormDetail>Se dispara al abrir un ítem de una lista.
OnAddItemEventCallbackSe dispara al añadir un ítem a una lista.
OnFormatearCodigoFunc<string, Task<string>>Callback para formatear códigos contables.

Relacionado

  • Selectores — elegir opciones (enum, memoria o catálogo remoto), con DnzSearchInput por dentro.
  • Tablas e informes — pintar un informe del SDK como tabla, tarjetas o gráfica.
  • Cookbook de patrones — recetas que combinan estos inputs con el SDK.
  • Cliente Dinaup — conexión, WriteOperations y File_UploadURLAsync para persistir lo que capturan estos inputs.
  • Informes de Dinaup Flex — el origen de datos que rellenan las tablas y los formularios.

Volver a Componentes · DinaZen · SDK .NET

On this page