@kekalma/switch v1.0.1
@kekalma/switch for React
A flexible switch component for React, where you can change the look freely. The actual state can be stored in a context, whose value can be used in other parts of the project and/or you can use a callback handler.
Part of the @kekalma component family.
Usage example
The following example demonstrates the use of three independent switches, with separate context values, standalone and shared handler functions.
It is optional to set up a context and/or a handler function, but one of them should be used.
If an 'id' is set, the switchHandler callback function gets the 'id' parameter too.
switch # | context | handler | id |
---|---|---|---|
1 | Context1 | switchHandler1(newValue) | |
2 | Context2 | switchHandler(newValue,id) | switch2 |
3 | switchHandler(newValue,id) | switch3 |
App.tsx
import React, { useState } from 'react'
import {Switch} from "@kekalma/switch"
import { switchContext1 as Context1} from "./context";
import { switchContext2 as Context2} from "./context";
import Info from "./Info";
export default function App() {
const [switchMode1, setSwitchMode1] = useState(false);
const [switchMode2, setSwitchMode2] = useState(false);
const switchHandler1 = (newValue: boolean) => {
console.log('Switch state 1:', newValue)
}
const switchHandler = (newValue: boolean, id: string) => {
console.log(`Switch state '${id}' :`, newValue)
return (
<div style={{ display: "flex", flexWrap: "wrap" }}>
<Context1.Provider
value={{ switchMode: switchMode1, setSwitchMode: setSwitchMode1 }}
>
<Switch
context={Context1}
label="Switch1:"
initValue={false}
onSwitch={switchHandler1}
/>
<Info context={Context1}/>
</Context1.Provider>
<div style={{flexBasis: "100%", height: "10px" }}></div>
<Context2.Provider
value={{ switchMode : switchMode2, setSwitchMode : setSwitchMode2 }}
>
<Switch
id="switch2"
context={Context2}
label="Switch2:"
initValue={true}
onSwitch={switchHandler}
/>
<Info context={Context2}/>
</Context2.Provider>
<div style={{ flexBasis: "100%", height: "10px" }}></div>
<Switch
id="switch3"
label="Switch3:"
initValue={false}
onSwitch={switchHandler}
/>
</div>
)
}
context.ts
Please note, the content of the context should have strict a switchMode
and setSwitchMode
value-pair, in the format in the example below!
import React from 'react'
import { switchContextType } from '@kekalma/switch'
export const switchContext1 = React.createContext<switchContextType>({
switchMode: false,
setSwitchMode: (value: boolean)=>{}
})
export const switchContext2 = React.createContext<switchContextType>({
switchMode: false,
setSwitchMode: (value: boolean)=>{}
})
info.tsx
This is an example of how you can use the context value, destructed into an own variable, switchValue
.
import React, { useContext } from "react";
import { switchContextType } from "@kekalma/switch";
type myProps = { context: React.Context<switchContextType> };
export default function Info(props : myProps) {
const { switchMode : switchValue } = useContext(props.context);
return (
<React.Fragment>
<span style={{ margin: "0 5px" }}>
{switchValue ? "on" : "off"}
</span>
</React.Fragment>
);
}
Property parameters
All the property parameters are optional, but one from onSwitch
or context
should be used.
property | format | Description |
---|---|---|
id | string | Identifier for the onSwitch callback function. Should only be used if multiple components are using the same handler function. See the example code. |
onSwitch | Function(newValue: boolean, id?: string) | The handler function for the change event. |
context | React.Context\ | The context, to store the state and the handler. See the above context.ts example for the format. |
label | string | The label in \ element before the switch. |
initialValue | boolean | FALSE The initial value upon creation of the component. |
height | string | CSS value of the height. |
width | string | CSS value of the width. This should be omitted. |
borderON | string | (Optiona) CSS value the border color if switched on. |
borderOFF | string | (Option) CSS value the border color if switched off. |
colorON | string | CSS value the knob color if switched on. |
colorOFF | string | CSS value the knob color if switched off. |
bgColorON | string | CSS value the background color if switched on. |
bgColorOFF | string | CSS value of the background color if switched off. |
switchStyle | React.CSSProperties | General inline CSS properties for the switch. |
knobStyle | React.CSSProperties | General inline CSS properties for the knob. |
An example for using the style properties:
<switch
//... main properties come here
height = "1em"
width = "1.7em"
borderON = "#afa"
colorON = "#6f6"
bgColorON = "#dfd"
switchStyle = {{ borderWidth: "3px" }}
knobStyle = {{ borderRadius: 0 }}
/>
Exported type definitions (Typescript)
exported item | Description |
---|---|
switchProps | All the properties listed above |
switchContextType | Context type definition |
Changelog:
Version | What's new, description |
---|---|
1.0.0 | First official, working release. |
1.0.1 | Cleaning the dependencies in code. |
License
MIT © kissato70