UNPKG

react-email-builder

Version:
95 lines (94 loc) 5.24 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; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Blocks = void 0; const clsx_1 = __importDefault(require("clsx")); const react_1 = __importStar(require("react")); const utils_1 = require("../../utils"); const hooks_1 = require("../../hooks"); const Block_1 = require("../Block"); const Block = (0, react_1.memo)(Block_1.Block); function Blocks({ onClick }) { const css = (0, utils_1.getCss)('Blocks', (ns) => ({ root: ns() })); const state = (0, hooks_1.useEmailBuilderState)(); const setState = (0, hooks_1.useSetEmailBuilderState)(); const onMouseLeave = (0, react_1.useCallback)(() => { setState((prev) => prev.draggingType && prev.dragoverId ? { ...prev, dragoverId: undefined } : prev); }, [setState]); return (react_1.default.createElement("div", { className: css.root, onClick: onClick, onMouseLeave: state.draggingType ? onMouseLeave : undefined }, react_1.default.createElement(List, { blocks: state.blocks, draggingType: state.draggingType, dragover: state.dragover, dragoverId: state.dragoverId, selectedId: state.selectedId }))); } exports.Blocks = Blocks; function List({ blocks, draggingType, dragover, dragoverId, inColumns, selectedId }) { const dragging = !!draggingType; const showDropArea = dragging && !(draggingType === 'columns' && inColumns); return (react_1.default.createElement(react_1.default.Fragment, null, blocks.map((block) => { return block.type === 'columns' ? (react_1.default.createElement(Columns, { key: block.id, block: block, draggingType: draggingType, dragover: dragover, dragoverId: dragoverId, selectedId: selectedId })) : (react_1.default.createElement(Block, { key: block.id, block: block, showDropArea: showDropArea, dragging: dragging, dragover: dragoverId === block.id ? dragover : false, selected: block.id === selectedId, role: inColumns ? 'column' : undefined })); }))); } function Columns({ block, draggingType, dragover, dragoverId, selectedId }) { const dragging = !!draggingType; const style = (0, hooks_1.useBlockStyle)(block); const childrenSelected = (0, react_1.useMemo)(() => { if (selectedId && block.id !== selectedId) { return block.attrs.columns.some((col) => { return col.blocks.some((b) => b.id === selectedId); }); } return false; }, [block, selectedId]); const css = (0, utils_1.getCss)('Columns', (ns) => ({ root: ns(), grid: ns('grid'), column: ns('column'), notAllowed: ns('not-allowed') })); const { columns } = block.attrs; return (react_1.default.createElement(Block, { block: block, dragover: dragoverId === block.id ? dragover : false, dragging: dragging, selected: block.id === selectedId, showDropArea: dragging, childrenSelected: childrenSelected, role: "columns" }, react_1.default.createElement("div", { className: (0, clsx_1.default)(css.root, { [css.notAllowed]: draggingType === 'columns' }), style: style }, react_1.default.createElement("div", { className: css.grid + ' ' + css.grid + '-' + columns.length }, columns.map((column) => { const attrs = column.attrs || {}; const p = attrs.padding || []; const nil = undefined; return (react_1.default.createElement("div", { key: column.id, className: css.column }, react_1.default.createElement("div", { style: { backgroundColor: attrs.bgColor, paddingTop: p[0] ?? nil, paddingRight: p[1] ?? nil, paddingBottom: p[2] ?? nil, paddingLeft: p[3] ?? nil } }, react_1.default.createElement(List, { inColumns: true, blocks: column.blocks, draggingType: draggingType, dragover: dragover, dragoverId: dragoverId, selectedId: selectedId })))); }))))); }