1. Vamos começar fazendo o uso dos filtros que temos dentro de ComplementFilters

    const ComplementFilters = () => {
      const [category, setCategory] = useState("");
      const queryContext = useContext(QueryContext);
    
  2. Agora nós iremos criar os fields, para que a gente tenha a manipulação de valor do input

    const [fields, setFields] = useState({
      minPrice: "",
      maxPrice: "",
    });
    
  3. E com isso feito, nós vamos criar as funções que vamos usar para colocar os filtros

    const handleMinPrice = () => {
      queryContext.addFilter(`minPrice=${fields.minPrice}`);
    };
    
    const handleMaxPrice = () => {
      queryContext.addFilter(`maxPrice=${fields.maxPrice}`);
    };
    
  4. Ao ter feito isso nós podemos então criar a função que será chamada quando o usuário clicar em aplicar os filtros.

    const handleSearchFiltered = () => {
      if (fields.minPrice) {
        handleMinPrice();
      }
      if (fields.maxPrice) {
        handleMaxPrice();
      }
    };
    
  5. E aí a gente fazendo isso vai conseguir verificar se está preenchido os fields, e caso não esteja, ele não vai chamar a função. Nós vamos também nessa função chamar o “showFilters” para que ao usar os filtros, ele ser fechado

  6. Para isso precisamos passar o state para o componente

    {!showFilters ? null : (
      <ComplementFilters setShowFilters={setShowFilters} />
    )}
    
  7. Vamos receber o state no componente para usarmos na função

    interface Props {
      setShowFilters: React.Dispatch<SetStateAction<boolean>>;
    }
    
    const ComplementFilters = ({ setShowFilters }: Props) => {
    
  8. E agora podemos deixar como falso para manipular o estado

    const handleSearchFiltered = () => {
      if (fields.minPrice) {
        handleMinPrice();
      }
      if (fields.maxPrice) {
        handleMaxPrice();
      }
    
    	setShowFilters(false);
    };
    
  9. Já que está tudo configurado, vamos usar ele agora, e poderemos testar ele colocando as informações de preço mínimo e máximo.

    <ApllyButton onPress={handleSearchFiltered}>
    	<ButtonText>APLICAR</ButtonText>
    </ApllyButton>
    
  10. Vamos aproveitar para colocar a função de limpar, para isso, iremos lá em search, e abaixo da função de addFilter, vamos colocar a função que deixa os filtros apenas com a query original

    const resetFilter = () => {
    	setFilters([query]);
    };
    
    const queryContextValue = {
    	filters,
      addFilter,
      resetFilter,
    };
    
  11. Precisamos então, passar também esse resetFilter para o context, para que ele reconheça em qualquer lugar, vamos para queryContext

    import React from "react";
    
    interface QueryType {
      filters: string[];
      addFilter: (filter: string) => void;
      resetFilter: () => void;
    }
    
    export const QueryContext = React.createContext<QueryType>({
      filters: [],
      addFilter: () => {},
      resetFilter: () => {},
    });
    
  12. Agora, basta usarmos isso lá no nosso botão de limpar,

    const handleCleanFilters = () => {
      queryContext.resetFilter();
      setShowFilters(false);
    };
    
    {/* Outros códigos */}
    
    <CleanButton onPress={handleCleanFilters}>
    	<ButtonText>LIMPAR</ButtonText>
    </CleanButton>
    
  13. Dessa forma, quando o usuário clicar em limpar os filtros, nós vamos fechar os filtros também e vamos limpar tudo na query