(messages)
| 97 | } |
| 98 | |
| 99 | export function filterMessages(messages) { |
| 100 | if (state.messageFilters.length === 0) { |
| 101 | return messages; |
| 102 | } |
| 103 | |
| 104 | return messages.filter(msg => { |
| 105 | try { |
| 106 | const parsed = JSON.parse(msg.data); |
| 107 | |
| 108 | return state.messageFilters.every(filter => { |
| 109 | const fieldValue = getNestedValue(parsed, filter.field); |
| 110 | |
| 111 | if (fieldValue === undefined) { |
| 112 | return false; |
| 113 | } |
| 114 | |
| 115 | const fieldValues = Array.isArray(fieldValue) ? fieldValue : [fieldValue]; |
| 116 | const filterValueStr = String(filter.value); |
| 117 | |
| 118 | return fieldValues.some(value => { |
| 119 | const fieldValueStr = String(value); |
| 120 | |
| 121 | if (filter.mode === 'equals') { |
| 122 | return fieldValueStr === filterValueStr; |
| 123 | } else if (filter.mode === 'contains') { |
| 124 | return fieldValueStr.includes(filterValueStr); |
| 125 | } |
| 126 | |
| 127 | return true; |
| 128 | }); |
| 129 | }); |
| 130 | } catch (e) { |
| 131 | return false; |
| 132 | } |
| 133 | }); |
| 134 | } |
| 135 | |
| 136 | export function addFilterCondition() { |
| 137 | const availableFields = getAvailableFields(); |
no test coverage detected