Николай Ланец
12 мар. 2019 г., 5:04

MODX-Клуб 2.14.2 Фильтры по проектам, задачам и пользователям

Всем привет!

Совсем недавно я писал про то, что на сайте Клуба появились новый фильтры на базе компонента @prisma-cms/filters. Как и обещал, добавил их и в других разделах, в частности в проектах, задачах, таймерах и пользователях.

Теперь можно, к примеру, найти все проекты, в которых есть выполняемые задачи: https://modxclub.ru/projects?filters=%7B%22Tasks_some%22%3A%7B%22status%22%3A%22Progress%22%7D%7D

или все новые задачи по проектам, содержащим в названии @prisma-cms: https://modxclub.ru/tasks?filters=%7B%22Project%22%3A%7B%22name_contains%22%3A%22%40prisma-cms%22%7D%2C%22status%22%3A%22New%22%7D

или пользователей, участвующих в каких-либо проектах: https://modxclub.ru/people?filters=%7B%22Projects_some%22%3A%7B%7D%7D

или пользователей, которые выполняли какие-либо задачи: https://modxclub.ru/people?filters=%7B%22Timers_some%22%3A%7B%7D%7D

В общем, фильтром можно наделать много-много всяких разных.

Кстати, тут вдруг выяснилось, что некоторые думают, будто я эти фильтры под каждую задачу как-то генерирую вручную, то есть под проекты сгенерировал, потом пошел и под пользователей сгенерировал, а вот под другие сущности (ресурсы и т.п.), если не сгенерировал, то их и не будет. Это совсем не так. Вот как фильтры подключаются на любой странице:
renderFilters() { const { filters, setFilters, } = this.props; return filters && setFilters ? <Filters queryName="users" filters={filters} setFilters={setFilters} /> : null; }
То есть все, что мне надо, это подключить компонент Filters и передать в него название запроса, для которого надо сформировать фильтры (в данном случае users). Это все, что необходимо для того, чтобы фильтры появились на странице и позволяли делать сложные вложенные условия.

Параметр filters - это не набор всех доступных фильтров, а объект с текущими условиями, к примеру, filters={{username: "Fi1osof"}}

setFilters - это функция обновления фильтров в состоянии, то есть вызывается компонентом, когда фильтры были изменены, чтобы можно было их переписать у себя в текущем состоянии. Простейший вариант здесь - это просто обновить стейт
filters={filters => this.setState({ filters, })}
Но у меня функция более сложная написана и используется, потому что состояния фильтров пишутся в УРЛ и читаются оттуда. Пример: https://github.com/MODX-Club/modxclub.ru/blob/2c826870d3a4b321c0cd9666428ac066651d6862/src/components/pages/UsersPage/index.js#L37-L135

P.S. Чуть-чуть доработал страницу списка пользователей, теперь на ней видно кто в каких проектах участвует. В свое время была поставлена на это задача.
Прикольные фильтры получаются:) До портфолио теперь можно докопаться:)
Супер) Надо все добавить)))

Добавить комментарий