diff --git a/src/components/BMDashboard/ItemList/ItemListView.module.css b/src/components/BMDashboard/ItemList/ItemListView.module.css index 21335b697f..d885a1b9b1 100644 --- a/src/components/BMDashboard/ItemList/ItemListView.module.css +++ b/src/components/BMDashboard/ItemList/ItemListView.module.css @@ -41,10 +41,11 @@ .selectInput { display: grid; - grid-template-columns: auto 1fr auto 1fr auto 1fr; + grid-template-columns: auto 1fr auto 1fr; align-items: center; gap: 15px; width: 100%; + min-width: 400px; max-width: 1200px; margin: 0 auto 10px auto; overflow: visible; @@ -62,14 +63,20 @@ .selectInput select { height: 38px; width: 100%; - min-width: 220px; - max-width: 240px; + min-width: 400px; + max-width: 1200px; padding: 5px; border: 1px solid #ccc; border-radius: 4px; margin-bottom: 8px; } +.selectInput :global(.react-select__control) { + width: 100%; + max-width: 1200px; + min-width: 400px; +} + .selectInput input[type='text'] { padding: 5px; margin-bottom: 8px; diff --git a/src/components/BMDashboard/ItemList/SelectForm.jsx b/src/components/BMDashboard/ItemList/SelectForm.jsx index 27f62b6848..226c47bc60 100644 --- a/src/components/BMDashboard/ItemList/SelectForm.jsx +++ b/src/components/BMDashboard/ItemList/SelectForm.jsx @@ -1,43 +1,61 @@ -import { Form, FormGroup, Label, Input } from 'reactstrap'; +import { useEffect, useMemo, useState } from 'react'; +import { Form, FormGroup, Label } from 'reactstrap'; +import Select from 'react-select'; import styles from './ItemListView.module.css'; +const PROJECT_KEY = 'tool_selected_projects'; + export default function SelectForm({ items, setSelectedProject, setSelectedItem }) { - let projectsSet = []; - if (items.length) { - projectsSet = [...new Set(items.map(el => el.project?.name))]; - } + const [selectedProjects, setSelectedProjects] = useState([]); + + // Build project list + const projectOptions = useMemo(() => { + if (!items?.length) return []; + const unique = [...new Set(items.map(i => i.project?.name).filter(Boolean))]; + return unique.map(name => ({ + label: name, + value: name, + })); + }, [items]); + + // Restore saved values + useEffect(() => { + const saved = JSON.parse(localStorage.getItem(PROJECT_KEY)); + + if (Array.isArray(saved)) { + setSelectedProjects(saved); + setSelectedProject(saved.map(p => p.value)); + } + }, []); - const handleChange = event => { + const handleChange = selected => { + const values = selected || []; + + setSelectedProjects(values); setSelectedItem('all'); - setSelectedProject(event.target.value); + setSelectedProject(values.length ? values.map(v => v.value) : 'all'); + + localStorage.setItem(PROJECT_KEY, JSON.stringify(values)); }; return (
- - - + + + setSelectedItem(e.target.value)} - disabled={!items.length} - > - {items.length ? ( - <> - - {itemSet.map(itemName => ( - - ))} - - ) : ( - - )} - + +