<pre><code class="language-typescript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-0">Switch</span><span class="hl-1"> = ({</span><br/><span class="hl-1"> </span><span class="hl-5">tag:</span><span class="hl-1"> </span><span class="hl-5">Tag</span><span class="hl-1"> = </span><span class="hl-2">"button"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">size</span><span class="hl-1"> = </span><span class="hl-16">24</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">skipSystem</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">children</span><span class="hl-1">,</span><br/><span class="hl-1"> ...</span><span class="hl-5">props</span><br/><span class="hl-1">}: </span><span class="hl-8">SwitchProps</span><span class="hl-1">) </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> [</span><span class="hl-13">state</span><span class="hl-1">, </span><span class="hl-13">setState</span><span class="hl-1">] = </span><span class="hl-0">useStore</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-0">handleModeSwitch</span><span class="hl-1"> = () </span><span class="hl-6">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-5">index</span><span class="hl-1"> = </span><span class="hl-5">modes</span><span class="hl-1">.</span><span class="hl-0">indexOf</span><span class="hl-1">(</span><span class="hl-5">state</span><span class="hl-1">.</span><span class="hl-5">m</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-13">n</span><span class="hl-1"> = </span><span class="hl-5">modes</span><span class="hl-1">.</span><span class="hl-5">length</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-4">if</span><span class="hl-1"> (</span><span class="hl-5">skipSystem</span><span class="hl-1"> && </span><span class="hl-5">index</span><span class="hl-1"> === </span><span class="hl-5">n</span><span class="hl-1"> - </span><span class="hl-16">1</span><span class="hl-1">) </span><span class="hl-5">index</span><span class="hl-1"> = </span><span class="hl-16">0</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-0">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> ...</span><span class="hl-5">state</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">m:</span><span class="hl-1"> </span><span class="hl-5">modes</span><span class="hl-1">[(</span><span class="hl-5">index</span><span class="hl-1"> + </span><span class="hl-16">1</span><span class="hl-1">) % </span><span class="hl-5">n</span><span class="hl-1">],</span><br/><span class="hl-1"> });</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> </span><span class="hl-4">if</span><span class="hl-1"> (</span><span class="hl-5">children</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> </span><span class="hl-3">// @ts-expect-error -- too complex types</span><br/><span class="hl-1"> <</span><span class="hl-5">Tag</span><br/><span class="hl-1"> </span><span class="hl-5">suppressHydrationWarning</span><br/><span class="hl-1"> {...</span><span class="hl-5">props</span><span class="hl-1">}</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1">-</span><span class="hl-5">testid</span><span class="hl-1">=</span><span class="hl-2">"switch"</span><br/><span class="hl-1"> </span><span class="hl-3">// skipcq: JS-0417</span><br/><span class="hl-1"> </span><span class="hl-5">onClick</span><span class="hl-1">={</span><span class="hl-5">handleModeSwitch</span><span class="hl-1">}></span><br/><span class="hl-1"> {</span><span class="hl-3">/* @ts-expect-error -> we are setting the CSS variable */</span><span class="hl-1">}</span><br/><span class="hl-1"> <</span><span class="hl-5">div</span><span class="hl-1"> </span><span class="hl-5">className</span><span class="hl-1">={styles.</span><span class="hl-5">switch</span><span class="hl-1">} </span><span class="hl-5">style</span><span class="hl-1">={{ </span><span class="hl-2">"--size"</span><span class="hl-1">: </span><span class="hl-2">`</span><span class="hl-6">${</span><span class="hl-5">size</span><span class="hl-6">}</span><span class="hl-2">px`</span><span class="hl-1"> }} /></span><br/><span class="hl-1"> {</span><span class="hl-5">children</span><span class="hl-1">}</span><br/><span class="hl-1"> </</span><span class="hl-5">Tag</span><span class="hl-1">></span><br/><span class="hl-1"> );</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-4">return</span><span class="hl-1"> (</span><br/><span class="hl-1"> <</span><span class="hl-5">Tag</span><br/><span class="hl-1"> </span><span class="hl-3">// Hydration warning is caused when the data from localStorage differs from the default data provided while rendering on server</span><br/><span class="hl-1"> </span><span class="hl-5">suppressHydrationWarning</span><br/><span class="hl-1"> {...</span><span class="hl-5">props</span><span class="hl-1">}</span><br/><span class="hl-1"> </span><span class="hl-5">className</span><span class="hl-1">={</span><span class="hl-5">[props.className, styles.switch].join(" ")}</span><br/><span class="hl-5"> </span><span class="hl-3">// @ts-expect-error -> we are setting the CSS variable</span><br/><span class="hl-5"> style={{ "--size":</span><span class="hl-1"> </span><span class="hl-2">`</span><span class="hl-6">${</span><span class="hl-5">size</span><span class="hl-6">}</span><span class="hl-2">px`</span><span class="hl-1"> }}</span><br/><span class="hl-1"> </span><span class="hl-5">data</span><span class="hl-1">-</span><span class="hl-5">testid</span><span class="hl-1">=</span><span class="hl-2">"switch"</span><br/><span class="hl-1"> </span><span class="hl-3">// skipcq: JS-0417 -> tradeoff between size and best practices</span><br/><span class="hl-1"> </span><span class="hl-5">onClick</span><span class="hl-1">={</span><span class="hl-5">handleModeSwitch</span><span class="hl-1">}</span><br/><span class="hl-1"> /></span><br/><span class="hl-1"> );</span><br/><span class="hl-1">}</span>
0 commit comments