2024-01-19 09:53:17 +01:00
|
|
|
import {Directive, EventEmitter, Input, OnDestroy, Output} from '@angular/core';
|
|
|
|
import {Plugin} from "../../../utils/entities/adminTool/plugin";
|
|
|
|
import {PluginTemplate} from "../../../utils/entities/adminTool/pluginTemplate";
|
|
|
|
import {EnvProperties} from "../../../utils/properties/env-properties";
|
|
|
|
import {properties} from 'src/environments/environment';
|
|
|
|
import {Subscriber} from "rxjs";
|
|
|
|
|
|
|
|
export class PluginEditEvent {
|
|
|
|
field:string;
|
2024-02-22 10:09:20 +01:00
|
|
|
type:"text" | "HTML" | "boolean" | 'parent';
|
2024-01-19 09:53:17 +01:00
|
|
|
value?:any;
|
|
|
|
}
|
2024-02-22 10:09:20 +01:00
|
|
|
|
|
|
|
export class PluginBaseInfo {
|
|
|
|
title: string = "Lorem ipsum";
|
|
|
|
constructor() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export class PluginURL {
|
|
|
|
url:string;
|
|
|
|
linkText:string;
|
|
|
|
target:string;
|
|
|
|
constructor(url,linkText, target = "_blank") {
|
|
|
|
this.url = url;
|
|
|
|
this.linkText = linkText;
|
|
|
|
this.target = target;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
export class PluginInfoCards{
|
|
|
|
title:string;
|
|
|
|
description:string;
|
|
|
|
urls:PluginURL[];
|
|
|
|
image?:string;
|
|
|
|
show:boolean;
|
|
|
|
}
|
2024-01-19 09:53:17 +01:00
|
|
|
@Directive()
|
2024-02-22 10:09:20 +01:00
|
|
|
export abstract class PluginBaseComponent<T extends PluginBaseInfo> implements OnDestroy {
|
2024-01-19 09:53:17 +01:00
|
|
|
public properties: EnvProperties = properties;
|
|
|
|
@Input() editMode =false;
|
|
|
|
@Input() plugin:Plugin;
|
|
|
|
@Input() pluginTemplate:PluginTemplate;
|
|
|
|
@Input() editTemplate:boolean = false;
|
2024-02-22 10:09:20 +01:00
|
|
|
@Input() pluginObject:T;
|
2024-01-19 09:53:17 +01:00
|
|
|
@Output() valuesChanged:EventEmitter<PluginEditEvent> = new EventEmitter<any>();
|
|
|
|
subscriptions = [];
|
|
|
|
pluginEditEvent:PluginEditEvent;
|
2024-02-22 10:09:20 +01:00
|
|
|
/*default:T;*/
|
2024-01-19 09:53:17 +01:00
|
|
|
constructor() {
|
|
|
|
|
|
|
|
}
|
|
|
|
ngOnInit(): void {
|
2024-02-22 10:09:20 +01:00
|
|
|
// console.log(this.default)
|
|
|
|
/*if (this.pluginTemplate && (!this.pluginDefaultObject || !this.pluginDefaultObject.title) && this.default) {
|
|
|
|
this.pluginTemplate.object = Object.assign(this.default);
|
|
|
|
}*/
|
2024-01-19 09:53:17 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-02-22 10:09:20 +01:00
|
|
|
ngOnDestroy() {
|
2024-01-19 09:53:17 +01:00
|
|
|
this.subscriptions.forEach(subscription => {
|
|
|
|
if (subscription instanceof Subscriber) {
|
|
|
|
subscription.unsubscribe()
|
|
|
|
} else if (subscription instanceof Function) {
|
|
|
|
subscription();
|
|
|
|
} else if (typeof IntersectionObserver !== 'undefined' && subscription instanceof IntersectionObserver) {
|
|
|
|
subscription.disconnect();
|
|
|
|
} else if (typeof ResizeObserver !== 'undefined' && subscription instanceof ResizeObserver) {
|
|
|
|
subscription.disconnect();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
valueChanged($event:PluginEditEvent){
|
|
|
|
if(this.editTemplate){
|
|
|
|
this.pluginTemplate.object[$event.field]=$event.value;
|
2024-02-22 10:09:20 +01:00
|
|
|
this.pluginObject[$event.field]=$event.value;
|
2024-01-19 09:53:17 +01:00
|
|
|
}else{
|
|
|
|
this.plugin.object[$event.field]=$event.value;
|
|
|
|
}
|
|
|
|
this.valuesChanged.emit($event)
|
|
|
|
}
|
|
|
|
|
2024-02-22 10:09:20 +01:00
|
|
|
isVisible(field){
|
|
|
|
return (this.plugin && this.plugin.object && this.plugin.object[field] == true) /* plugin is on anyway */
|
|
|
|
|| (!this.plugin && this.pluginTemplate && this.pluginTemplate.object && this.pluginTemplate.object[field] == true) /* template is on */
|
2024-01-19 09:53:17 +01:00
|
|
|
}
|
2024-02-22 10:09:20 +01:00
|
|
|
/*get pluginObject():T{
|
|
|
|
return this.plugin?this.plugin.object:null;
|
|
|
|
}
|
|
|
|
get pluginDefaultObject():T{
|
|
|
|
return this.pluginTemplate?this.pluginTemplate.object:null;
|
|
|
|
}*/
|
2024-01-19 09:53:17 +01:00
|
|
|
|
|
|
|
}
|