{"version":3,"sources":["icons/default.png","icons/hkoj.png","icons/cf.png","icons/aoj.png","icons/csa.png","icons/atcoder.png","icons/fb.png","icons/hackerrank.png","icons/luogu.png","icons/spoj.png","icons/kattis.png","util/fetch-data.tsx","util/sheet-to-entry.tsx","context/RecommenderContext.tsx","components/ProblemsFilter/OptionButton.tsx","components/ProblemsFilter/OptionDisplay.tsx","components/ProblemsFilter/TagDisplay.tsx","components/ProblemsFilter/ProblemsFilter.tsx","components/JudgeIcon.tsx","components/ProblemDisplay.tsx","components/ProblemsDisplay.tsx","components/Recommender.tsx","components/App.tsx","index.tsx","icons/syss.png"],"names":["module","exports","PROBLEMS_URL","TAGS_URL","fetchGoogleSheet","url","a","source","google","visualization","Query","setResponse","response","axios","result","eval","data","entries","sheetToEntry","parseProblemList","cols","options","tags","problems","map","problem","Tags","split","tag","trim","filter","length","FilterOptions","judge","Judge","type","key","value","text","difficulty","Difficulty","level","Level","clean","o","Object","sort","u","v","Number","fromEntries","fetchData","context","then","tagsSheet","tagGroups","Map","Tag","Group","tagDescription","Description","MISC","tagByGroups","reduce","groups","group","has","get","set","push","sortOrders","setState","groupedTags","sheet","table","col","label","sanitizeCell","cell","cellType","rows","row","c","id","k","defaultRecommenderContext","fetched","setting","filters","sortOrder","keywords","RecommenderContext","React","recommenderContext","RecommenderContextProvider","children","state","Provider","OptionButton","props","Button","title","size","style","marginBottom","marginTop","onClick","console","log","includes","concat","OptionDisplay","Table","Row","Cell","option","TagDisplay","currentGroup","setGroup","tagSet","Set","Popup","position","trigger","Icon","name","margin","paddingLeft","color","b","ProblemsFilter","useState","active","setActive","useContext","dropdownOptions","filterValues","Dropdown","placeholder","search","clearable","fluid","multiple","selection","allowAdditions","additionLabel","onAddItem","event","onChange","currentFilters","keyword","Accordion","styled","Title","Content","celled","Header","HeaderCell","colSpan","Body","icons","hkojIcon","cfIcon","aojIcon","csaIcon","atcoderIcon","fbIcon","hackerrankIcon","luoguIcon","spojIcon","syssIcon","kattisIcon","JudgeIcon","icon","defaultIcon","Image","inline","src","height","ProblemDisplay","ref","createRef","current","click","cursor","href","Link","ID","Problem","Label","display","first","image","Detail","marginRight","problemSorter","indexOf","default","ProblemsDisplay","every","startsWith","toLowerCase","replace","selectable","Recommender","App","Menu","fixed","Item","paddingTop","paddingBottom","logo","Container","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.fed431f9.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/default.5ebcb383.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB0VBMVEX////T6/e/4vO+4vPa7vjk8vokm9UOktEKkNE9ptn1+v3b7vgdldMblNIXk9E0oNfu9/r9+/H889r889j9+Ond7vggktAbkNAYjs82ntbv9/v735L81m/813H813f/+uXd8P0gks8ckM8Yjs43ndTu9/v62n771Wn71Wz71Gj/99vd8P4gkM4cjs4YjM03nNPw+fz98/Tjk5negYXegYbz1Nb72Xv702P702X70mHc7/4hjcwdi8wZics4mtLz///wv8C7CQ++Ehe6Bw7VZ27613P70Fv60Vz6z1r/99nd7/4hissdiMoahsk4ls/vvr66FBm9ICW7FhvQZmv61W37zlT6zlb5zVP/99ggiMkdhskahMg4lM7uvr+2FBm6ICS3FhvOaGv60mX7y0v6ykr/9tYfhccbg8cYgcY2kszsvr6yExi2HyOzFRrMZ2r6z177yEH6yUP6yEH/9dPb7v4bhMUYgsUVgMQykMzy//+uFBizHiWxFBrKZmn4zFD4wy/5wzD/9dQOfcEGecACdr8pi8j0///rvL2pBgytEhinCA7FYWf76rr52YL52oX64qD//fn5/P+OweFqrdZordejzeX36uvPgYTMc3fLcHXnwMOMf5piAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+QHEhAPCetTtysAAADGSURBVBjTY2AgEjAyMbMg81nZ2Dk4uZAEuHl4+fgFIGxBIWERBlExcQlJKYiAtIysnLyCopKyiipEQE1dQ1NLW0dXT9/A0MjYxJTBzNzCUsvK2sbWzt7B0cnZhcHVzd3D08vbx9fP3j8gMCiYISQ0LDzCKjIqOsY+Ni4+IZEhKTk5JdUqLT0j0z4rOyc3jyG/oLCouKS0rLyiMququqaWoa6+ob7Rqqm5pbWtvaOzq5uhp7evf8LESZOnTGWYNn3GzFkY3gQAD9AxgbJ63FUAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMDctMThUMTY6MTU6MDkrMDg6MDD4dv6mAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTA3LTE4VDE2OjE1OjA5KzA4OjAwiStGGgAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/csa.efc17391.png\";","module.exports = __webpack_public_path__ + \"static/media/atcoder.fb263b01.png\";","module.exports = \"data:image/png;base64,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AAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAAAfAUATKPWTHqFE5X+SP2XKrjYU4sB+MfWTb2P1NdXwcUesQNktxCA6BrbAcjeAGYAEF0VfooegFqqEwA7AAB2AABSawMguy4AolswF4Ds1wAFgOhaATADAhBcBwDZtQBgCAQgt3oAsutsAMAtEACXAAC8BgAgcgYAwAwAgNcAAIQ2uxmA6LoKANG1AOA1AAAuAQCk1gaAWyAAudV1ApA9AswCwCUAAJcAAEJrB8ARAIDXAACk1glAdI2OgOy66gCIrrkAYAQAILdWAOwAANgBAEhtEQDRNc0BwAgAgBEAgNDaAQAAgOBaAMiuC4Do6t0Cwm+BDQBE11YAiK4DgOxaAQifAQAwAwBgBwAgtNnNAES3qAAQXQsA2bUD4BIAAAAAuAUCkFjdQgCyT4CZALgEAJBbKwDZdQDgCADAawAAUlsIQHSNjoDsqvUfhE1HACsmvcKutRX+SK89OdkVZhUAbrclk17hfMXvcEum9DfmCAgPAAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAAIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACAAABIAAEgAAQAAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAqun+BGTO3BD4YxcdAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/kattis.0a3f6018.png\";","import axios from 'axios';\nimport { sheetToEntry } from './sheet-to-entry';\nimport { RecommenderContextState } from '../context/RecommenderContext';\nimport { FilterOption, Tag } from './types';\n\nconst PROBLEMS_URL = 'https://docs.google.com/a/google.com/spreadsheets/d/1mYZSziPP8-2a9lQeSjXm7FwRqilwgsL8MIHeER0BmGo/gviz/tq?tq=select%20*';\nconst TAGS_URL = 'https://docs.google.com/a/google.com/spreadsheets/d/1mYZSziPP8-2a9lQeSjXm7FwRqilwgsL8MIHeER0BmGo/gviz/tq?gid=1856672631&tq=select%20*';\n\nasync function fetchGoogleSheet(url: string) {\n // A variable used to store the data returned by Google API.\n let source = null;\n\n // An object that is used by the JSONP response by Google API.\n // eslint-disable-next-line\n const google = {\n visualization: {\n Query: {\n setResponse: (response: any) => {\n source = response;\n }\n }\n }\n };\n\n const result = await axios(url);\n // eslint-disable-next-line\n eval(result.data);\n const entries = sheetToEntry(source);\n return entries;\n}\n\nfunction parseProblemList({ cols, data }: { cols: any[], data: any[] }): {\n problems: any[],\n tags: Tag[],\n options: { [key: string]: FilterOption[] }\n} {\n const options = {\n 'judge': {} as { [key: string]: FilterOption },\n 'difficulty': {} as { [key: string]: FilterOption },\n 'level': {} as { [key: string]: FilterOption },\n };\n\n let tags = {} as { [key: string]: FilterOption };\n\n const problems = data.map((problem) => {\n problem.Tags = problem.Tags.split(\",\")\n .map((tag: string) => tag.trim())\n .filter((tag: string) => tag.length !== 0);\n\n problem.FilterOptions = [\n options.judge[problem.Judge] = {\n type: 'judge',\n source: problem.Judge,\n key: `judge:${problem.Judge}`,\n value: `judge:${problem.Judge}`,\n text: `Judge: ${problem.Judge}`\n },\n options.difficulty[problem.Difficulty] = {\n type: 'difficulty',\n source: problem.Difficulty,\n key: `difficulty:${problem.Difficulty}`,\n value: `difficulty:${problem.Difficulty}`,\n text: `Difficulty: ${problem.Difficulty}`\n },\n options.level[problem.Level] = {\n type: 'level',\n source: problem.Level,\n key: `level:${problem.Level}`,\n value: `level:${problem.Level}`,\n text: `Level: ${problem.Level}`\n },\n ...problem.Tags.map((tag: string) => (tags[tag] = {\n type: 'tag',\n source: tag,\n key: `tag:${tag}`,\n value: `tag:${tag}`,\n text: `Tag: ${tag}`,\n }))\n ];\n\n return problem;\n });\n\n // Change the option / tag list from key-value form to sorted array.\n const clean = (o: { [key: string]: T }): T[] => {\n return Object.entries(o)\n .sort(([u], [v]) => Number(u > v))\n .map(([key, value]) => value);\n }\n\n return ({\n problems,\n tags: clean(tags) as Tag[],\n options: Object.fromEntries(Object.entries(options).map(([key, value]) => [key, clean(value)])),\n });\n}\n\nexport async function fetchData(context: RecommenderContextState) {\n const { problems, tags, options } = await fetchGoogleSheet(PROBLEMS_URL)\n .then(parseProblemList);\n\n const tagsSheet = (await fetchGoogleSheet(TAGS_URL)).data as any[];\n const tagGroups = new Map(tagsSheet.map(({ Tag, Group }) => [Tag, Group]));\n const tagDescription = new Map(tagsSheet.map(({ Tag, Description }) => [Tag, Description]));\n\n // Handle the tag group relationships\n const MISC = 'Miscellaneous';\n const tagByGroups = tags.reduce((groups: { [key: string]: Tag[] }, tag: Tag) => {\n const group = tagGroups.has(tag.source) ? tagGroups.get(tag.source) : MISC;\n tagGroups.set(group, '');\n tagGroups.set(tag.source, group);\n\n if (!group) return groups;\n if (!groups[group]) groups[group] = [];\n groups[group].push(tag);\n return groups;\n }, {} as { [key: string]: Tag[] });\n\n const sortOrders = [\n { key: 'default', value: 'default', text: 'Default' },\n { key: 'level-difficulty', value: 'level-difficulty', text: 'Level / Difficulty' },\n ];\n\n // Remove all group names from MISC list.\n tagByGroups[MISC] = tagByGroups[MISC] &&\n tagByGroups[MISC].filter((tag :Tag) => !(tag.source in tagByGroups));\n\n // Set the group back to the tags (* miscellaneous)\n for (const [group, tags] of Object.entries(tagByGroups)) {\n for (const tag of tags as (Tag[])) {\n tagGroups.set(tag.source, group);\n }\n }\n\n // Update tag list\n for (const tag of tags) {\n tag.group = tagGroups.get(tag.source);\n }\n\n context.setState((context) => ({\n ...context,\n data: {\n ...context.data,\n problems,\n tags,\n groupedTags: tagByGroups,\n options,\n tagGroups,\n tagDescription,\n sortOrders,\n },\n }));\n}\n","export function sheetToEntry(sheet: any): { cols: any[], data: any[] } {\n const cols = sheet.table.cols.map((col: any) => ({\n label: col.label,\n type: col.type,\n }));\n\n const sanitizeCell = (cell: any, cellType: string) => {\n if (cell && cell.v) {\n if (cellType === \"number\")\n return cell.v;\n return cell.v.trim();\n } else {\n if (cellType === \"number\")\n return 0;\n return \"\";\n }\n }\n\n const data = sheet.table.rows.map((row: any) =>\n row.c.map((cell: any, id: any) => [cols[id].label, sanitizeCell(cell, cols[id].type)])\n .reduce((o: Object, [k, v]: [any, any]) => ({ ...o, [k]: v }), {}));\n\n return { cols, data };\n}\n","import * as React from 'react';\nimport { SortOrder, Problem, Tag, FilterOption } from '../util/types';\n\nconst defaultRecommenderContext = {\n fetched: false,\n\n setting: {\n filters: [] as string[],\n sortOrder: 'default' as SortOrder,\n },\n\n data: {\n problems: [] as Problem[],\n tags: [] as Tag[],\n options: {\n difficulty: [] as FilterOption[],\n level: [] as FilterOption[],\n judge: [] as FilterOption[],\n },\n groupedTags: {} as { [group: string]: Tag[] },\n tagGroups: new Map(),\n tagDescription: new Map(),\n sortOrders: [] as FilterOption[],\n keywords: [] as FilterOption[],\n },\n};\n\nexport type SetState = T | ((t: T) => T);\n\nexport type RecommenderContextProps = typeof defaultRecommenderContext;\nexport type RecommenderContextState = RecommenderContextProps & {\n setState: (recommenderContext: SetState) => void;\n}\n\nexport const RecommenderContext = React.createContext({\n ...defaultRecommenderContext,\n setState: (recommenderContext: SetState) => { },\n});\n\nexport function RecommenderContextProvider({ children }: { children: React.ReactNode }) {\n const [state, setState] = React.useState(defaultRecommenderContext);\n\n return (\n \n {children}\n \n );\n}","import * as React from 'react';\nimport { RecommenderContext } from '../../context/RecommenderContext';\nimport { Button } from 'semantic-ui-react';\n\ninterface Props {\n text: string;\n value: any;\n source: any;\n [key: string]: any;\n}\n\n/**\n * The button used in the list of options.\n */\nexport function OptionButton({ text, value, source, ...props }: Props) {\n const context = React.useContext(RecommenderContext);\n const { filters } = context.setting;\n const { tagDescription } = context.data;\n\n const onClick = () => {\n console.log(filters);\n if (value && !filters.includes(value)) {\n context.setState((context) => ({\n ...context,\n setting: {\n ...context.setting,\n filters: filters.concat([value]),\n },\n }));\n }\n }\n\n return (\n \n {text || '\\u00A0'}\n \n )\n};\n","import * as React from 'react';\nimport { OptionButton } from './OptionButton';\nimport { Table } from 'semantic-ui-react';\n\ninterface Props {\n type: string;\n options: any[];\n}\n\nexport function OptionDisplay({ type, options }: Props) {\n return (\n \n \n {type}\n \n \n {options.map((option: any) => (\n \n ))}\n \n \n );\n}\n","import * as React from 'react';\nimport { Table, Icon, Popup } from 'semantic-ui-react';\nimport { RecommenderContext } from '../../context/RecommenderContext';\nimport { OptionButton } from './OptionButton';\nimport { Tag } from '../../util/types';\n\nexport function TagDisplay() {\n const [currentGroup, setGroup] = React.useState('');\n const context = React.useContext(RecommenderContext);\n const groupedTags = Object.entries(context.data.groupedTags)\n .sort(([u], [v]) => Number(u > v));\n const tagSet = new Set(context.data.tags.map((tag) => tag.source));\n\n const addTag = (tag: string) => {\n if (!context.setting.filters.includes(tag)) {\n context.setState((context) => ({\n ...context,\n setting: {\n ...context.setting,\n filters: context.setting.filters.concat(tag),\n },\n }));\n }\n }\n\n return (\n \n \n Tags\n \n }>\n The blue buttons are the group of tags.\n
    \n
  • Add a tag: select the group to expand it, then select the tag.
  • \n
  • Add a group: select the group, then click the green group button.
  • \n
\n \n
\n \n {\n groupedTags.map(([group, tags], id) => (\n <>\n {currentGroup === group && id !== 0 &&
}\n {\n if (currentGroup !== group)\n setGroup(group);\n else if (tagSet.has(group))\n addTag(`tag:${group}`);\n }}\n value={null} />\n {\n currentGroup === group && <>\n \n {tags && (tags as Tag[])\n .sort((a: Tag, b: Tag) => a.source > b.source ? 1 : -1)\n .map((tag: Tag) => (\n \n ))}\n {id !== groupedTags.length - 1 &&
}\n \n }\n \n ))\n }\n
\n
\n );\n}","import React from 'react';\nimport { Accordion, Dropdown, Icon, Table, DropdownProps } from 'semantic-ui-react';\nimport { RecommenderContext, RecommenderContextProps } from '../../context/RecommenderContext';\n\nimport { OptionDisplay } from './OptionDisplay';\nimport { TagDisplay } from './TagDisplay';\n\nexport function ProblemsFilter() {\n // Local state\n const [active, setActive] = React.useState(false);\n const context = React.useContext(RecommenderContext);\n\n const { filters } = context.setting;\n const { tags, options, keywords } = context.data;\n\n const dropdownOptions = [\n ...options.difficulty,\n ...options.judge,\n ...options.level,\n ...tags,\n ...keywords\n ];\n\n // All values of filters for checking.\n const filterValues = dropdownOptions.map((option) => option.value);\n\n // Function called when the filter list needs to be updated.\n const onFilterChange = (event: React.SyntheticEvent, { value: filters }: DropdownProps) => {\n const currentFilters = (filters as any[]).filter((filter) => filterValues.includes(filter));\n\n context.setState((context: RecommenderContextProps) => ({\n ...context,\n setting: {\n ...context.setting,\n filters,\n },\n data: {\n ...context.data,\n keywords: context.data.keywords.filter((keyword) => currentFilters.includes(keyword.value)),\n }\n } as RecommenderContextProps));\n };\n\n const onSortOrderChange = (event: React.SyntheticEvent, { value: sortOrder }: DropdownProps) => {\n context.setState((context) => ({\n ...context,\n setting: {\n ...context.setting,\n sortOrder\n }\n } as RecommenderContextProps));\n };\n\n const onFilterAddition = (event: React.KeyboardEvent, props: DropdownProps) => {\n const value = props.value as string;\n context.setState((context) => ({\n ...context,\n setting: {\n ...context.setting,\n filters: filters.concat([`keyword:${value}`]),\n },\n data: {\n ...context.data,\n keywords: keywords.concat(({\n key: `keyword:${value}`,\n value: `keyword:${value}`,\n text: `Keyword: ${value}`,\n source: value,\n type: 'keyword',\n })),\n },\n }));\n };\n\n return (\n <>\n \n\n \n setActive(!active)}>\n \n Filter / Sort\n \n \n \n \n \n \n Filter\n \n \n \n \n \n \n \n \n \n
\n\n \n \n \n \n Sort Order\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n )\n}\n","import React from 'react';\nimport { Image } from 'semantic-ui-react';\n\nimport defaultIcon from '../icons/default.png';\nimport hkojIcon from '../icons/hkoj.png';\nimport cfIcon from '../icons/cf.png';\nimport aojIcon from '../icons/aoj.png';\nimport csaIcon from '../icons/csa.png';\nimport atcoderIcon from '../icons/atcoder.png';\nimport fbIcon from '../icons/fb.png';\nimport hackerrankIcon from '../icons/hackerrank.png';\nimport luoguIcon from '../icons/luogu.png';\nimport spojIcon from '../icons/spoj.png';\nimport syssIcon from '../icons/syss.png';\nimport kattisIcon from '../icons/kattis.png';\n\nconst icons: { [key: string]: string } = {\n 'HKOJ': hkojIcon,\n 'CF': cfIcon,\n 'AOJ': aojIcon,\n 'CSA': csaIcon,\n 'AtCoder': atcoderIcon,\n 'FBHC': fbIcon,\n 'HackerRank': hackerrankIcon,\n 'Luogu': luoguIcon,\n 'SPOJ': spojIcon,\n 'SYSS': syssIcon,\n 'Kattis': kattisIcon,\n};\n\ninterface Props {\n judge: string;\n}\n\nexport function JudgeIcon(props: Props) {\n const { judge } = props;\n const icon = judge in icons ? icons[judge] : defaultIcon;\n\n return (\n \n );\n}\n","import React from 'react';\nimport { Icon, Label, Table } from 'semantic-ui-react';\nimport { JudgeIcon } from './JudgeIcon';\nimport { RecommenderContext } from '../context/RecommenderContext';\nimport { Problem } from '../util/types';\n\nexport function ProblemDisplay({ problem }: { problem: Problem }) {\n const context = React.useContext(RecommenderContext);\n const ref = React.createRef();\n const tagGroups = context.data.tagGroups;\n\n const tagSorter = (a: string, b: string) => {\n const first = (tag: string) => tagGroups.get(tag) || tag;\n if (first(a) !== first(b))\n return Number(first(a) > first(b));\n if (!tagGroups.get(a) && !tagGroups.get(b))\n return Number(a > b);\n if (!tagGroups.get(a))\n return -1;\n if (!tagGroups.get(b))\n return 1;\n return Number(a > b);\n }\n\n return (\n \n ref.current?.click()}\n style={{\n cursor: \"pointer\"\n }}>\n \n \n  \n {problem.Judge} - {problem.ID ? problem.ID + ' - ' : ''} {problem.Problem}\n
\n \n \n \n \n \n {\n problem.Tags\n .sort(tagSorter)\n .map((tag: string) => (\n tagGroups.get(tag)\n ? (\n \n )\n : (\n \n )\n ))\n }\n \n
\n
\n \n
\n )\n}\n","import React from 'react';\nimport { Table } from 'semantic-ui-react';\nimport { ProblemDisplay } from './ProblemDisplay';\nimport { RecommenderContext } from '../context/RecommenderContext';\nimport { Problem, FilterOption } from '../util/types';\n\nconst level = ['Beginner', 'Intermediate', 'Advanced', ''];\nconst difficulty = [1, 2, 3, 4, 5, 0];\n\nconst problemSorter: { [key: string]: ((a: Problem, b: Problem) => number) } = {\n 'default': (a: Problem, b: Problem) => {\n if (a.Judge !== b.Judge)\n return Number(a.Judge > b.Judge);\n else\n return Number(a.ID > b.ID);\n },\n 'level-difficulty': (a: Problem, b: Problem) => {\n if (level.indexOf(a.Level) !== level.indexOf(b.Level))\n return Number(level.indexOf(a.Level) > level.indexOf(b.Level));\n else if (difficulty.indexOf(a.Difficulty) !== difficulty.indexOf(b.Difficulty))\n return Number(difficulty.indexOf(a.Difficulty) > difficulty.indexOf(b.Difficulty));\n else\n return problemSorter.default(a, b);\n }\n}\n\nexport const ProblemsDisplay = () => {\n const context = React.useContext(RecommenderContext);\n const { filters } = context.setting;\n\n const problems = context.data.problems\n .filter((problem) => {\n const options = problem.FilterOptions.map((option: FilterOption) => option.value);\n return filters.every((filter) => (\n filter.startsWith('keyword:')\n ? problem.Problem.toLowerCase().indexOf(filter.replace('keyword:', '').toLowerCase()) !== -1\n : options.includes(filter)\n ));\n })\n .sort(problemSorter[context.setting.sortOrder]);\n\n return (\n \n \n \n \n Showing {problems.length} problem{problems.length !== 1 && 's'} out\n of {context.data.problems.length} problem{context.data.problems.length !== 1 && 's'}.\n \n \n {problems.map((problem, id) => (\n \n ))}\n \n
\n );\n}\n","import React from 'react';\nimport { ProblemsFilter } from './ProblemsFilter/ProblemsFilter';\nimport { ProblemsDisplay } from './ProblemsDisplay';\nimport { RecommenderContext } from '../context/RecommenderContext';\nimport { fetchData } from '../util/fetch-data';\n\n/**\n * Handle data fetching and the communication between display elements.\n */\nexport function Recommender() {\n const context = React.useContext(RecommenderContext);\n\n // Ensure that fetchData is called once only.\n if (!context.fetched) {\n context.setState({\n ...context,\n fetched: true,\n });\n fetchData(context);\n }\n\n return (\n <>\n \n \n \n );\n}\n","import React from 'react';\nimport {\n Container,\n Image,\n Menu\n} from 'semantic-ui-react'\nimport logo from '../icons/syss.png';\nimport { Recommender } from './Recommender';\n\nexport function App() {\n return (\n <>\n \n \n \n \n Judge Recommender\n \n\n \n \n \n \n );\n}\n\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { App } from './components/App';\nimport { RecommenderContextProvider } from './context/RecommenderContext';\n\nReactDOM.render(\n (\n \n \n \n ),\n document.getElementById('root')\n);\n","module.exports = __webpack_public_path__ + \"static/media/syss.2cd414b9.png\";"],"sourceRoot":""}