1.0.7 • Published 2 years ago

ts-jsx-tabs v1.0.7

Weekly downloads
-
License
-
Repository
-
Last release
2 years ago

Typescript React Tabs

Simplistic way to add tabs

ex:

with strict type checking:

Create a union type of your internal attributes:

type Frames = 'home' | 'form' | 'help'

Set up tabs with attributes:

import {Tabs} from 'ts-jsx-tabs'

let tabs: Tabs<Frames> = [
    {
        Title: "Home",
        attribute: "home"
    },
    {
        Title: "Contact Us",
        attribute: "form"
    },
    {
        Title: "FAQ",
        attribute: "help"
    },
]

Now within your component:

import TabGroup from 'ts-jsx-tabs';

const App = () => {
    const [frame, setFrame] = useState<Frames>(home);

    return (
        <>
            <TabGroup<Frames>
                tabs={tabs}
                currentTab={frame}
                setCurrentTab={setFrame}
            />

            {frame === 'home' &&
            <Home/>
            }
            {frame === 'form' &&
            <ContactUs/>
            }
            {frame === 'help' &&
            <FAQpage/>
            }
        </>
    )
}

Without strict typing:

The internals are built to use the string of the title as the tab keys also. Within your component:

import TabGroup from 'ts-jsx-tabs';

const App = () => {
    const [frame, setFrame] = useState<string>('Home');

    return (
        <>
            <TabGroup
                tabs={
                    [
                        {Title: "Home"},
                        {Title: "Contact Us"},
                        {Title: "FAQ"}
                    ]
                }
                currentTab={frame}
                setCurrentTab={setFrame}
            />

            {frame === 'Home' &&
            <Home/>
            }
            {frame === 'Contact Us' &&
            <ContactUs/>
            }
            {frame === 'FAQ' &&
            <FAQpage/>
            }
        </>
    )
}

Custom render the tab:

Utilizing Tab.RenderTitle you can fill custom render the Title:

const tabs = [
      {
          Title: "Home",
          RenderTitle: <>Home <img src={"homeIcon"}/></>
      },
  ]

Styling Functionality

Style and Prop overrides are baked into each layer using:

  • PropsAndStyle datatype:
whereToApply = {
    style: {
        anyCssStyle:"ToBeOverridden"
    },
    props: {
        anyHtmlProps:"toBeOverridden"
    }
}

Used with

  • Tab.button for individual tab.
  • TabsCoreProps.container for the banner containing all tabs.

Other components by me:

  • ts-jsx-table

Special Thanks

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago