@crossed/ui
Version:
A universal & performant styling library for React Native, Next.js & React
152 lines (151 loc) • 5.35 kB
JavaScript
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