import React from 'react'; import ReactDOM from 'react-dom'; import { Space, Tag } from 'antd'; import { EditOutlined, DeleteOutlined, CopyOutlined, MonitorOutlined, } from '@ant-design/icons'; import AdapterBase from './AdapterBase'; import IceFormModal from '../components/IceFormModal'; import IceStepFormModal from '../components/IceStepFromModal'; import IceTable from '../components/IceTable'; import MasterDataReader from './MasterDataReader'; class ReactModalAdapterBase extends AdapterBase { static get MODAL_TYPE_NORMAL() { return 'Normal'; } static get MODAL_TYPE_STEPS() { return 'Steps'; } constructor(endPoint, tab, filter, orderBy) { super(endPoint, tab, filter, orderBy); this.modalType = this.MODAL_TYPE_NORMAL; this.dataPipe = null; this.formInitialized = false; this.tableInitialized = false; this.access = []; this.localStorageEnabled = false; this.isV2 = true; this.masterDataReader = new MasterDataReader(this); } enableLocalStorage() { this.localStorageEnabled = true; } setModalType(type) { this.modalType = type; } setDataPipe(dataPipe) { this.dataPipe = dataPipe; } setAccess(access) { this.access = access; } hasAccess(type) { return this.access.indexOf(type) > 0; } hasCustomButtons() { return false; } initTable() { if (this.tableInitialized) { return false; } const tableDom = document.getElementById(`${this.tab}Table`); if (tableDom) { this.tableContainer = React.createRef(); let columns = this.getTableColumns(); if (this.hasAccess('save') || this.hasAccess('delete') || this.hasAccess('element') || this.hasCustomButtons() ) { columns.push({ title: 'Actions', key: 'actions', render: this.getTableActionButtonJsx(this), }); } columns = columns.map((item) => { item.title = this.gt(item.title); return item; }); ReactDOM.render( {this.getTableChildComponents()} , tableDom, ); } this.tableInitialized = true; return true; } initForm() { if (this.formInitialized) { return false; } this.formContainer = React.createRef(); if (this.modalType === this.MODAL_TYPE_NORMAL) { ReactDOM.render( , document.getElementById(`${this.tab}Form`), ); } else { ReactDOM.render( , document.getElementById(`${this.tab}Form`), ); } const filterDom = document.getElementById(`${this.tab}FilterForm`); if (filterDom && this.getFilters()) { this.filtersContainer = React.createRef(); ReactDOM.render( { this.setFilter(values); this.filtersAlreadySet = true; this.get([]); this.tableContainer.current.setFilterData(values); closeModal(); }} />, filterDom, ); } this.formInitialized = true; return true; } getTableChildComponents() { return false; } reloadCurrentElement() { this.viewElement(this.currentId); } getTableActionButtonJsx(adapter) { return (text, record) => ( {adapter.hasAccess('save') && adapter.showEdit && ( modJs.edit(record.id)} style={{ cursor: 'pointer' }}> {` ${adapter.gt('Edit')}`} )} {adapter.hasAccess('element') && ( modJs.viewElement(record.id)} style={{ cursor: 'pointer' }}> {` ${adapter.gt('View')}`} )} {adapter.hasAccess('delete') && adapter.showDelete && ( modJs.deleteRow(record.id)} style={{ cursor: 'pointer' }}> {` ${adapter.gt('Delete')}`} )} {adapter.hasAccess('save') && ( modJs.copyRow(record.id)} style={{ cursor: 'pointer' }}> {` ${adapter.gt('Copy')}`} )} ); } setTableLoading(value) { this.tableContainer.current.setLoading(value); } /** * Show the view form for an item * @method viewElement * @param id {int} id of the item to view */ viewElement(id) { this.setTableLoading(true); this.currentId = id; this.getElement(id, { noRender: true, callBack: (element) => { this.showElement(element); this.setTableLoading(false); }, }); } showElement(element) { this.renderForm(element, true); } /** * Show the edit form for an item * @method edit * @param id {int} id of the item to edit */ edit(id) { this.setTableLoading(true); this.currentId = id; this.getElement(id, []); } renderForm(object = null, viewOnly = false) { if (object == null) { this.currentId = null; this.currentElement = null; } this.setTableLoading(false); this.initForm(); this.formContainer.current.setViewOnly(viewOnly); this.formContainer.current.show(object); } showFilters() { this.initForm(); this.filtersContainer.current.show(this.filter); } resetFilters() { this.filter = this.origFilter; this.filtersAlreadySet = false; this.currentFilterString = ''; this.get([]); this.tableContainer.current.setFilterData(this.filter); } get() { if (this.tableContainer && this.tableContainer.current) { this.tableContainer.current.setCurrentElement(null); } this.initTable(); this.masterDataReader.updateAllMasterData() .then(() => { this.tableContainer.current.reload(); }); this.trackEvent('get', this.tab, this.table); } showLoader() { // $('#iceloader').show(); } addActualFieldsForStepModal(steps, fields) { return steps.map((item) => { item.fields = item.fields.reduce((acc, fieldName) => { const field = fields.find(([name]) => name === fieldName); if (field) { acc.push(field); } return acc; }, []); return item; }); } getFormOptions() { return { width: 1024, twoColumnLayout: false, }; } } export default ReactModalAdapterBase;