spt-items-api/public/static/js/main.e49801bc.chunk.js.map
2021-10-25 13:43:50 +09:00

1 line
54 KiB
Plaintext

{"version":3,"sources":["dataaccess/SaveKeys.ts","components/Footer.tsx","dataaccess/ItemBackend.ts","state/ReactJsonViewThemes.ts","state/ThemeMode.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":["LocalStorageKeys","SessionStorageKeys","useStyles","makeStyles","theme","footerHolder","display","flex","flexDirection","alignItems","justifyContent","padding","Footer","classes","Box","className","Typography","searchItem","query","locale","a","fetch","process","mode","method","headers","body","JSON","stringify","resp","status","json","items","console","error","getItem","id","requestUrl","getItemHierarchy","itemData","hierarchy","currItemID","_id","currentHierarchy","useGlobalState","getState","itemsHierarchy","gotAllHierarchy","item","_parent","getLocaleList","ThemeMode","ReactJsonViewThemes","preferedLocale","localStorage","PREFERED_LOCALE","storedPreferedJsonTheme","PREFERED_JSON_THEME","preferedColorScheme","PREFERED_COLOR_SCHEME","create","set","sptarkovWebsiteUrl","sptarkovWorkshopUrl","sptarkovDocumentationUrl","setPreferedLocale","newLocale","setItem","_state","localesList","refreshLocalesList","locales","sessionStorage","LOCALES","parse","log","preferedJsonViewerTheme","includes","setPreferedJsonViewerTheme","newJsonTheme","DARK_MODE","setPreferedColorScheme","newColorScheme","searchInput","setSearchInput","newInput","desiredSearchInput","setDesiredSearchInput","initHierarchy","ITEMS_HIERARCHY","setHierarchy","newHierarchy","state","newStateHierarchy","Object","assign","selectedItem","undefined","setSelectedItem","newSelectedItem","modeToggleButtonHolder","color","flexGrow","iconButton","ml","DarkModeToggle","useTheme","useCallback","palette","IconButton","sx","onClick","newTheme","LIGHT_MODE","localeHolder","select","LocaleSelect","useEffect","FormControl","fullWidth","variant","Select","displayEmpty","labelId","value","length","onChange","evt","target","MenuItem","disabled","map","idx","jsonHolder","JsonTheme","label","form","height","HeaderForm","headerContainer","backgroundColor","background","paper","linksContainer","formContainer","link","borderBottom","action","hover","Header","websiteLink","workshopLink","documentationLink","Link","underline","href","breadcrumbHolder","breadcrumb","text","secondary","cursor","currentItem","NavigationBreadcrumb","itemHierachyState","searchInputState","useState","setCurrentHierarchy","push","filter","elt","reverse","Breadcrumbs","Name","_name","formatLink","toString","searchAreaHolder","maxHeight","autocomplete","SearchArea","selectOptions","setSelecteOptions","isbusy","setIsBusy","handleNameInput","input","searchResults","options","res","name","shortName","ShortName","handleIDInput","itemJson","itemObj","itemHierarchy","match","handleInput","Autocomplete","getOptionLabel","option","isOptionEqualToValue","toLocaleLowerCase","findOptionValue","open","inputValue","onInputChange","newValue","trim","selectedOption","find","event","renderInput","params","TextField","renderOption","props","key","filterOptions","filterSelectedOptions","CircularProgress","size","src","style","marginTop","width","overflowY","container","maxheight","searchContainer","MainPage","darkPalette","createPalette","default","grey","primary","common","white","lightBlue","yellow","lightPalette","black","blue","App","prefersDarkMode","useMediaQuery","localPreferedTheme","preferedTheme","ThemeProvider","createTheme","components","MuiLink","styleOverrides","root","textDecoration","MuiInput","borderColor","MuiTextField","borderBottomColor","MuiInputBase","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.e49801bc.chunk.js","sourcesContent":["export enum LocalStorageKeys {\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}\r\n\r\nexport enum SessionStorageKeys {\r\n LOCALES = 'items.sp-tarkov.com-locales',\r\n ITEMS_HIERARCHY = 'items.sp-tarkov.com-items-hierarchy',\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","import { ItemWithLocale } from '../dto/ItemWithLocale';\r\nimport { ItemHierarchy } from '../dto/ItemHierarchy';\r\nimport { ItemData } from '../dto/ItemData';\r\nimport { useGlobalState } from '../state/GlobalState';\r\n\r\nexport const searchItem = async (query: string, locale?: string): Promise<ItemWithLocale[]> => {\r\n const resp = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}/api/search`,\r\n {\r\n mode: 'cors',\r\n method: 'post',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(locale ? { query, locale } : { query })\r\n },\r\n )\r\n if (resp.status === 200) {\r\n const json = await resp.json()\r\n return json.items;\r\n } else if (resp.status >= 400) {\r\n console.error(resp)\r\n }\r\n return []\r\n}\r\n\r\nexport const getItem = async (id: string, locale?: string): Promise<ItemWithLocale | undefined> => {\r\n let requestUrl = `${process.env.REACT_APP_BACKEND_URL}/api/item?id=${id}`;\r\n if (locale) requestUrl = `${requestUrl}&locale=${locale}`\r\n const resp = await fetch(requestUrl, { mode: 'cors' })\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n } else if (resp.status >= 400) {\r\n console.error(resp)\r\n }\r\n}\r\n\r\nexport const getItemHierarchy = async (itemData: ItemData, locale?: string): Promise<ItemHierarchy | undefined> => {\r\n // Check if we have all the item hierarchy\r\n const hierarchy: ItemHierarchy = {}\r\n let currItemID: string | undefined = itemData?._id\r\n const currentHierarchy = useGlobalState.getState().itemsHierarchy\r\n let gotAllHierarchy = true\r\n while (currItemID) {\r\n if (!(currItemID in currentHierarchy)) {\r\n gotAllHierarchy = false\r\n break\r\n }\r\n const item: ItemWithLocale = useGlobalState.getState().itemsHierarchy[currItemID]\r\n hierarchy[item.item._id] = item\r\n currItemID = item?.item?._parent\r\n }\r\n if (gotAllHierarchy) return hierarchy;\r\n\r\n // Otherwise get it\r\n let requestUrl = `${process.env.REACT_APP_BACKEND_URL}/api/item/hierarchy?id=${itemData._id}`;\r\n if (locale) requestUrl = `${requestUrl}&locale=${locale}`\r\n const resp = await fetch(requestUrl, { mode: 'cors' })\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n } else if (resp.status >= 400) {\r\n console.error(resp)\r\n }\r\n}\r\n\r\nexport const getLocaleList = async (): Promise<string[] | undefined> => {\r\n const resp = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}/api/locales`,\r\n { mode: 'cors' },\r\n )\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n } else if (resp.status >= 400) {\r\n console.error(resp)\r\n }\r\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]","export enum ThemeMode {\r\n LIGHT_MODE = 'light',\r\n DARK_MODE = 'dark'\r\n}","import { ThemeKeys } from 'react-json-view'\r\nimport create from 'zustand'\r\nimport { getLocaleList } from '../dataaccess/ItemBackend'\r\nimport { LocalStorageKeys, SessionStorageKeys } from '../dataaccess/SaveKeys'\r\nimport { ItemHierarchy } from '../dto/ItemHierarchy'\r\nimport { ReactJsonViewThemes } from './ReactJsonViewThemes'\r\nimport { ThemeMode } from './ThemeMode'\r\nimport { ItemWithLocale } from '../dto/ItemWithLocale';\r\n\r\nexport interface GlobalState {\r\n sptarkovWebsiteUrl: string\r\n sptarkovWorkshopUrl: string\r\n sptarkovDocumentationUrl: string\r\n\r\n preferedLocale: string\r\n setPreferedLocale: (newLocale: string) => void\r\n localesList: string[]\r\n refreshLocalesList: () => void\r\n\r\n preferedJsonViewerTheme: ThemeKeys\r\n setPreferedJsonViewerTheme: (newJsonTheme: string) => void\r\n\r\n preferedColorScheme: string\r\n setPreferedColorScheme: (newColorScheme: ThemeMode) => void\r\n\r\n searchInput: string\r\n setSearchInput: (newInput: string) => void\r\n\r\n desiredSearchInput: string\r\n setDesiredSearchInput: (newInput: string) => void\r\n\r\n itemsHierarchy: ItemHierarchy\r\n initHierarchy: () => void\r\n setHierarchy: (newHierarchy: ItemHierarchy) => void\r\n\r\n selectedItem: ItemWithLocale | undefined\r\n setSelectedItem: (newSelectedItem: ItemWithLocale | undefined) => void\r\n}\r\n\r\nconst preferedLocale = localStorage.getItem(LocalStorageKeys.PREFERED_LOCALE)\r\nconst storedPreferedJsonTheme = localStorage.getItem(\r\n LocalStorageKeys.PREFERED_JSON_THEME,\r\n)\r\nconst preferedColorScheme = localStorage.getItem(LocalStorageKeys.PREFERED_COLOR_SCHEME)\r\n\r\nexport const useGlobalState = create<GlobalState>((set) => ({\r\n sptarkovWebsiteUrl: process.env.REACT_APP_SPTARKOV_HOME ? process.env.REACT_APP_SPTARKOV_HOME : '',\r\n sptarkovWorkshopUrl: process.env.REACT_APP_SPTARKOV_WORKSHOP ? process.env.REACT_APP_SPTARKOV_WORKSHOP : '',\r\n sptarkovDocumentationUrl: process.env.REACT_APP_SPTARKOV_DOCUMENTATION ? process.env.REACT_APP_SPTARKOV_DOCUMENTATION : '',\r\n\r\n // Locale\r\n preferedLocale: preferedLocale ? preferedLocale : 'en',\r\n setPreferedLocale: (newLocale: string) => {\r\n localStorage.setItem(LocalStorageKeys.PREFERED_LOCALE, newLocale)\r\n set((_state) => ({ preferedLocale: newLocale }))\r\n },\r\n localesList: [],\r\n refreshLocalesList: async () => {\r\n const locales = sessionStorage.getItem(SessionStorageKeys.LOCALES);\r\n const localesList = locales ? JSON.parse(locales) : await getLocaleList()\r\n console.log(localesList)\r\n if (!locales) sessionStorage.setItem(SessionStorageKeys.LOCALES, JSON.stringify(localesList))\r\n set((_state) => ({ localesList: localesList ? localesList : [] }))\r\n },\r\n\r\n // Json viewer theme\r\n preferedJsonViewerTheme:\r\n storedPreferedJsonTheme &&\r\n ReactJsonViewThemes.includes(storedPreferedJsonTheme)\r\n ? (storedPreferedJsonTheme as ThemeKeys)\r\n : (ReactJsonViewThemes[0] as ThemeKeys),\r\n setPreferedJsonViewerTheme: (newJsonTheme: string) => {\r\n localStorage.setItem(LocalStorageKeys.PREFERED_JSON_THEME, newJsonTheme)\r\n set((_state) => ({ preferedJsonViewerTheme: newJsonTheme as ThemeKeys }))\r\n },\r\n\r\n // Prefered theme\r\n preferedColorScheme: preferedColorScheme\r\n ? preferedColorScheme\r\n : ThemeMode.DARK_MODE,\r\n setPreferedColorScheme: (newColorScheme: ThemeMode) => {\r\n localStorage.setItem(LocalStorageKeys.PREFERED_COLOR_SCHEME, newColorScheme)\r\n set((_state) => ({ preferedColorScheme: newColorScheme }))\r\n },\r\n\r\n // SearchInput\r\n searchInput: '',\r\n setSearchInput: (newInput: string) =>\r\n set((_state) => ({ searchInput: newInput })),\r\n desiredSearchInput: '',\r\n setDesiredSearchInput: (newInput: string) =>\r\n set((_state) => ({ desiredSearchInput: newInput })),\r\n\r\n // Hierarchy\r\n itemsHierarchy: {},\r\n initHierarchy: () => {\r\n const itemsHierarchy = sessionStorage.getItem(SessionStorageKeys.ITEMS_HIERARCHY);\r\n if (itemsHierarchy) {\r\n set((_state) => ({ itemsHierarchy: JSON.parse(itemsHierarchy) }))\r\n }\r\n },\r\n setHierarchy: (newHierarchy: ItemHierarchy) => {\r\n set((state) => {\r\n const newStateHierarchy = Object.assign({}, state.itemsHierarchy, newHierarchy);\r\n sessionStorage.setItem(SessionStorageKeys.ITEMS_HIERARCHY, JSON.stringify(newStateHierarchy))\r\n return ({\r\n itemsHierarchy: newStateHierarchy,\r\n })\r\n });\r\n },\r\n\r\n // Selected item\r\n selectedItem: undefined,\r\n setSelectedItem: (newSelectedItem: ItemWithLocale | undefined) =>\r\n set((_state) => ({ selectedItem: newSelectedItem })),\r\n}))\r\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 modeToggleButtonHolder: {\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.modeToggleButtonHolder} id=\"modeToggleButtonHolder\">\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 id=\"modeToggleButton\"\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 } from '@mui/material'\r\nimport {makeStyles} from '@mui/styles'\r\nimport { useCallback, useEffect } from 'react';\r\nimport { useGlobalState } from '../state/GlobalState'\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n localeHolder: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n padding: '0 0.5vw 0 0.5vw'\r\n },\r\n select: {\r\n display: 'flex',\r\n flexGrow: 1\r\n }\r\n}))\r\n\r\n\r\n\r\nexport const LocaleSelect = () => {\r\n const classes = useStyles()\r\n const [preferedLocale, setPreferedLocale] = useGlobalState(useCallback(state => [state.preferedLocale, state.setPreferedLocale],[]))\r\n const [localesList, refreshLocalesList] = useGlobalState(useCallback(state => [state.localesList, state.refreshLocalesList],[]))\r\n\r\n useEffect(()=> refreshLocalesList(), [refreshLocalesList])\r\n\r\n return (\r\n <>\r\n <Box className={classes.localeHolder}>\r\n <FormControl fullWidth variant=\"standard\">\r\n <Select\r\n displayEmpty\r\n className={classes.select}\r\n labelId=\"prefered-locale\"\r\n value={localesList.length > 0 ? preferedLocale : ''}\r\n onChange={(evt) => {\r\n setPreferedLocale(evt.target.value)\r\n }}\r\n id=\"locale-selector\"\r\n >\r\n <MenuItem disabled value=\"\">\r\n <em>Language</em>\r\n </MenuItem>\r\n {localesList.map((locale, idx) => (\r\n <MenuItem key={idx} value={locale}>\r\n {locale}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Box>\r\n </>\r\n )\r\n}\r\n","import {\r\n Box,\r\n FormControl,\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 { LocalStorageKeys } from '../dataaccess/SaveKeys'\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 0.5vw 0 0.5vw'\r\n },\r\n select: {\r\n display: 'flex',\r\n flexGrow: 1\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 variant=\"standard\">\r\n <Select\r\n displayEmpty\r\n className={classes.select}\r\n labelId=\"react-json-view-theme\"\r\n value={preferedJsonViewerTheme}\r\n label=\"JSON theme\"\r\n onChange={(evt) => {\r\n setPreferedJsonViewerTheme(evt.target.value)\r\n localStorage.setItem(\r\n LocalStorageKeys.PREFERED_JSON_THEME,\r\n evt.target.value,\r\n )\r\n }}\r\n id=\"json-selector\"\r\n >\r\n <MenuItem disabled value=\"\">\r\n <em>JSON theme</em>\r\n </MenuItem>\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'\r\nimport { LocaleSelect } from './LocaleSelect'\r\nimport { JsonTheme } from './JsonTheme'\r\nimport { Theme } from '@mui/material'\r\nimport { makeStyles } from '@mui/styles';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n form: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n justifyContent: 'flex-end',\r\n height: '100%'\r\n },\r\n}));\r\n\r\nexport const HeaderForm = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n <form className={classes.form}>\r\n <DarkModeToggle />\r\n <LocaleSelect />\r\n <JsonTheme />\r\n </form>\r\n </>\r\n )\r\n}\r\n","import { Box, Link, Theme } from '@mui/material'\r\nimport { makeStyles } from '@mui/styles'\r\nimport { useCallback } from 'react';\r\nimport { useGlobalState } from '../state/GlobalState';\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 formContainer: {\r\n display: 'flex',\r\n flexGrow: 1,\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 const websiteLink = useGlobalState(useCallback((state) => state.sptarkovWebsiteUrl,[]))\r\n const workshopLink = useGlobalState(useCallback((state) => state.sptarkovWorkshopUrl,[]))\r\n const documentationLink = useGlobalState(useCallback((state) => state.sptarkovDocumentationUrl,[]))\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 id=\"website-link\"\r\n href={websiteLink}\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 id=\"workshop-link\"\r\n href={workshopLink}\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 id=\"documentation-link\"\r\n href={documentationLink}\r\n className={classes.link}\r\n >\r\n Documentation\r\n </Link>\r\n </Box>\r\n <Box className={classes.formContainer}>\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.itemsHierarchy)\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 if (!selectedItem) return;\r\n\r\n const hierarchy: ItemWithLocale[] = [selectedItem]\r\n let currItemID: string | undefined = selectedItem?.item?._parent\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} id='navigation-breadcrumb'>\r\n <Link\r\n underline=\"hover\"\r\n color=\"inherit\"\r\n key={'home'}\r\n href=\"/\"\r\n id='home-breadcrumb'\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\ninterface IItemOption {\r\n id?: string\r\n name?: string\r\n shortName?: string\r\n}\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 [setHierarchy, initHierarchy] = useGlobalState((state) => [state.setHierarchy, state.initHierarchy])\r\n const [selectedItem, setSelectedItem] = useGlobalState((state) => [\r\n state.selectedItem,\r\n state.setSelectedItem,\r\n ])\r\n const [selectOptions, setSelecteOptions] = useState<ItemOption[]>([])\r\n const [isbusy, setIsBusy] = useState<boolean>(false)\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 ? res.locale.Name : res.item._name,\r\n shortName: res.locale.ShortName\r\n }))\r\n setSelecteOptions(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 setSelectedItem(undefined)\r\n setSearchInput('')\r\n return;\r\n }\r\n\r\n setSelectedItem(itemJson)\r\n const itemObj = {\r\n id: itemJson.item._id,\r\n name: itemJson.locale.Name ? itemJson.locale.Name : itemJson.item._name,\r\n shortName: itemJson.locale.ShortName\r\n }\r\n setSelecteOptions([itemObj])\r\n setSearchInput(itemObj.name)\r\n\r\n // Update hierachy\r\n const itemHierarchy = await getItemHierarchy(\r\n itemJson.item,\r\n preferedLocale,\r\n )\r\n setHierarchy(itemHierarchy ? itemHierarchy : {})\r\n // eslint-disable-next-line\r\n }, []) // Need to only be created on startup\r\n\r\n useEffect(() => initHierarchy(), [initHierarchy])\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 || isbusy) {\r\n setSelectedItem(undefined)\r\n setSelecteOptions([])\r\n setIsBusy(false)\r\n return\r\n }\r\n setIsBusy(true)\r\n\r\n if (input.match(/([a-z0-9]{24})/)) await handleIDInput(input)\r\n else await handleNameInput(input)\r\n\r\n setIsBusy(false)\r\n }\r\n\r\n const formatDisplayItems = () => {\r\n // If loading\r\n if (isbusy) return <CircularProgress size={100} />\r\n\r\n // If finished loading\r\n if (selectedItem){\r\n return (\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 }\r\n else return <Typography id='search-no-data'>No data to display</Typography>\r\n }\r\n\r\n const findOptionValue = (option: ItemOption, value: ItemOption): boolean => {\r\n return option.name?.toLocaleLowerCase() === value.name?.toLocaleLowerCase()\r\n || option.id?.toLocaleLowerCase() === value.id?.toLocaleLowerCase()\r\n || option.shortName?.toLocaleLowerCase() === value.shortName?.toLocaleLowerCase()\r\n }\r\n\r\n return (\r\n <Box className={classes.searchAreaHolder}>\r\n <Autocomplete\r\n id='search-autocomplete'\r\n options={selectOptions.map((elt) => ({name: elt.name, shortName: elt.shortName, id: elt.id}))}\r\n getOptionLabel={(option)=> option.name ? option.name : option.id}\r\n isOptionEqualToValue={(option, value) => findOptionValue(option, value)}\r\n open={!isbusy && searchInputState.length >= searchThreshold && (searchInputState !== selectedItem?.locale.Name && searchInputState !== selectedItem?.item._name)}\r\n className={classes.autocomplete}\r\n inputValue={searchInputState ? 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={(()=>{\r\n const selectedOption = selectOptions.find(elt => elt.id === searchInputState || elt.name === searchInputState);\r\n return selectedOption ? selectedOption : null;\r\n })()}\r\n onChange={async (event: SyntheticEvent, newValue: IItemOption | null) => {\r\n if (newValue) {\r\n const selectedOption = selectOptions.find(\r\n (elt) => elt.name === newValue.name,\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 renderOption={(props, option, state) => (\r\n <li {...props} key={option.id}><Typography>{option.name}</Typography></li>\r\n )}\r\n filterOptions={(options, state) => options.filter(elt =>{\r\n console.log(elt.shortName?.toLocaleLowerCase(), state.inputValue.toLocaleLowerCase(), elt.shortName?.toLocaleLowerCase().includes(state.inputValue.toLocaleLowerCase()))\r\n return (elt.name?.toLocaleLowerCase().includes(state.inputValue.toLocaleLowerCase())\r\n || elt.id?.toLocaleLowerCase().includes(state.inputValue.toLocaleLowerCase())\r\n || elt.shortName?.toLocaleLowerCase().includes(state.inputValue.toLocaleLowerCase()))\r\n })}\r\n filterSelectedOptions\r\n />\r\n <Box className={classes.jsonHolder}>{formatDisplayItems()}</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[900],\r\n paper: '#121212'\r\n },\r\n text: {\r\n primary: common.white,\r\n secondary: '#8894a2',\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 {LocalStorageKeys} from \"./dataaccess/SaveKeys\";\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(LocalStorageKeys.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 MuiInput:{\r\n styleOverrides: {\r\n root: {\r\n '&:before': {\r\n borderColor: 'transparent',\r\n },\r\n '&:after': {\r\n borderColor: 'transparent',\r\n },\r\n '&:hover:not(.Mui-disabled):before': {\r\n borderColor: palette.action.hover,\r\n }\r\n },\r\n input:{\r\n '&:focus': {\r\n backgroundColor: 'transparent',\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":""}