mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-23 01:16:27 +02:00
* refactor: remove unused FeatureToggleListItemChip * refactor: remove unused archive.module.scss * refactor: remove unused ShowArchive route * refactor: port FeatureToggleList to TS/SWR * refactor: fix IUseFeaturesOutput interface prefix * refactor: remove unnecessary pages files * refactor: persist the features sort/filter state * refactor: format files * refactor: fix FeatureToggleListContainer file name * refactor: fix arrow function syntax * refactor: improve storage helper comments
82 lines
2.3 KiB
JavaScript
82 lines
2.3 KiB
JavaScript
import React from 'react';
|
|
import { MenuItem } from '@material-ui/core';
|
|
import PropTypes from 'prop-types';
|
|
import DropdownMenu from '../DropdownMenu/DropdownMenu';
|
|
import useProjects from '../../../hooks/api/getters/useProjects/useProjects';
|
|
|
|
const ALL_PROJECTS = { id: '*', name: '> All projects' };
|
|
|
|
const ProjectSelect = ({ currentProjectId, updateCurrentProject, ...rest }) => {
|
|
const { projects } = useProjects();
|
|
|
|
const setProject = v => {
|
|
const id = v && typeof v === 'string' ? v.trim() : '*';
|
|
updateCurrentProject(id);
|
|
};
|
|
|
|
// TODO fixme
|
|
let curentProject = projects.find(i => i.id === currentProjectId);
|
|
if (!curentProject) {
|
|
curentProject = ALL_PROJECTS;
|
|
}
|
|
|
|
const handleChangeProject = e => {
|
|
const target = e.target.getAttribute('data-target');
|
|
setProject(target);
|
|
};
|
|
|
|
const renderProjectItem = (selectedId, item) => (
|
|
<MenuItem
|
|
disabled={selectedId === item.id}
|
|
data-target={item.id}
|
|
key={item.id}
|
|
style={{ fontSize: '14px' }}
|
|
>
|
|
{item.name}
|
|
</MenuItem>
|
|
);
|
|
|
|
const renderProjectOptions = () => {
|
|
const start = [
|
|
<MenuItem
|
|
disabled={curentProject === ALL_PROJECTS}
|
|
data-target={ALL_PROJECTS.id}
|
|
key={ALL_PROJECTS.id}
|
|
style={{ fontSize: '14px' }}
|
|
>
|
|
{ALL_PROJECTS.name}
|
|
</MenuItem>,
|
|
];
|
|
|
|
return [
|
|
...start,
|
|
...projects.map(p => renderProjectItem(currentProjectId, p)),
|
|
];
|
|
};
|
|
|
|
const { updateSetting, fetchProjects, ...passDown } = rest;
|
|
|
|
return (
|
|
<React.Fragment>
|
|
<DropdownMenu
|
|
id={'project'}
|
|
title="Select project"
|
|
label={`${curentProject.name}`}
|
|
callback={handleChangeProject}
|
|
renderOptions={renderProjectOptions}
|
|
className=""
|
|
{...passDown}
|
|
/>
|
|
</React.Fragment>
|
|
);
|
|
};
|
|
|
|
ProjectSelect.propTypes = {
|
|
projects: PropTypes.array.isRequired,
|
|
fetchProjects: PropTypes.func.isRequired,
|
|
currentProjectId: PropTypes.string.isRequired,
|
|
updateCurrentProject: PropTypes.func.isRequired,
|
|
};
|
|
|
|
export default ProjectSelect;
|