import React, { useEffect, useState } from "react" import { getCookie, setCookie } from "cookies-next" import { useRouter } from "next/router" import { useSnapshot } from "valtio" import { useTranslation } from "react-i18next" import InfiniteScroll from "react-infinite-scroll-component" import { appState } from "~utils/appState" import { skillGroups } from "~utils/skillGroups" import * as Dialog from "@radix-ui/react-dialog" import JobSkillResult from "~components/JobSkillResult" import CrossIcon from "~public/icons/Cross.svg" import "./index.scss" interface Props { send: (skill: JobSkill, position: number) => any job?: Job fromPosition: number children: React.ReactNode } const JobSkillModal = (props: Props) => { // Set up router const router = useRouter() const locale = router.locale // Set up translation const { t } = useTranslation("common") let searchInput = React.createRef() let scrollContainer = React.createRef() const [currentGroup, setCurrentGroup] = useState(-1) const [currentGroupName, setCurrentGroupName] = useState("") const [open, setOpen] = useState(false) const [query, setQuery] = useState("") const [results, setResults] = useState([]) // Pagination states const [recordCount, setRecordCount] = useState(0) const [currentPage, setCurrentPage] = useState(1) const [totalPages, setTotalPages] = useState(1) useEffect(() => { setResults(appState.jobSkills.filter((skill) => skill.main === false)) setRecordCount( appState.jobSkills.filter((skill) => skill.main === false).length ) }, [appState, setResults]) useEffect(() => { if (searchInput.current) searchInput.current.focus() }, [searchInput]) useEffect(() => { setRecordCount(results.length) }, [results]) useEffect(() => { const name = skillGroups .find((skill) => skill.id === currentGroup) ?.name["en"].toLowerCase() setCurrentGroupName(name ? name : "") }, [currentGroup]) function onChange(event: React.ChangeEvent) { const newValue = parseInt(event.target.value) setCurrentGroup(newValue) if (newValue >= 0) { setResults( appState.jobSkills.filter((skill, i) => { if (newValue === 4) { return skill.emp && !skill.main } else if (newValue === 5) { return skill.base && !skill.main } else { return skill.color === newValue && !skill.main } }) ) } else { setResults(appState.jobSkills.filter((skill) => skill.main === false)) } } function inputChanged(event: React.ChangeEvent) { const text = event.target.value if (text.length) { setQuery(text) } else { setQuery("") } } function openChange() { if (open) { setQuery("") // setFirstLoad(true) setResults([]) setRecordCount(0) setCurrentPage(1) setOpen(false) } else { setOpen(true) } } function onBlur() {} function render() { const rows = results.map((result: JobSkill, i: number) => { return ( {}} /> ) }) return ( 0 ? results.length : 0} next={() => setCurrentPage(currentPage + 1)} hasMore={totalPages > currentPage} scrollableTarget="Results" loader={
Loading...
} > {rows}
) } return ( {props.children}
{t("search.result_count", { record_count: recordCount })}
{open ? render() : ""}
) } export default JobSkillModal