Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 18 additions & 10 deletions javascripts/discourse/components/right-sidebar-blocks.gjs
Original file line number Diff line number Diff line change
@@ -1,26 +1,34 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { cached } from "@glimmer/tracking";
import { getOwner } from "@ember/owner";
import curryComponent from "ember-curry-component";
import PluginOutlet from "discourse/components/plugin-outlet";
import lazyHash from "discourse/helpers/lazy-hash";
import CustomHtmlRsb from "./custom-html-rsb";
import deprecated from "discourse/lib/deprecated";
import { getAvailableBlocks } from "../pre-initializers/right-sidebar-blocks-registry";

export default class RightSidebarBlocks extends Component {
@tracked blocks = [];

constructor() {
super(...arguments);
@cached
get blocks() {
const availableBlocks = getAvailableBlocks();

const blocksArray = [];

JSON.parse(settings.blocks).forEach((block) => {
if (block.name === "custom-html") {
block.component = CustomHtmlRsb;
const rsbRegistryResult = availableBlocks.get(block.name);
if (rsbRegistryResult) {
block.component = rsbRegistryResult;
} else {
block.component = getOwner(this).resolveRegistration(
const emberRegistryResult = getOwner(this).resolveRegistration(
`component:${block.name}`
);
if (emberRegistryResult) {
block.component = emberRegistryResult;
deprecated(
`The block "${block.name}" is not registered in the right-sidebar-blocks registry. Register it using \`api.registerValueTransformer("right-sidebar-blocks", ({ value: blocks }) => blocks.set("${block.name}", MyImportantComponent));\``,
{ id: "discourse.right-sidebar-blocks.component-resolution" }
);
}
}

if (block.component) {
Expand All @@ -41,7 +49,7 @@ export default class RightSidebarBlocks extends Component {
}
});

this.blocks = blocksArray;
return blocksArray;
}

<template>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import SignupCta from "discourse/components/signup-cta";
import { withPluginApi } from "discourse/lib/plugin-api";
import { applyValueTransformer } from "discourse/lib/transformer";
import CategoryList from "../components/category-list";
import CategoryTopics from "../components/category-topics";
import CustomHtmlRsb from "../components/custom-html-rsb";
import PopularTags from "../components/popular-tags";
import RecentReplies from "../components/recent-replies";
import SubcategoryList from "../components/subcategory-list";
import TopContributors from "../components/top-contributors";

const TRANSFORMER_NAME = "right-sidebar-blocks";

const DefaultBlocks = new Map();
DefaultBlocks.set("popular-tags", PopularTags);
DefaultBlocks.set("top-contributers", TopContributors);
DefaultBlocks.set("recent-replies", RecentReplies);
DefaultBlocks.set("category-topics", CategoryTopics);
DefaultBlocks.set("custom-html", CustomHtmlRsb);
DefaultBlocks.set("category-list", CategoryList);
DefaultBlocks.set("subcategory-list", SubcategoryList);
DefaultBlocks.set("signup-cta", SignupCta);

export function getAvailableBlocks() {
const results = new Map(DefaultBlocks);
return applyValueTransformer(TRANSFORMER_NAME, results, null, {
mutable: true,
});
}

export default {
before: "freeze-valid-transformers",
initialize() {
withPluginApi((api) => api.addValueTransformerName(TRANSFORMER_NAME));
},
};
Loading