@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
201 lines (197 loc) • 6.1 kB
JavaScript
const require_chunk = require('./chunk-BE-pF4vm.js');
let _progress_kendo_csv = require("@progress/kendo-csv");
//#region ../src/csv/csv-data-provider.js
(function($, kendo) {
const extend = $.extend;
const CSVDataProvider = kendo.Class.extend({
init: function(options) {
this.options = options;
const dataSource = options.dataSource;
if (dataSource instanceof kendo.data.DataSource) {
if (!dataSource.filter()) {
dataSource.options.filter = undefined;
}
this.dataSource = new dataSource.constructor(extend({}, dataSource.options, {
page: options.allPages ? 0 : dataSource.page(),
filter: dataSource.filter(),
pageSize: options.allPages ? dataSource.total() : dataSource.pageSize() || dataSource.total(),
sort: dataSource.sort(),
group: dataSource.group(),
aggregate: dataSource.aggregate()
}));
const data = dataSource.data();
if (data.length > 0) {
this.dataSource._data = data;
const transport = this.dataSource.transport;
if (dataSource._isServerGrouped && dataSource._isServerGrouped() && transport.options && transport.options.data) {
transport.options.data = null;
}
}
} else {
this.dataSource = kendo.data.DataSource.create(dataSource);
}
},
export: function() {
return $.Deferred((function(d) {
this.dataSource.fetch().then((function() {
const data = this.dataSource.view();
let csvData = data;
if (csvData.length && csvData[0] && csvData[0].field !== undefined && csvData[0].items !== undefined) {
csvData = {
data: csvData,
total: csvData.length
};
}
d.resolve(csvData);
}).bind(this));
}).bind(this)).promise();
}
});
kendo.CSVDataProvider = CSVDataProvider;
})(kendo.jQuery, kendo);
//#endregion
//#region ../src/csv/mixins.js
(function($, kendo) {
function flattenColumns(columns) {
let result = [];
for (let i = 0; i < columns.length; i++) {
if (columns[i].columns?.length) {
result = result.concat(flattenColumns(columns[i].columns));
} else {
result.push(columns[i]);
}
}
return result;
}
kendo.CSVMixin = {
extend: function(proto) {
proto.events.push("csvExport");
proto.options.csv = $.extend(proto.options.csv, this.options);
proto.saveAsCSV = this.saveAsCSV;
proto.toCSVString = this.toCSVString;
proto._renderCSVData = this._renderCSVData;
proto._saveCSVData = this._saveCSVData;
proto._saveCSVToFile = this._saveCSVToFile;
proto._getCSVColumnsInfo = this._getCSVColumnsInfo;
},
options: {
proxyURL: "",
allPages: false,
filterable: false,
fileName: "Export.csv",
delimiter: ",",
lineSeparator: "\r\n",
preventFormulaInjection: true,
maxCellLength: 32767,
maxRows: 1e6,
maxColumns: 1e3,
includeUTF8BOM: false
},
_getCSVColumnsInfo: function() {
const csv = this.options.csv || {};
const columns = flattenColumns(this.columns || []);
const visibleCols = columns.filter(function(c) {
return !c.hidden && !(c.exportable === false || c.exportable?.csv === false);
});
return {
keys: csv.keys || visibleCols.map(function(c) {
return c.field || "";
}),
names: csv.names || visibleCols.map(function(c) {
return c.title || c.field || "";
})
};
},
_saveCSVToFile: function(csvString, names) {
const csv = this.options.csv || {};
const blob = new Blob([csvString], { type: kendo.csv.getCSVMimeType({ names }) });
const reader = new FileReader();
reader.onload = function() {
kendo.saveAs({
dataURI: reader.result,
fileName: csv.fileName,
proxyURL: csv.proxyURL,
forceProxy: csv.forceProxy
});
};
reader.readAsDataURL(blob);
},
_renderCSVData: function(data, includeHeaders) {
const csv = this.options.csv || {};
const csvColumns = this._getCSVColumnsInfo();
const names = includeHeaders === false ? undefined : csvColumns.names;
const csvData = typeof csv.data === "function" ? csv.data(data) : data;
return {
csvString: kendo.csv.toCSV({
data: csvData,
keys: csvColumns.keys,
names,
delimiter: csv.delimiter,
lineSeparator: csv.lineSeparator,
preventFormulaInjection: csv.preventFormulaInjection,
maxCellLength: csv.maxCellLength,
maxRows: csv.maxRows,
maxColumns: csv.maxColumns,
includeUTF8BOM: csv.includeUTF8BOM,
groupHeaderFormatter: csv.groupHeaderFormatter,
groupValueFormatter: csv.groupValueFormatter
}),
names: names || []
};
},
_saveCSVData: function(data, includeHeaders) {
const exportData = this._renderCSVData(data, includeHeaders);
this._saveCSVToFile(exportData.csvString, exportData.names);
return exportData.csvString;
},
saveAsCSV: function() {
const that = this;
const csv = this.options.csv || {};
const provider = new kendo.CSVDataProvider({
dataSource: this.dataSource,
allPages: csv.allPages,
filterable: csv.filterable
});
return provider.export().then(function(csvData) {
return that._saveCSVData(csvData);
});
},
toCSVString: function() {
const csv = this.options.csv || {};
const deferred = $.Deferred();
const that = this;
const provider = new kendo.CSVDataProvider({
dataSource: this.dataSource,
allPages: csv.allPages,
filterable: csv.filterable
});
provider.export().then(function(csvData) {
deferred.resolve(that._renderCSVData(csvData).csvString);
});
return deferred.promise();
}
};
})(kendo.jQuery, kendo);
//#endregion
//#region ../src/kendo.csv.js
const __meta__ = {
id: "csv",
name: "CSV generation",
category: "framework",
advanced: true,
mixin: true,
depends: ["core"]
};
(function($) {
window.kendo.csv = window.kendo.csv || {};
window.kendo.csv.toCSV = _progress_kendo_csv.toCSV;
window.kendo.csv.toCSVBlob = _progress_kendo_csv.toCSVBlob;
window.kendo.csv.getCSVMimeType = _progress_kendo_csv.getCSVMimeType;
})(window.kendo.jQuery);
//#endregion
Object.defineProperty(exports, '__meta__', {
enumerable: true,
get: function () {
return __meta__;
}
});