Passed
Push — master ( 5f67fe...8bce0b )
by Jesús
02:16
created

src/modules/display/infrastructure/display.ts   A

Complexity

Total Complexity 7
Complexity/F 1.17

Size

Lines of Code 58
Function Count 6

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 45
dl 0
loc 58
rs 10
c 0
b 0
f 0
wmc 7
mnd 1
bc 1
fnc 6
bpm 0.1666
cpm 1.1666
noi 0

6 Functions

Rating   Name   Duplication   Size   Complexity  
A display.ts ➔ announceToScreenReader 0 9 2
A display.ts ➔ updateDisplay 0 8 1
A display.ts ➔ updateBoxStates 0 16 1
A display.ts ➔ updateWordDisplay 0 4 1
A display.ts ➔ updateBinaryDisplay 0 3 1
A display.ts ➔ syncWordInputFromBoxes 0 5 1
1
import { state } from '../../bip39';
2
import { elements } from '../../bip39';
3
import { getAllDisplayData } from '../application/displayService';
4
5
export function updateDisplay(): void {
6
  const displayData = getAllDisplayData(state.boxes);
7
  
8
  updateBoxStates(displayData.boxes);
9
  updateBinaryDisplay(displayData.binary);
10
  updateWordDisplay(displayData.word);
11
  syncWordInputFromBoxes();
12
}
13
14
function syncWordInputFromBoxes(): void {
15
  // Import dynamically to avoid circular dependency
16
  import('../../wordInput/infrastructure/wordInput').then(({ syncWordInputFromState }) => {
17
    syncWordInputFromState();
18
  });
19
}
20
21
function updateBoxStates(boxesData: Array<{ isActive: boolean; isDisabled: boolean; ariaPressed: string }>): void {
22
  const boxElements = elements.grid.querySelectorAll('.box');
23
24
  boxElements.forEach((box, index) => {
25
    const htmlBox = box as HTMLButtonElement;
26
    const data = boxesData[index];
27
28
    // Update active state
29
    htmlBox.classList.toggle('active', data.isActive);
30
    htmlBox.setAttribute('aria-pressed', data.ariaPressed);
31
32
    // Update disabled state
33
    htmlBox.classList.toggle('disabled', data.isDisabled);
34
    htmlBox.dataset.isDisabled = data.isDisabled.toString();
35
    htmlBox.setAttribute('aria-disabled', data.isDisabled.toString());
36
  });
37
}
38
39
function updateBinaryDisplay(binaryData: { binaryString: string }): void {
40
  elements.binary.textContent = binaryData.binaryString;
41
}
42
43
function updateWordDisplay(wordData: { indexText: string; announcement: string }): void {
44
  elements.index.textContent = wordData.indexText;
45
  announceToScreenReader(wordData.announcement);
46
}
47
48
function announceToScreenReader(message: string): void {
49
  const announcer = document.getElementById('sr-announcements');
50
  if (announcer) {
51
    announcer.textContent = message;
52
    // Clear after a short delay to allow for new announcements
53
    setTimeout(() => {
54
      announcer.textContent = '';
55
    }, 1000);
56
  }
57
}
58