dynamic-table-builder
Version:
A dynamic table library with backend-driven configuration
3 lines (2 loc) • 14.5 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("antd"),r=require("dayjs"),n=require("@ant-design/icons");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var l=a(e),i=a(r),u=o(n),s=function(){return s=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},s.apply(this,arguments)};function c(e,t,r,n){return new(r||(r=Promise))(function(a,o){function l(e){try{u(n.next(e))}catch(e){o(e)}}function i(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(l,i)}u((n=n.apply(e,t||[])).next())})}function f(e,t){var r,n,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return l.next=i(0),l.throw=i(1),l.return=i(2),"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(i){return function(u){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(o=0)),o;)try{if(r=1,n&&(a=2&i[0]?n.return:i[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,i[1])).done)return a;switch(n=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,n=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=o.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],n=0}finally{r=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}"function"==typeof SuppressedError&&SuppressedError;var d=function(e,t){if(void 0===t&&(t="internal"),"external"===t)return l.default.createElement("img",{src:e,alt:"icon",className:"button-icon"});var r=u[e];return r?l.default.createElement(r):null},p=t.DatePicker.RangePicker,v=function(e){var t=i.default();switch(e){case"today":default:return t;case"thisWeekStart":return t.startOf("week");case"thisMonthStart":return t.startOf("month");case"lastQuarterStart":return t.subtract(3,"month").startOf("month")}};exports.DynamicTable=function(r){var a,o,u,y,g,m,b,h,S=r.config,k=r.onDataFetch,w=r.onExport,E=r.defaultFilters,x=r.className,C=r.style,z=S.tableConfig,N=S.data,O=S.columns,F=S.pagination,I=S.tableFeatures,R=function(){var e,t={};return null===(e=z.globalFilters)||void 0===e||e.forEach(function(e){void 0!==e.defaultValue&&(t[e.key]=e.defaultValue)}),E&&Object.keys(E).forEach(function(e){var r;void 0!==(null===(r=E[e])||void 0===r?void 0:r.defaultValue)&&(t[e]=E[e].defaultValue)}),t},j=function(t){var r=t.storageKey,n=t.enabled,a=t.config,o=t.initialFilters,l=function(){if(!n)return{filters:o||{},pagination:{current:1,pageSize:10,total:0},sortInfo:{},selectedRows:[]};try{var e=sessionStorage.getItem(r);if(e){var t=JSON.parse(e);return s(s({},t),{filters:s(s({},o||{}),t.filters)})}}catch(e){console.error("Error loading table state:",e)}return{filters:o||{},pagination:{current:1,pageSize:10,total:0},sortInfo:{},selectedRows:[]}},i=e.useState(l().filters),u=i[0],c=i[1],f=e.useState(l().pagination),d=f[0],p=f[1],v=e.useState(l().sortInfo),y=v[0],g=v[1],m=e.useState(l().selectedRows),b=m[0],h=m[1],S=e.useCallback(function(){if(n)try{var e={filters:(null==a?void 0:a.persistFilters)?u:{},pagination:(null==a?void 0:a.persistPagination)?d:{current:1,pageSize:10,total:0},sortInfo:(null==a?void 0:a.persistSort)?y:{},selectedRows:b};sessionStorage.setItem(r,JSON.stringify(e))}catch(e){console.error("Error saving table state:",e)}},[n,a,u,d,y,b,r]),k=e.useCallback(function(){if(n)try{var e=sessionStorage.getItem(r);if(e){var t=JSON.parse(e);(null==a?void 0:a.persistFilters)&&c(t.filters),(null==a?void 0:a.persistPagination)&&p(t.pagination),(null==a?void 0:a.persistSort)&&g(t.sortInfo),h(t.selectedRows)}}catch(e){console.error("Error loading table state:",e)}},[n,a,r]);return{filters:u,setFilters:c,pagination:d,setPagination:p,sortInfo:y,setSortInfo:g,selectedRows:b,setSelectedRows:h,saveState:S,loadState:k}}({storageKey:(null===(a=null==I?void 0:I.stateManagement)||void 0===a?void 0:a.storageKey)||"dynamic_table_state",enabled:(null===(o=null==I?void 0:I.stateManagement)||void 0===o?void 0:o.enabled)||!1,config:null==I?void 0:I.stateManagement,initialFilters:R()}),P=j.filters,M=j.setFilters,T=j.sortInfo,A=j.setSortInfo,B=j.selectedRows,D=j.setSelectedRows,K=j.loadState,L=j.saveState,Y=e.useState([]),_=Y[0],q=Y[1],J=e.useState(!1),V=J[0],U=J[1],W=e.useState(null),Q=W[0],H=W[1],G=e.useState({pageNumber:1,pageSize:(null==F?void 0:F.pageSize)||z.defaultPageSize||10,total:(null==F?void 0:F.totalCount)||0}),X=G[0],Z=G[1],$=function(e){return c(void 0,void 0,void 0,function(){var t,r,n,a,o,l;return f(this,function(i){switch(i.label){case 0:if(!k)return[2];U(!0),i.label=1;case 1:return i.trys.push([1,3,4,5]),t={pageSize:(null===(a=null==e?void 0:e.pagination)||void 0===a?void 0:a.pageSize)||X.pageSize,pageNumber:(null===(o=null==e?void 0:e.pagination)||void 0===o?void 0:o.pageNumber)||X.pageNumber},[4,k({pagination:t,filters:(null==e?void 0:e.filters)||P,sorter:null==e?void 0:e.sorter})];case 2:return(null==(r=i.sent())?void 0:r.data)&&(q(r.data),void 0!==(null===(l=r.pagination)||void 0===l?void 0:l.totalCount)&&Z(function(e){return s(s({},e),{total:r.pagination.totalCount})}),L()),[3,5];case 3:return n=i.sent(),console.error("Error fetching data:",n),H(n instanceof Error?n.message:"Failed to fetch data"),[3,5];case 4:return U(!1),[7];case 5:return[2]}})})},ee=(m=$,b=500,h=e.useRef(),e.useCallback(function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];h.current&&clearTimeout(h.current),h.current=setTimeout(function(){m.apply(void 0,e)},b)},[m,b]));e.useEffect(function(){Array.isArray(N)&&q(N)},[N]),e.useEffect(function(){k&&$({pagination:{pageNumber:1,pageSize:z.defaultPageSize||10},filters:R()})},[]);var te=function(){return c(void 0,void 0,void 0,function(){var e,r,n,a,o,l,i;return f(this,function(u){switch(u.label){case 0:if(!w)return t.message.error("Export functionality is not configured"),[2];U(!0),u.label=1;case 1:return u.trys.push([1,3,4,5]),[4,w({filters:P,sort:T}).catch(function(e){throw new Error((null==e?void 0:e.message)||"Export request failed")})];case 2:if((e=u.sent())instanceof Blob){if(0===e.size)throw new Error("Received empty file");r=window.URL.createObjectURL(e),(n=document.createElement("a")).href=r,n.setAttribute("download",z.exportFileName||"export.csv"),document.body.appendChild(n),n.click(),n.remove(),window.URL.revokeObjectURL(r),t.message.success((null===(l=z.messages)||void 0===l?void 0:l.exportSuccess)||"Export successful")}else{if(!1===(null==e?void 0:e.success))throw new Error(e.message||"Export failed");t.message.success((null===(i=z.messages)||void 0===i?void 0:i.exportSuccess)||"Export successful")}return[3,5];case 3:return a=u.sent(),o=a instanceof Error?a.message:"Export failed",t.message.error(o),[3,5];case 4:return U(!1),[7];case 5:return[2]}})})},re=function(e,t){var r,n=s(s({},P),((r={})[e]=t,r));Object.keys(n).forEach(function(e){void 0!==n[e]&&null!==n[e]&&""!==n[e]||delete n[e]}),M(n),ee()},ne=function(e,t){var r,n=s(s({},P),((r={})[e]=t,r));M(n),$({pagination:{pageSize:X.pageSize,pageNumber:1},filters:n})},ae=function(){M({}),Z(function(e){return s(s({},e),{pageNumber:1})}),$({pagination:{pageSize:X.pageSize,pageNumber:1},filters:{}})},oe=e.useMemo(function(){return(null==O?void 0:O.map(function(e){var r={title:e.title,dataIndex:e.dataIndex||e.key,key:e.key,width:e.width,fixed:e.fixed,filteredValue:e.filter?P[e.key]?[P[e.key]]:[]:null,sorter:e.sortable||!1,onFilter:e.filter?function(t,r){var n=r[e.key];return!!n&&(Array.isArray(t)?t.some(function(e){return n.toString().toLowerCase().includes(e.toLowerCase())}):n.toString().toLowerCase().includes(t.toString().toLowerCase()))}:void 0};if(e.filter&&(r.filterDropdown=function(r){var n,a,o=r.setSelectedKeys,i=r.selectedKeys,u=r.confirm,s=r.clearFilters;return l.default.createElement("div",{style:{padding:8}},"search"===(null===(n=e.filter)||void 0===n?void 0:n.type)&&l.default.createElement(t.Input,{placeholder:e.filter.placeholder,value:i[0],onChange:function(e){var t=e.target.value;o(t?[t]:[])},onPressEnter:function(){u(),ne(e.key,i[0])},style:{width:188,marginBottom:8,display:"block"}}),"select"===(null===(a=e.filter)||void 0===a?void 0:a.type)&&l.default.createElement(t.Select,{mode:e.filter.mode,style:{width:188,marginBottom:8,display:"block"},placeholder:e.filter.placeholder,options:e.filter.options,value:e.filter.mode?i:i[0],onChange:function(e){o(Array.isArray(e)?e:e?[e]:[])},allowClear:!0,styles:{popup:{root:{minWidth:"188px"}}}}),l.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:"8px"}},l.default.createElement(t.Button,{type:"primary",onClick:function(){u(),ne(e.key,i[0])},size:"small",style:{flex:1}},"Filter"),l.default.createElement(t.Button,{onClick:function(){null==s||s(),ne(e.key,void 0)},size:"small",style:{flex:1}},"Reset")))},r.filterIcon=function(e){return l.default.createElement(n.SearchOutlined,{style:{color:e?"#1890ff":void 0}})}),e.render){var a=e.render;r.render=function(e,t){var r,n,o;switch(a.type){case"link":var u=null===(r=a.urlTemplate)||void 0===r?void 0:r.replace(/{(\w+)}/g,function(e,r){return t[r]});return l.default.createElement("a",{href:u,style:a.style,target:"external"===a.urlType?"_blank":"_self",rel:"noopener noreferrer"},e);case"status":var s=(null===(n=a.colorMapping)||void 0===n?void 0:n[e])||"default",c=(null===(o=a.textMapping)||void 0===o?void 0:o[e])||e;return l.default.createElement("span",{className:"status-tag ".concat(s)},c);case"datetime":return e?i.default(e).format(a.format||"DD-MM-YYYY HH:mm:ss"):"";case"number":return null!=e?Number(e).toFixed(a.format?parseInt(a.format):2):"";case"array":return(null==e?void 0:e.join(", "))||"";default:return e}}}return r}))||[]},[O,P]);e.useEffect(function(){K()},[]);return l.default.createElement("div",{className:"dyn-table-container ".concat(x||""),style:C},l.default.createElement("div",{className:"dyn-table-header"},z.title&&l.default.createElement("h2",{className:"dyn-table-title"},z.title)),l.default.createElement("div",{className:"dyn-table-filters"},function(){var e;return l.default.createElement("div",{className:"dyn-table-global-filters-container"},l.default.createElement(t.Space,{className:"dyn-table-global-filters",size:"middle"},null===(e=z.globalFilters)||void 0===e?void 0:e.map(function(e){var r;switch(e.type){case"dateRange":var n=P[e.key]?[P[e.key][0]?i.default(P[e.key][0]):null,P[e.key][1]?i.default(P[e.key][1]):null]:null,a=null===(r=e.presets)||void 0===r?void 0:r.map(function(e){var t=e.value,r=t[0],n=t[1];return{label:e.label,value:["string"==typeof r?v(r):i.default(r),"string"==typeof n?v(n):i.default(n)]}});return l.default.createElement(p,{key:e.key,format:e.format||"DD-MM-YYYY",showTime:e.showTime,presets:a,value:n,onChange:function(t){t&&t[0]&&t[1]?re(e.key,[t[0],t[1]]):re(e.key,null)},allowEmpty:[!0,!0],disabledDate:function(e){return e&&e>i.default().endOf("day")}});case"select":return l.default.createElement(t.Select,{key:e.key,mode:e.mode,placeholder:e.placeholder,options:e.options,value:P[e.key],onChange:function(t){return re(e.key,t)},style:{minWidth:120},allowClear:!0});case"search":return l.default.createElement(t.Input,{key:e.key,placeholder:e.placeholder,value:P[e.key],onChange:function(t){return re(e.key,t.target.value)},prefix:e.icon&&d(e.icon,e.iconSource),style:{minWidth:200},allowClear:!0});default:return null}})))}()),(null!==(y=null===(u=z.actionButtons)||void 0===u?void 0:u.length)&&void 0!==y?y:0)>0&&l.default.createElement("div",{className:"dyn-table-actions-container"},function(){var e,r,n=(null===(e=z.actionButtons)||void 0===e?void 0:e.filter(function(e){return"left"===e.position||!e.position}))||[],a=(null===(r=z.actionButtons)||void 0===r?void 0:r.filter(function(e){return"right"===e.position}))||[],o=Object.keys(P).length>0;return l.default.createElement("div",{className:"dyn-table-actions"},l.default.createElement(t.Space,{className:"dyn-table-left-buttons"},n.map(function(e){return l.default.createElement(t.Button,{key:e.key,type:e.type||"default",icon:d(e.icon||"",e.iconSource),disabled:"clearFilters"===e.key?!o:!e.enabled,onClick:e.onClick||function(){"export"===e.key?te():"refresh"===e.key?$():"clearFilters"===e.key&&ae()}},e.title)})),l.default.createElement(t.Space,{className:"dyn-table-right-buttons"},a.map(function(e){return l.default.createElement(t.Button,{key:e.key,type:e.type||"default",icon:d(e.icon||"",e.iconSource),disabled:"clearFilters"===e.key?!o:!e.enabled,onClick:e.onClick||function(){"export"===e.key?te():"refresh"===e.key?$():"clearFilters"===e.key&&ae()}},e.title)})))}()),l.default.createElement(t.Table,{dataSource:_,columns:oe,loading:V,rowKey:(null==I?void 0:I.rowKey)||function(e,t){return String(t)},onChange:function(e,t,r,n){var a={pageNumber:e.current||1,pageSize:e.pageSize||z.defaultPageSize||10,total:X.total};Z(a);var o=Array.isArray(r)?r[0]:r;A({field:"string"==typeof o.field?o.field:void 0,order:null===o.order?void 0:o.order}),$({pagination:{pageSize:a.pageSize,pageNumber:a.pageNumber}})},pagination:function(){if(!F)return!1;var e=F.pageSizeOptions,t=F.showQuickJumper,r=F.showTotal,n=F.position,a=F.showSizeChanger,o=F.totalCount;return{current:X.pageNumber,pageSize:X.pageSize,total:o||X.total,pageSizeOptions:e,showQuickJumper:t,showSizeChanger:null==a||a,position:n||["bottomRight"],showTotal:r?function(e){return"Total ".concat(e," items")}:void 0}}(),rowSelection:(null===(g=null==I?void 0:I.rowSelection)||void 0===g?void 0:g.enabled)?{type:I.rowSelection.type,selectedRowKeys:B,onChange:function(e){return D(e)}}:void 0,scroll:{x:"max-content"}}),Q&&l.default.createElement(t.Alert,{message:"Error",description:Q,type:"error",showIcon:!0}))};
//# sourceMappingURL=index.js.map
;