From 74f74add1d64e7953ad5d451ab496f58dd705204 Mon Sep 17 00:00:00 2001 From: Gabriel Grubba Date: Wed, 23 Jul 2025 17:53:53 -0300 Subject: [PATCH] FEATURE: Add upload type to schema settings In this PR we introduce `type: upload` to the schema settings, allowing users to upload files in the objects editor. You now can have lists that include images for example. Both applies to site_settings and theme settings. --- .../addon/components/schema-setting/field.gjs | 3 ++ .../schema-setting/types/upload.gjs | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/assets/javascripts/admin/addon/components/schema-setting/types/upload.gjs diff --git a/app/assets/javascripts/admin/addon/components/schema-setting/field.gjs b/app/assets/javascripts/admin/addon/components/schema-setting/field.gjs index 28bf53e76f7d0..bd389ce6b4423 100644 --- a/app/assets/javascripts/admin/addon/components/schema-setting/field.gjs +++ b/app/assets/javascripts/admin/addon/components/schema-setting/field.gjs @@ -9,6 +9,7 @@ import GroupsField from "admin/components/schema-setting/types/groups"; import IntegerField from "admin/components/schema-setting/types/integer"; import StringField from "admin/components/schema-setting/types/string"; import TagsField from "admin/components/schema-setting/types/tags"; +import UploadField from "admin/components/schema-setting/types/upload"; export default class SchemaSettingField extends Component { get component() { @@ -31,6 +32,8 @@ export default class SchemaSettingField extends Component { return TagsField; case "groups": return GroupsField; + case "upload": + return UploadField; default: throw new Error(`unknown type ${type}`); } diff --git a/app/assets/javascripts/admin/addon/components/schema-setting/types/upload.gjs b/app/assets/javascripts/admin/addon/components/schema-setting/types/upload.gjs new file mode 100644 index 0000000000000..055bdef641620 --- /dev/null +++ b/app/assets/javascripts/admin/addon/components/schema-setting/types/upload.gjs @@ -0,0 +1,41 @@ +import { tracked } from "@glimmer/tracking"; +import { fn } from "@ember/helper"; +import { action } from "@ember/object"; +import { and, not } from "truth-helpers"; +import UppyImageUploader from "discourse/components/uppy-image-uploader"; +import FieldInputDescription from "admin/components/schema-setting/field-input-description"; +import SchemaSettingTypeModels from "admin/components/schema-setting/types/models"; + +export default class SchemaSettingTypeUpload extends SchemaSettingTypeModels { + @tracked value = this.args.value || null; + type = "upload"; + + @action + onChange(upload) { + return upload.id; + } + + +}