fix: Show affected filters when interacting with the filters (#15634)

This commit is contained in:
Michael S. Molina 2021-07-14 15:01:15 -03:00 committed by GitHub
parent 154f460446
commit ac01d91c28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 61 additions and 40 deletions

View File

@ -35,11 +35,8 @@ import Loading from 'src/components/Loading';
import BasicErrorAlert from 'src/components/ErrorMessage/BasicErrorAlert';
import { FeatureFlag, isFeatureEnabled } from 'src/featureFlags';
import { waitForAsyncData } from 'src/middleware/asyncEvent';
import {
setFocusedNativeFilter,
unsetFocusedNativeFilter,
} from 'src/dashboard/actions/nativeFilters';
import { ClientErrorObject } from 'src/utils/getClientErrorObject';
import { dispatchFocusAction } from './utils';
import { FilterProps } from './types';
import { getFormData } from '../../utils';
import { useCascadingFilters } from './state';
@ -184,8 +181,8 @@ const FilterValue: React.FC<FilterProps> = ({
const setDataMask = (dataMask: DataMask) =>
onFilterSelectionChange(filter, dataMask);
const setFocusedFilter = () => dispatch(setFocusedNativeFilter(id));
const unsetFocusedFilter = () => dispatch(unsetFocusedNativeFilter());
const setFocusedFilter = () => dispatchFocusAction(dispatch, id);
const unsetFocusedFilter = () => dispatchFocusAction(dispatch);
if (error) {
return (

View File

@ -16,6 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
import { debounce } from 'lodash';
import { Dispatch } from 'react';
import {
setFocusedNativeFilter,
unsetFocusedNativeFilter,
} from 'src/dashboard/actions/nativeFilters';
import { Filter } from '../../types';
import { CascadeFilter } from '../CascadeFilters/types';
import { mapParentFiltersToChildren } from '../utils';
@ -36,3 +42,14 @@ export function buildCascadeFiltersTree(filters: Filter[]): CascadeFilter[] {
.filter(filter => !filter.cascadeParentIds?.length)
.map(getCascadeFilter);
}
export const dispatchFocusAction = debounce(
(dispatch: Dispatch<any>, id?: string) => {
if (id) {
dispatch(setFocusedNativeFilter(id));
} else {
dispatch(unsetFocusedNativeFilter());
}
},
300,
);

View File

@ -31,41 +31,47 @@ import { StatusMessage, StyledFormItem, Styles } from '../common';
import { getRangeExtraFormData } from '../../utils';
const Wrapper = styled.div<{ validateStatus?: 'error' | 'warning' | 'info' }>`
border: 1px solid transparent;
&:focus {
border: 1px solid
${({ theme, validateStatus }) =>
theme.colors[validateStatus || 'primary']?.base};
outline: 0;
box-shadow: 0 0 0 3px
${({ theme, validateStatus }) =>
rgba(theme.colors[validateStatus || 'primary']?.base, 0.2)};
}
& .ant-slider {
& .ant-slider-track {
background-color: ${({ theme, validateStatus }) =>
validateStatus && theme.colors[validateStatus]?.light1};
${({ theme, validateStatus }) => `
border: 1px solid transparent;
&:focus {
border: 1px solid
${theme.colors[validateStatus || 'primary']?.base};
outline: 0;
box-shadow: 0 0 0 3px
${rgba(theme.colors[validateStatus || 'primary']?.base, 0.2)};
}
& .ant-slider-handle {
border: ${({ theme, validateStatus }) =>
validateStatus && `2px solid ${theme.colors[validateStatus]?.light1}`};
&:focus {
box-shadow: 0 0 0 3px
${({ theme, validateStatus }) =>
rgba(theme.colors[validateStatus || 'primary']?.base, 0.2)};
}
}
&:hover {
& .ant-slider {
margin-top: ${theme.gridUnit}px;
margin-bottom: ${theme.gridUnit * 5}px;
& .ant-slider-track {
background-color: ${({ theme, validateStatus }) =>
validateStatus && theme.colors[validateStatus]?.base};
background-color: ${
validateStatus && theme.colors[validateStatus]?.light1
};
}
& .ant-slider-handle {
border: ${({ theme, validateStatus }) =>
validateStatus && `2px solid ${theme.colors[validateStatus]?.base}`};
border: ${
validateStatus && `2px solid ${theme.colors[validateStatus]?.light1}`
};
&:focus {
box-shadow: 0 0 0 3px
${rgba(theme.colors[validateStatus || 'primary']?.base, 0.2)};
}
}
&:hover {
& .ant-slider-track {
background-color: ${
validateStatus && theme.colors[validateStatus]?.base
};
}
& .ant-slider-handle {
border: ${
validateStatus && `2px solid ${theme.colors[validateStatus]?.base}`
};
}
}
}
}
`}
`;
export default function RangeFilterPlugin(props: PluginFilterRangeProps) {

View File

@ -308,7 +308,8 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) {
}
return originNode;
}}
onFocus={setFocusedFilter}
onMouseEnter={setFocusedFilter}
onMouseLeave={unsetFocusedFilter}
// @ts-ignore
onChange={handleChange}
ref={inputRef}

View File

@ -103,8 +103,8 @@ export default function PluginFilterTimeColumn(
placeholder={placeholderText}
// @ts-ignore
onChange={handleChange}
onBlur={unsetFocusedFilter}
onFocus={setFocusedFilter}
onMouseEnter={setFocusedFilter}
onMouseLeave={unsetFocusedFilter}
ref={inputRef}
>
{timeColumns.map(

View File

@ -113,8 +113,8 @@ export default function PluginFilterTimegrain(
placeholder={placeholderText}
// @ts-ignore
onChange={handleChange}
onBlur={unsetFocusedFilter}
onFocus={setFocusedFilter}
onMouseEnter={setFocusedFilter}
onMouseLeave={unsetFocusedFilter}
ref={inputRef}
>
{(data || []).map((row: { name: string; duration: string }) => {