framework-entersol-web
Version:
Framework based on bootstrap 5
188 lines • 37.5 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=exports.addFormatTemplates=exports.HeaderCell=exports.FORMATS=void 0;var _react=_interopRequireDefault(require("react"));var _moment=_interopRequireDefault(require("moment"));var _eventHandler=_interopRequireDefault(require("../functions/event-handler"));var _deepMerge=_interopRequireDefault(require("../functions/deep-merge"));var _component=_interopRequireDefault(require("../component"));var _fields=_interopRequireDefault(require("../forms/fields"));var _icons=_interopRequireDefault(require("../media/icons"));var _jsonRender=_interopRequireDefault(require("../json-render"));var _dropdownContainer=_interopRequireDefault(require("../containers/dropdown-container"));var _action=_interopRequireDefault(require("../actions/action"));var _i18next=_interopRequireDefault(require("i18next"));var _excluded=["classes"];function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _objectWithoutProperties(e,t){if(null==e)return{};var o,r,i=_objectWithoutPropertiesLoose(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)o=n[r],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}function _objectWithoutPropertiesLoose(r,e){if(null==r)return{};var t={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(-1!==e.indexOf(n))continue;t[n]=r[n]}return t}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}var global_es={facturas:{"":"",UUID:"UUID","Factura ID":"Factura ID","Factura Principal":"Factura Principal","Tipo de Comprobante":"Tipo de Comprobante","Orden Compra":"Orden Compra","Fecha Factura":"Fecha Factura","Fecha Pago":"Fecha Pago","Fecha Ingreso":"Fecha Ingreso","Fecha Modificaci\xF3n":"Fecha Modificaci\xF3n","Fecha Validaci\xF3n SAT":"Fecha Validaci\xF3n SAT","Estatus Pago":"Estatus Pago","Estado SAT":"Estado SAT","Cancelable SAT":"Cancelable SAT","CodigoEstatus SAT":"CodigoEstatus SAT","Monto Total":"Monto Total","Impuestos Trasladados":"Impuestos Trasladados","Impuestos Retenidos":"Impuestos Retenidos",Moneda:"Moneda","Forma de pago":"Forma de pago","M\xE9todo de pago":"M\xE9todo de pago","Complemento de Pago":"Complemento de Pago","Tipo Cambio Oficial":"Tipo Cambio Oficial","Tipo Cambio Documento":"Tipo Cambio Documento",Disputa:"Disputa",ID:"ID",Proveedor:"Proveedor","RFC/Tax ID":"RFC/Tax ID","Moneda Pago":"Moneda Pago","Tipo de cambio":"Tipo de cambio",Colaborador:"Colaborador",Aprobador:"Aprobador","ID Gasto":"ID Gasto",Estatus:"Estatus",Archivos:"Archivos"," ":" "},support:{Ticket:"Ticket",Empresa:"Empresa",Asunto:"Asunto",Fecha:"Fecha",Editar:"Editar"},complementos:{" ":"",UUID:"UUID","Estado SAT":"Estado SAT",Monto:"Monto",Moneda:"Moneda","Forma Pago":"Forma Pago","Fecha Pago":"Fecha Pago","Fecha Emisi\xF3n":"Fecha Emisi\xF3n",Ingresado:"Ingresado","Total Imp. Retenidos":"Total Imp. Retenidos","Total Imp. Trasladados":"Total Imp. Trasladados","Moneda Pago":"Moneda Pago","Tipo de cambio":"Tipo de cambio",Archivos:"Archivos"},"invoices-not-approved":{"":"",UUID:"UUID","Factura ID":"Factura ID","Factura Principal":"Factura Principal","Tipo de Comprobante":"Tipo de Comprobante","Orden Compra":"Orden Compra","Fecha Factura":"Fecha Factura","Fecha Pago":"Fecha Pago","Fecha Ingreso":"Fecha Ingreso","Fecha Modificaci\xF3n":"Fecha Modificaci\xF3n","Fecha Validaci\xF3n SAT":"Fecha Validaci\xF3n SAT","Estatus Pago":"Estatus Pago","Estado SAT":"Estado SAT","Cancelable SAT":"Cancelable SAT","CodigoEstatus SAT":"CodigoEstatus SAT","Monto Total":"Monto Total","Impuestos Trasladados":"Impuestos Trasladados","Impuestos Retenidos":"Impuestos Retenidos",Moneda:"Moneda","Forma de pago":"Forma de pago","M\xE9todo de pago":"M\xE9todo de pago","Complemento de Pago":"Complemento de Pago","Tipo Cambio Oficial":"Tipo Cambio Oficial","Tipo Cambio Documento":"Tipo Cambio Documento",Disputa:"Disputa",ID:"ID"," ":" ",Proveedor:"Proveedor","RFC/Tax ID":"RFC/Tax ID","Moneda Pago":"Moneda Pago","Tipo de cambio":"Tipo de cambio",Colaborador:"Colaborador",Aprobador:"Aprobador","ID Gasto":"ID Gasto",Estatus:"Estatus",Archivos:"Archivos"},"oc-detail":{"":""," ":" ",Archivo:"Archivo","Orden compra":"Orden compra","Id proveedor":"Id proveedor",Proveedor:"Proveedor",RFC:"RFC",Fecha:"Fecha",Estado:"Estado",Moneda:"Moneda","Tipo cambio":"Tipo cambio",Impuestos:"Impuesto","Monto total":"Monto total"}};var global_en={facturas:{"":"",UUID:"UUID","Factura ID":"Invoice Number","Factura Principal":"Invoice","Tipo de Comprobante":"Type","Orden Compra":"Purchase Order","Fecha Factura":"Invoice Date","Fecha Pago":"Payment Date","Fecha Ingreso":"Entry Date","Fecha Modificaci\xF3n":"Modified Date","Fecha Validaci\xF3n SAT":"SAT Verification Date","Estatus Pago":"Payment Status","Estado SAT":"SAT Status","Cancelable SAT":"Cancelable SAT","CodigoEstatus SAT":"SAT Code Status","Monto Total":"Total Amount","Impuestos Trasladados":"Transferred taxes","Impuestos Retenidos":"Withheld taxes",Moneda:"Currency","Forma de pago":"Forma de Pago","M\xE9todo de pago":"M\xE9todo de Pago","Complemento de Pago":"Payment Complement","Tipo Cambio Oficial":"DOF Exchange Rate","Tipo Cambio Documento":"Doc Exchange Rate",Disputa:"Dispute",ID:"ID",Proveedor:"Vendor","RFC/Tax ID":"RFC/Tax ID","Moneda Pago":"Payment Currency","Tipo de cambio":"Exchange Rate",Colaborador:"Collaborator",Aprobador:"Approver","ID Gasto":"ID Expense",Estatus:"Status",Archivos:"Files"," ":" "},support:{Ticket:"Ticket",Empresa:"Company",Asunto:"Subject",Fecha:"Date",Editar:"Edit"},complementos:{" ":"","":"",ID:"ID","Raz\xF3n Emisor":"Issuer's Name","RFC Emisor":"Issuer's RFC/Tax ID",UUID:"UUID","Estado SAT":"SAT Status",Monto:"Amount",Moneda:"Currency","Forma Pago":"Forma Pago","Fecha Pago":"Payment Date","Fecha Emisi\xF3n":"Stamped Date",Ingresado:"Entry date","Total Imp. Retenidos":"Total Withheld taxes","Total Imp. Trasladados":"Total Transferred taxes","Moneda Pago":"Payment currency","Tipo de cambio":"Exchange rate",Archivos:"Files"},"invoices-not-approved":{"":"",UUID:"UUID","Factura ID":"Invoice Number","Factura Principal":"Invoice","Tipo de Comprobante":"Type","Orden Compra":"Purchase Order","Fecha Factura":"Invoice Date","Fecha Pago":"Payment Date","Fecha Ingreso":"Entry Date","Fecha Modificaci\xF3n":"Modified Date","Fecha Validaci\xF3n SAT":"SAT Verification Date","Estatus Pago":"Payment Status","Estado SAT":"SAT Status","Cancelable SAT":"Cancelable SAT","CodigoEstatus SAT":"SAT Code Status","Monto Total":"Total Amount","Impuestos Trasladados":"Transferred taxes","Impuestos Retenidos":"Withheld taxes",Moneda:"Currency","Forma de pago":"Forma de Pago","M\xE9todo de pago":"M\xE9todo de Pago","Complemento de Pago":"Payment Complement","Tipo Cambio Oficial":"DOF Exchange Rate","Tipo Cambio Documento":"Doc Exchange Rate",Disputa:"Dispute",ID:"ID"," ":" ",Proveedor:"Vendor","RFC/Tax ID":"RFC/Tax ID","Moneda Pago":"Payment Currency","Tipo de cambio":"Exchange Rate",Colaborador:"Collaborator",Aprobador:"Approver","ID Gasto":"ID Expense",Estatus:"Status",Archivos:"Files"},"oc-detail":{"":""," ":" ",Archivo:"File","Orden compra":"Purchase Order","Id proveedor":"Supplier ID",Proveedor:"Supplier",RFC:"Tax ID",Fecha:"Date",Estado:"Status",Moneda:"Currency","Tipo cambio":"Exchange Rate",Impuestos:"Tax","Monto total":"Total Amount"}};/**
* @typedef {Object} FormatOptions
* @property {string} [format] - Formato para fechas y horas.
* @property {boolean} [locale] - Si se debe considerar la zona horaria local.
* @property {string} [currency] - Código de moneda para el formato de moneda.
* @property {string} ['true'] - Representación en cadena de un valor booleano `true`.
* @property {string} ['false'] - Representación en cadena de un valor booleano `false`.
*//**
* Objeto con funciones de formateo para diferentes tipos de datos.
*
* @namespace
* @property {function(any, Object, Object, Object, string): React.Component} component - Formatea los datos a un componente.
* @property {function(any, FormatOptions=): string} date - Formatea los datos a una fecha.
* @property {function(any, FormatOptions=): string} datetime - Formatea los datos a un datetime.
* @property {function(any, FormatOptions=): string} currency - Formatea los datos a una moneda.
* @property {function(any, FormatOptions=): string} number - Formatea los datos a un número.
* @property {function(any, Object): string} boolean - Formatea los datos a un booleano.
*/var FORMATS=exports.FORMATS={/**
* Formatea los datos en crudo a un componente.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} props - Propiedades del componente.
* @param {Object} data - Datos de la celda.
* @param {Object} jsonRender - Instancia de JsonRender.
* @param {String} colName - Nombre de la columna.
* @returns {React.Component} El componente formateado.
*/component:function component(raw,props,data,jsonRender,colName){var newProps=_objectSpread({},props);if(typeof newProps.value==="undefined"){if(newProps.type==="boolean"){newProps.value=!!raw}else{newProps.value=raw}}newProps.name+=".cell";newProps.id=data.id;newProps.data=data;newProps.columnName=colName;return jsonRender.buildContent(newProps)},/**
* Formatea los datos en crudo a una fecha.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} options - Opciones de formato de la fecha.
* @returns {String} La fecha formateada.
*/date:function date(raw){var _ref=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},_ref$format=_ref.format,f=_ref$format===void 0?"DD/MM/YYYY":_ref$format,_ref$locale=_ref.locale,locale=_ref$locale===void 0?false:_ref$locale;return raw?locale?_moment["default"].utc(raw).format(f)// Parse with UTC and format
:_moment["default"].utc(raw).format(f):""},/**
* Formatea los datos en crudo a un datetime.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} options - Opciones de formato del datetime.
* @returns {String} El datetime formateado.
*/datetime:function datetime(raw){var _ref2=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},_ref2$format=_ref2.format,f=_ref2$format===void 0?"DD/MM/YYYY HH:mm":_ref2$format,_ref2$locale=_ref2.locale,locale=_ref2$locale===void 0?false:_ref2$locale,options=_ref2.options;return raw?locale?_moment["default"].utc(raw,options).format(f)// Parse with UTC and format
:_moment["default"].utc(raw,options).format(f):""},/**
* Formatea los datos en crudo a una moneda.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} options - Opciones de formato de la moneda.
* @returns {String} La moneda formateada.
*/currency:function currency(raw){var _ref3=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},_ref3$locale=_ref3.locale,locale=_ref3$locale===void 0?"en-US":_ref3$locale,_ref3$currency=_ref3.currency,_currency=_ref3$currency===void 0?"USD":_ref3$currency;return["string","number"].includes(_typeof(raw))?new Intl.NumberFormat(locale,{style:"currency",currency:_currency,minimumFractionDigits:2,maximumFractionDigits:6}).format(raw):""},/**
* Formatea los datos en crudo a un número.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} options - Opciones de formato del número.
* @returns {String} El número formateado.
*/number:function number(raw){var _ref4=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},_ref4$locale=_ref4.locale,locale=_ref4$locale===void 0?"en-US":_ref4$locale;return["string","number"].includes(_typeof(raw))?new Number(raw).toLocaleString(locale,{minimumFractionDigits:2,maximumFractionDigits:6}):""},/**
* Formatea los datos en crudo a un booleano.
*
* @function
* @param {any} raw - Los datos en crudo que deben ser formateados.
* @param {Object} options - Opciones de formato del booleano.
* @returns {String} El booleano formateado.
*/"boolean":function _boolean(raw,_ref5){var _ref5$true=_ref5["true"],True=_ref5$true===void 0?"Yes":_ref5$true,_ref5$false=_ref5["false"],False=_ref5$false===void 0?"Not":_ref5$false;return raw?True:False}};/**
* Agrega nuevas plantillas de formato al objeto FORMATS.
*
* Esta función utiliza `Object.assign` para fusionar las plantillas proporcionadas en el objeto FORMATS existente.
* Esto significa que si una plantilla con el mismo nombre ya existe en FORMATS, la nueva plantilla la sobrescribirá.
*
* @function
* @param {Object} newTemplates - Un objeto que contiene plantillas de formato a agregar. Las claves son los nombres de las plantillas y los valores son las funciones de formato.
* @returns {void}
* @example
*
* addFormatTemplates({
* newFormat: (raw, options) => { ... },
* anotherFormat: (raw, options) => { ... }
* });
*/var addFormatTemplates=exports.addFormatTemplates=function addFormatTemplates(){var newTemplates=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};Object.assign(FORMATS,newTemplates)};/**
* Componente de celda de encabezado para una tabla.
*
* @class HeaderCell
* @extends {React.Component}
*/var HeaderCell=exports.HeaderCell=/*#__PURE__*/function(_React$Component){function HeaderCell(props){var _this;_classCallCheck(this,HeaderCell);_this=_callSuper(this,HeaderCell,[props]);_defineProperty(_this,"state",{});/**
* Manejador de eventos para cambios en el filtro.
* @param {Object} data - Los datos del evento.
*/_defineProperty(_this,"onChangeFilter",function(data){var filter=_this.props.col.filter;var searchActive=!!(Array.isArray(data[filter.name])?data[filter.name].length:data[filter.name]);_this.setState({searchActive:searchActive});_eventHandler["default"].dispatch(_this.props.tableName,data)});_this.events=[];_this.state={translatedLabel:null,isI18nReady:false};return _this}/**
* Método de ciclo de vida de React que se llama cuando el componente se ha montado.
* Se suscribe a eventos relevantes para este componente.
*/_inherits(HeaderCell,_React$Component);return _createClass(HeaderCell,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;var col=this.props.col;if(col.filter){this.events.push([col.filter.name,this.onChangeFilter])}var _iterator=_createForOfIteratorHelper(this.events),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var event=_step.value;_eventHandler["default"].subscribe.apply(_eventHandler["default"],_toConsumableArray(event))}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(_i18next["default"].isInitialized){this.setState({isI18nReady:true},this.handleTranslation)}else{_i18next["default"].on("initialized",function(){_this2.setState({isI18nReady:true},_this2.handleTranslation)})}}/**
* Método de ciclo de vida de React que se llama cuando el componente se actualiza.
* Restablece la dirección de la clasificación si la clasificación se ha eliminado.
* @param {Object} prevProps - Las propiedades anteriores del componente.
* @param {Object} prevState - El estado anterior del componente.
*/},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(!this.props.sort&&this.state.sortDir){this.setState({sortDir:null})}if(this.state.isI18nReady&&this.props.history.lang==="en"&&this.props.history.type==="proveedor"){this.handleTranslation()}}/**
* Método de ciclo de vida de React que se llama cuando el componente está a punto de desmontarse.
* Cancela la suscripción a todos los eventos a los que se suscribió en componentDidMount.
*/},{key:"componentWillUnmount",value:function componentWillUnmount(){var _iterator2=_createForOfIteratorHelper(this.events),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var event=_step2.value;_eventHandler["default"].unsubscribe(event[0])}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}},{key:"handleTranslation",value:function handleTranslation(){var _this$props$col$label;// Ensure that we are getting the correct translation key
var labelKey="".concat(this.props.tableName,".").concat(((_this$props$col$label=this.props.col.label)===null||_this$props$col$label===void 0||(_this$props$col$label=_this$props$col$label.props)===null||_this$props$col$label===void 0?void 0:_this$props$col$label.children)||" ");var translatedLabel=_i18next["default"].t(labelKey,{ns:"global"});// Update state only if the translation changes
if(translatedLabel!==this.state.translatedLabel){this.setState({translatedLabel:translatedLabel})}}},{key:"sort",value:/**
* Realiza la acción de ordenar las celdas en el encabezado.
* @param {string} dir - La dirección en la que se va a realizar la ordenación.
*/function sort(dir){var _this$props=this.props,onSort=_this$props.onSort,col=_this$props.col;var sortDir=this.state.sortDir;var newDir=dir;if(sortDir===newDir)newDir=null;this.setState({sortDir:newDir});if(typeof onSort==="function")onSort(newDir?_defineProperty({},col.name,newDir):null)}/**
* Renderiza el componente.
* @returns {React.Component} El componente renderizado.
*/},{key:"render",value:function render(){var _col$label,_this$props$col$label2,_this3=this;var _this$props2=this.props,col=_this$props2.col,classes=_this$props2.classes,icons=_this$props2.icons,orderable=_this$props2.orderable,filterPos=_this$props2.filterPos,headerClasses=_this$props2.headerClasses,history=_this$props2.history;var _this$state=this.state,translatedLabel=_this$state.translatedLabel,isI18nReady=_this$state.isI18nReady;// Show loading message until i18n is ready
if(!isI18nReady&&history.type==="proveedor"){return/*#__PURE__*/_react["default"].createElement("div",null,"Loading...")}var displayLabel=history.type==="proveedor"?((_col$label=col.label)===null||_col$label===void 0||(_col$label=_col$label.props)===null||_col$label===void 0?void 0:_col$label.name)==="toggleAllCheckbox"?col.label:translatedLabel||"".concat(this.props.tableName,".").concat(((_this$props$col$label2=this.props.col.label)===null||_this$props$col$label2===void 0||(_this$props$col$label2=_this$props$col$label2.props)===null||_this$props$col$label2===void 0?void 0:_this$props$col$label2.children)||" "):col.label;var _this$state2=this.state,sortDir=_this$state2.sortDir,searchActive=_this$state2.searchActive;var showOrder=typeof col.orderable!=="undefined"?col.orderable:orderable;var style={minWidth:col.width};var cn=["header position-relative w-100",col.type,col.name+"-header",col.classes,classes];var cnSearch=["cursor-pointer"];if(!searchActive)cnSearch.push("text-muted");var hClasses=["align-middle",col.name];if(headerClasses)hClasses.push(headerClasses);return/*#__PURE__*/_react["default"].createElement("th",{className:hClasses.join(" "),scope:"col"},/*#__PURE__*/_react["default"].createElement("div",{className:"d-flex align-items-center"},/*#__PURE__*/_react["default"].createElement("div",{className:cn.join(" "),style:style},/*#__PURE__*/_react["default"].createElement("span",null,displayLabel)),/*#__PURE__*/_react["default"].createElement("div",{className:"d-flex"},col.filter&&/*#__PURE__*/_react["default"].createElement("div",{className:"ps-2 mt-1 drop"+filterPos},/*#__PURE__*/_react["default"].createElement(_dropdownContainer["default"],{name:col.name+"DropdownFilter",label:/*#__PURE__*/_react["default"].createElement(_icons["default"],{icon:icons.search,className:cnSearch.join(" ")}),dropdownClasses:"dropdown-menu-end p-0",dropdownClass:false},searchActive&&/*#__PURE__*/_react["default"].createElement(_action["default"],{name:col.name+"Clear",classes:"btn-link btn-sm p-0",style:{top:5,position:"absolute",right:8,zIndex:4}},/*#__PURE__*/_react["default"].createElement(_icons["default"],{icon:icons.clear,classes:"text-danger"})),/*#__PURE__*/_react["default"].createElement(_fields["default"][col.filter.type]||_fields["default"].Field,col.filter))),showOrder&&/*#__PURE__*/_react["default"].createElement("div",{className:"ps-2 text-muted",style:{fontSize:10}},/*#__PURE__*/_react["default"].createElement("span",{onClick:function onClick(e){return _this3.sort("DESC",e)}},/*#__PURE__*/_react["default"].createElement(_icons["default"],{icon:icons.caretUp,className:"cursor-pointer "+(sortDir==="DESC"?"text-body":"")})),/*#__PURE__*/_react["default"].createElement("span",{onClick:function onClick(e){return _this3.sort("ASC",e)}},/*#__PURE__*/_react["default"].createElement(_icons["default"],{icon:icons.caretDown,className:"cursor-pointer "+(sortDir==="ASC"?"text-body":"")}))))))}}])}(_react["default"].Component);/**
* Clase base para la tabla.
*
* Este componente es responsable de renderizar una tabla a partir de un conjunto de datos proporcionado.
* También proporciona funcionalidad para ordenar, filtrar y manejar eventos.
*
* @class Table
* @extends {Component}
*/_defineProperty(HeaderCell,"jsClass","HeaderColumn");_defineProperty(HeaderCell,"defaultProps",{filterPos:"down"});var Table=exports["default"]=/*#__PURE__*/function(_Component){function Table(_props){var _this4;_classCallCheck(this,Table);_this4=_callSuper(this,Table,[_props]);_defineProperty(_this4,"state",{});// Events
/**
* Handles sorting event.
*
* @method onSort
* @param {Object} orderBy - An object representing the column to be sorted.
* @memberof Table
*/_defineProperty(_this4,"onSort",function(orderBy){var onChange=_this4.props.onChange;_this4.setState({orderBy:orderBy&&Object.keys(orderBy).pop()});if(typeof onChange==="function")onChange({orderBy:orderBy})});/**
* Handles cell events.
*
* @method onEventCell
* @param {Object} dataRaw - Raw data of the event.
* @memberof Table
*/_defineProperty(_this4,"onEventCell",function(dataRaw){var data={};for(var event in dataRaw){data[event.replace(/\.cell$/,"")]=dataRaw[event]}_eventHandler["default"].dispatch(_this4.props.name,data)});//------
/**
* Maps HeaderCell components for each column.
*
* @method mapHeaderCell
* @param {Array} args - The column properties.
* @param {number} i - The index of the column.
* @returns {React.Component} - A HeaderCell component.
* @memberof Table
*/_defineProperty(_this4,"mapHeaderCell",function(_ref7,i){var _ref8=_slicedToArray(_ref7,2),key=_ref8[0],col=_ref8[1];var _this4$props=_this4.props,colClasses=_this4$props.colClasses,headerClasses=_this4$props.headerClasses,icons=_this4$props.icons,orderable=_this4$props.orderable,name=_this4$props.name,history=_this4$props.history;var orderBy=_this4.state.orderBy;col.name=col.name||key;col.label=_this4.jsonRender.buildContent(col.label);var props={col:col,orderable:orderable,classes:colClasses,headerClasses:headerClasses,icons:icons,onSort:_this4.onSort,sort:orderBy===col.name,tableName:name,history:history};return/*#__PURE__*/_react["default"].createElement(HeaderCell,_extends({key:i+"-"+col.name},props))});/**
* Provides properties for a row.
*
* @method rowProps
* @param {Object} rowOrColumn - The data of the row or column.
* @param {number} i - The index of the row or column.
* @returns {Object} - Properties for the row.
* @memberof Table
*/_defineProperty(_this4,"rowProps",function(rowOrColumn,i){var _this4$props2=_this4.props,name=_this4$props2.name,mapRowsFunc=_this4$props2.mapRows,vertical=_this4$props2.vertical;var id=vertical?rowOrColumn.name:rowOrColumn.id;var rowKey=!!id||id===0?i+"-"+id:i;var cnRow=["row-"+_this4.props.name,"row-"+(!!id||id===0?id:i)];var _ref9=typeof mapRowsFunc==="function"&&mapRowsFunc(name,rowOrColumn,i)||{},rowClasses=_ref9.classes,rowProps=_objectWithoutProperties(_ref9,_excluded);if(rowClasses)cnRow.push(rowClasses);return _objectSpread(_objectSpread({key:rowKey},rowProps),{},{className:cnRow.join(" ")})});/**
* Maps cell components for each cell in a row.
*
* @method mapCell
* @param {Object} rowData - The data of the row.
* @param {Object} col - The properties of the column.
* @param {number} i - The index of the cell.
* @returns {React.Component} - A cell component.
* @memberof Table
*/_defineProperty(_this4,"mapCell",function(rowData,col,i){var _this4$props3=_this4.props,mapCellsFunc=_this4$props3.mapCells,name=_this4$props3.name,colClasses=_this4$props3.colClasses,vertical=_this4$props3.vertical;var colName=col.name;var cellAttrs={className:["cell",col.type,col.name+"-cell",col.classes,colClasses],style:vertical?_objectSpread({minWidth:col.width},col.style):col.style,title:_typeof(rowData[colName])!=="object"?rowData[colName]:undefined};var mutation=typeof mapCellsFunc==="function"&&mapCellsFunc(name,col.name,rowData,cellAttrs)||{};var formatOptions;if(col.formatOpts){formatOptions=_objectSpread(_objectSpread({},col.formatOpts),mutation)}else{if(mutation.classes){var classes=mutation.classes;delete mutation.classes;cellAttrs.className.push(classes)}(0,_deepMerge["default"])(cellAttrs,mutation)}cellAttrs.className=cellAttrs.className.flat().join(" ");var formater=FORMATS[col.format]||function(raw){return raw};var cellData=typeof rowData[col.name]!=="undefined"?rowData[col.name]:true;var cell=/*#__PURE__*/_react["default"].createElement("div",cellAttrs," ",formater(cellData,formatOptions,rowData,_this4.jsonRender,colName)," ");return colName==="id"?/*#__PURE__*/_react["default"].createElement("th",{key:i+"-"+colName,className:colName,scope:"row"},cell):/*#__PURE__*/_react["default"].createElement("td",{key:i+"-"+colName,className:vertical?[colName,"row-"+(i-1)].join(" "):colName},cell)});_this4.jsonRender=new _jsonRender["default"](_props,_props.mutations);_this4.t=_i18next["default"].t.bind(_i18next["default"]);_this4.state={i18nReady:false};return _this4}/**
* Subscribes to the events when the component is mounted.
*
* @method componentDidMount
* @memberof Table
*/_inherits(Table,_Component);return _createClass(Table,[{key:"componentDidMount",value:function componentDidMount(){var _this5=this;this.events=[];Object.entries(this.props.columns).forEach(function(_ref10){var _ref11=_slicedToArray(_ref10,2),key=_ref11[0],col=_ref11[1];// TODO: mejorar esto, filtrar el componente dropdown
// buscar una forma de que solo los componentes field carguen evento
if(col.format==="component"&&col.formatOpts.component!=="DropdownButtonContainer"){var event=[col.formatOpts.name+".cell",_this5.onEventCell];_this5.events.push(event);_eventHandler["default"].subscribe.apply(_eventHandler["default"],event)}});var storedLang=localStorage.getItem("lang")||"es";if(!_i18next["default"].isInitialized){_i18next["default"].init({lng:storedLang,fallbackLng:storedLang,resources:{en:{global:global_en},es:{global:global_es}},interpolation:{escapeValue:false},react:{useSuspense:false}}).then(function(){_this5.forceUpdate()})}else{_i18next["default"].changeLanguage(storedLang)}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this$props$history,_this6=this;var newLang=(_this$props$history=this.props.history)===null||_this$props$history===void 0?void 0:_this$props$history.lang;console.log("aaaaasss-----");if(newLang&&newLang!==_i18next["default"].language&&this.props.history.type==="proveedor"){localStorage.setItem("lang",newLang);_i18next["default"].changeLanguage(newLang).then(function(){_this6.forceUpdate()})}}/**
* Unsubscribes from the events when the component is unmounted.
*
* @method componentWillUnmount
* @memberof Table
*/},{key:"componentWillUnmount",value:function componentWillUnmount(){var _iterator3=_createForOfIteratorHelper(this.events),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _step3$value=_slicedToArray(_step3.value,1),eventName=_step3$value[0];_eventHandler["default"].unsubscribe(eventName)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}},{key:"content",value:/**
* Renders the table content.
*
* @method content
* @param {Array} children - Optional children to be rendered in the table.
* @returns {React.Component} - The rendered table.
* @memberof Table
*/function content(){var _this7=this;var children=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this.props.children;var _this$props3=this.props,data=_this$props3.data,columns=_this$props3.columns,tableClasses=_this$props3.tableClasses,hover=_this$props3.hover,striped=_this$props3.striped,vertical=_this$props3.vertical,history=_this$props3.history;// Definir encabezado y pie de página si están presentes
var header,footer;if(Array.isArray(children)){var _children=_slicedToArray(children,2);header=_children[0];footer=_children[1]}// Construcción de las clases CSS para la tabla
var cn=["table"];if(striped)cn.push("table-striped");if(hover)cn.push("table-hover");if(tableClasses)cn.push(tableClasses);if(vertical)cn.push("vertical");// Inicialización de los datos de la tabla según la disposición (vertical/horizontal)
var tableData=[];// Procesamiento de los datos para construir la estructura de la tabla
data.forEach(function(row,i){Object.entries(columns).forEach(function(_ref12,j){var _ref13=_slicedToArray(_ref12,2),key=_ref13[0],col=_ref13[1];var column=col.name?col:_objectSpread({name:key},col);if(!vertical){// Si la tabla no es vertical (es decir, es horizontal)
// Si no se ha inicializado el registro de la tabla (fila) en la posición i, se inicializa
if(!tableData[i])tableData[i]={cells:[],data:row};// Se mapea la celda en la posición j de la fila i, pasándole los datos de la fila y la columna
tableData[i].cells[j]=_this7.mapCell(row,column,j)}else{// Si la tabla es vertical
// Si no se ha inicializado el registro de la tabla (columna) en la posición j, se inicializa
if(!tableData[j])tableData[j]={cells:[],data:column};// Para la primera fila de cada columna (i === 0), se mapea la celda de encabezado
if(i===0)tableData[j].cells[0]=_this7.mapHeaderCell([key,column],0);// Para las filas restantes de cada columna, se mapea la celda correspondiente
var k=i+1;tableData[j].cells[k]=_this7.mapCell(row,column,k)}})});if(!_i18next["default"].isInitialized&&history.type==="proveedor"){return/*#__PURE__*/_react["default"].createElement("div",null,"Loading...");// Or any other loading spinner or placeholder
}// Renderización de la tabla con las estructuras de encabezado, cuerpo y pie de página
return/*#__PURE__*/_react["default"].createElement("table",{className:cn.join(" ")},/*#__PURE__*/_react["default"].createElement("thead",null,header&&/*#__PURE__*/_react["default"].createElement("tr",null,/*#__PURE__*/_react["default"].createElement("td",{colSpan:"1000"},/*#__PURE__*/_react["default"].createElement("div",null,header))),!vertical&&/*#__PURE__*/_react["default"].createElement("tr",null,Object.entries(columns).map(this.mapHeaderCell))),/*#__PURE__*/_react["default"].createElement("tbody",null,tableData.map(function(_ref14,i){var cells=_ref14.cells,data=_ref14.data;return/*#__PURE__*/_react["default"].createElement("tr",_this7.rowProps(data,i),cells)})),footer&&/*#__PURE__*/_react["default"].createElement("tfoot",null,/*#__PURE__*/_react["default"].createElement("tr",null,/*#__PURE__*/_react["default"].createElement("td",{colSpan:"1000"},/*#__PURE__*/_react["default"].createElement("div",null,footer)))))}}])}(_component["default"]);_defineProperty(Table,"jsClass","Table");_defineProperty(Table,"defaultProps",_objectSpread(_objectSpread({},_component["default"].defaultProps),{},{data:[],striped:true,hover:true,icons:{caretUp:"caret-up",caretDown:"caret-down",search:"search",clear:"close"},vertical:false}));
//# sourceMappingURL=table.js.map