# API general

- Human documentation: [https://docs.univer.ai/es-ES/guides/docs/features/core/general-api](https://docs.univer.ai/es-ES/guides/docs/features/core/general-api)

- Agent Markdown: [https://docs.univer.ai/es-ES/guides/docs/features/core/general-api.md](https://docs.univer.ai/es-ES/guides/docs/features/core/general-api.md)

- Requested language: `es-ES`

- Content language: `es-ES`

- Documentation version: `1.2.0`

- Source: [docs/features/core/general-api.es-ES.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/docs/features/core/general-api.es-ES.mdx)

---

La API Facade disponible en Univer depende del tipo de unidad actual y de los complementos registrados. Esta página presenta las API comunes de una aplicación Univer Docs.

## Importación

```typescript
import { FUniver } from '@univerjs/core/facade'

const univerAPI = FUniver.newAPI(univer)
```

## Comandos

La mayoría de las operaciones de Univer se registran en el sistema de comandos. Esta ruta de ejecución unificada permite funciones como deshacer, rehacer y la colaboración.

> [!NOTE]
> Para conocer el diseño con más detalle, consulte el [sistema de comandos de Univer](/blog/univer#command-system).

### Escuchar comandos

Use `Event.BeforeCommandExecute` para ejecutar lógica antes de un comando y `Event.CommandExecuted` para ejecutarla cuando termine.

```typescript
const beforeDisposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, ({ id, params }) => {
  console.log('Antes del comando:', id, params)
})

const afterDisposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id, params }) => {
  console.log('Comando ejecutado:', id, params)
})
```

Para impedir que se ejecute un comando, establezca `event.cancel` en `true` desde un listener de `BeforeCommandExecute`.

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, (event) => {
  if (event.id === 'doc.command.set-name') {
    event.cancel = true
  }
})
```

Los listeners devuelven un objeto `IDisposable`. Destrúyalos cuando ya no sean necesarios.

```typescript
beforeDisposable.dispose()
afterDisposable.dispose()
disposable.dispose()
```

### Ejecutar comandos

Si conoce el ID de un comando y sus parámetros, ejecútelo con `FUniver.executeCommand`. Por ejemplo, este comando de Docs cambia el nombre del documento activo:

```typescript
const document = univerAPI.getActiveDocument()

if (document) {
  await univerAPI.executeCommand('doc.command.set-name', {
    unitId: document.getId(),
    name: 'Notas del proyecto',
  })
}
```

## API de eventos

Los eventos expuestos a través de `univerAPI.Event` proceden del núcleo de Univer y de los complementos registrados en la aplicación. El núcleo aporta eventos de comandos y del ciclo de vida de los documentos; los complementos de Docs pueden ampliar esa superficie. Antes de usar un evento, compruebe que pertenece a un complemento registrado.

Consulte la [referencia de eventos de Facade](https://docs.univer.ai/es-ES/reference/facade/events.md) para ver los nombres y tipos de parámetros disponibles en la versión actual.

Use `addEvent` para suscribirse y destruya el objeto devuelto para cancelar la suscripción:

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id }) => {
  if (id === 'doc.command.set-name') {
    console.log('El nombre del documento ha cambiado')
  }
})

// Elimine el listener cuando ya no sea necesario
disposable.dispose()
```

## Deshacer y rehacer

```typescript
await univerAPI.undo()
await univerAPI.redo()
```

## Portapapeles del sistema

Después de registrar el complemento de interfaz de Docs, `copy` y `paste` actúan sobre la selección y la posición del cursor actuales del documento.

```typescript
await univerAPI.copy()
await univerAPI.paste()
```

> [!NOTE]
> Copiar y pegar dependen de la API nativa del portapapeles del navegador. Pueden fallar si la página no tiene el foco,
> si la llamada no se inicia mediante una acción del usuario o si no hay permiso para acceder al portapapeles. Consulte la
> [documentación de MDN](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API).

## UI

Consulte [Componentes de la interfaz de Docs](https://docs.univer.ai/es-ES/guides/docs/ui/components.md) para ampliar los menús, la barra de herramientas y otras zonas de la interfaz de Docs.

## WebSocket

Las instalaciones con presets exponen `univerAPI.createSocket(url)`. En modo complemento, instale `@univerjs/network`, registre `UniverNetworkPlugin` e importe primero su extensión Facade.

```typescript
import { UniverNetworkPlugin } from '@univerjs/network'
import '@univerjs/network/facade'

univer.registerPlugin(UniverNetworkPlugin)
```

Después puede suscribirse a los eventos del socket, enviar mensajes y cerrar la conexión:

```typescript
const socket = univerAPI.createSocket('wss://example.com/docs')

socket.open$.subscribe(() => {
  socket.send('hello')
})

socket.message$.subscribe((message) => {
  console.log('Mensaje WebSocket:', message.data)
})

socket.error$.subscribe((error) => {
  console.error('Error de WebSocket:', error)
})

socket.close()
```

## API de enumeración

Facade expone enumeraciones comunes mediante `univerAPI.Enum`:

```typescript
console.log(univerAPI.Enum.UniverInstanceType.UNIVER_DOC)
console.log(univerAPI.Enum.LifecycleStages.Rendered)
```

## API de métodos de utilidad

Facade expone utilidades compartidas mediante `univerAPI.Util`:

```typescript
console.log(univerAPI.Util.tools.isString('Univer Docs')) // true
```
