UNPKG

toggles

Version:

A collection of React hooks for toggles with dynamic noun and verb APIs

45 lines (44 loc) 2.38 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setNounValue = exports.createNounFromState = exports.NounSetter = exports.nounState = void 0; // noun state mapping - true for positive states, false for negative var positiveStates = ['Active', 'Open', 'Shown', 'Visible', 'On', 'Checked', 'Enabled', 'Expanded', 'Activated', 'Connected', 'Focused', 'Mounted', 'Revealed', 'Locked', 'Subscribed']; var negativeStates = ['Closed', 'Hidden', 'Off', 'Unchecked', 'Disabled', 'Collapsed', 'Deactivated', 'Disconnected', 'Blurred', 'Concealed', 'Unlocked']; var hasStates = ['Started', 'Ended']; exports.nounState = Object.fromEntries(__spreadArray(__spreadArray(__spreadArray([], positiveStates.map(function (s) { return ["is".concat(s), true]; }), true), negativeStates.map(function (s) { return ["is".concat(s), false]; }), true), hasStates.map(function (s, i) { return ["has".concat(s), i === 0]; }), true)); exports.NounSetter = Symbol.for('NounSetter'); function createNounFromState(name, getActive, setActive) { return new Proxy({}, { get: function (_, prop) { if (prop === exports.NounSetter) return setActive; if (prop === 'name') return name; if (typeof prop === 'string' && prop in exports.nounState) { return exports.nounState[prop] ? getActive() : !getActive(); } return undefined; } }); } exports.createNounFromState = createNounFromState; function setNounValue(noun, value) { if (!noun || typeof noun !== 'object') { return console.warn("No setter on noun for ".concat(value ? 'positive' : 'negative', " action")); } var nounSetter = noun[exports.NounSetter]; if (typeof nounSetter !== 'function') { return console.warn("No setter on noun ".concat(noun.name, " for ").concat(value ? 'positive' : 'negative', " action")); } nounSetter(value); } exports.setNounValue = setNounValue;