From f51f46703073ad48aff7fb677c44ba14d13832e5 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 14 Dec 2023 15:51:47 +0000 Subject: [PATCH] DEV: Throw error if `renderInOutlet` component has no template (#24900) --- .../discourse/app/lib/plugin-connectors.js | 5 +++++ .../components/plugin-outlet-test.gjs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/assets/javascripts/discourse/app/lib/plugin-connectors.js b/app/assets/javascripts/discourse/app/lib/plugin-connectors.js index f3c8f7eda44..9a9115aab65 100644 --- a/app/assets/javascripts/discourse/app/lib/plugin-connectors.js +++ b/app/assets/javascripts/discourse/app/lib/plugin-connectors.js @@ -31,6 +31,11 @@ export function extraConnectorComponent(outletName, klass) { if (!hasInternalComponentManager(klass)) { throw new Error("klass is not an Ember component"); } + if (!getComponentTemplate(klass)) { + throw new Error( + "connector component has no associated template. Ensure the template is colocated or authored with gjs." + ); + } if (outletName.includes("/")) { throw new Error("invalid outlet name"); } diff --git a/app/assets/javascripts/discourse/tests/integration/components/plugin-outlet-test.gjs b/app/assets/javascripts/discourse/tests/integration/components/plugin-outlet-test.gjs index 1e3c14b480e..6f41ab0f6c0 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/plugin-outlet-test.gjs +++ b/app/assets/javascripts/discourse/tests/integration/components/plugin-outlet-test.gjs @@ -466,6 +466,22 @@ module( await render(hbs``); assert.dom(".gjs-test").hasText("Hello world from gjs"); }); + + test("throws errors for invalid components", function (assert) { + assert.throws(() => { + extraConnectorComponent("test-name/blah", ); + }, /invalid outlet name/); + + assert.throws(() => { + extraConnectorComponent("test-name", {}); + }, /klass is not an Ember component/); + + assert.throws(() => { + extraConnectorComponent("test-name", class extends Component {}); + }, /connector component has no associated template/); + }); } );