(
container,
text,
{selector = '*', exact = true, collapseWhitespace, trim, normalizer} = {},
)
| 47 | } |
| 48 | |
| 49 | const queryAllByLabelText: AllByText = ( |
| 50 | container, |
| 51 | text, |
| 52 | {selector = '*', exact = true, collapseWhitespace, trim, normalizer} = {}, |
| 53 | ) => { |
| 54 | checkContainerType(container) |
| 55 | |
| 56 | const matcher = exact ? matches : fuzzyMatches |
| 57 | const matchNormalizer = makeNormalizer({collapseWhitespace, trim, normalizer}) |
| 58 | const matchingLabelledElements = Array.from( |
| 59 | container.querySelectorAll<HTMLElement>('*'), |
| 60 | ) |
| 61 | .filter(element => { |
| 62 | return ( |
| 63 | getRealLabels(element).length || element.hasAttribute('aria-labelledby') |
| 64 | ) |
| 65 | }) |
| 66 | .reduce<HTMLElement[]>((labelledElements, labelledElement) => { |
| 67 | const labelList = getLabels(container, labelledElement, {selector}) |
| 68 | labelList |
| 69 | .filter(label => Boolean(label.formControl)) |
| 70 | .forEach(label => { |
| 71 | if ( |
| 72 | matcher(label.content, label.formControl, text, matchNormalizer) && |
| 73 | label.formControl |
| 74 | ) { |
| 75 | labelledElements.push(label.formControl) |
| 76 | } |
| 77 | }) |
| 78 | const labelsValue = labelList |
| 79 | .filter(label => Boolean(label.content)) |
| 80 | .map(label => label.content) |
| 81 | if ( |
| 82 | matcher(labelsValue.join(' '), labelledElement, text, matchNormalizer) |
| 83 | ) { |
| 84 | labelledElements.push(labelledElement) |
| 85 | } |
| 86 | if (labelsValue.length > 1) { |
| 87 | labelsValue.forEach((labelValue, index) => { |
| 88 | if (matcher(labelValue, labelledElement, text, matchNormalizer)) { |
| 89 | labelledElements.push(labelledElement) |
| 90 | } |
| 91 | |
| 92 | const labelsFiltered = [...labelsValue] |
| 93 | labelsFiltered.splice(index, 1) |
| 94 | |
| 95 | if (labelsFiltered.length > 1) { |
| 96 | if ( |
| 97 | matcher( |
| 98 | labelsFiltered.join(' '), |
| 99 | labelledElement, |
| 100 | text, |
| 101 | matchNormalizer, |
| 102 | ) |
| 103 | ) { |
| 104 | labelledElements.push(labelledElement) |
| 105 | } |
| 106 | } |
no test coverage detected