Narrator: “It was not landed that week.” ![]()
Is there any change on this? I just re-wrote a component for someone using objects type and they are unhappy that they can’t reorder.
Hallo @awesomerobot, denk je dat dit binnenkort op iemands lijst komt te staan? Het lijkt erop dat niemand van het team hier een jaar naar heeft gekeken.
Bovendien is het behoorlijk erg dat ze allemaal “field_name-X” heten. Zou het mogelijk zijn om een veldnaam te hebben die daar gebruikt kan worden? Elke afzonderlijke moeten aanklikken om te zien wat er is, is een nachtmerrie als je meer dan een paar objecten hebt.
Als we de items niet opnieuw kunnen ordenen en je niet kunt zien wat ze zijn zonder erop te klikken, zal ik waarschijnlijk terug moeten naar het gebruik van een enkele tekenreeksinstelling met meerdere waarden gescheiden door, eh, een teken om de verschillende velden te scheiden. En ik denk dat je met de oude arrays dingen opnieuw kon ordenen, toch? Dus dit objecttype lijkt een stap terug voor iedereen behalve programmeurs.
I don’t think there’s anything in process for reordering at the moment, though it’s still something we’d like to include. Renaming is already possible with the identifier property. For example, from the custom header links theme component
The name field is set as the identifier for each link, so you can see which link is which
Hooray. I thought I must have overlooked that but have not managed to find it before. Thanks!
EDIT: And now I used the identifier property and added an ‘order’ field, so it’s not too bad. I still think being able to reorder settings would be nice, and it’s available with arrays. . .
Thanks again for your help
I made a commit a bit ago that adds re-ordering for objects. Here is a little test setting to show the buttons:
I think it is worth announcing that we got uploads as a field type option now, and I think it was mentioned somewhere, but it is nice to mention again that type: objects works on both theme settings and in site settings(plugins)
Thank you! Will be fixed in
Does the objects type support a max limit? I tried it, but it seems it doesn’t.
Do you mean like for a string type field in a objects tree?
Try max_length…
See #Validations for string types on this topic; or a working example:
I think he’s referring to:
Yes, I am referring to limiting the maximum number of items in the objects array.
Currently, this is not supported out of the box, so I extended the functionality in a custom private theme component. Here is the configuration (for reference only):
Configuration for maximum array count limit:
themes/quectel-custom-homepage/settings.yml
banner_images:
type: objects
default: []
schema:
name: "Carousel"
max: 9 // New extended configuration to limit the maximum number of items in the array
identifier: image_url
properties:
image_url:
type: upload
required: true
link_url:
type: string
min: 0
max: 1023
Extended code:
themes/quectel-custom-homepage/javascripts/discourse/api-initializers/quectel-custom-homepage.gjs
import { action } from "@ember/object";
import { apiInitializer } from "discourse/lib/api";
import classPrepend from "discourse/lib/class-prepend";
import { i18n } from "discourse-i18n";
export default apiInitializer(() => {
// Use classPrepend to extend the SchemaSettingNewEditor component to support the max limit for objects type
// Load this component only in the admin context
let SchemaSettingNewEditor;
try {
SchemaSettingNewEditor =
require("discourse/admin/components/schema-setting/editor").default;
} catch {
// Non-admin users cannot load this component, skip extension
return;
}
classPrepend(SchemaSettingNewEditor, (Superclass) => {
return class extends Superclass {
@action
addItem() {
// Check if the max limit is reached
const maxLimit = this.args.setting.max || this.activeSchema?.max;
if (maxLimit && this.activeData.length >= maxLimit) {
this.validationErrorMessage = i18n(
themePrefix("theme_settings.errors.objects_value_not_valid_max"),
{
count: maxLimit,
}
);
return;
}
return super.addItem(...arguments);
}
@action
addChildItem(propertyName, parentNodeIndex) {
const propertySchema = this.activeSchema.properties[propertyName];
// Check if the max limit is reached
if (
propertySchema?.max &&
this.activeData[parentNodeIndex][propertyName].length >=
propertySchema.max
) {
this.validationErrorMessage = i18n(
themePrefix("theme_settings.errors.objects_value_not_valid_max"),
{
count: propertySchema.max,
}
);
return;
}
return super.addChildItem(...arguments);
}
};
});
});
Theme translation configuration:
themes/quectel-custom-homepage/locales/en.yml
en:
theme_settings:
errors:
objects_value_not_valid_max: "The number cannot exceed %{count}"
Actual effect:
- Error message
- Unable to add more items



