@n3/react-filters
v0.11.2
Published
Filters component for react applications
Readme
⚠️ ATTENTION ⚠️
Проект перемещён в главный репозиторий компонентов.
@n3/react-filters
Установка
npm install @n3/react-filtersили
yarn add @n3/react-filtersAPI
Использование
import Filters from '@n3/react-filters';
...
<Filters
isAdaptive={isAdaptive}
filters={filters}
filterData={filterData}
values={values}
errors={errors}
appliedFilters={appliedFilters}
canReset={canReset}
setValues={setValues}
applyFilters={applyFilters}
handleReset={handleReset}
typeKey={typeKey}
labelKey={labelKey}
filtersBlockComponent={filtersBlockComponent}
/>Props
isAdaptive: Boolean - необязательное, включить ли адаптивное поведение фильтров, по умолчаниюtruevalues: Object - необязательное, текущие значения фильтров, по умолчанию{}errors: Object - необязательное, текущие ошибки фильтров, по умолчанию{}appliedFilters: Object - необязательное, значения применённых фильтров, по умолчанию{}canReset: Boolean - необязательное, возможен ли сброс фильтров, по умолчаниюfalsesetFiltersValues: Function - обязательное, хэндлер, срабатывающий при изменении значений фильтров. Принимает объект изменённых фильтровsetAndApplyFilters: Function - обязательное, аналогично,setFiltersValues, но должно сразу применить фильтры с новыми значениямиapplyFilters: Function - обязательное, функция применения фильтровhandleReset: Function - необязательное, функция сброса фильтровfilters: Object - обязательное, объект описаний используемых фильтров. Ключ - тип фильтра, значение - описание фильтраfilterData: Array - обязательное, массив используемых фильтровname- обязательное, название фильтраlabel- обязательное, заголовок фильтра, ключ может быть изменён с помощью свойстваlabelKeytype- обязательное, тип фильтра, ключ может быть изменён с помощью свойстваtypeKeyrequired- необязательное, признак обязательности фильтра - отображается звёздочка вместе с заголовком, пустые фильтры с признакомrequiredблокируют кнопкуНайти, ключ может быть изменён с помощью свойстваrequiredKey
typeKey: String - необязательное, ключ для получения типа фильтра, по умолчаниюtypelabelKey: String - необязательное, ключ для получения заголовка фильтра, по умолчаниюlabelrequiredKey: String - необязательное, ключ для получения признака обязательности фильтра, по умолчаниюrequiredfastFiltersNumber- Number, необязательное, количество быстрых фильтров, по умолчанию 0collapsibleButtonText: Function | String - необязательное, текст или функция, возвращающая текст, для кнопки раскрытия/скрытия блока с фильтрами, по умолчаниюВсе фильтры, в качестве аргумента функции передаётся внутреннее состояние блока{ opened: boolean }resetButtonText: String - необязательное, текст для кнопки сброса всех фильтров, по умолчаниюСброситьactionsBlock: Element - необязательное, группа кнопок, расположенных в верхнем-правом углу блока с фильтрамиfiltersBlockComponent: Function - необязательное, кастомный компонент блока фильтров. Принимаетprops:isAdaptive- из компонентаFiltersfilters- из компонентаFiltersfilterData- из компонентаFilterslabelKey- из компонентаFilterstypeKey- из компонентаFiltersvalues- из компонентаFilterserrors- из компонентаFilterssetValues- из компонентаFiltersapplyFilters- асинхронная функция, сначала вызываетapplyFiltersиз компонентаFilters, затем в случае успеха закрывает блок фильтров. Для обозначения ошибки применения фильтров нужно бросить исключениеApplyFiltersError.
styles: Object - необязательное, принимает объект, ключи которого представляют различные внутренние компоненты, составляющих блок с фильтрамиfiltersBlock: Function, возвращает новые стили для элемента, содержащего фильтрыfilterBlock: Function, возвращает новые стили для фильтраactionsBlock: Function, возвращает новые стили для группы кнопок, расположенных в верхнем-правом углу блока с фильтрамиappliedIndicator: Function, возвращает новые стили для индикатора применения фильтра
import { ApplyFiltersError } from '@n3/react-filters';
async function applyFilters() {
...
throw new ApplyFiltersError();
}Описания фильтров
Каждое описание фильтра иммет формат @n3/filters-utils, и представляется объектом вида:
component- react-компонент фильтра. Принимает следующие props:isFastFilter: Boolean - отрендерен ли фильтр в блоке быстрых фильтровlabel: String - лейбл поляpayload: Object - объект, переданный вfiltersDatavalues: Object - текущие значения фильтровerrors: Object - текущие ошибки фильтровfilters: Object - объект, переданный вFilterssetFiltersValues: Function - из родительского компонентаsetAndApplyFilters: Function - из родительского компонентаsetValues: Function - хэндлер, который нужно вызывать при изменении значения фильтра. Первым аргументом принимает объект, ключами которого являются имена изменённых фильтров, а значениями - значения фильтров. Для быстрых фильтров принимаетsetAndApplyFilters, а для обычных -setFiltersValues
checkForApplied: Function - необязательная, функция проверки, применён ли фильтр. Первым аргументом принимаетpayload(объект, переданный вfiltersData), а вторым -appliedFiltersглавного компонента. Должна возвращать массив булево значение. По умолчанию, берёт значение изappliedFiltersпо ключуpayload.nameи проверяет его на истинностьgetNames: Function - необязательная, смотри @n3/filters-utilsserializeValues: Function - необязательная, смотри @n3/filters-utilscheckCanReset: Function - необязательная, смотри @n3/filters-utilsparseValues: Function - необязательная, смотри @n3/filters-utils
Интеграция c react-filterlist
Рекомендуемый способ использования. Инкапсулирует сериализацию, парсинг, изменения, отслеживание возможности сброса фильтров, передачу параметров values, errors и appliedFilters.
Filterlist нужно установить отдельно.
yarn add @vtaits/filterlist @vtaits/react-filterlistИмпорт
// commonjs
import { Filterlist, Filters } from '@n3/react-filters/lib/filterlist';
// es modules
import { Filterlist, Filters } from '@n3/react-filters/es/filterlist';Использование
<Filterlist
filters={filters}
filterData={filterData}
labelKey={labelKey}
typeKey={typeKey}
loadItems={loadItems}
parseFiltersAndSort={parseFiltersAndSort}
onChangeLoadParams={onChangeLoadParams}
{...otherFilterlistProps}
>
{({
isListInited,
listState,
listActions,
}) => (
<div>
<Filters
isAdaptive={isAdaptive}
filtersBlockComponent={filtersBlockComponent}
/>
{otherJsx}
</div>
)}
</Filterlist>filters - смотри выше;
filterData - смотри выше;
labelKey - смотри выше;
typeKey - смотри выше;
isAdaptive - смотри выше;
filtersBlockComponent - смотри выше;
loadItems - аналогично функции loadItems из filterlist, но принимает вторым аргументом объект
{ serializedValues: {...} }, гдеserializedValues- сериализованные значения фильтров;onChangeLoadParams - аналогично функции onChangeLoadParams из react-filterlist, но принимает вторым аргументом объект
{ serializedValues: {...} }, гдеserializedValues- сериализованные значения фильтров;parseFiltersAndSort - аналогично функции parseFiltersAndSort из react-filterlist, но принимает вторым аргументом объект
{ parseValues }, гдеparseValues- асинхронная функция парсинга значений, принимающая только один аргумент - объект значений;otherFilterlistProps - остальные параметры react-filterlist за исключением
isRecountAsync, оно всегдаtrue;isListInited - смотри react-filterlist;
listState - смотри react-filterlist;
listActions - смотри react-filterlist;
Стили
Готовые стили
import '@n3/react-filters/dist/n3-react-filters.css';Исходные postcss-стили
import '@n3/react-filters/postcss/n3-react-filters.css';Для сборки необходим плагин precss, а также настроен импорт из директории node_modules.
Исходные postcss-стили без определения css-переменных
import '@n3/react-filters/postcss/without-variables.css';Для сборки необходим плагин precss, а также настроен импорт из директории node_modules.
