spt-items-api/public/static/js/main.74b1ad8d.chunk.js.map
2021-10-13 14:42:24 +09:00

1 line
45 KiB
Plaintext

{"version":3,"sources":["state/ThemeMode.ts","components/Footer.tsx","dataaccess/save.ts","dataaccess/itemBackend.ts","state/ReactJsonViewThemes.ts","state/GlobalState.ts","components/DarkModeToggle.tsx","components/LocaleSelect.tsx","components/JsonTheme.tsx","components/HeaderForm.tsx","components/Header.tsx","pages/mainPageComponents/NavigationBreadcrumb.tsx","pages/mainPageComponents/SearchArea.tsx","pages/MainPage.tsx","theme/darkTheme.ts","theme/lightTheme.ts","App.tsx","theme/Theme.ts","reportWebVitals.ts","index.tsx"],"names":["ThemeMode","useStyles","makeStyles","theme","footerHolder","display","flex","flexDirection","alignItems","justifyContent","padding","Footer","classes","Box","className","Typography","SaveKeys","searchItem","query","locale","a","fetch","process","mode","method","headers","body","JSON","stringify","resp","status","json","items","console","error","getItem","id","requestUrl","getItemHierarchy","getLocaleList","ReactJsonViewThemes","preferedLocale","localStorage","PREFERED_LOCALE","storedPreferedJsonTheme","PREFERED_JSON_THEME","preferedColorScheme","PREFERED_COLOR_SCHEME","useGlobalState","create","set","setPreferedLocale","newLocale","setItem","_state","localesList","refreshLocalesList","localeList","preferedJsonViewerTheme","includes","setPreferedJsonViewerTheme","newJsonTheme","DARK_MODE","setPreferedColorScheme","newColorScheme","searchInput","setSearchInput","newInput","desiredSearchInput","setDesiredSearchInput","itemHierarchy","setHierarchy","newHierarchy","state","selectedItem","REACT_APP_SEARCH_FAKE_DATA","parse","undefined","setSelectedItem","newSelectedItem","buttonHolder","color","flexGrow","iconButton","ml","DarkModeToggle","useTheme","useCallback","palette","IconButton","sx","onClick","newTheme","LIGHT_MODE","localeHolder","select","LocaleSelect","useEffect","FormControl","fullWidth","InputLabel","Select","labelId","value","length","onChange","evt","target","map","idx","MenuItem","jsonHolder","configContainer","marginLeft","width","backgroundColor","background","paper","jsonThemeSelect","alignSelf","JsonTheme","label","form","HeaderForm","headerContainer","linksContainer","height","link","borderBottom","action","hover","Header","Link","underline","href","breadcrumbHolder","breadcrumb","text","secondary","cursor","currentItem","NavigationBreadcrumb","itemHierachyState","searchInputState","useState","currentHierarchy","setCurrentHierarchy","hierarchy","currItemID","_id","item","push","_parent","filter","elt","reverse","Breadcrumbs","variant","Name","_name","formatLink","toString","searchAreaHolder","maxHeight","autocomplete","SearchArea","lastSearch","setLastSearch","selectOptions","setSelecteOption","handleNameInput","input","searchResults","options","res","name","handleIDInput","itemJson","itemToCheck","itemObj","match","handleInput","displayItems","CircularProgress","size","src","style","marginTop","overflowY","Autocomplete","disablePortal","isOptionEqualToValue","option","getOptionLabel","inputValue","onInputChange","newValue","trim","event","selectedOption","find","renderInput","params","TextField","container","maxheight","searchContainer","MainPage","darkPalette","createPalette","default","grey","primary","common","white","disabled","lightBlue","yellow","lightPalette","black","blue","App","prefersDarkMode","useMediaQuery","localPreferedTheme","preferedTheme","ThemeProvider","createTheme","components","MuiLink","styleOverrides","root","textDecoration","MuiTextField","borderBottomColor","MuiInputBase","borderColor","MuiFormLabel","CssBaseline","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.74b1ad8d.chunk.js","sourcesContent":["export enum ThemeMode {\r\n LIGHT_MODE = 'light',\r\n DARK_MODE = 'dark'\r\n}","import { Box, Theme, Typography } from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n footerHolder: {\r\n display: 'flex',\r\n flex: '0 1 3vh',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0 10vw 0 10vw'\r\n }\r\n}))\r\n\r\nexport const Footer = () => {\r\n const classes = useStyles()\r\n\r\n return (\r\n <Box className={classes.footerHolder}>\r\n <Typography>SPT-Aki ©2021 Created by Rev and Shirito</Typography>\r\n </Box>\r\n )\r\n}\r\n","export enum SaveKeys {\r\n PREFERED_COLOR_SCHEME = 'items.sp-tarkov.com-prefered-color-scheme',\r\n PREFERED_JSON_THEME = 'items.sp-tarkov.com-prefered-json-theme',\r\n PREFERED_LOCALE = 'items.sp-tarkov.com-prefered-locale'\r\n}","import { ItemWithLocale } from '../dto/ItemWithLocale';\nimport { ItemHierarchy } from '../dto/ItemHierarchy';\n\nexport const searchItem = async (query: string, locale?: string): Promise<ItemWithLocale[]> => {\n const resp = await fetch(\n `${process.env.REACT_APP_BACKEND_URL}/api/search`,\n {\n mode: 'cors',\n method: 'post',\n headers: {'Content-Type': 'application/json'},\n body: JSON.stringify(locale ? {query, locale} : {query})\n },\n )\n if (resp.status === 200) {\n return (await resp.json()).items;\n } else if (resp.status >= 400) {\n console.error(resp)\n }\n return []\n}\n\nexport const getItem = async (id: string, locale?: string): Promise<ItemWithLocale | undefined> => {\n let requestUrl = `${process.env.REACT_APP_BACKEND_URL}/api/item?id=${id}`;\n if (locale) requestUrl = `${requestUrl}&locale=${locale}`\n const resp = await fetch(requestUrl,{mode: 'cors'})\n if (resp.status === 200) {\n return await resp.json();\n } else if (resp.status >= 400) {\n console.error(resp)\n }\n}\n\nexport const getItemHierarchy = async (id: string, locale?: string): Promise<ItemHierarchy | undefined> => {\n let requestUrl = `${process.env.REACT_APP_BACKEND_URL}/api/item/hierarchy?id=${id}`;\n if (locale) requestUrl = `${requestUrl}&locale=${locale}`\n const resp = await fetch(requestUrl,{mode: 'cors'})\n if (resp.status === 200) {\n return await resp.json();\n } else if (resp.status >= 400) {\n console.error(resp)\n }\n}\n\nexport const getLocaleList = async (): Promise<string[] | undefined> => {\n const resp = await fetch(\n `${process.env.REACT_APP_BACKEND_URL}/api/locales`,\n {mode: 'cors'},\n )\n if (resp.status === 200) {\n return await resp.json();\n } else if (resp.status >= 400) {\n console.error(resp)\n }\n}","// No choice but to hard code since it is only a type in the library\r\nexport const ReactJsonViewThemes = [\r\n 'apathy',\r\n 'apathy:inverted',\r\n 'ashes',\r\n 'bespin',\r\n 'brewer',\r\n 'bright:inverted',\r\n 'bright',\r\n 'chalk',\r\n 'codeschool',\r\n 'colors',\r\n 'eighties',\r\n 'embers',\r\n 'flat',\r\n 'google',\r\n 'grayscale',\r\n 'grayscale:inverted',\r\n 'greenscreen',\r\n 'harmonic',\r\n 'hopscotch',\r\n 'isotope',\r\n 'marrakesh',\r\n 'mocha',\r\n 'monokai',\r\n 'ocean',\r\n 'paraiso',\r\n 'pop',\r\n 'railscasts',\r\n 'rjv-default',\r\n 'shapeshifter',\r\n 'shapeshifter:inverted',\r\n 'solarized',\r\n 'summerfruit',\r\n 'summerfruit:inverted',\r\n 'threezerotwofour',\r\n 'tomorrow',\r\n 'tube',\r\n 'twilight'\r\n]","import { ThemeKeys } from 'react-json-view'\nimport create from 'zustand'\nimport { getLocaleList } from '../dataaccess/itemBackend'\nimport { SaveKeys } from '../dataaccess/save'\nimport { ItemData } from '../dto/ItemData'\nimport { ItemHierarchy } from '../dto/ItemHierarchy'\nimport { ReactJsonViewThemes } from './ReactJsonViewThemes'\nimport { ThemeMode } from './ThemeMode'\n\nexport interface GlobalState {\n preferedLocale: string\n setPreferedLocale: (newLocale: string) => void\n localesList: string[]\n refreshLocalesList: () => void\n\n preferedJsonViewerTheme: ThemeKeys\n setPreferedJsonViewerTheme: (newJsonTheme: string) => void\n\n preferedColorScheme: string\n setPreferedColorScheme: (newColorScheme: ThemeMode) => void\n\n searchInput: string\n setSearchInput: (newInput: string) => void\n\n desiredSearchInput: string\n setDesiredSearchInput: (newInput: string) => void\n\n itemHierarchy: ItemHierarchy\n setHierarchy: (newHierarchy: ItemHierarchy) => void\n\n selectedItem: ItemData | undefined\n setSelectedItem: (newSelectedItem: ItemData | undefined) => void\n}\n\nconst preferedLocale = localStorage.getItem(SaveKeys.PREFERED_LOCALE)\nconst storedPreferedJsonTheme = localStorage.getItem(\n SaveKeys.PREFERED_JSON_THEME,\n)\nconst preferedColorScheme = localStorage.getItem(SaveKeys.PREFERED_COLOR_SCHEME)\n\nexport const useGlobalState = create<GlobalState>((set) => ({\n // Locale\n preferedLocale: preferedLocale ? preferedLocale : 'en',\n setPreferedLocale: (newLocale: string) => {\n localStorage.setItem(SaveKeys.PREFERED_LOCALE, newLocale)\n set((_state) => ({ preferedLocale: newLocale }))\n },\n localesList: [],\n refreshLocalesList: async () => {\n const localeList = await getLocaleList()\n set((_state) => ({ localesList: localeList ? localeList : [] }))\n },\n\n // Json viewer theme\n preferedJsonViewerTheme:\n storedPreferedJsonTheme &&\n ReactJsonViewThemes.includes(storedPreferedJsonTheme)\n ? (storedPreferedJsonTheme as ThemeKeys)\n : (ReactJsonViewThemes[0] as ThemeKeys),\n setPreferedJsonViewerTheme: (newJsonTheme: string) => {\n localStorage.setItem(SaveKeys.PREFERED_JSON_THEME, newJsonTheme)\n set((_state) => ({ preferedJsonViewerTheme: newJsonTheme as ThemeKeys }))\n },\n\n // Prefered theme\n preferedColorScheme: preferedColorScheme\n ? preferedColorScheme\n : ThemeMode.DARK_MODE,\n setPreferedColorScheme: (newColorScheme: ThemeMode) => {\n localStorage.setItem(SaveKeys.PREFERED_COLOR_SCHEME, newColorScheme)\n set((_state) => ({ preferedColorScheme: newColorScheme }))\n },\n\n // SearchInput\n searchInput: '',\n setSearchInput: (newInput: string) =>\n set((_state) => ({ searchInput: newInput })),\n desiredSearchInput: '',\n setDesiredSearchInput: (newInput: string) =>\n set((_state) => ({ desiredSearchInput: newInput })),\n\n // Hierarchy\n itemHierarchy: {},\n setHierarchy: (newHierarchy: ItemHierarchy) =>\n set((state) => ({\n itemHierarchy: newHierarchy,\n })),\n\n // Selected item\n selectedItem: process.env.REACT_APP_SEARCH_FAKE_DATA\n ? JSON.parse(process.env.REACT_APP_SEARCH_FAKE_DATA)\n : undefined,\n setSelectedItem: (newSelectedItem: ItemData | undefined) =>\n set((_state) => ({ selectedItem: newSelectedItem })),\n}))\n","import { Box, IconButton, Theme } from '@mui/material'\r\nimport { useTheme } from '@mui/material/styles'\r\nimport Brightness4Icon from '@mui/icons-material/Brightness4'\r\nimport Brightness7Icon from '@mui/icons-material/Brightness7'\r\nimport { ThemeMode } from '../state/ThemeMode'\r\nimport { useGlobalState } from '../state/GlobalState'\r\nimport { useCallback } from 'react'\r\nimport { makeStyles } from '@mui/styles'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n buttonHolder: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'primary',\r\n flexGrow: 1,\r\n },\r\n iconButton: {\r\n ml: 1,\r\n },\r\n}))\r\n\r\nexport const DarkModeToggle = () => {\r\n const theme = useTheme()\r\n const classes = useStyles()\r\n const [preferedColorScheme, setPreferedColorScheme] = useGlobalState(\r\n useCallback(\r\n (state) => [state.preferedColorScheme, state.setPreferedColorScheme],\r\n [],\r\n ),\r\n )\r\n\r\n const toggleColor = () => {\r\n const newTheme =\r\n preferedColorScheme === ThemeMode.LIGHT_MODE\r\n ? ThemeMode.DARK_MODE\r\n : ThemeMode.LIGHT_MODE\r\n setPreferedColorScheme(newTheme)\r\n }\r\n\r\n return (\r\n <Box className={classes.buttonHolder}>\r\n {theme.palette.mode} mode\r\n <IconButton\r\n className={classes.iconButton}\r\n sx={{ ml: 1 }}\r\n onClick={toggleColor}\r\n color=\"inherit\"\r\n >\r\n {theme.palette.mode === 'dark' ? (\r\n <Brightness7Icon />\r\n ) : (\r\n <Brightness4Icon />\r\n )}\r\n </IconButton>\r\n </Box>\r\n )\r\n}\r\n","import { Select, MenuItem, Theme, Box, FormControl, InputLabel } from '@mui/material'\nimport {makeStyles} from '@mui/styles'\nimport { useCallback, useEffect } from 'react';\nimport { useGlobalState } from '../state/GlobalState'\n\nconst useStyles = makeStyles((theme: Theme) => ({\n localeHolder: {\n display: 'flex',\n flexGrow: 1,\n padding: '0.5vh 0 0.5vh 0'\n },\n select: {\n display: 'flex',\n flexGrow: 1\n },\n}))\n\n\n\nexport const LocaleSelect = () => {\n const classes = useStyles()\n const [preferedLocale, setPreferedLocale] = useGlobalState(useCallback(state => [state.preferedLocale, state.setPreferedLocale],[]))\n const [localesList, refreshLocalesList] = useGlobalState(useCallback(state => [state.localesList, state.refreshLocalesList],[]))\n\n useEffect(()=> refreshLocalesList(), [refreshLocalesList])\n\n return (\n <>\n <Box className={classes.localeHolder}>\n <FormControl fullWidth>\n <InputLabel id=\"locale-select\">Language</InputLabel>\n <Select\n className={classes.select}\n labelId=\"prefered-locale\"\n value={localesList.length > 0 ? preferedLocale : ''}\n onChange={(evt) => {\n if (!evt.target.value) return\n setPreferedLocale(evt.target.value)\n }}\n >\n {localesList.map((locale, idx) => (\n <MenuItem key={idx} value={locale}>\n {locale}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n </>\n )\n}\n","import {\r\n Box,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n Theme,\r\n} from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\nimport { ReactJsonViewThemes } from '../state/ReactJsonViewThemes'\r\nimport { SaveKeys } from '../dataaccess/save'\r\nimport { useGlobalState } from '../state/GlobalState'\r\nimport { useCallback } from 'react'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n jsonHolder: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n padding: '0.5vh 0 0.5vh 0'\r\n },\r\n configContainer: {\r\n display: 'flex',\r\n flexGrow: 0,\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n marginLeft: '1vw',\r\n width: '20vw',\r\n padding: '2vh 1vw 2vh 1vw',\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n jsonThemeSelect: {\r\n display: 'flex',\r\n alignSelf: 'stretch',\r\n },\r\n}))\r\n\r\nexport const JsonTheme = () => {\r\n const classes = useStyles()\r\n const [preferedJsonViewerTheme, setPreferedJsonViewerTheme] = useGlobalState(\r\n useCallback(\r\n (state) => [\r\n state.preferedJsonViewerTheme,\r\n state.setPreferedJsonViewerTheme,\r\n ],\r\n [],\r\n ),\r\n )\r\n return (\r\n <>\r\n <Box className={classes.jsonHolder}>\r\n <FormControl fullWidth>\r\n <InputLabel id=\"react-json-view-theme\">JSON theme</InputLabel>\r\n <Select\r\n labelId=\"react-json-view-theme\"\r\n value={preferedJsonViewerTheme}\r\n label=\"JSON theme\"\r\n onChange={(evt) => {\r\n if (!evt.target.value) return\r\n setPreferedJsonViewerTheme(evt.target.value)\r\n localStorage.setItem(\r\n SaveKeys.PREFERED_JSON_THEME,\r\n evt.target.value,\r\n )\r\n }}\r\n >\r\n {ReactJsonViewThemes.map((theme, idx) => (\r\n <MenuItem key={idx} value={theme}>\r\n {theme}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n </>\r\n )\r\n}\r\n","import { DarkModeToggle } from './DarkModeToggle'\nimport { LocaleSelect } from './LocaleSelect'\nimport { JsonTheme } from './JsonTheme'\nimport { Theme } from '@mui/material'\nimport { makeStyles } from '@mui/styles';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n form: {\n display: 'flex',\n flexDirection: 'row',\n flexGrow: 1,\n justifyContent: 'flex-end'\n },\n}));\n\nexport const HeaderForm = () => {\n const classes = useStyles();\n\n return (\n <>\n <form className={classes.form}>\n <DarkModeToggle />\n <LocaleSelect />\n <JsonTheme />\n </form>\n </>\n )\n}\n","import { Box, Link, Theme } from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\nimport { HeaderForm } from './HeaderForm';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n headerContainer: {\r\n display: 'flex',\r\n flex: '0 1 3vh',\r\n flexDirection: 'row',\r\n backgroundColor: theme.palette.background.paper,\r\n alignItems: 'center',\r\n padding: '0 10vw 0 10vw',\r\n },\r\n linksContainer: {\r\n display: 'flex',\r\n flexGrow: 2,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n height: '100%',\r\n },\r\n link: {\r\n display: 'flex',\r\n padding: '0 1vw 0 1vw',\r\n height: '100%',\r\n alignItems: 'center',\r\n borderBottom: `1px solid transparent`,\r\n '&:hover': {\r\n borderBottom: `1px solid ${theme.palette.action.hover}`,\r\n },\r\n },\r\n}))\r\n\r\nexport const Header = () => {\r\n const classes = useStyles()\r\n\r\n return (\r\n <>\r\n <Box className={classes.headerContainer}>\r\n <Box className={classes.linksContainer}>\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n href=\"https://www.sp-tarkov.com/\"\r\n className={classes.link}\r\n >\r\n Website\r\n </Link>\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n href=\"https://mods.sp-tarkov.com/\"\r\n className={classes.link}\r\n >\r\n Workshop\r\n </Link>\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n href=\"https://docs.sp-tarkov.com/\"\r\n className={classes.link}\r\n >\r\n Documentation\r\n </Link>\r\n </Box>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexGrow: 1,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n }}\r\n >\r\n <HeaderForm/>\r\n </Box>\r\n </Box>\r\n </>\r\n )\r\n}\r\n","import { useState } from 'react'\r\nimport { Box, Breadcrumbs, Link, Theme, Typography } from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\nimport { useEffect } from 'react'\r\nimport { useGlobalState } from '../../state/GlobalState'\r\nimport { ItemWithLocale } from '../../dto/ItemWithLocale'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n breadcrumbHolder: {\r\n display: 'flex',\r\n flex: '0 1 3vh',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n padding: '0 10vw 0 10vw',\r\n borderBottom: `1px solid ${theme.palette.background.paper}`,\r\n },\r\n breadcrumb: {\r\n display: 'flex',\r\n flex: '0 1 3vh',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n },\r\n link: {\r\n color: theme.palette.text.secondary,\r\n display: 'flex',\r\n padding: '0 1vw 0 1vw',\r\n height: '100%',\r\n alignItems: 'center',\r\n borderBottom: `1px solid transparent`,\r\n '&:hover': {\r\n color: theme.palette.action.hover,\r\n cursor: 'pointer',\r\n },\r\n },\r\n currentItem: {\r\n cursor: 'default',\r\n borderBottom: `1px solid ${theme.palette.action.hover}`,\r\n },\r\n}))\r\n\r\nexport const NavigationBreadcrumb = () => {\r\n const classes = useStyles()\r\n const setSelectedItem = useGlobalState((state) => state.setSelectedItem)\r\n const itemHierachyState = useGlobalState((state) => state.itemHierarchy)\r\n const [searchInputState, setSearchInput] = useGlobalState((state) => [\r\n state.searchInput,\r\n state.setSearchInput,\r\n ])\r\n const selectedItem = useGlobalState((state) => state.selectedItem)\r\n const [currentHierarchy, setCurrentHierarchy] = useState<ItemWithLocale[]>([])\r\n\r\n useEffect(() => {\r\n const hierarchy: ItemWithLocale[] = []\r\n let currItemID: string | undefined = selectedItem?._id\r\n while (currItemID) {\r\n const item: ItemWithLocale = itemHierachyState[currItemID]\r\n hierarchy.push(item)\r\n currItemID = item?.item?._parent\r\n }\r\n setCurrentHierarchy(hierarchy.filter(elt => elt !== undefined && elt !== null).reverse())\r\n }, [selectedItem, itemHierachyState])\r\n\r\n const formatLink = (item: ItemWithLocale, idx: string) => {\r\n if (\r\n searchInputState === item.locale.Name ||\r\n searchInputState === item.item._id ||\r\n searchInputState === item.item._name\r\n ) {\r\n return (\r\n <Typography key={item.item._id} variant=\"body2\" className={classes.currentItem}>\r\n {item.locale.Name ? item.locale.Name : item.item._name}\r\n </Typography>\r\n )\r\n } else {\r\n return (\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n key={idx}\r\n onClick={() => {\r\n setSearchInput(item.item._id)\r\n setSelectedItem(undefined)\r\n }}\r\n className={classes.link}\r\n >\r\n <Typography variant=\"body2\">{item.locale.Name ? item.locale.Name : item.item._name}</Typography>\r\n </Link>\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <Box className={classes.breadcrumbHolder}>\r\n <Breadcrumbs aria-label=\"breadcrumb\" className={classes.breadcrumb}>\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n key={'home'}\r\n href=\"/\"\r\n className={classes.link}\r\n >\r\n <Typography variant=\"body2\">Home</Typography>\r\n </Link>\r\n {currentHierarchy.map((item, idx) => formatLink(item, idx.toString()))}\r\n </Breadcrumbs>\r\n </Box>\r\n )\r\n}\r\n","import { SyntheticEvent, useCallback, useEffect, useState } from 'react'\r\nimport {\r\n Autocomplete,\r\n Box,\r\n CircularProgress,\r\n Theme,\r\n Typography,\r\n} from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\nimport TextField from '@mui/material/TextField'\r\nimport ReactJson from 'react-json-view'\r\nimport {\r\n getItem,\r\n getItemHierarchy,\r\n searchItem,\r\n} from '../../dataaccess/itemBackend'\r\nimport { ItemOption } from '../../dto/ItemOption'\r\nimport { useGlobalState } from '../../state/GlobalState'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n searchAreaHolder: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n flexDirection: 'column',\r\n background: theme.palette.background.paper,\r\n padding: '2vh 2vw 2vh 2vw',\r\n },\r\n jsonHolder: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n background: theme.palette.background.paper,\r\n maxHeight: '80vh',\r\n },\r\n autocomplete: {},\r\n}))\r\n\r\nexport const SearchArea = () => {\r\n const classes = useStyles()\r\n const preferedLocale = useGlobalState((state) => state.preferedLocale)\r\n const preferedJsonViewerTheme = useGlobalState(\r\n useCallback((state) => state.preferedJsonViewerTheme, []),\r\n )\r\n const [searchInputState, setSearchInput] = useGlobalState((state) => [\r\n state.searchInput,\r\n state.setSearchInput,\r\n ])\r\n const [lastSearch, setLastSearch] = useState<string>('')\r\n const setHierarchy = useGlobalState((state) => state.setHierarchy)\r\n const [selectedItem, setSelectedItem] = useGlobalState((state) => [\r\n state.selectedItem,\r\n state.setSelectedItem,\r\n ])\r\n const [selectOptions, setSelecteOption] = useState<ItemOption[]>([])\r\n const searchThreshold = 3\r\n\r\n const handleNameInput = async (input: string) => {\r\n const searchResults = await searchItem(input, preferedLocale)\r\n const options = searchResults?.map((res) => ({\r\n id: res.item._id,\r\n name: res.locale.Name,\r\n }))\r\n setSelecteOption(options ? options : [])\r\n }\r\n\r\n const handleIDInput = useCallback(async (input: string) => {\r\n const itemJson = await getItem(input, preferedLocale)\r\n if (itemJson) {\r\n const itemToCheck = itemJson.item\r\n setSelectedItem(itemToCheck)\r\n const itemObj = { id: itemToCheck._id, name: itemJson.locale.Name }\r\n setLastSearch(itemObj.name)\r\n setSearchInput(itemObj.name)\r\n setSelecteOption([itemObj])\r\n\r\n // Update hierachy\r\n const itemHierarchy = await getItemHierarchy(\r\n itemToCheck._id,\r\n preferedLocale,\r\n )\r\n setHierarchy(itemHierarchy ? itemHierarchy : {})\r\n } else {\r\n setSelectedItem(undefined)\r\n setLastSearch('')\r\n setSearchInput('')\r\n }\r\n // eslint-disable-next-line\r\n }, []) // Need to only be created on startup\r\n\r\n useEffect(() => {\r\n if (searchInputState && searchInputState.match(/([a-z0-9]{24})/)) {\r\n handleIDInput(searchInputState)\r\n }\r\n }, [handleIDInput, searchInputState])\r\n\r\n const handleInput = async (input: string) => {\r\n if (!input || input.length < searchThreshold) {\r\n setSelectedItem(undefined)\r\n setSelecteOption([])\r\n return\r\n }\r\n // Have the input item data already been fetched ?\r\n if (input === lastSearch || input === selectedItem?._id) return\r\n setLastSearch(input)\r\n\r\n if (input.match(/([a-z0-9]{24})/)) await handleIDInput(input)\r\n else await handleNameInput(input)\r\n }\r\n\r\n // If loading\r\n let displayItems = <CircularProgress size={100} />\r\n\r\n // If finished loading\r\n if (selectedItem !== undefined)\r\n displayItems = (\r\n <ReactJson\r\n src={selectedItem}\r\n theme={preferedJsonViewerTheme}\r\n style={{\r\n marginTop: '2vh',\r\n width: '100%',\r\n overflowY: 'auto',\r\n display: 'flex',\r\n }}\r\n />\r\n )\r\n else displayItems = <Typography>No data to display</Typography>\r\n\r\n return (\r\n <Box className={classes.searchAreaHolder}>\r\n <Autocomplete\r\n disablePortal\r\n options={selectOptions.map((elt) => elt.name)}\r\n isOptionEqualToValue={(option, value) => option === value}\r\n className={classes.autocomplete}\r\n getOptionLabel={(option) => option}\r\n inputValue={searchInputState}\r\n onInputChange={async (evt: SyntheticEvent, newValue: string) => {\r\n if (!evt) return\r\n setSelectedItem(undefined)\r\n setSearchInput(newValue)\r\n await handleInput(newValue.trim())\r\n }}\r\n value={searchInputState}\r\n onChange={async (event: SyntheticEvent, newValue: string | null) => {\r\n if (newValue) {\r\n const selectedOption = selectOptions.find(\r\n (elt) => elt.name === newValue,\r\n )\r\n if (selectedOption) await handleIDInput(selectedOption.id)\r\n }\r\n }}\r\n renderInput={(params) => (\r\n <TextField {...params} label=\"Search by name or ID\" />\r\n )}\r\n />\r\n <Box className={classes.jsonHolder}>{displayItems}</Box>\r\n </Box>\r\n )\r\n}\r\n","import {Box, Theme} from '@mui/material'\r\nimport {Footer} from '../components/Footer'\r\nimport {Header} from '../components/Header'\r\nimport {NavigationBreadcrumb} from './mainPageComponents/NavigationBreadcrumb'\r\nimport {SearchArea} from './mainPageComponents/SearchArea'\r\nimport {makeStyles} from \"@mui/styles\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n container: {\r\n background: 'background.default',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n height: '100vh',\r\n maxheight: '100vh',\r\n },\r\n searchContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n padding: '2vh 2vw 1vh 2vw'\r\n }\r\n}))\r\n\r\nexport const MainPage = () => {\r\n const classes = useStyles();\r\n return (\r\n <>\r\n <Box className={classes.container}>\r\n <Header/>\r\n <NavigationBreadcrumb/>\r\n <Box className={classes.searchContainer}>\r\n <SearchArea/>\r\n </Box>\r\n <Footer/>\r\n </Box>\r\n </>\r\n )\r\n}\r\n","import {ThemeMode} from '../state/ThemeMode';\r\nimport {common, grey, lightBlue, yellow} from '@mui/material/colors';\r\nimport createPalette from \"@mui/material/styles/createPalette\";\r\n\r\nexport const darkPalette = createPalette({\r\n mode: ThemeMode.DARK_MODE,\r\n background: {\r\n default: grey[800],\r\n paper: grey[900]\r\n },\r\n text: {\r\n primary: common.white,\r\n secondary: grey[400],\r\n disabled: lightBlue[100]\r\n },\r\n action: {\r\n hover: yellow[700]\r\n },\r\n});","import {ThemeMode} from '../state/ThemeMode';\r\nimport {blue, common, grey} from \"@mui/material/colors\";\r\nimport createPalette from \"@mui/material/styles/createPalette\";\r\n\r\nexport const lightPalette = createPalette({\r\n mode: ThemeMode.LIGHT_MODE,\r\n background: {\r\n default: grey[100],\r\n paper: grey[300]\r\n },\r\n text: {\r\n primary: common.black,\r\n secondary: blue[500],\r\n disabled: grey[600]\r\n },\r\n action: {\r\n hover: blue[500],\r\n }\r\n});","import {ThemeProvider} from '@mui/material/styles'\r\nimport {MainPage} from './pages/MainPage'\r\nimport {ThemeMode} from './state/ThemeMode'\r\nimport {CssBaseline, useMediaQuery} from '@mui/material'\r\nimport {useEffect} from \"react\";\r\nimport {darkPalette} from \"./theme/darkTheme\";\r\nimport {lightPalette} from \"./theme/lightTheme\";\r\nimport {getTheme} from \"./theme/Theme\";\r\nimport {SaveKeys} from \"./dataaccess/save\";\r\nimport { useGlobalState } from './state/GlobalState'\r\n\r\nconst App = () => {\r\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\r\n const [preferedColorScheme ,setPreferedColorScheme] = useGlobalState(state => [state.preferedColorScheme, state.setPreferedColorScheme])\r\n\r\n useEffect(() => {\r\n const localPreferedTheme = localStorage.getItem(SaveKeys.PREFERED_COLOR_SCHEME);\r\n if (localPreferedTheme) {\r\n setPreferedColorScheme(localPreferedTheme as ThemeMode)\r\n return\r\n }\r\n\r\n const preferedTheme = prefersDarkMode ? ThemeMode.DARK_MODE : ThemeMode.LIGHT_MODE;\r\n setPreferedColorScheme(preferedTheme)\r\n // eslint-disable-next-line\r\n }, [prefersDarkMode]) // Need to be only used on prefersDarkMode change\r\n\r\n return (\r\n <>\r\n <ThemeProvider theme={getTheme(preferedColorScheme === ThemeMode.DARK_MODE ? darkPalette : lightPalette)}>\r\n <CssBaseline/>\r\n <MainPage/>\r\n </ThemeProvider>\r\n </>\r\n )\r\n}\r\n\r\nexport default App\r\n","import {createTheme, Palette} from '@mui/material/styles';\r\n\r\nexport const getTheme = (palette: Palette) => createTheme({\r\n palette: palette,\r\n components: {\r\n MuiLink: {\r\n styleOverrides: {\r\n root: {\r\n '&:hover': {\r\n textDecoration: 'none'\r\n }\r\n }\r\n }\r\n },\r\n MuiTextField: {\r\n styleOverrides: {\r\n root: {\r\n '& label.Mui-focused': {\r\n color: palette.action.hover,\r\n },\r\n '& .MuiFilledInput-underline:after': {\r\n borderBottomColor: palette.action.hover,\r\n }\r\n }\r\n }\r\n },\r\n MuiInputBase:{\r\n styleOverrides:{\r\n root:{\r\n '&.Mui-focused .MuiOutlinedInput-notchedOutline':{\r\n borderColor: `${palette.action.hover} !important`,\r\n }\r\n }\r\n }\r\n },\r\n MuiFormLabel: {\r\n styleOverrides: {\r\n root:{\r\n '&.Mui-focused .MuiInputLabel': {\r\n color: palette.action.hover\r\n }\r\n }\r\n }\r\n }\r\n }\r\n});","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n <React.StrictMode>\r\n <App />\r\n </React.StrictMode>,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}