{"version":3,"sources":["Cache/CacheStore.ts","Config/Config.ts","Components/MyContainer.tsx","Components/MyPaper.tsx","Services/YoutubeService.ts","Screens/Youtube/Search/Store.ts","Screens/Youtube/Search/Components/SearchResultButton.tsx","Screens/Youtube/Search/Components/AuthorPicks.tsx","Screens/Youtube/Search/Components/LastPlaysList.tsx","Screens/Youtube/Search/Search.tsx","Helpers/TypeHelpers.ts","Components/MyAppBar.tsx","Screens/Youtube/SearchResultsPage/SearchResultsPage.tsx","Screens/Youtube/Store.ts","Screens/Youtube/YoutubePlayer.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["cacheStore","IsHydrated","ReleaseDate","Date","IsFirstFun","SearchCaches","LastPlays","makeAutoObservable","this","slice","reverse","console","log","term","type","result","pageToken","newSearchCache","Term","Created","SearchResult","PageToken","Type","push","id","title","author","thumbnailUrl","foundIndex","findIndex","x","splice","created","dateLastWeek","subDays","find","AsyncTrunk","storage","localStorage","init","then","SetHydrated","toJS","isProd","Env","SocketServer","YoutubeApiKey","ClientId","ClientSecret","useStyles","makeStyles","theme","layout","width","flex","display","container","flexDirection","MyContainer","children","classes","className","Container","component","maxWidth","CssBaseline","paper","marginTop","spacing","marginBottom","padding","breakpoints","up","paperSmall","MyPaper","size","style","Paper","Grid","item","xs","sm","defaultProps","baseYtUrl","Config","json2Qs","obj","Object","entries","map","key","value","encodeURIComponent","join","YouTubeService","nextPageToken","Promise","resolve","reject","cachedSearch","Get","undefined","Search","AddSearch","catch","error","options","part","q","maxResults","url","axios","get","headers","response","data","message","accessToken","bearerAuthorization","Authorization","searchStore","IsLoading","IsAuthenticated","AccessToken","SearchTerm","Error","Previews","search","SearchCached","items","accesToken","contentContainer","alignItems","img","height","backgroundColor","SearchResultButton","inColumn","imageMd","contentMd","to","textDecoration","onClick","AddLastPlay","md","src","alt","color","ChevronRightOutlined","AuthorPicks","Typography","variant","align","preview","LastPlaysList","LastPlaysDesc","lp","form","submit","margin","Copyright","Link","href","getFullYear","observer","history","useHistory","useForm","register","handleSubmit","errors","watch","setValue","useEffect","action","location","pathname","ClearSearch","name","onSubmit","clientId","buttonText","isSignedIn","scope","onSuccess","code","isOfflineResponse","AuthenticateGoogle","onFailure","responseGoogle","cookiePolicy","hasError","errorText","noValidate","TextField","required","fullWidth","inputRef","focused","label","autoFocus","helperText","RadioGroup","aria-label","row","defaultValue","onChange","ev","FormControlLabel","control","Radio","Button","renderSearch","length","createStyles","menuButton","marginRight","flexGrow","MyAppBar","buttonClick","AppBar","position","Toolbar","IconButton","edge","useParams","decodedToken","decodeURIComponent","goBack","overflow","videoId","playlistId","snippet","channelTitle","thumbnails","medium","renderResults","youtubePlayerstore","Loop","loop","opts","window","innerWidth","toString","playerVars","autoplay","list","onStateChange","event","YouTube","PlayerState","PAUSED","target","playVideo","Checkbox","defaultChecked","checked","SetLoop","path","exact","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.d1423f3e.chunk.js","sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\"\nimport { AsyncTrunk } from \"mobx-sync\"\nimport { SearchCache } from \"../Models/Cache\"\nimport { Preview } from \"../Models/Preview\"\nimport { YtSearchResult } from \"../Models/Youtube\"\nimport { format, formatDistance, formatRelative, subDays } from \"date-fns\"\n\nexport default class Store {\n public IsHydrated = false\n\n private ReleaseDate = new Date(2021,11,30)\n\n public IsFirstFun = false\n public SearchCaches: SearchCache[] = []\n public LastPlays: Preview[] = []\n\n public get LastPlaysDesc(): Preview[] {\n return this.LastPlays.slice().reverse().slice(0, 5)\n }\n\n constructor() {\n makeAutoObservable(this)\n }\n\n public SetHydrated() {\n this.IsHydrated = true\n\n //reset data after release\n if(new Date() < this.ReleaseDate)\n {\n console.log('reset local data')\n this.LastPlays = []\n this.SearchCaches = []\n this.ReleaseDate = new Date()\n }\n }\n\n public AddSearch(\n term: string,\n type: string,\n result: YtSearchResult,\n pageToken?: string\n ) {\n const newSearchCache: SearchCache = {\n Term: term,\n Created: new Date(),\n SearchResult: result,\n PageToken: pageToken,\n Type: type\n }\n\n this.SearchCaches.push(newSearchCache)\n }\n\n public AddLastPlay(\n id: string,\n type: \"video\" | \"playlist\",\n title: string,\n author: string,\n thumbnailUrl: string\n ) {\n const foundIndex = this.LastPlays.findIndex((x) => x.id === id)\n\n if (foundIndex > -1) {\n this.LastPlays.splice(foundIndex, 1)\n }\n this.LastPlays.push({\n id,\n type,\n title,\n author,\n thumbnailUrl,\n created: new Date()\n })\n }\n\n public Get(term: string, type: string, pageToken?: string) {\n const expireInDays = 7\n\n const dateLastWeek = subDays(new Date(), expireInDays)\n //const myDate = new Date(this.SearchCaches[0].Created)\n //console.log(\"dateLastWeek\", dateLastWeek)\n //console.log(\"date\", myDate)\n\n //console.log(\"notExpiredYet\", dateLastWeek < myDate)\n\n return this.SearchCaches.find(\n (x) =>\n x.Term === term &&\n x.PageToken === pageToken &&\n x.Type === type &&\n dateLastWeek < new Date(x.Created)\n )\n }\n}\nexport const cacheStore = new Store()\n\nconst trunk = new AsyncTrunk(cacheStore, { storage: localStorage })\ntrunk.init().then(() => {\n cacheStore.SetHydrated()\n\n // const caches = cacheStore.SearchCaches.map((sc) => {\n // return { ...sc, SearchResult: undefined }\n // })\n console.log(\"LastPlays\", toJS(cacheStore.LastPlays))\n //console.log(\"plays\", toJS(cacheStore.LastPlays))\n})\n","import { IConfig } from \"./IConfig\"\nconst isProd = process.env.NODE_ENV === \"production\"\n\nconst DevConfig: IConfig = {\n Env: \"Dev\",\n SocketServer: \"http://localhost:2000\",\n YoutubeApiKey: \"AIzaSyCgcXo5mfEuppRfCs2pivQOWfSDwHrnPgQ\", ////MyFirstProject\n ClientId:\n \"129451978980-o6lkhioevr1d6jgc3bigdaoqkbvpgvmt.apps.googleusercontent.com\",\n ClientSecret: \"10ke3qPj9Pzh_I_qLRGKZBHk\"\n}\n\nconst ProdConfig = {\n Env: \"Production\",\n SocketServer: \"http://localhost:2000\",\n YoutubeApiKey: \"AIzaSyAyVQ3AvYLAOTSTAvj7SHznfZ15ZS8wog8\", //Youtubeapi\n ClientId:\n \"129451978980-o6lkhioevr1d6jgc3bigdaoqkbvpgvmt.apps.googleusercontent.com\",\n ClientSecret: \"10ke3qPj9Pzh_I_qLRGKZBHk\"\n}\nexport default isProd ? ProdConfig : DevConfig\n//export default ProdConfig\n","import { Container, CssBaseline } from \"@material-ui/core\"\nimport React from \"react\"\nimport { makeStyles } from \"@material-ui/core/styles\"\n\ninterface IProps {}\n\nconst useStyles = makeStyles((theme) => ({\n layout: {\n width: \"auto\",\n flex: 1,\n display: \"flex\"\n // [theme.breakpoints.up(600 + theme.spacing(2) * 2)]: {\n // width: 600,\n // marginLeft: \"auto\",\n // marginRight: \"auto\",\n // },\n },\n container: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\"\n }\n}))\n\nconst MyContainer: React.FC = ({ children }) => {\n const classes = useStyles()\n return (\n
\n \n \n {children}\n \n
\n )\n}\n\nexport default MyContainer\n","import { Grid, makeStyles, Paper } from \"@material-ui/core\"\nimport React from \"react\"\nimport classNames from \"classnames\"\ninterface IProps {\n size?: \"small\" | \"normal\"\n onClick?: () => void\n}\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n padding: theme.spacing(2),\n [theme.breakpoints.up(600 + theme.spacing(3) * 2)]: {\n marginTop: theme.spacing(6),\n marginBottom: theme.spacing(6),\n padding: theme.spacing(3)\n }\n },\n paperSmall: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n padding: theme.spacing(2),\n [theme.breakpoints.up(600 + theme.spacing(3) * 2)]: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n padding: theme.spacing(3)\n }\n }\n}))\n\nconst MyPaper: React.FC = ({ children, size }) => {\n const classes = useStyles()\n const style = size === \"small\" ? classes.paperSmall : classes.paper\n //classNames('foo', { bar: true });\n // const myStyles = classNames(\"foo\", \"bar\") // => 'foo bar'\n return (\n <>\n \n \n \n {children}\n \n \n \n \n )\n}\n\nexport default MyPaper\n\nMyPaper.defaultProps = {\n size: \"normal\"\n}\n","import axios, { AxiosError, AxiosResponse } from \"axios\"\nimport Config from \"../Config/Config\"\nimport { YtSearchResult, YtSearchOptions } from \"../Models/Youtube\"\nimport { cacheStore } from \"../Cache/CacheStore\"\n\nconst baseYtUrl = `https://youtube.googleapis.com/youtube/v3/search?key=${Config.YoutubeApiKey}`\n\nconst json2Qs = (obj: any) => {\n const queryString = Object.entries(obj)\n .map(([key, value]) => {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value as string)}`\n })\n .join(\"&\")\n\n return queryString\n}\n\nexport class YouTubeService {\n public static SearchCached(\n term: string,\n type: \"video\" | \"playlist\",\n nextPageToken?: string\n ) {\n return new Promise((resolve, reject) => {\n //check cachStore First\n const cachedSearch = cacheStore.Get(term, type, nextPageToken)\n if (cachedSearch !== undefined) {\n console.log(\"return cached result\")\n resolve(cachedSearch.SearchResult)\n return\n }\n\n //no chache check api\n YouTubeService.Search(term, type, nextPageToken)\n .then((result) => {\n //add to cache\n cacheStore.AddSearch(term, type, result, nextPageToken)\n resolve(result)\n })\n .catch((error) => {\n reject(error)\n })\n })\n }\n\n public static Search(\n term: string,\n type: \"video\" | \"playlist\",\n nextPageToken?: string\n ) {\n return new Promise((resolve, reject) => {\n const options: YtSearchOptions = {\n part: \"snippet\",\n q: term,\n type,\n //type: \"video\",\n //type: \"playlist\",\n maxResults: 50\n }\n if (nextPageToken) {\n options.pageToken = nextPageToken\n }\n const url = `${baseYtUrl}&${json2Qs(options)}`\n\n axios\n .get(url, {\n headers: {\n \"Content-type\": \"application/json\"\n }\n })\n .then((response: AxiosResponse) => {\n resolve(response.data)\n })\n .catch((error: AxiosError) => {\n console.log(\n \"axios\",\n error.message,\n error.response?.data.error.message\n )\n reject(error)\n })\n })\n }\n\n public static SearchAuthenticated(\n accessToken: string,\n term: string,\n nextPageToken?: string\n ) {\n return new Promise((resolve, reject) => {\n const options: YtSearchOptions = {\n part: \"snippet\",\n q: term,\n type: \"video\"\n // pageToken: nextPageToken\n }\n if (nextPageToken) {\n options.pageToken = nextPageToken\n }\n const url = `${baseYtUrl}&${json2Qs(options)}`\n const bearerAuthorization = `Bearer ${accessToken}`\n\n axios\n .get(url, {\n headers: {\n \"Content-type\": \"application/json\",\n Authorization: bearerAuthorization\n }\n })\n .then((response: AxiosResponse) => {\n resolve(response.data)\n })\n .catch((error: AxiosError) => {\n console.log(\n \"axios\",\n error.message,\n //error.response?.statusText,\n error.response?.data.error.message\n )\n reject(error)\n })\n })\n }\n}\n","import { makeAutoObservable, toJS } from \"mobx\";\nimport { Preview } from \"../../../Models/Preview\";\nimport { YtSearchResult } from \"../../../Models/Youtube\";\nimport { YouTubeService } from \"../../../Services/YoutubeService\";\n\nexport default class Store {\n //private Searcher = new YTSearcher(Config.YoutubeApiKey)\n public IsLoading = false;\n //public IsAuthenticated = false\n public IsAuthenticated = true; // google loging disabled for now\n private AccessToken = \"\";\n\n public SearchResult?: YtSearchResult = undefined;\n public SearchTerm = \"\";\n public Error = \"\";\n public Previews: Preview[] = [\n {\n id: \"PLZAP8XDpl7gfulKkggRPPuREOS6O7yZI8\",\n type: \"playlist\",\n title: \"The Pechorsk Exclusion Zone Semi-Official Radio\",\n author: \"PAK-GG\",\n thumbnailUrl:\n \"https://i.ytimg.com/vi/j_podzD4cSA/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLB5vOQ2udQvu8mgJBw1ICbxQXJejg\",\n created: new Date(),\n },\n {\n id: \"Yy9La6YXNqI\",\n type: \"video\",\n title: \"Fallout 4 Radio Songs Diamond City Station Full\",\n author: \"Sky Gamer\",\n thumbnailUrl:\n \"https://i.ytimg.com/vi/Yy9La6YXNqI/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDX-HT2WOet2ztPwhBq2okCEJnWqg\",\n created: new Date(),\n },\n {\n id: \"KKkEklLLgS0\",\n type: \"video\",\n title: \"Stranger Things Retro Synthwave Mixtape\",\n author: \"Sky Gamer\",\n thumbnailUrl:\n \"https://i.ytimg.com/vi/KKkEklLLgS0/hqdefault.jpg?sqp=-oaymwEcCOADEI4CSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA7Ttqpr3vJKkavKE9LJWtrZYEbGg\",\n created: new Date(),\n },\n {\n id: \"PLM3nM2CXPLRpjg5Kgym5rPZ0S7jQKnLWZ\",\n type: \"playlist\",\n title: \"GO Weekend Playlists\",\n author: \"Superdopey\",\n thumbnailUrl: \"https://i.ytimg.com/vi/M-vpwvdZxG8/mqdefault.jpg\",\n created: new Date(),\n },\n {\n id: \"EJ08EoFVm2k\",\n type: \"video\",\n title:\n \"Armin van Buuren live at @A State Of Trance 950 (Jaarbeurs, Utrecht - The Netherlands)\",\n author: \"Armin van Buuren\",\n thumbnailUrl: \"https://i.ytimg.com/vi/EJ08EoFVm2k/mqdefault.jpg\",\n created: new Date(),\n },\n\n //\n ];\n constructor() {\n makeAutoObservable(this);\n //Config.\n }\n\n public async Search(\n search: string,\n type: \"video\" | \"playlist\",\n nextPageToken?: string\n ) {\n this.Error = \"\";\n\n this.IsLoading = true;\n this.SearchTerm = search;\n\n try {\n const result = await YouTubeService.SearchCached(\n search,\n type,\n nextPageToken\n );\n\n // console.log(\"search\", toJS(result))\n\n if (nextPageToken === undefined) {\n this.SearchResult = result;\n } else if (this.SearchResult !== undefined) {\n this.SearchResult.items.push(...result.items);\n this.SearchResult.nextPageToken = result.nextPageToken;\n this.SearchResult = { ...this.SearchResult };\n }\n } catch (error) {\n //console.log(\"error\", error)\n this.Error = \"An error occured\";\n } finally {\n this.IsLoading = false;\n }\n }\n\n public AuthenticateGoogle(accesToken: string) {\n this.AccessToken = accesToken;\n this.IsAuthenticated = true;\n }\n\n public ClearSearch() {\n this.SearchResult = undefined;\n }\n}\nexport const searchStore = new Store();\n","import { Grid, makeStyles } from \"@material-ui/core\"\nimport { ChevronRightOutlined } from \"@material-ui/icons\"\nimport React from \"react\"\nimport { Link } from \"react-router-dom\"\nimport { cacheStore } from \"../../../../Cache/CacheStore\"\nimport MyPaper from \"../../../../Components/MyPaper\"\ninterface IProps {\n id: string\n type: \"video\" | \"playlist\"\n title: string\n author: string\n thumbnailUrl: string\n inColumn?: boolean\n}\n\nconst useStyles = makeStyles((theme) => ({\n contentContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\"\n },\n img: {\n //marginRight: \"10px\"\n width: \"100%\",\n height: \"auto\",\n backgroundColor: \"#000\"\n }\n}))\n\nconst SearchResultButton: React.FC = ({\n id,\n author,\n title,\n inColumn,\n thumbnailUrl,\n type\n}) => {\n const classes = useStyles()\n\n const imageMd = inColumn ? 4 : 3\n const contentMd = inColumn ? 8 : 9\n\n //https://i.ytimg.com/vi/EJ08EoFVm2k/mqdefault.jpg\n return (\n cacheStore.AddLastPlay(id,type, title, author, thumbnailUrl)}\n >\n \n \n \n {title}\n \n \n
\n {title}\n
\n {author}\n
\n\n \n
\n \n
\n \n )\n}\n\nexport default SearchResultButton\n\nSearchResultButton.defaultProps = {\n inColumn: false\n}\n","import React from \"react\"\nimport Typography from \"@material-ui/core/Typography\"\nimport { searchStore } from \"../Store\"\nimport SearchResultButton from \"./SearchResultButton\"\ninterface IProps {\n inColumn?: boolean\n}\n\nconst AuthorPicks: React.FC = ({ inColumn }) => {\n const { Previews } = searchStore\n return (\n <>\n \n Author picks\n \n {Previews.map((preview, key) => (\n \n ))}\n \n )\n}\n\nexport default AuthorPicks\nAuthorPicks.defaultProps = {\n inColumn: false\n}\n","import React from \"react\"\nimport Typography from \"@material-ui/core/Typography\"\nimport { searchStore } from \"../Store\"\nimport SearchResultButton from \"./SearchResultButton\"\nimport { cacheStore } from \"../../../../Cache/CacheStore\"\ninterface IProps {\n inColumn?: boolean\n}\n\nconst LastPlaysList: React.FC = ({ inColumn }) => {\n const { LastPlaysDesc } = cacheStore\n return (\n <>\n \n Lasted played\n \n {LastPlaysDesc.map((lp, key) => (\n \n ))}\n \n )\n}\n\nexport default LastPlaysList\n\nLastPlaysList.defaultProps = {\n inColumn: false\n}\n","import Button from \"@material-ui/core/Button\"\nimport Link from \"@material-ui/core/Link\"\nimport { makeStyles } from \"@material-ui/core/styles\"\nimport TextField from \"@material-ui/core/TextField\"\nimport Typography from \"@material-ui/core/Typography\"\nimport { observer } from \"mobx-react\"\nimport React, { useEffect } from \"react\"\nimport { useForm } from \"react-hook-form\"\nimport { useHistory } from \"react-router-dom\"\nimport MyContainer from \"../../../Components/MyContainer\"\nimport MyPaper from \"../../../Components/MyPaper\"\nimport AuthorPicks from \"./Components/AuthorPicks\"\nimport LastPlaysList from \"./Components/LastPlaysList\"\nimport { searchStore } from \"./Store\"\nimport {\n GoogleLogin,\n GoogleLoginResponse,\n GoogleLoginResponseOffline\n} from \"react-google-login\"\nimport Config from \"../../../Config/Config\"\nimport { isOfflineResponse } from \"../../../Helpers/TypeHelpers\"\nimport { FormControlLabel, Grid, Radio, RadioGroup } from \"@material-ui/core\"\nimport { cacheStore } from \"../../../Cache/CacheStore\"\n\nconst useStyles = makeStyles((theme) => ({\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\ntype Inputs = {\n search: string\n type: string // \"video\" | \"playlist\"\n}\n\nfunction Copyright() {\n return (\n \n {\"Copyright © \"}\n \n @superdopey\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n
v1.0.1\n
\n )\n}\n\nfunction Search() {\n const classes = useStyles()\n const history = useHistory()\n const { register, handleSubmit, watch, errors, setValue } = useForm()\n\n useEffect(() => {\n if (history.action === \"POP\" && history.location.pathname === \"/\") {\n searchStore.ClearSearch()\n }\n\n register({\n name: \"type\"\n })\n\n //setValue(\"search\", \"asot 950\")\n setValue(\"type\", \"video\") //default\n }, [history])\n\n const onSubmit = (data: Inputs) => {\n history.push(`/result/${encodeURIComponent(data.search)}/${data.type}`)\n }\n\n const { IsAuthenticated } = searchStore\n const { LastPlaysDesc } = cacheStore\n\n const renderSearch = () => {\n if (!IsAuthenticated) {\n return null\n }\n\n const hasError = errors.search !== undefined\n const errorText = hasError ? errors.search?.message : \"\"\n\n return (\n \n \n \n\n {\n //console.log(\"value\", value)\n setValue(\"type\", value)\n }}\n >\n }\n label=\"Video\"\n />\n }\n label=\"Playlist\"\n />\n \n\n \n Search\n \n \n\n \n \n )\n }\n\n const renderGoogleButton = () => {\n if (IsAuthenticated) {\n return null\n }\n return (\n \n {\n if (!isOfflineResponse(response)) {\n searchStore.AuthenticateGoogle(response.accessToken)\n }\n }}\n onFailure={(responseGoogle) => {\n console.log(\"fail\", responseGoogle)\n }}\n cookiePolicy={\"single_host_origin\"}\n />\n \n )\n }\n\n const renderVideos = () => {\n if (LastPlaysDesc.length > 0) {\n return (\n \n \n \n \n \n \n \n \n )\n }\n\n return \n }\n\n return (\n \n {renderGoogleButton()}\n {renderSearch()}\n {renderVideos()}\n {/* \n \n */}\n \n )\n}\n\nexport default observer(Search)\n","import {\n GoogleLogin,\n GoogleLoginResponse,\n GoogleLoginResponseOffline\n} from \"react-google-login\"\n\nexport function isOfflineResponse(\n response: GoogleLoginResponse | GoogleLoginResponseOffline\n): response is GoogleLoginResponseOffline {\n return (response as GoogleLoginResponseOffline).code !== undefined\n}\n","import React from \"react\"\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\"\nimport AppBar from \"@material-ui/core/AppBar\"\nimport Toolbar from \"@material-ui/core/Toolbar\"\nimport Typography from \"@material-ui/core/Typography\"\nimport Button from \"@material-ui/core/Button\"\nimport IconButton from \"@material-ui/core/IconButton\"\nimport ArrowBack from \"@material-ui/icons/ArrowBack\"\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n menuButton: {\n marginRight: theme.spacing(2),\n },\n title: {\n flexGrow: 1,\n },\n })\n)\n\ninterface IProps {\n title: string\n buttonClick: () => void\n}\n\nconst MyAppBar: React.FC = ({ title, buttonClick }) => {\n const classes = useStyles()\n\n return (\n \n \n \n \n \n \n {title}\n \n \n \n )\n}\n\nexport default MyAppBar\n","import { Button } from \"@material-ui/core\"\nimport { observer } from \"mobx-react\"\nimport React, { useEffect } from \"react\"\nimport { useHistory, useParams } from \"react-router-dom\"\nimport MyAppBar from \"../../../Components/MyAppBar\"\nimport MyContainer from \"../../../Components/MyContainer\"\nimport MyPaper from \"../../../Components/MyPaper\"\nimport SearchResultButton from \"../Search/Components/SearchResultButton\"\n\nimport { searchStore } from \"../Search/Store\"\ninterface IProps {}\n\nconst SearchResultsPage: React.FC = () => {\n const { SearchResult, Error } = searchStore\n const { search, type, pageToken } = useParams<{\n search: string\n type: \"video\" | \"playlist\"\n pageToken?: string\n }>()\n const history = useHistory()\n const decodedToken =\n pageToken !== undefined ? decodeURIComponent(pageToken) : undefined\n\n useEffect(() => {\n searchStore.Search(decodeURIComponent(search), type, decodedToken)\n }, [search, decodedToken])\n\n const renderResults = () => {\n if (SearchResult === undefined || Error !== \"\") {\n return null\n }\n\n const renderNextButton = () => {\n return (\n {\n history.push(\n `/result/${encodeURIComponent(\n search\n )}/${type}/${encodeURIComponent(SearchResult.nextPageToken)}`\n )\n }}\n >\n Volgende\n \n )\n }\n\n return (\n \n {SearchResult.items.map((item, key) => {\n const id = type === \"video\" ? item.id.videoId : item.id.playlistId\n if (id === undefined) {\n return null\n }\n return (\n \n )\n })}\n\n {renderNextButton()}\n \n )\n }\n\n const renderError = () => {\n if (Error === \"\") {\n return null\n }\n return {Error}\n }\n\n return (\n \n history.goBack()} />\n {renderError()}\n {renderResults()}\n \n )\n}\n\nexport default observer(SearchResultsPage)\n","import { makeAutoObservable, runInAction } from \"mobx\"\nimport { Page } from \"ytsearcher\"\n\nexport default class Store {\n public Loop = true\n\n constructor() {\n makeAutoObservable(this)\n }\n\n public SetLoop(loop: boolean) {\n this.Loop = loop\n }\n}\nexport const youtubePlayerstore = new Store()\n","import React, { useEffect, useRef } from \"react\"\nimport { useParams } from \"react-router-dom\"\nimport YouTube, { Options } from \"react-youtube\"\nimport MyAppBar from \"../../Components/MyAppBar\"\nimport { useHistory } from \"react-router-dom\"\nimport MyContainer from \"../../Components/MyContainer\"\nimport MyPaper from \"../../Components/MyPaper\"\nimport { youtubePlayerstore } from \"./Store\"\nimport { observer } from \"mobx-react\"\nimport { Checkbox, FormControlLabel } from \"@material-ui/core\"\ninterface IProps {}\n\ninterface ParamTypes {\n id: string\n title: string\n type: \"video\" | \"playlist\"\n}\n\nconst YoutubePlayer: React.FC = () => {\n //const playerRef = useRef(null)\n const { id, title, type } = useParams()\n useEffect(() => {\n //mix list: RDEJ08EoFVm2k https://www.youtube.com/watch?v=EJ08EoFVm2k&list=RDEJ08EoFVm2k&start_radio=1&t=37\n //PL before 3nM2CXPLRq3VVDzs1VVVZNy4MAwr6SK\n //play list: https://www.youtube.com/playlist?list=PLM3nM2CXPLRq3VVDzs1VVVZNy4MAwr6SK\n //video: eqdB4wqfhhc\n }, [])\n\n const getHeight = () => {\n const width = window.innerWidth\n const height = width * 0.5\n return height.toString()\n }\n\n const { Loop } = youtubePlayerstore\n\n const opts: Options = {\n height: getHeight(),\n playerVars: {\n // https://developers.google.com/youtube/player_parameters\n autoplay: 1, \n list: type==='playlist'? id:undefined, //if list\n loop: Loop ? 1 : 0\n }\n }\n\n const renderPlayer = () => {\n //\n\n return (\n \n {\n if (event.data === YouTube.PlayerState.PAUSED) {\n event.target.playVideo()\n }\n }}\n />\n {\n youtubePlayerstore.SetLoop(checked)\n }}\n color=\"primary\"\n />\n }\n label=\"Loop\"\n />\n \n )\n }\n const history = useHistory()\n return (\n \n {\n history.goBack()\n }}\n />\n\n {renderPlayer()}\n \n )\n}\n\nexport default observer(YoutubePlayer)\n","import { observer } from \"mobx-react\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport \"./App.css\";\nimport { cacheStore } from \"./Cache/CacheStore\";\nimport Config from \"./Config/Config\";\nimport Search from \"./Screens/Youtube/Search/Search\";\nimport SearchResultsPage from \"./Screens/Youtube/SearchResultsPage/SearchResultsPage\";\nimport YoutubePlayer from \"./Screens/Youtube/YoutubePlayer\";\n\nconsole.log(\"Env\", Config.Env);\n//cacheStore\nfunction App() {\n if (!cacheStore.IsHydrated) {\n return null;\n }\n\n return (\n \n \n {/* \n \n \n \n \n */}\n \n \n \n {/* (/:pageToken) */}\n \n \n \n \n \n \n \n \n );\n}\n\nexport default observer(App);\n","import { ReportHandler } from \"web-vitals\"\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler): void => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport \"./index.css\"\nimport App from \"./App\"\nimport reportWebVitals from \"./reportWebVitals\"\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}