<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><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><span class="hl-5">size</span><span class="hl-1"> = </span><span class="hl-16">24</span><span class="hl-1">, </span><span class="hl-5">skipSystem</span><span class="hl-1">, ...</span><span class="hl-5">props</span><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-6">const</span><span class="hl-1"> </span><span class="hl-13">className</span><span class="hl-1"> = [</span><span class="hl-5">props</span><span class="hl-1">.</span><span class="hl-5">className</span><span class="hl-1">, </span><span class="hl-5">styles</span><span class="hl-1">[</span><span class="hl-2">"switch"</span><span class="hl-1">]].</span><span class="hl-0">filter</span><span class="hl-1">(</span><span class="hl-5">Boolean</span><span class="hl-1">).</span><span class="hl-0">join</span><span class="hl-1">(</span><span class="hl-2">" "</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-5">Tag</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">className</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><br/><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">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