# Historial de edición

- Human documentation: [https://docs.univer.ai/es-ES/guides/sheets/features/edit-history](https://docs.univer.ai/es-ES/guides/sheets/features/edit-history)

- Agent Markdown: [https://docs.univer.ai/es-ES/guides/sheets/features/edit-history.md](https://docs.univer.ai/es-ES/guides/sheets/features/edit-history.md)

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

- Source: [sheets/features/edit-history.es-ES.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/edit-history.es-ES.mdx)

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-collaboration",
      "locale": "@univerjs/preset-sheets-collaboration/locales/es-ES",
      "style": "@univerjs/preset-sheets-collaboration/lib/index.css"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs-pro/edit-history",
      "facade": "@univerjs-pro/edit-history/facade"
    },
    {
      "client": "@univerjs-pro/edit-history-ui",
      "locale": "@univerjs-pro/edit-history-ui/locale/es-ES",
      "style": "@univerjs-pro/edit-history-ui/lib/index.css"
    },
    {
      "client": "@univerjs-pro/sheets-history"
    },
    {
      "client": "@univerjs-pro/sheets-history-ui",
      "locale": "@univerjs-pro/sheets-history-ui/locale/es-ES",
      "style": "@univerjs-pro/sheets-history-ui/lib/index.css"
    }
  ],
  "license": true,
  "server": true
}
```

Consulta versiones anteriores, compara su contenido y restaura una versión si tienes permiso. Para conservar versiones debes integrar un servicio de historial con Server SDK. Deshacer y rehacer en la sesión actual no requiere ese servicio.

## Preparar la colaboración y el historial

Completa la [integración colaborativa](https://docs.univer.ai/es-ES/server/collaboration/browser-integration.md) y la [configuración de la licencia](https://docs.univer.ai/es-ES/server/license.md). Después, conecta el almacenamiento y los permisos siguiendo los [módulos de extensión](https://docs.univer.ai/es-ES/server/collaboration/extensions.md) y el [ejemplo History](https://docs.univer.ai/es-ES/server/collaboration/examples.md#history). La colaboración básica no activa el historial automáticamente.

## Registrar los plugins de historial

Añade estos plugins a tu configuración de Sheets y colaboración. Si un preset colaborativo ya los registra, modifica esa configuración para evitar duplicados. La interfaz de historial de Sheets también necesita `UniverCollaborationClientUIPlugin`.

#### npm

```bash
npm install @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/sheets-history @univerjs-pro/sheets-history-ui
```

#### pnpm

```bash
pnpm add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/sheets-history @univerjs-pro/sheets-history-ui
```

#### yarn

```bash
yarn add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/sheets-history @univerjs-pro/sheets-history-ui
```

#### bun

```bash
bun add @univerjs-pro/edit-history @univerjs-pro/edit-history-ui @univerjs-pro/sheets-history @univerjs-pro/sheets-history-ui
```

```ts
import { UniverEditHistoryPlugin } from '@univerjs-pro/edit-history'
import EditHistoryLocale from '@univerjs-pro/edit-history-ui/locale/en-US'
import { UniverSheetsHistoryPlugin } from '@univerjs-pro/sheets-history'
import { UniverSheetsHistoryUIPlugin } from '@univerjs-pro/sheets-history-ui'
import HistoryLocale from '@univerjs-pro/sheets-history-ui/locale/en-US'
import { LocaleType, mergeLocales } from '@univerjs/core'

import '@univerjs-pro/edit-history-ui/lib/index.css'
import '@univerjs-pro/sheets-history-ui/lib/index.css'

const historyServerUrl = '/api/history'

univerAPI.loadLocales(LocaleType.EN_US, mergeLocales(EditHistoryLocale, HistoryLocale))
univer.registerPlugin(UniverEditHistoryPlugin, { historyServerUrl })
univer.registerPlugin(UniverSheetsHistoryPlugin)
univer.registerPlugin(UniverSheetsHistoryUIPlugin, {
  univerContainerId: 'app',
  historyServerUrl,
})
```

Sustituye `/api/history` por el prefijo de tu servicio de historial y usa el mismo valor en ambos `historyServerUrl`. `univerContainerId` debe coincidir con el ID DOM del contenedor del editor. Carga los recursos del idioma del editor.

## Compatibilidad móvil

Configure primero el [editor móvil](https://docs.univer.ai/es-ES/guides/sheets/getting-started/installation.md#mobile-support). En la inicialización en modo plugin de esta página, sustituya los registros de escritorio siguientes por las exportaciones móviles de los mismos paquetes **antes de abrir un documento**. Conserve modelos, estilos, traducciones e importaciones Facade; no registre ambas variantes.

| Paquete                           | Registro de escritorio        | Registro móvil                      |
| --------------------------------- | ----------------------------- | ----------------------------------- |
| `@univerjs-pro/sheets-history-ui` | `UniverSheetsHistoryUIPlugin` | `UniverSheetsHistoryMobileUIPlugin` |

## Consultar y restaurar versiones

Edita celdas, fórmulas o formatos, espera la confirmación colaborativa y abre el historial desde el menú del editor. Comprueba la lista, las diferencias y la persistencia tras reiniciar el servicio. La restauración modifica el documento compartido: el servidor debe comprobar los permisos y otra sesión colaborativa debe recibir la actualización.

## Comparar snapshots

Para crear una pantalla de revisión o proporcionar cambios a un AI Agent, usa `compareUnitData()` o prepara el resultado una sola vez con `prepareUnitComparison()`. Registra el plugin History del producto e importa la entrada Facade. Proporciona dos snapshots completos del mismo documento en `beforeSnapshot` y `afterSnapshot`. Esta comparación de solo lectura no necesita un servicio de historial y no restaura ni combina contenido.

```ts
import { UnitComparisonDetailLevel, UnitComparisonFidelity } from '@univerjs-pro/edit-history'
import { UniverInstanceType } from '@univerjs/core'

import '@univerjs-pro/edit-history/facade'

const comparison = univerAPI.prepareUnitComparison({
  comparisonId: 'review-1',
  unitId: beforeSnapshot.id,
  type: UniverInstanceType.UNIVER_SHEET,
  fidelity: UnitComparisonFidelity.SNAPSHOT,
  leftData: beforeSnapshot,
  rightData: afterSnapshot,
})
const overview = comparison.query({ detail: UnitComparisonDetailLevel.SUMMARY })
const scope = overview.scopes[0]
const page = comparison.query({ scope, offset: 0, limit: 100 })
console.log(page.items, page.page.hasMore, page.diagnostics)
```

Lee `scopes` para obtener las vistas disponibles y pasa un ámbito a `query()` para filtrar sin recalcular las diferencias. Cada página devuelve 100 elementos de forma predeterminada, con un máximo de 1.000. Usa `page.hasMore` y `offset` para continuar. `summary` describe siempre la comparación completa, incluso al filtrar elementos. Comprueba `diagnostics.readiness` y `diagnostics.codes` antes de tratar el resultado como completo. Para Node.js o una CLI sin editor, consulta la [API de comparación sin interfaz](https://docs.univer.ai/es-ES/reference/packages/plugins/univerjs-pro/edit-history.md#headless-comparison).
