Filtering an object by multiple arguments(inputs)

I have a lot of inputs, after which my object is supposed to filter, I can hardcode it, but there is probably a smarter way to do it

Filter state :

  const [filters, setFilters] = useState<FiltersType>({
    login: "",
    name: "",
    surrname: "",
  });

Example data:

const data: UserRow[] = [
 
  {
    key: "1",
    login: "[email protected]",
    name: "John",
    surrname: "Smith",
    role: ["user"],
  },
  {
    key: "2",
    login: "[email protected]",
    name: "Andrew",
    surrname: "Johnson",
    role: ["user"],
  },

];
data.filter((e) => {
              if (
                (!filters.name || e.name.includes(filters.name)) &&
                (!filters.surrname || e.surrname.includes(filters.surrname)) &&
                (!e.login ||
                  e.login.toLowerCase().includes(filters.login.toLowerCase()))
              ) {
                return true;
              }
              return false;
            })

For example, it can be done like this, but as you can see it looks bad and scales poorly when adding new fields, I tried to simplify it using “Object.entries()”, but ultimately failed :(. What is the best pattern for such a problem?