<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: preetham</title>
    <description>The latest articles on Forem by preetham (@preethamntp).</description>
    <link>https://forem.com/preethamntp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F226146%2F4c8904a5-3376-4feb-a3f4-fb391d4c63ed.jpeg</url>
      <title>Forem: preetham</title>
      <link>https://forem.com/preethamntp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/preethamntp"/>
    <language>en</language>
    <item>
      <title>Custom or GenericSearch search in React Typescript</title>
      <dc:creator>preetham</dc:creator>
      <pubDate>Thu, 14 Mar 2024 11:26:11 +0000</pubDate>
      <link>https://forem.com/preethamntp/custom-or-genericsearch-search-in-react-typescript-40nb</link>
      <guid>https://forem.com/preethamntp/custom-or-genericsearch-search-in-react-typescript-40nb</guid>
      <description>&lt;p&gt;Here is the generic code where user needs to pass the actualdata and data (where both are the same array) so that we do not loose the actual data when user erases the search parameters.&lt;/p&gt;

&lt;p&gt;Here I used tailwindcss in className&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react'

type Props&amp;lt;T extends { [key: string]: any }&amp;gt; = {
    data: T[];
    actualData: T[];
    onchange: (value: T[]) =&amp;gt; void;
}

function GenericSearch&amp;lt;T extends { [key: string]: any }&amp;gt;({ onchange, data, actualData }: Props&amp;lt;T&amp;gt;) {

    const handleSearch = (event: React.ChangeEvent&amp;lt;HTMLInputElement&amp;gt;) =&amp;gt; {
        const query = event.target.value.toLowerCase();
        if (!query.length) {
            return onchange(actualData)
        }
        const searchedValue = data.filter((property, i) =&amp;gt; {
            return Object.values(property).some(value =&amp;gt;
                value.toString().toLowerCase().includes(query)
            );
        });
        searchedValue.length !== 0 ? onchange(searchedValue) : onchange(actualData)
    }

    return (
        &amp;lt;label className="relative block"&amp;gt;
            &amp;lt;span className="sr-only"&amp;gt;Search&amp;lt;/span&amp;gt;
            &amp;lt;span className="absolute inset-y-0 left-0 flex items-center pl-2"&amp;gt;
                &amp;lt;svg
                    className="h-5 w-5 fill-slate-300"
                    viewBox="0 0 20 20"
                &amp;gt;&amp;lt;/svg&amp;gt;
            &amp;lt;/span&amp;gt;
            &amp;lt;input
                className="placeholder:italic text-gray-800 placeholder:text-slate-400 block bg-gray-100 w-full"
                placeholder="Search here..."
                type="text"
                name="search"
                onChange={handleSearch}
            /&amp;gt;
        &amp;lt;/label&amp;gt;
    )
}

export default GenericSearch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in App.ts &lt;/p&gt;

&lt;p&gt;let's take the this sample json data form (&lt;a href="https://docshield.tungstenautomation.com/KTA/en_US/7.11.0-h49vd5omev/help/Designer/All_Shared/SystemData/c_dmjsonexamples.html"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"data": [&lt;br&gt;
     {&lt;br&gt;
      "id": 1,&lt;br&gt;
      "name": "cerulean",&lt;br&gt;
      "year": 2000,&lt;br&gt;
      "color": "#98B2D1",&lt;br&gt;
      "pantone_value": "15-4020"&lt;br&gt;
     },&lt;br&gt;
     {&lt;br&gt;
      "id": 2,&lt;br&gt;
      "name": "fuchsia rose", &lt;br&gt;
      "year": 2001, &lt;br&gt;
      "color": "#C74375",&lt;br&gt;
      "pantone_value": "17-2031"&lt;br&gt;
     },&lt;br&gt;
     {&lt;br&gt;
      "id": 3, &lt;br&gt;
      "name": "true red", &lt;br&gt;
      "year": 2002, &lt;br&gt;
      "color": "#BF1932", &lt;br&gt;
      "pantone_value": "19-1664" &lt;br&gt;
     }, &lt;br&gt;
     {&lt;br&gt;
      "id": 4, &lt;br&gt;
      "name": "aqua sky",&lt;br&gt;
      "year": 2003,&lt;br&gt;
      "color": "#7BC4C4",&lt;br&gt;
      "pantone_value": "14-4811"&lt;br&gt;
     },&lt;br&gt;
     { &lt;br&gt;
      "id": 5,&lt;br&gt;
      "name": "red turquoise", &lt;br&gt;
      "year": 2004, &lt;br&gt;
      "color": "#E2583E", &lt;br&gt;
      "pantone_value": "17-1456" &lt;br&gt;
     },&lt;br&gt;
     {  &lt;br&gt;
      "id": 6, &lt;br&gt;
      "name": "blue turquoise", &lt;br&gt;
      "year": 2005,            &lt;br&gt;
      "color": "#53B0AE",&lt;br&gt;
      "pantone_value": "15-5217"&lt;br&gt;
     }&lt;br&gt;
      ]&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const handleSearch = (value: objectType[]) =&amp;gt; {&lt;br&gt;
    setFilterData(assignValuesObject(value));&lt;br&gt;
  };&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
   &amp;lt;GenericSearch&lt;br&gt;
            data={filterData}&lt;br&gt;
            actualData={data}&lt;br&gt;
            onchange={handleSearch}&lt;br&gt;
          /&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
for checking if our filter is working or not&lt;br&gt;
&lt;code&gt;&amp;lt;div&amp;gt;&lt;br&gt;
        {filterData.length &amp;amp;&amp;amp; (&lt;br&gt;
          filterData.map((d: filterDataTypes) =&amp;gt; {&lt;br&gt;
            return (&lt;br&gt;
              &amp;lt;div key={d.id + d.name}&amp;gt;{d.name}&amp;lt;/div&amp;gt;&lt;br&gt;
            );&lt;br&gt;
          })&lt;br&gt;
        )&lt;br&gt;
        }&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;in utils.ts&lt;/p&gt;

&lt;p&gt;`import { objectType } from "./types";&lt;/p&gt;

&lt;p&gt;export const assignValuesObject = (values: objectType[]) =&amp;gt;&lt;br&gt;
  values.map((d, index: number) =&amp;gt; {&lt;br&gt;
    return { ...d, id: index + d.description, isOpen: false };&lt;br&gt;
  });`&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TypeScript One Liners</title>
      <dc:creator>preetham</dc:creator>
      <pubDate>Thu, 15 Dec 2022 07:10:44 +0000</pubDate>
      <link>https://forem.com/preethamntp/typescript-one-liners-455e</link>
      <guid>https://forem.com/preethamntp/typescript-one-liners-455e</guid>
      <description>&lt;h2&gt;
  
  
  Wait
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const wait = (ms: number): Promise&amp;lt;void&amp;gt; =&amp;gt; new Promise((resolve) =&amp;gt; setTimeout(resolve, ms));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;await wait(1000); // waiting 1 second&lt;/p&gt;

&lt;h2&gt;
  
  
  Check id day is a weekday
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const isWeekday = (d: Date): boolean =&amp;gt; d.getDay() % 6 !== 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isWeekday(new Date(2022, 2, 21)); // -&amp;gt; true&lt;br&gt;
isWeekday(new Date(2021, 2, 20)); // -&amp;gt; false&lt;/p&gt;

&lt;h2&gt;
  
  
  Reversing a string
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const reverse = (s: string): string =&amp;gt; 
    s.split('').reverse().join('');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;reverse('Hello'); // -&amp;gt; olleH&lt;/p&gt;

&lt;h2&gt;
  
  
  Check if the given number isEven
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const isEven = (n: number): boolean =&amp;gt; n % 2 === 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isEven(2); // -&amp;gt; true&lt;br&gt;
isEven(3); // -&amp;gt; false&lt;/p&gt;

&lt;h2&gt;
  
  
  Capitalize given string
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const capitalize = (s: string): string =&amp;gt; 
    s.charAt(0).toUpperCase() + s.slice(1);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;capitalize('movie director'); // -&amp;gt; Movie Director&lt;/p&gt;

&lt;h2&gt;
  
  
  Check if an array is empty.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const isArrayEmpty = (arr: unknown[]): boolean =&amp;gt; 
    Array.isArray(arr) &amp;amp;&amp;amp; !arr.length;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isArrayEmpty([]); // -&amp;gt; true&lt;br&gt;
isArrayEmpty([1, 2, 3]); // -&amp;gt; false&lt;/p&gt;

&lt;h2&gt;
  
  
  Check if an object/array is empty.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const isObjectEmpty = (obj: unknown): boolean =&amp;gt; obj &amp;amp;&amp;amp; 
    Object.keys(obj).length === 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isObjectEmpty({}); // -&amp;gt; true&lt;br&gt;
isObjectEmpty({ foo: 'bar' }); // -&amp;gt; false&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating a random integer.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const randomInteger = (min: number, max: number): number =&amp;gt; 
    Math.floor(Math.random() * (max - min + 1)) + min;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;randomInteger(1, 10); // -&amp;gt; 7&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
