1
+ import identity from '../../../utils/identity'
1
2
import { keys } from '../../../utils/object'
2
- import { arrayIncludes } from '../../../utils/array'
3
+ import { arrayIncludes , concat } from '../../../utils/array'
3
4
import { isArray , isFunction } from '../../../utils/inspect'
4
5
import { IGNORED_FIELD_KEYS } from './constants'
5
6
7
+ // Convert object to array of ignored keys
8
+ const IGNORED = keys ( IGNORED_FIELD_KEYS )
9
+
6
10
// Return a copy of a row after all reserved fields have been filtered out
7
- const sanitizeRow = ( row , ignoreFields , includeFields , fieldsObj = { } ) =>
8
- keys ( row ) . reduce ( ( obj , key ) => {
11
+ const sanitizeRow = ( row , ignoreFields , includeFields , fieldsObj = { } ) => {
12
+ const ignore = concat ( IGNORED , ignoreFields ) . filter ( identity )
13
+ const include = isArray ( includeFields ) && includeFields . length > 0 ? includeFields : null
14
+ return keys ( row ) . reduce ( ( obj , key ) => {
9
15
// Ignore special fields that start with `_`
10
16
// Ignore fields in the `ignoreFields` array
11
- // Include only fields in the `includeFields` array
12
- if (
13
- ! IGNORED_FIELD_KEYS [ key ] &&
14
- ! ( isArray ( ignoreFields ) && arrayIncludes ( ignoreFields , key ) ) &&
15
- ! ( isArray ( includeFields ) && includeFields . length > 0 && ! arrayIncludes ( includeFields , key ) )
16
- ) {
17
+ // Include only fields in the `includeFields` array (if present)
18
+ if ( ! arrayIncludes ( ignore , key ) && ! ( include && ! arrayIncludes ( include , key ) ) ) {
17
19
const f = fieldsObj [ key ] || { }
18
20
const val = row [ key ]
19
21
// `f.filterByFormatted` will either be a function or boolean
@@ -28,5 +30,6 @@ const sanitizeRow = (row, ignoreFields, includeFields, fieldsObj = {}) =>
28
30
}
29
31
return obj
30
32
} , { } )
33
+ }
31
34
32
35
export default sanitizeRow
0 commit comments