Plan Pages Canvas

Ecosistema completo para organización y gestión de contenido con interfaces espaciales

Plan de Migración Completo

Fase 1: Fundamentos (Sprint 1)

Objetivo: Establecer bases sin romper funcionalidad actual

  1. Canvas Base:
@Component({
  standalone: true
})
export abstract class BaseCanvasComponent {
  @Input() config!: CanvasConfig;
  @Input() widgets: Widget[] = [];
}
  1. Modelos Base:
export interface CanvasConfig {
  type: 'page' | 'container';
  layout: ResponsivePageLayout;
  gridEnabled?: boolean;
  zoom?: number;
}

export interface EditorConfig {
  type: 'page' | 'container';
  canvasConfig: CanvasConfig;
  mode?: EditorMode;
}
  1. Editor Base:
@Component({
  standalone: true
})
export abstract class EditorBaseComponent {
  @Input() config?: EditorConfig;
}

Testing Fase 1:

Fase 2: Migración de Canvas (Sprint 1-2)

Objetivo: Implementar nuevo sistema de canvas

  1. Page Canvas:
@Component({
  selector: 'lib-page-canvas',
  standalone: true
})
export class PageCanvasComponent extends BaseCanvasComponent {
  // Migrar lógica actual
}
  1. Container Canvas:
@Component({
  selector: 'lib-container-canvas',
  standalone: true
})
export class ContainerCanvasComponent extends BaseCanvasComponent {
  // Versión específica para containers
}
  1. Canvas Service:
@Injectable()
export class CanvasService {
  // Lógica común de canvas
  // Gestión de viewport
}

Testing Fase 2:

Fase 3: Editores Especializados (Sprint 2)

Objetivo: Implementar editores específicos

  1. Page Editor:
@Component({
  selector: 'lib-page-editor',
  standalone: true
})
export class PageEditorComponent extends EditorBaseComponent {
  // Migrar editor actual aquí
}
  1. Container Editor:
@Component({
  selector: 'lib-container-editor',
  standalone: true
})
export class ContainerEditorComponent extends EditorBaseComponent {
  // Versión para containers
}

Testing Fase 3:

Fase 4: Servicios y Estado (Sprint 2-3)

Objetivo: Refactorizar servicios existentes

  1. Editor Service Base:
@Injectable()
export abstract class EditorBaseService {
  // Funcionalidad común
}
  1. Servicios Especializados:
@Injectable()
export class PageEditorService extends EditorBaseService {
  // Lógica específica de páginas
}

Testing Fase 4:

Fase 5: Facade y Punto de Entrada (Sprint 3)

Objetivo: Crear interfaz unificada

  1. Editor Facade:
@Component({
  selector: 'lib-editor',
  standalone: true,
  template: `
    @switch (editorType()) {
      @case ('page') {
        <lib-page-editor [config]="config()" />
      }
      @case ('container') {
        <lib-container-editor [config]="config()" />
      }
    }
  `
})
export class EditorFacadeComponent {
  @Input() editorType = signal<'page' | 'container'>('page');
  @Input() config = signal<EditorConfig | null>(null);
}

Testing Fase 5:

Fase 6: Migración y Optimización (Sprint 3-4)

Objetivo: Migrar usos existentes y optimizar

  1. Actualizar Usos:
@Component({
  template: `
    <lib-editor
      [editorType]="'page'"
      [config]="pageConfig()"
    />
  `
})
  1. Optimizaciones:

Testing Fase 6:

Plan de Releases:

  1. Release 1 (Sprint 1):
  1. Release 2 (Sprint 2):
  1. Release 3 (Sprint 3):
  1. Release 4 (Sprint 4):

Consideraciones:

  1. Por Sprint:
  1. Técnicas:
  1. Testing: