{"version":3,"file":"3590.5459ea884b96e188fe4b.bundle.mjs","mappings":"0GAAe,SAASA,EAAoBC,EAAWC,GACnD,IACIC,EADAC,EAAe,KAGnB,OAAO,YAAqBC,GACxB,IAAIC,GAAa,EACG,MAAhBF,IACAE,EAAaL,EAAUM,MAAM,KAAMH,EAAaI,OAAOH,KAE3DD,EAAeC,EACXC,IACIH,IACAA,IACAA,EAAU,MAEdA,EAAUD,EAASK,MAAM,KAAMF,GAEvC,CACJ,C,oGCfA,MAAMI,GAAsB,E,QAAA,IAAM,SAC9BC,EACAC,EACAC,EACAC,EACAC,GAEA,OAAOD,IACFE,MAAMC,GAAQA,EAAIN,KAClBK,MAAME,GAAiBA,EAAaN,EAASC,EAAcE,IACpE,IAEe,SAASI,EACpBC,EACAR,EACAC,EACAQ,GAEA,MAAMC,EACFF,KAAsBG,OAAOC,aAAeD,OAAOC,aAAaJ,GAAsB,KAEpFK,EAAYH,GAAwBD,EAE1C,OAAO,SAAeL,MAAML,IACxB,MAAMe,EAAShB,EAAoBC,EAAUC,EAASC,GAChDc,EAAYL,EAAuB,IAAMI,EAAOL,EAAsB,MAAQ,KACpF,OAAOK,EAAOD,EAAWE,GAAWX,MAAMY,GAAe,CAACjB,EAAUiB,IAAY,GAExF,C,qEC7BO,MAAMC,GAAyB,QAAM,CAAClB,EAAUmB,EAAQC,EAASC,EAAOC,KAC3EF,EAAQG,UAAUC,IAAI,SAAU,aAChC,MAAMC,EAAWzB,EAAS0B,OAAOC,EAAER,EAAQE,GAC3C,OAAOrB,EAAS0B,OAAOE,OAAOH,EAAUL,EAASE,EAAY,IAGjE,KAAe,QAAM,SAA+BtB,EAAUmB,EAAQC,EAASC,GAC3E,OAAOH,EAAuBlB,EAAUmB,EAAQC,EAASC,EAAO,KACpE,G,uVCNA,MAAMQ,EAAmB,IAAIC,IACvBC,EAAa,IAAID,IAEjBE,GAAW,EAAAC,EAAA,IAAM,SAAkBC,EAAMC,GAC3CA,EAAGD,EACP,IAEME,GAAsB,EAAAH,EAAA,IAAM,SAA6BI,EAAQH,GAC9CL,EAAiBS,IAAID,GAC7BE,QAAQP,EAASE,IAC9BH,EAAWS,IACPH,EACAI,YAAW,KACPC,EAAqBL,EAAO,GAC7B,KAEX,IAEA,SAASK,EAAqBL,GAC1BM,EAAWN,GAAQhC,KAAK+B,EAAoBC,IAASO,MAAMC,QAAQC,MACvE,CAEA,MAAMC,GAAqB,EAAAC,EAAA,IAAM,SAA4BX,EAAQF,GACjE,IAAKN,EAAiBoB,IAAIZ,GACtB,OAEJ,MAAMa,EAAerB,EAAiBS,IAAID,GAE1Ca,EAAaC,OAAOhB,GACM,IAAtBe,EAAaE,MAAcrB,EAAWkB,IAAIZ,IAC1CgB,aAAatB,EAAWO,IAAID,GAEpC,IAEO,SAASiB,EAAkBjB,EAAQF,GACjCN,EAAiBoB,IAAIZ,IACtBR,EAAiBW,IAAIH,EAAQ,IAAIkB,KAGrC,MAAML,EAAerB,EAAiBS,IAAID,GAO1C,OALAa,EAAa1B,IAAIW,GACS,IAAtBe,EAAaE,MACbV,EAAqBL,GAGlBU,EAAmBV,EAAQF,EACtC,CAEO,SAASQ,EAAWN,GACvB,OAAO,QAAoB,uBAAuBA,IAAU,MAChE,CAEO,SAASmB,EAAanB,GACzB,OAAO,QAAoB,uBAAuBA,IAAU,SAChE,CAEO,SAASoB,EAAsBC,EAAQC,EAAOC,GACjD,OAAO,QACH,uBAAuBF,WAAgBC,kBAAsBC,IAC7D,MAER,CChEA,MAAMC,EAAiB,IAAM,+BAAmBxD,MAAMyD,GAAWA,EAAOC,UCYlEC,EAAiB,CAJE,EACH,GACI,IAI1B,SAASC,EAAeC,EAASC,EAAcC,EAAKC,GAChD,OAAIH,GAAWE,GAIRC,EAASC,YAAYC,QAAUJ,EAAaG,YAAYC,KACnE,CAEA,SAASC,EAAuBC,GAC5B,MAAO,IAAKA,EAAcC,UAAU,EACxC,CAEA,SAASC,EAAmBF,GACxB,MAAM,mBACFG,EAAkB,kBAClBC,EAAiB,GACjBC,EAAE,aACFC,EAAY,eACZC,EAAc,eACdC,EAAc,gBACdC,EAAe,kBACfC,EAAiB,kBACjBC,EAAiB,cACjBC,GACAZ,EACJ,MAAO,CACHK,GAAIA,EACJQ,QAASP,EACTQ,SAAUV,EACVW,UAAWZ,EACXa,WAAYT,EACZU,UAAW,CAACT,EAAgBC,GAAiBS,OAAOC,SAASC,KAAK,KAClEC,SAAU,GAAGX,KAAqBC,IAClCW,KAAMZ,EACNa,UAAWX,EACXX,UAAU,EAElB,CAEA,SAASuB,EAA6BC,GAClC,OAAOA,EAAcC,IAAIxB,EAC7B,CAEA,SAASD,EAASD,GACd,OAAOA,EAAaC,QACxB,CAEO,MAAM0B,GAAoB,EAAAnE,EAAA,IAAM,SACnCoE,EACAC,GACA,kBAAEhD,EAAiB,aAAEE,EAAY,sBAAEC,GACnCW,EACAC,GAEA,GAAID,EAEA,OADAvB,QAAQC,MAAMsB,GACP,KAEX,IAAImC,GAAiB,EACrB,MAAM,YAAEjC,GAAgBD,EAClBmC,EAAUlC,EAAYmC,aACtBC,EAAWpC,EAAYC,MAE7B,SAASoC,EAA4BlC,GACjC,OAAO6B,EAAOM,SAASnC,EAAauB,UACxC,CAEA,SAASa,EAA0BX,GAC/B,OAAOA,EAAcP,OAAOgB,EAChC,CAEA,MAAMG,GAAgB,EAAA9D,EAAA,IAAM,SAAuBkD,GAC/CK,EAAgB,EAChB/C,EAAac,EAAYQ,IACzBiC,EAAYb,EAAcC,IAAI3B,GAClC,IAEA,SAASuC,EAAYb,GACjBG,EAAa,CACTH,gBACAM,UACAE,WACAM,MAAOd,EAAcP,OAAOjB,GAAUuC,OACtCH,cAAeA,EAAcZ,IAErC,CAEA,MAAMgB,GAA0B,EAAAjF,EAAA,IAAM,SAClCkF,EACAjB,GAEA,OAAOA,EAAcC,KAAI,CAAC1B,EAAc2C,KAAU,IAC3C3C,EACHC,SAAU0C,EAAQD,KAE1B,IAiBMpE,EAAqBO,EAAkBgB,EAAYQ,IAPzD,SAAoB5C,GARpB,IAA0BiF,EASlBjF,EAAK8E,MAAQT,IACbA,EAAgBrE,EAAK8E,MAVHG,EAWDZ,EAVrB9C,EAAsB,EAAG,GAAI,GACxBpD,KAAK4F,GACL5F,KAAKwG,GACLxG,KAAK6G,EAAwBC,IAC7B9G,KAAK0G,GAQd,IAIA,OADAA,EAAY,IACLhE,CACX,IAEMsE,EAASC,GAAWC,SAASD,EAAQ,IAErCE,GAAW,EAAAvF,EAAA,IAAM,SAAkBhC,EAASmB,GAAUpB,EAAUmB,IAClE,MAAMmF,EAASlF,EAAQqG,QAAQnB,OACzBlF,EAAQqG,QAAQnB,OAAOoB,MAAM,KAAKvB,IAAIkB,GACtC,IAAIrD,GAEV/D,EAAQ0H,mBACJ,EAAArI,EAAA,GACI2E,EACAmC,GACI,EAAAwB,EAAA,GAAsB5H,EAAUmB,EAAQC,GACxCkF,EACA,IAIhB,IAEM,EAAiB,IAAM,+BAAmBjG,MAAMyD,GAAWA,EAAOC,UAEzD,SAAS,EAAS9D,EAASmB,IDtJ3B,SAAkBnB,GAC7B,OAAO,EAAA4H,EAAA,GAAiB,wBAAyB5H,EAAS,CAAC,EAAG4D,EAClE,ECqJI,CAAiB5D,GACZI,MAAK,EAAEL,EAAU8H,OACd,EAAAD,EAAA,GAAiB,cAAe5H,EAAS,CAAE6H,gBAAgB,GACtDzH,KAAKmH,EAASvH,EAASmB,IACvBwB,MAAMC,QAAQC,MAAM,IAE5BF,MAAMC,QAAQC,MACvB,C","sources":["webpack://socialUX/./utils/callIfArgumentsPass.js","webpack://socialUX/./utils/loadPreactModule.js","webpack://socialUX/./utils/renderPreactWithProps.js","webpack://socialUX/./transport/river.js","webpack://socialUX/./views/river/topbar/notification/loader.js","webpack://socialUX/./views/river/topbar/renderer.js"],"sourcesContent":["export default function callIfArgumentsPass(condition, callback) {\r\n    let previousArgs = null;\r\n    let cleanup;\r\n\r\n    return function onCalled(...args) {\r\n        let shouldCall = true;\r\n        if (previousArgs != null) {\r\n            shouldCall = condition.apply(null, previousArgs.concat(args));\r\n        }\r\n        previousArgs = args;\r\n        if (shouldCall) {\r\n            if (cleanup) {\r\n                cleanup();\r\n                cleanup = null;\r\n            }\r\n            cleanup = callback.apply(null, args);\r\n        }\r\n    };\r\n}\r\n","import loadRenderer from \"../renderer/loadRenderer\";\r\nimport curry from \"../lib/core/functional/curry\";\r\n\r\nconst prepareModuleLoader = curry(function prepareModuleLoader(\r\n    renderer,\r\n    context,\r\n    dependencies,\r\n    moduleLoader,\r\n    altLoader\r\n) {\r\n    return moduleLoader()\r\n        .then((mod) => mod(renderer))\r\n        .then((moduleGetter) => moduleGetter(context, dependencies, altLoader));\r\n});\r\n\r\nexport default function preactLoader(\r\n    externalModuleName,\r\n    context,\r\n    dependencies,\r\n    internalModuleLoader\r\n) {\r\n    const externalModuleLoader =\r\n        externalModuleName in window.RM_OVERRIDES ? window.RM_OVERRIDES[externalModuleName] : null;\r\n\r\n    const getModule = externalModuleLoader || internalModuleLoader;\r\n\r\n    return loadRenderer().then((renderer) => {\r\n        const loader = prepareModuleLoader(renderer, context, dependencies);\r\n        const altModule = externalModuleLoader ? () => loader(internalModuleLoader, null) : null;\r\n        return loader(getModule, altModule).then((mainModule) => [renderer, mainModule]);\r\n    });\r\n}\r\n","import curry from \"../lib/core/functional/curry\";\r\n\r\nexport const replacePreactWithProps = curry((renderer, Module, element, props, replaceNode) => {\r\n    element.classList.add(\"loaded\", \"rm-preact\");\r\n    const rendered = renderer.preact.h(Module, props);\r\n    return renderer.preact.render(rendered, element, replaceNode);\r\n});\r\n\r\nexport default curry(function renderPreactWithProps(renderer, Module, element, props) {\r\n    return replacePreactWithProps(renderer, Module, element, props, null);\r\n});\r\n","import curry from \"../lib/core/functional/curry\";\r\nimport thunk from \"../lib/core/functional/thunk\";\r\nimport { retrieveJsonRequest } from \"./utils\";\r\n\r\nconst counterListeners = new Map();\r\nconst timeoutIds = new Map();\r\n\r\nconst emitData = curry(function emitData(data, cb) {\r\n    cb(data);\r\n});\r\n\r\nconst emitCounterResponse = curry(function emitCounterResponse(siteId, data) {\r\n    const callbackList = counterListeners.get(siteId);\r\n    callbackList.forEach(emitData(data));\r\n    timeoutIds.set(\r\n        siteId,\r\n        setTimeout(() => {\r\n            startCounterListener(siteId);\r\n        }, 1e4)\r\n    );\r\n});\r\n\r\nfunction startCounterListener(siteId) {\r\n    getCounter(siteId).then(emitCounterResponse(siteId)).catch(console.error);\r\n}\r\n\r\nconst stopCounterUpdates = thunk(function stopCounterUpdates(siteId, cb) {\r\n    if (!counterListeners.has(siteId)) {\r\n        return;\r\n    }\r\n    const callbackList = counterListeners.get(siteId);\r\n\r\n    callbackList.delete(cb);\r\n    if (callbackList.size === 0 && timeoutIds.has(siteId)) {\r\n        clearTimeout(timeoutIds.get(siteId));\r\n    }\r\n});\r\n\r\nexport function getCounterUpdates(siteId, cb) {\r\n    if (!counterListeners.has(siteId)) {\r\n        counterListeners.set(siteId, new Set());\r\n    }\r\n\r\n    const callbackList = counterListeners.get(siteId);\r\n\r\n    callbackList.add(cb);\r\n    if (callbackList.size === 1) {\r\n        startCounterListener(siteId);\r\n    }\r\n\r\n    return stopCounterUpdates(siteId, cb);\r\n}\r\n\r\nexport function getCounter(siteId) {\r\n    return retrieveJsonRequest(`/core/river/counter/${siteId}`, \"GET\");\r\n}\r\n\r\nexport function clearCounter(siteId) {\r\n    return retrieveJsonRequest(`/core/river/counter/${siteId}`, \"DELETE\");\r\n}\r\n\r\nexport function getLastPublishedPosts(offset, limit, clearUnread) {\r\n    return retrieveJsonRequest(\r\n        `/core/river/?offset=${offset}&limit=${limit}&clear_unread=${clearUnread}`,\r\n        \"GET\"\r\n    );\r\n}\r\n","import loadPreactModule from \"../../../../utils/loadPreactModule\";\r\n\r\nconst internalLoader = () => import(\"./module\").then((module) => module.default);\r\n\r\nexport default function renderer(context) {\r\n    return loadPreactModule(\"RiverNotificationItem\", context, {}, internalLoader);\r\n}\r\n","import loadPreactModule from \"../../../utils/loadPreactModule\";\r\nimport callIfArgumentsPass from \"../../../utils/callIfArgumentsPass\";\r\nimport renderPreactWithProps from \"../../../utils/renderPreactWithProps\";\r\nimport curry from \"../../../lib/core/functional/curry\";\r\nimport thunk from \"../../../lib/core/functional/thunk\";\r\n\r\nimport * as riverTransport from \"../../../transport/river\";\r\n\r\nimport loadNotification from \"./notification/loader\";\r\n\r\nconst USER_IS_FOLLOWED = 4;\r\nconst REPLY_COMMENT = 27;\r\nconst POST_TALK_COMMENT = 28;\r\n\r\nconst DEFAULT_EVENTS = [USER_IS_FOLLOWED, REPLY_COMMENT, POST_TALK_COMMENT];\r\n\r\nfunction isUserLoggedIn(prevErr, prevUserInfo, err, userInfo) {\r\n    if (prevErr != err) {\r\n        return true;\r\n    }\r\n\r\n    return userInfo.profileSite.title !== prevUserInfo.profileSite.title;\r\n}\r\n\r\nfunction markNotificationAsRead(notification) {\r\n    return { ...notification, isUnread: false };\r\n}\r\n\r\nfunction formatNotification(notification) {\r\n    const {\r\n        emitter_site_title,\r\n        emitter_site_name,\r\n        id,\r\n        message_html,\r\n        emitter_avatar,\r\n        post_permalink,\r\n        reply_url_param,\r\n        created_date_html,\r\n        created_time_html,\r\n        event_type_id,\r\n    } = notification;\r\n    return {\r\n        id: id,\r\n        message: message_html,\r\n        siteName: emitter_site_name,\r\n        siteTitle: emitter_site_title,\r\n        siteAvatar: emitter_avatar,\r\n        permalink: [post_permalink, reply_url_param].filter(Boolean).join(\"?\"),\r\n        fullDate: `${created_date_html} ${created_time_html}`,\r\n        date: created_date_html,\r\n        eventType: event_type_id,\r\n        isUnread: false,\r\n    };\r\n}\r\n\r\nfunction handlePublishedPostsResponse(notifications) {\r\n    return notifications.map(formatNotification);\r\n}\r\n\r\nfunction isUnread(notification) {\r\n    return notification.isUnread;\r\n}\r\n\r\nexport const renderRiverTopBar = curry(function renderRiverTopBar(\r\n    renderModule,\r\n    events,\r\n    { getCounterUpdates, clearCounter, getLastPublishedPosts },\r\n    err,\r\n    userInfo\r\n) {\r\n    if (err) {\r\n        console.error(err);\r\n        return null;\r\n    }\r\n    let previousCount = -1;\r\n    const { profileSite } = userInfo;\r\n    const picture = profileSite.display_logo;\r\n    const username = profileSite.title;\r\n\r\n    function notificationIsOfAllowedType(notification) {\r\n        return events.includes(notification.eventType);\r\n    }\r\n\r\n    function filterNotificationsByType(notifications) {\r\n        return notifications.filter(notificationIsOfAllowedType);\r\n    }\r\n\r\n    const markAllAsRead = thunk(function markAllAsRead(notifications) {\r\n        previousCount = 0;\r\n        clearCounter(profileSite.id);\r\n        renderProps(notifications.map(markNotificationAsRead));\r\n    });\r\n\r\n    function renderProps(notifications) {\r\n        renderModule({\r\n            notifications,\r\n            picture,\r\n            username,\r\n            count: notifications.filter(isUnread).length,\r\n            markAllAsRead: markAllAsRead(notifications),\r\n        });\r\n    }\r\n\r\n    const markUnreadNotifications = curry(function markUnreadNotifications(\r\n        unreadCount,\r\n        notifications\r\n    ) {\r\n        return notifications.map((notification, index) => ({\r\n            ...notification,\r\n            isUnread: index < unreadCount,\r\n        }));\r\n    });\r\n\r\n    function getNotifications(unreadCount) {\r\n        getLastPublishedPosts(0, 20, 0)\r\n            .then(handlePublishedPostsResponse)\r\n            .then(filterNotificationsByType)\r\n            .then(markUnreadNotifications(unreadCount))\r\n            .then(renderProps);\r\n    }\r\n\r\n    function onNewCount(data) {\r\n        if (data.count > previousCount) {\r\n            previousCount = data.count;\r\n            getNotifications(previousCount);\r\n        }\r\n    }\r\n\r\n    const stopCounterUpdates = getCounterUpdates(profileSite.id, onNewCount);\r\n    renderProps([]);\r\n    return stopCounterUpdates;\r\n});\r\n\r\nconst toInt = (number) => parseInt(number, 10);\r\n\r\nconst onModule = curry(function onModule(context, element, [renderer, Module]) {\r\n    const events = element.dataset.events\r\n        ? element.dataset.events.split(\",\").map(toInt)\r\n        : [...DEFAULT_EVENTS];\r\n\r\n    context.listenForUserInfo(\r\n        callIfArgumentsPass(\r\n            isUserLoggedIn,\r\n            renderRiverTopBar(\r\n                renderPreactWithProps(renderer, Module, element),\r\n                events,\r\n                riverTransport\r\n            )\r\n        )\r\n    );\r\n});\r\n\r\nconst internalLoader = () => import(\"./module\").then((module) => module.default);\r\n\r\nexport default function renderer(context, element) {\r\n    loadNotification(context)\r\n        .then(([renderer, Notification]) => {\r\n            loadPreactModule(\"RiverTopBar\", context, { Notification }, internalLoader)\r\n                .then(onModule(context, element))\r\n                .catch(console.error);\r\n        })\r\n        .catch(console.error);\r\n}\r\n"],"names":["callIfArgumentsPass","condition","callback","cleanup","previousArgs","args","shouldCall","apply","concat","prepareModuleLoader","renderer","context","dependencies","moduleLoader","altLoader","then","mod","moduleGetter","preactLoader","externalModuleName","internalModuleLoader","externalModuleLoader","window","RM_OVERRIDES","getModule","loader","altModule","mainModule","replacePreactWithProps","Module","element","props","replaceNode","classList","add","rendered","preact","h","render","counterListeners","Map","timeoutIds","emitData","curry","data","cb","emitCounterResponse","siteId","get","forEach","set","setTimeout","startCounterListener","getCounter","catch","console","error","stopCounterUpdates","thunk","has","callbackList","delete","size","clearTimeout","getCounterUpdates","Set","clearCounter","getLastPublishedPosts","offset","limit","clearUnread","internalLoader","module","default","DEFAULT_EVENTS","isUserLoggedIn","prevErr","prevUserInfo","err","userInfo","profileSite","title","markNotificationAsRead","notification","isUnread","formatNotification","emitter_site_title","emitter_site_name","id","message_html","emitter_avatar","post_permalink","reply_url_param","created_date_html","created_time_html","event_type_id","message","siteName","siteTitle","siteAvatar","permalink","filter","Boolean","join","fullDate","date","eventType","handlePublishedPostsResponse","notifications","map","renderRiverTopBar","renderModule","events","previousCount","picture","display_logo","username","notificationIsOfAllowedType","includes","filterNotificationsByType","markAllAsRead","renderProps","count","length","markUnreadNotifications","unreadCount","index","toInt","number","parseInt","onModule","dataset","split","listenForUserInfo","renderPreactWithProps","loadPreactModule","Notification"],"sourceRoot":""}