{"version":3,"file":"2379.daf463a7ec8ff059e1ce.bundle.mjs","mappings":"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","sources":["webpack://socialUX/./utils/callIfArgumentsPass.js","webpack://socialUX/./utils/loadPreactModule.js","webpack://socialUX/./utils/renderPreactWithProps.js","webpack://socialUX/./transport/follow.js","webpack://socialUX/./views/followButton/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 { sendJsonRequest } from \"./utils\";\r\n\r\nconst composeBody = (entity, entityId, runnerId, userId, status) => {\r\n    const payload = {\r\n        status,\r\n    };\r\n\r\n    if (entity === \"sections\") {\r\n        payload.section_id = entityId;\r\n    } else {\r\n        payload.id = userId;\r\n        payload.site_id = entity === \"sites\" ? entityId : runnerId;\r\n        payload.tag_id = entity === \"tags\" ? entityId : undefined;\r\n    }\r\n    return payload;\r\n};\r\n\r\nconst composeUrl = (entity, userId) =>\r\n    entity === \"sections\"\r\n        ? \"/core/feeds/site/follow_sections/\"\r\n        : `/core/feeds/site/follow/${userId}`;\r\n\r\nexport default curry(function follow(entity, entityId, runnerId, userId, doesFollow) {\r\n    const body = composeBody(entity, entityId, runnerId, userId, doesFollow);\r\n\r\n    return sendJsonRequest(composeUrl(entity, userId), \"PUT\", body);\r\n});\r\n","import loadContextData from \"../../utils/loadContextData\";\r\nimport loadPreactModule from \"../../utils/loadPreactModule\";\r\nimport renderPreactWithProps from \"../../utils/renderPreactWithProps\";\r\nimport callIfArgumentsPass from \"../../utils/callIfArgumentsPass\";\r\nimport curry from \"../../lib/core/functional/curry\";\r\nimport noop from \"../../lib/core/functional/noop\";\r\nimport transport from \"../../transport/follow\";\r\n\r\nconst doesFollow = curry((entity, entityId, userInfo) => {\r\n    return userInfo.profileSite.follow[entity].includes(entityId);\r\n});\r\n\r\nconst didUserInfoChanged = curry((follows, prevErr, prevUserInfo, err, userInfo) => {\r\n    if (prevErr != err) {\r\n        return true;\r\n    }\r\n\r\n    return follows(userInfo) !== follows(prevUserInfo);\r\n});\r\n\r\nexport const renderFollowButton = curry(\r\n    (isUserFollowing, context, entity, entityId, renderModule, callTransport, err, userInfo) => {\r\n        let userId = null;\r\n        let isFollowing = false;\r\n        let isLoggedIn = false;\r\n        let inProgress = false;\r\n\r\n        if (!err) {\r\n            isLoggedIn = true;\r\n            isFollowing = isUserFollowing(userInfo);\r\n            userId = userInfo.profileSite.id;\r\n        }\r\n\r\n        if (userId && entity === \"sites\" && userId === entityId) {\r\n            return;\r\n        }\r\n\r\n        const toggleFollow = curry((following, event) => {\r\n            if (!isLoggedIn || inProgress) {\r\n                return;\r\n            }\r\n            inProgress = true;\r\n\r\n            callTransport(userId, !following).then(onTransportCallSuccess).catch(console.error);\r\n            event.preventDefault();\r\n            return false;\r\n        });\r\n\r\n        function onTransportCallSuccess(res) {\r\n            context.refreshUserInfo();\r\n            makePropsAndRender(res.status);\r\n        }\r\n\r\n        function makePropsAndRender(following) {\r\n            const props = {\r\n                isLoggedIn,\r\n                following,\r\n                toggleFollow: isLoggedIn ? toggleFollow(following) : noop,\r\n            };\r\n\r\n            renderModule(props);\r\n        }\r\n\r\n        makePropsAndRender(isFollowing);\r\n    }\r\n);\r\n\r\nconst onModule = curry((context, element, [renderer, Module]) => {\r\n    let entity, entityId;\r\n    const runnerId = context.settings.runner.id;\r\n\r\n    if (\"authorId\" in element.dataset) {\r\n        entity = \"sites\";\r\n        entityId = parseInt(element.dataset.authorId, 10);\r\n    } else {\r\n        const parentPost = element.closest(\"article[elid]\");\r\n\r\n        if (parentPost) {\r\n            const contextData = loadContextData(\r\n                `.post-context-${parentPost.getAttribute(\"elid\")}`,\r\n                parentPost\r\n            );\r\n            entity = \"sites\";\r\n            entityId = contextData.post.authors[0];\r\n        } else {\r\n            if (context.settings.section.id) {\r\n                entity = \"sections\";\r\n                entityId = context.settings.section.id;\r\n            } else if (context.settings.tag.slug) {\r\n                entity = \"tags\";\r\n                entityId = context.settings.tag.slug;\r\n            } else {\r\n                entity = \"sites\";\r\n                entityId = context.settings.site.id;\r\n            }\r\n        }\r\n    }\r\n\r\n    const isFollowingEntity = doesFollow(entity, entityId);\r\n\r\n    context.listenForUserInfo(\r\n        callIfArgumentsPass(\r\n            didUserInfoChanged(isFollowingEntity),\r\n            renderFollowButton(\r\n                isFollowingEntity,\r\n                context,\r\n                entity,\r\n                entityId,\r\n                renderPreactWithProps(renderer, Module, element),\r\n                transport(entity, entityId, runnerId)\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    loadPreactModule(\"FollowButton\", context, {}, internalLoader).then(onModule(context, element));\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","curry","entity","entityId","runnerId","userId","doesFollow","body","status","payload","section_id","id","site_id","tag_id","undefined","composeBody","composeUrl","userInfo","profileSite","follow","includes","didUserInfoChanged","follows","prevErr","prevUserInfo","err","renderFollowButton","isUserFollowing","renderModule","callTransport","isFollowing","isLoggedIn","inProgress","toggleFollow","following","event","onTransportCallSuccess","catch","console","error","preventDefault","res","refreshUserInfo","makePropsAndRender","noop","onModule","settings","runner","dataset","parseInt","authorId","parentPost","closest","loadContextData","getAttribute","post","authors","section","tag","slug","site","isFollowingEntity","listenForUserInfo","renderPreactWithProps","internalLoader","module","default","loadPreactModule"],"sourceRoot":""}