Apply some PR review

Signed-off-by: Virginie Ky <virginie.ky@gmail.com>
This commit is contained in:
Virginie Ky 2020-03-02 17:35:44 +01:00
parent 98b305c481
commit abfc1d3287
7 changed files with 57 additions and 26 deletions

View File

@ -95,7 +95,7 @@ const TableRow = styled.tr`
} }
`; `;
const Arrow = styled(props => <Carret {...props} />)` const Arrow = styled(({ isUp, ...rest }) => <Carret {...rest} />)`
margin-left: 5px; margin-left: 5px;
${({ isUp }) => ${({ isUp }) =>
isUp && isUp &&

View File

@ -2,6 +2,9 @@ import styled from 'styled-components';
const InputWrapper = styled.div` const InputWrapper = styled.div`
margin-bottom: 11px; margin-bottom: 11px;
#datetime {
max-width: 130px;
}
`; `;
export default InputWrapper; export default InputWrapper;

View File

@ -19,7 +19,6 @@ const FiltersCard = ({ filters, onChange }) => {
const name = state.get('name'); const name = state.get('name');
const type = filters[name].type; const type = filters[name].type;
const defaultValue = filters[name].defaultValue; const defaultValue = filters[name].defaultValue;
const filtersOptions = getFilterType(type); const filtersOptions = getFilterType(type);
@ -48,12 +47,9 @@ const FiltersCard = ({ filters, onChange }) => {
// Change the attribute // Change the attribute
handleChange(e); handleChange(e);
// Change other inputs so it reset values // Change other inputs so it reset values
const {
target: { value },
} = e;
handleChange({ target: { name: 'filter', value: '=' } }); handleChange({ target: { name: 'filter', value: '=' } });
handleChange({ handleChange({
target: { name: 'value', value: filters[value].defaultValue }, target: { name: 'value', value: defaultValue },
}); });
}} }}
name="name" name="name"

View File

@ -1,10 +1,12 @@
import React, { useState } from 'react'; import React, { useState, useRef } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import moment from 'moment'; import moment from 'moment';
import { isObject } from 'lodash'; import { isObject } from 'lodash';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { FilterIcon } from 'strapi-helper-plugin'; import { FilterIcon } from 'strapi-helper-plugin';
import useOutsideClick from '../../hooks/useOutsideClick';
import DropdownButton from '../DropdownButton'; import DropdownButton from '../DropdownButton';
import DropdownSection from '../DropdownSection'; import DropdownSection from '../DropdownSection';
@ -13,16 +15,20 @@ import FiltersCard from '../FiltersCard';
const FiltersPicker = ({ filters, onChange }) => { const FiltersPicker = ({ filters, onChange }) => {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const dropdownRef = useRef();
useOutsideClick(dropdownRef, () => {
if (isOpen) {
setIsOpen(false);
}
});
const handleChange = ({ target: { value } }) => { const handleChange = ({ target: { value } }) => {
if (value.value) { if (value.value) {
let formattedValue = value; let formattedValue = value;
if (value.value._isAMomentObject === true) { if (value.value._isAMomentObject === true) {
formattedValue.value = moment( formattedValue.value = moment(value.value).format();
value.value,
'YYYY-MM-DD HH:mm:ss'
).format();
} else if (isObject(value)) { } else if (isObject(value)) {
formattedValue.value = Object.values(value.value).join(''); formattedValue.value = Object.values(value.value).join('');
} }
@ -43,7 +49,7 @@ const FiltersPicker = ({ filters, onChange }) => {
<FilterIcon /> <FilterIcon />
<FormattedMessage id="app.utils.filters" /> <FormattedMessage id="app.utils.filters" />
</DropdownButton> </DropdownButton>
<DropdownSection isOpen={isOpen}> <DropdownSection isOpen={isOpen} ref={dropdownRef}>
<FiltersCard onChange={handleChange} filters={filters} /> <FiltersCard onChange={handleChange} filters={filters} />
</DropdownSection> </DropdownSection>
</Wrapper> </Wrapper>

View File

@ -1,9 +1,10 @@
import React, { useState } from 'react'; import React, { useState, useRef } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { Carret } from '@buffetjs/icons'; import { Carret } from '@buffetjs/icons';
import getTrad from '../../utils/getTrad'; import getTrad from '../../utils/getTrad';
import useOutsideClick from '../../hooks/useOutsideClick';
import DropdownButton from '../DropdownButton'; import DropdownButton from '../DropdownButton';
import DropdownSection from '../DropdownSection'; import DropdownSection from '../DropdownSection';
@ -12,6 +13,13 @@ import Wrapper from './Wrapper';
const SortPicker = ({ onChange, value }) => { const SortPicker = ({ onChange, value }) => {
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const dropdownRef = useRef();
useOutsideClick(dropdownRef, () => {
if (isOpen) {
setIsOpen(false);
}
});
const orders = { const orders = {
created_at_asc: 'created_at:ASC', created_at_asc: 'created_at:ASC',
@ -38,7 +46,7 @@ const SortPicker = ({ onChange, value }) => {
<FormattedMessage id={getTrad('sort.label')} /> <FormattedMessage id={getTrad('sort.label')} />
<Carret fill={isOpen ? '#007EFF' : '#292b2c'} /> <Carret fill={isOpen ? '#007EFF' : '#292b2c'} />
</DropdownButton> </DropdownButton>
<DropdownSection isOpen={isOpen}> <DropdownSection isOpen={isOpen} ref={dropdownRef}>
<SortList <SortList
isShown={isOpen} isShown={isOpen}
list={orders} list={orders}

View File

@ -50,6 +50,7 @@ const HomePage = () => {
const getSearchParams = () => { const getSearchParams = () => {
const params = {}; const params = {};
query.forEach((value, key) => { query.forEach((value, key) => {
if (includes(paramsKeys, key)) { if (includes(paramsKeys, key)) {
params[key] = value; params[key] = value;
@ -59,7 +60,7 @@ const HomePage = () => {
return params; return params;
}; };
const getUpdatedSearchParams = updatedParams => { const getUpdatedQueryParams = updatedParams => {
return { return {
...getSearchParams(), ...getSearchParams(),
filters: generateFiltersFromSearch(search), filters: generateFiltersFromSearch(search),
@ -68,17 +69,15 @@ const HomePage = () => {
}; };
const handleChangeFilters = ({ target: { value } }) => { const handleChangeFilters = ({ target: { value } }) => {
if (value) { const updatedFilters = generateFiltersFromSearch(search);
const updatedFilters = generateFiltersFromSearch(search);
// Add filter if it doesn't exist yet // Add filter if it doesn't exist yet
if (!some(updatedFilters, value)) { if (!some(updatedFilters, value)) {
updatedFilters.push(value); updatedFilters.push(value);
handleChangeParams({ handleChangeParams({
target: { name: 'filters', value: updatedFilters }, target: { name: 'filters', value: updatedFilters },
}); });
}
} }
}; };
@ -109,8 +108,8 @@ const HomePage = () => {
}; };
const handleChangeParams = ({ target: { name, value } }) => { const handleChangeParams = ({ target: { name, value } }) => {
const updatedSearch = getUpdatedSearchParams({ [name]: value }); const updatedQueryParams = getUpdatedQueryParams({ [name]: value });
const newSearch = generateSearchFromFilters(updatedSearch); const newSearch = generateSearchFromFilters(updatedQueryParams);
push({ search: encodeURI(newSearch) }); push({ search: encodeURI(newSearch) });
}; };

View File

@ -0,0 +1,19 @@
import { useEffect } from 'react';
const useOutsideClick = (ref, callback) => {
const handleClick = e => {
if (ref.current && !ref.current.contains(e.target)) {
callback();
}
};
useEffect(() => {
document.addEventListener('click', handleClick);
return () => {
document.removeEventListener('click', handleClick);
};
});
};
export default useOutsideClick;