diff --git a/src/components/Projects/LeavingRoadmapWarningModal.tsx b/src/components/Projects/LeavingRoadmapWarningModal.tsx index 5576f1f52..c47d5fcf7 100644 --- a/src/components/Projects/LeavingRoadmapWarningModal.tsx +++ b/src/components/Projects/LeavingRoadmapWarningModal.tsx @@ -4,13 +4,13 @@ import { SubmissionRequirement } from './SubmissionRequirement.tsx'; type LeavingRoadmapWarningModalProps = { onClose: () => void; - onContinue: () => void; + repositoryUrl: string; }; export function LeavingRoadmapWarningModal( props: LeavingRoadmapWarningModalProps, ) { - const { onClose, onContinue } = props; + const { onClose, repositoryUrl } = props; return ( @@ -45,13 +45,14 @@ export function LeavingRoadmapWarningModal(

- + + + - - -
- {languages.map((language) => ( - - - {language} - - ))} -
+ ); + })} + + + {(solutions?.totalPages || 0) > 1 && ( +
+ { + setPageState({ + ...pageState, + currentPage: page, + }); + }} + />
- ); - })} - - - {(solutions?.totalPages || 0) > 1 && ( -
- { - setPageState({ - ...pageState, - currentPage: page, - }); - }} - /> -
+ )} + )} ); diff --git a/src/components/Projects/SelectLanguages.tsx b/src/components/Projects/SelectLanguages.tsx new file mode 100644 index 000000000..933775eca --- /dev/null +++ b/src/components/Projects/SelectLanguages.tsx @@ -0,0 +1,105 @@ +import { useRef, useState } from 'react'; +import { cn } from '../../lib/classname'; +import { useOutsideClick } from '../../hooks/use-outside-click'; + +const languageColors = new Map([ + ['JavaScript', 'bg-[#f1e05a]'], + ['Python', 'bg-[#3572A5]'], + ['Java', 'bg-[#b07219]'], + ['HTML', 'bg-[#e34c26]'], + ['CSS', 'bg-[#563d7c]'], + ['C++', 'bg-[#f34b7d]'], + ['C', 'bg-[#555555]'], + ['Go', 'bg-[#00ADD8]'], + ['TypeScript', 'bg-[#2b7489]'], + ['Shell', 'bg-[#89e051]'], + ['Ruby', 'bg-[#701516]'], + ['PHP', 'bg-[#4F5D95]'], + ['Rust', 'bg-[#dea584]'], + ['Swift', 'bg-[#ffac45]'], + ['Kotlin', 'bg-[#A97BFF]'], + ['Dart', 'bg-[#00B4AB]'], + ['Scala', 'bg-[#c22d40]'], + ['Objective-C', 'bg-[#438eff]'], + ['Vue', 'bg-[#41b883]'], + ['R', 'bg-[#198CE7]'], + ['Perl', 'bg-[#0298c3]'], + ['Haskell', 'bg-[#5e5086]'], + ['Lua', 'bg-[#000080]'], + ['Matlab', 'bg-[#e16737]'], + ['Vim script', 'bg-[#199f4b]'], + ['Elixir', 'bg-[#6e4a7e]'], + ['Erlang', 'bg-[#B83998]'], + ['Clojure', 'bg-[#db5855]'], + ['Markdown', 'bg-[#083fa1]'], + ['TeX', 'bg-[#3D6117]'], + ['SQL', 'bg-[#e38c00]'], +]); + +type SelectLanguagesProps = { + languages: string[]; + selectedLanguages: string[]; + onSelectLanguage: (language: string) => void; +}; + +export function SelectLanguages(props: SelectLanguagesProps) { + const { languages, onSelectLanguage, selectedLanguages } = props; + + const dropdownRef = useRef(null); + const [isOpen, setIsOpen] = useState(false); + + useOutsideClick(dropdownRef, () => { + setIsOpen(false); + }); + + return ( +
+ {selectedLanguages.length > 0 && ( + <> + {selectedLanguages.map((language) => ( + + + {language} + + ))} + + )} + +
+ + + {isOpen && ( +
+ {languages.map((language) => { + return ( + + ); + })} +
+ )} +
+
+ ); +}