{"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","handleFetch","url","init","a","fetch","mode","resp","status","json","jsonResponse","undefined","console","error","searchItem","query","locale","process","method","headers","body","JSON","stringify","items","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","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.d930c480.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 \r\n SPT-Aki ©2021 Created by Rev and Shirito\r\n \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\nconst handleFetch = async (url: string, init?: RequestInit | undefined): Promise => {\r\n const resp = await fetch(url, { ...init, mode: 'cors' })\r\n if (resp.status === 200) {\r\n const jsonResponse = await resp.json();\r\n return jsonResponse !== undefined ? jsonResponse : null;\r\n } else if (resp.status >= 400) {\r\n console.error(resp)\r\n }\r\n return null;\r\n}\r\n\r\nexport const searchItem = async (query: string, locale?: string): Promise =>\r\n (await handleFetch(\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 ))?.items;\r\n\r\nexport const getItem = async (id: string, locale?: string): Promise => {\r\n let requestUrl = `${process.env.REACT_APP_BACKEND_URL}/api/item?id=${id}`;\r\n if (locale) requestUrl = `${requestUrl}&locale=${locale}`\r\n return await handleFetch(requestUrl, { mode: 'cors' });\r\n}\r\n\r\nexport const getItemHierarchy = async (itemData: ItemData, locale?: string): Promise => {\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 return await handleFetch(requestUrl, { mode: 'cors' });\r\n}\r\n\r\nexport const getLocaleList = async (): Promise =>\r\n await handleFetch(\r\n `${process.env.REACT_APP_BACKEND_URL}/api/locales`,\r\n { mode: 'cors' },\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'\nimport create from 'zustand'\nimport { getLocaleList } from '../dataaccess/ItemBackend'\nimport { LocalStorageKeys, SessionStorageKeys } from '../dataaccess/SaveKeys'\nimport { ItemHierarchy } from '../dto/ItemHierarchy'\nimport { ReactJsonViewThemes } from './ReactJsonViewThemes'\nimport { ThemeMode } from './ThemeMode'\nimport { ItemWithLocale } from '../dto/ItemWithLocale';\n\nexport interface GlobalState {\n sptarkovWebsiteUrl: string\n sptarkovWorkshopUrl: string\n sptarkovDocumentationUrl: string\n\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 itemsHierarchy: ItemHierarchy\n initHierarchy: () => void\n setHierarchy: (newHierarchy: ItemHierarchy) => void\n\n selectedItem: ItemWithLocale | undefined\n setSelectedItem: (newSelectedItem: ItemWithLocale | undefined) => void\n}\n\nconst preferedLocale = localStorage.getItem(LocalStorageKeys.PREFERED_LOCALE)\nconst storedPreferedJsonTheme = localStorage.getItem(\n LocalStorageKeys.PREFERED_JSON_THEME,\n)\nconst preferedColorScheme = localStorage.getItem(LocalStorageKeys.PREFERED_COLOR_SCHEME)\n\nexport const useGlobalState = create((set) => ({\n sptarkovWebsiteUrl: process.env.REACT_APP_SPTARKOV_HOME ? process.env.REACT_APP_SPTARKOV_HOME : '',\n sptarkovWorkshopUrl: process.env.REACT_APP_SPTARKOV_WORKSHOP ? process.env.REACT_APP_SPTARKOV_WORKSHOP : '',\n sptarkovDocumentationUrl: process.env.REACT_APP_SPTARKOV_DOCUMENTATION ? process.env.REACT_APP_SPTARKOV_DOCUMENTATION : '',\n\n // Locale\n preferedLocale: preferedLocale ? preferedLocale : 'en',\n setPreferedLocale: (newLocale: string) => {\n localStorage.setItem(LocalStorageKeys.PREFERED_LOCALE, newLocale)\n set((_state) => ({ preferedLocale: newLocale }))\n },\n localesList: [],\n refreshLocalesList: async () => {\n const locales = sessionStorage.getItem(SessionStorageKeys.LOCALES);\n const localesList = locales !== null && locales !== undefined && locales !== 'undefined' ? JSON.parse(locales) : await getLocaleList()\n console.log(localesList)\n if (!locales) sessionStorage.setItem(SessionStorageKeys.LOCALES, JSON.stringify(localesList ? localesList : null))\n set((_state) => ({ localesList: localesList ? localesList : [] }))\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(LocalStorageKeys.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(LocalStorageKeys.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 itemsHierarchy: {},\n initHierarchy: () => {\n const itemsHierarchy = sessionStorage.getItem(SessionStorageKeys.ITEMS_HIERARCHY);\n if (itemsHierarchy !== null && itemsHierarchy !== undefined && itemsHierarchy !== 'undefined') {\n set((_state) => ({ itemsHierarchy: JSON.parse(itemsHierarchy) }))\n }\n },\n setHierarchy: (newHierarchy: ItemHierarchy) => {\n set((state) => {\n const newStateHierarchy = Object.assign({}, state.itemsHierarchy, newHierarchy);\n sessionStorage.setItem(SessionStorageKeys.ITEMS_HIERARCHY, JSON.stringify(newStateHierarchy ? newStateHierarchy : null))\n return ({\n itemsHierarchy: newStateHierarchy,\n })\n });\n },\n\n // Selected item\n selectedItem: undefined,\n setSelectedItem: (newSelectedItem: ItemWithLocale | 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 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 \r\n {theme.palette.mode} mode\r\n \r\n {theme.palette.mode === 'dark' ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n","import { Select, MenuItem, Theme, Box, FormControl } 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 0.5vw 0 0.5vw'\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 \n \n \n \n \n >\n )\n}\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 \r\n \r\n \r\n \r\n \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 height: '100%'\n },\n}));\n\nexport const HeaderForm = () => {\n const classes = useStyles();\n\n return (\n <>\n \n >\n )\n}\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 \r\n \r\n \r\n Website\r\n \r\n \r\n Workshop\r\n \r\n \r\n Documentation\r\n \r\n \r\n \r\n \r\n \r\n \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([])\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 \r\n {item.locale.Name ? item.locale.Name : item.item._name}\r\n \r\n )\r\n } else {\r\n return (\r\n {\r\n setSearchInput(item.item._id)\r\n setSelectedItem(undefined)\r\n }}\r\n className={classes.link}\r\n >\r\n {item.locale.Name ? item.locale.Name : item.item._name}\r\n \r\n )\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n Home\r\n \r\n {currentHierarchy.map((item, idx) => formatLink(item, idx.toString()))}\r\n \r\n \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([])\r\n const [isbusy, setIsBusy] = useState(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 console.log(searchResults)\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 \r\n\r\n // If finished loading\r\n if (selectedItem){\r\n return (\r\n \r\n )\r\n }\r\n else return No data to display\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 \r\n ({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 \r\n )}\r\n renderOption={(props, option, state) => (\r\n {option.name}\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 {formatDisplayItems()}\r\n \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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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 \r\n \r\n \r\n \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 \r\n \r\n ,\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":""}