/*! © SpryMedia Ltd - datatables.net/license */ import $ from 'jquery'; import DataTable from 'datatables.net'; /** * NOTE - As of DataTables 1.12, DataTables has a built in date / time renderer * which should be used in place of this renderer. See * [the manual](https://datatables.net/manual/data/renderers#Date-and-time-helpers) * for details. * * Date / time formats often from back from server APIs in a format that you * don't wish to display to your end users (ISO8601 for example). This rendering * helper can be used to transform any source date / time format into something * which can be easily understood by your users when reading the table, and also * by DataTables for sorting the table. * * The [MomentJS library](http://momentjs.com/) is used to accomplish this and * you simply need to tell it which format to transfer from, to and specify a * locale if required. * * This function should be used with the `dt-init columns.render` configuration * option of DataTables. * * It accepts one, two or three parameters: * * * `DataTable.render.moment( to );` * * `DataTable.render.moment( from, to );` * * `DataTable.render.moment( from, to, locale );` * * Where: * * * `to` - the format that will be displayed to the end user * * `from` - the format that is supplied in the data (the default is ISO8601 - * `YYYY-MM-DD`) * * `locale` - the locale which MomentJS should use - the default is `en` * (English). * * @name datetime * @summary Convert date / time source data into one suitable for display * @author [Allan Jardine](http://datatables.net) * @requires DataTables 1.10+, Moment.js 1.7+ * * @example * // Convert ISO8601 dates into a simple human readable format * $('#example').DataTable( { * columnDefs: [ { * targets: 1, * render: DataTable.render.moment( 'Do MMM YYYY' ) * } ] * } ); * * @example * // Specify a source format - in this case a unix timestamp * $('#example').DataTable( { * columnDefs: [ { * targets: 2, * render: DataTable.render.moment( 'X', 'Do MMM YY' ) * } ] * } ); * * @example * // Specify a source format and locale * $('#example').DataTable( { * columnDefs: [ { * targets: 2, * render: DataTable.render.moment( 'YYYY/MM/DD', 'Do MMM YY', 'fr' ) * } ] * } ); */ DataTable.render.moment = function (from, to, locale) { // Argument shifting if (arguments.length === 1) { to = from; from = 'YYYY-MM-DD'; } return function (d, type, row) { if (!d) { return type === 'sort' || type === 'type' ? 0 : d; } var m = window.moment(d, from, locale, true); // Order and type get a number value from Moment, everything else // sees the rendered value return m.format(type === 'sort' || type === 'type' ? 'x' : to); }; }; export default DateTime;