{"version":3,"file":"6415.25118bb2595670452395.bundle.mjs","mappings":"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","sources":["webpack://socialUX/./transport/site.js","webpack://socialUX/./utils/callIfArgumentsPass.js","webpack://socialUX/./views/siteEdit/_common.js","webpack://socialUX/./views/siteEdit/title/module.js","webpack://socialUX/./views/siteEdit/title/renderer.js"],"sourcesContent":["import { sendJsonRequest, retrieveJsonRequest } from \"./utils\";\r\n\r\nfunction makeUrl(siteId) {\r\n    return `/core/feeds/site/${siteId}`;\r\n}\r\n\r\nexport function getSiteInfo(siteId) {\r\n    return retrieveJsonRequest(makeUrl(siteId), \"GET\");\r\n}\r\n\r\nexport function updateSiteInfo(siteId, payload) {\r\n    return sendJsonRequest(makeUrl(siteId), \"PUT\", { id: siteId, ...payload });\r\n}\r\n","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 curry from \"../../lib/core/functional/curry\";\r\nimport { updateSiteInfo, getSiteInfo } from \"../../transport/site\";\r\n\r\nconst userTransports = {};\r\nconst transportWaiters = {};\r\n\r\nfunction didChanged(newProfile, fullProfile) {\r\n    return Boolean(\r\n        Object.entries(newProfile).find(function isDif([key, value]) {\r\n            return fullProfile[key] !== value;\r\n        })\r\n    );\r\n}\r\n\r\nfunction makeSelfEditTransport(context) {\r\n    let fullProfile;\r\n    const changeListeners = [];\r\n\r\n    function emitProfile(callback) {\r\n        callback(fullProfile);\r\n    }\r\n\r\n    function subscribeToChanges(callback) {\r\n        changeListeners.push(callback);\r\n        if (fullProfile) {\r\n            callback(fullProfile);\r\n        }\r\n    }\r\n\r\n    function onContextInfoChange(err, userInfo) {\r\n        if (err) {\r\n            return;\r\n        }\r\n\r\n        const { profileSite } = userInfo;\r\n        fullProfile = { ...profileSite };\r\n        changeListeners.forEach(emitProfile);\r\n    }\r\n\r\n    function sendChanges(changes) {\r\n        if (didChanged(changes, fullProfile)) {\r\n            const newBody = { ...fullProfile, ...changes };\r\n            updateSiteInfo(fullProfile.id, newBody).then(context.refreshUserInfo);\r\n        }\r\n    }\r\n\r\n    context.listenForUserInfo(onContextInfoChange);\r\n\r\n    return {\r\n        subscribeToChanges,\r\n        sendChanges,\r\n    };\r\n}\r\n\r\nfunction makeSiteEditTransport(siteData) {\r\n    let fullProfile = { ...siteData };\r\n    const changeListeners = [];\r\n\r\n    function emitProfile(callback) {\r\n        callback(fullProfile);\r\n    }\r\n\r\n    function subscribeToChanges(callback) {\r\n        changeListeners.push(callback);\r\n        callback(fullProfile);\r\n    }\r\n\r\n    function siteChanged(newData) {\r\n        fullProfile = { ...newData };\r\n        changeListeners.forEach(emitProfile);\r\n    }\r\n\r\n    function sendChanges(changes) {\r\n        if (didChanged(changes, fullProfile)) {\r\n            const newBody = { ...fullProfile, ...changes };\r\n            updateSiteInfo(fullProfile.id, newBody).then(siteChanged);\r\n        }\r\n    }\r\n\r\n    return {\r\n        subscribeToChanges,\r\n        sendChanges,\r\n    };\r\n}\r\n\r\nfunction onSiteInfo(siteData) {\r\n    if (!siteData.permissions.edit_site) {\r\n        throw new Error(\"You have no permissions to edit this site\");\r\n    }\r\n\r\n    return makeSiteEditTransport(siteData);\r\n}\r\n\r\nconst onUserInfo = curry(function onUserInfo(context, siteId, userInfo) {\r\n    const { runnerSite, profileSite } = userInfo;\r\n\r\n    if (\r\n        siteId === profileSite.id &&\r\n        (profileSite.permissions.edit_site || runnerSite.permissions.edit_site)\r\n    ) {\r\n        return makeSelfEditTransport(context);\r\n    }\r\n\r\n    return getSiteInfo(siteId).then(onSiteInfo);\r\n});\r\n\r\nconst cacheDataLayer = curry(function cacheDataLayer(siteId, userTransport) {\r\n    userTransports[siteId] = userTransport;\r\n    return userTransport;\r\n});\r\n\r\nconst resolvePromises = curry(function resolvePromises(siteId, userTransport) {\r\n    transportWaiters[siteId].forEach(([resolve]) => {\r\n        resolve(userTransport);\r\n    });\r\n});\r\n\r\nconst rejectPromises = curry(function rejectPromises(siteId, error) {\r\n    transportWaiters[siteId].forEach(([_, reject]) => {\r\n        reject(error);\r\n    });\r\n});\r\n\r\nexport function getUserTransport(context, siteId) {\r\n    if (siteId in userTransports) {\r\n        return Promise.resolve(userTransports[siteId]);\r\n    }\r\n\r\n    return new Promise((resolve, reject) => {\r\n        const promise = [resolve, reject];\r\n        if (siteId in transportWaiters) {\r\n            transportWaiters[siteId].push(promise);\r\n        } else {\r\n            transportWaiters[siteId] = [promise];\r\n            context\r\n                .getUserInfo()\r\n                .then(onUserInfo(context, siteId))\r\n                .then(cacheDataLayer(siteId))\r\n                .then(resolvePromises(siteId))\r\n                .catch(rejectPromises(siteId));\r\n        }\r\n    });\r\n}\r\n\r\nexport function getSiteId(context, element) {\r\n    const parentSiteIdElement = element.closest(\"[data-edit-site-id]\");\r\n\r\n    if (parentSiteIdElement) {\r\n        return parseInt(parentSiteIdElement.dataset.editSiteId, 10);\r\n    }\r\n\r\n    const {\r\n        settings: { site },\r\n    } = context;\r\n\r\n    if (site.isCommunitySite) {\r\n        return site.id;\r\n    }\r\n}\r\n","import curry from \"../../../lib/core/functional/curry\";\r\nconst ENTER_KEYCODE = 13;\r\n\r\nexport default curry(function renderView(element, props) {\r\n    const { title, saveSiteTitle } = props;\r\n    element.textContent = title;\r\n    element.setAttribute(\"contenteditable\", true);\r\n\r\n    function onKeyDown(event) {\r\n        const { keyCode } = event;\r\n\r\n        if (keyCode === ENTER_KEYCODE) {\r\n            element.blur();\r\n            event.preventDefault();\r\n            return false;\r\n        }\r\n    }\r\n\r\n    function onFocusOut() {\r\n        saveSiteTitle(element.textContent);\r\n    }\r\n\r\n    element.addEventListener(\"keydown\", onKeyDown);\r\n    element.addEventListener(\"focusout\", onFocusOut, true);\r\n\r\n    return function cleanup() {\r\n        element.removeEventListener(\"keydown\", onKeyDown);\r\n        element.removeEventListener(\"focusout\", onFocusOut);\r\n    };\r\n});\r\n","import callIfArgumentsPass from \"../../../utils/callIfArgumentsPass\";\r\nimport curry from \"../../../lib/core/functional/curry\";\r\nimport renderView from \"./module\";\r\nimport { getUserTransport, getSiteId } from \"../_common\";\r\n\r\nfunction didTitleChanged(oldProfileSite, profileSite) {\r\n    return profileSite.title !== oldProfileSite.title;\r\n}\r\n\r\nexport const renderEditTitle = curry(function renderEditTitle(\r\n    renderWithProps,\r\n    userTransport,\r\n    profileSite\r\n) {\r\n    function saveSiteTitle(title) {\r\n        userTransport.sendChanges({ title });\r\n    }\r\n\r\n    return renderWithProps({ saveSiteTitle, title: profileSite.title });\r\n});\r\n\r\nconst onTransport = curry(function onTransport(element, userTransport) {\r\n    userTransport.subscribeToChanges(\r\n        callIfArgumentsPass(didTitleChanged, renderEditTitle(renderView(element), userTransport))\r\n    );\r\n});\r\n\r\nexport default function renderer(context, element) {\r\n    const siteId = getSiteId(context, element);\r\n    if (!siteId) {\r\n        return;\r\n    }\r\n\r\n    getUserTransport(context, siteId).then(onTransport(element)).catch(console.error);\r\n}\r\n"],"names":["makeUrl","siteId","getSiteInfo","updateSiteInfo","payload","id","callIfArgumentsPass","condition","callback","cleanup","previousArgs","args","shouldCall","apply","concat","userTransports","transportWaiters","didChanged","newProfile","fullProfile","Boolean","Object","entries","find","key","value","onSiteInfo","siteData","permissions","edit_site","Error","changeListeners","emitProfile","siteChanged","newData","forEach","subscribeToChanges","push","sendChanges","changes","newBody","then","makeSiteEditTransport","onUserInfo","context","userInfo","runnerSite","profileSite","listenForUserInfo","err","refreshUserInfo","makeSelfEditTransport","cacheDataLayer","userTransport","resolvePromises","resolve","rejectPromises","error","_","reject","getUserTransport","Promise","promise","getUserInfo","catch","getSiteId","element","parentSiteIdElement","closest","parseInt","dataset","editSiteId","settings","site","isCommunitySite","curry","props","title","saveSiteTitle","onKeyDown","event","keyCode","blur","preventDefault","onFocusOut","textContent","setAttribute","addEventListener","removeEventListener","didTitleChanged","oldProfileSite","renderEditTitle","renderWithProps","onTransport","renderer","console"],"sourceRoot":""}