Performs different toggle mechanisms, depending on what type lies behind
path
insubject
.
1. Boolean: Will turn true to false and false to true
2. Array: Will add a value if not present and remove it otherwise
3. Other: Will set the target to value if it doesn't equal value or to fallback otherwise. If fallback is not set, it will be replaced by a type-dependent empty value
path (String/Array) - The path to the item, that should be toggled
value (Any) - An optional value, to determine the toggle operation on. In case path
leads to an array, $toggle
will check, if that array contains value
and remove it, if it's there or add it otherwise. In case path
leads to a string for example, $toggle
will set the that string to fallback
or an empty string, if it equals value
. In case path
leads to a boolean
value, value
is not available.
fallback (Any) - An optional fallback for the non-array and non-boolean toggle types.
subject (Object) - The object that contains the item, that should be toggled
TYPE SIGNATURES
String -> Object -> Object !!!(when first parameter leads to Boolean)
(String, Object) -> Object !!!(when first parameter leads to Boolean)
String -> * -> Object -> Object
(String, *) -> Object -> Object
(String, *, Object) -> Object
String -> * -> * -> Object -> Object
(String, *) -> * -> Object -> Object
(String, *, *) -> Object -> Object
(String, *, *, Object) -> Object
Array -> Object -> Object !!!(when first parameter leads to Boolean)
(Array, Object) -> Object !!!(when first parameter leads to Boolean)
Array -> * -> Object -> Object
(Array, *) -> Object -> Object
(Array, *, Object) -> Object
Array -> * -> * -> Object -> Object
(Array, *) -> * -> Object -> Object
(Array, *, *) -> Object -> Object
(Array, *, *, Object) -> Object
EXAMPLE (boolean)
const myObject = {
lightIsOn: false
};
$toggle('lightIsOn', myObject); // returns { lightIsOn: true }
EXAMPLE (array)
const myObject = {
itemsInTheFrige: ['eggs', 'beer', 'milk']
};
const withoutBeer = $toggle('itemsInTheFrige', 'beer', myObject); // returns { itemsInTheFrige: ['eggs', 'milk'] }
$toggle('itemsInTheFrige', 'beer', withoutBeer); // returns { itemsInTheFrige: ['eggs', 'milk', 'beer'] }
EXAMPLE (string)
const myObject = {
kitchenDutyToday: 'John Schmoe'
};
$toggle('kitchenDutyToday', 'John Schmoe', myObject); // returns { kitchenDutyToday: '' }
const jane = $toggle('kitchenDutyToday', 'John Schmoe', 'Jane Doe', myObject); // returns { kitchenDutyToday: 'Jane Doe' }
$toggle('kitchenDutyToday', 'John Schmoe', 'Jane Doe', jane); // returns { kitchenDutyToday: 'John Schmoe' }
IMMUTABLE JS SUPPORT (DEPRECATED)
WARNING: Immutable JS support is deprecated. It will be removed entirely with the next major version of Plow JS (which will be 4.0.0). Until then, support for Immutable JS versions below (but not including) v4 - though discouraged - continues to work.
the following types are supported for values targeted by path
:
List
Set
OrderedSet