{"version":3,"sources":["app/use-request.tsx","app/Loading.tsx","app/Item.tsx","app/List.tsx","app/requests.tsx","app/ErrorMessage.tsx","app/SuccessMessage.tsx","app/Subscriptions.tsx","app/i18n.ts","app/Footer.tsx","app/index.tsx","app/models.tsx","reportWebVitals.ts","index.tsx"],"names":["Statuses","useRequest","params","useState","init","status","setStatus","data","setData","send","useCallback","inProgress","axios","then","res","successful","catch","err","failed","clean","useEffect","Loading","className","type","color","width","Item","item","changeSelection","checked","subscribed","onChange","title","List","changeList","map","index","i","list","id","ErrorMessage","t","useTranslation","SuccessMessage","Subscriptions","email","hash","request","setList","topicKeys","filter","topicKey","onClick","forEach","disabled","length","url","method","i18n","use","LanguageDetector","initReactI18next","debug","fallbackLng","interpolation","escapeValue","resources","en","translation","de","fr","Footer","href","App","URL","window","location","searchParams","get","cpk","Array","every","isSubItems","fromResToSubData","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.bd29cdc3.chunk.js","sourcesContent":["import { useState, useCallback, useEffect } from \"react\";\nimport axios, { AxiosRequestConfig } from \"axios\";\n\nexport enum Statuses {\n failed,\n init,\n inProgress,\n successful,\n}\n\nexport default function useRequest(params?: AxiosRequestConfig) {\n const [status, setStatus] = useState(Statuses.init);\n const [data, setData] = useState(null);\n\n const send = useCallback((params: AxiosRequestConfig) => {\n setStatus(Statuses.inProgress);\n return axios(params)\n .then((res) => {\n setData(res.data);\n setStatus(Statuses.successful);\n return res.data;\n })\n .catch((err) => {\n setData(err);\n setStatus(Statuses.failed);\n throw err;\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const clean = useCallback(() => {\n setStatus(Statuses.init);\n setData(null);\n }, []);\n\n useEffect(\n function () {\n if (params) {\n send(params);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n return { data, status, send, clean };\n}\n","import ReactLoading from \"react-loading\";\nimport React from \"react\";\n\nexport function Loading() {\n return
\n \n
\n}","import React from \"react\";\nimport {SubItems} from \"./models\";\n\ninterface Props {\n item: SubItems,\n changeSelection: () => void\n}\n\nexport function Item({item, changeSelection}: Props) {\n return
\n \n
\n}","import React from \"react\";\nimport {Item} from \"./Item\";\nimport {SubData} from \"./models\";\n\ninterface Props {\n data: SubData\n changeList: (data: SubData) => void\n}\n\nexport function List({data, changeList}: Props) {\n const changeSelection = (i: number) => {\n const list = [...data];\n list[i].subscribed = !list[i].subscribed;\n changeList( list);\n };\n return
\n {data.map(\n (item, index) => changeSelection(index)\n }/>\n )}\n
\n}\n","const base = '';\n\nexport const getSubscription = base+'/api/v1/subscriptions';\n\nexport const postSubscription = base+'/api/v1/unsubscribe';\n","import React from \"react\";\nimport {useTranslation} from \"react-i18next\";\n\nexport function ErrorMessage() {\n const {t} = useTranslation();\n return
{t('Error')}
\n}","import React from \"react\";\nimport {useTranslation} from \"react-i18next\";\n\nexport function SuccessMessage() {\n const {t} = useTranslation();\n return
\n

{t('Success')}

\n
{t('success text')}
\n
;\n}\n","import {List} from \"./List\";\nimport React, {useState} from \"react\";\nimport useRequest, {Statuses} from \"./use-request\";\nimport {postSubscription} from \"./requests\";\nimport {Loading} from \"./Loading\";\nimport {ErrorMessage} from \"./ErrorMessage\";\nimport {SuccessMessage} from \"./SuccessMessage\";\nimport {SubData} from \"./models\";\nimport {useTranslation} from 'react-i18next';\n\ninterface Props {\n hash: string\n email: string\n data: SubData\n}\n\nexport function Subscriptions({data, email, hash}: Props) {\n const request = useRequest();\n const [list, setList] = useState(data);\n const {t} = useTranslation();\n\n const selectAll = () => {\n const list = [...data];\n list.forEach(item => item.subscribed = true);\n setList(list);\n };\n\n const unselectAll = () => {\n const list = [...data];\n list.forEach(item => item.subscribed = false);\n setList(list);\n };\n\n const topicKeys = list.filter(item => !item.subscribed).map(item => item.topicKey);\n\n const save = () => {\n request.send({url: postSubscription, method: 'POST', data: {\n hash,\n email,\n topicKeys\n }});\n };\n\n return <>\n {request.status === Statuses.init && <>\n
\n
{t('SorryTitle')} {t('Instruction')}
\n
\n
\n
\n
\n
{t('Instruction2')}
\n
{t('Instruction2-note')}
\n
\n \n
\n \n \n
\n
\n \n
\n
\n }\n {request.status === Statuses.successful && request.data && }\n {request.status === Statuses.inProgress && }\n {request.status === Statuses.failed && }\n ;\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport en from \"./i18n/en.json\"\nimport de from \"./i18n/de.json\"\nimport fr from \"./i18n/fr.json\"\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n debug: true,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n resources: {\n en: {\n translation: en\n },\n de: {\n translation: de\n },\n fr: {\n translation: fr\n }\n }\n });\n\nexport default i18n;\n","import React from \"react\";\nimport {useTranslation} from \"react-i18next\";\n\nexport function Footer() {\n const {t} = useTranslation();\n\n return ;\n}\n","import React from 'react';\nimport './App.scss';\nimport useRequest, {Statuses} from \"./use-request\";\nimport {Loading} from \"./Loading\";\nimport {Subscriptions} from \"./Subscriptions\";\nimport {ErrorMessage} from \"./ErrorMessage\";\nimport {getSubscription} from \"./requests\";\nimport {fromResToSubData} from \"./models\";\nimport './i18n';\nimport {Footer} from \"./Footer\";\n\nfunction App() {\n const url = new URL(window.location.href);\n const email = url.searchParams.get('email');\n const hash = url.searchParams.get('hash');\n const cpk = url.searchParams.get('cpk');\n const request = useRequest({url: getSubscription, params: {email, hash, cpk}});\n const data = fromResToSubData(request.data).filter(item => item.subscribed);\n return (\n
\n
\n
\n
\n
\n
\n {\n request.status === Statuses.inProgress &&\n \n }\n {\n request.status === Statuses.successful && email && hash &&\n \n }\n {\n (request.status === Statuses.failed || !hash || !email) &&\n \n }\n
\n
\n
\n
\n );\n}\n\nexport default App;\n","export type SubData = Array;\n\nexport interface SubItems {\n id: string,\n title: string,\n subscribed: boolean,\n topicKey: string,\n createDate: string,\n updateDate: string,\n confirmationDate: string,\n ipAddress: string,\n confirmationIpAddress: string,\n doubleOptInRequired: boolean,\n language: string\n}\n\nfunction isSubItems(item: any): item is SubItems {\n return typeof item.id === 'string'&&\n typeof item.title === 'string' &&\n typeof item.subscribed === 'boolean';\n}\n\nexport function fromResToSubData(data: any):SubData {\n if (data instanceof Array) {\n if (data.every(item => isSubItems(item))) {\n return data;\n }\n }\n return [];\n}\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './app';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}