218 lines
6.0 KiB
Markdown
218 lines
6.0 KiB
Markdown
# DockView Implementation con Mantine
|
|
|
|
Esta implementación integra **DockView** con **Mantine** para crear una interfaz de usuario modular y flexible con paneles que se pueden mover, redimensionar e interactuar entre ellos.
|
|
|
|
## 🚀 Características
|
|
|
|
- **Paneles Modulares**: Docks independientes que se pueden mover y reorganizar
|
|
- **Comunicación Entre Docks**: Los docks pueden intercambiar información entre sí
|
|
- **Interfaz Responsive**: Se adapta a diferentes tamaños de pantalla
|
|
- **Temas Personalizados**: Integración completa con el sistema de temas de Mantine
|
|
- **TypeScript**: Tipado completo para mayor seguridad
|
|
|
|
## 📁 Estructura de Archivos
|
|
|
|
```
|
|
src/
|
|
├── components/
|
|
│ ├── DockViewMain.tsx # Componente principal de DockView
|
|
│ ├── dockview.css # Estilos personalizados
|
|
│ └── docks/ # Componentes de dock individuales
|
|
│ ├── TaskDock.tsx # Gestor de tareas
|
|
│ ├── PropertiesDock.tsx # Panel de propiedades
|
|
│ ├── ConsoleDock.tsx # Consola de logs
|
|
│ └── FileExplorerDock.tsx # Explorador de archivos
|
|
└── pages/
|
|
└── DockView.page.tsx # Página dedicada a DockView
|
|
```
|
|
|
|
## 🎯 Docks Disponibles
|
|
|
|
### 1. TaskDock (Gestor de Tareas)
|
|
- Crear, editar y eliminar tareas
|
|
- Marcar tareas como completadas
|
|
- Notificaciones a otros docks cuando cambian las tareas
|
|
|
|
### 2. PropertiesDock (Panel de Propiedades)
|
|
- Editar propiedades de elementos seleccionados
|
|
- Controles de color, opacidad, tamaño
|
|
- Vista previa en tiempo real
|
|
|
|
### 3. ConsoleDock (Consola)
|
|
- Mostrar logs del sistema
|
|
- Exportar logs a archivo
|
|
- Filtrado por tipo (info, warning, error, success)
|
|
|
|
### 4. FileExplorerDock (Explorador de Archivos)
|
|
- Navegación por estructura de archivos
|
|
- Crear/eliminar archivos y carpetas
|
|
- Notificar selección de archivos a otros docks
|
|
|
|
## 🔄 Comunicación Entre Docks
|
|
|
|
Los docks se comunican a través de un sistema de contexto compartido:
|
|
|
|
```typescript
|
|
interface DockCommunicationContext {
|
|
selectedFile: any;
|
|
properties: any;
|
|
tasks: any[];
|
|
logs: any[];
|
|
updateSelectedFile: (file: any) => void;
|
|
updateProperties: (props: any) => void;
|
|
updateTasks: (tasks: any[]) => void;
|
|
addLog: (log: any) => void;
|
|
}
|
|
```
|
|
|
|
### Ejemplo de Comunicación
|
|
Cuando seleccionas un archivo en el FileExplorerDock:
|
|
1. Se actualiza `selectedFile` en el contexto
|
|
2. Se envía un log a ConsoleDock
|
|
3. PropertiesDock puede mostrar propiedades del archivo seleccionado
|
|
|
|
## 🎨 Personalización
|
|
|
|
### Temas
|
|
Los estilos están definidos en `dockview.css` y siguen las variables CSS de Mantine:
|
|
|
|
```css
|
|
.dockview-theme-light {
|
|
--dv-activecontainer-border: #228be6;
|
|
--dv-tab-active-color: #228be6;
|
|
--dv-tab-active-border: #228be6;
|
|
}
|
|
```
|
|
|
|
### Agregar Nuevos Docks
|
|
|
|
1. Crear el componente del dock en `src/components/docks/`
|
|
2. Crear un wrapper component para la integración
|
|
3. Registrar en el objeto `components` de `DockViewMain.tsx`
|
|
4. Agregar al layout inicial en `onReady`
|
|
|
|
```typescript
|
|
// Nuevo dock
|
|
const MyCustomDockWrapper = (props: IDockviewPanelProps) => {
|
|
return <MyCustomDock onDataChange={handleDataChange} />;
|
|
};
|
|
|
|
// Registrar
|
|
const components = {
|
|
tasks: TaskDockWrapper,
|
|
properties: PropertiesDockWrapper,
|
|
console: ConsoleDockWrapper,
|
|
fileExplorer: FileExplorerDockWrapper,
|
|
myCustom: MyCustomDockWrapper, // Nuevo dock
|
|
};
|
|
```
|
|
|
|
## 🛠️ Uso
|
|
|
|
### Iniciar la aplicación
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### Navegar a DockView
|
|
- Visita `http://localhost:5174/`
|
|
- Haz clic en "Abrir DockView"
|
|
- O navega directamente a `http://localhost:5174/dockview`
|
|
|
|
### Interacciones Disponibles
|
|
- **Arrastrar pestañas**: Reorganiza los paneles
|
|
- **Redimensionar**: Arrastra los separadores entre paneles
|
|
- **Cerrar paneles**: Usa el botón X en las pestañas
|
|
- **Crear nuevos paneles**: (Funcionalidad extendible)
|
|
|
|
## 📝 Configuración del Layout
|
|
|
|
El layout inicial se configura en el método `onReady`:
|
|
|
|
```typescript
|
|
const onReady = (event: DockviewReadyEvent) => {
|
|
// Panel principal (izquierda)
|
|
const panel1 = event.api.addPanel({
|
|
id: 'file-explorer',
|
|
component: 'fileExplorer',
|
|
title: 'Explorador',
|
|
});
|
|
|
|
// Panel a la derecha
|
|
const panel2 = event.api.addPanel({
|
|
id: 'properties',
|
|
component: 'properties',
|
|
title: 'Propiedades',
|
|
position: { direction: 'right', referencePanel: panel1 },
|
|
});
|
|
|
|
// Más paneles...
|
|
};
|
|
```
|
|
|
|
## 🔧 Configuración Avanzada
|
|
|
|
### Estado Persistente
|
|
Para guardar el estado del layout entre sesiones:
|
|
|
|
```typescript
|
|
// Guardar estado
|
|
const layoutState = api.toJSON();
|
|
localStorage.setItem('dockview-layout', JSON.stringify(layoutState));
|
|
|
|
// Restaurar estado
|
|
const savedState = localStorage.getItem('dockview-layout');
|
|
if (savedState) {
|
|
api.fromJSON(JSON.parse(savedState));
|
|
}
|
|
```
|
|
|
|
### Eventos Personalizados
|
|
```typescript
|
|
// Escuchar cambios en el layout
|
|
api.onDidLayoutChange(() => {
|
|
console.log('Layout changed');
|
|
});
|
|
|
|
// Escuchar cuando se activa un panel
|
|
api.onDidActiveGroupChange((event) => {
|
|
console.log('Active group changed:', event.group);
|
|
});
|
|
```
|
|
|
|
## 🐛 Solución de Problemas
|
|
|
|
### Problemas Comunes
|
|
|
|
1. **Paneles no se muestran correctamente**
|
|
- Verifica que el componente esté registrado en `components`
|
|
- Asegúrate de que el wrapper component retorne JSX válido
|
|
|
|
2. **Comunicación entre docks no funciona**
|
|
- Verifica que los callbacks estén pasándose correctamente
|
|
- Revisa que el contexto se actualice en `useEffect`
|
|
|
|
3. **Estilos no se aplican**
|
|
- Asegúrate de importar `dockview.css`
|
|
- Verifica que las variables CSS estén definidas
|
|
|
|
### Debugging
|
|
```typescript
|
|
// Agregar logs para debugging
|
|
console.log('Dock state:', dockCommunication);
|
|
console.log('API groups:', api.groups);
|
|
```
|
|
|
|
## 📚 Recursos
|
|
|
|
- [DockView Documentation](https://dockview.dev/)
|
|
- [Mantine Documentation](https://mantine.dev/)
|
|
- [React TypeScript](https://react-typescript-cheatsheet.netlify.app/)
|
|
|
|
## 🤝 Contribuir
|
|
|
|
Para agregar nuevas funcionalidades:
|
|
1. Crea un nuevo dock en `src/components/docks/`
|
|
2. Implementa la comunicación necesaria
|
|
3. Agrega documentación
|
|
4. Prueba la integración con otros docks |