UNPKG

core-cde

Version:

1,320 lines 53.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Operations = void 0; const tslib_1 = require("tslib"); const Errors_1 = require("./Errors"); const Page_1 = require("./Page"); const Text_1 = require("./descriptiveClasses/Text"); const List_1 = require("./descriptiveClasses/List"); const TypeComponent_1 = require("./TypeComponent"); const Widget_1 = require("./descriptiveClasses/Widget"); const DM = (0, tslib_1.__importStar)(require("../../data/Data.module")); /** * Выполняемые операции для изменения компонента */ class Operations { /** * Переименовать документ * @param action Действие * @param state Состояние * @returns Состояние документа */ renameDocument(action, state) { var _a; if (!state || !((_a = action === null || action === void 0 ? void 0 : action.props) === null || _a === void 0 ? void 0 : _a.name)) { throw new Errors_1.EmptyParametersError('renameDocument'); } try { if (typeof state === 'string') { state = JSON.parse(state); state.name = action.props.name; return JSON.stringify(state); } state.name = action.props.name; return state; } catch (error) { throw error; } } /** * Создать документ * @param action Действие для создания документа * @returns JSON Документ */ createDocument(action) { if (!action) { throw new Errors_1.EmptyParametersError('createDocument'); } try { return JSON.stringify(action.props); } catch (error) { throw error; } } /** * Создать страницу * @param action Действие для создания страницы * @param state Состояния документа * @returns Новое состояние документа */ createPage(action, state, ds) { if (!action || !action.props) { throw new Errors_1.EmptyParametersError('createPage'); } // TODO переписать этот код try { let page; if (action.props.jsonPage) { page = Page_1.Page.fromJSON(action.props.jsonPage); if (action.props.jsonWidgets) { const widgets = JSON.parse(action.props.jsonWidgets); widgets.forEach(element => { const widget = Widget_1.Widget.createWidgetByJSON(JSON.stringify(element), ds); page.widgets.add(widget); }); ds === null || ds === void 0 ? void 0 : ds.refreshAfterRestore(); } } else { page = new Page_1.Page(action.props.name, action.props.id); } if (!state) { return JSON.stringify(page); } if (action.prev_guid) { const prevWidgetIndex = state.pages.toArray().findIndex(val => val.id === action.prev_guid); const prevWidget = state.pages.getNodeByIndex(prevWidgetIndex); if (!prevWidget) { throw new Errors_1.ElementNotFoundError('createPage'); } state.pages.addAfter(prevWidget, page); } else { state.pages.addFirst(page); } return state; } catch (error) { throw error; } } /** * Удалить страницу * @param action Действие для удаление страницы * @param state Состояния документа * @returns Новое состояние документа */ removePage(action, state, ds) { if (!action || !state || !state.pages) { throw new Errors_1.EmptyParametersError('removePage'); } try { const page = state.pages.toArray().find(val => val.id === action.props.id); if (page) { page.removeDataTableFromDataSet(ds); // Удаляем все DataTabe из DataSet // state.makeAllPagesInactive(); state.pages.remove(page); } return state; } catch (error) { throw error; } } /** * Переименовать страницу * @param action Действие * @param state Состояния документа * @returns Новое состояние документа */ renamePage(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('createPage'); } if (typeof state === 'string') { const page = Page_1.Page.fromJSON(state); page.name = action.props.nameNew; return JSON.stringify(page); } else { const page = state.pages.toArray().find(val => val.id === action.props.id); if (page) { page.name = action.props.nameNew; } return state; } } /** * Сделать страницу активной * @param action Действие для выбора страницы * @param state Состояние документа * @returns Новое состояние документа */ selectPage(action, state) { state.pages.toArray().map(val => val.active = false); const page = state.pages.toArray().find(val => val.id === action.props.idNew); if (page) { page.active = true; } return state; } /** * Создать виджет * @param action Действие для создания виджета * @param state Состояния страницы * @returns Новое состояние страницы */ createWidget(action, state) { if (!action) { throw new Errors_1.EmptyParametersError('createWidget'); } try { const widget = action.props.jsonWidget ? Widget_1.Widget.createWidgetByJSON(action.props.jsonWidget) : Widget_1.Widget.createWidgetByType(action.props.type, action.props.id); if (!state) { return JSON.stringify(widget); } state.widgets.insert(action.index, widget); if (List_1.List.isList(widget.type)) { this._recListLevels((action === null || action === void 0 ? void 0 : action.index) || state.widgets.count - 1, state); } return state; } catch (error) { throw error; } } /** * Изменить тип компонента * @param action Действие для изменения типа компонента * @param state Состояние страницы * @returns Новое состояние страницы */ changeTypeWidget(action, state) { var _a; if (!action || !state) { throw new Errors_1.EmptyParametersError('changeTypeWidget'); } if (typeof state === 'string') { const widget = JSON.parse(state); widget.type = action.props.newType; return JSON.stringify(widget); } const index = state.widgets.toArray().findIndex(widget => widget.id === action.props.id); const widgetNode = state.widgets.getNodeByIndex(index); const widget = widgetNode.value; if (!widget) { throw new Errors_1.ElementNotFoundError('changeTypeWidget'); } widget.type = action.props.newType; const newWidget = Widget_1.Widget.createWidgetByJSON(JSON.stringify(widget)); state.widgets.set(index, newWidget); // FIXME пересчет если это List if (List_1.List.isList(widget.type)) { this._recListLevels(index, state); } else if (List_1.List.isList((_a = widgetNode === null || widgetNode === void 0 ? void 0 : widgetNode.next) === null || _a === void 0 ? void 0 : _a.value.type)) { this._recListLevels(index + 1, state); } return state; } /** * Удалить виджет * @param action Действие для удаление виджета * @param state Состояния страницы * @returns Новое состояние страницы */ removeWidget(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('removeWidget'); } const widget = state.widgets.toArray().find(widget => widget.id === action.props.id); if (!widget) { throw new Errors_1.ElementNotFoundError('removeWidget'); } state.widgets.remove(widget); return state; } /** * Переместить виджет * @param action Действие для перемещения виджета * @param state Состояния страницы * @returns Новое состояние страницы */ transferWidget(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('transferWidget'); } try { let curWidgetNode; if (action.props.current_prev_guid) { curWidgetNode = state.widgets.getNodeById(action.props.current_prev_guid).next; } else if (action.props.current_next_guid) { curWidgetNode = state.widgets.getNodeById(action.props.current_next_guid).previous; } if (!curWidgetNode) { throw new Errors_1.ElementNotFoundError('curWidgetNode'); } const insertWidgetNode = state.widgets.getNodeById(action.props.insert_prev_guid ? action.props.insert_prev_guid : action.props.insert_next_guid); if (action.props.insert_prev_guid) { state.widgets.addAfter(insertWidgetNode, curWidgetNode.value); state.widgets.removeNode(curWidgetNode); } else if (action.props.insert_next_guid) { state.widgets.addBefor(insertWidgetNode, curWidgetNode.value); state.widgets.removeNode(curWidgetNode); } if (insertWidgetNode.value instanceof List_1.List) { List_1.List.down(insertWidgetNode); } return state; } catch (error) { throw error; } } /** * Перенос текста на новый виджет * @param action Действие * @param state Состояние страницы * @returns Новое состояние */ textWrapping(action, state) { if (!action || !action.newWidgetId) { throw new Errors_1.EmptyParametersError('textWrapping'); } const { textWidget, textNewWidget, listStyleWidget, listStyleNewWidget } = action.props; switch (typeof state) { case 'string': { const widgetNode = Widget_1.Widget.createWidgetByJSON(state); widgetNode.value = textWidget; widgetNode.styles = listStyleWidget; return JSON.stringify(widgetNode); } case 'undefined': { const newWidget = Widget_1.Widget.createWidgetByType(action.props.typeNewWidget, action.newWidgetId); newWidget.value = textNewWidget; newWidget.styles = listStyleNewWidget; return JSON.stringify(newWidget); } case 'object': { const widgetNode = state.widgets.getNodeById(action.widgetId); const widget = widgetNode.value; widget.value = textWidget; widget.styles = listStyleWidget; const newWidget = Widget_1.Widget.createWidgetByType(action.props.typeNewWidget, action.newWidgetId); newWidget.value = textNewWidget; newWidget.styles = listStyleNewWidget; state.widgets.addAfter(widgetNode, newWidget); // widget?.$eventChangeState.emit(ETextActions.removeText, { startPos: widget.value.length }); // widget?.$eventChangeState.emit(EventHandlerName, { // type: ETextActions.removeText, // data: { startPos: widget.value.length } // } as EventHandler<any>); // newWidget?.$eventChangeState.emit(EventHandlerName, { // type: ETextActions.addStyleText, // data: null // } as EventHandler<any>); // Если список то пересчет позиций if (widgetNode.value instanceof List_1.List) { newWidget.level = widgetNode.value.level; List_1.List.down(widgetNode); } break; } default: break; } return state; } /** * Обратный перенос текста * @param action Действие * @param state Состояние страницы * @returns Состояние страницы */ textUnWrapping(action, state) { if (!action) { throw new Errors_1.EmptyParametersError('textWrapping'); } const { textWidget, listStyleWidget } = action.props; switch (typeof state) { case 'string': { const widgetNode = Widget_1.Widget.createWidgetByJSON(state); widgetNode.value = textWidget; widgetNode.styles = listStyleWidget; return JSON.stringify(widgetNode); } case null: case undefined: return; case 'object': { const widgetNode = state.widgets.getNodeById(action.widgetId); const removeWidgetNode = state.widgets.getNodeById(action.removeWidgetId); state.widgets.removeNode(removeWidgetNode); const widget = widgetNode.value; widget.value = action.props.textWidget; widget.styles = action.props.listStyleWidget; // widget?.$eventChangeState.emit(ETextActions.addStyleText); // widget?.$eventChangeState.emit(EventHandlerName, { // type: ETextActions.addStyleText, // data: null // } as EventHandler<any>); break; } default: break; } return state; } /** * Вставить текст * @param action Действие для вставки текста * @param state Состояние виджета * @returns Новое состояние виджета */ insertText(action, state) { const widgetText = (typeof state === 'string') ? JSON.parse(state) : state; const { startPos, value } = action.props; if (widgetText.value === null || widgetText.value === undefined) { widgetText.value = ''; } // Вставляем текст в startPos позицию widgetText.value = widgetText.value.slice(0, startPos) + action.props.value + widgetText.value.slice(startPos); // Если есть стили у текста то сдвиг вправо на N количество if (widgetText.styles) { Operations.shiftStylePosRight(widgetText, startPos, value.length); } return (typeof state === 'string') ? JSON.stringify(widgetText) : widgetText; } /** * Удалить текст * @param action Действие для удаление текста * @param state Состояние виджета * @returns Новое состояние виджета */ removeText(action, state) { const widgetText = (typeof state === 'string') ? JSON.parse(state) : state; // const widgetText: Text = state as Text; const { startPos, endPos } = action.props; // Вырезаем кусок текста из строки const arraySymbol = widgetText.value.split(''); arraySymbol.splice(action.props.startPos, endPos - startPos); widgetText.value = arraySymbol.join(''); // Сдвигаем стили текста if (widgetText.styles) { for (let index = endPos; index > startPos; index--) { this._shiftStylePosLeft(widgetText, index, 1); } } return (typeof state === 'string') ? JSON.stringify(widgetText) : widgetText; } /** * Обернуть кусок текста стилем Bold * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ addStyleText(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('addStyleText'); } try { const widgetText = (typeof state === 'string') ? JSON.parse(state) : state; if (!widgetText.styles) { widgetText.styles = []; } // TODO переписать этот код let arrSymbols = Text_1.Text.getPosCharStl(widgetText.value, widgetText.styles); arrSymbols = Text_1.Text.addStyle(arrSymbols, action.props.position, action.props.style); widgetText.styles = Text_1.Text.groupPosByStyle(arrSymbols); widgetText.styles.sort((a, b) => a.position[0] - b.position[0]); return (typeof state === 'string') ? JSON.stringify(widgetText) : widgetText; } catch (error) { throw error; } } /** * Выравнивание текста * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ textAlignment(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('textAlignment'); } const textWidget = (typeof state === 'string') ? JSON.parse(state) : state; textWidget.textAlign = action.props.newAlign; return (typeof state === 'string') ? JSON.stringify(textWidget) : textWidget; } /** * Удалить стиль из текста * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ removeStyleText(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('removeStyleText'); } // TODO исправить const widgetText = state; const indexRemove = widgetText.styles.findIndex(val => JSON.stringify(val.position) === JSON.stringify(action.props.position)); if (indexRemove >= 0) { const findStyleIndex = widgetText.styles[indexRemove].style.findIndex(val => val === action.props.style); if (findStyleIndex) { widgetText.styles[indexRemove].style.splice(findStyleIndex, 1); } else { widgetText.styles.splice(indexRemove, 1); } } widgetText.styles.sort((a, b) => a.position[0] - b.position[0]); return state; } // ========== Lists ============== /** * Увеличить уровень списка * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ incrementLevel(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('incrementLevel'); } if (typeof state === 'string') { const newState = JSON.parse(state); newState.level++; return JSON.stringify(newState); } const indexNode = state.widgets.toArray().findIndex(val => val.id === action.widgetId); const listNode = state.widgets.getNodeByIndex(indexNode); if (!listNode) { throw new Errors_1.ElementNotFoundError('incrementLevel'); } if (!listNode.value.level) { throw new Error('Not found value level! Method incrementLevel()'); } listNode.value.level++; List_1.List.down(listNode); return state; } /** * Уменьшить уровень списка * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ deIncrementLevel(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('deIncrementLevel'); } if (typeof state === 'string') { const newState = JSON.parse(state); newState.level--; newState.level = Math.max(newState.level, 1); return JSON.stringify(newState); } const indexNode = state.widgets.toArray().findIndex(val => val.id === action.widgetId); const listNode = state.widgets.getNodeByIndex(indexNode); if (!listNode) { throw new Errors_1.ElementNotFoundError('deIncrementLevel'); } if (!listNode.value.level) { throw new Error('Not found value level! Method deIncrementLevel()'); } listNode.value.level--; listNode.value.level = Math.max(listNode.value.level, 1); List_1.List.down(listNode); return state; } /** * Пометить элемент списка * @param action Действие * @param state Состояние * @returns Новое состояние */ checked(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('checked'); } try { if (typeof state === 'string') { const widget = JSON.parse(state); widget.checked = action.props.checked; return JSON.stringify(widget); } const widgetNode = state.widgets.getNodeById(action.widgetId); if (!widgetNode) { throw new Errors_1.ElementNotFoundError('checked()'); } widgetNode.value.checked = action.props.checked; return state; } catch (error) { throw error; } } // ========== TABLE ============== /** * Создать виджет с таблицей * @param action Действие для создания виджета с таблицей * @param state Состояние страницы * @param ds Новое состояние страницы */ createWidgetTable(action, state, ds) { try { const widget = Widget_1.Widget.createWidgetByType(TypeComponent_1.TypeComponent.table, action.props.id); if (!widget) { throw new Error('I can not create a widget with a table'); } if (!state) { const widgetObj = { originalPerformance: action.props.originalPerformance || false, idTable: action.tableGuid, viewTableJson: action.props.dataViewJson, tableJson: null, type: TypeComponent_1.TypeComponent.table, id: action.props.id }; return JSON.stringify(widgetObj); } if (action.props.dataViewJson) { const table = action.props.dataTableJson ? ds.addTable(DM.DataTable.fromJSON(action.props.dataTableJson)) : ds.getTableByName(action.props.dataTableName); if (!table) { throw new Errors_1.ElementNotFoundError('createWidgetTable() table'); } widget.viewTable = DM.DataView.fromJSON(action.props.dataViewJson); widget.viewTable.table = table; widget.viewTable.table.rowCollection.updateIndex(0); widget.originalPerformance = action.props.dataTableJson ? true : false; } action.props.indexWidget ? state.widgets.insert(action.props.indexWidget - 1, widget) : state.widgets.add(widget); } catch (error) { throw error; } } /** * Удалить виджет с таблицей * @param action Действие для удаление виджета с таблицей * @param state Состояние страницы * @param ds Новое состояние страницы */ removeWidgetTable(action, state, ds) { try { const widget = state.widgets.toArray().find(widget => widget.id === action.props.id); if (!widget) { throw new Errors_1.ElementNotFoundError('removeWidgetTable() widget '); } if (action.props.dataTableJson) { ds.removeTableByName(action.props.dataTableName); } state.widgets.remove(widget); } catch (error) { throw error; } } /** * Создать представление таблицы * @param action Действие для создания * @param state Состояние виджета * @param ds Новое состояние виджета */ createDataView(action, state, ds) { try { const idTable = action.props.id; // Создаем Таблицу if (!state) { const table = DM.DataTable.createNew(null, action.props.dataTableName); table.id = action.props.id; return JSON.stringify(table); } // Создаем состояние DataView для TableWidget if (typeof state === 'string') { const tableWidgetJSON = { idTable, originalPerformance: action.props.originalPerformance, type: TypeComponent_1.TypeComponent.table, viewTableJson: action.props.dataViewJson, }; return JSON.stringify(tableWidgetJSON); } let table; if (!action.props.originalPerformance) { table = ds.getTableByName(action.props.dataTableName); } else { table = ds.addTable(action.props.dataTableName); state.originalPerformance = true; } table.id = idTable; const viewTable = new DM.DataView(action.props.dataViewName, table); state.viewTable = viewTable; } catch (error) { throw error; } } /** * Удалить представления таблицы * @param action Действие для удаления * @param state Состояние страницы * @param ds Новое состояние страницы */ removeDataView(action, state, ds) { try { if (action.props.dataTableName) { ds.removeTableByName(action.props.dataTableName); } state.viewTable = null; state.originalPerformance = false; } catch (error) { throw error; } } /** * Добавить колонку * @param action Действие для добавления * @param state Текущие состояние таблицы * @returns Новое состояние таблицы */ addColumn(action, state) { if (!action) { throw new Errors_1.EmptyParametersError('addColumn'); } try { if (!state) { const column = { dataType: DM.DataType.String, id: action.props.id, index: action.props.indexColumn, name: action.props.nameColumn, }; return JSON.stringify(column); } state.viewTable.table.addColumn(action.props.nameColumn, DM.DataType.String); return state; } catch (error) { throw error; } } /** * Сортировка колонки * @param action Действие для сотрировки * @param state Текущие состояние таблицы * @returns Новое состояние таблицы */ sortColumn(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('sortColumn'); } try { if (typeof state === 'string') { const newState = JSON.parse(state); if (typeof newState.viewTableJson === 'string') { newState.viewTableJson = JSON.parse(newState.viewTableJson); } newState.viewTableJson.sort = action.props.sort; return JSON.stringify(newState); } state.viewTable.sort = action.props.sort; return state; } catch (error) { throw error; } } /** * Удалить колонку * @param action Действие для удаления * @param state Текущие состояние таблицы * @returns Новое состояние таблицы */ removeColumn(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('removeColumn'); } try { const { indexColumn } = action.props; state.viewTable.table.removeColumnByIndex(indexColumn); } catch (error) { throw error; } return state; } // // Создаем Таблицу // if (!state) { // const table = DataTable.createNew(null, action.props.dataTableName); // table.id = action.props.id; // return JSON.stringify(table); // } // // Создаем состояние DataView для TableWidget // if (typeof state === 'string') { // const tableWidgetJSON = { // idTable, // originalPerformance: action.props.originalPerformance, // type: TypeComponent.table, // viewTableJson: action.props.dataViewJson, // } as TableWidgetJSON; /** * Переименовать таблицу * @param action Действие для переименования * @param state Текущие состояние таблицы * @returns Новое состояние таблицы */ renameTable(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('renameTable'); } try { if (action.props.originalPerformance === true) { if (typeof state === 'string') { const newState = JSON.parse(state); newState.uniqueName = action.props.newName; return JSON.stringify(newState); } state.viewTable.table.uniqueName = action.props.newName; } else { if (typeof state === 'string') { const newState = JSON.parse(state); if (typeof newState.viewTableJson === 'string') { newState.viewTableJson = JSON.parse(newState.viewTableJson); } newState.viewTableJson.uniqueName = action.props.newName; return JSON.stringify(newState); } state.viewTable.uniqueName = action.props.newName; return state; } } catch (error) { throw error; } } /** * Переименовать колонку * @param action Действие для переименования колокни * @param state Текущие состояние таблицы * @returns Новое состояние таблицы */ renameColumn(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('renameColumn'); } try { if (typeof state === 'string') { const column = JSON.parse(state); column.name = action.props.newName; return JSON.stringify(column); } const column = state.viewTable.table.getColumnByName(action.props.oldName); if (!column) { throw new Errors_1.ElementNotFoundError('renameColumn'); } column.name = action.props.newName; return state; } catch (error) { throw error; } } /** * Применить фильтр к таблице * @param action Действие для фильтра * @param state Состояние виджета * @param ds DataSet * @returns Новое состояние виджета */ applyFilter(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('applyFilter'); } try { const filter = new DM.FilterExprestion(); action.props.filter.forEach(val => { const res = Object.assign(new DM.FilterExprestionItem(), val); filter.add(res); }); if (typeof state === 'string') { const newState = JSON.parse(state); const newViewTable = typeof newState.viewTableJson === 'string' ? JSON.parse(newState.viewTableJson) : newState.viewTableJson; newViewTable.filter = filter; newState.viewTableJson = newViewTable; return JSON.stringify(newState); } state.viewTable.filter = filter; return state; } catch (error) { throw error; } } /** * Обновить select * @param action Действие для Select * @param state Состояние виджета * @returns Новое состояние виджета */ updateSelect(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('addSelect'); } try { if (typeof state === 'string') { const newStateColumn = DM.DataColumnSelect.fromJSON(state); const select = newStateColumn.dataSelect.getSelectByName(action.props.name); if (!select) { throw new Errors_1.ElementNotFoundError('updateSelect'); } select.name = action.props.value; select.color = action.props.color; return JSON.stringify(newStateColumn); } const column = state.viewTable.table.getColumnByIndex(action.props.indexColumn); if (!column) { throw new Errors_1.ElementNotFoundError('updateSelect'); } const select = column.dataSelect.getSelectByName(action.props.name); if (!select) { throw new Errors_1.ElementNotFoundError('updateSelect'); } select.name = action.props.value; select.color = action.props.color; return state; } catch (error) { throw error; } } /** * Добавить Select в список * @param action Действие для Select * @param state Состояние виджета * @returns Новое состояние */ addSelect(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('addSelect'); } try { if (typeof state === 'string') { const newStateColumn = DM.DataColumnSelect.fromJSON(state); newStateColumn.dataSelect.addSelect(new DM.Select(action.props.value, action.props.color)); return JSON.stringify(newStateColumn); } const column = state.viewTable.table.getColumnByIndex(action.props.indexColumn); if (!column) { throw new Errors_1.ElementNotFoundError('addSelect'); } column.dataSelect.addSelect(new DM.Select(action.props.value, action.props.color)); return state; } catch (error) { throw error; } } /** * Удалить Select * @param action Действие для Select * @param state Состяоние виджета * @returns Новое состояние виджета */ removeSelect(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('removeSelect'); } try { if (typeof state === 'string') { const newStateColumn = DM.DataColumnSelect.fromJSON(state); newStateColumn.dataSelect.removeSelect(action.props.name); return JSON.stringify(newStateColumn); } const column = state.viewTable.table.getColumnByIndex(action.props.indexColumn); if (!column) { throw new Errors_1.ElementNotFoundError('removeSelect'); } column.dataSelect.removeSelect(action.props.name); return state; } catch (error) { throw error; } } /** * Изменить тип колонки * @param action Действие для работы с колонкой * @param state Состояние виджета * @returns Новое состояние виджета */ changeTypeColumn(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('changeTypeColumn'); } try { if (typeof state === 'string') { const newStateColumn = JSON.parse(state); // state.viewTable.table.changeTypeColumn(column, action.props.newType); newStateColumn.dataType = action.props.newType; return JSON.stringify(newStateColumn); } const column = state.viewTable.table.getColumnByIndex(action.props.indexColumn); if (!column) { throw new Errors_1.ElementNotFoundError('changeTypeColumn'); } state.viewTable.table.changeTypeColumn(column, action.props.newType); // column = column.changeType(action.props.newType) // column.dataType = action.props.newType; return state; } catch (error) { throw error; } } /** * Изменить ширину колонки * @param action Действие для работы с колонкой * @param state Состояние виджета * @returns Новое состояние виджета */ resizeColumn(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('resizeColumn'); } try { if (typeof state === 'string') { const newStateColumn = JSON.parse(state); newStateColumn.width = action.props.width; return JSON.stringify(newStateColumn); } const column = state.viewTable.table.getColumnByIndex(action.props.indexColumn); if (!column) { throw new Errors_1.ElementNotFoundError('resizeColumn'); } column.width = action.props.width; return state; } catch (error) { throw error; } } /** * Добавить строку * @param action Действие для добавления строки * @param state Состояние виджета * @param ds DataSet * @returns Новое состояние виджета */ addRow(action, state) { if (!action) { throw new Errors_1.EmptyParametersError('addRow'); } try { if (!state) { const row = { id: action.props.id, index: action.props.indexRow, items: action.props.data }; return JSON.stringify(row); } const row = state.viewTable.table.addRow(); row.id = action.props.id; row.index = action.props.indexRow; return state; } catch (error) { throw error; } } /** * Вставить строку в позицию N * @param action Действие для вставки строки * @param state Состояние виджета * @returns Новое состояние виджета */ insertRow(action, state) { var _a; if (!action) { throw new Errors_1.EmptyParametersError('insertRow'); } try { if (!state) { const row = { id: action.props.id, index: action.props.indexRow, items: action.props.data }; return JSON.stringify(row); } state.viewTable.table.insertRow(action.props.indexRow, (_a = action.props.data) === null || _a === void 0 ? void 0 : _a.map(r => r === null || r === void 0 ? void 0 : r.value)); return state; } catch (error) { throw error; } } /** * Вставить колонку * @param action Действие для вставки колонки * @param state Состояние виджета * @returns Новое состояние виджета */ insertColumn(action, state) { if (!action) { throw new Errors_1.EmptyParametersError('insertColumn'); } try { if (!state) { const col = new DM.DataColumn(); col.id = action.props.id; col.name = action.props.nameColumn; col.index = action.props.indexColumn; col.dataType = action.props.dataType; return JSON.stringify(col); } const { indexColumn, nameColumn, data, dataType } = action.props; const col = state.viewTable.table.insertColumn(indexColumn, nameColumn, dataType, data === null || data === void 0 ? void 0 : data.map(v => v.value)); col.id = action.props.id; return state; } catch (error) { throw error; } } /** * Изменить состояние строки * @param stateRow Старое состояние строки * @param mapCell Состояние ячейки * @returns Новое состояние строки */ changeStateRow(stateRows, rowState) { if (!stateRows || !rowState) { throw new Errors_1.EmptyParametersError('changeStateRow'); } try { const resRowState = JSON.parse(rowState); // if (stateRows instanceof Map) { // if (!stateRows.has(resRowState.id)) { throw new ElementNotFoundError('changeStateRow'); } // const row = stateRows.get(resRowState.id); // resRowState.items.push(row); // return JSON.stringify(resRowState); // } const cell = resRowState.items.find(item => item.guidColumn === stateRows.guidColumn); if (!cell) { resRowState.items.push(stateRows); } else { cell.value = stateRows.value; } return JSON.stringify(resRowState); } catch (error) { throw error; } } /** * Удалить строку * @param action Действие для удаления * @param state Состояние виджета * @returns Новое состояние виджета */ removeRow(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('removeRow'); } try { state.viewTable.table.removeRow(action.props.indexRow); return state; } catch (error) { throw error; } } /** * Вставить значение в ячейку * @param action Действие для вставки * @param state Состояние виджета * @param ds DataSet * @returns Новое состояние виджета */ setCellValue(action, state, ds) { if (!action || !state) { throw new Errors_1.EmptyParametersError('setCellValue'); } try { const { rowIndex, columnIndex } = action.props; state.viewTable.table.setCellValue(rowIndex, columnIndex, action.props.newValue.value); return state; } catch (error) { throw error; } } // ========== Cover =============== /** * Создать обложку * @param action Действие * @param state Состояние * @returns Новое состояние */ createCover(action, state) { if (typeof state === 'string') { const page = Page_1.Page.fromJSON(state); page.cover = new Page_1.Cover(action.props.image); return JSON.stringify(page); } const page = state; page.cover = new Page_1.Cover(action.props.image); console.log(action.props.image); return page; } /** * Удалить обложку * @param action Действие * @param state Состояние * @returns Новое состояние */ removeCover(action, state) { if (typeof state === 'string') { const page = Page_1.Page.fromJSON(state); page.cover = null; return JSON.stringify(page); } const page = state; page.cover = null; return page; } // ========== HyperLink =============== /** * Изменить Url * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ changeUrl(action, state) { var _a, _b, _c, _d; if (!action || !state) { throw new Errors_1.EmptyParametersError('changeUrl'); } if (typeof state === 'string') { const newState = JSON.parse(state); newState.url = action.props.newUrl; newState.widgetId = ((_a = action.props) === null || _a === void 0 ? void 0 : _a.widgetId) || null; newState.pageId = ((_b = action.props) === null || _b === void 0 ? void 0 : _b.pageId) || null; return JSON.stringify(newState); } state.url = action.props.newUrl; state.widgetId = ((_c = action.props) === null || _c === void 0 ? void 0 : _c.widgetId) || null; state.pageId = ((_d = action.props) === null || _d === void 0 ? void 0 : _d.pageId) || null; return state; } /** * Изменить текст * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ changeText(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('changeText'); } if (typeof state === 'string') { const newState = JSON.parse(state); newState.value = action.props.newText; return JSON.stringify(newState); } state.value = action.props.newText; return state; } // ========== VIDEO =============== /** * Изменить параметры видео виджета * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ changeParamsVideo(action, state) { if (!action || !state) { throw new Errors_1.EmptyParametersError('changeParamsVideo'); } const videoWidget = (typeof state === 'string') ? JSON.parse(state) : state; videoWidget.value = action.props.value; videoWidget.width = action.props.width; videoWidget.height = action.props.height; return (typeof state === 'string') ? JSON.stringify(videoWidget) : videoWidget; } // ========== IMAGE =============== /** * Изменить параметры изображения * @param action Действие * @param state Состояние виджета * @returns Новое состояние виджета */ changeParamsImage(action, state) { var _a, _b; if (!action || !state) { throw new Errors_1.EmptyParametersError('changeParamsImage'); } if (typeof state === 'string') { const newState = JSON.parse(state); newState.data = action.props.data; return JSON.stringify(newState); } state.data = action.props.data; state.width = ((_a = action.props) === null || _a === void 0 ? void 0 : _a.width) || null; state.height = ((_b = action.props) === null || _b === void 0 ? void 0 : _b.height) || null; return state; } // ========== PRIVATE =============== static shiftStylePosRight(textWidget, insertPos, count = 1) { if (!(textWidget === null || textWidget === void 0 ? void 0 : textWidget.styles)) { return; } for (const style of textWidget.styles) { style.position = style.position.map(pos => (pos >= insertPos) ? pos + count : pos); } } _shiftStylePosLeft(textWidget, insertPos, count = 1) { for (const style of textWidget.styles) { style.position = style.position.map(pos => (pos >= insertPos) ? pos - count : pos); } } _recListLevels(indexNode, state) { const nodeList = state.widgets.getNodeByIndex(indexNode); if (!nodeList) { return; } List_1.List.down(nodeList); } } exports.Operations = Operations; //# sourceMappingURL=Operations.js.map