1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-13 11:17:26 +02:00
unleash.unleash/frontend/src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.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

94 lines
3.1 KiB
TypeScript

import { Dispatch, MouseEventHandler, SetStateAction, VFC } from 'react';
import { MenuItem, Typography } from '@mui/material';
import DropdownMenu from 'component/common/DropdownMenu/DropdownMenu';
import ProjectSelect from 'component/common/ProjectSelect/ProjectSelect';
import useLoading from 'hooks/useLoading';
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import {
createFeaturesFilterSortOptions,
FeaturesSortType,
IFeaturesSort,
} from 'hooks/useFeaturesSort';
import { useStyles } from './styles';
import { IFeaturesFilter } from 'hooks/useFeaturesFilter';
const sortOptions = createFeaturesFilterSortOptions();
interface IFeatureToggleListActionsProps {
filter: IFeaturesFilter;
setFilter: Dispatch<SetStateAction<IFeaturesFilter>>;
sort: IFeaturesSort;
setSort: Dispatch<SetStateAction<IFeaturesSort>>;
loading?: boolean;
}
export const FeatureToggleListActions: VFC<IFeatureToggleListActionsProps> = ({
filter,
setFilter,
sort,
setSort,
loading = false,
}) => {
const { classes: styles } = useStyles();
const { uiConfig } = useUiConfig();
const ref = useLoading(loading);
const handleSort: MouseEventHandler = e => {
const type = (e.target as Element)
.getAttribute('data-target')
?.trim() as FeaturesSortType;
if (type) {
setSort(prev => ({ ...prev, type }));
}
};
const selectedOption =
sortOptions.find(o => o.type === sort.type) || sortOptions[0];
const renderSortingOptions = () =>
sortOptions.map(option => (
<MenuItem
style={{ fontSize: '14px' }}
key={option.type}
disabled={option.type === sort.type}
data-target={option.type}
>
{option.name}
</MenuItem>
));
return (
<div className={styles.actions} ref={ref}>
<Typography variant="body2" data-loading>
Sorted by:
</Typography>
<DropdownMenu
id={'sorting'}
label={`By ${selectedOption.name}`}
callback={handleSort}
renderOptions={renderSortingOptions}
title="Sort by"
style={{ textTransform: 'lowercase', fontWeight: 'normal' }}
data-loading
/>
<ConditionallyRender
condition={uiConfig.flags.P}
show={
<ProjectSelect
currentProjectId={filter.project}
updateCurrentProject={project =>
setFilter(prev => ({ ...prev, project }))
}
style={{
textTransform: 'lowercase',
fontWeight: 'normal',
}}
data-loading
/>
}
/>
</div>
);
};