2024-02-27 06:07:32 +08:00
|
|
|
import Component from "@glimmer/component";
|
2024-03-15 07:47:42 +08:00
|
|
|
import { cached } from "@glimmer/tracking";
|
|
|
|
import htmlSafe from "discourse-common/helpers/html-safe";
|
2024-02-29 16:11:32 +08:00
|
|
|
import BooleanField from "./types/boolean";
|
2024-03-27 10:54:30 +08:00
|
|
|
import CategoriesField from "./types/categories";
|
2024-02-29 16:11:32 +08:00
|
|
|
import EnumField from "./types/enum";
|
2024-03-13 09:08:50 +08:00
|
|
|
import FloatField from "./types/float";
|
|
|
|
import GroupField from "./types/group";
|
2024-02-29 16:11:32 +08:00
|
|
|
import IntegerField from "./types/integer";
|
|
|
|
import StringField from "./types/string";
|
2024-03-22 15:32:00 +08:00
|
|
|
import TagsField from "./types/tags";
|
2024-02-27 06:07:32 +08:00
|
|
|
|
|
|
|
export default class SchemaThemeSettingField extends Component {
|
|
|
|
get component() {
|
2024-03-22 15:32:00 +08:00
|
|
|
const type = this.args.spec.type;
|
|
|
|
|
2024-02-29 16:11:32 +08:00
|
|
|
switch (this.args.spec.type) {
|
|
|
|
case "string":
|
|
|
|
return StringField;
|
|
|
|
case "integer":
|
|
|
|
return IntegerField;
|
2024-03-13 09:08:50 +08:00
|
|
|
case "float":
|
|
|
|
return FloatField;
|
2024-02-29 16:11:32 +08:00
|
|
|
case "boolean":
|
|
|
|
return BooleanField;
|
|
|
|
case "enum":
|
|
|
|
return EnumField;
|
2024-03-27 10:54:30 +08:00
|
|
|
case "categories":
|
|
|
|
return CategoriesField;
|
2024-03-22 15:32:00 +08:00
|
|
|
case "tags":
|
|
|
|
return TagsField;
|
2024-03-13 09:08:50 +08:00
|
|
|
case "group":
|
|
|
|
return GroupField;
|
2024-02-29 16:11:32 +08:00
|
|
|
default:
|
2024-03-22 15:32:00 +08:00
|
|
|
throw new Error(`unknown type ${type}`);
|
2024-02-27 06:07:32 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-15 07:47:42 +08:00
|
|
|
@cached
|
|
|
|
get description() {
|
2024-03-21 12:39:25 +08:00
|
|
|
if (!this.args.description) {
|
|
|
|
return;
|
|
|
|
}
|
2024-03-15 07:47:42 +08:00
|
|
|
|
2024-03-21 12:39:25 +08:00
|
|
|
return htmlSafe(this.args.description.trim().replace(/\n/g, "<br>"));
|
2024-03-15 07:47:42 +08:00
|
|
|
}
|
|
|
|
|
2024-02-27 06:07:32 +08:00
|
|
|
<template>
|
|
|
|
<div class="schema-field" data-name={{@name}}>
|
2024-03-28 10:53:51 +08:00
|
|
|
<label class="schema-field__label">{{@label}}{{if
|
2024-03-21 12:39:25 +08:00
|
|
|
@spec.required
|
|
|
|
"*"
|
|
|
|
}}</label>
|
2024-03-15 07:47:42 +08:00
|
|
|
|
|
|
|
<div class="schema-field__input">
|
2024-02-29 16:11:32 +08:00
|
|
|
<this.component
|
|
|
|
@value={{@value}}
|
|
|
|
@spec={{@spec}}
|
|
|
|
@onChange={{@onValueChange}}
|
2024-03-21 12:39:25 +08:00
|
|
|
@description={{this.description}}
|
2024-03-27 10:54:30 +08:00
|
|
|
@setting={{@setting}}
|
2024-02-29 16:11:32 +08:00
|
|
|
/>
|
2024-02-27 06:07:32 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
}
|