mapcomplete/Customizations/SharedTagRenderings.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

105 lines
4 KiB
TypeScript
Raw Normal View History

import questions from "../assets/tagRenderings/questions.json"
2021-07-04 20:36:19 +02:00
import { Utils } from "../Utils"
import TagRenderingConfig from "../Models/ThemeConfig/TagRenderingConfig"
import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson"
import BaseUIElement from "../UI/BaseUIElement"
import Combine from "../UI/Base/Combine"
import Title from "../UI/Base/Title"
import { FixedUiElement } from "../UI/Base/FixedUiElement"
import List from "../UI/Base/List"
2020-10-27 01:01:34 +01:00
export default class SharedTagRenderings {
public static SharedTagRendering: Map<string, TagRenderingConfig> =
SharedTagRenderings.generatedSharedFields()
public static SharedTagRenderingJson: Map<string, TagRenderingConfigJson> =
SharedTagRenderings.generatedSharedFieldsJsons()
2020-10-27 01:01:34 +01:00
private static generatedSharedFields(): Map<string, TagRenderingConfig> {
const configJsons = SharedTagRenderings.generatedSharedFieldsJsons()
const d = new Map<string, TagRenderingConfig>()
for (const key of Array.from(configJsons.keys())) {
2020-10-27 01:01:34 +01:00
try {
2021-11-07 16:34:51 +01:00
d.set(
key,
new TagRenderingConfig(configJsons.get(key), `SharedTagRenderings.${key}`)
2022-09-08 21:40:48 +02:00
)
2020-10-27 01:01:34 +01:00
} catch (e) {
if (!Utils.runningFromConsole) {
2021-07-04 20:36:19 +02:00
console.error(
"BUG: could not parse",
key,
" from questions.json - this error happened during the build step of the SharedTagRenderings",
2021-07-04 20:36:19 +02:00
e
)
}
2020-10-27 01:01:34 +01:00
}
}
return d
}
private static generatedSharedFieldsJsons(): Map<string, TagRenderingConfigJson> {
const dict = new Map<string, TagRenderingConfigJson>()
for (const key in questions) {
2022-01-26 21:40:38 +01:00
if (key === "id") {
2022-01-24 00:24:51 +01:00
continue
}
dict.set(key, <TagRenderingConfigJson>questions[key])
}
2021-12-21 18:35:31 +01:00
dict.forEach((value, key) => {
2022-01-26 21:40:38 +01:00
if (key === "id") {
2022-01-24 00:24:51 +01:00
return
}
2021-12-21 18:35:31 +01:00
value.id = value.id ?? key
if (value["builtin"] !== undefined) {
if (value["override"] == undefined) {
throw (
"HUH? Why whould you want to reuse a builtin if one doesn't override? In questions.json/" +
key
2022-09-08 21:40:48 +02:00
)
}
if (typeof value["builtin"] !== "string") {
return
}
// This is a really funny situation: we extend another tagRendering!
const parent = Utils.Clone(dict.get(value["builtin"]))
delete parent.id
Utils.Merge(value["override"], parent)
delete value["builtin"]
delete value["override"]
for (const pkey in parent) {
value[pkey] = parent[pkey]
}
}
2021-12-21 18:35:31 +01:00
})
2020-10-27 01:01:34 +01:00
return dict
}
public static HelpText(): BaseUIElement {
return new Combine([
new Combine([
new Title("Builtin questions", 1),
"The following items can be easily reused in your layers",
]).SetClass("flex flex-col"),
...Array.from(SharedTagRenderings.SharedTagRendering.keys()).map((key) => {
const tr = SharedTagRenderings.SharedTagRendering.get(key)
let mappings: BaseUIElement = undefined
if (tr.mappings?.length > 0) {
mappings = new List(tr.mappings.map((m) => m.then.textFor("en")))
}
return new Combine([
new Title(key),
tr.render?.textFor("en"),
tr.question?.textFor("en") ??
new FixedUiElement("Read-only tagrendering").SetClass("font-bold"),
mappings,
]).SetClass("flex flex-col")
}),
]).SetClass("flex flex-col")
}
2020-10-27 01:01:34 +01:00
}