Only do ID-check on tagrenderings for official themes

This commit is contained in:
Pieter Vander Vennet 2021-11-11 17:14:03 +01:00
parent 746273f594
commit 0018fcf1f0
17 changed files with 150 additions and 123 deletions

View file

@ -48,9 +48,16 @@ export default class WithContextLoader {
* A string is interpreted as a name to call
*/
public ParseTagRenderings(
tagRenderings?: (string | { builtin: string, override: any } | TagRenderingConfigJson)[],
readOnly = false,
prepConfig: ((config: TagRenderingConfigJson) => TagRenderingConfigJson) = undefined
tagRenderings: (string | { builtin: string, override: any } | TagRenderingConfigJson)[],
options?:{
/**
* Throw an error if 'question' is defined
*/
readOnlyMode?: boolean,
requiresId?: boolean
prepConfig?: ((config: TagRenderingConfigJson) => TagRenderingConfigJson)
}
): TagRenderingConfig[] {
if (tagRenderings === undefined) {
return [];
@ -58,8 +65,9 @@ export default class WithContextLoader {
const context = this._context
const renderings: TagRenderingConfig[] = []
if (prepConfig === undefined) {
prepConfig = c => c
options = options ?? {}
if (options.prepConfig === undefined) {
options.prepConfig = c => c
}
for (let i = 0; i < tagRenderings.length; i++) {
let renderingJson = tagRenderings[i]
@ -89,9 +97,16 @@ export default class WithContextLoader {
}
const patchedConfig = prepConfig(<TagRenderingConfigJson>renderingJson)
const patchedConfig = options.prepConfig(<TagRenderingConfigJson>renderingJson)
const tr = new TagRenderingConfig(patchedConfig, `${context}.tagrendering[${i}]`);
if(options.readOnlyMode && tr.question !== undefined){
throw "A question is defined for "+`${context}.tagrendering[${i}], but this is not allowed at this position - probably because this rendering is an icon, badge or label`
}
if(options.requiresId && tr.id === ""){
throw `${context}.tagrendering[${i}] has an invalid ID - make sure it is defined and not empty`
}
renderings.push(tr)
}