diff --git a/packages/strapi-plugin-content-manager/admin/src/components/Search/index.js b/packages/strapi-plugin-content-manager/admin/src/components/Search/index.js index 784d5ecad8..98efa204ee 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/Search/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/Search/index.js @@ -40,14 +40,14 @@ class Search extends React.Component { this.triggerChange(''); } - triggerChange = (value) => { - this.props.change({ + triggerChange = (value) => ( + this.props.changeParams({ target: { name: 'params.q', value, }, - }); - } + }) + ); render() { const { model } = this.props; @@ -78,13 +78,13 @@ class Search extends React.Component { } Search.defaultProps = { - change: () => {}, + changeParams: () => {}, model: '', value: '', }; Search.propTypes = { - change: PropTypes.func, + changeParams: PropTypes.func, model: PropTypes.string, value: PropTypes.string, }; diff --git a/packages/strapi-plugin-content-manager/admin/src/components/Table/index.js b/packages/strapi-plugin-content-manager/admin/src/components/Table/index.js index 8abaac6877..aaabb449dd 100755 --- a/packages/strapi-plugin-content-manager/admin/src/components/Table/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/Table/index.js @@ -23,6 +23,7 @@ class Table extends React.Component { filters={this.props.filters} colspan={this.props.headers.length + 1} contentType={this.props.routeParams.slug} + search={this.props.search} /> ) : this.props.records.map((record, key) => ( @@ -40,7 +41,7 @@ class Table extends React.Component { /> )); const entriesToDeleteNumber = this.props.entriesToDelete.length; - + return ( {}, + search: '', }; Table.propTypes = { @@ -94,6 +96,7 @@ Table.propTypes = { redirectUrl: PropTypes.string.isRequired, route: PropTypes.object.isRequired, routeParams: PropTypes.object.isRequired, + search: PropTypes.string, sort: PropTypes.string.isRequired, }; diff --git a/packages/strapi-plugin-content-manager/admin/src/components/TableEmpty/index.js b/packages/strapi-plugin-content-manager/admin/src/components/TableEmpty/index.js index 512aa59120..0e04cbac02 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/TableEmpty/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/TableEmpty/index.js @@ -7,26 +7,40 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; +import { upperFirst } from 'lodash'; import styles from './styles.scss'; -function TableEmpty({ colspan, contentType, filters }) { - const id = filters.length > 0 ? 'withFilters' : 'withoutFilter'; +function TableEmpty({ colspan, contentType, filters, search }) { + let id, values; + const model = upperFirst(contentType); + + if (search !== '') { + id = 'withSearch', + values = { contentType: model, search }; + } else { + id = filters.length > 0 ? 'withFilters' : 'withoutFilter'; + values = { contentType: model || 'entry' }; + } return ( ); } +TableEmpty.defaultProps = { + search: '', +}; TableEmpty.propTypes = { colspan: PropTypes.number.isRequired, contentType: PropTypes.string.isRequired, filters: PropTypes.array.isRequired, + search: PropTypes.string, }; export default TableEmpty; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js index 0f48585d5f..acaa9eeb49 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js @@ -9,7 +9,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators, compose } from 'redux'; import { createStructuredSelector } from 'reselect'; -import { capitalize, get, isUndefined, map, omit, toInteger } from 'lodash'; +import { capitalize, get, isUndefined, map, toInteger } from 'lodash'; import cn from 'classnames'; // App selectors @@ -165,7 +165,7 @@ export class ListPage extends React.Component { listPage: { filters, params }, } = this.props; - return `?${generateSearchFromParams(omit(params, 'q'))}&source=${this.getSource()}${generateSearchFromFilters(filters)}`; + return `?${generateSearchFromParams(params)}&source=${this.getSource()}${generateSearchFromFilters(filters)}`; } /** @@ -340,7 +340,7 @@ export class ListPage extends React.Component { }), }, ]; - + return (
@@ -417,6 +417,7 @@ export class ListPage extends React.Component { redirectUrl={this.generateRedirectURI()} route={this.props.match} routeParams={this.props.match.params} + search={params.q} sort={params._sort} /> search .split('&') - .filter(x => !x.includes('_limit') && !x.includes('_page') && !x.includes('_sort') && !x.includes('source')) + .filter(x => !x.includes('_limit') && !x.includes('_page') && !x.includes('_sort') && !x.includes('source') && !x.includes('q')) .reduce((acc, curr) => { const arr = curr.split('='); const split = arr[0].split('_'); @@ -40,10 +40,12 @@ const generateSearchFromFilters = filters => { */ const generateSearchFromParams = params => Object.keys(params).reduce((acc, curr, index) => { - if (index === 0) { - acc = `${curr}=${params[curr]}`; - } else { - acc = `${acc}&${curr}=${params[curr]}`; + if (params[curr] !== '') { + if (index === 0) { + acc = `${curr}=${params[curr]}`; + } else { + acc = `${acc}&${curr}=${params[curr]}`; + } } return acc; }, ''); diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/en.json b/packages/strapi-plugin-content-manager/admin/src/translations/en.json index be274ef4d7..3e3bb6cd4a 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/en.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/en.json @@ -42,6 +42,7 @@ "components.TableEmpty.withFilters": "There is no {contentType} with the applied filters...", "components.TableEmpty.withoutFilter": "There is no {contentType}...", + "components.TableEmpty.withSearch": "There is no {contentType} corresponding to the search ({search})...", "EditRelations.title": "Relational data", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json index e87f85bb44..e138c88b5a 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json @@ -33,6 +33,7 @@ "components.TableEmpty.withFilters": "Aucun {contentType} n'a été trouvé avec ces filtres...", "components.TableEmpty.withoutFilter": "Aucun {contentType} n'a été trouvé...", + "components.TableEmpty.withSearch": "Aucun {contentType} n'a été trouvé avec cette recherche ({search})...", "components.FilterOptions.FILTER_TYPES.=": "est", "components.FilterOptions.FILTER_TYPES._ne": "n'est pas", diff --git a/packages/strapi-plugin-content-manager/config/queries/bookshelf.js b/packages/strapi-plugin-content-manager/config/queries/bookshelf.js index 38e3f26d29..09eabda1f9 100755 --- a/packages/strapi-plugin-content-manager/config/queries/bookshelf.js +++ b/packages/strapi-plugin-content-manager/config/queries/bookshelf.js @@ -46,11 +46,11 @@ module.exports = { .count(); }, - search: async function (params, populate) { + search: async function (params, populate) { // eslint-disable-line no-unused-vars return []; }, - countSearch: async function (params = {}) { + countSearch: async function (params = {}) { // eslint-disable-line no-unused-vars return 0; }, diff --git a/packages/strapi-plugin-content-manager/config/queries/mongoose.js b/packages/strapi-plugin-content-manager/config/queries/mongoose.js index 26cefc8f0b..7d62af99d4 100755 --- a/packages/strapi-plugin-content-manager/config/queries/mongoose.js +++ b/packages/strapi-plugin-content-manager/config/queries/mongoose.js @@ -18,11 +18,11 @@ module.exports = { .count()); }, - search: async function (params, populate) { + search: async function (params, populate) { // eslint-disable-line no-unused-vars return []; }, - countSearch: async function (params = {}) { + countSearch: async function (params = {}) { // eslint-disable-line no-unused-vars return 0; },
- +