1- import React , { useState } from 'react' ;
2- import { Badge , MultiSelect , MultiSelectProps } from '@mantine/core' ;
1+ import React , { useEffect , useState } from 'react' ;
2+ import { Badge , MultiSelect , MultiSelectProps , Tooltip } from '@mantine/core' ;
33import { IconBuildings , IconCheck } from '@tabler/icons-react' ;
4- import classes from '../styles/Filter.module.css' ;
4+ import classes from '../styles/LeetCodeMain.module.css' ;
5+ import { LeetCodeCompanyTag } from '../types/leetcode' ;
6+ import { getAllCompanies } from '../services/leetcode' ;
57
68const CheckedIcon = < IconCheck size = { 12 } stroke = { 1.5 } /> ;
79
8- // TODO: fill data
9- const Data = [ 'facebook' , 'google' ] ;
10-
11- // TODO: show 'wont work if not premium'
1210const renderMultiSelectOption : MultiSelectProps [ 'renderOption' ] = ( {
1311 option,
1412 checked
@@ -25,13 +23,24 @@ const renderMultiSelectOption: MultiSelectProps['renderOption'] = ({
2523
2624const QuestionCompanyFilter : React . FC < {
2725 updateCompanies : ( companies : string [ ] ) => void ;
28- } > = ( { updateCompanies } ) => {
26+ isPremium ?: boolean ;
27+ } > = ( { updateCompanies, isPremium } ) => {
2928 const [ selected , setSelected ] = useState ( false ) ;
29+ const [ allCompanies , setAllCompanies ] = useState < LeetCodeCompanyTag [ ] > ( [ ] ) ;
30+
31+ useEffect ( ( ) => {
32+ getAllCompanies ( ) . then ( cs => setAllCompanies ( cs ) ) ;
33+ } , [ ] ) ;
3034
31- return (
35+ const options = allCompanies . map ( c => ( {
36+ value : c . slug ,
37+ label : c . name
38+ } ) ) ;
39+ const disabled = isPremium === false ;
40+ const ms = (
3241 < MultiSelect
3342 tt = "capitalize"
34- data = { Data }
43+ data = { options }
3544 renderOption = { renderMultiSelectOption }
3645 maxDropdownHeight = { 300 }
3746 placeholder = "Company"
@@ -44,9 +53,20 @@ const QuestionCompanyFilter: React.FC<{
4453 setSelected ( v . length > 0 ) ;
4554 updateCompanies ( v ) ;
4655 } }
47- className = { selected ? classes . filter_selected : classes . filter_empty }
56+ className = {
57+ selected ? classes . filter_selected : classes . company_filter_empty
58+ }
59+ disabled = { disabled }
4860 />
4961 ) ;
62+
63+ return disabled ? (
64+ < Tooltip label = "Company filter is only available for LeetCode Premium users." >
65+ { ms }
66+ </ Tooltip >
67+ ) : (
68+ ms
69+ ) ;
5070} ;
5171
5272export default QuestionCompanyFilter ;
0 commit comments