UNPKG

@procraft/widget-order

Version:

Order widget for landing

156 lines 7.18 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (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; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FieldValues = void 0; const react_1 = __importStar(require("react")); const RadioGroup_1 = require("../../components/RadioGroup"); const Tabs_1 = require("../../components/Tabs"); const Typography_1 = __importDefault(require("../../components/Typography")); const types_1 = require("../../modules/gql/generated/types"); const PlacesLeft_1 = require("../PlacesLeft"); const styles_1 = require("./styles"); /** * Выводим список элементов для заказа */ const FieldValues = ({ fieldValues, fieldsValueSelected, fieldsValueSelectedSetter, checkedBgColor, checkedTextColor, placesLeftBgColor, placesLeftTextColor, type, }) => { const [tabIndex, tabIndexSetter] = (0, react_1.useState)(0); /** * Разбивка по группам */ const groupNames = (0, react_1.useMemo)(() => { const groupNames = []; /** * Если есть хоть один пустой элемент, не набиваем группы. */ if (!fieldValues.some((x) => !x.groupName)) { fieldValues.map((fv) => { if (fv.groupName && !groupNames.includes(fv.groupName)) { groupNames.push(fv.groupName); } }); } return groupNames; }, [fieldValues]); /** * Выбранные элементы конкретно текущего типа */ const fieldsValueSelectedByType = (0, react_1.useMemo)(() => { return fieldsValueSelected.filter((n) => n.type === type); }, [fieldsValueSelected, type]); const onChangeIndex = (0, react_1.useCallback)((value) => { const fieldValue = fieldValues.find((n) => n.uid === value); /** * Сейчас пока устанавливаем один элемент на один тип */ if (fieldValue) { /** * Очищаем текущие выбранные элементы данного типа */ const fieldsValueSelectedNew = fieldsValueSelected.filter((n) => n.type !== type); fieldsValueSelectedNew.push(fieldValue); fieldsValueSelectedSetter(fieldsValueSelectedNew); } }, [fieldValues, fieldsValueSelected, fieldsValueSelectedSetter, type]); const getItems = (0, react_1.useCallback)((groupName) => { var _a; const items = []; fieldValues.forEach((fieldValue) => { /** * Если указана группа, то фильтруем по группе */ if (groupName && fieldValue.groupName !== groupName) { return; } /** * Если всего один элемент и это 'Без потока', пропускаем его */ if (fieldValues.length === 1 && fieldValue.optionName === 'Без потока') { return; } // // if (fieldValue.parents) { // const parents = fieldValue.parents.split(',') // console.log('%cindex:parents', 'color: #339966;', parents, fieldsValueSelected.map(x => x.uid)) // if (!fieldsValueSelected.some(x => parents.includes(x.uid))) { // return // } // } /** * Добавляем элемент к конечному массиву */ items.push({ uid: fieldValue.uid, label: (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(Typography_1.default, { variant: "grey-sm", component: "label", className: "altItemText" }, fieldValue.optionName))), }); }); const radioGroup = (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(RadioGroup_1.RadioGroup, { items: items, value: (_a = fieldsValueSelectedByType[0]) === null || _a === void 0 ? void 0 : _a.uid, onChangeIndex: onChangeIndex, checkedBgColor: checkedBgColor, checkedTextColor: checkedTextColor }), react_1.default.createElement(PlacesLeft_1.PlacesLeft, { bgColor: placesLeftBgColor, textColor: placesLeftTextColor, fieldsValueSelected: fieldsValueSelectedByType }))); return { items, radioGroup, }; }, [ fieldValues, fieldsValueSelectedByType, onChangeIndex, checkedBgColor, checkedTextColor, placesLeftBgColor, placesLeftTextColor, ]); return (0, react_1.useMemo)(() => { var _a; const tabs = []; /** * Если групп более одной, разбиваем на табы */ if ((groupNames === null || groupNames === void 0 ? void 0 : groupNames.length) > 1) { groupNames.map((groupName) => { const { radioGroup } = getItems(groupName); tabs.push({ label: groupName, content: radioGroup, }); }); return (react_1.default.createElement(Tabs_1.Tabs, { tabIndex: tabIndex, onChangeTabIndex: tabIndexSetter, tabs: tabs })); } else { const { radioGroup } = getItems(undefined); let title = ''; switch (type) { case types_1.CatalogFieldValueType.SUBSCRIPTION: title = (_a = fieldsValueSelected.filter((n) => n.type === type)[0]) === null || _a === void 0 ? void 0 : _a.fieldName; break; } return (react_1.default.createElement(styles_1.FieldValuesStyled, null, title ? (react_1.default.createElement(Typography_1.default, { variant: "grey", component: "span" }, title)) : null, radioGroup)); } }, [fieldsValueSelected, getItems, groupNames, tabIndex, type]); }; exports.FieldValues = FieldValues; //# sourceMappingURL=index.js.map