diff --git a/app/assets/javascripts/admin/addon/components/admin-config-areas/api-keys-new.gjs b/app/assets/javascripts/admin/addon/components/admin-config-areas/api-keys-new.gjs index c7f2b8efcbd..f4ec63694fa 100644 --- a/app/assets/javascripts/admin/addon/components/admin-config-areas/api-keys-new.gjs +++ b/app/assets/javascripts/admin/addon/components/admin-config-areas/api-keys-new.gjs @@ -13,7 +13,6 @@ import { popupAjaxError } from "discourse/lib/ajax-error"; import { i18n } from "discourse-i18n"; import ApiKeyUrlsModal from "admin/components/modal/api-key-urls"; import EmailGroupUserChooser from "select-kit/components/email-group-user-chooser"; -import DTooltip from "float-kit/components/d-tooltip"; export default class AdminConfigAreasApiKeysNew extends Component { @service router; @@ -239,7 +238,6 @@ export default class AdminConfigAreasApiKeysNew extends Component { - -
{{i18n "admin.api.scopes.allowed_urls"}} {{i18n @@ -265,28 +263,18 @@ export default class AdminConfigAreasApiKeysNew extends Component { - - - -
{{collectionData.name}}
- + as |field| + > + +
- - - + - {{#if @field.showTitle}} - - {{@field.title}} + {{#unless (eq @field.type "checkbox")}} + {{#if @field.showTitle}} + + {{@field.title}} - {{#unless @field.required}} - ({{i18n - "form_kit.optional" - }}) - {{/unless}} + + + + {{/if}} - {{#if @field.tooltip}} - {{#if this.isComponentTooltip}} - <@field.tooltip /> - {{else}} - - {{/if}} - {{/if}} - - {{/if}} - - {{#if @field.description}} - {{@field.description}} - {{/if}} + {{#if @field.description}} + {{@field.description}} + {{/if}} + {{/unless}}
- {{@field.title}} + {{@field.title}} + + {{#if (has-block)}} {{yield}} diff --git a/app/assets/javascripts/discourse/app/form-kit/components/fk/field-data.gjs b/app/assets/javascripts/discourse/app/form-kit/components/fk/field-data.gjs index fcfac8293ed..10ff02c8743 100644 --- a/app/assets/javascripts/discourse/app/form-kit/components/fk/field-data.gjs +++ b/app/assets/javascripts/discourse/app/form-kit/components/fk/field-data.gjs @@ -1,4 +1,5 @@ import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; import { action } from "@ember/object"; import ValidationParser from "discourse/form-kit/lib/validation-parser"; import Validator from "discourse/form-kit/lib/validator"; @@ -8,6 +9,12 @@ import uniqueId from "discourse/helpers/unique-id"; * Represents a field in a form with validation, registration, and field data management capabilities. */ export default class FKFieldData extends Component { + /** + * Type of the field. + * @type {string} + */ + @tracked type; + /** * Unique identifier for the field. * @type {string} @@ -20,12 +27,6 @@ export default class FKFieldData extends Component { */ errorId = uniqueId(); - /** - * Type of the field. - * @type {string} - */ - type; - /** * Initializes the FKFieldData component. * Validates the presence of required arguments and registers the field. @@ -37,8 +38,6 @@ export default class FKFieldData extends Component { if (!this.args.title?.length) { throw new Error("@title is required on ``."); } - - this.args.registerField(this.name, this); } /** diff --git a/app/assets/javascripts/discourse/app/form-kit/components/fk/field.gjs b/app/assets/javascripts/discourse/app/form-kit/components/fk/field.gjs index 4c161dffa35..7f36dbcdb7a 100644 --- a/app/assets/javascripts/discourse/app/form-kit/components/fk/field.gjs +++ b/app/assets/javascripts/discourse/app/form-kit/components/fk/field.gjs @@ -1,5 +1,8 @@ import Component from "@glimmer/component"; import { hash } from "@ember/helper"; +import { action } from "@ember/object"; +import { getOwner } from "@ember/owner"; +import curryComponent from "ember-curry-component"; import FKControlCheckbox from "discourse/form-kit/components/fk/control/checkbox"; import FKControlCode from "discourse/form-kit/components/fk/control/code"; import FKControlComposer from "discourse/form-kit/components/fk/control/composer"; @@ -40,6 +43,30 @@ export default class FKField extends Component { } } + @action + componentFor(component, field) { + const instance = this; + const baseArguments = { + get errors() { + return instance.args.errors; + }, + unregisterField: instance.args.unregisterField, + registerField: instance.args.registerField, + component, + field, + }; + + if (!component.controlType) { + throw new Error( + `Static property \`controlType\` is required on component:\n\n ${component}` + ); + } + + field.type = component.controlType; + + return curryComponent(FKControlWrapper, baseArguments, getOwner(this)); + } + ); - assert.form().field("foo").hasTitle("Foo"); - assert.form().field("bar").hasTitle("Bar"); + assert.form().field("foo").hasTitle("Foo (optional)"); + assert.form().field("bar").hasTitle("Bar (optional)"); assert.form().field("bar").hasDescription("A description"); }); + + test("@title", async function (assert) { + await render(); + + assert + .dom(".form-kit__checkbox-group .form-kit__fieldset-title") + .hasText("bar"); + }); + + test("@description", async function (assert) { + await render(); + + assert + .dom(".form-kit__checkbox-group .form-kit__fieldset-description") + .hasText("bar"); + }); } ); diff --git a/app/assets/stylesheets/common/admin/admin_base.scss b/app/assets/stylesheets/common/admin/admin_base.scss index 0695d6870ce..3ec363b9acb 100644 --- a/app/assets/stylesheets/common/admin/admin_base.scss +++ b/app/assets/stylesheets/common/admin/admin_base.scss @@ -811,14 +811,6 @@ $mobile-breakpoint: 700px; } } -.badges, -.web-hook-container { - input[type="text"], - textarea { - min-width: 350px; - } -} - .text-successful { color: var(--success); } diff --git a/app/assets/stylesheets/common/admin/api.scss b/app/assets/stylesheets/common/admin/api.scss index 0445f9ab3e0..1110353cfcc 100644 --- a/app/assets/stylesheets/common/admin/api.scss +++ b/app/assets/stylesheets/common/admin/api.scss @@ -24,6 +24,10 @@ // Api keys .admin-api-keys { + .form-kit__container-optional { + display: none; + } + .api-key-show { .form-element, .form-element-desc { @@ -136,16 +140,6 @@ display: none; } - input { - max-width: calc(100% - 10px); - } - - .select-kit, - .select-kit.multi-select { - width: 100%; - max-width: 360px; - } - .event-selector { display: grid; grid-template-columns: auto auto; diff --git a/app/assets/stylesheets/common/form-kit/_index.scss b/app/assets/stylesheets/common/form-kit/_index.scss index 76c6b570259..d807c0a1e74 100644 --- a/app/assets/stylesheets/common/form-kit/_index.scss +++ b/app/assets/stylesheets/common/form-kit/_index.scss @@ -30,3 +30,4 @@ @import "_row"; @import "_section"; @import "_variables"; +@import "_tooltip"; diff --git a/app/assets/stylesheets/common/form-kit/_tooltip.scss b/app/assets/stylesheets/common/form-kit/_tooltip.scss new file mode 100644 index 00000000000..3e3f21f7b70 --- /dev/null +++ b/app/assets/stylesheets/common/form-kit/_tooltip.scss @@ -0,0 +1,3 @@ +.form-kit__tooltip { + color: var(--primary-medium); +}