UNPKG

@crossed/ui

Version:

A universal & performant styling library for React Native, Next.js & React

152 lines (151 loc) 5.35 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var List_exports = {}; __export(List_exports, { List: () => List }); module.exports = __toCommonJS(List_exports); var import_jsx_runtime = require("react/jsx-runtime"); var import_react = require("react"); var import_display = require("../../display"); var import_styled = require("@crossed/styled"); var import_layout = require("../../layout"); var import_Checkbox = require("../Checkbox"); var import_context = require("./context"); var import_overlay = require("../../overlay"); var import_styles = require("../../styles"); var import_react_native = require("react-native"); const isChecked = (value, valueGlobal) => { return value === valueGlobal || Array.isArray(valueGlobal) && valueGlobal.includes(value); }; const List = (0, import_react.memo)(({ data }) => { const { onClose } = (0, import_overlay.useFloatingContext)(); const { setValue, value: valueGlobal } = (0, import_context.useSelectValue)(); const { multiple, section, showSheet } = (0, import_context.useSelectConfig)(); const dataTransformed = (0, import_react.useMemo)(() => { if (section) { return data.map((d) => ({ ...d, data: (d.data || []).map((item) => ({ ...item, checked: isChecked(item.value, valueGlobal) })) })); } return data.map((item) => ({ ...item, checked: isChecked(item.value, valueGlobal) })); }, [data, valueGlobal, section]); const onPress = (0, import_react.useCallback)( (item) => () => { if (!multiple) onClose(); if (multiple) { if (!valueGlobal || !Array.isArray(valueGlobal)) { setValue([item.value]); } else { const toto = valueGlobal; setValue( toto.includes(item.value) ? toto.filter((t) => t !== item.value) : [...toto, item.value] ); } return; } setValue(item.value); }, [onClose, setValue, valueGlobal, multiple] ); const RenderItem = (0, import_react.useCallback)(({ item }) => { const checked = item.checked; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_display.MenuList.Item, { onPress: onPress(item), style: checked && (0, import_styled.inlineStyle)(({ colors }) => ({ "base": { backgroundColor: colors.background.active }, ":hover": { backgroundColor: colors.background.active } })), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_layout.XBox, { space: "xxs", children: [ multiple && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Checkbox.Checkbox, { checked, onChecked: onPress(item) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_display.MenuList.Title, { children: item.label }) ] }) } ); }, []); const RenderLabel = (0, import_react.useCallback)( ({ section: section2 }) => { return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_display.MenuList.Label, { style: (0, import_styled.inlineStyle)(({ colors }) => ({ base: { backgroundColor: colors.background.primary } })), children: section2.title } ); }, [] ); return showSheet ? section ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_overlay.Sheet.SectionList, { scrollEnabled: true, sections: dataTransformed, renderItem: RenderItem, renderSectionHeader: RenderLabel, stickySectionHeadersEnabled: true } ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_overlay.Sheet.FlatList, { scrollEnabled: true, data: dataTransformed, renderItem: RenderItem } ) : section ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_react_native.SectionList, { sections: dataTransformed, renderItem: RenderItem, renderSectionHeader: RenderLabel, stickySectionHeadersEnabled: true } ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_react_native.FlatList, { contentContainerStyle: (0, import_styled.composeStyles)( import_styles.gapStyles.xxs, (0, import_styled.inlineStyle)(({ space }) => ({ base: { paddingVertical: space.xs, paddingHorizontal: space.xs } })) ).style().style, style: { flex: 1 }, data: dataTransformed, renderItem: RenderItem } ); }); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { List }); //# sourceMappingURL=List.js.map