{"version":3,"sources":["components/Agency/Blocks/Stats/styles.js","pages/AdminPage/styles.js","pages/AdminPage/tabs/styles.js","pages/AdminPage/tabs/StatsTab.tsx","pages/AdminPage/tabs/ValpasTab.tsx","pages/AdminPage/tabs/SettingsTab.tsx","pages/AdminPage/index.tsx"],"names":["StatsContainer","styled","div","withConfig","componentId","StatsTitle","h2","StatsWrapper","media","md","_templateObject","_taggedTemplateLiteral","Stat","numberAnimation","keyframes","StatNumber","color","props","step","concat","Number","parseInt","StatLabel","StatDescription","AdminPageWrapper","Wrapper","AdminPageContainer","Container","AdminPageHeader","lg","AdminTabs","TabButtons","_templateObject2","TabContent","_templateObject3","StatsTabContent","ValpasTabWrapper","TypeSelectContainer","_templateObject4","TypeSelect","select","textStyles","FormPlaceholderText","OutputData","pre","OutputMessage","SettingsContainer","BlockedSection","boxShadow","basic","_templateObject5","BlockedForm","form","BlockedList","_templateObject6","BlockedItem","_templateObject7","ControlsContainer","_templateObject8","StatsTab","stats","agencyCount","agentCount","contactFormCount","contactFormCount24h","propertyCount","quicklaneCount","quicklaneCount24h","showCountLastMonth","showCountThisMonth","showCountToday","showCountYesterday","statsRef","useRef","onScreen","useOnScreen","useEffect","hasWindow","React","createElement","ref","className","ValpasTab","formValues","setFormValues","useState","search","type","responseData","setResponseData","loading","setLoading","updating","setUpdating","Object","assign","handleSubmit","axios","post","then","res","data","catch","finally","onSubmit","onChange","e","target","value","FaIcon","icon","placeholder","CtaButton","disabled","onClick","submitting","JSON","stringify","length","Fragment","preventDefault","navigator","clipboard","writeText","toast","success","hideAfter","hide","position","error","faCopy","update","response","message","console","SettingsTab","doc","blockedEmails","setBlockedEmails","settingBlockedEmails","setSettingBlockedEmails","deletingBlockedEmailIndex","setDeletingBlockedEmailIndex","undefined","blockedIPs","setBlockedIPs","settingBlockedIPs","setSettingBlockedIPs","deletingBlockedIPIndex","setDeletingBlockedIPIndex","blockedMessages","setBlockedMessages","settingBlockedMessages","setSettingBlockedMessages","deletingBlockedMessageIndex","setDeletingBlockedMessageIndex","updateBlockedEmails","err","log","Array","isArray","updateBlockedIPs","updateBlockedMessages","map","email","index","key","TextInput","newBlockedEmails","filter","removeBlockedEmail","title","faCheck","faTimes","faTrash","TextButton","addNewBlockedEmail","currentBlocked","push","ip","newBlockedIPs","removeBlockedIP","addNewBlockedIP","newBlockedMessages","removeBlockedMessage","addNewBlockedMessage","connect","state","document","canonicalPath","body","classList","add","remove","LogoHorizontal","TabSwitcher","baseUrl","currentUrl","decodeURIComponent","location","pathname","tabs","tabName","tabUrl","Tab","id","url","faDatabase","faCog","TabPanel","whenActive"],"mappings":"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","file":"assets/js/pages-AdminPage.chunk.js?cb=cd9d662a7496b4f2a7b3","sourcesContent":["import styled, { keyframes } from \"styled-components\";\nimport { color, media } from \"@utils/style-utils\";\n\nexport const StatsContainer = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\n\t&.has-data {\n\t\tmargin-bottom: 9em;\n\t}\n`;\n\nexport const StatsTitle = styled.h2`\n`;\n\n\nexport const StatsWrapper = styled.div`\n\talign-items: flex-start;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 3em;\n\tjustify-content: space-evenly;\n\n\t${media.md`\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t`};\n`;\n\nexport const Stat = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 10px;\n\tflex-direction: column;\n\tjustify-content: center;\n`;\n\nconst numberAnimation = keyframes`\n\t0% {\n\t\ttransform: translateY(-5%) scale(0);\n\t}\n\t50% {\n\t\ttransform: translateY(0) scale(2);\n\t}\n\t75% {\n\t\ttransform: translateY(-5%) scale(0.75);\n\t}\n\t100% {\n\t\ttransform: translateY(0) scale(1);\n\t}\n`;\n\nexport const StatNumber = styled.div`\n\tcolor: ${color(\"greenBright\", 1)};\n\tfont-size: 8rem;\n\ttransform: translateY(100%) scale(0);\n\n\t&.number-visible {\n\t\tanimation: ${numberAnimation} 1666ms ease-in-out forwards;\n\t}\n\t&.number-delay {\n\t\tanimation-delay: 666ms;\n\t}\n\t&.number-delay-2 {\n\t\tanimation-delay: 1332ms;\n\t}\n\n\t${props => props.step\n\t\t? `\n\t\t\t&.number-visible {\n\t\t\t\tanimation-delay : calc(${Number.parseInt(props.step)} * 400ms);\n\t\t\t}\n\t\t`\n\t\t: null\n\t};\n`;\n\nexport const StatLabel = styled.div`\n\tcolor: ${color(\"grey\", 1)};\n\tfont-size: 1.7rem;\n`;\n\nexport const StatDescription = styled.div`\n\tcolor: ${color(\"greenDark\", 2)};\n\tfont-size: 1.4rem;\n\tmargin-top: 0;\n`;\n","import styled from \"styled-components\";\nimport { Container, Wrapper } from \"@components/Grid\";\nimport { color, media } from \"@utils/style-utils\";\n\nexport const AdminPageWrapper = styled(Wrapper)`\n\tbackground: ${color(\"greenBright\", 4)};\n\tmargin-top: 3em;\n`;\n\nexport const AdminPageContainer = styled(Container)`\n\tbackground: ${color(\"greenBright\", 5)};\n\tmin-height: 100vh;\n\tpadding: 3em;\n`;\n\nexport const AdminPageHeader = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\n\timg {\n\t\tmax-width: 100%;\n\t}\n\n\th1 {\n\t\tcolor: ${color(\"greenDark\", 1)};\n\t\tpadding-left: 2px;\n\t\tpadding-top: 7px;\n\n\t\tspan {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t${media.lg`\n\t\tflex-direction: row;\n\n\t\th1 span {\n\t\t\tdisplay: inline-block;\n\t\t\twhite-space: preserve;\n\t\t}\n\t`};\n`;\n\nexport const AdminTabs = styled.div`\n\tbackground: ${color(\"white\")};\n`;\n\nexport const TabButtons = styled.div`\n\tborder-bottom: 1px solid ${color(\"grey\", 5)};\n\tborder-top: 1px solid ${color(\"grey\", 5)};\n\tdisplay: flex;\n\n\t.tab-button {\n\t\talign-items: center;\n\t\tbackground: ${color(\"grey\", 6)};\n\t\tborder-right: 1px solid ${color(\"grey\", 5)};\n\t\tcolor: ${color(\"grey\", 3)};\n\t\tcursor: pointer;\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tfont-weight: 500;\n\t\tpadding: 20px;\n\n\t\t${media.md`\n\t\t\tpadding: 25px 40px;\n\t\t`}\n\n\t\t&:hover {\n\t\t\tspan:first-of-type {\n\t\t\t\tcolor: ${color(\"greenBright\", 1)};\n\t\t\t}\n\t\t}\n\n\t\t&:first-of-type {\n\t\t\tborder-left: 1px solid ${color(\"grey\", 5)};\n\t\t}\n\n\t\tspan:first-of-type {\n\t\t\tcolor: ${color(\"grey\", 3)};\n\t\t\tfont-size: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 8px;\n\t\t\ttransition: color 300ms;\n\n\t\t\tsvg {\n\t\t\t\tmax-width: 22px;\n\t\t\t}\n\t\t}\n\n\t\t&:not(.tab-button--active) {\n\t\t\t@media (max-width: 767px) {\n\t\t\t\tjustify-content: center;\n\n\t\t\t\tspan {\n\t\t\t\t\tmargin-right: 0;\n\t\t\t\t}\n\n\t\t\t\t.tab-button-text {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&--active {\n\t\t\tbackground: ${color(\"white\")};\n\t\t\tflex-grow: 4;\n\t\t\tpointer-events: none;\n\n\t\t\tspan:first-of-type {\n\t\t\t\tcolor: ${color(\"greenBright\", 1)};\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const TabContent = styled.div`\n\tborder: 1px solid ${color(\"grey\", 5)};\n\tborder-top: 0;\n\tpadding: 28px 20px;\n\tposition: relative;\n\tmin-height: 404px;\n\n\t${media.md`\n\t\tpadding: 33px;\n\t`};\n`;\n","import styled from \"styled-components\";\nimport { boxShadow, color, media, textStyles } from \"@utils/style-utils\";\nimport { TabContent } from \"@pages/AdminPage/styles\";\nimport { Stat, StatsWrapper } from \"@components/Agency/Blocks/Stats/styles\";\n\nexport const StatsTabContent = styled(TabContent)`\n\ttext-align: center;\n\n\t${StatsWrapper} {\n\t\talign-items: center;\n\t\tflex-wrap: wrap;\n\n\t\t${media.lg`\n\t\t\talign-items: flex-start;\n\t\t\t${Stat} {\n\t\t\t\tflex: 1 1 25%;\n\t\t\t\tmax-width: 25%;\n\t\t\t}\n\t\t`};\n\n\t}\n\n\t${media.lg`\n\t\ttext-align: unset;\n\t`};\n`;\n\nexport const ValpasTabWrapper = styled.div`\n\tform {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 5px;\n\t\tjustify-content: center;\n\n\t\tinput {\n\t\t\tmin-width: min(500px, 30vw);\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t${media.lg`\n\t\t\talign-items: stretch;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: flex-start;\n\n\t\t\tinput {\n\t\t\t\twidth: unset;\n\t\t\t}\n\t\t`};\n\t}\n`;\n\nexport const TypeSelectContainer = styled.div`\n\tposition: relative;\n\twidth: 100%;\n\n\tspan.icon {\n\t\tcolor: ${color(\"greenBright\", 1)};\n\t\tfont-size: 14px;\n\t\tpointer-events: none;\n\t\tposition: absolute;\n\t\tright: 16px;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\tz-index: 3;\n\n\t\tsvg {\n\t\t\tmax-width: 14px;\n\t\t}\n\t}\n\n\t${media.lg`\n\t\twidth: unset;\n\t`};\n`;\n\nexport const TypeSelect = styled.select`\n\t${textStyles.FormPlaceholderText};\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tbackground: ${color(\"white\")};\n\tborder: 1px solid ${color(\"grey\", 5)};\n\tborder-radius: 4px;\n\tcolor: ${color(\"grey\", 1)};\n\theight: 100%;\n\tpadding: 11px 32px 9px 16px;\n\tposition: relative;\n\tmin-width: 150px;\n\twidth: 100%;\n\tz-index: 1;\n\n\t&:focus {\n\t\toutline-color: ${color(\"greenBright\", 4)};\n\t}\n`;\n\nexport const OutputData = styled.pre`\n\tbackground: ${color(\"white\")};\n\tborder: 1px solid ${color(\"violet\", 1)};\n\tcolor: ${color(\"greenDark\", 1)};\n\tmargin: 3em 0;\n\tmax-width: 100%;\n\toverflow-x: auto;\n\tpadding: 3em;\n`;\n\nexport const OutputMessage = styled(OutputData)`\n\twhite-space: pre;\n`;\n\nexport const SettingsContainer = styled.div`\n`;\n\nexport const BlockedSection = styled.div`\n\tbox-shadow: ${boxShadow.basic};\n\tpadding: 1em;\n\tmargin: 1em 0;\n\n\t${media.lg`\n\t\tpadding: 3em;\n\t\tmargin: 3em 0;\n\t`};\n\n\t&.no-top-margin {\n\t\tmargin-top: 0;\n\t}\n`;\nexport const BlockedForm = styled.form`\n`;\n\nexport const BlockedList = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 1em;\n\tjustify-content: flex-start;\n\n\t${media.lg`\n\t\tgap: 3em;\n\t`};\n`;\n\nexport const BlockedItem = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 10px;\n\tflex: 1 1 100%;\n\tjustify-content: flex-start;\n\tmax-width: 100%;\n\n\t.form-group {\n\t\tflex: 1 1 80%;\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\tsvg {\n\t\tcursor: pointer;\n\t}\n\n\t${media.lg`\n\t\tflex: 1 1 calc(33% - 30px);\n\t\tmax-width: calc(33% - 30px);\n\t`};\n`;\n\nexport const ControlsContainer = styled.div`\n\talign-items: center;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 1em;\n\tjustify-content: center;\n\tmargin-top: 3em;\n\n\t${media.lg`\n\t\tflex-direction: row;\n\t\tgap: 3em;\n\t\tjustify-content: flex-start;\n\t`};\n`;\n","import React, { useEffect, useRef } from \"react\";\nimport { Stat, StatLabel, StatNumber, StatsWrapper } from \"@components/Agency/Blocks/Stats/styles\";\nimport { StatsTabContent } from \"./styles\";\nimport { hasWindow } from \"@utils\";\nimport useOnScreen from \"@hooks/use-on-screen\";\n\nexport const StatsTab = (props: any) => {\n\n\tconst {\n\t\tstats,\n\t} = props;\n\n\tconst {\n\t\tagencyCount = 0,\n\t\tagentCount = 0,\n\t\tcontactFormCount = 0,\n\t\tcontactFormCount24h = 0,\n\t\tpropertyCount = 0,\n\t\tquicklaneCount = 0,\n\t\tquicklaneCount24h = 0,\n\t\tshowCountLastMonth = 0,\n\t\tshowCountThisMonth = 0,\n\t\tshowCountToday = 0,\n\t\tshowCountYesterday = 0,\n\t} = stats;\n\n\tconst statsRef = useRef(null);\n\tconst onScreen = useOnScreen(statsRef, \"0px\", false);\n\n\tuseEffect(() => {\n\t\tif (!hasWindow) {\n\t\t\treturn;\n\t\t}\n\t}, [ onScreen ]);\n\n\treturn \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{agencyCount}\n\t\t\t\t\n\t\t\t\tmyymälää\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{agentCount}\n\t\t\t\t\n\t\t\t\tvälittäjää\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{propertyCount}\n\t\t\t\t\n\t\t\t\tkohdetta\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{quicklaneCount}\n\t\t\t\t\n\t\t\t\tetenemistä pikakaistalla\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{quicklaneCount24h}\n\t\t\t\t\n\t\t\t\tetenemistä pikakaistalla viimeisen vuorokauden aikana\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{contactFormCount}\n\t\t\t\t\n\t\t\t\tlähetettyä yhteydenottolomaketta\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{contactFormCount24h}\n\t\t\t\t\n\t\t\t\tlähetettyä yhteydenottolomaketta viimeisen vuorokauden aikana\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{showCountToday}\n\t\t\t\t\n\t\t\t\tnäyttökertaa tänään\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{showCountYesterday}\n\t\t\t\t\n\t\t\t\tnäyttökertaa eilen\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{showCountThisMonth}\n\t\t\t\t\n\t\t\t\tnäyttökertaa tässä kuussa\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{showCountLastMonth}\n\t\t\t\t\n\t\t\t\tnäyttökertaa viime kuussa\n\t\t\t\n\t\t\n\t;\n};\n","import React, { useEffect, useState } from \"react\";\nimport { ValpasTabWrapper, OutputData, TypeSelect, TypeSelectContainer, OutputMessage } from \"./styles\";\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport CtaButton from \"@components/Buttons/CtaButton\";\nimport { FontAwesomeIcon as FaIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCopy } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { hasWindow } from \"@utils\";\nimport toast from \"cogo-toast\";\n\nexport const ValpasTab = () => {\n\n\tconst [ formValues, setFormValues ] = useState({\n\t\tsearch: \"\",\n\t\ttype: \"property\",\n\t});\n\tconst [ responseData, setResponseData ] = useState(\"\");\n\tconst [ loading, setLoading ] = useState(false);\n\tconst [ updating, setUpdating ] = useState(false);\n\tuseEffect(() => {\n\t\tsetFormValues({ ...formValues, search: \"\" });\n\t}, [ formValues.type ]);\n\n\tconst handleSubmit = () => {\n\t\tsetLoading(true);\n\t\tsetResponseData(\"\");\n\t\taxios.post(\"/api/km/KMAdmin/valpas\", formValues)\n\t\t\t.then(res => {\n\t\t\t\tsetResponseData(res.data);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tsetResponseData(null);\n\t\t\t})\n\t\t\t.finally(() => setLoading(false))\n\t\t;\n\t};\n\n\treturn \n\t\t

Hae Valppaasta

\n\t\t
\n\t\t\t\n\t\t\t\t setFormValues({ ...formValues, type: e.target.value })}\n\t\t\t\t\tvalue={formValues.type}\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t setFormValues({ ...formValues, search: e.target.value })}\n\t\t\t\tplaceholder={formValues.type === \"agency\"\n\t\t\t\t\t? \"Myymälän tunniste muodossa a8c8dc53-abba-cdcd-8ac9-396b77be9406\" : (\n\t\t\t\t\t\tformValues.type === \"agent\"\n\t\t\t\t\t\t\t? \"Välittäjän tunniste muodossa a6c6d6c8-abba-cdcd-9876-123abcd45678\"\n\t\t\t\t\t\t\t: \"Kohteen tunniste muodossa 55555555\"\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\ttype=\"text\"\n\t\t\t\tvalue={formValues.search}\n\t\t\t/>\n\t\t\t\n\t\t\t\tHae\n\t\t\t\n\t\t\t{!!(hasWindow && !loading && JSON.stringify(responseData).length >= 10) && <> {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnavigator.clipboard.writeText(JSON.stringify(responseData, null, 4)).then(() => {\n\t\t\t\t\t\t\ttoast.success(\"Teksti kopioitu leikepöydälle.\", {\n\t\t\t\t\t\t\t\thideAfter: 6,\n\t\t\t\t\t\t\t\tonClick: (hide: any) => hide(),\n\t\t\t\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}).catch(() => {\n\t\t\t\t\t\t\ttoast.error(\"Leikepöydälle kopiointi epäonnistui.\", {\n\t\t\t\t\t\t\t\tonClick: (hide: any) => hide(),\n\t\t\t\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\ttoast.error(\"Leikepöydälle kopiointi epäonnistui.\", {\n\t\t\t\t\t\t\tonClick: (hide: any) => hide(),\n\t\t\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\t\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetUpdating(true);\n\n\t\t\t\t\t\taxios.post(\"/api/km/KMAdmin/valpas\", { ...formValues, update: true })\n\t\t\t\t\t\t\t.then((response: AxiosResponse) => {\n\t\t\t\t\t\t\t\tsetResponseData(response.data.message);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((error: AxiosError) => {\n\t\t\t\t\t\t\t\tconsole.error(\"Valpas update failed\", error);\n\t\t\t\t\t\t\t\ttoast.error(\"Päivittäminen epäonnistui.\", {\n\t\t\t\t\t\t\t\t\tonClick: (hide: any) => hide(),\n\t\t\t\t\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.finally(() => setUpdating(false));\n\t\t\t\t\t}}\n\t\t\t\t\tsubmitting={updating}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\tPäivitä\n\t\t\t\t\n\t\t\t}\n\t\t\n\t\t{responseData === null\n\t\t\t?

Ei hakutuloksia.

\n\t\t\t: (responseData === \"\"\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: (typeof (responseData) === \"string\"\n\t\t\t\t\t\t\t? {responseData}\n\t\t\t\t\t\t\t: {JSON.stringify(responseData, null, 4)}\n\t\t\t\t\t)\n\t\t\t)\n\t\t}\n\t
;\n\n};\n","import React, { useState } from \"react\";\nimport { BlockedForm, BlockedItem, BlockedList, ControlsContainer, SettingsContainer, BlockedSection } from \"./styles\";\nimport { FontAwesomeIcon as FaIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCheck, faTimes, faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport TextInput from \"@components/Form/TextInput\";\nimport TextButton from \"@components/Buttons/TextButton\";\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport CtaButton from \"@components/Buttons/CtaButton\";\nimport toast from \"cogo-toast\";\n\nexport const SettingsTab = (props: any) => {\n\n\tconst { doc } = props;\n\n\tconst [ blockedEmails, setBlockedEmails ] = useState([ ...doc.blockedEmails || [] ]);\n\tconst [ settingBlockedEmails, setSettingBlockedEmails ] = useState(false);\n\tconst [ deletingBlockedEmailIndex, setDeletingBlockedEmailIndex ] = useState(undefined);\n\tconst [ blockedIPs, setBlockedIPs ] = useState([ ...doc.blockedIPs || [] ]);\n\tconst [ settingBlockedIPs, setSettingBlockedIPs ] = useState(false);\n\tconst [ deletingBlockedIPIndex, setDeletingBlockedIPIndex ] = useState(undefined);\n\tconst [ blockedMessages, setBlockedMessages ] = useState([ ...doc.blockedMessages || [] ]);\n\tconst [ settingBlockedMessages, setSettingBlockedMessages ] = useState(false);\n\tconst [ deletingBlockedMessageIndex, setDeletingBlockedMessageIndex ] = useState(undefined);\n\n\tconst updateBlockedEmails = (e: any) => {\n\t\tif (settingBlockedEmails) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof (e.preventDefault) === \"function\") {\n\t\t\te.preventDefault();\n\t\t}\n\t\tsetSettingBlockedEmails(true);\n\t\taxios.post(\"/api/km/KMAdmin/updateBlocked\", { type: \"emails\", blockedEmails })\n\t\t\t.then((response: AxiosResponse) => {\n\t\t\t\ttoast.success(\"Estettyjen sähköpostiosoitteiden lista tallennettu.\", {\n\t\t\t\t\thideAfter: 6,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t}).catch((err: any) => {\n\t\t\t\t\tconsole.log(\"Showing toast failed.\", err);\n\t\t\t\t});\n\t\t\t\tif (Array.isArray(response.data.data.blockedEmails)) {\n\t\t\t\t\tsetBlockedEmails(response.data.data.blockedEmails);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error: AxiosError) => {\n\t\t\t\tconsole.error(\"Updating blockedEmails failed\", error);\n\t\t\t\ttoast.error(\"Estettyjen sähköpostiosoitteiden listan tallennus epäonnistui.\", {\n\t\t\t\t\thideAfter: 300,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetSettingBlockedEmails(false);\n\t\t\t});\n\t};\n\n\tconst updateBlockedIPs = (e: any) => {\n\t\tif (settingBlockedIPs) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof (e.preventDefault) === \"function\") {\n\t\t\te.preventDefault();\n\t\t}\n\t\tsetSettingBlockedIPs(true);\n\t\taxios.post(\"/api/km/KMAdmin/updateBlocked\", { type: \"ips\", blockedIPs })\n\t\t\t.then((response: AxiosResponse) => {\n\t\t\t\ttoast.success(\"Estettyjen IP-osoitteiden lista tallennettu.\", {\n\t\t\t\t\thideAfter: 6,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t}).catch((err: any) => {\n\t\t\t\t\tconsole.log(\"Showing toast failed.\", err);\n\t\t\t\t});\n\t\t\t\tif (Array.isArray(response.data.data.blockedIPs)) {\n\t\t\t\t\tsetBlockedIPs(response.data.data.blockedIPs);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error: AxiosError) => {\n\t\t\t\tconsole.error(\"Updating blockedIPs failed\", error);\n\t\t\t\ttoast.error(\"Estettyjen IP-osoitteiden listan tallennus epäonnistui.\", {\n\t\t\t\t\thideAfter: 300,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetSettingBlockedIPs(false);\n\t\t\t});\n\t};\n\n\tconst updateBlockedMessages = (e: any) => {\n\t\tif (settingBlockedMessages) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof (e.preventDefault) === \"function\") {\n\t\t\te.preventDefault();\n\t\t}\n\t\tsetSettingBlockedMessages(true);\n\t\taxios.post(\"/api/km/KMAdmin/updateBlocked\", { type: \"messages\", blockedMessages })\n\t\t\t.then((response: AxiosResponse) => {\n\t\t\t\ttoast.success(\"Estettyjen viestien lista tallennettu.\", {\n\t\t\t\t\thideAfter: 6,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t}).catch((err: any) => {\n\t\t\t\t\tconsole.log(\"Showing toast failed.\", err);\n\t\t\t\t});\n\t\t\t\tif (Array.isArray(response.data.data.blockedMessages)) {\n\t\t\t\t\tsetBlockedMessages(response.data.data.blockedMessages);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error: AxiosError) => {\n\t\t\t\tconsole.error(\"Updating blockedMessages failed\", error);\n\t\t\t\ttoast.error(\"Estettyjen viestien listan tallennus epäonnistui.\", {\n\t\t\t\t\thideAfter: 300,\n\t\t\t\t\tonClick: (hide: any) => {\n\t\t\t\t\t\thide();\n\t\t\t\t\t},\n\t\t\t\t\tposition: \"bottom-right\",\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetSettingBlockedMessages(false);\n\t\t\t});\n\t};\n\n\tconst removeBlockedEmail = (email: string) => {\n\t\tsetBlockedEmails([ ...blockedEmails ].filter(e => e !== email));\n\t\tsetDeletingBlockedEmailIndex(undefined);\n\t};\n\n\tconst removeBlockedIP = (ip: string) => {\n\t\tsetBlockedIPs([ ...blockedIPs ].filter(e => e !== ip));\n\t\tsetDeletingBlockedIPIndex(undefined);\n\t};\n\n\tconst removeBlockedMessage = (message: string) => {\n\t\tsetBlockedMessages([ ...blockedMessages ].filter(e => e !== message));\n\t\tsetDeletingBlockedMessageIndex(undefined);\n\t};\n\n\tconst addNewBlockedEmail = () => {\n\t\tsetBlockedEmails((currentBlocked: string[]) => {\n\t\t\tconst newBlockedEmails = [ ...currentBlocked ];\n\t\t\tnewBlockedEmails.push(\"\");\n\t\t\treturn newBlockedEmails;\n\t\t});\n\t};\n\n\tconst addNewBlockedIP = () => {\n\t\tsetBlockedIPs((currentBlocked: string[]) => {\n\t\t\tconst newBlockedIPs = [ ...currentBlocked ];\n\t\t\tnewBlockedIPs.push(\"\");\n\t\t\treturn newBlockedIPs;\n\t\t});\n\t};\n\n\tconst addNewBlockedMessage = () => {\n\t\tsetBlockedMessages((currentBlocked: string[]) => {\n\t\t\tconst newBlockedMessages = [ ...currentBlocked ];\n\t\t\tnewBlockedMessages.push(\"\");\n\t\t\treturn newBlockedMessages;\n\t\t});\n\t};\n\n\treturn \n\t\t\n\t\t\t

Estetyt sähköpostiosoitteet

\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{blockedEmails.map((email: string, index: number) => {\n\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tconst newBlockedEmails = [ ...blockedEmails ];\n\t\t\t\t\t\t\t\t\tnewBlockedEmails[ index ] = e.target.value;\n\t\t\t\t\t\t\t\t\tsetBlockedEmails(newBlockedEmails);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={email}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{deletingBlockedEmailIndex === index ? <>\n\t\t\t\t\t\t\t\t removeBlockedEmail(email)} title=\"Poista oikeasti\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t setDeletingBlockedEmailIndex(undefined)} title=\"Peruuta\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t : setDeletingBlockedEmailIndex(index)} title=\"Poista\">\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t;\n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tLisää uusi\n\t\t\t\t\t\n\t\t\t\t\t\tTallenna\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t

Estetyt IP-osoitteet

\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{blockedIPs.map((ip: string, index: number) => {\n\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tconst newBlockedIPs = [ ...blockedIPs ];\n\t\t\t\t\t\t\t\t\tnewBlockedIPs[ index ] = e.target.value;\n\t\t\t\t\t\t\t\t\tsetBlockedIPs(newBlockedIPs);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={ip}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{deletingBlockedIPIndex === index ? <>\n\t\t\t\t\t\t\t\t removeBlockedIP(ip)} title=\"Poista oikeasti\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t setDeletingBlockedIPIndex(undefined)} title=\"Peruuta\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t : setDeletingBlockedIPIndex(index)} title=\"Poista\">\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t;\n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tLisää uusi\n\t\t\t\t\t\n\t\t\t\t\t\tTallenna\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t

Estetyt viestit

\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{blockedMessages.map((message: string, index: number) => {\n\t\t\t\t\t\treturn \n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tconst newBlockedMessages = [ ...blockedMessages ];\n\t\t\t\t\t\t\t\t\tnewBlockedMessages[ index ] = e.target.value;\n\t\t\t\t\t\t\t\t\tsetBlockedMessages(newBlockedMessages);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tvalue={message}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{deletingBlockedMessageIndex === index ? <>\n\t\t\t\t\t\t\t\t removeBlockedMessage(message)} title=\"Poista oikeasti\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t setDeletingBlockedMessageIndex(undefined)} title=\"Peruuta\">\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t : setDeletingBlockedMessageIndex(index)} title=\"Poista\">\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t;\n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tLisää uusi\n\t\t\t\t\t\n\t\t\t\t\t\tTallenna\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t
;\n\n};\n","import React, { useEffect } from \"react\";\nimport { IApplicationState } from \"@redux\";\nimport { connect } from \"react-redux\";\nimport { hasWindow } from \"@utils\";\nimport {\n\tAdminPageContainer,\n\tAdminPageHeader,\n\tAdminPageWrapper,\n\tAdminTabs,\n\tTabButtons,\n\tTabContent,\n} from \"@pages/AdminPage/styles\";\nimport LogoHorizontal from \"@components/Logos/LogoHorizontal\";\nimport TabSwitcher, { Tab, TabPanel } from \"@components/TabSwitcher\";\nimport { FontAwesomeIcon as FaIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCog, faDatabase } from \"@fortawesome/free-solid-svg-icons\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { StatsTab } from \"@pages/AdminPage/tabs/StatsTab\";\nimport { ValpasTab } from \"@pages/AdminPage/tabs/ValpasTab\";\nimport { SettingsTab } from \"./tabs/SettingsTab\";\n\nconst AdminPage = (props: any) => {\n\n\tconst { doc } = props;\n\tconst { canonicalPath } = doc;\n\n\tuseEffect(() => {\n\t\tif (hasWindow) {\n\t\t\tdocument.body.classList.add(\"blankPage\");\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (hasWindow) {\n\t\t\t\tdocument.body.classList.remove(\"blankPage\");\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t

n Konehuone

\n\t\t\t
\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tValpas\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tAsetukset\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t
;\n};\n\nconst mapStateToProps = (state: IApplicationState) => ({\n\tdoc: state.document,\n});\n\nexport default connect(mapStateToProps)(AdminPage);\n"],"sourceRoot":""}