{"version":3,"sources":["utils/profile.js","i18n.js","contexts/auth.js","pages/landing/github_callback.js","components/common/landing_language_switcher.js","api/client.js","api/profile.js","components/profile/signup.js","components/profile/signin.js","components/logo.js","pages/landing/component.js","utils/debounce.js","icons.js","components/feed/beats.js","contexts/tags.js","components/feed/tags.js","components/markdown/markdown.js","components/markdown/crosslink.js","components/markdown/render.js","pages/public/shared/line.js","pages/public/shared.js","pages/landing/page.js","components/common/language_switcher.js","components/profile/soul.js","theme.js","components/common/top_menu.js","components/common/drawer.js","components/feed/competencies.js","utils/url.js","utils/validators.js","utils/duration.js","components/link/link_field.js","components/markdown/mentions.js","components/markdown/markdown_field.js","components/forms/base.js","components/feed/forms.js","components/heartbeats/card_controls.js","components/forms/types.js","components/heartbeats/compact.js","components/feed/add.js","components/heartbeats/heartbeat.js","components/feed/list.js","pages/feed.js","components/feed/single.js","components/cheatsheets/list.js","pages/create_soul.js","pages/junior.js","pages/landing/email_callback.js","App.js","reportWebVitals.js","index.js"],"names":["getCurrentToken","localStorage","getItem","Cookies","get","setToken","token","setItem","getLanguageLocally","storeLanguageLocally","lang","emailPattern","RegExp","isValidEmail","email","test","resources","ru","translation","translationRU","en","translationEN","i18n","use","detector","initReactI18next","init","lng","debug","interpolation","escapeValue","AuthContext","React","createContext","user","fetch","logout","GitHubCallback","props","search","window","location","params","URLSearchParams","code","state","history","useHistory","auth","useContext","useAxios","url","data","loading","error","useEffect","push","Backdrop","open","CircularProgress","color","Trans","useStyles","makeStyles","theme","root","display","alignItems","justifyContent","LandingLanguageSwitcher","setLang","classes","Grid","component","container","spacing","className","item","Switch","checked","onChange","event","target","axios","require","getAxiosHeaders","headers","ProudAPI","http","then","response","post","put","patch","delete","this","create","moment","paper","marginTop","flexDirection","avatar","margin","backgroundColor","palette","secondary","main","form","width","submit","SignUp","useState","setEmail","acceptTerms","setAcceptTerms","password","setPassword","passwordConfirmation","setPasswordConfirmation","passwordMatch","setPasswordMatch","enqueueSnackbar","useSnackbar","t","useTranslation","method","validateStatus","status","manual","doSubmit","variant","Fragment","xs","TextField","required","fullWidth","value","disabled","autoComplete","label","type","FormControlLabel","control","Checkbox","Link","href","Button","onClick","language","SignUpDialog","setOpen","Dialog","onClose","scroll","aria-labelledby","aria-describedby","DialogTitle","id","DialogContent","SignIn","name","autoFocus","SignInDialog","soul","filter","maxWidth","breakpoints","up","height","Logo","src","alt","textAlign","paddingTop","down","desktop","mobile","what","fontSize","typography","h6","centered","button","marginRight","text","toolbar","padding","mixins","transparentBar","position","boxShadow","primary","dark","Buttons","showSignIn","setShowSignIn","showSignUp","setShowSignUp","Box","link","catch","LandingPageComponent","useParams","userLang","setUserLang","useTheme","isSmall","useMediaQuery","changeLanguage","AppBar","Toolbar","ml","Container","sm","Typography","my","split","map","key","mt","useDebounce","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout","ActivityIcon","forwardRef","ref","SvgIcon","d","BEATS","title","icon","enabled","cheatsheet","article","book","course","video","podcast","talk","conference","chapter","lesson","TagsContext","_","tag","badge","common","white","Tag","count","addTag","deleteTag","active","actions","Badge","badgeContent","colorPrimary","Chip","TagsCloud","tagsContext","tags","Card","CardHeader","CardContent","p","isEmpty","indexOf","size","setSize","listItem","paragraph","marginBottom","header","copyCodeWrapper","copyIcon","top","right","light","MarkdownParagraph","children","MarkdownLink","MarkdownCrossLink","markdownRenderers","heading","level","gutterBottom","crosslink","table","TableContainer","Paper","Table","aria-label","tableHead","TableHead","tableBody","TableBody","tableRow","TableRow","tableCell","TableCell","copied","setCopied","copiedLeaveDelay","copiedText","onCopy","result","Tooltip","placement","leaveDelay","style","cursor","showLineNumbers","u","CROSS_LINK_REGEX","replace","match","URL","document","baseURI","crossLink","tree","findAndReplace","gfm","breaks","RenderedMarkdown","escapeHtml","renderers","plugins","RenderedText","nodes","matches","matchAll","groups","length","nl2br","slice","index","content","minHeight","wrapper","background","default","small","itemData","typeIcon","mobileInsight","image","marginLeft","backgroundSize","backgroundRepeat","backgroundPosition","minWidth","wideImage","markdown","overflowX","paddingLeft","flexBasis","mobileText","imagedText","overflow","textOverflow","whiteSpace","ordBreak","pointer","date","noBorder","border","controls","tagLink","types","SharedCompactItemLine","setTags","card","setCard","isMobile","locale","alignContent","clsx","link_meta","underline","backgroundImage","Collapse","in","transformOrigin","insight","format","paddingBottom","paddingRight","pr","align","dateObj","diff","fromNow","dateOrPeriod","done_at","created_at","flexGrow","activeFilter","getContrastText","grey","typeFilter","list","filters","ownFilter","ownFilterAvatar","colorless","LightenDarkenColor","ownFilterActiveAvatar","borderRadius","shape","fade","searchIcon","pointerEvents","inputRoot","inputInput","transition","transitions","rootWrapper","appBarSpacer","contentWrapper","HeartBeatsSharedFeed","done","setDone","setType","query","setQuery","ownContent","setOwnContent","tagsSize","setTagsSize","debouncedQuery","heartbeats","setHeartbeats","offset","setOffset","hasMore","setHasMore","sharedId","scrollY","useScrollPosition","own","tagsData","tagsLoading","doFetchTags","items","concat","Math","abs","innerHeight","body","scrollHeight","handleDeleteTags","pb","Tabs","indicatorColor","textColor","val","Tab","md","AvatarGroup","max","Avatar","values","toggleTypeFilter","InputProps","startAdornment","InputAdornment","endAdornment","onDelete","LinearProgress","Hidden","mdDown","Provider","LandingPage","exact","path","to","LanguageSwitcher","isFirstRun","useRef","baseURL","saveResponse","saveLanguage","current","Soul","opacity","SoulSwitchWidget","setLoading","mx","m","tz","guess","setSoul","onUpdate","TYPES_COLORS","general","menuButton","popper","zIndex","drawer","popperBox","TopMenu","anchorEl","setAnchorEl","share","setShare","responseType","useCache","exportResponse","doExport","handleExport","handleShare","handleCloseShare","handleClick","currentTarget","handleLogout","shareLink","origin","share_id","filename","disposition","exec","downloadUrl","createObjectURL","Blob","createElement","setAttribute","appendChild","click","remove","onMouseLeave","IconButton","aria-controls","aria-haspopup","onMouseEnter","Popper","role","undefined","TransitionProps","Grow","px","pt","MenuList","MenuItem","ListItemIcon","readOnly","DialogActions","drawerWidth","appBar","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","hide","flexShrink","drawerPaper","drawerOpen","drawerClose","quote","quotePaper","shadows","borderTopLeftRadius","quoteTitle","PJDrawer","$is_wide","showMobile","setShowMobile","showQuote","setShowQuote","useLocation","getTodayQuote","smUp","edge","noWrap","Drawer","direction","Divider","List","ListItem","selected","pathname","ListItemText","ClickAwayListener","onClickAway","timeout","text_en","text_ru","author_en","author_ru","CompetenciesCloud","subheader","urlsForType","isValidHttpUrl","string","protocol","humanizeMinutes","seconds","parseInt","days","floor","asDays","hours","minutes","LinkField","setTitle","setTimeSpent","setLink","errors","setErrors","debouncedLink","has","extend","omit","styled","highlighter","lineHeight","suggestions","input","outline","textarea","borderSize","borderColor","mention","requestActivities","callback","res","renderActivitySuggestions","entry","highlightedDisplay","focused","pl","MentionField","placeholder","displayTransform","markup","trigger","appendSpaceOnAdd","renderSuggestion","mdPreview","previewToggle","modal","borderBottomLeftRadius","borderTop","borderRight","borderLeft","MarkdownField","preview","setPreview","hidden","square","ToggleButtonGroup","exclusive","newValue","ToggleButton","DURATION_REGEX","styles","doneState","markdownField","helperText","typeToggleButton","borderTopRightRadius","typeTab","borderBottom","forEach","keys","HeartBeatForm","linkRequired","alwaysDone","fixedType","linkField","endpoint","alwaysAuthor","handleClose","update","insert","getValue","obj","default_","doneAtDefault","doneAtValue","doneAt","setDoneAt","timeSpentValue","timeSpent","setInsight","isAuthor","setIsAuthor","rating","setRating","tagsValue","setTagsValue","saving","doSave","tagsOptions","assign","getUpdateItemData","errorsState","time_spent","ceil","parse","is_author","keydownHandler","keyCode","ctrlKey","metaKey","getElementById","addEventListener","removeEventListener","overflowY","Autocomplete","multiple","freeSolo","options","getOptionSelected","option","getOptionLabel","inputValue","onBlur","x","trim","onInputChange","newInputValue","renderTags","getTagProps","renderInput","FormControl","InputLabel","htmlFor","shrink","OutlinedInput","notched","inputProps","inputComponent","labelPlacement","Rating","utils","MomentUtils","DatePicker","disableToolbar","disableFuture","autoOk","inputVariant","InputLabelProps","startIcon","heartbeat","oldObj","newObj","changedKeys","formPaper","left","transform","maxHeight","formContent","ActivityForm","initialType","Form","Modal","disableBackdropClick","ItemCardControls","edit","ButtonGroup","CheatsheetBeatForm","CompactItemLine","forceCard","hideRating","activityLink","setForm","confirmRemove","setConfirmRemove","toggleCard","removing","removeResponse","doRemove","openForm","removeActivity","handleToolbarClose","close","disableEscapeKeyDown","dividers","menuItem","fab","bottom","AddActionMenu","activityForm","setActivityForm","Fab","openActivityForm","isNil","HeartBeats","insertWithoutReload","updateWithoutReload","removeWithoutReload","routes","HeartBeatsFeed","urlParams","getAll","append","newLocation","toString","updatePageAddress","handleAddTags","RouterLink","FeedPage","useRouteMatch","HeartBeat","activityId","CheatsheetsList","CreateSoul","cond","ProudJunior","ProudJuniorPage","EmailConfirmCallback","PJApp","setUser","userData","doFetchUser","fetchUser","logoutUser","CssBaseline","App","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","defaults","paramsSerializer","omitBy","isArray","Root","overwrites","createMuiTheme","getTheme","success","ThemeProvider","maxSnack","anchorOrigin","vertical","horizontal","variantSuccess","ReactDOM","render"],"mappings":"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","file":"static/js/main.a47678f7.chunk.js","sourcesContent":["import Cookies from \"js-cookie\";\n\nexport function getCurrentToken() {\n return localStorage.getItem('pj-token') || Cookies.get('session');\n}\nexport function setToken(token) {\n return localStorage.setItem('pj-token', token);\n}\nexport function getLanguageLocally() {\n return localStorage.getItem('lang') || 'en';\n}\nexport function storeLanguageLocally(lang) {\n return localStorage.setItem('lang', lang);\n}\nexport function getInsightFormat() {\n return localStorage.getItem('insightFormat');\n}\nexport function setInsightFormat(format) {\n return localStorage.setItem('insightFormat', format);\n}\n\nconst emailPattern = new RegExp(/^((\"[\\w-\\s]+\")|([\\w-]+(?:\\.[\\w-]+)*)|(\"[\\w-\\s]+\")([\\w-]+(?:\\.[\\w-]+)*))(@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$)|(@\\[?((25[0-5]\\.|2[0-4][0-9]\\.|1[0-9]{2}\\.|[0-9]{1,2}\\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\\]?$)/i);\nexport function isValidEmail(email) {\n return emailPattern.test(email);\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from \"react-i18next\";\nimport detector from \"i18next-browser-languagedetector\";\nimport translationEN from './locales/en/translation.json';\nimport translationRU from './locales/ru/translation.json';\nimport {getLanguageLocally} from \"./utils/profile\";\n\n// the translations\n// (tip move them in a JSON file and import them)\nconst resources = {\n ru: {\n translation:translationRU\n },\n en: {\n translation:translationEN\n }\n};\n\ni18n\n.use(detector)\n.use(initReactI18next) // passes i18n down to react-i18next\n.init({\n resources,\n lng: getLanguageLocally(),\n debug: false,\n\n interpolation: {\n escapeValue: false // react already safes from xss\n }\n});\n\nexport default i18n;\n","import React from 'react';\n\nexport const AuthContext = React.createContext({\n user: null,\n fetch: () => {},\n logout: () => {}\n});\n\nexport default AuthContext;","import React, {useContext, useEffect} from \"react\";\nimport AuthContext from \"../../contexts/auth\";\nimport {getLanguageLocally, setToken} from \"../../utils/profile\";\nimport {useHistory} from \"react-router-dom\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport {Trans} from \"react-i18next\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport useAxios from \"axios-hooks\";\n\nexport const GitHubCallback = (props) => {\n\n const search = window.location.search;\n const params = new URLSearchParams(search);\n const code = params.get('code');\n const state = params.get('state');\n\n const history = useHistory();\n const auth = useContext(AuthContext);\n\n const [{data, loading, error}] = useAxios(\n {\n url: '/api/octocat/v1/oauth/callback',\n params: {\n code: code,\n state: state,\n lang: getLanguageLocally()\n }\n }\n )\n\n useEffect(() => {\n if (data && data.token) {\n setToken(data.token);\n history.push(\"/\");\n auth.fetch();\n }\n }, [data, auth, history])\n\n useEffect(() => {\n if (error) history.push(\"/\")\n }, [error, history])\n\n return loading ? \n   Loading...\n :
\n}","import Grid from \"@material-ui/core/Grid\";\nimport {makeStyles, Switch} from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n}));\n\nconst LandingLanguageSwitcher = (props) => {\n\n const {en, ru, lang, setLang} = props;\n const classes = useStyles();\n\n const handleChange = (event) => {\n setLang(event.target.checked ? \"ru\" : \"en\");\n }\n\n\n return \n {en || \"EN\"}\n \n \n \n {ru || \"RU\"}\n \n}\n\nexport default LandingLanguageSwitcher;","import {getCurrentToken} from \"../utils/profile\";\n\nconst axios = require('axios');\n\nexport const getAxiosHeaders = () => {\n const headers = {\n 'Content-Type': 'application/json',\n };\n const token = getCurrentToken();\n if (token) {\n headers['Authorization'] = 'Token ' + token;\n }\n\n return headers;\n}\n\nclass ProudAPIClass {\n constructor() {\n this.http = axios.create({\n\n })\n }\n\n get = (url, params) => {\n return this.http.get(\n url, {params: params, headers: getAxiosHeaders()}\n ).then(response => response.data)\n }\n\n post = (url, data) => {\n return this.http.post(url, data, {headers: getAxiosHeaders()}).then(response => response.data)\n }\n\n put = (url, data) => {\n return this.http.put(url, data, {headers: getAxiosHeaders()}).then(response => response.data)\n }\n\n patch = (url, data) => {\n return this.http.patch(url, data, {headers: getAxiosHeaders()}).then(response => response.data)\n }\n\n delete = (url) => {\n return this.http.delete(url, {headers: getAxiosHeaders()}).then(response => response.data)\n }\n\n}\n\nconst ProudAPI = new ProudAPIClass();\nexport default ProudAPI;\n","import ProudAPI from \"./client\";\nimport {getLanguageLocally} from \"../utils/profile\";\n\nconst moment = require('moment-timezone');\n\nexport const getCurrentUser = () => {\n return ProudAPI.get('/api/auth/v1/users/by-token');\n};\n\nexport const getCurrentSoul = () => {\n return ProudAPI.get('/api/soul/v1/souls/by-token');\n};\n\nexport const setSoul = (avatar) => {\n const soul = {\n 'avatar': avatar,\n 'timezone': moment.tz.guess(),\n 'modification': 'default'\n }\n return ProudAPI.post('/api/soul/v1/souls', soul);\n};\n\n\nexport const getOAuthLink = () => {\n return ProudAPI.get('/api/octocat/v1/oauth/login');\n};\n\nexport const checkOAuthCode = (code, state) => {\n return ProudAPI.get('/api/octocat/v1/oauth/callback',\n {code: code, state: state, lang: getLanguageLocally()});\n};\n\n// export const setAvatar = (data) => {\n// return ProudAPI.patch('/api/v1/me', data);\n// };","import React, {useContext, useEffect, useState} from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n Checkbox,\n Dialog,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n makeStyles,\n TextField\n} from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport useAxios from \"axios-hooks\";\nimport {useSnackbar} from \"notistack\";\nimport {useTranslation} from \"react-i18next\";\nimport {getLanguageLocally, isValidEmail, setToken} from \"../../utils/profile\";\nimport AuthContext from \"../../contexts/auth\";\nimport PasswordStrengthBar from \"react-password-strength-bar\";\nimport Link from \"@material-ui/core/Link\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: theme.spacing(3),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n}));\n\n\nconst SignUpDialog = (props) => {\n\n const {open, setOpen} = props;\n const { t } = useTranslation();\n\n const handleClose = () => {\n setOpen(false);\n };\n\n return \n \n {t('landing.signup')}\n \n \n \n \n\n \n\n}\n\n\nexport const SignUp = () => {\n\n const classes = useStyles();\n\n const [email, setEmail] = useState(\"\");\n const [acceptTerms, setAcceptTerms] = useState(false);\n const [password, setPassword] = useState(\"\");\n const [passwordConfirmation, setPasswordConfirmation] = useState(\"\");\n const [passwordMatch, setPasswordMatch] = useState(true);\n const {enqueueSnackbar} = useSnackbar();\n const {t} = useTranslation();\n const auth = useContext(AuthContext);\n\n const [{data, loading, response}, doSubmit] = useAxios({\n url: \"/api/auth/v1/users\",\n method: \"POST\",\n validateStatus: (status) => status >= 200 && status < 500,\n }, {manual: true})\n\n const handleSubmit = () => {\n\n if (acceptTerms && isValidEmail(email) && passwordMatch) {\n doSubmit({\n data: {\n email: email,\n password: password,\n language: getLanguageLocally()\n }\n })\n\n }\n }\n\n useEffect(() => {\n if (response && response.status === 400) {\n enqueueSnackbar(t(\"landing.emailUsed\"), {\n variant: \"error\",\n })\n } else if (response && response.status === 201 && data) {\n setToken(data.token);\n auth.fetch();\n }\n }, [response, data]);\n\n useEffect(() => {\n setPasswordMatch(password === passwordConfirmation);\n }, [password, passwordConfirmation, setPasswordMatch])\n\n const handleEmailChange = (event) => {\n setEmail(event.target.value);\n }\n const handlePasswordChange = (event) => {\n setPassword(event.target.value);\n }\n const handlePasswordConfirmationChange = (event) => {\n setPasswordConfirmation(event.target.value);\n }\n const handleTermsChange = (event) => {\n setAcceptTerms(event.target.checked);\n }\n\n return \n
\n \n \n \n \n \n \n \n \n \n \n \n \n\n }\n label={\n {t(\"landing.accept\")} \n {t(\"landing.terms\")}\n }\n />\n \n \n {t(\"landing.doSignup\")}\n \n
\n
\n}\n\nexport default SignUpDialog;","import React, {useContext, useEffect, useState} from 'react';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Link from '@material-ui/core/Link';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {useTranslation} from \"react-i18next\";\nimport {Dialog, DialogContent, DialogTitle, Tab, Tabs} from \"@material-ui/core\";\nimport AuthContext from \"../../contexts/auth\";\nimport useAxios from \"axios-hooks\";\nimport {isValidEmail, setToken} from \"../../utils/profile\";\nimport {useSnackbar} from \"notistack\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n}));\n\nconst SignInDialog = (props) => {\n\n const {open, setOpen} = props;\n const { t } = useTranslation();\n\n const handleClose = () => {\n setOpen(false);\n };\n\n return \n \n {t('landing.signin')}\n \n \n \n \n\n \n\n}\n\nconst SignIn = () => {\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const {enqueueSnackbar} = useSnackbar();\n const {t} = useTranslation();\n const auth = useContext(AuthContext);\n const classes = useStyles();\n\n const [{data, loading, response}, doSubmit] = useAxios({\n url: \"/api/auth/v1/token\",\n method: \"POST\",\n validateStatus: (status) => status >= 200 && status < 500,\n }, {manual: true})\n\n const handleSubmit = () => {\n\n if (isValidEmail(email) && password) {\n doSubmit({\n data: {\n email: email,\n password: password,\n }\n })\n\n }\n }\n\n useEffect(() => {\n if (response && (response.status === 401 || response.status === 400)) {\n enqueueSnackbar(t(\"landing.wrongCreds\"), {\n variant: \"error\",\n })\n } else if (response && response.status === 200 && data) {\n setToken(data.token);\n auth.fetch();\n }\n }, [response, data]);\n\n const handleEmailChange = (event) => {\n setEmail(event.target.value);\n }\n const handlePasswordChange = (event) => {\n setPassword(event.target.value);\n }\n\n return \n
\n \n \n \n {t('landing.doSignin')}\n \n \n \n \n Forgot password?\n \n \n \n
\n
\n}\n\nexport default SignInDialog;","import {makeStyles} from \"@material-ui/core\";\nimport React from \"react\";\n\n\nconst useStyles = makeStyles((theme) => ({\n soul: {\n filter: \"drop-shadow(0px 0px 1px rgba(0,0,0,1))\",\n maxWidth: '350px',\n [theme.breakpoints.up('xs')]: {\n height: 'auto',\n },\n }\n}));\n\nexport const Logo = ({height, width}) => {\n\n const classes = useStyles();\n return \"ipsly.com\"\n}\n\nexport default Logo;\n","import AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport LandingLanguageSwitcher from \"../../components/common/landing_language_switcher\";\nimport Container from \"@material-ui/core/Container\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport GitHubIcon from \"@material-ui/icons/GitHub\";\nimport React, {useEffect, useState} from \"react\";\nimport {getOAuthLink} from \"../../api/profile\";\nimport {makeStyles, useMediaQuery, useTheme} from \"@material-ui/core\";\nimport {storeLanguageLocally} from \"../../utils/profile\";\nimport {useTranslation} from \"react-i18next\";\nimport {useParams, useHistory} from \"react-router-dom\";\nimport SignUpDialog from \"../../components/profile/signup\";\nimport SignInDialog from \"../../components/profile/signin\";\nimport Logo from \"../../components/logo\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n textAlign: 'left',\n alignItems: 'center',\n height: '100vh',\n paddingTop: theme.spacing(15),\n [theme.breakpoints.down('sm')]: {\n paddingTop: theme.spacing(1),\n }\n },\n desktop: {\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n }\n },\n mobile: {\n textAlign: 'center',\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n }\n },\n what: {\n fontSize: theme.typography.h6.fontSize,\n },\n centered: {\n textAlign: 'center',\n },\n button: {\n width: '200px',\n marginTop: theme.spacing(3),\n marginRight: theme.spacing(2)\n },\n text: {\n [theme.breakpoints.down('sm')]: {\n textAlign: 'center',\n }\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n color: '#000',\n // necessary for content to be below app bar\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(2),\n },\n [theme.breakpoints.down('md')]: {\n justifyContent: 'flex-start',\n },\n ...theme.mixins.toolbar,\n },\n transparentBar: {\n width: '100%',\n position: 'absolute',\n // backgroundColor: 'transparent',\n boxShadow: 'none',\n color: theme.palette.primary.dark\n },\n}));\n\n\nconst Buttons = () => {\n const [showSignIn, setShowSignIn] = useState(false);\n const [showSignUp, setShowSignUp] = useState(false);\n const classes = useStyles();\n const {t} = useTranslation();\n\n const login = () => {\n getOAuthLink().then((data) => {\n if (!data.error) {\n window.location = data.link;\n }\n }).catch((error) => {\n })\n }\n\n return \n \n \n \n \n \n \n \n \n}\n\n\nexport const LandingPageComponent = (props) => {\n\n const classes = useStyles();\n\n const {lang} = useParams();\n const [userLang, setUserLang] = useState(lang);\n const {t, i18n} = useTranslation();\n const theme = useTheme();\n const isSmall = useMediaQuery(theme.breakpoints.down('sm'));\n const history = useHistory();\n\n useEffect(() => {\n if (userLang) {\n history.push(`/${userLang}`);\n storeLanguageLocally(userLang);\n i18n.changeLanguage(userLang);\n }\n }, [userLang, history, i18n])\n\n return \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n\n ipsly\n - See you growing -\n\n \n\n \n \n \n \n \n {t('landing.what').split('\\n').map(\n (item, key) => {\n return {item}
\n })}\n
\n \n \n \n
\n
\n
\n\n
\n}\n","import { useState, useEffect } from 'react';\n\n// Code from https://habr.com/ru/post/492248/\nexport default function useDebounce(value, delay) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay || 300);\n\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay]\n );\n return debouncedValue;\n}","import React from 'react';\nimport {SvgIcon} from \"@material-ui/core\";\n\nexport const ActivityIcon = React.forwardRef((props, ref) => {\n return (\n \n \n \n );\n})\n","import DescriptionIcon from \"@material-ui/icons/Description\";\nimport YouTubeIcon from \"@material-ui/icons/YouTube\";\nimport SchoolIcon from \"@material-ui/icons/School\";\nimport PeopleIcon from \"@material-ui/icons/People\";\nimport HeadsetIcon from '@material-ui/icons/Headset';\nimport RecordVoiceOverIcon from '@material-ui/icons/RecordVoiceOver';\nimport CastForEducationIcon from \"@material-ui/icons/CastForEducation\";\nimport MenuBookIcon from \"@material-ui/icons/MenuBook\";\nimport ImportContactsIcon from '@material-ui/icons/ImportContacts';\nimport WbIncandescentIcon from '@material-ui/icons/WbIncandescent';\nimport {ActivityIcon} from \"../../icons\";\n\nexport const BEATS = {\n \"general\": {\n key: \"general\",\n title: \"activities.general\",\n icon: (props) => ,\n enabled: false,\n filter: false\n },\n cheatsheet: {\n key: \"cheatsheet\",\n title: \"activities.cheatsheet\",\n icon: (props) => ,\n enabled: true,\n filter: false\n },\n\n article: {\n key: \"article\",\n title: \"activities.article\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n book: {\n key: \"book\",\n title: \"activities.book\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n course: {\n key: \"course\",\n title: \"activities.course\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n video: {\n key: \"video\",\n title: \"activities.video\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n podcast: {\n key: \"podcast\",\n title: \"activities.podcast\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n talk: {\n key: \"talk\",\n title: \"activities.talk\",\n icon: (props) => ,\n enabled: true,\n filter: true\n },\n conference: {\n key: \"conference\",\n title: \"activities.conference\",\n icon: (props) => ,\n enabled: false,\n filter: true\n },\n chapter: {\n key: \"chapter\",\n title: \"activities.chapter\",\n icon: (props) => ,\n enabled: false,\n filter: true\n },\n lesson: {\n key: \"lesson\",\n title: \"activities.lesson\",\n icon: (props) => ,\n enabled: false,\n filter: true\n },\n};\n","import React from 'react';\n\nexport const TagsContext = React.createContext({\n data: null,\n loading: false,\n fetch: () => {},\n});\n\nexport default TagsContext;","import {Badge, Card, CardContent, CardHeader, Chip, CircularProgress, makeStyles} from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport React, {useContext, useEffect, useState} from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport TagsContext from \"../../contexts/tags\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n tag: {\n margin: theme.spacing(1),\n },\n badge: {\n color: theme.palette.common.white\n }\n}));\n\nconst Tag = ({tag, count, addTag, deleteTag, active}) => {\n const classes = useStyles();\n const actions = active ? { onClick: () => deleteTag(tag) } : { onClick: () => addTag(tag) }\n return \n \n \n}\n\nconst TagsCloud = (props) => {\n\n const tagsContext = useContext(TagsContext);\n\n const {t} = useTranslation();\n\n const {addTag, deleteTag, tags} = props;\n\n return \n \n \n {tagsContext.loading ? :\n \n {tagsContext.data && !_.isEmpty(tagsContext.data.tags) ? \n {\n _.map(tagsContext.data.tags, (count, tag) => {\n return -1}/>\n })\n } {\n _.size(tagsContext.data.tags) < tagsContext.data.count ?\n tagsContext.setSize(null)}>More tags\n : null}\n \n : {t('tagsCloud.noTags')}}\n \n }\n \n \n}\n\nexport default TagsCloud;","import Typography from \"@material-ui/core/Typography\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Table from \"@material-ui/core/Table\";\nimport {TableBody, TableCell, TableHead, TableRow, Tooltip} from \"@material-ui/core\";\nimport Link from \"@material-ui/core/Link\";\nimport React, {useEffect, useState} from \"react\";\nimport {makeStyles} from \"@material-ui/core/styles\";\nimport {Prism as SyntaxHighlighter} from 'react-syntax-highlighter';\nimport {CopyToClipboard} from \"react-copy-to-clipboard\";\nimport FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined';\nimport {useTranslation} from \"react-i18next\";\n\nconst useStyles = makeStyles( (theme) => ({\n listItem: {\n marginTop: theme.spacing(1),\n },\n paragraph: {\n marginBottom: theme.spacing(2),\n },\n header: {\n marginTop: theme.spacing(2),\n },\n copyCodeWrapper: {\n width: '100%',\n position: 'relative',\n },\n copyIcon: {\n fontSize: '1rem',\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n '&:hover': {\n color: theme.palette.primary.light,\n }\n }\n}));\n\nexport function MarkdownParagraph(props) {\n const classes = useStyles();\n return {props.children}\n}\n\nexport const MarkdownHeading = (props) => {\n const classes = useStyles();\n let variant;\n switch (props.level) {\n case 1:\n variant = \"h5\";\n break;\n case 2:\n variant = \"h6\";\n break;\n case 3:\n variant = \"subtitle1\";\n break;\n case 4:\n variant = \"subtitle2\";\n break;\n default:\n variant = \"h6\";\n break;\n }\n return {props.children}\n};\n\nexport const MarkdownListItem = (props) => {\n\n const classes = useStyles();\n\n return (\n
  • \n {props.children}\n
  • \n );\n};\n\nexport function MarkdownTable(props) {\n return (\n \n {props.children}
    \n
    \n );\n}\n\nexport function MarkdownTableCell(props) {\n return {props.children}\n}\n\nexport function MarkdownTableRow(props) {\n return {props.children}\n}\n\nexport function MarkdownTableBody(props) {\n return {props.children}\n}\n\nexport function MarkdownTableHead(props) {\n return {props.children}\n}\n\nexport const MarkdownLink = ({children, url, href}) => {\n return {children}\n}\n\nconst MarkdownCrossLink = ({title, url}) => {\n return {title}\n}\n\nconst CodeBlock = ({language, value}) => {\n const [copied, setCopied] = useState(false);\n const copiedLeaveDelay = copied ? 1200 : 0;\n const classes = useStyles();\n\n const {t} = useTranslation();\n\n const handleLinkCopy = (text, result) => {\n setCopied(true);\n }\n\n useEffect(() => {\n if (copied) {\n setTimeout(() => setCopied(false), 2000)\n }\n }, [copied])\n const copiedText = t(copied ? \"itemCard.codeCopied\" : \"itemCard.codeCopy\");\n\n if (value) {\n return
    \n \n \n \n \n \n \n
    \n }\n return
    {value}
    \n}\n\nexport const markdownRenderers = {\n heading: MarkdownHeading,\n paragraph: MarkdownParagraph,\n link: MarkdownLink,\n crosslink: MarkdownCrossLink,\n listItem: MarkdownListItem,\n table: MarkdownTable,\n tableHead: MarkdownTableHead,\n tableBody: MarkdownTableBody,\n tableRow: MarkdownTableRow,\n tableCell: MarkdownTableCell,\n code: CodeBlock\n};\n\nexport const textRenderers = {\n\n heading: MarkdownParagraph,\n paragraph: MarkdownParagraph,\n link: MarkdownParagraph,\n crosslink: MarkdownCrossLink,\n listItem: MarkdownParagraph,\n table: MarkdownParagraph,\n tableHead: MarkdownParagraph,\n tableBody: MarkdownParagraph,\n tableRow: MarkdownParagraph,\n tableCell: MarkdownParagraph,\n code: MarkdownParagraph\n};","import findAndReplace from 'mdast-util-find-and-replace';\nconst u = require('unist-builder')\n\nconst CROSS_LINK_REGEX = /@\\{(?.*?)\\}\\[(?<id>.*?)\\]/ig;\n\nfunction crossLink() {\n\n function transform(tree) {\n findAndReplace(tree, CROSS_LINK_REGEX, replace);\n }\n\n return transform;\n}\n\nfunction replace(match, title, id) {\n return u('crosslink', {\n url: new URL(`/activity/${id}`, document.baseURI).href,\n title: title,\n }, [u('text', title)]);\n}\n\n\nexport default crossLink;","import {MarkdownLink, markdownRenderers} from \"./markdown\";\nimport crosslink from \"./crosslink\";\nimport ReactMarkdown from \"react-markdown\";\nimport nl2br from \"react-nl2br\";\nconst gfm = require('remark-gfm');\nconst breaks = require('remark-breaks');\n\nexport const RenderedMarkdown = ({text}) => {\n return <ReactMarkdown escapeHtml={false} renderers={markdownRenderers} plugins={[gfm, crosslink, breaks]} children={text} />\n}\n\nexport const RenderedText = ({text}) => {\n const nodes = [];\n let matches= text.matchAll(/#\\{(?<title>.*?)\\}\\[(?<id>.*?)\\]/ig);\n let cursor = 0;\n for (let match of matches) {\n const {title, id} = match.groups;\n nodes[nodes.length] = nl2br(text.slice(cursor, match.index));\n cursor = match.index + match[0].length;\n nodes[nodes.length] = <MarkdownLink key={nodes.length} url={new URL(`/activity/${id}`, document.baseURI).href} children={title}/>\n }\n nodes[nodes.length] = nl2br(text.slice(cursor, text.length));\n\n return nodes;\n}","import React, {useState} from \"react\";\nimport {Collapse, makeStyles, Paper, Tooltip, useMediaQuery, useTheme} from \"@material-ui/core\";\nimport {useTranslation} from \"react-i18next\";\nimport {getLanguageLocally} from \"../../../utils/profile\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport clsx from \"clsx\";\nimport Link from \"@material-ui/core/Link\";\nimport {BEATS} from \"../../../components/feed/beats\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {RenderedMarkdown, RenderedText} from \"../../../components/markdown/render\";\n\nconst moment = require(\"moment-timezone\");\nconst _ = require(\"lodash\");\n\n\nconst useStyles = makeStyles((theme) => ({\n content: {\n minHeight: theme.spacing(8),\n height: '100%',\n width: '100%',\n },\n wrapper: {\n width: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n '&:hover': {\n backgroundColor: theme.palette.background.default\n },\n },\n small: {\n width: theme.spacing(3.5),\n height: theme.spacing(3.5),\n },\n type: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: theme.spacing(1),\n },\n itemData: {\n display: 'flex',\n width: '100%',\n height: '64px',\n // justifyContent: 'space-between',\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n height: 'auto'\n }\n },\n typeIcon: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n },\n mobileInsight: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n color: theme.palette.primary.light\n },\n image: {\n marginLeft: theme.spacing(1.5),\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100%',\n minHeight: '64px',\n minWidth: '100px',\n maxWidth: '100px',\n },\n wideImage: {\n marginLeft: 0,\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100px',\n minHeight: '100px',\n minWidth: '100%',\n maxWidth: '100%',\n },\n markdown: {\n width: '100%',\n overflowX: 'auto',\n },\n text: {\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(1.5),\n width: 'calc(100% - 26px)',\n flexBasis: 'calc(100% - 26px)'\n // maxWidth: '100%',\n },\n mobileText: {\n paddingLeft: theme.spacing(0.5),\n // whiteSpace: 'normal'\n },\n imagedText: {\n width: 'calc(100% - 136px)',\n flexBasis: 'calc(100% - 136px)'\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n [theme.breakpoints.down(\"sm\")]: {\n whiteSpace: 'normal',\n ordBreak: 'break-all',\n }\n },\n pointer: {\n cursor: 'pointer',\n },\n date: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center'\n },\n noBorder: {\n border: '0 !important',\n },\n controls: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n tagLink: {\n marginRight: theme.spacing(2),\n },\n ...theme.types\n}));\n\nexport const SharedCompactItemLine = (props) => {\n\n const classes = useStyles();\n const {item, setTags} = props;\n const [card, setCard] = useState(false);\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n\n const {t} = useTranslation();\n // Required to re-render dates on language change\n moment.locale(getLanguageLocally());\n\n const toggleCard = () => {\n setCard(!card);\n }\n\n const dateOrPeriod = (date) => {\n const dateObj = moment(date);\n if (moment().diff(dateObj, 'seconds') > 24*60*60) {\n return dateObj.format('LLL')\n }\n return dateObj.fromNow();\n }\n\n return <Grid item xs={12}>\n\n <Paper className={classes.paper} variant=\"outlined\">\n <Grid container alignItems=\"stretch\" alignContent=\"center\">\n <Grid item xs={12}>\n <Box display=\"flex\" className={classes.content} >\n <Box className={clsx(classes.type, {[classes[`type-${item.type}`]]: true})}> </Box>\n <Box width=\"calc(100% - 8px)\">\n\n {item.link_meta && item.link_meta.image && isMobile ?\n <Link href={item.link} target=\"_blank\" underline=\"none\">\n <Box className={classes.wideImage}\n style={{backgroundImage: `url(${item.link_meta.image})`}}>\n  \n </Box>\n </Link> : null}\n <Grid container>\n <Grid item xs={isMobile ? 11 : 10}>\n <Box className={classes.itemData}>\n <Box className={classes.typeIcon}>\n <Tooltip title={t(BEATS[item.type].title)} placement=\"top\" >\n {BEATS[item.type].icon()}\n </Tooltip>\n </Box>\n\n {item.link_meta && item.link_meta.image && !isMobile ?\n <Link href={item.link} target=\"_blank\" underline=\"none\">\n <Box className={classes.image}\n style={{backgroundImage: `url(${item.link_meta.image})`}}>\n  \n </Box>\n </Link> : null}\n\n <Box className={clsx(classes.text, {\n [classes.mobileText]: isMobile,\n [classes.imagedText]: !isMobile && item.link_meta && item.link_meta.image\n })} onClick={toggleCard} >\n\n <Typography\n variant={isMobile ? \"body2\" : \"body2\" }\n className={classes.title}>\n {item.title}\n </Typography>\n\n {item.tags ? <Box className={classes.tags}>\n {_.map(item.tags, (tag) => {\n // return <Chip key={tag} variant=\"outlined\" label={`#${tag}`} onClick={() => setTags(tag)} className={classes.tagLink}/>\n return <Link key={tag} component=\"button\" onClick={() => setTags(tag)} className={classes.tagLink}>{tag}</Link>\n })}\n </Box> : null}\n\n </Box>\n </Box>\n\n </Grid>\n\n </Grid>\n <Box>\n\n <Collapse in={card} style={{ transformOrigin: '0 0 0' }}>\n <Box>\n {item.insight && <Box className={classes.markdown} p={2}>\n {\n item.format === \"text\" ?\n <RenderedText text={item.insight}/>\n : <RenderedMarkdown text={item.insight}/>\n }\n </Box>}\n\n <Box className={classes.date} paddingBottom={1} paddingRight={1}>\n <Box pr={1}>\n <Typography align=\"left\" variant=\"caption\">\n {dateOrPeriod(item.done_at ? item.done_at : item.created_at)}\n </Typography>\n </Box>\n </Box>\n </Box>\n </Collapse>\n </Box>\n </Box>\n\n </Box>\n </Grid>\n </Grid>\n\n </Paper>\n\n </Grid>\n\n}","import React, {useEffect, useState} from \"react\";\nimport {\n Avatar, Chip,\n Collapse,\n fade,\n Hidden,\n InputAdornment,\n makeStyles,\n Paper,\n Tab,\n Tabs,\n TextField,\n Tooltip,\n useMediaQuery,\n useTheme,\n} from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {useTranslation} from \"react-i18next\";\nimport {Redirect, Route, Switch, useLocation, useParams} from \"react-router-dom\";\nimport {grey} from \"@material-ui/core/colors\";\nimport clsx from \"clsx\";\nimport EmojiPeopleIcon from '@material-ui/icons/EmojiPeople';\nimport {AvatarGroup} from \"@material-ui/lab\";\nimport Box from \"@material-ui/core/Box\";\nimport {LightenDarkenColor} from \"lighten-darken-color\";\nimport SearchIcon from '@material-ui/icons/Search';\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport useDebounce from \"../../utils/debounce\";\nimport useScrollPosition from \"@react-hook/window-scroll\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport Typography from \"@material-ui/core/Typography\";\nimport SentimentSatisfiedIcon from \"@material-ui/icons/SentimentSatisfied\";\nimport {LinearProgress} from \"@material-ui/core\";\nimport {BEATS} from \"../../components/feed/beats\";\nimport {getLanguageLocally} from \"../../utils/profile\";\nimport Link from \"@material-ui/core/Link\";\nimport TagsCloud from \"../../components/feed/tags\";\nimport Container from \"@material-ui/core/Container\";\nimport {SharedCompactItemLine} from \"./shared/line\";\nimport TagsContext from \"../../contexts/tags\";\nimport Logo from \"../../components/logo\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n activeFilter: {\n cursor: 'pointer',\n color: theme.palette.getContrastText(grey[900]),\n backgroundColor: grey[900],\n '&:hover': {\n color: theme.palette.getContrastText(grey[800]),\n backgroundColor: grey[800],\n }\n },\n typeFilter: {\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.getContrastText(grey[600]),\n backgroundColor: grey[600],\n }\n },\n list: {\n width: '100%'\n },\n filters: {\n display: 'flex',\n flexGrow: 1,\n paddingLeft: '8px !important'\n },\n ownFilter: {\n marginRight: theme.spacing(2),\n },\n ownFilterAvatar: {\n cursor: 'pointer',\n color: theme.palette.colorless.main,\n backgroundColor: 'transparent',\n '&:hover': {\n color: LightenDarkenColor(theme.palette.secondary.main, -15),\n }\n },\n ownFilterActiveAvatar: {\n cursor: 'pointer',\n color: theme.palette.secondary.main,\n backgroundColor: 'transparent',\n '&:hover': {\n color: LightenDarkenColor(theme.palette.secondary.main, -15),\n }\n },\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(theme.palette.common.white, 0.15),\n '&:hover': {\n backgroundColor: fade(theme.palette.common.white, 0.25),\n },\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(1),\n width: 'auto',\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n // vertical padding + font size from searchIcon\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: '12ch',\n '&:focus': {\n width: '20ch',\n },\n },\n },\n pointer: {\n cursor: 'pointer',\n },\n content: {\n minHeight: theme.spacing(8),\n height: '100%',\n width: '100%',\n },\n wrapper: {\n width: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n '&:hover': {\n backgroundColor: theme.palette.background.default\n },\n },\n small: {\n width: theme.spacing(3.5),\n height: theme.spacing(3.5),\n },\n type: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: theme.spacing(1),\n },\n itemData: {\n display: 'flex',\n width: '100%',\n height: '64px',\n // justifyContent: 'space-between',\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n height: 'auto'\n }\n },\n typeIcon: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n },\n mobileInsight: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n color: theme.palette.primary.light\n },\n image: {\n marginLeft: theme.spacing(1.5),\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100%',\n minHeight: '64px',\n minWidth: '100px',\n maxWidth: '100px',\n },\n wideImage: {\n marginLeft: 0,\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100px',\n minHeight: '100px',\n minWidth: '100%',\n maxWidth: '100%',\n },\n markdown: {\n width: '100%',\n overflowX: 'auto',\n },\n text: {\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(1.5),\n width: 'calc(100% - 26px)',\n flexBasis: 'calc(100% - 26px)'\n // maxWidth: '100%',\n },\n mobileText: {\n paddingLeft: theme.spacing(0.5),\n // whiteSpace: 'normal'\n },\n imagedText: {\n width: 'calc(100% - 136px)',\n flexBasis: 'calc(100% - 136px)'\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n [theme.breakpoints.down(\"sm\")]: {\n whiteSpace: 'normal',\n ordBreak: 'break-all',\n }\n },\n date: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center'\n },\n noBorder: {\n border: '0 !important',\n },\n controls: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n tagLink: {\n marginRight: theme.spacing(2),\n },\n rootWrapper: {\n display: 'flex',\n },\n appBarSpacer: {\n [theme.breakpoints.up('sm')]: {\n minHeight: theme.spacing(3)\n }\n },\n contentWrapper: {\n width: '100%',\n paddingLeft: theme.spacing(2),\n [theme.breakpoints.down('sm')]: {\n paddingLeft: 0\n }\n },\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n // maxWidth: ,\n },\n ...theme.types\n}));\n\n\nconst HeartBeatsSharedFeed = () => {\n\n const classes = useStyles();\n const {t} = useTranslation();\n\n const [done, setDone] = useState('1');\n const [type, setType] = useState(null);\n const [query, setQuery] = useState(\"\");\n const [ownContent, setOwnContent] = useState(null);\n const [tags, setTags] = useState([]);\n const [tagsSize, setTagsSize] = useState(5);\n\n const debouncedQuery = useDebounce(query);\n\n const [heartbeats, setHeartbeats] = useState([]);\n const [offset, setOffset] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n const {sharedId} = useParams();\n const scrollY = useScrollPosition(10);\n\n const [{data, loading}] = useAxios({\n url: `/api/memory/v1/heartbeats/${sharedId}/shared`,\n headers: getAxiosHeaders(),\n params: {done, type, own: ownContent, offset, tags, query: debouncedQuery},\n });\n\n const [{data: tagsData, loading: tagsLoading}, doFetchTags] = useAxios({\n url: `/api/memory/v1/heartbeats/${sharedId}/shared-tags`,\n headers: getAxiosHeaders(),\n params: {size: tagsSize}\n });\n\n const fetchNextPage = () => {\n setOffset(heartbeats ? heartbeats.length : 0)\n }\n\n useEffect(() => {\n setOffset(0);\n setHeartbeats([]); // eslint-disable-next-line\n }, [done, type, ownContent, tags, debouncedQuery])\n\n useEffect(() => {\n if (data && data.items) {\n setHasMore(offset + data.items.length < data.count);\n setHeartbeats((heartbeats) => heartbeats ? _.concat(heartbeats, data.items) : data.items);\n }\n // eslint-disable-next-line\n }, [data]);\n\n useEffect(() => {\n if (hasMore) {\n const bottom = Math.abs(window.innerHeight + scrollY - document.body.scrollHeight) < 20;\n if (bottom) {\n fetchNextPage();\n }\n } // eslint-disable-next-line\n }, [scrollY]);\n\n useEffect(() => {\n document.title = `ipsly: ${done ? \"behind\" : \"roadmap\"}`;\n }, [done])\n\n const toggleOwnFilter = (event) => {\n setOwnContent(ownContent ? null : true);\n }\n\n const toggleTypeFilter = (key) => {\n // This is for future, when we will support multiple types for filtering\n // if (types.indexOf(key) === -1) {\n // setTypes(_.union(types, [key]));\n // } else {\n // setTypes(_.filter(types, (el) => el !== key));\n // }\n setType(key === type ? null : key);\n }\n\n const getTagsContextValue = () => {\n return {\n data: tagsData,\n size: tagsSize,\n setSize: setTagsSize,\n loading: tagsLoading,\n fetch: doFetchTags,\n }\n }\n\n const handleAddTags = (tag) => {\n if (tags.indexOf(tag) === -1) {\n setTags(tags ? _.concat(tags, tag) : [tag]);\n }\n }\n\n const handleDeleteTags = (tag, index) => {\n setTags(_.filter(tags, (value) => value !== tag))\n }\n\n return <div className={classes.rootWrapper}>\n <main className={classes.contentWrapper}>\n <Container className={classes.container}>\n <Box display=\"flex\" alignItems=\"center\" className={classes.appBarSpacer}>\n <Box pr={8} pb={2}>\n <Link href=\"/\"><Logo height=\"150px\" width=\"150px\" /></Link>\n </Box>\n <Typography variant=\"h4\">ipsly.com</Typography>\n </Box>\n\n <Grid container spacing={4}>\n <Grid item sm={6} xs={12}>\n <Tabs\n value={done}\n variant=\"fullWidth\"\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={(event, val) => setDone(val)}\n >\n <Tab\n label={t('activitiesList.behind')}\n value=\"1\"/>\n <Tab\n label={t('activitiesList.roadmap')}\n value=\"0\"/>\n </Tabs>\n </Grid>\n\n <Grid item md={3} xs={12} className={classes.filters}>\n <AvatarGroup max={10} className={classes.ownFilter}>\n <Tooltip title={t(\"activitiesList.own\")} placement=\"top\">\n <Avatar\n onClick={toggleOwnFilter}\n alt={t(\"activitiesList.own\")}\n className={clsx({\n [classes.ownFilterAvatar]: !ownContent,\n [classes.ownFilterActiveAvatar]: ownContent,\n })}\n ><EmojiPeopleIcon fontSize=\"large\"/></Avatar>\n </Tooltip>\n </AvatarGroup>\n\n <AvatarGroup max={10}>\n {_.map(_.values(BEATS), ({key, title, icon, enabled, filter}) =>\n enabled && filter ? <Tooltip title={t(title)} placement=\"top\" key={key}>\n <Avatar\n onClick={() => toggleTypeFilter(key)}\n alt={title}\n className={clsx(classes[`avatar-${key}-hover`], {\n [classes[`avatar-${key}`]]: type === key,\n [classes.typeFilter]: type !== key,\n [classes.activeFilter]: type === key\n })}\n >{icon()}</Avatar></Tooltip> : null\n )}\n </AvatarGroup>\n </Grid>\n <Grid item md={3} xs={12}>\n\n <TextField\n label={t(\"activitiesList.search\")}\n value={query}\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon/>\n </InputAdornment>\n ),\n endAdornment: <InputAdornment position=\"end\">\n {query ?\n <CloseIcon fontSize=\"small\" onClick={() => setQuery(\"\")}\n className={classes.pointer}/> : \" \"\n }\n </InputAdornment>,\n }}\n onChange={(event) => setQuery(event.target.value)}/>\n </Grid>\n\n <Grid item md={9} xs={12}>\n {!_.isEmpty(tags) && <Box my={2}>{_.map(tags, (tag) => {\n return <Box component=\"span\" p={0.5} key={tag}>\n <Chip label={tag} variant=\"outlined\" onClick={() => handleDeleteTags(tag)}\n onDelete={() => handleDeleteTags(tag)}/>\n </Box>\n })}</Box>}\n\n <div className={classes.list}>\n <Grid container spacing={3}>\n {!loading && heartbeats.length === 0 ?\n <Grid item xs={12}>\n <Box width=\"100%\" display=\"flex\" justifyContent=\"center\" alignItems=\"center\"\n p={5}>\n <Typography variant=\"h4\">\n {t('activitiesList.empty')} \n </Typography>\n <SentimentSatisfiedIcon fontSize=\"large\"/>\n </Box>\n </Grid> : null}\n {_.map(heartbeats, (item, index) =>\n <SharedCompactItemLine\n key={index}\n item={item}\n setTags={setTags}\n />\n )}\n <Grid item xs={12}>\n {loading ? <LinearProgress style={{width: '100%'}}/> : null}\n </Grid>\n </Grid>\n </div>\n\n </Grid>\n\n <Hidden mdDown>\n <Grid item xs={3}>\n <TagsContext.Provider value={getTagsContextValue()}>\n <TagsCloud addTag={handleAddTags} deleteTag={handleDeleteTags} tags={tags}/>\n </TagsContext.Provider>\n <p> </p>\n </Grid>\n </Hidden>\n </Grid>\n </Container>\n </main>\n </div>\n}\n\n\nexport default HeartBeatsSharedFeed;\n","import React, { useEffect } from 'react';\nimport {Switch, Route, Redirect} from \"react-router-dom\";\nimport {GitHubCallback} from \"./github_callback\";\nimport {LandingPageComponent} from \"./component\";\nimport HeartBeatsSharedFeed from \"../public/shared\";\n\n\nexport const LandingPage = () => {\n\n useEffect(() => {\n document.title = 'ipsly.com';\n })\n\n let lang = \"en\";\n\n return (\n <Switch>\n <Route exact path=\"/github\">\n <GitHubCallback />\n </Route>\n <Route path=\"/\" exact>\n <Redirect to={`/${lang}`} />\n </Route>\n <Route path=\"/:lang([a-z]{2})\" exact>\n <LandingPageComponent />\n </Route>\n <Redirect to='/' />\n </Switch>\n )\n}\n\nexport default LandingPage;\n","import Grid from \"@material-ui/core/Grid\";\nimport {makeStyles, Switch} from \"@material-ui/core\";\nimport {useContext, useEffect, useRef, useState} from \"react\";\nimport i18n from \"i18next\";\nimport {storeLanguageLocally} from \"../../utils/profile\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport AuthContext from \"../../contexts/auth\";\n\nconst useStyles = makeStyles(() => ({\n root: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n }\n}));\n\nconst LanguageSwitcher = (props) => {\n\n const {en, ru} = props;\n const isFirstRun = useRef(true);\n const auth = useContext(AuthContext);\n const [lang, setLang] = useState(i18n.language);\n const classes = useStyles();\n\n const handleChange = (event) => {\n setLang(event.target.checked ? \"ru\" : \"en\");\n }\n\n const [{response: saveResponse}, saveLanguage] = useAxios({\n baseURL: `/api/auth/v1/users/${auth.user.id}`,\n method: 'PATCH',\n headers: getAxiosHeaders(),\n validateStatus: (status) => status >= 200 && status < 500,\n }, {\n manual: true,\n });\n\n useEffect( () => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n saveLanguage({data: {language: lang}});\n }, [lang, saveLanguage]);\n\n useEffect(() => {\n if (saveResponse && saveResponse.status === 200) {\n storeLanguageLocally(lang);\n i18n.changeLanguage(lang);\n }\n }, [saveResponse, lang]);\n\n\n\n return <Grid component=\"label\" container spacing={1} className={classes.root}>\n <Grid item>{en || \"EN\"}</Grid>\n <Grid item>\n <Switch checked={lang === \"ru\"} onChange={handleChange} />\n </Grid>\n <Grid item>{ru || \"RU\"}</Grid>\n </Grid>\n}\n\nexport default LanguageSwitcher;","import React, {useState} from 'react';\nimport {setSoul} from \"../../api/profile\";\nimport Button from \"@material-ui/core/Button\";\nimport {Backdrop, CircularProgress, makeStyles, useMediaQuery, useTheme} from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport {useTranslation} from \"react-i18next\";\nimport LanguageSwitcher from \"../common/language_switcher\";\nimport Typography from \"@material-ui/core/Typography\";\n\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n textAlign: 'center',\n },\n soul: {\n filter: \"drop-shadow(-1px 2px 3px rgba(0,0,0,.7))\",\n }\n}));\n\n\nexport const Soul = (props) => {\n\n const classes = useStyles();\n\n return <img src={`/souls/` + props.soul + `/` + props.state + `.png`}\n alt={props.soul + '.' + props.state}\n width={['dead', 'sad'].indexOf(props.state) > -1 ? props.width : \"auto\"}\n height={['dead', 'sad'].indexOf(props.state) > -1 ? \"auto\" : props.width}\n className={classes.soul}\n style={{opacity: props.disabled ? 0.5 : 1}}\n />;\n};\n\nexport const SoulSwitchWidget = (props) => {\n\n // const [current, setCurrent] = useState('blue_hoodie');\n const current = 'blue_hoodie';\n const [loading, setLoading] = useState(false);\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n const classes = useStyles();\n const { t } = useTranslation();\n\n const handleSubmit = () => {\n setLoading(true)\n setSoul(current).then((data) => {\n if (!data.error) {\n props.onUpdate();\n }\n })\n }\n\n if (loading) {\n return <Backdrop open={true}>\n <CircularProgress />\n </Backdrop>\n } else {\n\n return <Box className={classes.paper}>\n\n <Box mx={10}>\n <Soul soul='blue_hoodie' state='zen' width={200} />\n </Box>\n <Box mx={10} my={2}>\n <Typography variant={isMobile ? \"subtitle1\" : \"h4\"}>{t('signupFinish.welcome')}</Typography>\n </Box>\n <Box mx={10}>\n <Typography variant={isMobile ? \"subtitle1\" : \"h5\"}>{t('signupFinish.lang')}</Typography>\n </Box>\n <Box><LanguageSwitcher en=\"English\" ru=\"Русский\" /></Box>\n\n <Box m={2}>\n <Button variant=\"contained\" onClick={handleSubmit} color=\"primary\" size=\"large\">\n {t(\"signupFinish.submit\")}\n </Button>\n </Box>\n </Box>\n\n }\n}","import {createMuiTheme} from \"@material-ui/core\";\nimport { LightenDarkenColor } from 'lighten-darken-color';\nconst _ = require(\"lodash\");\n\nexport const TYPES_COLORS = {\n general: '#31b3c0',\n article: '#87d494',\n video: '#eb6372',\n podcast: '#392F5A',\n book: '#735642',\n talk: '#C879FF',\n course: '#204f9d',\n cheatsheet: '#52a75d',\n\n chapter: 'rgb(144, 144, 144)',\n conference: 'rgb(144, 144, 144)',\n lesson: 'rgb(144, 144, 144)',\n}\n\nexport const getTheme = () => {\n let overwrites = {\n typography: {\n \"fontFamily\": \" \\\"Comfortaa\\\", \\\"Roboto\\\", \\\"Helvetica\\\", \\\"Arial\\\", sans-serif\",\n },\n palette: {\n // type: (t) => TYPES_COLORS[t] || 'rgb(144, 144, 144)',\n // types: TYPES_COLORS,\n primary: {\n main: '#31B3C0',\n },\n secondary: {\n main: \"#FEBF2A\",\n },\n colorless: {\n main: \"#757575\",\n light: \"#bdbdbd\",\n dark: \"#4a4a4a\",\n },\n background: {\n // default: 'rgba(255, 248, 225, 0.53)'\n // paper: grey[100],\n }\n },\n types: {},\n };\n _.forEach(_.keys(TYPES_COLORS), (t) => {\n overwrites.types[`type-${t}`] = {\n backgroundColor: TYPES_COLORS[t],\n color: '#fff',\n }\n overwrites.types[`avatar-${t}-hover`] = {\n '&:hover': {\n backgroundColor: LightenDarkenColor(TYPES_COLORS[t], 30),\n color: '#fff',\n }\n }\n overwrites.types[`avatar-${t}`] = {\n backgroundColor: TYPES_COLORS[t],\n color: '#fff',\n '&:hover': {\n backgroundColor: LightenDarkenColor(TYPES_COLORS[t], 30),\n color: '#fff',\n }\n }\n });\n\n return createMuiTheme(overwrites);\n}","import Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport {\n Dialog, DialogActions,\n DialogContent,\n DialogTitle,\n Grow, InputAdornment, ListItemIcon,\n MenuItem,\n MenuList,\n Paper,\n Popper,\n TextField, Tooltip\n} from \"@material-ui/core\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport React, {useContext, useEffect, useState} from \"react\";\nimport {makeStyles} from \"@material-ui/core/styles\";\nimport LanguageSwitcher from \"./language_switcher\";\nimport {useTranslation} from \"react-i18next\";\nimport AuthContext from \"../../contexts/auth\";\nimport {useHistory} from \"react-router-dom\";\nimport Box from \"@material-ui/core/Box\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport Button from \"@material-ui/core/Button\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport FileCopyOutlinedIcon from \"@material-ui/icons/FileCopyOutlined\";\nimport {CopyToClipboard} from \"react-copy-to-clipboard\";\nimport {LightenDarkenColor} from \"lighten-darken-color\";\nimport {TYPES_COLORS} from \"../../theme\";\nimport ShareIcon from '@material-ui/icons/Share';\nimport CloudDownloadIcon from '@material-ui/icons/CloudDownload';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n transparentBar: {\n width: 'auto',\n position: 'absolute',\n backgroundColor: 'transparent',\n boxShadow: 'none',\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n popper: {\n zIndex: theme.zIndex.drawer + 2,\n },\n popperBox: {\n backgroundColor: theme.palette.background.default,\n },\n copyIcon: {\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.primary.main,\n },\n '&:active': {\n color: LightenDarkenColor(theme.palette.primary.main, 30),\n }\n }\n}))\n\nexport const TopMenu = () => {\n\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState();\n const [share, setShare] = useState(false);\n const { t } = useTranslation();\n const auth = useContext(AuthContext);\n const history = useHistory();\n\n const [{response: exportResponse, loading}, doExport] = useAxios({\n url: '/api/memory/v1/heartbeats/export',\n responseType: 'blob',\n headers: getAxiosHeaders(),\n }, {useCache: false, manual: true});\n\n const handleExport = () => {\n doExport();\n }\n\n const handleShare = () => {\n setShare(true);\n }\n\n const handleCloseShare = (event) => {\n setShare(false);\n }\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n }\n const handleClose = (event) => {\n setAnchorEl(null);\n }\n const handleLogout = () => {\n if (history) {\n history.push(\"/\");\n }\n auth.logout();\n }\n\n const [copied, setCopied] = useState(false);\n const copiedLeaveDelay = copied ? 1200 : 0;\n const copiedText = t(copied ? \"topMenu.shareDialog.copied\" : \"topMenu.shareDialog.copy\");\n const shareLink = `${window.location.origin}/shared/${auth.user.share_id}`;\n\n const handleLinkCopy = (text, result) => {\n setCopied(true);\n }\n\n useEffect(() => {\n if (!exportResponse || exportResponse.status !== 200) return\n let filename = \"\";\n const disposition = exportResponse.headers['content-disposition'];\n if (disposition && disposition.indexOf('attachment') !== -1) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n filename = matches[1].replace(/['\"]/g, '');\n }\n }\n const downloadUrl = window.URL.createObjectURL(new Blob([exportResponse.data]));\n const link = document.createElement('a');\n link.href = downloadUrl;\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n link.remove();\n }, [exportResponse])\n\n return <AppBar className={classes.transparentBar}>\n <Toolbar className={classes.toolbar}>\n <div onMouseLeave={handleClose}>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n className={classes.menuButton}\n onMouseEnter={handleClick}\n onClick={handleClick}\n >\n <SettingsIcon />\n </IconButton>\n\n <Popper\n open={!!anchorEl}\n anchorEl={anchorEl}\n className={classes.popper}\n role={undefined}\n\n placement=\"bottom-end\"\n transition\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{ transformOrigin: placement === 'bottom' ? 'center top ' : 'center bottom' }}\n >\n <Paper className={classes.popperBox}>\n <Box px={2} pt={1}><LanguageSwitcher /></Box>\n <MenuList>\n <MenuItem onClick={handleShare}>\n <ListItemIcon>\n <ShareIcon />\n </ListItemIcon>\n {t('topMenu.share')}\n </MenuItem>\n <MenuItem onClick={handleExport} disabled={loading}>\n <ListItemIcon>\n <CloudDownloadIcon />\n </ListItemIcon>\n {t('topMenu.export')}\n </MenuItem>\n <MenuItem onClick={handleLogout}>\n <ListItemIcon>\n <ExitToAppIcon />\n </ListItemIcon>\n {t('topMenu.logout')}\n </MenuItem>\n </MenuList>\n </Paper>\n </Grow>\n )}\n </Popper>\n </div>\n <Dialog open={share} onClose={handleCloseShare} fullWidth maxWidth=\"sm\">\n <DialogTitle id=\"form-dialog-title\">{t('topMenu.shareDialog.title')}</DialogTitle>\n <DialogContent>\n <TextField\n readOnly\n margin=\"dense\"\n value={shareLink}\n fullWidth\n InputProps={{\n endAdornment: <InputAdornment position=\"end\">\n <CopyToClipboard text={shareLink} onCopy={handleLinkCopy} className={classes.copyIcon}>\n <Tooltip title={copiedText} placement=\"right\" leaveDelay={copiedLeaveDelay}>\n <FileCopyOutlinedIcon fontSize=\"small\"/>\n </Tooltip>\n </CopyToClipboard>\n </InputAdornment>,\n }}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCloseShare} color=\"primary\">\n {t('topMenu.shareDialog.close')}\n </Button>\n </DialogActions>\n </Dialog>\n </Toolbar>\n </AppBar>\n}\n\nexport default TopMenu;","import clsx from \"clsx\";\nimport {\n ClickAwayListener,\n Grow,\n Hidden,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles, Paper,\n Popper,\n useMediaQuery,\n useTheme\n} from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Box from \"@material-ui/core/Box\";\nimport AuthContext from \"../../contexts/auth\";\nimport {Soul} from \"../profile/soul\";\nimport List from \"@material-ui/core/List\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport React, {useContext, useEffect} from \"react\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport Typography from \"@material-ui/core/Typography\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport TopMenu from \"./top_menu\";\nimport {BEATS} from \"../feed/beats\";\nimport {useTranslation} from \"react-i18next\";\nimport {Link, useLocation} from \"react-router-dom\";\nimport DynamicFeedIcon from '@material-ui/icons/DynamicFeed';\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport {getLanguageLocally} from \"../../utils/profile\";\n\nconst drawerWidth = 240;\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n hide: {\n display: 'none',\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n position: 'relative',\n },\n drawerPaper: {\n backgroundColor: theme.palette.grey[100],\n },\n drawerOpen: {\n width: drawerWidth,\n },\n drawerClose: {\n overflowX: 'hidden',\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(9) + 1,\n },\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n soul: {\n minHeight: '175px',\n marginBottom: theme.spacing(0),\n marginTop: theme.spacing(0),\n paddingTop: theme.spacing(1)\n },\n pointer: {\n cursor: 'pointer',\n },\n quote: {\n zIndex: theme.zIndex.drawer + 2,\n marginLeft: \"-64px\",\n marginTop: \"85px\"\n },\n quotePaper: {\n boxShadow: theme.shadows[10],\n borderRadius: theme.spacing(2),\n borderTopLeftRadius: \"0px\",\n maxWidth: \"50vw\",\n minWidth: \"100px\",\n },\n quoteTitle: {\n position: \"absolute\",\n right: \"10px\",\n margin: theme.spacing(0.5),\n }\n}));\n\n\nconst PJDrawer = (props) => {\n\n const theme = useTheme();\n const classes = useStyles();\n const $is_wide = useMediaQuery(theme.breakpoints.up('sm'));\n const [showMobile, setShowMobile] = React.useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [showQuote, setShowQuote] = React.useState(false);\n\n const handleDrawerOpen = () => {\n setShowMobile(true);\n };\n\n const handleDrawerClose = () => {\n setShowMobile(false);\n };\n\n const open = $is_wide || showMobile;\n\n const { t } = useTranslation();\n const auth = useContext(AuthContext);\n const location = useLocation();\n const language = getLanguageLocally();\n\n const [{data}, getTodayQuote] = useAxios({\n url: \"/api/muse/v1/quotes/today\",\n method: \"GET\",\n headers: getAxiosHeaders(),\n validateStatus: (status) => status >= 200 && status < 500,\n }, {manual: true, useCache: true})\n\n const handleSoulClick = (event) => {\n if ($is_wide) {\n setAnchorEl(event.currentTarget);\n getTodayQuote();\n }\n }\n\n useEffect(() => {\n if (data) {\n setShowQuote(true);\n }\n }, [data])\n\n\n return (\n <div>\n\n <TopMenu />\n\n <Hidden smUp>\n\n <AppBar\n position=\"absolute\"\n className={clsx(classes.appBar, {\n [classes.appBarShift]: open,\n })}\n >\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={handleDrawerOpen}\n edge=\"start\"\n className={clsx(classes.menuButton, {\n [classes.hide]: open,\n })}\n >\n <MenuIcon/>\n </IconButton>\n <Typography variant=\"h6\" noWrap>\n ipsly.com\n </Typography>\n </Toolbar>\n </AppBar>\n </Hidden>\n <Drawer\n variant={$is_wide ? \"permanent\" : \"temporary\"}\n open={open}\n className={clsx(classes.drawer, {\n [classes.drawerOpen]: open,\n [classes.drawerClose]: !open,\n })}\n classes={{\n paper: clsx(classes.drawerPaper, {\n [classes.drawerOpen]: open,\n [classes.drawerClose]: !open,\n }),\n }}\n >\n <Hidden smUp>\n <div className={classes.toolbar}>\n <IconButton onClick={handleDrawerClose}>\n {theme.direction === 'rtl' ? <ChevronRightIcon/> : <ChevronLeftIcon/>}\n </IconButton>\n </div>\n <Divider/>\n </Hidden>\n\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" my={5} className={classes.soul}>\n <Box onClick={handleSoulClick} className={classes.pointer}>\n <Soul soul='blue_hoodie' state={auth.user.soul.state.key} width={200}/>\n </Box>\n </Box>\n <Divider/>\n\n <List>\n <ListItem selected={location.pathname.indexOf(\"/feed\") === 0} button to=\"/feed\" component={Link}>\n <ListItemIcon><DynamicFeedIcon /></ListItemIcon>\n <ListItemText primary={t(\"drawer.menu.feed\")} />\n </ListItem>\n \n <ListItem button selected={location.pathname.indexOf(\"/cheatsheets\") === 0} to=\"/cheatsheets\" component={Link}>\n <ListItemIcon>{BEATS.cheatsheet.icon()}</ListItemIcon>\n <ListItemText primary={t(\"drawer.menu.cheatsheets\")} />\n </ListItem>\n\n {/*<ListItem button to=\"/tags\" component={Link}>*/}\n {/* <ListItemIcon><LocalOfferIcon /></ListItemIcon>*/}\n {/* <ListItemText primary={t(\"drawer.menu.tags\")} />*/}\n {/*</ListItem>*/}\n </List>\n\n </Drawer>\n <Popper open={showQuote} anchorEl={anchorEl} className={classes.quote} placement=\"right-start\" transition>\n {({ TransitionProps }) => (\n <ClickAwayListener onClickAway={() => setShowQuote(false)}>\n <Grow {...TransitionProps} style={{ transformOrigin: '0 0 0' }} timeout={350}>\n <Paper className={classes.quotePaper} variant=\"outlined\">\n <h6 className={classes.quoteTitle}>{t(\"drawer.quote\")}</h6>\n <Box p={1} pt={3} textAlign=\"right\">\n <Typography variant=\"subtitle1\" align=\"left\">{data && language === \"en\" ? data.text_en : data.text_ru }</Typography>\n <Typography variant=\"caption\">© {data && language === \"en\" ? data.author_en : data.author_ru}</Typography>\n </Box>\n </Paper>\n </Grow>\n </ClickAwayListener>\n )}\n </Popper>\n </div>)\n}\n\nexport default PJDrawer;\n","import {Card, CardContent, CardHeader} from \"@material-ui/core\";\nimport React from \"react\";\nimport {useTranslation} from \"react-i18next\";\n\n\nconst CompetenciesCloud = () => {\n\n const { t } = useTranslation();\n\n return <Card variant=\"outlined\">\n <CardHeader\n title={t(\"competenciesCloud.title\")}\n subheader={t(\"competenciesCloud.upcoming\")}\n />\n <CardContent>\n {t(\"competenciesCloud.caption\")}\n {/*<Box display=\"flex\" flexWrap=\"wrap\"></Box>*/}\n </CardContent>\n </Card>\n}\n\nexport default CompetenciesCloud;","export const urlsForType = {\n 'cheatsheet': 'cheatsheets',\n};","\nexport const isValidHttpUrl = (string) => {\n let url;\n\n try {\n url = new URL(string);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n\n","\nconst moment = require(\"moment\");\n\nexport const humanizeMinutes = (seconds) => {\n const duration = moment.duration(parseInt(seconds)*60*1000);\n let result = \"\";\n let days = Math.floor(duration.asDays());\n let hours = Math.floor(duration.hours());\n let minutes = Math.floor(duration.minutes());\n\n if (days > 0) {\n result += `${days}d`\n }\n if (hours > 0) {\n result += `${hours}h`\n }\n if (minutes > 0) {\n result += `${minutes}m`\n }\n return result\n}","import {useTranslation} from \"react-i18next\";\nimport { LinearProgress, TextField} from \"@material-ui/core\";\nimport React, {useEffect} from \"react\";\nimport useDebounce from \"../../utils/debounce\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport {isValidHttpUrl} from \"../../utils/validators\";\nimport Box from \"@material-ui/core/Box\";\nimport {humanizeMinutes} from \"../../utils/duration\";\n\nconst _ = require(\"lodash\");\n\nconst LinkField = (props) => {\n\n const {\n setTitle,\n setTimeSpent,\n setType,\n autoFocus,\n link,\n setLink,\n required,\n errors,\n setErrors\n } = props;\n\n // const [ogTags, setOgTags] = useState();\n\n const debouncedLink = useDebounce(link);\n const { t } = useTranslation();\n\n const handleChange = (event) => {\n const url = event.target.value;\n if (!url && required) {\n setErrors(_.extend({link: \"required\"}, errors));\n } else if (url && !isValidHttpUrl(url)) {\n setErrors(_.extend({link: \"invalid\"}, errors));\n } else {\n setErrors(_.omit(errors, ['link']))\n }\n setLink(url);\n }\n\n const [{data, loading}, fetch] = useAxios({\n url: '/api/snuffer/v1/og-tags',\n headers: getAxiosHeaders(),\n }, { manual: true })\n\n useEffect(\n () => {\n if (debouncedLink && isValidHttpUrl(debouncedLink)) {\n fetch({\n params: {\n url: debouncedLink\n }})\n } else {\n // setOgTags(null);\n }\n },\n [debouncedLink, fetch]\n );\n\n useEffect(() => {\n if (!_.isEmpty(data)) {\n // setOgTags(data);\n if (setTitle !== undefined && data.title) {\n setTitle((title) => !title ? data.title : title)\n }\n if (setTimeSpent !== undefined && data.duration) {\n setTimeSpent((duration) => !duration ? humanizeMinutes(data.duration) : duration)\n }\n if (setType !== undefined && data.type) {\n setType((type) => !type || type === \"general\" ? data.type : type)\n }\n }\n }, [data, setTitle, setTimeSpent]);\n\n return (\n <React.Fragment>\n <TextField\n id=\"link\"\n variant=\"outlined\"\n size=\"small\"\n style={{width: \"50%\"}}\n autoFocus={autoFocus}\n label={t(\"activityForm.fields.link\")}\n value={link}\n error={_.has(errors, 'link')}\n required={required}\n onChange={handleChange}\n />\n <Box position=\"relative\" width=\"100%\">\n {loading ? <LinearProgress style={{\n position:'absolute',\n width: '100%',\n height: '2px',\n top: '-2px'\n }} /> : null}\n </Box>\n {/*{ogTags ? <ItemLinkCard {...ogTags} /> : null}*/}\n </React.Fragment>\n )\n}\n\nexport default LinkField;","import {Mention, MentionsInput} from \"react-mentions\";\nimport React from \"react\";\nimport {makeStyles} from \"@material-ui/core/styles\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport Box from \"@material-ui/core/Box\";\nimport {BEATS} from \"../feed/beats\";\n\nconst axios = require('axios');\n\nconst styled = {\n width: '100%',\n '&multiLine': {\n highlighter: {\n padding: 16,\n border: '0',\n lineHeight: '1.5',\n },\n suggestions: {\n height: 'auto',\n top: '25px',\n maxWidth: 'calc(100% - 16px)',\n marginLeft: '8px',\n zIndex: 1301\n },\n input: {\n width: '100%',\n padding: 16,\n border: '0',\n lineHeight: '1.5',\n },\n outline: 'none'\n },\n}\n\nconst useStyles = makeStyles((theme) => ({\n textarea: {\n '&__input:focus': {\n outline: 'none'\n },\n '&__suggestions': {\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[6],\n borderSize: '1px',\n borderColor: theme.palette.grey[200],\n }\n },\n mention: {\n backgroundColor: theme.palette.primary.light,\n }\n}));\n\nconst requestActivities = (query, callback) => {\n if (!query) return\n axios.get('/api/memory/v1/autocomplete', {\n params: {title: query},\n headers: getAxiosHeaders()\n }).then(response => response.data)\n // Transform the users to what react-mentions expects\n .then(res =>\n // res.items.map(item => ({ display: item.title, id: new URL(`/activity/${item.id}`, document.baseURI).href}))\n res.items.map(item => {\n item.display = item.title;\n return item\n })\n )\n .then(callback)\n}\n\nconst renderActivitySuggestions = (entry, search, highlightedDisplay, index, focused) => {\n return <Box component=\"span\" display=\"inline-flex\" m={1}>\n <Box>{BEATS[entry.type].icon({fontSize: \"small\"})}</Box>\n <Box pl={2}>{entry.title}</Box>\n </Box>\n}\n\nconst MentionField = ({value, label, onChange, placeholder}) => {\n\n const classes = useStyles();\n\n return <MentionsInput\n value={value}\n label={label}\n onChange={onChange}\n style={styled}\n placeholder={placeholder}\n className={classes.textarea}\n >\n <Mention\n displayTransform={(id, display) => display || id}\n markup=\"@{__display__}[__id__]\"\n trigger=\"@\"\n className={classes.mention}\n appendSpaceOnAdd={true}\n data={requestActivities}\n renderSuggestion={renderActivitySuggestions}\n />\n </MentionsInput>\n}\n\nexport default MentionField;","import {Tooltip} from \"@material-ui/core\";\nimport React, {useState} from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Paper from \"@material-ui/core/Paper\";\nimport {grey} from \"@material-ui/core/colors\";\nimport {ToggleButton, ToggleButtonGroup} from \"@material-ui/lab\";\nimport {useTranslation} from 'react-i18next';\nimport {RenderedMarkdown} from \"./render\";\nimport MentionField from \"./mentions\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport Box from \"@material-ui/core/Box\";\n\nconst useStyles = makeStyles( (theme) => ({\n mdPreview: {\n padding: theme.spacing(2),\n backgroundColor: grey[100],\n height: \"100%\",\n border: 0\n },\n previewToggle: {\n position: \"absolute\",\n right: 1,\n top: 1,\n width: \"auto\",\n height: \"auto !important\",\n zIndex: theme.zIndex.modal + 1,\n backgroundColor: theme.palette.common.white,\n '& button': {\n borderRadius: 0,\n borderBottomLeftRadius: \"3px\",\n borderTop: 0,\n borderRight: 0,\n padding: theme.spacing(0.5)\n },\n '& button:last-child': {\n borderLeft: 0,\n }\n },\n}));\n\n\nconst MarkdownField = (props) => {\n\n const {text, onChange, label, placeholder} = props;\n const [preview, setPreview] = useState(false);\n const classes = useStyles();\n\n const { t } = useTranslation();\n\n const handlePreviewToggle = (event, newValue) => {\n setPreview(!!newValue);\n }\n\n return (<React.Fragment>\n\n <Box hidden={preview} width=\"100%\">\n <MentionField\n fullWidth\n variant=\"outlined\"\n label={label}\n value={text}\n placeholder={placeholder}\n onChange={onChange}/>\n </Box>\n <Box hidden={!preview} width=\"100%\">\n <Paper variant=\"outlined\" square className={classes.mdPreview}>\n <RenderedMarkdown text={text} />\n </Paper>\n </Box>\n\n <ToggleButtonGroup value={preview}\n exclusive\n size=\"small\"\n onChange={handlePreviewToggle}\n className={classes.previewToggle}\n aria-label=\"text formatting\">\n <ToggleButton value={false} >\n <Tooltip title={t('activityForm.fields.editMarkdown')} placement=\"top\">\n <EditIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n\n <ToggleButton value={true} >\n <Tooltip title={t('activityForm.fields.previewMarkdown')} placement=\"top\">\n <VisibilityIcon fontSize=\"small\" />\n </Tooltip>\n </ToggleButton>\n </ToggleButtonGroup>\n </React.Fragment>)\n}\n\nexport default MarkdownField;","import {\n Checkbox,\n Chip,\n FormControl,\n FormControlLabel,\n InputLabel,\n OutlinedInput,\n TextField, Tooltip,\n} from \"@material-ui/core\";\nimport {makeStyles} from '@material-ui/core/styles';\n\nimport {useTranslation} from 'react-i18next';\nimport LinkField from \"../link/link_field\";\nimport React, {useEffect, useRef, useState} from \"react\";\n\nimport MarkdownField from \"../markdown/markdown_field\";\nimport Button from \"@material-ui/core/Button\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport {useSnackbar} from \"notistack\";\nimport {Autocomplete, Rating, ToggleButton, ToggleButtonGroup} from \"@material-ui/lab\";\nimport MomentUtils from '@date-io/moment';\n\nimport {MuiPickersUtilsProvider, DatePicker} from \"@material-ui/pickers\";\nimport SaveIcon from '@material-ui/icons/Save';\nimport Box from \"@material-ui/core/Box\";\nimport {BEATS} from \"../feed/beats\";\nimport clsx from \"clsx\";\nimport {TYPES_COLORS} from \"../../theme\";\nimport {humanizeMinutes} from \"../../utils/duration\";\nimport parse from \"parse-duration\"\nimport Typography from \"@material-ui/core/Typography\";\nimport {Label} from \"@material-ui/icons\";\n\nconst moment = require(\"moment-timezone\");\nconst _ = require(\"lodash\");\n\nconst DURATION_REGEX = /^((\\d+.)?\\d+(d|д))?((\\d+.)?\\d+(h|ч))?((\\d+.)?\\d+(m|м))?$/\n\nconst useStyles = makeStyles((theme) => {\n\n const styles = {\n doneState: {\n width: '100%',\n },\n markdownField: {\n '& div': {\n height: '100%',\n }\n },\n helperText: {\n color: theme.palette.grey[900],\n },\n button: {\n color: theme.palette.common.white\n },\n typeToggleButton: {\n borderTop: 0,\n \"&:last-child\": {\n borderTopRightRadius: 0,\n },\n \"&:first-child\": {\n borderTopLeftRadius: 0,\n }\n },\n typeTab: {\n padding: theme.spacing(0.5),\n alignItems: \"center\",\n textAlign: \"center\",\n borderTopLeftRadius: \"8px\",\n borderTopRightRadius: \"8px\",\n marginRight: \"1px\",\n backgroundColor: theme.palette.background.paper,\n border: \"1px solid rgba(0, 0, 0, 0.12)\",\n borderBottom: 0,\n height: \"30px\",\n cursor: \"pointer\",\n \"&:last-child\": {\n borderRight: \"1px solid rgba(0, 0, 0, 0.12)\",\n marginRight: \"0px\",\n },\n \"&:first-child\": {\n borderLeft: \"1px solid rgba(0, 0, 0, 0.12)\",\n }\n },\n }\n\n _.forEach(_.keys(TYPES_COLORS), (t) => {\n styles[`type-${t}-hover`] = {\n \"&:hover\": {\n backgroundColor: TYPES_COLORS[t],\n color: '#fff',\n }\n }\n styles[`type-${t}-active`] = {\n backgroundColor: TYPES_COLORS[t],\n color: '#fff',\n }\n });\n\n return styles;\n});\n\nconst HeartBeatForm = (props) => {\n\n const {\n item,\n linkRequired,\n alwaysDone,\n fixedType,\n linkField,\n type,\n setType,\n endpoint,\n alwaysAuthor,\n handleClose,\n update,\n insert,\n } = props;\n\n const classes = useStyles();\n\n const getValue = (obj, key, default_) => {\n return obj ? obj[key] ? obj[key] : default_ : default_\n }\n\n const [done, setDone] = useState(getValue(item, 'done_at') || !!alwaysDone);\n const [title, setTitle] = useState(getValue(item, 'title', ''));\n const doneAtDefault = alwaysDone ? moment.tz(moment(), moment.tz.guess()).format() : '';\n let doneAtValue = getValue(item, 'done_at');\n if (doneAtValue) {\n doneAtValue = moment.tz(moment(doneAtValue), moment.tz.guess()).format();\n }\n const [doneAt, setDoneAt] = useState(doneAtValue || doneAtDefault);\n\n let timeSpentValue = humanizeMinutes(getValue(item, 'time_spent', 0));\n\n const [timeSpent, setTimeSpent] = useState(timeSpentValue);\n const [link, setLink] = useState(getValue(item, 'link', ''));\n const [insight, setInsight] = useState(getValue(item, 'insight', ''));\n const [isAuthor, setIsAuthor] = useState(getValue(item, 'is_author', !!alwaysAuthor));\n const [tags, setTags] = useState(getValue(item, 'tags', []));\n const [rating, setRating] = useState(getValue(item, 'rating', null));\n const [tagsValue, setTagsValue] = useState(\"\");\n const [errors, setErrors] = useState({});\n\n const {enqueueSnackbar} = useSnackbar();\n const {t} = useTranslation();\n\n const [{data: result, loading: saving, response}, doSave] = useAxios({\n baseURL: `/api/heartbeat/v1/${endpoint || 'heartbeats'}`,\n headers: getAxiosHeaders(),\n validateStatus: (status) => status >= 200 && status < 500,\n }, {\n manual: true,\n })\n\n const [{data: tagsOptions, loading: tagsLoading}] = useAxios({\n baseURL: `/api/memory/v1/heartbeats/tags`,\n headers: getAxiosHeaders(),\n validateStatus: (status) => status >= 200 && status < 500,\n }, {useCache: false})\n\n\n useEffect(() => {\n if (response && response.status < 300) {\n enqueueSnackbar(\n t(\"activityForm.snack.saved\"), {\n variant: 'success'\n });\n if (item) {\n update(_.assign({}, item, getUpdateItemData()));\n } else {\n insert(_.assign(result, {type: type}, getUpdateItemData()));\n }\n\n handleClose();\n } // eslint-disable-next-line\n }, [result, response, enqueueSnackbar, handleClose, update, insert]);\n\n const handleChangeDone = (event) => {\n let doneAtValue;\n setDone(event.target.checked);\n if (!event.target.checked) {\n doneAtValue = '';\n } else {\n doneAtValue = moment.tz(moment(), moment.tz.guess()).format();\n }\n setDoneAt(doneAtValue);\n }\n\n const handleChangeDoneAt = (value) => {\n setDoneAt(value);\n }\n\n useEffect(() => {\n if (!title) {\n setErrors((errorsState) => _.extend({title: \"required\"}, errorsState));\n } else {\n setErrors((errorsState) => _.omit(errorsState, ['title']))\n }\n }, [title])\n\n useEffect(() => {\n if (!DURATION_REGEX.test(timeSpent)) {\n setErrors((errorsState) => _.extend({timeSpent: \"Wrong format\"}, errorsState));\n } else {\n setErrors((errorsState) => _.omit(errorsState, ['timeSpent']))\n }\n }, [timeSpent])\n\n const handleChangeTitle = (event) => {\n setTitle(event.target.value);\n }\n const handleChangeTimeSpent = (event) => {\n setTimeSpent(event.target.value);\n }\n\n const changedKeys = (oldObj, newObj, keys) => {\n let result = {};\n _.forEach(keys, (key) => {\n if (oldObj[key] !== newObj[key]) {\n result[key] = newObj[key];\n }\n });\n return result;\n }\n\n const handleChangeIsAuthor = (event) => {\n setIsAuthor(event.target.checked);\n }\n\n const handleInsightChange = (event) => {\n setInsight(event.target.value);\n }\n\n const getUpdateItemData = () => {\n return {\n title: title,\n link: link,\n type: type,\n rating: rating,\n done_at: doneAt ? doneAt : null,\n time_spent: Math.ceil(parse(timeSpent.replace(\"д\", \"d\").replace(\"ч\", \"h\").replace(\"м\", \"m\"), 'min')),\n is_author: isAuthor ? isAuthor : false,\n insight: insight,\n format: \"markdown\",\n tags: tags,\n };\n }\n\n const handleSaveClick = () => {\n let method = 'POST';\n let url = '';\n let heartbeat = getUpdateItemData();\n if (item) {\n method = 'PATCH';\n heartbeat = changedKeys(item, heartbeat, _.keys(heartbeat));\n url = `/${item.id}`;\n }\n if (_.isEmpty(errors)) {\n doSave({\n url: url,\n method: method,\n data: heartbeat,\n });\n }\n }\n\n const keydownHandler = (event) => {\n if (event.keyCode === 13 && (event.ctrlKey || event.metaKey)) {\n document.getElementById(\"submit\").click();\n }\n }\n\n useEffect(() => {\n document.addEventListener('keydown', keydownHandler);\n return () => document.removeEventListener('keydown', keydownHandler);\n }, []);\n\n return (<React.Fragment>\n\n {!fixedType && <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" width=\"100%\">\n <ToggleButtonGroup\n value={type}\n exclusive\n onChange={(_, val) => setType(val || \"general\")}\n >\n {_.map(_.values(BEATS), ({key, title, icon, enabled, filter}) =>\n enabled && filter && <Tooltip title={t(title)} key={key} placement=\"top\">\n <ToggleButton value={key} className={clsx(classes.typeToggleButton, {\n [classes[`type-${key}-hover`]]: key,\n [classes[`type-${key}-active`]]: key === type,\n })}>\n {icon({fontSize: \"small\"})}\n </ToggleButton></Tooltip>\n )}\n </ToggleButtonGroup>\n </Box>}\n\n <Box display=\"flex\" p={2} pt={fixedType ? 6 : 3} flexDirection=\"column\" alignItems=\"center\"\n height={fixedType ? \"100%\" : \"calc(100% - 44px)\"}\n style={{overflowY: 'auto',}}>\n <Box width=\"100%\" pb={2}>\n <TextField\n variant=\"outlined\"\n required\n fullWidth={!linkField}\n style={linkField ? {width: \"50%\", paddingRight: '8px'} : {}}\n size=\"small\"\n error={_.has(errors, 'title')}\n autoFocus={!linkRequired}\n label={t(\"activityForm.fields.title\")}\n value={title}\n onChange={handleChangeTitle}\n />\n {linkField && <LinkField\n item={item}\n title={title}\n setTitle={setTitle}\n timeSpent={timeSpent}\n setTimeSpent={setTimeSpent}\n type={type}\n setType={setType}\n errors={errors}\n setErrors={setErrors}\n autoFocus={linkRequired}\n link={link}\n setLink={setLink}\n required={linkRequired}\n />}\n </Box>\n\n <Box width=\"100%\" pb={2}>\n <Autocomplete\n multiple\n freeSolo\n size=\"small\"\n options={tagsOptions ? _.keys(tagsOptions.tags) : []}\n // options={_.mapValues(_.invert(_.invert(tagsOptions.tags)), parseInt)}\n getOptionSelected={(option, value) => option.name === value}\n getOptionLabel={(option) => option}\n loading={tagsLoading}\n value={tags}\n inputValue={tagsValue}\n onBlur={(event) => {\n const options = tagsValue.split(/[\\s,]+/);\n\n if (options.length > 0) {\n setTags(\n tags\n .concat(options)\n .map(x => x.trim())\n .filter(x => x)\n );\n }\n }}\n onChange={(_, value) => setTags(value)}\n onInputChange={(event, newInputValue) => {\n const options = newInputValue.split(/[\\s,]+/);\n\n if (options.length > 1) {\n setTags(\n tags\n .concat(options)\n .map(x => x.trim())\n .filter(x => x)\n );\n } else {\n setTagsValue(newInputValue);\n }\n }}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip size=\"small\" label={option} {...getTagProps({index})}/>\n ))\n }\n renderInput={(params) => (\n <TextField\n {...params}\n fullWidth\n variant=\"outlined\"\n error={_.has(errors, 'tags')}\n label={t(\"activityForm.fields.tags\")}\n />\n )}\n />\n </Box>\n\n <Box width=\"100%\" flexGrow={1} flexShrink={0} pb={2} className={classes.markdownField}>\n <FormControl variant=\"outlined\" fullWidth>\n <InputLabel htmlFor=\"insightInput\" shrink={true}>{t(\"activityForm.fields.insight\")}</InputLabel>\n <OutlinedInput\n id=\"insightInput\"\n label={t(\"activityForm.fields.insight\")}\n placeholder={t(\"activityForm.fields.insightHelper\")}\n notched\n inputProps={{\n text: insight,\n onChange: handleInsightChange,\n label: t(\"activityForm.fields.insight\"),\n error: _.has(errors, 'insight')\n }}\n inputComponent={MarkdownField}\n />\n {/*<Typography className={classes.helperText}>{t(\"activityForm.fields.insightHelper\")}</Typography>*/}\n </FormControl>\n </Box>\n\n {alwaysDone ? null : <React.Fragment>\n <Box pb={2} width=\"100%\" display=\"flex\">\n {item && item.done_at ? null :\n <FormControlLabel\n value=\"start\"\n control={<Checkbox\n checked={done}\n onChange={handleChangeDone}\n name=\"done\"\n />}\n label={t(\"activityForm.fields.isDone\")}\n style={{width: \"50%\"}}\n labelPlacement=\"end\"\n />}\n {done && <Box width=\"50%\" pl={1}>\n <InputLabel htmlFor=\"insightInput\" shrink={true}>{t(\"activityForm.fields.rating\")}</InputLabel>\n <Rating\n value={rating}\n onChange={(event, newValue) => {\n setRating(newValue);\n }}\n />\n </Box>}\n\n </Box>\n { done && <Box pb={2} width=\"100%\" display=\"flex\">\n\n <MuiPickersUtilsProvider utils={MomentUtils} >\n <DatePicker\n disableToolbar\n disableFuture\n style={{width: \"50%\", paddingRight: '8px'}}\n autoOk\n format=\"LL\"\n disabled={!done}\n variant=\"inline\"\n inputVariant=\"outlined\"\n size=\"small\"\n label={item && item.done_at ? t(\"activityForm.fields.doneAt\") : null}\n error={_.has(errors, /**/'done_at')}\n // InputLabelProps={{ shrink: true }}\n value={doneAt || null}\n onChange={handleChangeDoneAt}\n />\n\n <TextField\n variant=\"outlined\"\n size=\"small\"\n style={{width: \"50%\"}}\n InputLabelProps={{ shrink: true }}\n error={_.has(errors, 'timeSpent')}\n label={t(\"activityForm.fields.timeSpent\")}\n placeholder={t(\"activityForm.fields.timeSpentHelper\")}\n value={timeSpent}\n onChange={handleChangeTimeSpent}\n />\n\n </MuiPickersUtilsProvider>\n\n </Box>}\n </React.Fragment>}\n\n {!alwaysAuthor &&\n <Box pb={2} width=\"100%\">\n <FormControlLabel\n control={<Checkbox\n checked={isAuthor}\n onChange={handleChangeIsAuthor}\n />}\n label={t(\"activityForm.fields.isAuthor\")}\n labelPlacement=\"end\"\n />\n </Box>}\n\n <Box width=\"100%\" pb={2}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={saving}\n fullWidth\n className={classes.button}\n startIcon={<SaveIcon/>}\n onClick={handleSaveClick}\n id=\"submit\"\n >\n {t(\"activityForm.save\")}\n </Button>\n </Box>\n </Box>\n </React.Fragment>)\n}\n\nexport default HeartBeatForm;","import {makeStyles, Modal, Paper, Tooltip} from \"@material-ui/core\";\nimport React, {useState} from \"react\";\nimport Box from \"@material-ui/core/Box\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport HeartBeatForm from \"../forms/base\";\nimport {TYPES_COLORS} from \"../../theme\";\n\n\nconst useStyles = makeStyles((theme) => ({\n formPaper: {\n position: 'absolute',\n width: '35%',\n backgroundColor: theme.palette.background.paper,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n height: '90vh',\n maxHeight: '90vh',\n },\n height: '80vh',\n maxHeight: '80vh',\n outline: 'none',\n transition: 'border-color 0.3s ease-out'\n },\n formContent: {\n padding: theme.spacing(2),\n height: '100%',\n }\n}));\n\n\nconst ActivityForm = (props) => {\n const {\n initialType,\n Form,\n open,\n handleClose,\n } = props;\n\n const classes = useStyles();\n\n const [type, setType] = useState(initialType || \"\");\n\n return (\n <Modal\n open={open}\n onClose={handleClose}\n disableBackdropClick={true}\n aria-labelledby=\"simple-modal-title\"\n aria-describedby=\"simple-modal-description\"\n >\n <Paper className={classes.formPaper} variant=\"outlined\" style={{\n borderRadius: \"4px\",\n border: '0',\n outline: 0,\n borderLeft: `8px solid ${type ? TYPES_COLORS[type] : 'rgba(0, 0, 0, 0.12)'}`\n }}>\n <Box position=\"relative\">\n <Box position=\"absolute\" right=\"0px\">\n <Tooltip title=\"close\" placement=\"left\">\n <IconButton aria-label=\"Close\" onClick={handleClose}>\n <CloseIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Box>\n\n { Form ? <Form {...props}/> : <HeartBeatForm type={type} setType={setType} linkField={true} {...props} />}\n </Paper>\n </Modal>\n )\n}\n\nexport default ActivityForm;","import {ButtonGroup, makeStyles, Tooltip} from \"@material-ui/core\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport LanguageIcon from '@material-ui/icons/Language';\nimport React from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport Button from \"@material-ui/core/Button\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'row-reverse'\n },\n\n },\n noBorder: {\n border: '0 !important',\n },\n colorless: {\n color: theme.palette.colorless.main,\n }\n}));\n\nexport const ItemCardControls = (props) => {\n\n const { item, edit, remove} = props;\n const { t } = useTranslation();\n const classes = useStyles();\n\n return <ButtonGroup variant=\"text\" color=\"primary\" className={classes.root}>\n\n {item.link ?\n\n <Tooltip title={t(\"itemCard.open\")} placement=\"top\" >\n <Button target=\"_blank\" href={item.link} aria-label={t(\"itemCard.open\")} className={clsx(classes.noBorder, classes.colorless)}>\n <LanguageIcon fontSize=\"small\"/>\n </Button>\n </Tooltip>\n\n : null}\n\n <Tooltip title={t(\"itemCard.edit\")} placement=\"top\" >\n <Button aria-label={t(\"itemCard.edit\")} onClick={edit} className={clsx(classes.noBorder, classes.colorless)}>\n <EditIcon fontSize=\"small\"/>\n </Button>\n </Tooltip>\n\n <Tooltip title={t(\"itemCard.remove\")} placement=\"top\">\n <Button aria-label={t(\"itemCard.remove\")} onClick={remove} className={clsx(classes.noBorder, classes.colorless)}>\n <DeleteIcon fontSize=\"small\"/>\n </Button>\n </Tooltip>\n\n </ButtonGroup>\n}","import HeartBeatForm from \"./base\";\n\n\nexport const LinkedBeatForm = (props) => {\n return (<HeartBeatForm linkField={true} linkRequired={true} {...props}/>)\n};\n\nexport const OptionalLinkedBeatForm = (props) => {\n return (<HeartBeatForm linkField={true} {...props}/>)\n};\n\nexport const BookBeatForm = (props) => {\n return (<HeartBeatForm linkField={true} authorField={true} {...props}/>)\n};\n\nexport const CheatsheetBeatForm = (props) => {\n return (<HeartBeatForm fixedType={true} type=\"cheatsheet\" endpoint=\"cheatsheets\" linkField={false} alwaysDone={true} alwaysAuthor={true}{...props}/>)\n};\n","import React, {useEffect, useState} from \"react\";\nimport {useTranslation} from \"react-i18next\";\nimport {getLanguageLocally} from \"../../utils/profile\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport {CopyToClipboard} from \"react-copy-to-clipboard\";\nimport {\n ClickAwayListener,\n Collapse,\n Dialog, DialogActions,\n DialogContent,\n DialogTitle, Grow,\n makeStyles,\n Paper, Popper,\n Tooltip, useMediaQuery, useTheme\n} from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport {BEATS} from \"../feed/beats\";\nimport Typography from \"@material-ui/core/Typography\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport {urlsForType} from \"../../utils/url\";\nimport ActivityForm from \"../feed/forms\";\nimport Button from \"@material-ui/core/Button\";\nimport {ItemCardControls} from \"./card_controls\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\nimport clsx from \"clsx\";\nimport {RenderedMarkdown, RenderedText} from \"../markdown/render\";\nimport Link from \"@material-ui/core/Link\";\nimport LinkIcon from \"@material-ui/icons/Link\";\nimport {CheatsheetBeatForm} from \"../forms/types\";\nimport {Rating} from \"@material-ui/lab\";\nconst moment = require(\"moment-timezone\");\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n content: {\n minHeight: theme.spacing(8),\n height: '100%',\n width: '100%',\n },\n wrapper: {\n width: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n '&:hover': {\n backgroundColor: theme.palette.background.default\n },\n },\n small: {\n width: theme.spacing(3.5),\n height: theme.spacing(3.5),\n },\n type: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: theme.spacing(1),\n },\n itemData: {\n display: 'flex',\n width: '100%',\n height: '64px',\n // justifyContent: 'space-between',\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n height: 'auto'\n }\n },\n typeIcon: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n },\n mobileInsight: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(1),\n width: theme.spacing(4),\n color: theme.palette.primary.light\n },\n image: {\n marginLeft: theme.spacing(1.5),\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100%',\n minHeight: '64px',\n minWidth: '100px',\n maxWidth: '100px',\n },\n wideImage: {\n marginLeft: 0,\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n height: '100px',\n minHeight: '100px',\n minWidth: '100%',\n maxWidth: '100%',\n },\n markdown: {\n width: '100%',\n overflowX: 'auto',\n },\n text: {\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(1.5),\n width: 'calc(100% - 26px)',\n flexBasis: 'calc(100% - 26px)'\n // maxWidth: '100%',\n },\n mobileText: {\n paddingLeft: theme.spacing(0.5),\n // whiteSpace: 'normal'\n },\n imagedText: {\n width: 'calc(100% - 136px)',\n flexBasis: 'calc(100% - 136px)'\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n [theme.breakpoints.down(\"sm\")]: {\n whiteSpace: 'normal',\n ordBreak: 'break-all',\n }\n },\n pointer: {\n cursor: 'pointer',\n },\n date: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center'\n },\n noBorder: {\n border: '0 !important',\n },\n controls: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n tagLink: {\n marginRight: theme.spacing(2),\n },\n ...theme.types\n}));\n\nexport const CompactItemLine = (props) => {\n\n const classes = useStyles();\n const {item, forceCard, insert, update, remove, setTags, hideRating} = props;\n const [card, setCard] = useState(forceCard);\n const [copied, setCopied] = useState(false);\n const copiedLeaveDelay = copied ? 1200 : 0;\n const activityLink = new URL(`/activity/${item.id}`, document.baseURI).href;\n\n const [form, setForm] = useState(false);\n const [confirmRemove, setConfirmRemove] = useState(false);\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n\n const {t} = useTranslation();\n // Required to re-render dates on language change\n moment.locale(getLanguageLocally());\n const copiedText = t(copied ? \"itemLine.copied\" : \"itemLine.copy\");\n\n const toggleCard = () => {\n // if (forceCard) return;\n setCard(!card);\n }\n const handleLinkCopy = (text, result) => {\n setCopied(true);\n }\n useEffect(() => {\n if (copied) {\n setTimeout(() => setCopied(false), 2000)\n }\n }, [copied])\n\n const dateOrPeriod = (date) => {\n const dateObj = moment(date);\n if (moment().diff(dateObj, 'seconds') > 24*60*60) {\n return dateObj.format('LLL')\n }\n return dateObj.fromNow();\n }\n\n const [{loading: removing, response: removeResponse}, doRemove] = useAxios({\n baseURL: '/api/heartbeat/v1',\n method: 'DELETE',\n headers: getAxiosHeaders(),\n validateStatus: (status) => status >= 200 && status < 500,\n }, {\n manual: true,\n });\n\n useEffect( () => {\n if (removeResponse && removeResponse.status === 204) {\n remove(item);\n } // eslint-disable-next-line\n }, [removeResponse]);\n\n const openForm = () => {\n setForm(true);\n }\n\n const closeForm = () => {\n setForm(false);\n }\n\n const removeActivity = () => {\n setConfirmRemove(true);\n };\n\n const handleConfirmRemove = () => {\n doRemove({\n url: `${urlsForType[item.type] || 'heartbeats'}/${item.id}`\n })\n }\n\n const handleCancelRemove = () => {\n setConfirmRemove(false);\n }\n\n const [anchorEl, setAnchorEl] = useState();\n\n const handleToolbarClick = (event) => {\n setAnchorEl(anchorEl ? null : event.currentTarget);\n }\n const handleToolbarClose = (event) => {\n setAnchorEl(null);\n }\n\n return <Grid item xs={12}>\n\n <Paper className={classes.paper} variant=\"outlined\">\n <Grid container alignItems=\"stretch\" alignContent=\"center\">\n <Grid item xs={12}>\n <Box display=\"flex\" className={classes.content} >\n <Box className={clsx(classes.type, {[classes[`type-${item.type}`]]: true})}> </Box>\n <Box width=\"calc(100% - 8px)\">\n\n {item.link_meta && item.link_meta.image && isMobile ?\n <Link href={item.link} target=\"_blank\" underline=\"none\">\n <Box className={classes.wideImage}\n style={{backgroundImage: `url(${item.link_meta.image})`}}>\n  \n </Box>\n </Link> : null}\n <Grid container>\n <Grid item xs={isMobile ? 11 : 10}>\n <Box className={classes.itemData}>\n <Box className={classes.typeIcon}>\n <Tooltip title={t(BEATS[item.type].title)} placement=\"top\" >\n {BEATS[item.type].icon()}\n </Tooltip>\n </Box>\n\n {item.link_meta && item.link_meta.image && !isMobile ?\n <Link href={item.link} target=\"_blank\" underline=\"none\">\n <Box className={classes.image}\n style={{backgroundImage: `url(${item.link_meta.image})`}}>\n  \n </Box>\n </Link> : null}\n\n <Box className={clsx(classes.text, {\n [classes.mobileText]: isMobile,\n [classes.imagedText]: !isMobile && item.link_meta && item.link_meta.image\n })} onClick={toggleCard} >\n\n <Typography\n variant={isMobile ? \"body2\" : \"body2\" }\n className={classes.title}>\n {item.title}\n </Typography>\n\n <Box className={classes.tags} display=\"flex\" alignItems=\"center\">\n {item.done_at && !hideRating && <Rating name=\"read-only\" size=\"small\"\n value={item.rating} readOnly\n style={{marginRight: \"16px\", marginLeft: \"-3px\"}}/>\n }\n {item.tags ? _.map(item.tags, (tag) => {\n // return <Chip key={tag} variant=\"outlined\" label={`#${tag}`} onClick={() => setTags(tag)} className={classes.tagLink}/>\n return <Link key={tag} component=\"button\" onClick={() => setTags(tag)} className={classes.tagLink}>{tag}</Link>\n }) : null}\n </Box>\n\n </Box>\n </Box>\n\n </Grid>\n <Grid item xs={isMobile ? 1 : 2} className={classes.controls}>\n\n { !isMobile ?\n <ItemCardControls edit={openForm} remove={removeActivity} insight={toggleCard} item={item}/>\n : null }\n { isMobile ? <ClickAwayListener onClickAway={handleToolbarClose}>\n <div>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n // className={classes.menuButton}\n onClick={handleToolbarClick}\n >\n <MoreVertIcon />\n </IconButton>\n\n <Popper\n open={!!anchorEl}\n anchorEl={anchorEl}\n className={classes.popper}\n role={undefined}\n\n placement=\"left\"\n transition\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{ transformOrigin: placement === 'bottom' ? 'center top ' : 'center bottom' }}\n >\n <Paper className={classes.popperBox}>\n <ItemCardControls edit={openForm} remove={removeActivity} insight={toggleCard}\n item={item} close={handleToolbarClose}/>\n </Paper>\n </Grow>\n )}\n </Popper>\n </div>\n </ClickAwayListener>\n : null}\n </Grid>\n </Grid>\n <Box>\n {form ?\n <ActivityForm\n disabled={removing}\n insert={insert}\n update={update}\n initialType={item.type}\n Form={item.type === \"cheatsheet\" ? CheatsheetBeatForm: null}\n item={item}\n open={form}\n handleClose={closeForm}/> : null}\n <Collapse in={card} style={{ transformOrigin: '0 0 0' }}>\n <Box>\n {item.insight && <Box className={classes.markdown} p={2}>\n {\n item.format === \"text\" ?\n // nl2br(item.insight)\n <RenderedText text={item.insight}/>\n : <RenderedMarkdown text={item.insight}/>\n }\n </Box>}\n\n <Box className={classes.date} paddingBottom={1} paddingRight={1}>\n <Box pr={1}>\n <Typography align=\"left\" variant=\"caption\">\n {dateOrPeriod(item.done_at ? item.done_at : item.created_at)}\n </Typography>\n </Box>\n <CopyToClipboard text={activityLink} onCopy={handleLinkCopy}>\n <Tooltip title={copiedText} placement=\"right\" leaveDelay={copiedLeaveDelay}>\n <LinkIcon fontSize=\"small\" color=\"primary\" className={classes.pointer}/>\n </Tooltip>\n </CopyToClipboard>\n </Box>\n </Box>\n </Collapse>\n\n <Dialog\n disableBackdropClick\n disableEscapeKeyDown\n maxWidth=\"xs\"\n aria-labelledby={t('itemCard.removeDialog.title')}\n open={confirmRemove}\n >\n <DialogTitle>{t('itemCard.removeDialog.title')}</DialogTitle>\n <DialogContent dividers>\n {t('itemCard.removeDialog.message')} {t(`itemCard.removeDialog.${item.type}`)} <br/> <strong>{item.title}</strong>?\n </DialogContent>\n <DialogActions>\n <Button autoFocus onClick={handleCancelRemove} color=\"primary\">\n {t('itemCard.removeDialog.cancel')}\n </Button>\n <Button onClick={handleConfirmRemove} color=\"secondary\">\n {t('itemCard.removeDialog.remove')}\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n </Box>\n\n </Box>\n </Grid>\n </Grid>\n\n </Paper>\n\n </Grid>\n\n}","import React, {useState} from 'react';\nimport {\n Fab,\n makeStyles,\n} from \"@material-ui/core\";\nimport {useTranslation} from \"react-i18next\";\n\nimport {BEATS} from \"./beats\";\nimport ActivityForm from \"./forms\";\nimport {SpeedDial, SpeedDialAction, SpeedDialIcon} from \"@material-ui/lab\";\nimport AddIcon from '@material-ui/icons/Add';\nimport {CheatsheetBeatForm} from \"../forms/types\";\nimport clsx from \"clsx\";\n\nconst _ = require(\"lodash\");\n\n\nconst drawerWidth = 240;\nconst useStyles = makeStyles((theme) => ({\n menuItem: {\n paddingLeft: theme.spacing(1.2),\n '&:hover': {\n backgroundColor: theme.palette.background.default,\n },\n },\n popper: {\n zIndex: theme.zIndex.drawer + 2,\n paddingBottom: '10px',\n },\n popperBox: {\n backgroundColor: theme.palette.background.paper,\n border: '1px solid',\n borderColor: theme.palette.background.default,\n boxShadow: theme.shadows[1],\n ...theme.shape\n },\n fab: {\n position: 'fixed',\n zIndex: theme.zIndex.drawer + 1,\n right: theme.spacing(4),\n bottom: theme.spacing(8),\n left: 'auto',\n [theme.breakpoints.up('md')]: {\n left: drawerWidth/2-28,\n right: 'auto',\n },\n },\n cheatsheet: {\n\n },\n ...theme.types\n}));\n\n\nconst AddActionMenu = ({insert, type}) => {\n\n const classes = useStyles();\n\n // const [anchorEl, setAnchorEl] = useState(null);\n const [activityForm, setActivityForm] = useState();\n\n const { t } = useTranslation();\n\n // const handleClick = (event) => {\n // setAnchorEl(anchorEl ? null : event.currentTarget);\n // };\n //\n // const handleMouseOver = (event) => {\n // setAnchorEl(event.currentTarget);\n // };\n //\n // const handleClose = () => {\n // setAnchorEl(null);\n // };\n\n const openActivityForm = (type) => {\n setActivityForm(type)\n };\n\n const closeActivityForm = () => {\n setActivityForm(null)\n }\n\n return (\n <React.Fragment>\n\n <Fab\n color=\"secondary\"\n aria-label=\"add\"\n className={clsx(classes.fab, {\n [classes[`avatar-cheatsheet`]]: type === \"cheatsheet\"\n })}\n onClick={() => openActivityForm(type || \"general\")}\n >\n <AddIcon />\n </Fab>\n\n {!_.isNil(activityForm) && <ActivityForm\n insert={insert}\n initialType={activityForm}\n Form={activityForm === \"cheatsheet\" ? CheatsheetBeatForm : null}\n open={true}\n handleClose={closeActivityForm}/>}\n\n </React.Fragment>\n );\n}\n\n\nexport default AddActionMenu;","import React, {useContext, useEffect, useState} from \"react\";\n// import AuthContext from \"../../contexts/auth\";\nimport useScrollPosition from \"@react-hook/window-scroll\";\nimport {useTranslation} from \"react-i18next\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport SentimentSatisfiedIcon from \"@material-ui/icons/SentimentSatisfied\";\nimport {CompactItemLine} from \"./compact\";\nimport {LinearProgress, makeStyles} from \"@material-ui/core\";\nimport AddActionMenu from \"../feed/add\";\nimport TagsContext from \"../../contexts/tags\";\nconst _ = require(\"lodash\");\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n list: {\n width: '100%'\n },\n ...theme.types\n}));\n\n\nconst HeartBeats = (props) => {\n\n const [heartbeats, setHeartbeats] = useState([]);\n const [offset, setOffset] = useState(0);\n const [hasMore, setHasMore] = useState(false);\n const {done, type, own, forceCard, tags, setTags, query, hideRating} = props;\n const classes = useStyles();\n // const auth = useContext(AuthContext);\n const tagsContext = useContext(TagsContext);\n const scrollY = useScrollPosition(10);\n const { t } = useTranslation();\n\n const [{data, loading}] = useAxios({\n url: '/api/memory/v1/heartbeats',\n headers: getAxiosHeaders(),\n params: {done, type, own, offset, tags, query},\n }, {useCache: false});\n\n const insertWithoutReload = (item) => {\n if ((type && item.type !== type) ||\n (!type && item.type === \"cheatsheet\") ||\n (own && !item.is_author) ||\n (done && !item.done_at)) {\n return\n }\n\n setHeartbeats([item].concat(...heartbeats));\n // auth.fetch();\n setTimeout(tagsContext.fetch, 1000)\n\n }\n\n const updateWithoutReload = (item) => {\n setHeartbeats(_.map(heartbeats, (heartbeat) => {\n return heartbeat.id === item.id ?\n _.assign({}, heartbeat, item) :\n heartbeat;\n }));\n // auth.fetch();\n setTimeout(tagsContext.fetch, 1000)\n }\n\n const removeWithoutReload = (item) => {\n setHeartbeats(_.filter(heartbeats, (heartbeat) => {\n return heartbeat.id !== item.id}));\n setTimeout(tagsContext.fetch, 1000)\n }\n\n const fetchNextPage = () => {\n setOffset(heartbeats ? heartbeats.length : 0)\n }\n\n useEffect(() => {\n setOffset(0);\n setHeartbeats([]); // eslint-disable-next-line\n }, [done, type, own, tags, query])\n\n useEffect(() => {\n if (data && data.items) {\n setHasMore(offset + data.items.length < data.count);\n setHeartbeats( (heartbeats) => heartbeats ? _.concat(heartbeats, data.items) : data.items);\n } // eslint-disable-next-line\n }, [data]);\n\n useEffect(() => {\n if (hasMore) {\n const bottom = Math.abs(window.innerHeight + scrollY - document.body.scrollHeight) < 20;\n if (bottom) {\n fetchNextPage();\n }\n } // eslint-disable-next-line\n }, [scrollY]);\n\n return <div className={classes.list}>\n <Grid container spacing={3}>\n {!loading && heartbeats.length === 0 ?\n <Grid item xs={12}>\n <Box width=\"100%\" display=\"flex\" justifyContent=\"center\" alignItems=\"center\" p={5}>\n <Typography variant=\"h4\">\n {t('activitiesList.empty')} \n </Typography>\n <SentimentSatisfiedIcon fontSize=\"large\" />\n </Box>\n </Grid>: null}\n {_.map(heartbeats, (item) =>\n <CompactItemLine\n key={item.id}\n item={item}\n setTags={setTags}\n forceCard={forceCard}\n hideRating={hideRating}\n insert={insertWithoutReload}\n update={updateWithoutReload}\n remove={removeWithoutReload}\n />\n )}\n <Grid item xs={12}>\n {loading ? <LinearProgress style={{width: '100%'}} /> : null }\n </Grid>\n </Grid>\n <AddActionMenu insert={insertWithoutReload} type={type}/>\n </div>\n}\n\nexport default HeartBeats;","import React, { useEffect, useState} from \"react\";\nimport {\n Avatar, Chip, fade, Hidden, InputAdornment, InputBase,\n makeStyles,\n Tab,\n Tabs, TextField,\n Tooltip,\n} from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {useTranslation} from \"react-i18next\";\nimport {BEATS} from \"./beats\";\nimport {Link as RouterLink, useHistory, useLocation, useParams} from \"react-router-dom\";\nimport {grey} from \"@material-ui/core/colors\";\nimport clsx from \"clsx\";\nimport EmojiPeopleIcon from '@material-ui/icons/EmojiPeople';\nimport {AvatarGroup} from \"@material-ui/lab\";\nimport CompetenciesCloud from \"./competencies\";\nimport TagsCloud from \"./tags\";\nimport Box from \"@material-ui/core/Box\";\nimport HeartBeats from \"../heartbeats/heartbeat\";\nimport {LightenDarkenColor} from \"lighten-darken-color\";\nimport SearchIcon from '@material-ui/icons/Search';\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport useDebounce from \"../../utils/debounce\";\n\nconst _ = require(\"lodash\");\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n activeFilter: {\n cursor: 'pointer',\n color: theme.palette.getContrastText(grey[900]),\n backgroundColor: grey[900],\n '&:hover': {\n color: theme.palette.getContrastText(grey[800]),\n backgroundColor: grey[800],\n }\n },\n typeFilter: {\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.getContrastText(grey[600]),\n backgroundColor: grey[600],\n }\n },\n list: {\n width: '100%'\n },\n filters: {\n display: 'flex',\n flexGrow: 1,\n paddingLeft: '8px !important'\n },\n ownFilter: {\n marginRight: theme.spacing(2),\n },\n ownFilterAvatar: {\n cursor: 'pointer',\n color: theme.palette.colorless.main,\n backgroundColor: 'transparent',\n '&:hover': {\n color: LightenDarkenColor(theme.palette.secondary.main, -15),\n }\n },\n ownFilterActiveAvatar: {\n cursor: 'pointer',\n color: theme.palette.secondary.main,\n backgroundColor: 'transparent',\n '&:hover': {\n color: LightenDarkenColor(theme.palette.secondary.main, -15),\n }\n },\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(theme.palette.common.white, 0.15),\n '&:hover': {\n backgroundColor: fade(theme.palette.common.white, 0.25),\n },\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(1),\n width: 'auto',\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n // vertical padding + font size from searchIcon\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: '12ch',\n '&:focus': {\n width: '20ch',\n },\n },\n },\n pointer: {\n cursor: 'pointer',\n },\n ...theme.types\n}));\n\n\nconst routes = [\"/feed/roadmap\", \"/feed/behind\"];\n\nconst HeartBeatsFeed = () => {\n\n const classes = useStyles();\n const history = useHistory();\n const location = useLocation();\n const { direction } = useParams();\n const done = direction === 'behind' ? 1 : 0;\n const { t } = useTranslation();\n\n const urlParams = new URLSearchParams(location.search);\n\n const [type, setType] = useState(urlParams.get('type'));\n const [query, setQuery] = useState(urlParams.get('query') || \"\");\n const [ownContent, setOwnContent] = useState(urlParams.get('own') === '1' ? true : null);\n const [tags, setTags] = useState(urlParams.getAll('tag'));\n\n const debouncedQuery = useDebounce(query);\n\n const updatePageAddress = () => {\n const search = new URLSearchParams();\n let pathname = routes[done];\n if (type) {\n search.append('type', type);\n }\n if (!_.isEmpty(debouncedQuery)) {\n search.append('query', debouncedQuery);\n }\n if (ownContent) {\n search.append('own', '1');\n }\n if (tags) {\n tags.map((tag) => search.append('tag', tag))\n }\n const newLocation = {\n pathname: pathname,\n search: search.toString(),\n }\n if (location.pathname !== newLocation.pathname || location.search !== newLocation.search) {\n history.push(newLocation);\n }\n };\n\n useEffect(() => {\n document.title = `ipsly: ${done ? \"behind\" : \"roadmap\" }`;\n }, [done])\n\n useEffect(() => {\n updatePageAddress(); // eslint-disable-next-line\n }, [type, done, ownContent, tags, debouncedQuery])\n\n const toggleOwnFilter = (event) => {\n setOwnContent(ownContent ? null : true);\n }\n\n const toggleTypeFilter = (key) => {\n // This is for future, when we will support multiple types for filtering\n // if (types.indexOf(key) === -1) {\n // setTypes(_.union(types, [key]));\n // } else {\n // setTypes(_.filter(types, (el) => el !== key));\n // }\n setType(key === type ? null : key);\n }\n\n const handleAddTags = (tag) => {\n if (tags.indexOf(tag) === -1) {\n setTags(tags ? _.concat(tags, tag) : [tag]);\n }\n }\n\n const handleDeleteTags = (tag, index) => {\n setTags(_.filter(tags, (value) => value !== tag))\n }\n\n return <Grid container spacing={4}>\n <Grid item sm={6} xs={12}>\n <Tabs\n value={done}\n variant=\"fullWidth\"\n indicatorColor=\"primary\"\n textColor=\"primary\"\n >\n <Tab\n label={t('activitiesList.behind')}\n // icon={<Tooltip title={<Trans>Behind</Trans>} placement=\"top\"><ArrowBackIcon /></Tooltip>}\n value={1}\n component={RouterLink}\n to=\"/feed/behind\"/>\n <Tab\n label={t('activitiesList.roadmap')}\n // icon={<Tooltip title={<Trans>Ahead</Trans>} placement=\"top\"><ForwardIcon /></Tooltip>}\n value={0}\n component={RouterLink}\n to=\"/feed/roadmap\"/>\n </Tabs>\n </Grid>\n <Grid item md={3} xs={12} className={classes.filters}>\n\n <AvatarGroup max={10} className={classes.ownFilter}>\n <Tooltip title={t(\"activitiesList.own\")} placement=\"top\" >\n <Avatar\n onClick={toggleOwnFilter}\n alt={t(\"activitiesList.own\")}\n className={clsx({\n [classes.ownFilterAvatar]: !ownContent,\n [classes.ownFilterActiveAvatar]: ownContent,\n // [classes.typeFilter]: !ownContent,\n // [classes.activeFilter]: ownContent\n })}\n ><EmojiPeopleIcon fontSize=\"large\"/></Avatar>\n </Tooltip>\n </AvatarGroup>\n\n <AvatarGroup max={10}>\n {_.map(_.values(BEATS), ({key, title, icon, enabled, filter}) =>\n enabled && filter ? <Tooltip title={t(title)} placement=\"top\" key={key}>\n <Avatar\n onClick={() => toggleTypeFilter(key)}\n alt={title}\n className={clsx(classes[`avatar-${key}-hover`], {\n [classes[`avatar-${key}`]]: type === key,\n [classes.typeFilter]: type !== key,\n [classes.activeFilter]: type === key\n })}\n >{icon()}</Avatar></Tooltip> : null\n )}\n </AvatarGroup>\n </Grid>\n <Grid item md={3} xs={12}>\n\n <TextField\n label={t(\"activitiesList.search\")}\n value={query}\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment:<InputAdornment position=\"end\">\n {query ?\n <CloseIcon fontSize=\"small\" onClick={() => setQuery(\"\")} className={classes.pointer}/> : \" \"\n }\n </InputAdornment>,\n }}\n onChange={(event) => setQuery(event.target.value)} />\n </Grid>\n\n <Grid item md={9} xs={12}>\n {!_.isEmpty(tags) && <Box my={2}>{tags.map( (tag) => {\n return <Box component=\"span\" p={0.5} key={tag}>\n <Chip label={tag} variant=\"outlined\" onClick={() => handleDeleteTags(tag)} onDelete={() => handleDeleteTags(tag)} />\n </Box>\n })}</Box>}\n <HeartBeats type={type} done={done} own={ownContent} tags={tags} query={debouncedQuery} setTags={handleAddTags}/>\n </Grid>\n <Hidden mdDown>\n <Grid item xs={3}>\n <TagsCloud addTag={handleAddTags} deleteTag={handleDeleteTags} tags={tags} />\n <p> </p>\n <CompetenciesCloud />\n </Grid>\n </Hidden>\n </Grid>\n}\n\n\nexport default HeartBeatsFeed;","import React from \"react\";\n\nimport HeartBeatsFeed from \"../components/feed/list\";\nimport {useRouteMatch, Redirect, Route, Switch} from \"react-router-dom\";\n\nconst FeedPage = () => {\n\n let {path} = useRouteMatch();\n\n return (\n <Switch>\n <Route path={`${path}/:direction`} exact>\n <HeartBeatsFeed />\n </Route>\n <Route path={`${path}`} exact>\n <Redirect to={`${path}/behind`}/>\n </Route>\n </Switch>\n )\n}\n\n\nexport default FeedPage;","import React, {useContext, useEffect, useState} from \"react\";\nimport useAxios from \"axios-hooks\";\nimport { Trans } from \"react-i18next\";\nimport {getAxiosHeaders} from \"../../api/client\";\nimport {LinearProgress} from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport AddActionMenu from \"./add\";\nimport {Link as RouterLink, useParams, useHistory} from \"react-router-dom\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport Button from \"@material-ui/core/Button\";\nimport {CompactItemLine} from \"../heartbeats/compact\";\nimport AuthContext from \"../../contexts/auth\";\n\nconst _ = require(\"lodash\");\n\nconst HeartBeat = () => {\n\n const [heartbeats, setHeartbeats] = useState([]);\n const {activityId} = useParams();\n const history = useHistory();\n const auth = useContext(AuthContext);\n\n const [{data, loading}] = useAxios({\n url: `/api/memory/v1/heartbeats/${activityId}`,\n headers: getAxiosHeaders()\n });\n\n useEffect(() => {\n if (data) {\n document.title = `ipsly: ${data.title}`;\n setHeartbeats([data]);\n }\n }, [data]);\n\n const updateWithoutReload = (item) => {\n setHeartbeats(_.map(heartbeats, (heartbeat) => {\n return heartbeat.id === item.id ?\n _.assign({}, heartbeat, item) :\n heartbeat;\n }));\n auth.fetch();\n }\n\n return loading ? <LinearProgress /> :\n <div>\n <Button component={RouterLink} to=\"/feed/behind\">\n <ArrowBackIcon /> <Trans>Back to feed</Trans>\n </Button>\n <Grid container spacing={2}>\n {_.map(heartbeats, (item) =>\n <CompactItemLine\n key={item.id}\n item={item}\n insert={() => {}}\n update={updateWithoutReload}\n remove={() => {\n history.push(\"/\")\n }}\n forceCard\n />\n )}\n </Grid>\n <AddActionMenu />\n </div>\n}\n\nexport default HeartBeat;","import HeartBeats from \"../heartbeats/heartbeat\";\nimport {useTranslation} from \"react-i18next\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TagsCloud from \"../feed/tags\";\nimport CompetenciesCloud from \"../feed/competencies\";\nimport React, {useEffect, useState} from \"react\";\nimport {Chip, Hidden, InputAdornment, TextField} from \"@material-ui/core\";\nimport Box from \"@material-ui/core/Box\";\nimport {useHistory, useLocation} from \"react-router-dom\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport useDebounce from \"../../utils/debounce\";\nconst _ = require(\"lodash\");\n\nconst CheatsheetsList = () => {\n\n const location = useLocation();\n const history = useHistory();\n\n const urlParams = new URLSearchParams(location.search);\n const { t } = useTranslation();\n const [tags, setTags] = useState(urlParams.getAll('tag', []));\n const [query, setQuery] = useState(urlParams.get('query') || \"\");\n\n const handleAddTags = (tag) => {\n if (tags.indexOf(tag) === -1) {\n setTags(tags ? _.concat(tags, tag) : [tag]);\n }\n }\n\n const handleDeleteTags = (tag, index) => {\n setTags(_.filter(tags, (value) => value !== tag))\n }\n\n const debouncedQuery = useDebounce(query);\n\n const updatePageAddress = () => {\n const search = new URLSearchParams();\n if (!_.isEmpty(debouncedQuery)) {\n search.append('query', debouncedQuery);\n }\n if (tags) {\n tags.map((tag) => search.append('tag', tag))\n }\n const newLocation = {\n pathname: \"/cheatsheets\",\n search: search.toString(),\n }\n if (location.pathname !== newLocation.pathname || location.search !== newLocation.search) {\n history.push(newLocation);\n }\n };\n\n useEffect(() => {\n updatePageAddress(); // eslint-disable-next-line\n }, [tags, debouncedQuery])\n\n return <Grid container spacing={4}>\n <Grid item xs={9}>\n <Typography variant=\"h4\">{t('drawer.menu.cheatsheets')}</Typography>\n </Grid>\n <Grid item md={3} xs={12}>\n\n <TextField\n label={t(\"activitiesList.search\")}\n value={query}\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment:<InputAdornment position=\"end\">\n {query ?\n <CloseIcon fontSize=\"small\" onClick={() => setQuery(\"\")} /> : \" \"\n }\n </InputAdornment>,\n }}\n onChange={(event) => setQuery(event.target.value)} />\n </Grid>\n\n <Grid item md={9} xs={12}>\n {!_.isEmpty(tags) && <Box my={2}>{tags.map( (tag) => {\n return <Box component=\"span\" p={0.5} key={tag}>\n <Chip label={tag} variant=\"outlined\" onClick={() => handleDeleteTags(tag)} onDelete={() => handleDeleteTags(tag)} />\n </Box>\n })}</Box>}\n <HeartBeats type=\"cheatsheet\" done={1} forceCard={true} \n tags={tags}query={debouncedQuery} setTags={handleAddTags} hideRating={true}/>\n </Grid>\n <Hidden mdDown>\n <Grid item xs={3}>\n <TagsCloud addTag={handleAddTags} deleteTag={handleDeleteTags} tags={tags}/>\n <p> </p>\n <CompetenciesCloud />\n </Grid>\n </Hidden>\n </Grid>\n\n}\n\nexport default CheatsheetsList;","import React, {useContext} from 'react';\nimport AuthContext from \"../contexts/auth\";\nimport {SoulSwitchWidget} from \"../components/profile/soul\";\nimport Box from \"@material-ui/core/Box\";\nimport {makeStyles, useMediaQuery, useTheme} from \"@material-ui/core\";\nimport Container from \"@material-ui/core/Container\";\n\n\nconst useStyles = makeStyles(() => ({\n root: {\n\n display: 'flex',\n alignItems: 'center',\n alignContent: 'center',\n justifyContent: 'center',\n height: '100vh',\n }\n}));\n\nconst conditionalWrap = (cond, component) =>\n cond ? <Box m={2} pt={3}>{component}</Box> : component\n\nconst CreateSoul = () => {\n\n const auth = useContext(AuthContext);\n const classes = useStyles();\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n\n return <Container maxWidth=\"sm\" className={classes.root}>\n {conditionalWrap(\n !isMobile,\n <SoulSwitchWidget current={auth.user.soul ? auth.user.soul.avatar : null} onUpdate={auth.fetch}/>)}\n </Container>\n}\n\n\nexport default CreateSoul;","import React, {useContext, useState} from \"react\"\nimport {Switch, Route, Redirect} from \"react-router-dom\";\nimport PJDrawer from \"../components/common/drawer\";\nimport Container from \"@material-ui/core/Container\";\nimport {makeStyles} from \"@material-ui/core\";\nimport FeedPage from \"./feed\";\nimport HeartBeat from \"../components/feed/single\";\nimport CheatsheetsList from \"../components/cheatsheets/list\";\nimport AuthContext from \"../contexts/auth\";\nimport CreateSoul from \"./create_soul\";\nimport LandingPage from \"./landing/page\";\nimport TagsContext, {getTagsContextValue} from \"../contexts/tags\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"../api/client\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n appBarSpacer: {\n [theme.breakpoints.down('sm')]: theme.mixins.toolbar,\n [theme.breakpoints.up('sm')]: {\n minHeight: theme.spacing(3)\n }\n },\n content: {\n width: '100%',\n paddingLeft: theme.spacing(2),\n [theme.breakpoints.down('sm')]: {\n paddingLeft: 0\n }\n },\n container: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n maxWidth: 'none',\n },\n}));\n\nexport const ProudJuniorPage = () => {\n const auth = useContext(AuthContext);\n\n return auth.user.soul ? <ProudJunior /> : <CreateSoul />\n}\n\nexport const ProudJunior = () => {\n const classes = useStyles();\n\n const [tagsSize, setTagsSize] = useState(5);\n\n const [{data: tagsData, loading: tagsLoading}, doFetchTags] = useAxios({\n url: '/api/memory/v1/heartbeats/tags',\n headers: getAxiosHeaders(),\n params: {size: tagsSize}\n }, {useCache: false});\n\n const getTagsContextValue = () => {\n return {\n data: tagsData,\n size: tagsSize,\n setSize: setTagsSize,\n loading: tagsLoading,\n fetch: doFetchTags,\n }\n }\n\n return (\n <div className={classes.root}>\n <PJDrawer/>\n <main className={classes.content}>\n <div className={classes.appBarSpacer}/>\n <Container className={classes.container}>\n <TagsContext.Provider value={getTagsContextValue()}>\n <Switch>\n <Route path=\"/feed\">\n <FeedPage />\n </Route>\n <Route path=\"/cheatsheets\" exact>\n <CheatsheetsList />\n </Route>\n <Route path=\"/activity/:activityId\" exact>\n <HeartBeat />\n </Route>\n <Route path=\"/\" exact>\n <Redirect to=\"/feed\" />\n </Route>\n <Route>\n <Redirect to=\"/feed\" />\n </Route>\n </Switch>\n </TagsContext.Provider>\n </Container>\n </main>\n </div>\n )\n};\n\nexport default ProudJuniorPage;","import React, {useContext, useEffect} from \"react\";\nimport {useHistory} from \"react-router-dom\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport {Trans, useTranslation} from \"react-i18next\";\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport useAxios from \"axios-hooks\";\nimport {useSnackbar} from \"notistack\";\nimport {getAxiosHeaders} from \"../../api/client\";\n\nexport const EmailConfirmCallback = (props) => {\n\n const search = window.location.search;\n const params = new URLSearchParams(search);\n const code = params.get('code');\n\n const history = useHistory();\n const {enqueueSnackbar} = useSnackbar();\n const {t} = useTranslation();\n\n const [{loading, response, error}] = useAxios(\n {\n method: 'POST',\n headers: getAxiosHeaders(),\n url: '/api/auth/v1/users/confirm-email',\n data: {\n code: code,\n }\n }\n )\n\n useEffect(() => {\n if (response && response.status === 204) {\n enqueueSnackbar(\n t(\"landing.emailConfirmed\"), {\n variant: 'success'\n });\n history.push(\"/\");\n }\n }, [response, history])\n\n useEffect(() => {\n if (error) {\n enqueueSnackbar(\n t(\"landing.emailNotConfirmed\"), {\n variant: 'error',\n });\n history.push(\"/\")\n }\n }, [error, history])\n\n return loading ? <Backdrop open={true}>\n <CircularProgress color=\"inherit\" />  <Trans>Loading...</Trans>\n </Backdrop> : <div />\n}","import React, {useEffect, useState} from 'react';\nimport { Trans } from 'react-i18next';\nimport LandingPage from \"./pages/landing/page\";\nimport AuthContext from \"./contexts/auth\";\n\nimport Backdrop from \"@material-ui/core/Backdrop\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport {CssBaseline} from \"@material-ui/core\";\nimport ProudJuniorPage from \"./pages/junior\";\nimport {getCurrentToken, setToken, storeLanguageLocally} from \"./utils/profile\";\nimport 'moment/locale/ru';\nimport i18n from \"i18next\";\nimport useAxios from \"axios-hooks\";\nimport {getAxiosHeaders} from \"./api/client\";\nimport {Route, Switch} from \"react-router-dom\";\nimport {GitHubCallback} from \"./pages/landing/github_callback\";\nimport {EmailConfirmCallback} from \"./pages/landing/email_callback\";\nimport HeartBeatsSharedFeed from \"./pages/public/shared\";\n\nconst _ = require('lodash');\n\n\n\nconst App = () => {\n return <Switch>\n <Route exact path=\"/github\">\n <GitHubCallback />\n </Route>\n <Route exact path=\"/confirm\">\n <EmailConfirmCallback />\n </Route>\n <Route path=\"/\">\n <PJApp />\n </Route>\n </Switch>\n}\n\nconst PJApp = () => {\n\n const [user, setUser] = useState(null);\n const [loading, setLoading] = useState(true);\n\n const [{data: userData, error}, doFetchUser] = useAxios({\n url: '/api/auth/v1/users/by-token',\n headers: getAxiosHeaders(),\n params: {\n soul: 1\n },\n }, {});\n\n const fetchUser = () => {\n if (_.isEmpty(getCurrentToken())) {\n setLoading(false);\n return null;\n }\n setLoading(true);\n return doFetchUser();\n }\n\n useEffect(() => {\n if (userData) {\n setUser(userData);\n const lang = userData.language || \"en\";\n storeLanguageLocally(lang);\n i18n.changeLanguage(lang);\n setLoading(false);\n }\n }, [userData]);\n\n useEffect(() => {\n if (error) setLoading(false);\n }, [error])\n\n const logoutUser = () => {\n setToken(\"\");\n setUser(null);\n }\n\n const getAuthContextValue = () => {\n return {\n user: user,\n fetch: fetchUser,\n logout: logoutUser,\n }\n }\n if (loading) {\n return <Backdrop open={true}>\n <CircularProgress color=\"inherit\" />  <Trans>Loading...</Trans>\n </Backdrop>\n }\n return (\n <React.Fragment>\n <CssBaseline />\n <Switch>\n <Route path=\"/shared/:sharedId\" exact>\n <HeartBeatsSharedFeed />\n </Route>\n <Route>\n <AuthContext.Provider value={getAuthContextValue()}>\n {!loading && user ? <ProudJuniorPage /> : <LandingPage />}\n </AuthContext.Provider>\n </Route>\n </Switch>\n </React.Fragment>\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\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 './i18n';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport {SnackbarProvider} from \"notistack\";\nimport {makeStyles, ThemeProvider} from \"@material-ui/core/styles\";\nimport {BrowserRouter} from \"react-router-dom\";\nimport {getTheme} from \"./theme\";\nconst axios = require(\"axios\");\nconst _ = require(\"lodash\");\n\naxios.defaults.paramsSerializer = (params) => {\n const search = new URLSearchParams();\n _.forEach(_.omitBy(params, _.isNil), (value, key) => {\n if (_.isArray(value)) {\n value.map((val) => search.append(key, val))\n } else {\n search.append(key, value)\n }\n });\n return new URLSearchParams(search).toString();\n}\n\n\n\nconst Root = () => {\n const theme = getTheme();\n const classes = makeStyles ( () => ({\n success: {\n backgroundColor: theme.palette.primary.main + \" !important\",\n }\n }))();\n\n return <BrowserRouter>\n <ThemeProvider theme={theme}>\n <SnackbarProvider maxSnack={3} anchorOrigin={{vertical: 'bottom', horizontal: 'right'}}\n classes={{variantSuccess: classes.success}}>\n <App />\n </SnackbarProvider>\n </ThemeProvider>\n </BrowserRouter>\n}\n\nReactDOM.render(<Root />,\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":""}