* Apply default value logic based on filters
( values: string[], filters: FieldFilter )
| 57 | * Apply default value logic based on filters |
| 58 | */ |
| 59 | private static applyDefaultValues( |
| 60 | values: string[], |
| 61 | filters: FieldFilter |
| 62 | ): { processedValues: string[]; hasDefault: boolean } { |
| 63 | if (!filters.defaultValue) { |
| 64 | return { processedValues: values, hasDefault: false }; |
| 65 | } |
| 66 | |
| 67 | const defaultValue = filters.defaultValue; |
| 68 | let processedValues = [...values]; |
| 69 | let hasDefault = false; |
| 70 | |
| 71 | // Existing values are deduplicated case-insensitively by default, so the |
| 72 | // default must be compared with the same fold; otherwise a default that |
| 73 | // differs only by case from an existing value (e.g. default:done vs a |
| 74 | // collected "Done") is added as a separate, near-identical entry. |
| 75 | const isPresent = (value: string): boolean => |
| 76 | filters.caseSensitive |
| 77 | ? value === defaultValue |
| 78 | : this.normalizeForComparison(value) === |
| 79 | this.normalizeForComparison(defaultValue); |
| 80 | |
| 81 | if (filters.defaultAlways) { |
| 82 | // Always include default at the beginning, remove if already present |
| 83 | processedValues = processedValues.filter((v) => !isPresent(v)); |
| 84 | processedValues.unshift(defaultValue); |
| 85 | hasDefault = true; |
| 86 | } else if (filters.defaultEmpty && values.length === 0) { |
| 87 | // Only include default if no values found |
| 88 | processedValues = [defaultValue]; |
| 89 | hasDefault = true; |
| 90 | } else if (!filters.defaultEmpty && !filters.defaultAlways) { |
| 91 | // Default behavior: include if not already present and prepend |
| 92 | if (!processedValues.some(isPresent)) { |
| 93 | processedValues.unshift(defaultValue); |
| 94 | hasDefault = true; |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | return { processedValues, hasDefault }; |
| 99 | } |
| 100 | |
| 101 | /** |
| 102 | * Promotes `value` to the front of an already-processed suggestion list, |