Mejorar la API de UndoManager
Hi @anatoli-dp, la posibilidad de ver el historial de deshacer sería realmente genial y ya estaba pensando en cómo ampliar el módulo UndoManager para permitir este tipo de funcionalidad mediante un plugin (por ejemplo, puedes renderizar la interfaz con el framework que prefieras). La pila UndoManager se actualiza con...
Lee la respuesta completa abajo ↓Pregunta
Una cosa que creo que añadiría una gran funcionalidad es una pila de historiales más detallada. Puedes conseguir la pila de deshacer y construir una especie de informe histórico con todas las ediciones que se hayan hecho, pero no está claro cuál fue cada edición (al menos para mí, así que si me falta algo, por favor házmelo saber). Quizá una descripción formulaica que sea como componente [nombre del componente] añadido/eliminado/editado en [ubicación en la página o componente añadido a], o componente [componente] texto editado, . . . (perdonad la descripción general, ni yo tengo ni idea de cómo lo expresaría) solo una breve descripción que pueda dar una visión general de cuál fue ese historial de deshacer o rehacer para cada objeto de la pila. Actualmente solo conozco el ID de cada elemento del historial, así que si esto es posible actualmente no sé cómo debería extraer esta información para crear una barra lateral de historial más allá del ID, así que por favor dadme una pista sobre qué buscar
¿Hay alguna alternativa en la última versión?
- Sí (describe la alternativa)
- No
¿Está relacionado con algún problema?
- Sí (Da un enlace al número)
- No
Respuestas (4)
Hi @anatoli-dp, la posibilidad de ver el historial de deshacer sería realmente genial y ya estaba pensando en cómo ampliar el módulo UndoManager para permitir este tipo de funcionalidad mediante un plugin (por ejemplo, puedes renderizar la interfaz con el framework que prefieras). La pila UndoManager se actualiza con un nuevo objeto UndoAction (que contiene información sobre la acción) en cualquier cambio de modelos/colecciones escuchadas (componentes, reglas css, etc.). Algo que vale la pena señalar es que un solo cambio puede generar múltiples UndoActions: '''js Esto generará una UndoAction para un nuevo componente y otra para una nueva regla CSS editor.addComponents('
<div class="test">Hola</div> <style>.test{color: red}</style> `); ``` Aquí tienes un [ejemplo](https://github.com/artf/grapesjs/blob/80462964dd7412f763f8a878763d9b0380f1c69d/src/undo_manager/index.js#L312) de cómo podrías recuperar un array de UndoActions agrupadas (el método privado que hice durante la última refactorización).Una cosa que hay que entender es cómo identificar cada grupo de UndoActions con la descripción/etiqueta adecuada (como has descrito).
Sí, sé cómo acceder a la pila, solo que no sé cómo interpretarlo para dar una descripción más significativa al usuario final
simplemente no sé cómo interpretarlo para dar una descripción más significativa al usuario final
Cada UndoAction (cada instancia de la pila) te indica el 'tipo' de acción (por ejemplo, 'añadir', 'eliminar', 'reiniciar', 'cambiar') y detalles sobre el modelo actualizado (por ejemplo, Component, CssRule, etc.). Puedes intentar leer esos datos, pero yo pensaba más en cómo hacer que cada operación sea fácilmente reconocible.
Gracias por informar de esto, @anatoli-dp.
Gran sugerencia sobre [Funcionalidad]: ¡Mejorar la API de UndoManager! Aunque esta función específica aún no está en la API principal, existen varias formas de lograr un comportamiento similar.
Usando el sistema de eventos: '''javascript editor.on('component:update', (component) => { Tu lógica aquí });
**Enfoques alternativos:**
- Escuchar 'selector:add' para cambios en el selector CSS
- Usar 'selector:custom' para reglas personalizadas
- Aprovechar los eventos 'change:*' para un seguimiento detallado
- Crear un plugin que extienda el editor con esta capacidad
**Lo hace oficial:**
Si esta función beneficiaría a muchos usuarios, considera abrir una Solicitud formal de Funcionalidad en el repositorio GrapesJS con:
- Un caso de uso detallado
- Ejemplo de código que muestra el comportamiento deseado
- Por qué esto es importante para tu flujo de trabajo
El equipo central es receptivo a solicitudes de funcionalidades bien motivadas respaldadas por casos de uso reales.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #5631
Deshacer el add() del gestor no funciona como se esperaba
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome v91 Enlace de demo reproducible --...
Issue #4947
El administrador de deshacer no funciona correctamente para deshacer una acción de eliminación
Versión GrapesJS[X] Confirmo que se debe usar la última versión de GrapesJS¿Qué navegador usas? Chrome - versión 110.0.5481.100 (Versión of...
Issue #3128
HAZAÑA: Soltar un componente en la posición en que se hace clic
¿Qué intentas añadir a GrapesJS? Cuando se deja caer un componente, mantente en la posición en la que se hace clic con el ratón. Describe t...
Issue #5632
Añadir un cambio al desadministrador
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome v91 Enlace de demo reproducible ht...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.