{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/advanced/login/src/login.props.ts","../../../../../projects/components/widgets/advanced/login/src/login.component.ts","../../../../../projects/components/widgets/advanced/login/src/login.component.html","../../../../../projects/components/widgets/advanced/login/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n    register(\n        'wm-login',\n        new Map(\n            [\n                ['errormessage', PROP_STRING],\n                ['eventsource', PROP_ANY]\n            ]\n        )\n    );\n};\n","import {\n    AfterViewInit,\n    Component,\n    ContentChild,\n    ContentChildren,\n    Inject,\n    Injector,\n    Optional,\n    OnDestroy,\n    QueryList,\n    ViewChild\n} from '@angular/core';\n\nimport { APPLY_STYLES_TYPE, MessageComponent, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';\nimport { FormComponent } from '@wm/components/data/form';\nimport { ButtonComponent } from '@wm/components/input/button';\n\nimport { registerProps } from './login.props';\nimport {includes} from \"lodash-es\";\n\nconst WIDGET_INFO = {widgetType: 'wm-login', hostClass: 'app-login'};\n\n@Component({\n    standalone: true, \n    imports: [ MessageComponent ],\n    selector: 'div[wmLogin]',\n    templateUrl: './login.component.html',\n    providers: [\n        provideAsWidgetRef(LoginComponent)\n    ]\n})\nexport class LoginComponent extends StylableComponent implements AfterViewInit, OnDestroy {\n    static initializeProps = registerProps();\n    loginBtnCmp: ButtonComponent;\n\n    @ContentChild(FormComponent) formCmp: FormComponent;\n    @ContentChildren(ButtonComponent, {descendants: true}) buttonComponents: QueryList<ButtonComponent>;\n    @ViewChild(MessageComponent, { static: true }) messageCmp: MessageComponent;\n\n    loginMessage: { type?: string; caption?: any; show?: boolean; };\n    errormessage: any;\n    eventsource;\n    private boundLoginButtonClick: (event: Event) => void;\n    private boundFormSubmit: (e: Event) => void;\n\n    constructor(inj: Injector, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n        super(inj, WIDGET_INFO, explicitContext);\n        styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);\n    }\n\n    onSuccessCB() {\n        this.invokeEventCallback('success');\n    }\n\n    onErrorCB(error?) {\n        this.loginMessage = {\n            type: 'error',\n            caption: this.errormessage || error || this.appLocale.LABEL_INVALID_USERNAME_OR_PASSWORD,\n            show: true\n        };\n        this.messageCmp.showMessage(this.loginMessage.caption, this.loginMessage.type);\n        this.invokeEventCallback('error');\n    }\n\n    getLoginDetails(): any {\n        return this.formCmp.dataoutput;\n    }\n\n    doLogin() {\n        if (this.eventsource) {\n            this.formCmp.ngform.valid && this.eventsource.invoke({loginInfo: this.getLoginDetails()}, this.onSuccessCB.bind(this), this.onErrorCB.bind(this));\n        } else {\n            console.warn('Default action \"loginAction\" does not exist. Either create the Action or assign an event to onSubmit of the login widget');\n        }\n    }\n\n    initLoginButtonActions() {\n        // MEMORY LEAK FIX: Store bound function reference\n        this.boundLoginButtonClick = (event) => {\n            // if no event is attached to the onSubmit of login widget or loginButton inside it, invoke default login action\n            if (!this.nativeElement.hasAttribute('submit.event') && !this.loginBtnCmp.getNativeElement().hasAttribute('click.event') && !this.loginBtnCmp.getNativeElement().hasAttribute('tap.event')) {\n                this.doLogin();\n            }\n        };\n\n        this.loginBtnCmp.getNativeElement().addEventListener('click', this.boundLoginButtonClick);\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n\n        // MEMORY LEAK FIX: Store bound function reference\n        this.boundFormSubmit = (e) => e.preventDefault();\n        // suppresses the default form submission (in browsers like Firefox)\n        this.formCmp.getNativeElement().addEventListener('submit', this.boundFormSubmit);\n\n        // get login button component\n        this.buttonComponents.forEach(cmp => {\n            if (cmp.getNativeElement().getAttribute('name') === 'loginButton' || includes(cmp.getNativeElement().classList, 'app-login-button')) {\n                if (this.loginBtnCmp) {\n                    return;\n                }\n                this.loginBtnCmp = cmp;\n                this.initLoginButtonActions();\n            }\n        });\n    }\n\n    ngOnDestroy() {\n        // MEMORY LEAK FIX: Remove event listeners using stored bound function references\n        if (this.loginBtnCmp && this.boundLoginButtonClick) {\n            this.loginBtnCmp.getNativeElement().removeEventListener('click', this.boundLoginButtonClick);\n            this.boundLoginButtonClick = null;\n        }\n\n        if (this.formCmp && this.boundFormSubmit) {\n            this.formCmp.getNativeElement().removeEventListener('submit', this.boundFormSubmit);\n            this.boundFormSubmit = null;\n        }\n\n        // MEMORY LEAK FIX: Clear QueryList and ViewChild references\n        this.buttonComponents = null;\n        this.messageCmp = null;\n        this.formCmp = null;\n        this.loginBtnCmp = null;\n\n        super.ngOnDestroy();\n    }\n}\n","<p wmMessage class=\"app-login-message\" #message show.bind=\"loginMessage.show\" caption.bind=\"loginMessage.caption\" type.bind=\"loginMessage.type\"></p>\n<ng-content></ng-content>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}