
/*fields example = [
    ['id'],
    ['companyInformation', 'companyInformation', 'name']
]*/

const getFieldValue = (fields: string[], data: any): string => {
	if (fields.length === 0) return data;
	const [key, ...otherFields] = fields;

	if (data[key]) 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 (typeof value === "string") {
                return value.toLowerCase().includes(searchText);
            }

            if (typeof value === "number") {
                return (value as Number).toString().includes(searchText);
            }
        });
    });
}