TeaWeb/shared/js/ui/utils/LocalVariable.ts
2021-04-19 13:27:09 +02:00

60 lines
No EOL
2 KiB
TypeScript

import {UiVariableConsumer, UiVariableMap, UiVariableProvider} from "tc-shared/ui/utils/Variable";
class LocalUiVariableProvider<Variables extends UiVariableMap> extends UiVariableProvider<Variables> {
private consumer: LocalUiVariableConsumer<Variables>;
constructor() {
super();
}
destroy() {
super.destroy();
this.consumer = undefined;
}
setConsumer(consumer: LocalUiVariableConsumer<Variables>) {
this.consumer = consumer;
}
protected doSendVariable(variable: string, customData: any, value: any) {
this.consumer.notifyRemoteVariable(variable, customData, value);
}
public doEditVariable(variable: string, customData: any, newValue: any): Promise<void> | void {
return super.doEditVariable(variable, customData, newValue);
}
}
class LocalUiVariableConsumer<Variables extends UiVariableMap> extends UiVariableConsumer<Variables> {
private provider: LocalUiVariableProvider<Variables>;
constructor(provider: LocalUiVariableProvider<Variables>) {
super();
this.provider = provider;
}
destroy() {
super.destroy();
this.provider = undefined;
}
protected doEditVariable(variable: string, customData: any, value: any): Promise<void> | void {
return this.provider.doEditVariable(variable, customData, value);
}
protected doRequestVariable(variable: string, customData: any) {
return this.provider.sendVariable(variable, customData);
}
public notifyRemoteVariable(variable: string, customData: any, value: any) {
super.notifyRemoteVariable(variable, customData, value);
}
}
export function createLocalUiVariables<Variables extends UiVariableMap>() : [UiVariableProvider<Variables>, UiVariableConsumer<Variables>] {
const provider = new LocalUiVariableProvider<Variables>();
const consumer = new LocalUiVariableConsumer<Variables>(provider);
provider.setConsumer(consumer);
return [provider, consumer];
}