mapcomplete/Customizations/OnlyShowIf.ts

114 lines
2.9 KiB
TypeScript
Raw Normal View History

2020-07-12 21:19:05 +00:00
import {TagDependantUIElement, TagDependantUIElementConstructor} from "./UIElementConstructor";
import {TagsFilter, TagUtils} from "../Logic/Tags";
2020-07-12 21:19:05 +00:00
import {UIElement} from "../UI/UIElement";
import {UIEventSource} from "../Logic/UIEventSource";
import Translation from "../UI/i18n/Translation";
2020-07-12 21:19:05 +00:00
/**
* Wrapper around another TagDependandElement, which only shows if the filters match
*/
2020-07-12 21:19:05 +00:00
export class OnlyShowIfConstructor implements TagDependantUIElementConstructor{
private readonly _tagsFilter: TagsFilter;
private readonly _embedded: TagDependantUIElementConstructor;
constructor(tagsFilter: TagsFilter, embedded: TagDependantUIElementConstructor) {
2020-07-12 21:19:05 +00:00
this._tagsFilter = tagsFilter;
this._embedded = embedded;
}
construct(dependencies): TagDependantUIElement {
return new OnlyShowIf(dependencies.tags,
this._embedded.construct(dependencies),
this._tagsFilter);
2020-07-12 21:19:05 +00:00
}
IsKnown(properties: any): boolean {
if(!this.Matches(properties)){
return true;
}
return this._embedded.IsKnown(properties);
}
IsQuestioning(properties: any): boolean {
if(!this.Matches(properties)){
return false;
}
return this._embedded.IsQuestioning(properties);
}
Priority(): number {
return this._embedded.Priority();
}
GetContent(tags: any): Translation {
if(this.IsKnown(tags)){
return undefined;
}
return this._embedded.GetContent(tags);
}
private Matches(properties: any) : boolean{
return this._tagsFilter.matches(TagUtils.proprtiesToKV(properties));
}
2020-07-12 21:19:05 +00:00
}
class OnlyShowIf extends UIElement implements TagDependantUIElement {
private readonly _embedded: TagDependantUIElement;
private readonly _filter: TagsFilter;
2020-07-12 21:19:05 +00:00
constructor(
tags: UIEventSource<any>,
embedded: TagDependantUIElement,
filter: TagsFilter) {
2020-07-12 21:19:05 +00:00
super(tags);
this._filter = filter;
this._embedded = embedded;
}
private Matches() : boolean{
return this._filter.matches(TagUtils.proprtiesToKV(this._source.data));
2020-07-12 21:19:05 +00:00
}
2020-07-24 23:07:02 +00:00
InnerRender(): string {
2020-07-12 21:19:05 +00:00
if (this.Matches()) {
return this._embedded.Render();
} else {
return "";
}
}
Priority(): number {
return this._embedded.Priority();
}
IsKnown(): boolean {
if(!this.Matches()){
return false;
}
return this._embedded.IsKnown();
}
2020-07-24 23:07:02 +00:00
IsSkipped(): boolean {
if(!this.Matches()){
return false;
}
return this._embedded.IsSkipped();
}
2020-07-12 21:19:05 +00:00
IsQuestioning(): boolean {
if(!this.Matches()){
return false;
}
return this._embedded.IsQuestioning();
}
Activate(): UIElement {
2020-07-12 21:19:05 +00:00
this._embedded.Activate();
return this;
2020-07-12 21:19:05 +00:00
}
Update(): void {
this._embedded.Update();
}
}