import { ClassFactory, Component, ComponentDoneResponse, ComponentParams, New, QCObjectsShadowedElement } from "qcobjects";
type ModalParams = ComponentParams & {
__parent__?:Component;
enclosureComponentClass?:string;}
class SignalComponent extends Component {
_signals = {};
on(signalName:string, callback:()=>void):void{
(this._signals as any)[signalName] = callback;
}
fireSignal(signalName:string):void{
((this._signals as any)[signalName] as ()=>void).call(this);
}
}
class Modal extends SignalComponent {
__instanceID!:number;
name = "modal";
shadowed = true;
tplsource = "inline";
enclosureComponentClass!:string;
submodal!:SignalComponent;
template = `
`;
constructor(component:ModalParams){
super(component);
this.enclosureComponentClass = component.enclosureComponentClass as string;
this.body.classList.add(`modal_container_${this.__instanceID}`);
this.body.style.display = "contents";
this.submodal = New(ClassFactory(component.enclosureComponentClass as string),{
__parent__:this,
shadowed: this.shadowed,
data:this.data
});
}
open (){
this.body.style.display = "contents";
setTimeout(()=>{
(this.shadowRoot as QCObjectsShadowedElement)?.subelements(`.modal_background_${this.__instanceID},.modal.modal_${this.__instanceID}`)
.map ((element:any)=> {
return element.classList.add("open");
});
},100);
}
close(remove = false){
(this.shadowRoot as QCObjectsShadowedElement)?.subelements(`.modal_background_${this.__instanceID},.modal.modal_${this.__instanceID}`)
.map ((element:any)=> {
return element.classList.remove("open");
});
setTimeout(()=> {
this.body.style.display = "none";
},1000);
if (remove){
setTimeout(()=>{
this.remove();
},1000);
}
}
remove (){
this.body.remove();
}
done(standardResponse: ComponentDoneResponse): Promise {
const submodalRoot = (this.shadowRoot as QCObjectsShadowedElement).subelements(`.modal.modal_${this.__instanceID}`).pop();
submodalRoot?.append(this.submodal.body);
this.open();
return super.done(standardResponse);
}
}
export {Modal, ModalParams, SignalComponent};