{"version":3,"sources":["components/core/StyledButton.js","useGlobal.js","components/MovieHeader/styles.js","components/MovieHeader/Header.js"],"names":["useStyles","makeStyles","theme","createStyles","root","typography","h6","marginRight","spacing","h40","height","padding","h28","defaultRoot","borderRadius","tagRoot","paddingLeft","paddingRight","textRoot","active","color","backgroundColor","palette","primary","main","dark","outlineActive","border","borderColor","textActive","inactive","common","grey","StyledButton","props","classes","variant","className","rest","variantClass","activeClass","heightClass","classNames","disabled","defaultProps","propsTypes","useHomeInfo","useSWR","fetcher","revalidateOnFocus","data","error","mutate","menus","banners","slots","recommends","setHomeInfo","isPending","useFetchedHomeInfo","useTopicVideosInfinite","topicId","sortKey","tagNames","page_size","tagNameSearch","qs","stringify","tag_name","useSWRInfinite","index","size","setSize","isValidating","items","flatten","map","topic","topic_id","get","topic_name","tags","count","isLoadingInitialData","isLoadingMore","isEmpty","length","isNotEnough","isReachingEnd","isRefreshing","setTopicVideos","useFetchedTopicVideosInfinite","useWatchHistory","videoId","fetcherWithToken","histories","setWatchHistory","useFetchedWatchHistory","useCollections","collections","setCollections","useFetchedCollections","useCollectionVideos","collection_id","collectionVideos","setCollectionVideos","useFetchedCollectionVideos","useVideoCollections","isAuthenticated","videoCollections","video_id","setVideoCollections","useFetchedVideoCollections","useQuota","refreshInterval","tabId","getTabID","getToken","quota","setQuota","useFetchedQuota","isQuotaEnough","device_in_use","device_limit","reserveQuotaFromStart","dispatch","history","reserveQuota","catch","err","console","log","type","checkQuotaFromPauseToPlay","useSearchVideosInfinite","query","searchedVideos","undefined","setSearchedVideos","useFetchedSearchInfinite","logoContainer","logoImage","width","minHeight","breakpoints","down","logotype","marginLeft","fontWeight","fontSize","whiteSpace","display","appBar","zIndex","drawer","boxShadow","justifyContent","animation","sticky","position","top","stickyPhantom","opacity","transition","stickyPhantomShow","toolbar","searchToolBar","hide","grow","flexGrow","navigationContainer","alignItems","listItem","listItemText","flex","search","subtitle2","searchOverride","searchInput","fade","black","transitions","create","searchFocused","cursor","searchButton","right","searchIcon","searchIconOpened","inputRoot","inputInput","inputcBox","positionEnd","messageContent","flexDirection","signupButton","up","minWidth","headerMenu","marginTop","headerMenuList","headerMenuItem","headerMenuButton","headerMenuButtonCollapse","headerIcon","headerIconCollapse","headerIconOutside","profileMenu","profileMenuUser","profileMenuItem","textDecoration","profileMenuIcon","text","hint","profileMenuLink","profileSub","light","profileSubTitle","profileSubBody","smallCaption","messageNotification","background","messageNotificationSide","messageNotificationBodySide","sendMessageButton","margin","marginBottom","textTransform","sendButtonIcon","white","userName","iconButton","test","Header","useUserState","userInfo","loginUrl","platform","useHistory","pushInstruction","useMatomo","textFieldRef","useRef","textFieldRefOfBar","searchQuery","parse","window","location","q","useTheme","isSm","useMediaQuery","defaultMatches","isXs","videoExportLink","axios","defaults","baseURL","name","userDispatch","useUserDispatch","useState","setProfileMenu","minimalMenu","setMinimalMenu","isSearchHover","setSearchHover","searchBarShow","setSearchBarShow","current","value","hasQuery","placeholder","intro_url","navlink","id","title","link","useEffect","changeStyleOnScroll","addEventListener","headerStyleChange","removeEventListener","listener","event","code","onSubmit","document","handleSearchHoverOpen","handleSearchHoverClose","pageYOffset","body","getElementsByTagName","classList","add","getElementById","remove","push","substr","AppBar","Toolbar","InputBase","inputRef","input","inputProps","maxLength","minLength","endAdornment","InputAdornment","IconButton","aria-label","onClick","Search","onMouseEnter","onMouseLeave","to","Skeleton","src","staticUrl","logo_url","alt","nickname","Hidden","smDown","List","page","i","key","ListItem","button","component","href","Typography","Box","mdUp","e","currentTarget","aria-haspopup","aria-controls","Menu","open","Boolean","anchorEl","onClose","paper","disableAutoFocusItem","item","MenuItem","match","Grid","container","direction","justify","xs","Divider","signOut"],"mappings":"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","file":"static/js/9.f16daed4.chunk.js","sourcesContent":["import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { makeStyles, createStyles } from \"@material-ui/core/styles\";\nimport classNames from \"classnames\";\n\nimport { Button } from \"@material-ui/core\";\n\nconst useStyles = makeStyles(theme =>\n createStyles({\n root: {\n ...theme.typography.h6,\n marginRight: theme.spacing(1),\n },\n h40: {\n height: 40,\n padding: \"8px 16px\",\n },\n h28: {\n height: 28,\n padding: \"6px 16px\",\n },\n defaultRoot: {\n // padding: \"8px 28px\",\n borderRadius: theme.spacing(2.5),\n // [theme.breakpoints.down(\"sm\")]: {\n // padding: \"8px 16px\",\n // },\n },\n tagRoot: {\n paddingLeft: 14,\n paddingRight: 14,\n borderRadius: theme.spacing(2),\n },\n textRoot: {\n // height:\n },\n active: {\n color: \"white\",\n backgroundColor: theme.palette.primary.main,\n \"&:hover\": {\n backgroundColor: theme.palette.primary.dark,\n color: \"white\",\n },\n },\n outlineActive: {\n color: theme.palette.primary.main,\n border: \"solid 1px\",\n borderColor: theme.palette.primary.main,\n backgroundColor: \"white\",\n \"&:hover\": {\n color: theme.palette.primary.dark,\n borderColor: theme.palette.primary.dark,\n backgroundColor: \"white\",\n },\n },\n textActive: {\n color: theme.palette.primary.main,\n backgroundColor: \"transparent\",\n \"&:hover\": {\n color: theme.palette.primary.main,\n backgroundColor: \"transparent\",\n },\n },\n inactive: {\n color: \"white\",\n backgroundColor: theme.palette.common.grey[300],\n \"&:hover\": {\n color: \"white\",\n backgroundColor: theme.palette.common.grey[300],\n },\n \"&:disabled\": {\n color: \"white\",\n backgroundColor: theme.palette.common.grey[300],\n },\n },\n }),\n);\n\nconst StyledButton = props => {\n const classes = useStyles();\n\n const { variant = \"default\", className, height = 40, ...rest } = props;\n\n const getVaraintClass = () => {\n if (variant === \"tag\") {\n return classes.tagRoot;\n }\n if (variant === \"text\") {\n return classes.textRoot;\n }\n\n return classes.defaultRoot;\n };\n\n const getActiveClass = () => {\n if (variant === \"outline\") {\n return classes.outlineActive;\n }\n\n if (variant === \"inactive\") {\n return classes.inactive;\n }\n\n if (variant === \"text\") {\n return classes.textActive;\n }\n\n return classes.active;\n };\n\n const variantClass = getVaraintClass();\n const activeClass = getActiveClass();\n const heightClass = variant === 'text' ? {} : { [classes.h28]: height === 28, [classes.h40]: height === 40 }\n return (\n \n );\n};\n\nStyledButton.defaultProps = {};\n\nStyledButton.propsTypes = {};\n\nexport default StyledButton;\n","import qs from \"query-string\";\nimport useSWR, { useSWRInfinite } from \"swr\";\nimport flatten from \"lodash/flatten\";\nimport get from \"lodash/get\";\nimport map from \"lodash/map\";\nimport { getTabID, getToken } from \"./utils/common\";\nimport {\n apiUrl,\n fetcher,\n fetcherWithToken,\n posterWithToken,\n reserveQuota,\n} from \"./clientAPI\";\n\nconst useFetchedHomeInfo = () => {\n const { data, error, mutate } = useSWR(`/api/v1/videos/`, fetcher, {\n revalidateOnFocus: false,\n });\n\n const { menus = [], banners = [], slots = [], recommends = {} } = data || {};\n const isPending = !data;\n const setHomeInfo = mutate;\n return { menus, banners, slots, recommends, setHomeInfo, error, isPending };\n};\n\nconst useFetchedTopicVideos = ({\n topicId,\n sortKey = \"played\",\n tagName = \"\",\n skip = 0,\n limit = 12,\n}) => {\n const tagNameSearch = `&tag_name=${tagName}`;\n const url = `/api/v1/videos/topic/${topicId ||\n \"all\"}?skip=${skip}&limit=${limit}&sort_key=${sortKey}${tagNameSearch}`;\n const { data, error, mutate } = useSWR(url, fetcher);\n\n const topic = data || {};\n const isPending = !data;\n const setTopicVideos = mutate;\n return { topic, isPending, setTopicVideos };\n};\n\nconst useFetchedTopicVideosInfinite = ({\n topicId = \"all\",\n sortKey = \"played\",\n tagNames = [],\n page_size = 12,\n}) => {\n const tagNameSearch = `&${qs.stringify({ tag_name: tagNames })}`;\n const { data, error, mutate, size, setSize, isValidating } = useSWRInfinite(\n index =>\n `/api/v1/videos/topic/${topicId ||\n \"all\"}?sort_key=${sortKey}${tagNameSearch}&page=${index +\n 1}&per_page=${page_size}`,\n fetcher,\n );\n\n const items = flatten(map(data, \"items\"));\n const topic = data\n ? {\n topic_id: get(data, \"0.topic_id\"),\n topic_name: get(data, \"0.topic_name\", \"\"),\n tag_name: get(data, \"0.tag_name\", \"\"),\n tags: get(data, \"0.tags\", []),\n count: get(data, \"0.count\"),\n items,\n }\n : {};\n const isLoadingInitialData = !data && !error;\n const isLoadingMore =\n isLoadingInitialData ||\n (size > 0 && data && typeof data[size - 1] === \"undefined\");\n const isEmpty = data?.[0]?.items?.length === 0;\n const isNotEnough = data?.[data.length - 1]?.count <= page_size;\n const isReachingEnd =\n isEmpty ||\n isNotEnough ||\n (data && data[data.length - 1]?.items?.length < page_size);\n const isRefreshing = isValidating && data && data.length === size;\n const setTopicVideos = mutate;\n return {\n topic,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setTopicVideos,\n };\n};\n\nconst useFetchedVideoInfo = videoId => {\n const { data, error, mutate } = useSWR(\n `/api/v1/videos/detail/${videoId}`,\n fetcher,\n );\n\n const videoInfo = data || {};\n const isPending = !data;\n const setVideoInfo = mutate;\n return { videoInfo, setVideoInfo, error, isPending };\n};\n\nconst useFetchedWatchHistory = () => {\n const { data, error, mutate } = useSWR(\n `/api/v1/users/watched`,\n fetcherWithToken,\n );\n\n const histories = data || [];\n const isPending = !data;\n const setWatchHistory = mutate;\n return { histories, setWatchHistory, error, isPending };\n};\n\nconst useFetchedCollections = () => {\n const { data, error, mutate } = useSWR(\n `/api/v1/users/collections`,\n fetcherWithToken,\n );\n\n const collections = data || [];\n const isPending = !data;\n const setCollections = mutate;\n return { collections, setCollections, error, isPending };\n};\n\nconst useFetchedCollectionVideos = collection_id => {\n const { data, error, mutate } = useSWR(\n `/api/v1/users/collection/${collection_id}`,\n fetcherWithToken,\n );\n\n const collectionVideos = data || {};\n const isPending = !data;\n const setCollectionVideos = mutate;\n return { collectionVideos, setCollectionVideos, error, isPending };\n};\n\nconst useFetchedVideoCollections = (videoId, isAuthenticated) => {\n const { data, error, mutate } = useSWR(\n videoId && isAuthenticated\n ? `/api/v1/users/video/${videoId}/collections`\n : null,\n fetcherWithToken,\n );\n\n const videoCollections = data || { video_id: videoId, collections: [] };\n const isPending = !data;\n const setVideoCollections = mutate;\n return { videoCollections, setVideoCollections, error, isPending };\n};\n\nconst useFetchedHeartbeat = videoId => {\n const tabId = getTabID();\n const { data, error, mutate } = useSWR(\n `/api/v1/videos/heartbeat/${videoId}?tid=${tabId}`,\n posterWithToken,\n );\n\n const heartbeat = data || {};\n\n const isPending = !data;\n const setHeartbeat = mutate;\n return { heartbeat, setHeartbeat, error, isPending };\n};\n\nconst useFetchedQuota = (refreshInterval = 0) => {\n const tabId = getTabID();\n const { data, error, mutate } = useSWR(\n getToken() ? `/api/v1/videos/quota?tid=${tabId}` : null,\n fetcherWithToken,\n {\n refreshInterval,\n },\n );\n\n const quota = data || {};\n\n const isPending = !data;\n const setQuota = mutate;\n return { quota, setQuota, error, isPending };\n};\n\nconst useFetchedSearch = ({ query, sortKey = \"played\", tagName = \"\" }) => {\n const tagNameSearch = `&tag_name=${tagName}`;\n const { data, error, mutate } = useSWR(\n `/api/v1/videos/search?q=${query}&sort_key=${sortKey}${tagNameSearch}`,\n fetcherWithToken,\n );\n\n const searchedVideos = data || {};\n const { items = undefined, tags = undefined } = searchedVideos;\n const isPending = !data;\n const setSearchedVideos = mutate;\n return { searchedVideos, items, tags, setSearchedVideos, error, isPending };\n};\n\nconst useFetchedSearchInfinite = ({\n query,\n sortKey = \"relevant\",\n tagNames = [],\n page_size = 24,\n}) => {\n const tagNameSearch = `&${qs.stringify({ tag_name: tagNames })}`;\n const { data, error, mutate, size, setSize, isValidating } = useSWRInfinite(\n index =>\n `/api/v1/videos/search?q=${query}&sort_key=${sortKey}${tagNameSearch}&page=${index +\n 1}&per_page=${page_size}`,\n fetcherWithToken,\n );\n\n const searchedVideos = data\n ? {\n tags: get(data, \"0.tags\"),\n items: flatten(map(data, \"items\")),\n }\n : {};\n const { items = undefined, tags = undefined } = searchedVideos;\n\n // const isPending = !data;\n const isLoadingInitialData = !data && !error;\n const isLoadingMore =\n isLoadingInitialData ||\n (size > 0 && data && typeof data[size - 1] === \"undefined\");\n const isEmpty = data?.[0]?.items?.length === 0;\n const isReachingEnd =\n isEmpty || (data && data[data.length - 1]?.items?.length < page_size);\n const isRefreshing = isValidating && data && data.length === size;\n const setSearchedVideos = mutate;\n return {\n searchedVideos,\n items,\n tags,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setSearchedVideos,\n };\n};\n\nconst useHomeInfo = () => {\n const {\n menus,\n banners,\n slots,\n recommends,\n isPending,\n setHomeInfo,\n } = useFetchedHomeInfo();\n\n return { menus, banners, slots, recommends, isPending };\n};\n\nconst useTopicVideos = ({ topicId, sortKey, tagName, skip, limit }) => {\n const { topic, isPending, setTopicVideos } = useFetchedTopicVideos({\n topicId,\n sortKey,\n tagName,\n skip,\n limit,\n });\n\n return { topic, isPending, setTopicVideos };\n};\n\nconst useTopicVideosInfinite = ({ topicId, sortKey, tagNames, page_size }) => {\n const {\n topic,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setTopicVideos,\n } = useFetchedTopicVideosInfinite({\n topicId,\n sortKey,\n tagNames,\n page_size,\n });\n return {\n topic,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setTopicVideos,\n };\n};\n\nconst useVideoInfo = videoId => {\n const { videoInfo, isPending, setVideoInfo } = useFetchedVideoInfo(videoId);\n\n return { videoInfo, isPending, setVideoInfo };\n};\n\nconst useWatchHistory = videoId => {\n const { histories, isPending, setWatchHistory } = useFetchedWatchHistory();\n\n return { histories, isPending, setWatchHistory };\n};\n\nconst useCollections = () => {\n const { collections, isPending, setCollections } = useFetchedCollections();\n\n return { collections, isPending, setCollections };\n};\n\nconst useCollectionVideos = collection_id => {\n const {\n collectionVideos,\n isPending,\n setCollectionVideos,\n } = useFetchedCollectionVideos(collection_id);\n\n return { collectionVideos, isPending, setCollectionVideos };\n};\n\nconst useVideoCollections = (videoId, isAuthenticated) => {\n const {\n videoCollections,\n isPending,\n setVideoCollections,\n } = useFetchedVideoCollections(videoId, isAuthenticated);\n\n return { videoCollections, isPending, setVideoCollections };\n};\n\nconst useQuota = ({ videoId, refreshInterval }) => {\n const { quota, isPending, setQuota } = useFetchedQuota(refreshInterval);\n const isQuotaEnough =\n quota.device_in_use + 1 <= quota.device_limit\n ? quota.device_in_use + 1\n : quota.device_limit;\n const reserveQuotaFromStart = (dispatch, history) => {\n return reserveQuota(videoId).catch(err => {\n console.log(\"reserveQuota wrong:\", err);\n dispatch({ type: \"SET_UNKNOWN_ERROR\" });\n });\n };\n const checkQuotaFromPauseToPlay = () => {\n return reserveQuota(videoId);\n };\n return {\n quota,\n isQuotaEnough,\n isPending,\n setQuota,\n reserveQuotaFromStart,\n checkQuotaFromPauseToPlay,\n };\n};\n\nconst useHeartbeat = videoId => {\n const { heartbeat, isPending, setHeartbeat } = useFetchedHeartbeat(videoId);\n\n return { heartbeat, isPending, setHeartbeat };\n};\n\nconst useSearchVideos = ({ query, sortKey, tagName }) => {\n const {\n searchedVideos,\n items,\n tags,\n setSearchedVideos,\n isPending,\n } = useFetchedSearch({ query, sortKey, tagName });\n\n return { searchedVideos, items, tags, isPending, setSearchedVideos };\n};\n\nconst useSearchVideosInfinite = ({ query, sortKey, tagNames }) => {\n const {\n searchedVideos,\n items,\n tags,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setSearchedVideos,\n } = useFetchedSearchInfinite({ query, sortKey, tagNames });\n\n return {\n searchedVideos,\n items,\n tags,\n isLoadingInitialData,\n isLoadingMore,\n isEmpty,\n isReachingEnd,\n isRefreshing,\n size,\n setSize,\n setSearchedVideos,\n };\n};\n\nexport {\n useHomeInfo,\n useTopicVideos,\n useVideoInfo,\n useWatchHistory,\n useCollections,\n useCollectionVideos,\n useVideoCollections,\n useQuota,\n useHeartbeat,\n useSearchVideos,\n useTopicVideosInfinite,\n useSearchVideosInfinite,\n};\n","import { makeStyles } from \"@material-ui/styles\";\nimport { fade } from \"@material-ui/core/styles/colorManipulator\";\n\nexport default makeStyles(theme => ({\n logoContainer: {},\n logoImage: {\n width: 280,\n minHeight: 30,\n height: \"100%\",\n [theme.breakpoints.down(\"sm\")]: {\n width: 180,\n },\n [theme.breakpoints.down(\"xs\")]: {\n width: 150,\n },\n },\n logotype: {\n color: \"black\",\n marginLeft: theme.spacing(2.5),\n marginRight: theme.spacing(2.5),\n fontWeight: 500,\n fontSize: 18,\n whiteSpace: \"nowrap\",\n [theme.breakpoints.down(\"xs\")]: {\n display: \"none\",\n },\n },\n appBar: {\n width: \"100vw\",\n height: 80,\n zIndex: theme.zIndex.drawer + 1,\n boxShadow: \"0 5px 15px 0 rgba(191, 191, 191, 0.25)\",\n backgroundColor: \"#ffffff\",\n justifyContent: \"center\",\n animation: \"fade-out 1s\",\n },\n sticky: {\n position: \"fixed!important\",\n top: 0,\n },\n stickyPhantom: {\n width: \"100vw\",\n height: 80,\n position: \"relative\",\n display: \"none\",\n opacity: 0,\n animation: \"fade-in 1s\",\n transition: \"all 1s linear\",\n },\n stickyPhantomShow: {\n display: \"block\",\n opacity: 1,\n },\n toolbar: {\n paddingLeft: \"6.5%\",\n paddingRight: \"6.5%\",\n },\n searchToolBar: {\n position: \"absolute\",\n width: \"100%\",\n zIndex: 10,\n backgroundColor: \"white\",\n justifyContent: \"center\",\n // TODO: changeme\n \"& > $searchFocused\": {\n width: 270,\n },\n },\n hide: {\n display: \"none!important\",\n },\n grow: {\n flexGrow: 1,\n },\n navigationContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginLeft: theme.spacing(3),\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: theme.spacing(0),\n },\n },\n listItem: {\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n listItemText: {\n flex: \"0 0 auto\",\n whiteSpace: \"nowrap\",\n color: \"black\",\n fontWeight: 700,\n \"&:hover\": {\n color: theme.palette.primary.dark,\n },\n },\n search: {\n ...theme.typography.subtitle2,\n display: \"inline-flex\",\n position: \"relative\",\n paddingLeft: theme.spacing(2.5),\n width: 320,\n height: 40,\n borderRadius: 30,\n [theme.breakpoints.down(\"md\")]: {\n width: 270,\n },\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100%\",\n },\n },\n searchOverride: {\n width: 270,\n },\n searchInput: {\n backgroundColor: fade(theme.palette.common.black, 0),\n transition: theme.transitions.create([\"background-color\"]),\n },\n searchFocused: {\n opacity: 1,\n cursor: \"pointer\",\n color: \"black\",\n backgroundColor: fade(theme.palette.common.black, 0.08),\n transition: theme.transitions.create([\"background-color\"]),\n },\n searchButton: {\n width: 18,\n right: theme.spacing(1.5),\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: theme.transitions.create(\"right\"),\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n },\n },\n searchIcon: {\n color: \"black\",\n opacity: 1,\n },\n searchIconOpened: {\n right: theme.spacing(1.25),\n },\n inputRoot: {\n width: \"100%\",\n borderRadius: 25,\n },\n inputInput: {\n ...theme.typography.inputcBox,\n },\n positionEnd: {\n marginLeft: theme.spacing(2),\n },\n messageContent: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n signupButton: {\n [theme.breakpoints.up(\"md\")]: {\n minWidth: 120,\n },\n },\n headerMenu: {\n marginTop: theme.spacing(7),\n },\n headerMenuList: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n headerMenuItem: {\n \"&:hover, &:focus\": {\n backgroundColor: theme.palette.primary.main,\n color: \"white\",\n },\n },\n headerMenuButton: {\n marginLeft: theme.spacing(2),\n padding: theme.spacing(0.5),\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: theme.spacing(1),\n },\n color: \"black\",\n },\n headerMenuButtonCollapse: {\n marginRight: theme.spacing(2),\n },\n headerIcon: {\n fontSize: 28,\n color: \"black\",\n },\n headerIconCollapse: {\n color: \"white\",\n },\n headerIconOutside: {\n fontSize: 28,\n color: \"rgba(255, 255, 255, 1)\",\n },\n profileMenu: {\n minWidth: 148,\n boxShadow: \"0 5px 5px 0 rgba(184, 184, 184, 0.15)\",\n borderRadius: 0,\n },\n profileMenuUser: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n profileMenuItem: {\n ...theme.typography.subtitle2,\n color: theme.palette.common.grey[600],\n textDecoration: \"none\",\n },\n profileMenuIcon: {\n marginRight: theme.spacing(2),\n color: theme.palette.text.hint,\n },\n profileMenuLink: {\n fontSize: 16,\n textDecoration: \"none\",\n \"&:hover\": {\n cursor: \"pointer\",\n },\n },\n profileSub: {\n backgroundColor: theme.palette.primary.light,\n \"&:hover\": {\n backgroundColor: theme.palette.primary.light,\n cursor: \"pointer\",\n },\n },\n profileSubTitle: {\n ...theme.typography.subtitle2,\n // color: \"black\",\n },\n profileSubBody: {\n ...theme.typography.smallCaption,\n // color: \"black\",\n },\n messageNotification: {\n height: \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover, &:focus\": {\n backgroundColor: theme.palette.background.light,\n },\n },\n messageNotificationSide: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n marginRight: theme.spacing(2),\n },\n messageNotificationBodySide: {\n alignItems: \"flex-start\",\n marginRight: 0,\n },\n sendMessageButton: {\n margin: theme.spacing(4),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n textTransform: \"none\",\n },\n sendButtonIcon: {\n marginLeft: theme.spacing(2),\n },\n white: {\n border: \"0\",\n padding: \"0.625rem 0\",\n marginBottom: \"20px\",\n color: \"#555\",\n backgroundColor: \"#fff !important\",\n boxShadow:\n \"0 4px 18px 0px rgba(0, 0, 0, 0.12), 0 7px 10px -5px rgba(0, 0, 0, 0.15)\",\n },\n userName: {\n color: \"#252e78\",\n },\n iconButton: {\n padding: 0,\n color: \"black\",\n \"&:hover\": {\n background: \"transparent\",\n },\n },\n test: {},\n}));\n","import React, { useState, useRef, useEffect } from \"react\";\nimport {\n AppBar,\n Avatar,\n Toolbar,\n IconButton,\n InputBase,\n Menu,\n MenuItem,\n Hidden,\n ListItem,\n List,\n Box,\n Typography,\n Grid,\n Divider,\n Button,\n InputAdornment,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport { Skeleton } from \"@material-ui/lab\";\nimport { useTheme } from \"@material-ui/styles\";\nimport {\n Person as AccountIcon,\n Search as SearchIcon,\n Menu as MenuIcon,\n} from \"@material-ui/icons\";\nimport { Link } from \"react-router-dom\";\nimport classNames from \"classnames\";\nimport { useHistory } from \"react-router-dom\";\nimport get from \"lodash/get\";\nimport isEmpty from \"lodash/isEmpty\";\nimport qs from \"query-string\";\n\n// styles\nimport useStyles from \"./styles\";\n\n// context\nimport { useMatomo } from \"@datapunt/matomo-tracker-react\";\nimport {\n useUserState,\n useUserDispatch,\n signOut,\n} from \"../../context/UserContext\";\n\nimport StyledButton from \"../../components/core/StyledButton\";\n\nimport { staticUrl, apiUrl } from \"../../utils/const\";\nimport axios from \"../../axios\";\nimport { useQuota } from \"../../useGlobal\";\n\nexport default function Header (props) {\n const classes = useStyles();\n\n // global\n const { isAuthenticated, userInfo, loginUrl, platform } = useUserState();\n const { quota, isPending } = useQuota({ refreshInterval: 5000 });\n const { device_limit = \"\", device_in_use = \"\" } = quota;\n const history = useHistory();\n const { pushInstruction } = useMatomo();\n\n const textFieldRef = useRef();\n const textFieldRefOfBar = useRef();\n\n const parsed = qs.parse(window.location.search);\n const searchQuery = parsed.q;\n\n const theme = useTheme();\n const isSm = useMediaQuery(theme.breakpoints.down(\"sm\"), {\n defaultMatches: false,\n });\n const isXs = useMediaQuery(theme.breakpoints.down(\"xs\"), {\n defaultMatches: false,\n });\n\n const videoExportLink = `${axios.defaults.baseURL}/api/v1/users/platform-video/${platform.name}/export`;\n const searchMaxLength = 30;\n const searchMinLength = 1;\n\n // global\n const userDispatch = useUserDispatch();\n\n // local\n const [profileMenu, setProfileMenu] = useState(null);\n const [minimalMenu, setMinimalMenu] = useState(null);\n const [isSearchHover, setSearchHover] = useState(false);\n const [searchBarShow, setSearchBarShow] = useState(false);\n const query =\n (textFieldRef.current && textFieldRef.current.value) ||\n (textFieldRefOfBar.current && textFieldRefOfBar.current.value);\n const hasQuery = !isEmpty(query);\n const userName = isSm\n ? \"\"\n : get(userInfo, \"user_type\") === 0\n ? get(userInfo, \"real_name\")\n : get(userInfo, \"org_name\");\n\n const placeholderText = \"搜尋電影、演員或導演\";\n const placeholder = !isXs && isSearchHover ? placeholderText : \"\";\n const { intro_url = \"\" } = platform;\n const contact_us_url = \"/contact-us\";\n\n const navlink = isAuthenticated\n ? [\n {\n id: 2,\n title: \"常見問題\",\n link: contact_us_url,\n },\n {\n id: 3,\n title: \"下載片單\",\n link: videoExportLink,\n },\n ]\n : [\n {\n id: 2,\n title: \"常見問題\",\n link: contact_us_url,\n },\n ];\n\n useEffect(() => {\n if (props.changeStyleOnScroll) {\n window.addEventListener(\"scroll\", headerStyleChange);\n }\n return function cleanup () {\n if (props.changeStyleOnScroll) {\n window.removeEventListener(\"scroll\", headerStyleChange);\n }\n };\n }, []);\n\n useEffect(() => {\n if (textFieldRef.current && !isEmpty(searchQuery)) {\n textFieldRef.current.value = searchQuery;\n }\n if (textFieldRefOfBar.current && !isEmpty(searchQuery)) {\n textFieldRefOfBar.current.value = searchQuery;\n }\n\n const listener = event => {\n if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\n console.log(\"Enter key was pressed. Run your function.\");\n onSubmit();\n }\n };\n document.addEventListener(\"keydown\", listener);\n return () => {\n document.removeEventListener(\"keydown\", listener);\n };\n }, []);\n\n const handleSearchHoverOpen = () => {\n if (!isXs) {\n setSearchHover(true);\n }\n };\n\n const handleSearchHoverClose = () => {\n if (!isXs) {\n setSearchHover(false);\n }\n };\n\n const headerStyleChange = () => {\n const { changeStyleOnScroll } = props;\n const windowsScrollTop = window.pageYOffset;\n if (windowsScrollTop > changeStyleOnScroll.height) {\n document.body\n .getElementsByTagName(\"header\")[0]\n .classList.add(classes[\"sticky\"]);\n document\n .getElementById(\"sticky-phantom\")\n .classList.add(classes[\"stickyPhantomShow\"]);\n } else {\n document.body\n .getElementsByTagName(\"header\")[0]\n .classList.remove(classes[\"sticky\"]);\n document\n .getElementById(\"sticky-phantom\")\n .classList.remove(classes[\"stickyPhantomShow\"]);\n }\n };\n\n const onSubmit = () => {\n // open search bar if the screensize is xs and search bar is hidden\n if (isXs && !searchBarShow) {\n setSearchBarShow(true);\n return;\n }\n const query = textFieldRef.current.value || textFieldRefOfBar.current.value;\n if (!isEmpty(query) && query.length > 0) {\n history.push(`/video/search?q=${query.substr(0, 30)}`);\n }\n };\n\n return (\n