UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

135 lines (132 loc) 4.33 kB
import React from 'react'; import { randomId } from '@mantine/hooks'; import { Text } from '../../Text/Text.js'; import { Divider } from '../../Divider/Divider.js'; import useStyles from './SelectItems.styles.js'; var __defProp = Object.defineProperty; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; function SelectItems({ data, hovered, classNames, styles, isItemSelected, uuid, __staticSelector, onItemHover, onItemSelect, itemsRefs, itemComponent: Item, size, nothingFound, creatable, createLabel, unstyled, variant }) { const { classes } = useStyles(null, { classNames, styles, unstyled, name: __staticSelector, variant, size }); const unGroupedItems = []; const groupedItems = []; let creatableDataIndex = null; const constructItemComponent = (item, index) => { const selected = typeof isItemSelected === "function" ? isItemSelected(item.value) : false; return /* @__PURE__ */ React.createElement(Item, __spreadValues({ key: item.value, className: classes.item, "data-disabled": item.disabled || void 0, "data-hovered": !item.disabled && hovered === index || void 0, "data-selected": !item.disabled && selected || void 0, selected, onMouseEnter: () => onItemHover(index), id: `${uuid}-${index}`, role: "option", tabIndex: -1, "aria-selected": hovered === index, ref: (node) => { if (itemsRefs && itemsRefs.current) { itemsRefs.current[item.value] = node; } }, onMouseDown: !item.disabled ? (event) => { event.preventDefault(); onItemSelect(item); } : null, disabled: item.disabled, variant }, item)); }; let groupName = null; data.forEach((item, index) => { if (item.creatable) { creatableDataIndex = index; } else if (!item.group) { unGroupedItems.push(constructItemComponent(item, index)); } else { if (groupName !== item.group) { groupName = item.group; groupedItems.push(/* @__PURE__ */ React.createElement("div", { className: classes.separator, key: `__mantine-divider-${index}` }, /* @__PURE__ */ React.createElement(Divider, { classNames: { label: classes.separatorLabel }, label: item.group }))); } groupedItems.push(constructItemComponent(item, index)); } }); if (creatable) { const creatableDataItem = data[creatableDataIndex]; unGroupedItems.push(/* @__PURE__ */ React.createElement("div", { key: randomId(), className: classes.item, "data-hovered": hovered === creatableDataIndex || void 0, onMouseEnter: () => onItemHover(creatableDataIndex), onMouseDown: (event) => { event.preventDefault(); onItemSelect(creatableDataItem); }, tabIndex: -1, ref: (node) => { if (itemsRefs && itemsRefs.current) { itemsRefs.current[creatableDataItem.value] = node; } } }, createLabel)); } if (groupedItems.length > 0 && unGroupedItems.length > 0) { unGroupedItems.unshift(/* @__PURE__ */ React.createElement("div", { className: classes.separator, key: "empty-group-separator" }, /* @__PURE__ */ React.createElement(Divider, null))); } return groupedItems.length > 0 || unGroupedItems.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, groupedItems, unGroupedItems) : /* @__PURE__ */ React.createElement(Text, { size, unstyled, className: classes.nothingFound }, nothingFound); } SelectItems.displayName = "@mantine/core/SelectItems"; export { SelectItems }; //# sourceMappingURL=SelectItems.js.map