Проблемы с вставкой iframes через Ember API Discourse

Вот несколько рекомендаций:

  • Настройки сайта перенесены в сервис:

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

  • afterRender().then(() => onAfterRender(container));
    afterRender — это декоратор, который размещается над методом в классе компонента; использовать его напрямую как функцию не следует.
    Думаю, вам нужно (хотя, возможно, это и не требуется) следующее:

    import { schedule } from '@ember/runloop';
    schedule("afterRender", () => onAfterRender(container))
    
  • У вас есть большой фрагмент кода вне функции composeStateChanged, судя по всему.
    Также здесь можно использовать сервис маршрутизатора: container.lookup('router:main').transitionTo(path);this.router.transitionTo(path);

  • Заголовок был модернизирован. Кастомизация виджета home-logo в вашем контексте устарела. Дополнительную информацию см. здесь: Upcoming Header Changes - Preparing Themes and Plugins.
    В вашем случае необходимо установить настройку glimmer header mode в значение auto или enabled. Затем вы можете использовать выходной порт плагина для замены содержимого:

    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>);
    

    Примечание: чтобы использовать синтаксис glimmer <template>, убедитесь, что расширение файла изменено на .gjs.
    Также можно использовать этот способ:

     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;
      });
    

    Для изменения URL:

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

    Примечание: Я полагаю, что код для перерисовки в setLogo не будет работать с glimmer-компонентом.

    Примечание после тестирования: Однако ни одно из решений не сработает, так как заголовок рендерится до того, как вы сможете получить логотипы из JSON. У меня пока нет готового решения для этого. Не уверен, есть ли лучший способ: я бы перенес загрузку JSON в сервис и отслеживал результат. Затем используйте выходной порт плагина, описанный выше, с glimmer-компонентом. Таким образом, на основе переменной отслеживания вы сможете автоматически инициировать обновление компонента.

С этим всё вроде как работает. Пока ещё есть неработающие части, например композер. Я не углублялся в это слишком сильно. По крайней мере, больше нет блокирующей ошибки. :slightly_smiling_face:

Надеюсь, это поможет.