1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-01 01:18:10 +02:00
unleash.unleash/frontend/src/component/common/ProjectSelect/ProjectSelect.tsx
olav 24c11332b5 chore: update MUI to v5 (#923)
* refactor: update mui packages

* refactor: run mui codemods

* refactor: format files after codemods

* refactor: fix broken types

* refactor: clean up theme

* refactor: fix broken tests

* refactor: replace @mui/styles with tss-react

* refactor: move breakpoints into classes for tss

* refactor: fix crash on missing feature description

* refactor: remove void classNames

* refactor: adjust styles to new defaults

* refactor: remove broken rollout slider e2e test

* refactor: fix duplicate e2e testid

* refactor: update makeStyles after rebase

* refactor: add missing snapshot after rebase

* refactor: fix TableCellSortable focus styles

* refactor: use 1.4 as the default line-height

* refactor: hide webkit search field icons

* refactor: fix select box label

* refactor: make AutocompleteBox smaller

* refactor: make heading smaller

* refactor: fix toast close icon color

* refactor: update snapshots

* refactor: add missing test event awaits

* refactor: fix default button line-height
2022-05-02 15:52:41 +02:00

75 lines
2.3 KiB
TypeScript

import React, { MouseEventHandler, useMemo, VFC } from 'react';
import { MenuItem, Typography } from '@mui/material';
import DropdownMenu, { IDropdownMenuProps } from '../DropdownMenu/DropdownMenu';
import useProjects from 'hooks/api/getters/useProjects/useProjects';
import { IProjectCard } from 'interfaces/project';
const ALL_PROJECTS = { id: '*', name: '> All projects' };
interface IProjectSelectProps {
currentProjectId: string;
updateCurrentProject: (id: string) => void;
}
const ProjectSelect: VFC<IProjectSelectProps & Partial<IDropdownMenuProps>> = ({
currentProjectId,
updateCurrentProject,
...rest
}) => {
const { projects } = useProjects();
const setProject = (value?: string | null) => {
const id = value && typeof value === 'string' ? value.trim() : '*';
updateCurrentProject(id);
};
const currentProject = useMemo(() => {
const project = projects.find(i => i.id === currentProjectId);
return project || ALL_PROJECTS;
}, [currentProjectId, projects]);
const handleChangeProject: MouseEventHandler = event => {
const target = (event.target as Element).getAttribute('data-target');
setProject(target);
};
const renderProjectItem = (selectedId: string, item: IProjectCard) => (
<MenuItem
disabled={selectedId === item.id}
data-target={item.id}
key={item.id}
style={{ fontSize: '14px' }}
>
{item.name}
</MenuItem>
);
const renderProjectOptions = () => [
<MenuItem
disabled={currentProject === ALL_PROJECTS}
data-target={ALL_PROJECTS.id}
key={ALL_PROJECTS.id}
>
<Typography variant="body2">{ALL_PROJECTS.name}</Typography>
</MenuItem>,
...projects.map(project =>
renderProjectItem(currentProjectId, project)
),
];
return (
<React.Fragment>
<DropdownMenu
id={'project'}
title="Select project"
label={`${currentProject.name}`}
callback={handleChangeProject}
renderOptions={renderProjectOptions}
{...rest}
/>
</React.Fragment>
);
};
export default ProjectSelect;