Tendo alguns problemas ao inserir iframes usando a API Ember do Discourse

Aqui estão alguns pontos:

  • As configurações do site foram movidas para um serviço:

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

  • afterRender().then(() => onAfterRender(container));
    afterRender é um decorador que você coloca acima de um método em uma classe de componente; você não deve usá-lo diretamente como uma função.
    Eu acho que você quer (parece que não é necessário), possivelmente:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • Você tem um grande pedaço de código fora da função composeStateChanged, parece.
    Além disso, você pode usar o serviço de roteador aqui: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • O cabeçalho foi modernizado. A personalização no widget home-logo está obsoleta no seu contexto. Mais informações aqui: Upcoming Header Changes - Preparing Themes and Plugins.
    No seu caso, você precisará definir a configuração glimmer header mode como auto ou enabled. Em seguida, você pode usar um plugin outlet para substituir o conteúdo:

    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 a sintaxe de template Glimmer <template>, certifique-se de renomear a extensão do arquivo para .gjs.
    Você também pode usar esta maneira:

     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 alterar o URL:

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

    Nota: Acredito que o código para renderizar novamente em setLogo não funcionará em um componente Glimmer.

    Nota após teste: No entanto, nenhuma das soluções funcionará porque o cabeçalho é renderizado antes que você possa obter os logos do JSON. Não tenho uma solução pronta para isso. Não tenho certeza se há uma maneira melhor: eu moveria o carregamento do JSON para um serviço e rastrearia o resultado. Em seguida, usaria o plugin outlet acima com um componente Glimmer. Desta forma, com base em uma variável de rastreamento, você pode acionar automaticamente uma atualização no componente.

    Com isso, funciona de alguma forma. Ainda não há peças funcionando como o compositor. Não examinei isso muito a fundo. Pelo menos, não há mais erros bloqueadores. :sorrindo_ligeiramente:

    Espero que isso ajude.

3 curtidas