UNPKG

@clayui/form

Version:
180 lines (179 loc) 6.33 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var SelectBox_exports = {}; __export(SelectBox_exports, { default: () => SelectBox_default, getSelectedIndexes: () => getSelectedIndexes }); module.exports = __toCommonJS(SelectBox_exports); var import_button = __toESM(require("@clayui/button")); var import_shared = require("@clayui/shared"); var import_classnames = __toESM(require("classnames")); var import_react = __toESM(require("react")); function arrayMove(arrayToMove, oldIndex, newIndex) { arrayToMove.splice(newIndex, 0, arrayToMove.splice(oldIndex, 1)[0]); return arrayToMove; } function reorderUp(array, selectedIndexes) { let clonedArray = [...array]; for (let i = 0; i < selectedIndexes.length; i++) { const item = selectedIndexes[i]; if (item === 0) { return clonedArray; } clonedArray = arrayMove(clonedArray, item, item - 1); } return clonedArray; } function reorderDown(array, selectedIndexes) { let clonedArray = [...array]; for (let i = 0; i < selectedIndexes.length; i++) { const item = selectedIndexes[i]; if (selectedIndexes.includes(clonedArray.length - 1)) { return clonedArray; } clonedArray = arrayMove(clonedArray, item, item + 1); } return clonedArray; } function getSelectedIndexes(items, selectedValues) { return items.reduce((acc, item, index) => { if (selectedValues.includes(item.value)) { return [...acc, index]; } return acc; }, []); } function SelectBox({ ariaLabels = { reorderDown: "Reorder Down", reorderUp: "Reorder Up" }, buttonAlignment = "end", className, disabled, id, items, label, multiple, onItemsChange, onSelectChange, showArrows, size, spritemap, value, ...otherProps }) { const selectedIndexes = getSelectedIndexes( items, Array.isArray(value) ? value : [value] ); const noItems = !items.length; const noItemsSelected = !selectedIndexes.length; const firstItemSelected = selectedIndexes.includes(0); const lastItemSelected = selectedIndexes.includes(items.length - 1); return /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_classnames.default)(className, "form-group") }, label && /* @__PURE__ */ import_react.default.createElement( "label", { className: (0, import_classnames.default)("reorder-label", { disabled }), htmlFor: id }, label ), /* @__PURE__ */ import_react.default.createElement( "div", { className: (0, import_classnames.default)("clay-reorder", { [`clay-reorder-footer-${buttonAlignment}`]: buttonAlignment }) }, /* @__PURE__ */ import_react.default.createElement( "select", { ...otherProps, className: "form-control form-control-inset", disabled, id, multiple, onChange: (event) => { const selectedItems = [...event.target.options].filter(({ selected }) => selected).map((item) => item.value); onSelectChange(selectedItems); }, onKeyDown: (event) => selectedIndexes.forEach((index) => { if (event.key === import_shared.Keys.Down && index === items.length - 1 || event.key === import_shared.Keys.Up && index === 0) { event.preventDefault(); } }), size, value }, items.map((option) => /* @__PURE__ */ import_react.default.createElement( "option", { className: "reorder-option", key: option.value, value: option.value }, option.label )) ), /* @__PURE__ */ import_react.default.createElement("div", { className: "clay-reorder-underlay form-control" }), showArrows && onItemsChange && /* @__PURE__ */ import_react.default.createElement("div", { className: "clay-reorder-footer" }, /* @__PURE__ */ import_react.default.createElement(import_button.default.Group, { className: "reorder-order-buttons" }, /* @__PURE__ */ import_react.default.createElement( import_button.ClayButtonWithIcon, { "aria-label": ariaLabels.reorderUp, className: "reorder-button reorder-button-up", disabled: firstItemSelected || noItemsSelected || noItems, displayType: "secondary", onClick: () => onItemsChange( reorderUp(items, selectedIndexes) ), small: true, spritemap, symbol: "caret-top" } ), /* @__PURE__ */ import_react.default.createElement( import_button.ClayButtonWithIcon, { "aria-label": ariaLabels.reorderDown, className: "reorder-button reorder-button-down", disabled: lastItemSelected || noItemsSelected || noItems, displayType: "secondary", onClick: () => onItemsChange( reorderDown(items, selectedIndexes) ), small: true, spritemap, symbol: "caret-bottom" } ))) )); } var SelectBox_default = SelectBox;