UNPKG

react-figma-plugin-ds

Version:

React ui framework based on Figma design system

78 lines 4.97 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = __importStar(require("react")); var react_outside_click_handler_1 = __importDefault(require("react-outside-click-handler")); var Select = function (_a) { var _b = _a.className, className = _b === void 0 ? "" : _b, options = _a.options, placeholder = _a.placeholder, isDisabled = _a.isDisabled, defaultValue = _a.defaultValue, onExpand = _a.onExpand, onChange = _a.onChange; var _c = react_1.useState(false), isExpanded = _c[0], onExpandedStateChange = _c[1]; var _d = react_1.useState(options.find(function (_a) { var value = _a.value; return defaultValue === value; })), selectedOption = _d[0], onSelectOption = _d[1]; react_1.useEffect(function () { onExpand && onExpand(isExpanded); }, [isExpanded]); react_1.useEffect(function () { onChange && selectedOption && onChange(selectedOption); }, [selectedOption]); react_1.useEffect(function () { var newSelectedOption = options.find(function (_a) { var value = _a.value; return defaultValue === value; }); onSelectOption(newSelectedOption); }, [defaultValue]); var handleExpandClick = function () { return onExpandedStateChange(!isExpanded); }; var handleOutsideClick = function () { return onExpandedStateChange(false); }; var handleSelectClick = function (value) { var newOption = options.find(function (_a) { var v = _a.value; return v === value; }); onExpandedStateChange(false); onSelectOption(newOption); }; var expandButtonClass = isExpanded ? "select-menu__button--active" : ""; var expanListClass = isExpanded ? "select-menu__menu--active" : ""; var disabledColorClass = isDisabled ? "icon--black-3" : ""; return (react_1.default.createElement(react_outside_click_handler_1.default, { onOutsideClick: handleOutsideClick, disabled: !isExpanded }, react_1.default.createElement("div", { className: "select-menu " + className }, react_1.default.createElement("button", { className: "select-menu__button " + expandButtonClass + " " + disabledColorClass, onClick: handleExpandClick, disabled: isDisabled, title: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.title, type: "button" }, react_1.default.createElement("span", { className: "select-menu__label" }, (selectedOption && selectedOption.label) || placeholder), react_1.default.createElement("span", { className: "select-menu__caret" })), react_1.default.createElement("ul", { className: "select-menu__menu " + expanListClass + " " + disabledColorClass, style: { top: "-24px" } }, options && options.map(function (_a, i) { var value = _a.value, label = _a.label, divider = _a.divider, title = _a.title; return divider ? (react_1.default.createElement(react_1.default.Fragment, { key: "select-option-divider--" + i }, divider !== true && (react_1.default.createElement("span", { className: "select-menu__divider-label" }, divider)), react_1.default.createElement("div", { className: "select-menu__divider", key: "select-option--" + i }))) : (react_1.default.createElement("li", { className: "select-menu__item " + (selectedOption && selectedOption.value === value ? "select-menu__item--selected" : ""), onClick: function () { return handleSelectClick(value); }, key: "select-option--" + i, title: title }, react_1.default.createElement("span", { className: "select-menu__item-icon" }), react_1.default.createElement("span", { className: "select-menu__item-label" }, label))); }))))); }; exports.default = Select; //# sourceMappingURL=Select.js.map