From ea32c05976e56c9ec74cd49311f025445846ab52 Mon Sep 17 00:00:00 2001 From: soupette Date: Tue, 9 Jul 2019 12:31:18 +0200 Subject: [PATCH] Created filterpicker --- .../src/components/PluginHeaderTitle/index.js | 35 ++++++-- .../src/components/FilterPicker/index.js | 51 +++++++++++ .../admin/src/containers/ListView/index.js | 84 +++++++++++++++---- 3 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js diff --git a/packages/strapi-helper-plugin/lib/src/components/PluginHeaderTitle/index.js b/packages/strapi-helper-plugin/lib/src/components/PluginHeaderTitle/index.js index 80e8c162b6..383ec7df20 100644 --- a/packages/strapi-helper-plugin/lib/src/components/PluginHeaderTitle/index.js +++ b/packages/strapi-helper-plugin/lib/src/components/PluginHeaderTitle/index.js @@ -4,7 +4,7 @@ * */ -import React from 'react'; +import React, { memo } from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { isEmpty, isFunction, isObject } from 'lodash'; @@ -13,7 +13,14 @@ import LoadingBar from '../LoadingBar'; import styles from './styles.scss'; -function PluginHeaderTitle({ description, title, titleId, withDescriptionAnim, icon, onClickIcon }) { +function PluginHeaderTitle({ + description, + title, + titleId, + withDescriptionAnim, + icon, + onClickIcon, +}) { const contentTitle = formatData(title); const contentDescription = formatData(description); @@ -24,22 +31,34 @@ function PluginHeaderTitle({ description, title, titleId, withDescriptionAnim, i {contentTitle}  {icon && ( - + )} {withDescriptionAnim ? ( ) : ( -

{contentDescription} 

+

+ {contentDescription}  +

)} ); } const formatData = data => { - - if (isObject(data)) { - return isEmpty(data.id) ? null : ; + if (isObject(data) && !isEmpty(data.id)) { + return ( + + ); } if (isFunction(data)) { @@ -81,4 +100,4 @@ PluginHeaderTitle.propTypes = { withDescriptionAnim: PropTypes.bool, }; -export default PluginHeaderTitle; +export default memo(PluginHeaderTitle); diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js new file mode 100644 index 0000000000..f82166f732 --- /dev/null +++ b/packages/strapi-plugin-content-manager/admin/src/components/FilterPicker/index.js @@ -0,0 +1,51 @@ +import React, { memo } from 'react'; +import PropTypes from 'prop-types'; +import { capitalize } from 'lodash'; +import { Collapse } from 'reactstrap'; +import { FormattedMessage } from 'react-intl'; +import { PluginHeader } from 'strapi-helper-plugin'; + +import Container from '../Container'; +import pluginId from '../../pluginId'; + +function FilterPicker({ actions, isOpen, name }) { + const renderTitle = () => ( + + {message => ( + + {capitalize(name)} -  + {message} + + )} + + ); + return ( + + + + + + ); +} + +FilterPicker.defaultProps = { + actions: [], + isOpen: false, + name: '', +}; + +FilterPicker.propTypes = { + actions: PropTypes.array, + isOpen: PropTypes.bool, + name: PropTypes.string, +}; + +export default memo(FilterPicker); diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js index f9932180a4..298df6eb6d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListView/index.js @@ -18,6 +18,7 @@ import pluginId from '../../pluginId'; import FilterLogo from '../../assets/images/icon_filter.png'; import Container from '../../components/Container'; +import FilterPicker from '../../components/FilterPicker'; import InputCheckbox from '../../components/InputCheckbox'; import Search from '../../components/Search'; @@ -48,6 +49,7 @@ function ListView({ strapi.useInjectReducer({ key: 'listView', reducer, pluginId }); strapi.useInjectSaga({ key: 'listView', saga, pluginId }); const [isLabelPickerOpen, setLabelPickerState] = useState(false); + const [isFilterPickerOpen, setFilterPickerState] = useState(false); const getLayoutSettingRef = useRef(); getLayoutSettingRef.current = settingName => get(layouts, [slug, 'settings', settingName], ''); @@ -74,6 +76,8 @@ function ListView({ const toggleLabelPickerState = () => setLabelPickerState(prevState => !prevState); + const toggleFilterPickerState = () => + setFilterPickerState(prevState => !prevState); useEffect(() => { getData(slug, generateSearchParams()); @@ -127,26 +131,72 @@ function ListView({ target: { name: `${slug}.${name}`, value: !value }, }); }; + const filterPickerActions = [ + { + label: `${pluginId}.components.FiltersPickWrapper.PluginHeader.actions.clearAll`, + kind: 'secondary', + onClick: () => { + toggleFilterPickerState(); + // this.props.close(); + // this.props.removeAllFilters(); + }, + }, + { + label: `${pluginId}.components.FiltersPickWrapper.PluginHeader.actions.apply`, + kind: 'primary', + type: 'submit', + onClick: () => { + emitEvent('didFilterEntries'); + toggleFilterPickerState(); + // this.props.onSubmit(e); + }, + }, + ]; return ( <> + - 1 - ? `${pluginId}.containers.List.pluginHeaderDescription` - : `${pluginId}.containers.List.pluginHeaderDescription.singular`, - values: { - label: count, - }, - }} - title={{ - id: slug || 'Content Manager', - }} - withDescriptionAnim={isLoading} - /> + {!isFilterPickerOpen && ( + 1 + ? `${pluginId}.containers.List.pluginHeaderDescription` + : `${pluginId}.containers.List.pluginHeaderDescription.singular`, + values: { + label: count, + }, + }} + title={{ + id: slug || 'Content Manager', + }} + withDescriptionAnim={isLoading} + /> + )} + {/* + 1 + ? `${pluginId}.containers.List.pluginHeaderDescription` + : `${pluginId}.containers.List.pluginHeaderDescription.singular`, + values: { + label: count, + }, + }} + title={{ + id: slug || 'Content Manager', + }} + withDescriptionAnim={isLoading} + /> + */} {getLayoutSettingRef.current('searchable') && (
- + filter_logo