@ant-design/icons#FilterFilled TypeScript Examples

The following examples show how to use @ant-design/icons#FilterFilled. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Filters.tsx    From condo with MIT License 5 votes vote down vote up
getFilterIcon: FilterIconType = (filtered) => <FilterFilled style={{ color: filtered ? colors.sberPrimary[5] : undefined }} />
Example #2
Source File: TableFilter.tsx    From condo with MIT License 5 votes vote down vote up
getFilterIcon = filtered => <FilterFilled style={filtered ? STYLE_FILTERED : STYLE_NO_COLOR} />
Example #3
Source File: PaymentsTable.tsx    From condo with MIT License 4 votes vote down vote up
PaymentsTable: React.FC<IPaymentsTableProps> = ({ billingContext, contextsLoading }): JSX.Element => {
    const intl = useIntl()
    const searchPlaceholder = intl.formatMessage({ id: 'filters.FullSearch' })
    const filtersButtonLabel = intl.formatMessage({ id: 'FiltersLabel' })
    const startDateMessage = intl.formatMessage({ id: 'pages.condo.meter.StartDate' })
    const endDateMessage = intl.formatMessage({ id: 'pages.condo.meter.EndDate' })

    const { isSmall } = useLayoutContext()
    const router = useRouter()
    const userOrganization = useOrganization()

    const { filters, sorters, offset } = parseQuery(router.query)
    const hasFilters = !isEmpty(filters)

    if (hasFilters) {
        shouldApplyDefaultFilter = false
        isDefaultFilterApplied = true
    }

    if (shouldApplyDefaultFilter) {
        filters.advancedAt = DEFAULT_DATE_RANGE_STR
    }

    const appliedFiltersCount = Object.keys(filters).length
    const currencyCode = get(billingContext, ['integration', 'currencyCode'], 'RUB')

    const tableColumns = usePaymentsTableColumns(currencyCode)

    const organizationId = get(userOrganization, ['organization', 'id'], '')
    const queryMetas = usePaymentsTableFilters(billingContext, organizationId)

    const {
        MultipleFiltersModal,
        ResetFiltersModalButton,
        setIsMultipleFiltersModalVisible,
    } = useMultipleFiltersModal(queryMetas, PaymentsFilterTemplate)

    const currentPageIndex = getPageIndexFromOffset(offset, DEFAULT_PAGE_SIZE)
    const { filtersToWhere, sortersToSortBy } = useQueryMappers(queryMetas, SORTABLE_PROPERTIES)

    const searchPaymentsQuery: Record<string, unknown> = {
        ...filtersToWhere(filters),
        organization: { id: organizationId },
        deletedAt: null,
        status_in: [PAYMENT_WITHDRAWN_STATUS, PAYMENT_DONE_STATUS],
    }

    const sortBy = sortersToSortBy(sorters, PAYMENTS_DEFAULT_SORT_BY)

    const {
        loading,
        count,
        objs,
        error,
    } = Payment.useObjects({
        where: searchPaymentsQuery,
        sortBy: sortBy as SortPaymentsBy[],
        first: DEFAULT_PAGE_SIZE,
        skip: (currentPageIndex - 1) * DEFAULT_PAGE_SIZE,
    }, {
        fetchPolicy: 'network-only',
    })

    const [search, handleSearchChange] = useSearch<IFilters>(loading)
    const [dateRange, setDateRange] = useDateRangeSearch('advancedAt', loading)

    /**
     * We need to check if default filters should be applied only at first render
     */
    useEffect(() => {
        if (!hasFilters && shouldApplyDefaultFilter && !isDefaultFilterApplied) {
            isDefaultFilterApplied = true
            setDateRange(DEFAULT_DATE_RANGE)
        } else {
            shouldApplyDefaultFilter = false
        }

        return () => {
            isDefaultFilterApplied = false
            shouldApplyDefaultFilter = true
        }
    }, [])

    return (
        <>
            <Row gutter={ROW_GUTTER} align="middle" justify="center">
                <Col span={24}>
                    <TableFiltersContainer>
                        <Row justify="end" gutter={TAP_BAR_ROW_GUTTER}>
                            <Col flex="auto">
                                <Row gutter={TAP_BAR_ROW_GUTTER}>
                                    <Col xs={24} sm={12} lg={8}>
                                        <Input
                                            placeholder={searchPlaceholder}
                                            value={search}
                                            onChange={(e) => {
                                                handleSearchChange(e.target.value)
                                            }}
                                            allowClear
                                        />
                                    </Col>
                                    <Col xs={24} sm={DATE_PICKER_COL_LAYOUT} lg={DATE_PICKER_COL_LAYOUT}>
                                        <DateRangePicker
                                            value={dateRange}
                                            onChange={setDateRange}
                                            placeholder={[startDateMessage, endDateMessage]}
                                        />
                                    </Col>
                                </Row>
                            </Col>

                            <Col offset={1}>
                                <Row justify="end" align="middle">
                                    {
                                        appliedFiltersCount > 0 && (
                                            <Col>
                                                <ResetFiltersModalButton/>
                                            </Col>
                                        )
                                    }
                                    <Col>
                                        <Button
                                            secondary
                                            type="sberPrimary"
                                            onClick={() => setIsMultipleFiltersModalVisible(true)}
                                        >
                                            <FilterFilled/>
                                            {filtersButtonLabel}
                                            {appliedFiltersCount > 0 && ` (${appliedFiltersCount})`}
                                        </Button>
                                    </Col>
                                </Row>
                            </Col>
                        </Row>
                    </TableFiltersContainer>
                </Col>

                <Col span={24}>
                    <Table
                        loading={loading || contextsLoading}
                        dataSource={objs}
                        totalRows={count}
                        columns={tableColumns}
                        scroll={getTableScrollConfig(isSmall)}
                    />
                </Col>
                <ExportToExcelActionBar
                    hidden={isSmall}
                    searchObjectsQuery={searchPaymentsQuery}
                    sortBy={sortBy}
                    exportToExcelQuery={EXPORT_PAYMENTS_TO_EXCEL}
                    disabled={count < 1}
                />
            </Row>
            <MultipleFiltersModal/>
        </>
    )
}
Example #4
Source File: index.tsx    From condo with MIT License 4 votes vote down vote up
MetersPageContent = ({
    searchMeterReadingsQuery,
    tableColumns,
    sortBy,
    filterMetas,
    role,
}) => {
    const intl = useIntl()
    const PageTitleMessage = intl.formatMessage({ id: 'pages.condo.meter.index.PageTitle' })
    const EmptyListLabel = intl.formatMessage({ id: 'pages.condo.meter.index.EmptyList.header' })
    const CreateMeter = intl.formatMessage({ id: 'pages.condo.meter.index.CreateMeterButtonLabel' })
    const SearchPlaceholder = intl.formatMessage({ id: 'filters.FullSearch' })
    const FiltersButtonLabel = intl.formatMessage({ id: 'FiltersLabel' })
    const MeterReadingImportObjectsName = intl.formatMessage({ id: 'meter.import.MeterReading.objectsName.many' })
    const MeterReadingImportObjectsNameManyGenitive = intl.formatMessage({ id: 'meter.import.MeterReading.objectsName.many.genitive' })
    const MeterAccountNumberExistInOtherUnitMessage = intl.formatMessage({ id: 'meter.import.error.MeterAccountNumberExistInOtherUnit' })
    const MeterNumberExistInOrganizationMessage = intl.formatMessage({ id: 'meter.import.error.MeterNumberExistInOrganization' })

    const router = useRouter()
    const { filters, offset } = parseQuery(router.query)
    const currentPageIndex = getPageIndexFromOffset(offset, DEFAULT_PAGE_SIZE)

    const canManageMeterReadings = get(role, 'canManageMeterReadings', false)

    const {
        loading,
        count: total,
        objs: meterReadings,
        refetch,
    } = MeterReading.useObjects({
        sortBy,
        where: searchMeterReadingsQuery,
        first: DEFAULT_PAGE_SIZE,
        skip: (currentPageIndex - 1) * DEFAULT_PAGE_SIZE,
    }, {
        fetchPolicy: 'network-only',
    })

    const { shouldTableScroll, isSmall } = useLayoutContext()
    const [ search, handleSearchChange ] = useSearch(loading)
    const { UpdateMeterModal, setSelectedMeter } = useUpdateMeterModal(refetch)
    const { MultipleFiltersModal, setIsMultipleFiltersModalVisible } = useMultipleFiltersModal(filterMetas, MeterReadingFilterTemplate)
    const [columns, meterReadingNormalizer, meterReadingValidator, meterReadingCreator] = useImporterFunctions()
    const isNoMeterData = isEmpty(meterReadings) && isEmpty(filters) && !loading

    const handleRowAction = useCallback((record) => {
        return {
            onClick: () => {
                const meter = get(record, 'meter')
                setSelectedMeter(meter)
            },
        }
    }, [setSelectedMeter])
    const handleSearch = useCallback((e) => {handleSearchChange(e.target.value)}, [handleSearchChange])
    const handleMultipleFiltersButtonClick = useCallback(() => setIsMultipleFiltersModalVisible(true),
        [setIsMultipleFiltersModalVisible])

    const mutationErrorsToMessages = useMemo(() => ({
        [EXISTING_METER_ACCOUNT_NUMBER_IN_OTHER_UNIT]: MeterAccountNumberExistInOtherUnitMessage,
        [EXISTING_METER_NUMBER_IN_SAME_ORGANIZATION]: MeterNumberExistInOrganizationMessage,
    }), [MeterAccountNumberExistInOtherUnitMessage, MeterNumberExistInOrganizationMessage])

    return (
        <>
            <Head>
                <title>{PageTitleMessage}</title>
            </Head>
            <PageWrapper>
                <PageHeader title={<Typography.Title>{PageTitleMessage}</Typography.Title>}/>
                <TablePageContent>
                    <EmptyListView
                        label={EmptyListLabel}
                        message={''}
                        button={(
                            <ImportWrapper
                                objectsName={MeterReadingImportObjectsName}
                                accessCheck={canManageMeterReadings}
                                onFinish={refetch}
                                columns={columns}
                                maxTableLength={
                                    hasFeature('bigger_limit_for_import') ?
                                        EXTENDED_RECORDS_LIMIT_FOR_IMPORT :
                                        DEFAULT_RECORDS_LIMIT_FOR_IMPORT
                                }
                                rowNormalizer={meterReadingNormalizer}
                                rowValidator={meterReadingValidator}
                                objectCreator={meterReadingCreator}
                                domainTranslate={MeterReadingImportObjectsNameManyGenitive}
                                exampleTemplateLink={'/meter-import-example.xlsx'}
                                mutationErrorsToMessages={mutationErrorsToMessages}
                            >
                                <Button
                                    type={'sberPrimary'}
                                    icon={<DiffOutlined />}
                                    block
                                    secondary
                                />
                            </ImportWrapper>
                        )}
                        createRoute='/meter/create'
                        createLabel={CreateMeter}
                        containerStyle={{ display: isNoMeterData ? 'flex' : 'none' }}
                    />
                    <Row
                        gutter={METERS_PAGE_CONTENT_ROW_GUTTERS}
                        align={'middle'}
                        justify={'center'}
                        hidden={isNoMeterData}
                    >
                        <Col span={24}>
                            <TableFiltersContainer>
                                <Row justify={'space-between'} gutter={METERS_PAGE_CONTENT_ROW_GUTTERS}>
                                    <Col xs={24} lg={7}>
                                        <Input
                                            placeholder={SearchPlaceholder}
                                            onChange={handleSearch}
                                            value={search}
                                            allowClear
                                        />
                                    </Col>
                                    <Col>
                                        <Row gutter={[10, 0]} align={'middle'} justify={'center'}>
                                            {
                                                canManageMeterReadings && (
                                                    <Col>
                                                        <ImportWrapper
                                                            objectsName={MeterReadingImportObjectsName}
                                                            accessCheck={canManageMeterReadings}
                                                            onFinish={refetch}
                                                            columns={columns}
                                                            maxTableLength={hasFeature('bigger_limit_for_import') ?
                                                                EXTENDED_RECORDS_LIMIT_FOR_IMPORT :
                                                                DEFAULT_RECORDS_LIMIT_FOR_IMPORT
                                                            }
                                                            rowNormalizer={meterReadingNormalizer}
                                                            rowValidator={meterReadingValidator}
                                                            objectCreator={meterReadingCreator}
                                                            domainTranslate={MeterReadingImportObjectsNameManyGenitive}
                                                            exampleTemplateLink={'/meter-import-example.xlsx'}
                                                            mutationErrorsToMessages={mutationErrorsToMessages}
                                                        >
                                                            <Button
                                                                type={'sberPrimary'}
                                                                icon={<DiffOutlined />}
                                                                block
                                                                secondary
                                                            />
                                                        </ImportWrapper>
                                                    </Col>
                                                )
                                            }
                                            <Col>
                                                <Button
                                                    secondary
                                                    type={'sberPrimary'}
                                                    onClick={handleMultipleFiltersButtonClick}
                                                >
                                                    <FilterFilled/>
                                                    {FiltersButtonLabel}
                                                </Button>
                                            </Col>
                                        </Row>
                                    </Col>
                                </Row>
                            </TableFiltersContainer>
                        </Col>
                        <Col span={24}>
                            <Table
                                scroll={getTableScrollConfig(shouldTableScroll)}
                                totalRows={total}
                                loading={loading}
                                dataSource={meterReadings}
                                columns={tableColumns}
                                onRow={handleRowAction}
                            />
                        </Col>
                        <ExportToExcelActionBar
                            hidden={isSmall}
                            searchObjectsQuery={searchMeterReadingsQuery}
                            exportToExcelQuery={EXPORT_METER_READINGS_QUERY}
                            sortBy={sortBy}
                        />
                    </Row>
                    <UpdateMeterModal />
                    <MultipleFiltersModal />
                </TablePageContent>
            </PageWrapper>
        </>
    )
}
Example #5
Source File: index.tsx    From condo with MIT License 4 votes vote down vote up
TicketsPageContent = ({
    tableColumns,
    searchTicketsQuery,
    sortBy,
    filterMetas,
    isTicketsFetching,
    total,
    tickets,
}): JSX.Element => {
    const intl = useIntl()
    const PageTitleMessage = intl.formatMessage({ id: 'pages.condo.ticket.index.PageTitle' })
    const SearchPlaceholder = intl.formatMessage({ id: 'filters.FullSearch' })
    const EmptyListLabel = intl.formatMessage({ id: 'ticket.EmptyList.header' })
    const EmptyListMessage = intl.formatMessage({ id: 'ticket.EmptyList.title' })
    const CreateTicket = intl.formatMessage({ id: 'CreateTicket' })
    const FiltersButtonLabel = intl.formatMessage({ id: 'FiltersLabel' })
    const EmergenciesLabel = intl.formatMessage({ id: 'pages.condo.ticket.index.EmergenciesLabel' })
    const WarrantiesLabel = intl.formatMessage({ id: 'pages.condo.ticket.index.WarrantiesLabel' })
    const PaidLabel = intl.formatMessage({ id: 'pages.condo.ticket.index.PaidLabel' })

    const { isSmall, shouldTableScroll } = useLayoutContext()
    const router = useRouter()
    const { filters } = parseQuery(router.query)

    const reduceNonEmpty = (cnt, filter) => cnt + Number(Array.isArray(filters[filter]) && filters[filter].length > 0)
    const appliedFiltersCount = Object.keys(filters).reduce(reduceNonEmpty, 0)

    const { MultipleFiltersModal, ResetFiltersModalButton, setIsMultipleFiltersModalVisible } = useMultipleFiltersModal(filterMetas, TicketFilterTemplate)

    searchTicketsQuery = { ...searchTicketsQuery, ...{ deletedAt: null } }

    const loading = isTicketsFetching

    const [hoveredTicket, setHoveredTicket] = useState()

    const handleRowAction = useCallback((record) => {
        return {
            onClick: async () => {
                await router.push(`/ticket/${record.id}/`)
            },
            onMouseEnter: () => {
                setHoveredTicket(record)
            },
            onMouseLeave: () => {
                setHoveredTicket(null)
            },
        }
    }, [router])

    const [search, handleSearchChange] = useSearch<IFilters>(loading)
    const [emergency, handleEmergencyChange] = useEmergencySearch<IFilters>(loading)
    const [warranty, handleWarrantyChange] = useWarrantySearch<IFilters>(loading)
    const [paid, handlePaidChange] = usePaidSearch<IFilters>(loading)
    const isNoTicketsData = !tickets.length && isEmpty(filters) && !loading

    const tooltipData = useFiltersTooltipData()

    const tableComponents = useMemo(() => ({
        body: {
            row: (props) => (
                <FiltersTooltip
                    filters={filters}
                    tooltipData={tooltipData}
                    rowObject={hoveredTicket}
                    total={total}
                    {...props}
                />
            ),
        },
    }), [tooltipData, filters, hoveredTicket, tickets, total])

    return (
        <>
            <Head>
                <title>{PageTitleMessage}</title>
            </Head>
            <PageWrapper>
                <PageHeader title={
                    <Typography.Title style={PAGE_HEADER_TITLE_STYLES}>{PageTitleMessage}</Typography.Title>
                }/>
                <TablePageContent>
                    {
                        isNoTicketsData
                            ? <EmptyListView
                                label={EmptyListLabel}
                                message={EmptyListMessage}
                                createRoute="/ticket/create"
                                createLabel={CreateTicket}/>
                            : (
                                <Row gutter={ROW_GUTTER} align={'middle'} justify={'center'}>
                                    <Col span={24}>
                                        <TableFiltersContainer>
                                            <Row justify={'end'} gutter={TAP_BAR_ROW_GUTTER}>
                                                <Col flex={'auto'}>
                                                    <Row
                                                        gutter={TOP_BAR_FIRST_COLUMN_GUTTER}
                                                        align={'middle'}
                                                        justify={'start'}
                                                    >
                                                        <Col xs={24} md={8}>
                                                            <Input
                                                                placeholder={SearchPlaceholder}
                                                                onChange={(e) => {
                                                                    handleSearchChange(e.target.value)
                                                                }}
                                                                value={search}
                                                                allowClear={true}
                                                            />
                                                        </Col>
                                                        <Col xs={24} md={16}>
                                                            <Row gutter={[8, 16]}>
                                                                <Col>
                                                                    <Checkbox
                                                                        onChange={handleEmergencyChange}
                                                                        checked={emergency}
                                                                        style={CHECKBOX_STYLE}
                                                                        eventName={'TicketFilterCheckboxEmergency'}
                                                                        data-cy={'ticket__filter-isEmergency'}
                                                                    >
                                                                        {EmergenciesLabel}
                                                                    </Checkbox>
                                                                </Col>
                                                                <Col>
                                                                    <Checkbox
                                                                        onChange={handlePaidChange}
                                                                        checked={paid}
                                                                        style={CHECKBOX_STYLE}
                                                                        eventName={'TicketFilterCheckboxPaid'}
                                                                        data-cy={'ticket__filter-isPaid'}
                                                                    >
                                                                        {PaidLabel}
                                                                    </Checkbox>
                                                                </Col>
                                                                <Col>
                                                                    <Checkbox
                                                                        onChange={handleWarrantyChange}
                                                                        checked={warranty}
                                                                        style={CHECKBOX_STYLE}
                                                                        eventName={'TicketFilterCheckboxWarranty'}
                                                                        data-cy={'ticket__filter-isWarranty'}
                                                                    >
                                                                        {WarrantiesLabel}
                                                                    </Checkbox>
                                                                </Col>
                                                            </Row>
                                                        </Col>
                                                    </Row>
                                                </Col>
                                                <Col>
                                                    <Row justify={'end'} align={'middle'}>
                                                        {
                                                            appliedFiltersCount > 0 ? (
                                                                <Col>
                                                                    <ResetFiltersModalButton/>
                                                                </Col>
                                                            ) : null
                                                        }
                                                        <Col>
                                                            <Button
                                                                secondary
                                                                type={'sberPrimary'}
                                                                onClick={() => setIsMultipleFiltersModalVisible(true)}
                                                                data-cy={'ticket__filters-button'}
                                                                eventName={'TicketClickOpenFiltersButton'}
                                                            >
                                                                <FilterFilled/>
                                                                {FiltersButtonLabel}
                                                                {appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : null}
                                                            </Button>
                                                        </Col>
                                                    </Row>
                                                </Col>
                                            </Row>
                                        </TableFiltersContainer>
                                    </Col>
                                    <Col span={24}>
                                        <Table
                                            scroll={getTableScrollConfig(shouldTableScroll)}
                                            totalRows={total}
                                            loading={loading}
                                            dataSource={tickets}
                                            columns={tableColumns}
                                            onRow={handleRowAction}
                                            components={tableComponents}
                                            data-cy={'ticket__table'}
                                        />
                                    </Col>
                                    <ExportToExcelActionBar
                                        hidden={isSmall}
                                        searchObjectsQuery={searchTicketsQuery}
                                        sortBy={sortBy}
                                        exportToExcelQuery={EXPORT_TICKETS_TO_EXCEL}
                                    />
                                </Row>
                            )
                    }
                    <MultipleFiltersModal/>
                </TablePageContent>
            </PageWrapper>
        </>
    )
}