UNPKG

@grandlinex/react-components

Version:
83 lines (82 loc) 5.33 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ImageSel; const react_1 = __importStar(require("react")); const Grid_1 = require("../../Grid/Grid"); const Button_1 = require("../../button/Button"); const util_1 = require("../../../util"); const IconButton_1 = require("../../button/IconButton"); function ImageSel({ items, selected, maxStep, onChange, extended, imgSize = { width: 300, height: 200 }, }) { const t = (0, util_1.useUIContext)(); const step = (0, react_1.useMemo)(() => maxStep ?? 4, [maxStep]); const [extend, setExtend] = (0, react_1.useState)(extended ?? !selected); const [max, setMax] = (0, react_1.useState)(step); const [selItem, setSelItem] = (0, react_1.useState)(selected ?? null); const [search, setSearch] = (0, react_1.useState)(''); const sel = (0, react_1.useMemo)(() => items.find((e) => e.key === selItem) ?? null, [selItem, items]); const filtered = (0, react_1.useMemo)(() => { if (search === '') { return items; } const low = search.toLowerCase(); return items.filter((e) => e.title?.toLowerCase()?.includes(low) || e.key.toLowerCase().includes(low)); }, [search, items]); return (react_1.default.createElement(Grid_1.Grid, { flex: true, flexC: true, className: "glx-default-text", gap: 8 }, react_1.default.createElement(Grid_1.Grid, { flex: true, flexR: true, vCenter: true, gap: 4 }, react_1.default.createElement(Grid_1.Grid, { flex: true, flexC: true, gap: 4 }, react_1.default.createElement(Grid_1.Grid, { flex: true, flexR: true, gap: 4, vCenter: true }, react_1.default.createElement("span", { style: { fontSize: '14pt' } }, t.translation.get('glx.form.field.selection'), ":"), react_1.default.createElement("input", { type: "text", value: sel?.title ?? sel?.key ?? t.translation.get('glx.form.field.empty'), disabled: true }), react_1.default.createElement(IconButton_1.IconButton, { style: { borderBottom: 'unset !important' }, icon: extend ? 'IOSave' : 'IOPencil', onClick: () => setExtend(!extend) })), sel && !extend && (react_1.default.createElement("img", { loading: "lazy", draggable: false, alt: sel?.title ?? sel?.key, src: sel?.url, width: imgSize?.width, height: imgSize?.height, style: { objectFit: 'contain', } })))), extend && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(Grid_1.Grid, { flex: true, flexR: true, flexWrap: true, hCenter: true, gap: 8 }, react_1.default.createElement("input", { placeholder: t.translation.get('glx.form.field.search'), value: search, onChange: (e) => setSearch(e.target.value) })), react_1.default.createElement(Grid_1.Grid, { flex: true, flexR: true, flexWrap: true, hCenter: true, gap: 8 }, filtered.slice(0, max).map((i) => (react_1.default.createElement(Grid_1.Grid, { flex: true, flexC: true, key: i.key, className: [ [i.key === selItem, 'glx-img-active'], 'glx-img-sel', 'glx-no-select', ], onClick: () => { setSelItem(i.key); onChange?.(i); }, onDoubleClick: () => { setExtend(false); } }, i.element || (react_1.default.createElement("img", { loading: "lazy", draggable: false, alt: i.title ?? i.key, src: i.url, width: imgSize?.width, height: imgSize?.height, style: { objectFit: 'contain', } })), react_1.default.createElement("div", null, i.title ?? i.key))))))), extend && items.length > max && (react_1.default.createElement(Grid_1.Grid, { flex: true, hCenter: true }, react_1.default.createElement(Button_1.Button, { onClick: () => setMax(max + step) }, t.translation.get('glx.form.more')), react_1.default.createElement(Button_1.Button, { onClick: () => setMax(items.length) }, t.translation.get('glx.form.show.all')))))); }