12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // exports.SearchFilter = (search = '', fields = []) => {
- // if (!search || fields.length === 0) return {};
- // return {
- // OR: fields.map((field) => ({
- // [field]: {
- // contains: search,
- // mode: 'insensitive'
- // }
- // }))
- // };
- // };
- // exports.SearchFilter = (search = '', fields = []) => {
- // if (!search || fields.length === 0) return {};
- // const or = [];
- // for (const field of fields) {
- // const parts = field.split('.');
- // if (parts.length === 1) {
- // or.push({
- // [field]: {
- // contains: search,
- // mode: 'insensitive',
- // },
- // });
- // } else if (parts.length === 2) {
- // const [relation, subfield] = parts;
- // or.push({
- // [relation]: {
- // is: {
- // [subfield]: {
- // contains: search,
- // mode: 'insensitive',
- // }
- // }
- // }
- // });
- // }
- // }
- // return { OR: or };
- // };
- exports.SearchFilter = (search = '', fields = [], arrayRelations = []) => {
- if (!search || fields.length === 0) return {};
- const buildNestedFilter = (parts, value) => {
- if (parts.length === 1) {
- return {
- [parts[0]]: {
- contains: value,
- mode: 'insensitive',
- },
- };
- }
- const [current, ...rest] = parts;
- const nested = buildNestedFilter(rest, value);
- // Jika current adalah array relation
- if (arrayRelations.includes(current)) {
- return {
- [current]: {
- some: nested,
- },
- };
- } else {
- return {
- [current]: {
- is: nested,
- },
- };
- }
- };
- const or = fields.map(field => {
- const parts = field.split('.');
- return buildNestedFilter(parts, search);
- });
- return { OR: or };
- };
|