diff --git a/ui/admin/app/components/form/host/index.hbs b/ui/admin/app/components/form/host/index.hbs
index fcd7595bed..11505c8da6 100644
--- a/ui/admin/app/components/form/host/index.hbs
+++ b/ui/admin/app/components/form/host/index.hbs
@@ -4,20 +4,17 @@
}}
{{#if @model.compositeType}}
- {{component
- (concat 'form/host/' @model.compositeType)
- model=@model
- submit=@submit
- cancel=@cancel
- }}
+
{{else}}
- {{! create-and-add-host cancel route doesn't
-have a model and this else part is required to prevent
-erroring out here. This has been noted in the tech debt doc to further investigate }}
- {{component
- (concat 'form/host/' 'static')
- model=@model
- submit=@submit
- cancel=@cancel
- }}
+ {{! create-and-add-host cancel route doesn't have a model and this else part is required
+ to prevent erroring out here. This has been noted in the tech debt doc to further investigate }}
+
{{/if}}
\ No newline at end of file
diff --git a/ui/admin/app/components/form/host/index.js b/ui/admin/app/components/form/host/index.js
new file mode 100644
index 0000000000..e03b7e9707
--- /dev/null
+++ b/ui/admin/app/components/form/host/index.js
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) HashiCorp, Inc.
+ * SPDX-License-Identifier: BUSL-1.1
+ */
+
+import Component from '@glimmer/component';
+import { assert } from '@ember/debug';
+import {
+ TYPE_HOST_CATALOG_PLUGIN_AWS,
+ TYPE_HOST_CATALOG_PLUGIN_AZURE,
+ TYPE_HOST_CATALOG_PLUGIN_GCP,
+ TYPE_HOST_CATALOG_STATIC,
+} from 'api/models/host-catalog';
+import awsHostFormComponent from './aws';
+import azureHostFormComponent from './azure';
+import gcpHostFormComponent from './gcp';
+import staticHostFormComponent from './static';
+
+const modelCompositeTypeToComponent = {
+ [TYPE_HOST_CATALOG_PLUGIN_AWS]: awsHostFormComponent,
+ [TYPE_HOST_CATALOG_PLUGIN_AZURE]: azureHostFormComponent,
+ [TYPE_HOST_CATALOG_PLUGIN_GCP]: gcpHostFormComponent,
+ [TYPE_HOST_CATALOG_STATIC]: staticHostFormComponent,
+};
+
+export default class FormHostIndex extends Component {
+ /**
+ * Returns the host form component associated with the model's composite type
+ * @type {Component}
+ */
+ get hostFormComponent() {
+ const component =
+ modelCompositeTypeToComponent[this.args.model.compositeType];
+ assert(
+ `Mapped component must exist for host composite type: ${this.args.model.compositeType}`,
+ component,
+ );
+ return component;
+ }
+}