(
message: string,
values: PromptEntry<V>[],
options: PromptMultipleSelectOptions = {},
)
| 107 | * ``` |
| 108 | */ |
| 109 | export function promptMultipleSelect<V = undefined>( |
| 110 | message: string, |
| 111 | values: PromptEntry<V>[], |
| 112 | options: PromptMultipleSelectOptions = {}, |
| 113 | ): PromptEntry<V>[] | null { |
| 114 | if (!Deno.stdin.isTerminal()) return null; |
| 115 | |
| 116 | const selectedAbsoluteIndexes = new Set<number>(); |
| 117 | |
| 118 | handlePromptSelect( |
| 119 | message, |
| 120 | options.indicator ?? "❯", |
| 121 | values, |
| 122 | options.clear, |
| 123 | options.visibleLines, |
| 124 | options.fitToRemainingHeight, |
| 125 | (_active, absoluteIndex) => { |
| 126 | const checked = selectedAbsoluteIndexes.has(absoluteIndex); |
| 127 | return checked ? CHECKED : UNCHECKED; |
| 128 | }, |
| 129 | (str, absoluteIndex, { |
| 130 | etx, |
| 131 | up, |
| 132 | down, |
| 133 | remove, |
| 134 | inputStr, |
| 135 | }) => { |
| 136 | switch (str) { |
| 137 | case ETX: |
| 138 | return etx(); |
| 139 | case ARROW_UP: |
| 140 | up(); |
| 141 | break; |
| 142 | case ARROW_DOWN: |
| 143 | down(); |
| 144 | break; |
| 145 | case CR: |
| 146 | return true; |
| 147 | case " ": { |
| 148 | if (absoluteIndex !== undefined) { |
| 149 | if (selectedAbsoluteIndexes.has(absoluteIndex)) { |
| 150 | selectedAbsoluteIndexes.delete(absoluteIndex); |
| 151 | } else { |
| 152 | selectedAbsoluteIndexes.add(absoluteIndex); |
| 153 | } |
| 154 | } |
| 155 | break; |
| 156 | } |
| 157 | case DELETE: |
| 158 | remove(); |
| 159 | break; |
| 160 | default: |
| 161 | inputStr(); |
| 162 | break; |
| 163 | } |
| 164 | |
| 165 | return false; |
| 166 | }, |
no test coverage detected