All files / modules/85-cv/components/TableFilter TableFilter.tsx

100% Statements 17/17
87.5% Branches 7/8
100% Functions 3/3
100% Lines 17/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46              37x 37x 37x 37x 37x                   37x 113x 113x 113x 113x             1x 1x 1x 1x 1x 1x 1x              
/*
 * Copyright 2021 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import React, { useState } from 'react'
import { debounce } from 'lodash-es'
import { TextInput, Container } from '@wings-software/uicore'
import cx from 'classnames'
import css from './TableFilter.module.scss'
 
export interface TableFilterProps {
  appliedFilter?: string
  onFilter: (filterValue: string) => void
  className?: string
  placeholder?: string
  throttle?: number
}
 
export function TableFilter(props: TableFilterProps): JSX.Element {
  const { appliedFilter, onFilter, className, placeholder, throttle } = props
  const [filter, setFilter] = useState<string | undefined>(appliedFilter)
  const [, setDebouncedFunc] = useState()
  return (
    <Container className={cx(css.main, className)}>
      <TextInput
        leftIcon="search"
        placeholder={placeholder}
        value={filter || ''}
        onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
          e.persist()
          setFilter(e.target.value)
          setDebouncedFunc((prevDebounce?: any) => {
            prevDebounce?.cancel()
            const updatedDebouncedFunc = debounce(onFilter, throttle || 750)
            updatedDebouncedFunc(e.target.value)
            return updatedDebouncedFunc as any
          })
        }}
      />
    </Container>
  )
}