Teniendo algunos problemas al insertar iframes usando el API Ember de Discourse

Aquí tienes algunos puntos:

  • La configuración del sitio se ha trasladado a un servicio:

    const siteSettings = container.lookup('service:site-settings');
    if (!siteSettings.docuss_enabled) {
      return;
    }
    
  • location:discourse-locationlocation:history

  • afterRender().then(() => onAfterRender(container));
    afterRender es un decorador que pones encima de un método en una clase de componente; no debes usarlo directamente como una función.
    Creo que quieres (no parece ser necesario), posiblemente:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • Tienes una gran parte de código fuera de la función composeStateChanged, parece.
    Además, puedes usar el servicio de enrutador aquí: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • La cabecera se ha modernizado. La personalización en el widget home-logo está obsoleta en tu contexto. Más información aquí: Upcoming Header Changes - Preparing Themes and Plugins.
    En tu caso, necesitarás la configuración glimmer header mode en auto o enabled. Luego, puedes usar un outlet de plugin para reemplazar el contenido:

    api.renderInOutlet("home-logo-contents", `<template>
        <HomeLogoContents
          @logoSmallUrl={{container.dcsHeaderLogo._smallLogoUrl}}
          @logoUrl={{container.dcsHeaderLogo._logoUrl}}
          @minimized={{@outletArgs.minimized}}
          @mobileLogoUrl={{container.dcsHeaderLogo._mobileLogoUrl}}
          @showMobileLogo={{@outletArgs.showMobileLogo}}
          @title={{@outletArgs.title}}
        />
      </template>`);
    

    Nota: para usar la sintaxis de plantilla glimmer <template>, asegúrate de renombrar la extensión del archivo a .gjs.
    También puedes usar esta forma:

     api.registerValueTransformer("home-logo-image-url", (transformer) => {
        let url = transformer.value;
        if (transformer.context.name === 'logo') {
          url = container.dcsHeaderLogo._logoUrl;
        } else if (transformer.context.name === 'logo_small') {
          url = container.dcsHeaderLogo._smallLogoUrl;
        } else if (transformer.context.name === 'logo_mobile') {
          url = container.dcsHeaderLogo._mobileLogoUrl;
        }
        return url;
      });
    

    Para cambiar la URL:

    api.registerValueTransformer("home-logo-href", () => container.dcsHeaderLogo._href);
    

    Nota: Creo que el código para volver a renderizar en setLogo no funcionará en un componente glimmer.

    Nota después de probar: Sin embargo, ninguna de las soluciones funcionará porque la cabecera se renderiza antes de que puedas obtener los logos del JSON. No tengo una solución lista para eso. No estoy seguro de si hay una mejor manera: movería la carga del JSON a un servicio y rastrearía el resultado. Luego, usaría el outlet del plugin anterior con un componente glimmer. De esta manera, basándose en una variable de seguimiento, puedes activar automáticamente una actualización en el componente.

    Con eso, funciona de alguna manera. Todavía no hay piezas que funcionen como el compositor. No lo he mirado muy a fondo. Como mínimo, ya no hay errores bloqueantes. :slightly_smiling_face:

    Espero que esto ayude.

3 Me gusta