UNPKG

@ovh-ux/ng-ovh-export-csv

Version:
218 lines (208 loc) 8.11 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('angular'), require('moment')) : typeof define === 'function' && define.amd ? define(['angular', 'moment'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["ng-ovh-export-csv"] = factory(global.angular, global.moment)); })(this, (function (angular, moment) { 'use strict'; function ___$insertStyle(css) { if (!css || typeof window === 'undefined') { return; } const style = document.createElement('style'); style.setAttribute('type', 'text/css'); style.innerHTML = css; document.head.appendChild(style); return css; } function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var angular__default = /*#__PURE__*/_interopDefaultLegacy(angular); var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); _ngInjectExport$1.$inject = ["$location"]; function _ngInjectExport$1($location) { var self = this; var internalCache = {}; var internalStatus = { notFound: 'NOT_FOUND', doing: 'DOING', error: 'ERROR' }; this.exportData = function exportData(opts) { var csvContent = ''; var lines = []; var filename; var seperator = opts.separator || ','; var dataString; if (!opts.fileName) { filename = $location.path().replace(/\//, ''); filename = filename.replace(/\//g, '-'); if ($location.search().TAB) { filename += $location.search().TAB; } } else { filename = opts.fileName; } filename += "-".concat(moment__default["default"]().format('YYYY-MM-DD_HH:mm:ss'), ".csv"); if (typeof opts.datas === 'string') { csvContent = opts.datas; } else if (Object.prototype.toString.call(opts.datas) === '[object Array]') { angular__default["default"].forEach(opts.datas, function (line) { lines.push(line.join(seperator)); }); csvContent += lines.join('\n'); } else { csvContent += opts.datas.join('\n'); } if (navigator.platform.toUpperCase().indexOf('WIN') > -1) { dataString = "data:text/csv;charset=windows-1252;base64,".concat(btoa(unescape(encodeURIComponent(csvContent)))); } else { dataString = "data:text/csv;charset=utf-8;base64,".concat(btoa(unescape(encodeURIComponent(csvContent)))); } var link = document.createElement('a'); if (link.download !== undefined) { link.setAttribute('href', dataString); link.setAttribute('download', filename); link.setAttribute('style', 'visibility:hidden'); document.body.appendChild(link); link.click(); document.body.removeChild(link); } else { window.open(dataString); } return dataString; }; function saveDataSnapshot(options) { if (!options.instanceName) { throw new Error('[wroughtDataForCsv()]: missing options'); } var instanceName = options.instanceName.toString(); if (!internalCache[instanceName]) { internalCache[instanceName] = {}; } internalCache[instanceName].data = options.internalData; } function setDataStatus(options, status, error) { if (!options.instanceName) { throw new Error('missing instanceName'); } if (!internalStatus[status]) { throw new Error('invalide status'); } internalCache[options.instanceName.toString()].status = internalStatus[status]; if (status === 'error') { if (error) { internalCache[options.instanceName.toString()].error = error; } else { internalCache[options.instanceName.toString()].error = null; } } } function wroughtDataForCsvError(options, error) { if (options.notify) { options.notify(options.internalData); } setDataStatus(options, 'error', error); if (options.error) { options.error(error, options.internalData); } } /* * prepare data needed to export of CSV * @param {object} object of options: \{ * `` MANDATORY `` * instanceName {string} arbitrary string to identify the process * iterator {function} the function called until the job is done (must return a promise) * keepGoing {function} the function called at each iteration loop to known if the job is * done or if we have to call the iterator again * `` OPTIONAL `` * notify {function} function called after each iteration * done {function} function called when the job is done * \} * * @return undefined * */ this.wroughtDataForCsv = function wroughtDataForCsv(options, callHimself) { if (!options || !options.instanceName || !options.iterator || !options.keepGoing) { throw new Error('[wroughtDataForCsv()]: missing options'); } if (!callHimself && self.getExportCsvStatus === internalStatus.doing) { wroughtDataForCsvError(options, new Error("the process ".concat(options.instanceName, " is already in progress"))); } saveDataSnapshot(options); setDataStatus(options, 'doing'); options.iterator(options.internalData).then(function () { if (options.notify) { options.notify(options.internalData); } options.keepGoing(options.internalData).then(function (keepGoing) { if (keepGoing) { self.wroughtDataForCsv(options, true); } else { if (options.done) { options.done(options.internalData); } delete internalCache[options.instanceName.toString()]; } }, function (err) { wroughtDataForCsvError(options, err); }); }, function (err) { wroughtDataForCsvError(options, err); }); }; this.getExportCsvStatus = function getExportCsvStatus(instanceName) { if (!instanceName) { throw new Error('[getExportCsvStatus()]: missing instance name'); } return internalCache[instanceName] ? internalCache[instanceName].status : internalStatus.notFound; }; this.getExportCsvError = function getExportCsvError(instanceName) { if (!instanceName) { throw new Error('[getExportCsvError()]: missing instance name'); } return internalCache[instanceName] && internalCache[instanceName].error ? internalCache[instanceName].error : null; }; Object.defineProperty(self, 'statusEnum', { enumerable: true, configurable: false, get: function get() { return angular__default["default"].copy(internalStatus); }, set: function set() { throw new Error("'statusEnum' is a read only property"); } }); } _ngInjectExport.$inject = ["$parse", "$q", "exportCsv"]; function _ngInjectExport($parse, $q, exportCsv) { return { scope: { exportCsv: '&', name: '@exportCsvFileName', separator: '@exportCsvSeparator' }, replace: false, compile: function compile() { var exp = $parse('exportToCSV();'); return function ($scope, $elm) { $scope.exportToCSV = function () { $q.when($scope.exportCsv()).then(function (dataToExport) { if (dataToExport) { exportCsv.exportData({ fileName: $scope.name, separator: $scope.separator, datas: dataToExport }); } }); }; $elm.bind('click', function () { exp($scope); }); }; } }; } var moduleName = 'ngOvhExportCsv'; angular__default["default"].module(moduleName, []).service('exportCsv', _ngInjectExport$1).directive('exportCsv', _ngInjectExport); return moduleName; })); //# sourceMappingURL=ng-ovh-export-csv.js.map