{"version":3,"file":"js/9017.31f9702ba85ab837.js","mappings":"qOAQM,MAAOA,EAaF,gBAAWC,GAId,OAHKC,KAAKC,QACND,KAAKC,OAAQC,EAAAA,EAAAA,OAEVF,KAAKC,KAChB,CAEQ,uBAAOE,CAAiBC,GAC5BJ,KAAKK,cAAgBD,GAAS,GACzBA,GAAyB,GAAhBA,EAAME,OAGhBN,KAAKD,MAAMQ,QAAQP,KAAKQ,UAAWR,KAAKK,cAAe,aAFvDL,KAAKD,MAAMU,WAAWT,KAAKQ,UAInC,CAEO,sBAAOE,CAAgBC,EAAYC,GAAgB,GACtDZ,KAAKG,iBAAiB,IAAIH,KAAKK,cAAeM,IAC9CX,KAAKa,YAEL,MAAMC,EAAU,IAAIC,SAAQC,MAAOC,EAAKC,KACpC,GAAIN,EACA,IACI,MAAMO,QAAaC,EAAAA,EAAWC,KAAK,8BAA8BV,KACjEM,EAAIE,EACR,CAAE,OACEG,EAAAA,EAAAA,GAAWtB,KAAKuB,iBAAkBvB,KAAKwB,iBACvCxB,KAAKyB,mBAAmBd,GAAI,GAC5BO,GACJ,MAEAD,GAAI,EACR,IAGJ,OAAOH,CACX,CAEO,yBAAOW,CAAmBd,EAAYC,GAAgB,GACzD,MAAMc,EAAYC,KAAKC,MAAMD,KAAKE,UAAU7B,KAAKK,gBACjDqB,EAAUI,OAAOJ,EAAUK,QAAQpB,GAAK,GACxCX,KAAKG,iBAAiBuB,GACtB1B,KAAKa,YAEL,MAAMC,EAAU,IAAIC,SAAQC,MAAOC,EAAKC,KACpC,GAAIN,EACA,IACI,MAAMO,QAAaC,EAAAA,EAAWY,OAAO,8BAA8BrB,KACnEM,EAAIE,EACR,CAAE,MACEnB,KAAKU,gBAAgBC,GAAI,GACzBO,GACJ,MAEAD,GAAI,EACR,IAGJ,OAAOH,CACX,CAEO,qBAAOmB,CAAetB,GACzB,OAAOX,KAAKK,cAAc6B,SAASvB,EACvC,CAEO,uBAAOwB,CAAiB9B,GAC3B,OAAO,IAAIU,SAAQC,MAAOC,EAAKC,KAC3BkB,EAAAA,EAAOC,OACP,IACI,MAAMlB,QAAaC,EAAAA,EAAWkB,IAAI,6BAA8BjC,GAChEY,EAAIE,EACR,CAAE,MACED,KACAI,EAAAA,EAAAA,GAAWtB,KAAKuB,iBAAkBvB,KAAKwB,gBAC3C,CACAY,EAAAA,EAAOG,MAAM,GAErB,CAEQ,wBAAOC,GACX,OAAO,IAAIzB,SAAuB,CAACE,EAAKC,KACpCuB,EAAEC,QAAQ,kCACLC,MAAMxB,IAAI,IAAAyB,EAAA,OAAK3B,EAAe,QAAZ2B,EAAK,OAAJzB,QAAI,IAAJA,OAAI,EAAJA,EAAMf,aAAK,IAAAwC,EAAAA,EAAI,GAAG,IACrCC,OAAM,IAAM3B,KAAM,GAE/B,CAEO,uBAAO4B,CAAiBC,GAC3B,IAAI5B,EAAO,KAMX,OALI4B,IACA5B,EAAO,CACH4B,MAAOA,IAGR,IAAIhC,SAAsC,CAACE,EAAKC,KACnDuB,EAAEC,QAAQ,6BAA8BvB,GACnCwB,MAAMxB,IAAI,IAAA6B,EAAA,OAAK/B,EAAe,QAAZ+B,EAAK,OAAJ7B,QAAI,IAAJA,OAAI,EAAJA,EAAMf,aAAK,IAAA4C,EAAAA,EAAI,GAAG,IACrCH,OAAM,IAAM3B,KAAM,GAE/B,CAEO,cAAO+B,GACV,OAAOjD,KAAKwC,oBACPU,MAAM/B,IACHnB,KAAKG,iBAAiBgB,GACtBnB,KAAKa,YACEE,QAAQoC,QAAQhC,MAE1B0B,OAAM,KACH7C,KAAKG,iBAAiB,IACtBH,KAAKa,WAAW,GAE5B,CAEO,eAAOuC,GACVpD,KAAKG,iBAAiB,MACtBH,KAAKqD,aACT,CAEO,mCAAOC,GACV,MAAM5B,EAAY1B,KAAKD,MAAMwD,QAAkBvD,KAAKQ,WAUpD,OARIkB,GACA1B,KAAKG,iBAAiBuB,GACtB1B,KAAKa,aAGLb,KAAKiD,UAGF,IAAIjD,KAAKK,cACpB,CAEO,uBAAOmD,GAAgB,IAAAC,EAAAC,EAC1B,OAAmD,QAA5CD,EAAoC,QAApCC,EAAC1D,KAAKsD,sCAA8B,IAAAI,OAAA,EAAnCA,EAAqCpD,cAAM,IAAAmD,EAAAA,EAAI,GAAK,CAChE,CAEQ,gBAAO5C,GACXb,KAAKqD,cACL,IAAK,MAAMM,KAAW3D,KAAKK,cAAe,CACtC,MAAMuD,EAAMD,EACZlB,EAAE,sCAAsCmB,OAASC,SAAS,WAC9D,CACJ,CAEQ,kBAAOR,GACXZ,EAAE,iCAAiCqB,YAAY,WACnD,CAEO,gBAAOC,CAAUC,EAAcC,EAAmBC,GACrDF,EAAKG,OAAO,kEAEGF,uBACbC,qBAGFE,YAAW,KACPJ,EAAKK,KAAK,qBAAqBR,SAAS,yBAAyB,GAClE,GAEH,MAAM/C,EAAU,IAAIC,SAAeE,IAC/BmD,YAAW,KACPJ,EAAKK,KAAK,qBAAqBP,YAAY,0BAC3C7C,GAAK,GACN,IAAK,IAOZ,OAJAmD,YAAW,KACPJ,EAAKK,KAAK,qBAAqBC,QAAQ,GACxC,MAEIxD,CACX,CAEO,2BAAOyD,CAAqBC,GAC/BC,UAAUC,KAAK,CACXC,MAAO,yBACPC,OAAQ,CACJC,YAAa,CACTL,SAAUA,MAKtBM,SAASC,cAAc,IAAIC,MAAMlF,EAAoBmF,qBAAsB,CAAEC,SAAS,IAC1F,CAEO,kCAAOC,CAA4BX,GACtCC,UAAUC,KAAK,CACXC,MAAO,4BACPC,OAAQ,CACJQ,eAAgB,CACZZ,SAAUA,MAItBM,SAASC,cAAc,IAAIC,MAAMlF,EAAoBuF,6BAA8B,CAAEH,SAAS,IAClG,CAEO,6BAAOI,GACVR,SAASC,cAAc,IAAIC,MAAMlF,EAAoByF,wBAAyB,CAAEL,SAAS,IAC7F,G,OAtNSpF,EAAmB,wBACS,IAAK0F,EAAAA,EAAAA,GADjC1F,EAAmB,gBAEkB,KAAE0F,EAAAA,EAAAA,GAFvC1F,EAAmB,YAGQ,mBAAgB0F,EAAAA,EAAAA,GAH3C1F,EAAmB,uBAIkB,sBAAmB0F,EAAAA,EAAAA,GAJxD1F,EAAmB,0BAKqB,yBAAsB0F,EAAAA,EAAAA,GAL9D1F,EAAmB,+BAM0B,+BAA4B0F,EAAAA,EAAAA,GANzE1F,EAAmB,mBAQe,gCAA6B0F,EAAAA,EAAAA,GAR/D1F,EAAmB,kBAUxB,iFAA8E0F,EAAAA,EAAAA,GAVzE1F,EAAmB,gBAyNzB,MAAM2F,EAAyBA,KAClC,MAAM,WAAEC,IAAeC,EAAAA,EAAAA,gBACnBD,EAAWE,OACX9F,EAAoBwD,gCAGxBuC,EAAAA,EAAAA,IAAMH,GAAaI,IACXA,EACAhG,EAAoBmD,UAEpBnD,EAAoBsD,UACxB,IAGJX,EAAEqC,UAAUiB,GAAG,QAAS,6CAA8CC,IAIlE,GAHAA,EAAEC,iBACFD,EAAEE,oBAEGP,EAAAA,EAAAA,gBAAeD,WAAWE,MAC3B,OAEJ,GAAI9F,EAAoBqG,qBAKpB,YAJA7E,EAAAA,EAAAA,GACI,iBACA,+FAKR,MAAM8E,EAAO3D,EAAEuD,EAAEK,eACXrC,EAAOoC,EAAKE,QAAQ,wBACpBC,EAASvC,EAAK7C,KAAK,WACnBqF,EAAexC,EAAK7C,KAAK,aAE3BrB,EAAoBmC,eAAesE,GACnCzG,EAAoB2B,mBAAmB8E,GAAQrD,MAAK,KAChDpD,EAAoBqF,4BAAwC,OAAZqB,QAAY,IAAZA,EAAAA,EAAgBD,GAChEzG,EAAoBiE,UAAUC,EAAM,uBAAwB,iCAAiCd,MACzF,KACIpD,EAAoBwF,wBAAwB,GAEnD,IAGLxF,EAAoBY,gBAAgB6F,GAAQrD,MAAK,KAC7CpD,EAAoByE,qBAAiC,OAAZiC,QAAY,IAAZA,EAAAA,EAAgBD,GACzDzG,EAAoBiE,UAAUC,EAAM,qBAAsB,gCAAgC,GAElG,GACF,C,wCChRNvB,GAAE,MACEgD,EAAAA,EAAAA,IAAwB,G,+DCKtB,MAAOrD,EAIF,kBAAWqE,GACd,OAAOzG,KAAK0G,WAAa,CAC7B,CAaA,4BAAOC,GACC7B,SAAS8B,KAAKC,UAAUC,SAAS,WACjC9G,KAAK0G,YAEb,CASA,WAAOrE,CAAK0E,EAAe,GAAI7C,EAAe8C,GAAW,EAAOC,EAAsB,UAClFjH,KAAKkH,eACLlH,KAAK0G,aAEL1G,KAAKmH,YAAcC,OAAOhD,YAAW,KACjCpE,KAAKqH,QAAQnD,EAAM8C,GAAU,EAAMC,EAAM,GAC1CF,EACP,CAMA,cAAOM,CAAQnD,EAAe8C,GAAW,EAAOM,GAAU,EAAOL,EAAsB,UAKnF,GAJKK,GACDtH,KAAK0G,cAGJa,YAAYC,WAAY,CACzB,MAAMC,EAAS3C,SAAS4C,eAAe,UAEvC,IAAKD,EAAQ,OAETT,EACAS,EAAOZ,UAAUc,IAAI,qBAErBF,EAAOZ,UAAUvC,OAAO,qBAExBJ,GACAuD,EAAOG,cAAc,iBAAiBC,YAAc3D,EACpDuD,EAAOZ,UAAUc,IAAI,uBAErBF,EAAOG,cAAc,iBAAiBC,YAAc,GACpDJ,EAAOZ,UAAUvC,OAAO,sBAGd,SAAV2C,GACAQ,EAAOZ,UAAUc,IAAI,gBAGzB7C,SAAS8B,KAAKC,UAAUc,IAAI,SAAU,mBACtC3H,KAAKkH,cACT,CACJ,CAMA,mBAAOY,CAAaf,EAAe,GAAI7C,GACnClE,KAAKqC,KAAK0E,EAAc7C,GAAM,EAClC,CAMA,sBAAO6D,CAAgB7D,GACnBlE,KAAKqH,QAAQnD,GAAM,EACvB,CAKA,WAAO3B,GACHvC,KAAK0G,aACD1G,KAAK0G,WAAa,IAEtB1G,KAAKkH,eACLpC,SAAS8B,KAAKC,UAAUvC,OAAO,mBAC/BtE,KAAKgI,YAAcZ,OAAOhD,YAAW,KACjCU,SAAS8B,KAAKC,UAAUvC,OAAO,UAC/B,MAAMmD,EAAS3C,SAAS4C,eAAe,UACvCD,EAAOG,cAAc,iBAAiBC,YAAc,GACpDJ,EAAOZ,UAAUvC,OAAO,oBAAoB,GAC7C,KACP,CAEQ,mBAAO4C,GACPlH,KAAKmH,cACLD,aAAalH,KAAKmH,aAClBnH,KAAKmH,YAAc,MAEnBnH,KAAKgI,cACLd,aAAalH,KAAKgI,aAClBhI,KAAKgI,YAAc,KAE3B,E,EAvHS5F,GAAMoD,EAAAA,EAAAA,GAANpD,EAAM,uBAAAoD,EAAAA,EAAAA,GAANpD,EAAM,uBAAAoD,EAAAA,EAAAA,GAANpD,EAAM,aAGa,GAAC,MAOrB0C,SAAS8B,KACTqB,EAAKtB,yBAELuB,EAAAA,EAAAA,IAAc,KACVD,EAAKtB,uBAAuB,GAEnC,EAbwB,E,kBCL3B,SAAUuB,EAAcC,GAC1B,GAA4B,YAAxBrD,SAASsD,WACT,OAAOD,IAEPrD,SAASuD,iBAAiB,mBAAoBF,EAEtD,C,mDCTO,MAAM7G,EAAaA,CACtBgH,EACApE,EAAe,KACfqE,EAAmB,KACnBC,EAAe,KACfC,EAAa,KACbC,EAAa,GACbC,GAAiB,EACjBC,IAEO,IAAI7H,SAASoC,IAChB,MAAM0F,EAAUpG,EACZ,mFAAmF6F,UAEvF7F,EAAE,QAAQ0B,OAAO0E,GACjB,MAAMC,EAAWC,KAAKC,IAAIH,EAAQI,QAAS,KAC3CJ,EAAQvE,SAER,MAAM4E,EAAW,8PAIHN,EAAY,2CAA2CA,WAAqB,0DAC7CN,+BAC/BpE,EAAO,kDAAkD4E,SAAgB5E,QAAa,4FAElFqE,EAAW,qDAAqDC,MAASD,QAAiB,+BAExFI,EACM,oCACIJ,EAAW,sBAAwB,uCACbE,aAC1B,uDAGZC,gEAKRS,EAAS1G,EAAEyG,GACjBzG,EAAE,QAAQ0B,OAAOgF,GACjBA,EAAOC,MAAM,QACbD,EAAO9E,KAAK,qBAAqB0B,GAAG,SAAS,KACzC5C,GAAQ,GACRgG,EAAOC,MAAM,OAAO,IAExBD,EAAOpD,GAAG,mBAAmB,KACzBoD,EAAOC,MAAM,WAAW9E,SACpB7B,EAAE,kBAAkBnC,QACpBmC,EAAE,QAAQoB,SAAS,cAEvBV,GAAQ,EAAK,GACf,G","sources":["webpack://@sazka/web/./js/app/casino/favorite-games/casino-favorite-games.ts","webpack://@sazka/web/./js/app/casino/views/_casino-section.ts","webpack://@sazka/web/../../libs/design-system/src/loader/loader.ts","webpack://@sazka/web/../../libs/utils/document-ready.ts","webpack://@sazka/web/../../libs/utils/sazka-alert.ts"],"sourcesContent":["import { CasinoFavoriteGameDto } from \"@/casino/favorite-games/casino-favorite-game-dto\";\r\nimport { useNgSession } from \"@sazka/ng/ng-session\";\r\nimport { Loader } from \"@sazka/design-system/src/loader/loader\";\r\nimport { httpClient } from \"@sazka/utils/http-clients/http-client\";\r\nimport { useSessionStorage } from \"@sazka/utils/use-storage\";\r\nimport { watch } from \"vue\";\r\nimport { sazkaAlert } from \"@sazka/utils/sazka-alert\";\r\n\r\nexport class CasinoFavoriteGames {\r\n    public static interactionsDisabled = false;\r\n    private static favoriteGames: Array<number> = [];\r\n    private static readonly cookieKey = \"favorite-games\";\r\n    public static readonly addFavoriteEventName = \"add-favorite-game\";\r\n    public static readonly removeFavoriteEventName = \"remove-favorite-game\";\r\n    public static readonly removeFavoriteStartEventName = \"remove-favorite-game-start\";\r\n\r\n    private static readonly ErrorTitleOnSave = \"Při ukládání nastal problém\";\r\n    private static readonly ErrorTextOnSave =\r\n        \"Při ukládání vašich oblíbených her nastal problém. Zkuste to prosím později.\";\r\n\r\n    private static store: ReturnType<typeof useSessionStorage>;\r\n    public static get Store(): ReturnType<typeof useSessionStorage> {\r\n        if (!this.store) {\r\n            this.store = useSessionStorage();\r\n        }\r\n        return this.store;\r\n    }\r\n\r\n    private static setFavoriteGames(games: Array<number>) {\r\n        this.favoriteGames = games || [];\r\n        if (!games || games.length == 0) {\r\n            this.Store.removeItem(this.cookieKey);\r\n        } else {\r\n            this.Store.setJson(this.cookieKey, this.favoriteGames, \"essential\");\r\n        }\r\n    }\r\n\r\n    public static addFavoriteGame(id: number, saveOnBackend = true) {\r\n        this.setFavoriteGames([...this.favoriteGames, id]);\r\n        this.highlight();\r\n\r\n        const promise = new Promise(async (res, rej) => {\r\n            if (saveOnBackend) {\r\n                try {\r\n                    const data = await httpClient.post(`/api/casino/favorite-games/${id}`);\r\n                    res(data);\r\n                } catch {\r\n                    sazkaAlert(this.ErrorTitleOnSave, this.ErrorTextOnSave);\r\n                    this.removeFavoriteGame(id, false);\r\n                    rej();\r\n                }\r\n            } else {\r\n                res(true);\r\n            }\r\n        });\r\n\r\n        return promise;\r\n    }\r\n\r\n    public static removeFavoriteGame(id: number, saveOnBackend = true) {\r\n        const favorites = JSON.parse(JSON.stringify(this.favoriteGames));\r\n        favorites.splice(favorites.indexOf(id), 1);\r\n        this.setFavoriteGames(favorites);\r\n        this.highlight();\r\n\r\n        const promise = new Promise(async (res, rej) => {\r\n            if (saveOnBackend) {\r\n                try {\r\n                    const data = await httpClient.delete(`/api/casino/favorite-games/${id}`);\r\n                    res(data);\r\n                } catch {\r\n                    this.addFavoriteGame(id, false);\r\n                    rej();\r\n                }\r\n            } else {\r\n                res(true);\r\n            }\r\n        });\r\n\r\n        return promise;\r\n    }\r\n\r\n    public static isFavoriteGame(id: number) {\r\n        return this.favoriteGames.includes(id);\r\n    }\r\n\r\n    public static putFavoriteGames(favoriteGames: number[]) {\r\n        return new Promise(async (res, rej) => {\r\n            Loader.show();\r\n            try {\r\n                const data = await httpClient.put(\"/api/casino/favorite-games\", favoriteGames);\r\n                res(data);\r\n            } catch {\r\n                rej();\r\n                sazkaAlert(this.ErrorTitleOnSave, this.ErrorTextOnSave);\r\n            }\r\n            Loader.hide();\r\n        });\r\n    }\r\n\r\n    private static loadFavoriteGames(): Promise<Array<number>> {\r\n        return new Promise<Array<number>>((res, rej) => {\r\n            $.getJSON(\"/api/casino/favorite-games/ids\")\r\n                .done((data) => res(data?.games ?? []))\r\n                .catch(() => rej());\r\n        });\r\n    }\r\n\r\n    public static getFavoriteGames(limit?: number): Promise<Array<CasinoFavoriteGameDto>> {\r\n        let data = null;\r\n        if (limit) {\r\n            data = {\r\n                limit: limit,\r\n            };\r\n        }\r\n        return new Promise<Array<CasinoFavoriteGameDto>>((res, rej) => {\r\n            $.getJSON(\"/api/casino/favorite-games\", data)\r\n                .done((data) => res(data?.games ?? []))\r\n                .catch(() => rej());\r\n        });\r\n    }\r\n\r\n    public static onLogin() {\r\n        return this.loadFavoriteGames()\r\n            .then((data) => {\r\n                this.setFavoriteGames(data);\r\n                this.highlight();\r\n                return Promise.resolve(data);\r\n            })\r\n            .catch(() => {\r\n                this.setFavoriteGames([]);\r\n                this.highlight();\r\n            });\r\n    }\r\n\r\n    public static onLogout() {\r\n        this.setFavoriteGames(null);\r\n        this.unHighlight();\r\n    }\r\n\r\n    public static loadFavoriteGamesFromSession() {\r\n        const favorites = this.Store.getJson<number[]>(this.cookieKey);\r\n\r\n        if (favorites) {\r\n            this.setFavoriteGames(favorites);\r\n            this.highlight();\r\n        } else {\r\n            // we have arrived to section, which requires favorite casino games\r\n            this.onLogin();\r\n        }\r\n\r\n        return [...this.favoriteGames]; // return new array to prevent modifications\r\n    }\r\n\r\n    public static hasFavoriteGames() {\r\n        return (this.loadFavoriteGamesFromSession()?.length ?? 0) > 0;\r\n    }\r\n\r\n    private static highlight() {\r\n        this.unHighlight();\r\n        for (const element of this.favoriteGames) {\r\n            const fav = element;\r\n            $(`.product-card__inner[data-game-id=\"${fav}\"]`).addClass(\"favorite\");\r\n        }\r\n    }\r\n\r\n    private static unHighlight() {\r\n        $(\".product-card__inner.favorite\").removeClass(\"favorite\");\r\n    }\r\n\r\n    public static animation(card: JQuery, iconClass: string, text: string) {\r\n        card.append(`\r\n        <div class=\"favorite-confirm\">\r\n        <span class='${iconClass}'></span>\r\n        ${text}\r\n        </div>`);\r\n\r\n        setTimeout(() => {\r\n            card.find(\".favorite-confirm\").addClass(\"favorite-confirm__fade\");\r\n        }, 0);\r\n\r\n        const promise = new Promise<void>((res) => {\r\n            setTimeout(() => {\r\n                card.find(\".favorite-confirm\").removeClass(\"favorite-confirm__fade\");\r\n                res();\r\n            }, 3000);\r\n        });\r\n\r\n        setTimeout(() => {\r\n            card.find(\".favorite-confirm\").remove();\r\n        }, 3300);\r\n\r\n        return promise;\r\n    }\r\n\r\n    public static triggerFavoriteAdded(gameCode: string) {\r\n        dataLayer.push({\r\n            event: \"action.addFavorite.hry\",\r\n            action: {\r\n                addFavorite: {\r\n                    gameCode: gameCode,\r\n                },\r\n            },\r\n        });\r\n\r\n        document.dispatchEvent(new Event(CasinoFavoriteGames.addFavoriteEventName, { bubbles: true }));\r\n    }\r\n\r\n    public static triggerFavoriteRemovedStart(gameCode: string) {\r\n        dataLayer.push({\r\n            event: \"action.removeFavorite.hry\",\r\n            action: {\r\n                removeFavorite: {\r\n                    gameCode: gameCode,\r\n                },\r\n            },\r\n        });\r\n        document.dispatchEvent(new Event(CasinoFavoriteGames.removeFavoriteStartEventName, { bubbles: true }));\r\n    }\r\n\r\n    public static triggerFavoriteRemoved() {\r\n        document.dispatchEvent(new Event(CasinoFavoriteGames.removeFavoriteEventName, { bubbles: true }));\r\n    }\r\n}\r\n\r\nexport const useCasinoFavoriteGames = () => {\r\n    const { isLoggedIn } = useNgSession();\r\n    if (isLoggedIn.value) {\r\n        CasinoFavoriteGames.loadFavoriteGamesFromSession();\r\n    }\r\n\r\n    watch(isLoggedIn, (newValue) => {\r\n        if (newValue) {\r\n            CasinoFavoriteGames.onLogin();\r\n        } else {\r\n            CasinoFavoriteGames.onLogout();\r\n        }\r\n    });\r\n\r\n    $(document).on(\"click\", \".product-card--casino .product-card__star\", (e) => {\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n\r\n        if (!useNgSession().isLoggedIn.value) {\r\n            return;\r\n        }\r\n        if (CasinoFavoriteGames.interactionsDisabled) {\r\n            sazkaAlert(\r\n                \"Probíhá řazení\",\r\n                \"Přidávání a odebírání z oblíbených se zpřístupní po dokončení řazení vašich oblíbených her.\"\r\n            );\r\n            return;\r\n        }\r\n\r\n        const elem = $(e.currentTarget);\r\n        const card = elem.closest(\".product-card__inner\");\r\n        const gameId = card.data(\"game-id\");\r\n        const gameCodeName = card.data(\"game-code\");\r\n\r\n        if (CasinoFavoriteGames.isFavoriteGame(gameId)) {\r\n            CasinoFavoriteGames.removeFavoriteGame(gameId).then(() => {\r\n                CasinoFavoriteGames.triggerFavoriteRemovedStart(gameCodeName ?? gameId);\r\n                CasinoFavoriteGames.animation(card, \"product-card__delete\", \"Odebráno<br/>z oblíbených her\").then(\r\n                    () => {\r\n                        CasinoFavoriteGames.triggerFavoriteRemoved();\r\n                    }\r\n                );\r\n            });\r\n        } else {\r\n            CasinoFavoriteGames.addFavoriteGame(gameId).then(() => {\r\n                CasinoFavoriteGames.triggerFavoriteAdded(gameCodeName ?? gameId); // cannot wait for animation to finish here - floor would render last game multiple times (in case more games are marked at once)\r\n                CasinoFavoriteGames.animation(card, \"product-card__star\", \"Přidáno mezi<br/>oblíbené hry\");\r\n            });\r\n        }\r\n    });\r\n};\r\n","import { useCasinoFavoriteGames } from \"../favorite-games/casino-favorite-games\";\r\n\r\n$(() => {\r\n    useCasinoFavoriteGames();\r\n});\r\n","import { documentReady } from \"@sazka/utils/document-ready\";\r\n\r\ndeclare const environment: any;\r\ntype ColorVariant = \"yellow\" | \"blue\";\r\n\r\n/**\r\n * Loader tells user, he has to wait for some ajax operation\r\n */\r\nexport class Loader {\r\n    private static showTimeout: number;\r\n    private static hideTimeout: number;\r\n    private static lockNumber = 0;\r\n    public static get isShown() {\r\n        return this.lockNumber > 0;\r\n    }\r\n\r\n    static {\r\n        // loader from backend\r\n        if (document.body) {\r\n            this.showLoaderFromBackend();\r\n        } else {\r\n            documentReady(() => {\r\n                this.showLoaderFromBackend();\r\n            });\r\n        }\r\n    }\r\n\r\n    static showLoaderFromBackend() {\r\n        if (document.body.classList.contains(\"loader\")) {\r\n            this.lockNumber++;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Shows loader after some time in miliseconds\r\n     * This is to reduce flickering when ajax actions are super-fast\r\n     *\r\n     * @param showLoaderIn Time in miliseconds, after which, loaded will be shown\r\n     * @param text Title (waiting message) displayed in loader\r\n     */\r\n    static show(showLoaderIn = 30, text?: string, aboveAll = false, color: ColorVariant = \"yellow\") {\r\n        this.clearTimeout();\r\n        this.lockNumber++;\r\n\r\n        this.showTimeout = window.setTimeout(() => {\r\n            this.showNow(text, aboveAll, true, color);\r\n        }, showLoaderIn);\r\n    }\r\n\r\n    /**\r\n     * Shows loader right away\r\n     * @param text Title (waiting message) displayed in loader\r\n     */\r\n    static showNow(text?: string, aboveAll = false, counted = false, color: ColorVariant = \"yellow\") {\r\n        if (!counted) {\r\n            this.lockNumber++;\r\n        }\r\n\r\n        if (!environment.isEditMode) {\r\n            const loader = document.getElementById(\"loader\");\r\n\r\n            if (!loader) return;\r\n\r\n            if (aboveAll) {\r\n                loader.classList.add(\"loader--above-all\");\r\n            } else {\r\n                loader.classList.remove(\"loader--above-all\");\r\n            }\r\n            if (text) {\r\n                loader.querySelector(\".loader__text\").textContent = text;\r\n                loader.classList.add(\"loader--with-text\");\r\n            } else {\r\n                loader.querySelector(\".loader__text\").textContent = \"\";\r\n                loader.classList.remove(\"loader--with-text\");\r\n            }\r\n\r\n            if (color === \"blue\") {\r\n                loader.classList.add(\"loader--blue\");\r\n            }\r\n\r\n            document.body.classList.add(\"loader\", \"loader--fade-in\");\r\n            this.clearTimeout();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Shows loader after delay with z-index of 9999\r\n     * @param text Title (waiting message) displayed in loader\r\n     */\r\n    static showAboveAll(showLoaderIn = 30, text?: string) {\r\n        this.show(showLoaderIn, text, true);\r\n    }\r\n\r\n    /**\r\n     * Shows loader right away with z-index of 9999\r\n     * @param text Title (waiting message) displayed in loader\r\n     */\r\n    static showNowAboveAll(text?: string) {\r\n        this.showNow(text, true);\r\n    }\r\n\r\n    /**\r\n     * Hides loader\r\n     */\r\n    static hide() {\r\n        this.lockNumber--;\r\n        if (this.lockNumber > 0) return;\r\n\r\n        this.clearTimeout();\r\n        document.body.classList.remove(\"loader--fade-in\");\r\n        this.hideTimeout = window.setTimeout(() => {\r\n            document.body.classList.remove(\"loader\");\r\n            const loader = document.getElementById(\"loader\");\r\n            loader.querySelector(\".loader__text\").textContent = \"\";\r\n            loader.classList.remove(\"loader--with-text\");\r\n        }, 150);\r\n    }\r\n\r\n    private static clearTimeout() {\r\n        if (this.showTimeout) {\r\n            clearTimeout(this.showTimeout);\r\n            this.showTimeout = null;\r\n        }\r\n        if (this.hideTimeout) {\r\n            clearTimeout(this.hideTimeout);\r\n            this.hideTimeout = null;\r\n        }\r\n    }\r\n}\r\n","/**\r\n * Vanila JS variant to jQuery $(() => {}).\r\n * @param {callback} callback\r\n * @example - documentReady(() => {}).\r\n * This function is binding to document.ready\r\n * */\r\nexport function documentReady(callback: () => void) {\r\n    if (document.readyState !== \"loading\") {\r\n        return callback();\r\n    } else {\r\n        document.addEventListener(\"DOMContentLoaded\", callback);\r\n    }\r\n}\r\n","/**\r\n * @deprecated Use showAlert a DS component\r\n */\r\nexport const sazkaAlert = (\r\n    title: string,\r\n    text: string = null,\r\n    linkText: string = null,\r\n    link: string = null,\r\n    buttonText = \"OK\",\r\n    customHtml = \"\",\r\n    hasExtraButton = true,\r\n    errorCode?: number\r\n): Promise<boolean> => {\r\n    return new Promise((resolve) => {\r\n        const heading = $(\r\n            `<h2 class=\"sazka-alert__title\" style=\"visibility:hidden; display:inline-block;\">${title}</h2>`\r\n        );\r\n        $(\"body\").append(heading);\r\n        const maxWidth = Math.max(heading.width(), 300);\r\n        heading.remove();\r\n\r\n        const template = `\r\n        <div class=\"modal fade sazka-alert\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n            <div class=\"modal-dialog modal-dialog-centered\">\r\n                <div class=\"modal-content modal-content--without-close\">\r\n                    ${errorCode ? `<span class='sazka-alert__ecode'>ecode: ${errorCode}</span>` : \"\"}\r\n                    <h2 class=\"sazka-alert__title\">${title}</h2>\r\n                    ${text ? `<p class=\"sazka-alert__text\" style=\"max-width: ${maxWidth}px;\">${text}</p>` : \"\"}\r\n                    <div class=\"sazka-alert__button-group\">\r\n                        ${linkText ? `<a class=\"btn btn-primary sazka-alert--btn\" href=\"${link}\">${linkText}</a>` : \"\"}\r\n                        ${\r\n                            hasExtraButton\r\n                                ? `<button type=\"button\" class=\"btn ${\r\n                                      linkText ? \"btn-outline-primary\" : \"btn-primary\"\r\n                                  }\" data-dismiss=\"modal\">${buttonText}</button>`\r\n                                : \"\"\r\n                        }\r\n                    </div>\r\n                    ${customHtml}\r\n                </div>\r\n            </div>\r\n        </div>`;\r\n\r\n        const $modal = $(template);\r\n        $(\"body\").append($modal);\r\n        $modal.modal(\"show\");\r\n        $modal.find(\".sazka-alert--btn\").on(\"click\", () => {\r\n            resolve(false);\r\n            $modal.modal(\"hide\");\r\n        });\r\n        $modal.on(\"hidden.bs.modal\", () => {\r\n            $modal.modal(\"dispose\").remove();\r\n            if ($(\".modal:visible\").length) {\r\n                $(\"body\").addClass(\"modal-open\");\r\n            }\r\n            resolve(true);\r\n        });\r\n    });\r\n};\r\n"],"names":["CasinoFavoriteGames","Store","this","store","useSessionStorage","setFavoriteGames","games","favoriteGames","length","setJson","cookieKey","removeItem","addFavoriteGame","id","saveOnBackend","highlight","promise","Promise","async","res","rej","data","httpClient","post","sazkaAlert","ErrorTitleOnSave","ErrorTextOnSave","removeFavoriteGame","favorites","JSON","parse","stringify","splice","indexOf","delete","isFavoriteGame","includes","putFavoriteGames","Loader","show","put","hide","loadFavoriteGames","$","getJSON","done","_data$games","catch","getFavoriteGames","limit","_data$games2","onLogin","then","resolve","onLogout","unHighlight","loadFavoriteGamesFromSession","getJson","hasFavoriteGames","_this$loadFavoriteGam","_this$loadFavoriteGam2","element","fav","addClass","removeClass","animation","card","iconClass","text","append","setTimeout","find","remove","triggerFavoriteAdded","gameCode","dataLayer","push","event","action","addFavorite","document","dispatchEvent","Event","addFavoriteEventName","bubbles","triggerFavoriteRemovedStart","removeFavorite","removeFavoriteStartEventName","triggerFavoriteRemoved","removeFavoriteEventName","_defineProperty","useCasinoFavoriteGames","isLoggedIn","useNgSession","value","watch","newValue","on","e","preventDefault","stopPropagation","interactionsDisabled","elem","currentTarget","closest","gameId","gameCodeName","isShown","lockNumber","showLoaderFromBackend","body","classList","contains","showLoaderIn","aboveAll","color","clearTimeout","showTimeout","window","showNow","counted","environment","isEditMode","loader","getElementById","add","querySelector","textContent","showAboveAll","showNowAboveAll","hideTimeout","_Loader","documentReady","callback","readyState","addEventListener","title","linkText","link","buttonText","customHtml","hasExtraButton","errorCode","heading","maxWidth","Math","max","width","template","$modal","modal"],"sourceRoot":""}