A map like data structure to handle multiple toggle(-able) elements
-
ToggleGroupis a simple class that encapsulate a collection key value pairs, yet value is always boolean, toggleable. -
It provides interface to access value of particular key, change it and perform bulk operations like
closeAllwhich sets all internal pairs to be valuefalse. -
It can be useful in many scenarios, for example
- You want to build a Tab switch structure - it does exactly that, you could initate it with unique tab keys and then utilize
dropOpenmethod to switch (set totrue) on one of them, while keeping (or dropping) rest tofalse. - You want to implement expand/collapse structure - yet again it does exactly that. It allows you to switch on (termed
open) one or more keys, and close likewise. Also you could collapse all by callingcloseAllmethod and expand all by callingopenAllmethod.
- You want to build a Tab switch structure - it does exactly that, you could initate it with unique tab keys and then utilize
I wrote this structure and found it useful in front-end Angular application. I use this to keep my views binded togathered and yet easily switched, based on state of ToggleGroup object. Examples are shared at end.
npm install toggle-groupNodeJS
const { ToggleGroup, Toggle } = require('toggle-group');Typescript
import { ToggleGroup, Toggle } from 'toggle-group'; const simple = new ToggleGroup(); // that's all
const tg = new ToggleGroup(['good', 'better'], false);
tg.createToggle('best', true);
console.log(tg);
/* output
ToggleGroup {
_toggles: [
{ key: 'good', value: false },
{ key: 'better', value: false },
{ key: 'best', value: true }
]
}
*/
const tg1 = new ToggleGroup(
[
{ key: 'good', value: true }, // maybe of type Toggle/IToggle
Toggle.from({ key: 'good', value: false }), // Toggle instance created from IToggle
new Toggle('good', false), // may include Toggle instances,
'str-key-1',
'str-key-2',
],
// string key's get value passed in 2nd param, or fallback to `false`
true
);
console.log(tg1.getValue('str-key-1'));
/* output
true
*/Please refer to docs here.
A simple live demo is available at Stackblitz here.
Kind of contrbution like improving code, fixing bugs, improving docs is highly appreciated.