Search code examples
formattertabulator

Adding bottomCalcFormatter stops tabulator from generating


Tabulator doesn't accept bottomCalcFormatter in column definition

My Tabulator table works pretty well and I can successfully add bottomCalc and formatter, but I can't seem to add bottomCalcFormatter. so I have a column of money with formatter:"money" and a bottomCalc:"sum" but the sum is not formatted as money. If I try to add bottomCalcFormatter:"money" the table doesn't render.

This renders although the sum is not in a "money" format:

    columns:[
        {title:0, titleFormatter:closeButton},
        {title:"Revision#", field:"revNum", sorter:"number", align:"center", formatter:revisionDoc, formatterParams:{urlField:"hyperlink"}},
        {formatter:pdfIcon, align:"center", formatterParams:{urlField:"hyperlink"}},
        {title:"TO Amount", field:"toAmount", sorter:"number", formatter:"money", align:"right", bottomCalc:"sum"},
        {title:"Adjusted", field:"adjusted", align:"right", formatter:"money", bottomCalc:"sum"},
                ],

This table does not render at all:

    columns:[
        {title:0, titleFormatter:closeButton},
        {title:"Revision#", field:"revNum", sorter:"number", align:"center", formatter:revisionDoc, formatterParams:{urlField:"hyperlink"}},
        {formatter:pdfIcon, align:"center", formatterParams:{urlField:"hyperlink"}},
        {title:"TO Amount", field:"toAmount", sorter:"number", formatter:"money", align:"right", bottomCalc:"sum"},
        {title:"Adjusted", field:"adjusted", align:"right", formatter:"money", bottomCalc:"sum", bottomCalcFormatter:"money"},
                ],

Solution

  • I just checked the Tabulator.js there is an additional parameter

    bottomCalcFormatterParams

    Check this code it sums currency and the calculation shows $ sign

    <!DOCTYPE html>
    <html lang="en">
    <head><link href="https://unpkg.com/[email protected]/dist/css/tabulator.min.css" rel="stylesheet"></head>
    <body>
    <div id="example-table"></div>
    <script
      src="https://code.jquery.com/jquery-3.4.0.min.js"
      integrity="sha256-BJeo0qm959uMBGb65z40ejJYGSgR7REI4+CW1fNKwOg="
      crossorigin="anonymous"></script>
    <script type="text/javascript" src="https://unpkg.com/[email protected]/dist/js/tabulator.min.js"></script>
    
    <script>
      const tabledata = [
        {id: 1, name: "Oli Bob", money: "12", col: "red", dob: ""},
        {id: 2, name: "Mary May", money: "1", col: "blue", dob: "14/05/1982"},
        {id: 3, name: "Christine Lobowski", money: "42", col: "green", dob: "22/05/1982"},
        {id: 4, name: "Brendon Philips", money: "125", col: "orange", dob: "01/08/1980"},
        {id: 5, name: "Margret Marmajuke", money: "16", col: "yellow", dob: "31/01/1999"},
      ];
    
      const table = new Tabulator("#example-table", {
        height: 205, // set height of table (in CSS or here), this enables the Virtual DOM and improves render speed dramatically (can be any valid css height value)
        data: tabledata, //assign data to table
        layout: "fitColumns", //fit columns to width of table (optional)
        columns: [ //Define Table Columns
          {title: "Name", field: "name", width: 150},
          {
            title: "money",
            field: "money",
            align: "left",
            formatter: "money",
            bottomCalc: "sum",
            bottomCalcParams: {
              precision: 3
            },
            bottomCalcFormatter: "money",
            bottomCalcFormatterParams:  {
              decimal: ".",
              thousand: ",",
              symbol: "$"
            },
            formatterParams: {
              decimal: ".",
              thousand: ",",
              symbol: "$"
            }
    
    
          },
          {title: "Favourite Color", field: "col"},
          {title: "Date Of Birth", field: "dob", sorter: "date", align: "center"},
        ]
      });
    
    
    </script>
    </body>
    </html>