/*fields example = [ ['id'], ['companyInformation', 'companyInformation', 'name'] ]*/ const getFieldValue = (fields: string[], data: any): string | string[] => { if (fields.length === 0) return data; const [key, ...otherFields] = fields; if (Array.isArray(data[key])) { // If the key points to an array, like "participants", iterate through each item in the array return data[key] .map((item: any) => getFieldValue(otherFields, item)) // Get the value for each item .filter(Boolean); // Filter out undefined or null values } else if (data[key] !== undefined) { // If it's not an array, just go deeper in the object return getFieldValue(otherFields, data[key]); } return data; }; export const search = (text: string, fields: string[][], rows: any[]) => { const searchText = text.toLowerCase(); return rows.filter((row) => { return fields.some((fieldsKeys) => { const value = getFieldValue(fieldsKeys, row); if (Array.isArray(value)) { // If it's an array (e.g., participants' names), check each value in the array return value.some((v) => v && typeof v === "string" && v.toLowerCase().includes(searchText)); } if (typeof value === "string") { return value.toLowerCase().includes(searchText); } if (typeof value === "number") { return (value as Number).toString().includes(searchText); } }); }); };