UNPKG

phaser3-rex-plugins

Version:
158 lines (131 loc) 4.88 kB
import CreateTitleLabel from '../utils/CreateTitleLabel.js'; import CreateDeleteButton from '../utils/CreateDeleteButton.js'; import CreateMoveUpButton from '../utils/CreateMoveUpButton.js'; import CreateMoveDownButton from '../utils/CreateMoveDownButton.js'; import CreateBackground from '../utils/CreateBackground.js'; import CellContainer from '../../gameobjects/arraytable/cellcontainer/CellContainer.js'; const GetValue = Phaser.Utils.Objects.GetValue; const Format = Phaser.Utils.String.Format; var CreateCellContainer = function (tweaker, cell, config) { var scene = tweaker.scene; // Create elements var { space, gridTable, indexStyle, createDeleteButton, createMoveUpButton, createMoveDownButton, tweakerConfig, tweakerAddRowsParameters, backgroundStyle, } = config; var background = CreateBackground(scene, {}, backgroundStyle); var indexLabel = CreateTitleLabel(scene, undefined, indexStyle); var deleteButton = createDeleteButton(scene); var moveUpButton = createMoveUpButton(scene); var moveDownButton = createMoveDownButton(scene); var properties = tweakerAddRowsParameters.properties; var isObjectItem = (properties.length >= 1) && (properties[0].hasOwnProperty('$key')); var target; if (isObjectItem) { target = cell.item; } else { target = cell.items; properties = [{ ...properties[0], title: false, // No title label $key: cell.index }]; } var inputTweaker = tweaker .createTweaker(tweakerConfig) .setAlignInputRowTitleEnable(isObjectItem) .addRows(properties, target, tweakerAddRowsParameters.monitor); // Assemble elements var cellContainer = new CellContainer(scene, { space, gridTable, background, indexLabel, inputTweaker, deleteButton, moveUpButton, moveDownButton, }) scene.add.existing(cellContainer); return cellContainer; } var GenerateCreateCellContainerCallback = function (tweaker, config, style) { if (style === undefined) { style = {}; } // Prepare parameters var space = GetValue(config, 'space.cell', undefined, style) || {}; var indexStyle = style.index; if (!indexStyle) { indexStyle = GetValue(style, 'tweaker.inputRow.title') || {}; } var indexLabelCallback = GetValue(config, 'indexLabel', '%1'); if (typeof (indexLabelCallback) === 'string') { var indexLabelTemplate = indexLabelCallback; indexLabelCallback = function (index, item, items) { // %1=index, %2=total return { 'title': Format(indexLabelTemplate, [index, items.length]) }; } } var createDeleteButton = function (scene) { return CreateDeleteButton(scene, config, style); } var createMoveUpButton = function (scene) { return CreateMoveUpButton(scene, config, style); } var createMoveDownButton = function (scene) { return CreateMoveDownButton(scene, config, style); } var tweakerConfig = { root: tweaker.root, styles: tweaker.styles, expandInputRowHeight: true, }; var properties = GetValue(config, '$properties') || {}; if (!Array.isArray(properties)) { properties = [properties]; } var monitor = GetValue(config, 'monitor', false); var tweakerAddRowsParameters = { properties, monitor }; var backgroundStyle = GetValue(style, 'cellBackground'); var callback = function (cell, cellContainer, gridTable) { var width = cell.width; var height = cell.height; var item = cell.item; var items = cell.items; var index = cell.index; if (cellContainer === null) { cellContainer = CreateCellContainer(tweaker, cell, { space, gridTable, indexStyle, createDeleteButton, createMoveUpButton, createMoveDownButton, tweakerConfig, tweakerAddRowsParameters, backgroundStyle, }); } cell.setCellContainerAlign('center'); cellContainer .setIndexLabel(indexLabelCallback(index, item, items)) .setItem(items, index) // Also setBindingTarget // layout .setMinSize(width, 0) .setOrigin(0.5, 0) .setDirty(true) .layout() .setDirty(false) return cellContainer; } return callback; } export default GenerateCreateCellContainerCallback;