/**
 * @fileoverview added by tsickle
 * Generated from: data-exporter/data-exporter.component.ts
 * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import { __read, __spread, __values } from "tslib";
/*!
 * Copyright 2019-2020 VMware, Inc.
 * SPDX-License-Identifier: BSD-2-Clause
 */
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import { ClrDropdown } from '@clr/angular';
import { TranslationService } from '@vcd/i18n';
import { SubscriptionTracker } from '../common/subscription';
import { CsvExporterService } from './csv-exporter.service';
/**
 * Identifiers for each column that user is allowed to select
 * @record
 */
export function ExportColumn() { }
if (false) {
    /**
     * Displayed in the list of columns. If there is no displayName, the default value is fieldName
     * @type {?|undefined}
     */
    ExportColumn.prototype.displayName;
    /**
     * The name of the field in the JSON that is returned and converted to a viewable format
     * @type {?}
     */
    ExportColumn.prototype.fieldName;
}
/** @enum {string} */
var UserOptions = {
    selectAll: "selectAll",
    friendlyNames: "friendlyNames",
    sanitize: "sanitize",
};
export { UserOptions };
/**
 * Information passed to the caller so they can fetch the data
 * @record
 */
export function DataExportRequestEvent() { }
if (false) {
    /**
     * Call this to indicate a new value to be displayed in the progress indicator.
     * \@param progress A number from 0 to 1 indicating download progress. Passing -1 will make it an indeterminate
     * @type {?}
     */
    DataExportRequestEvent.prototype.updateProgress;
    /**
     * Call this when all records have been fetched to initiate the CSV creation.
     * This should only be called once after all data fetching is finished
     * \@param records Records to be converted into a csv file
     * \@return a promise of the resulting CSV to indicate when this potentially lengthy process is over
     * @type {?}
     */
    DataExportRequestEvent.prototype.exportData;
    /**
     * Columns selected by the user.
     * @type {?}
     */
    DataExportRequestEvent.prototype.selectedColumns;
}
/**
 * A dialog to export data
 *
 *  - Allows the UI to select columns to be exported
 *  - Provides a progress indicator
 *  - Converts the data that is fetched by the caller into a CSV
 */
var DataExporterComponent = /** @class */ (function () {
    function DataExporterComponent(csvExporterService, translationService) {
        var _a;
        this.csvExporterService = csvExporterService;
        this.translationService = translationService;
        this._columns = [];
        /**
         * The name of the file to be downloaded
         */
        this.fileName = 'data-export.csv';
        /**
         * Text for the Dialog Header
         */
        this.dialogHeader = this.translationService.translateAsync('vcd.cc.data-exporter.title');
        /**
         * Text for the cancel button.
         */
        this.cancelText = this.translationService.translateAsync('vcd.cc.cancel');
        /**
         * Text for the export all button.
         */
        this.exportAllText = this.translationService.translateAsync('vcd.cc.export.all');
        /**
         * Text for the select columns dropdown button.
         */
        this.selectColumnsText = this.translationService.translateAsync('vcd.cc.select.columns');
        /**
         * Text for the export button.
         */
        this.exportText = this.translationService.translateAsync('vcd.cc.export');
        /**
         * Text for the yes button.
         */
        this.yesText = this.translationService.translateAsync('vcd.cc.yes');
        /**
         * Text for the yes button.
         */
        this.noText = this.translationService.translateAsync('vcd.cc.no');
        /**
         * Text label that is next to the friendly field names checkbox.
         */
        this.friendlyNamesCheckboxLabel = this.translationService.translateAsync('vcd.cc.friendly.names.question');
        /**
         * Text the info message next to the friendly field names checkbox.
         */
        this.friendlyNamesInfoMessage = this.translationService.translateAsync('vcd.cc.friendly.names.info');
        /**
         * Text the hint message below the friendly field names checkbox.
         */
        this.friendlyNamesHint = this.translationService.translateAsync('vcd.cc.friendly.names.hint');
        /**
         * Text label that is next to the sanitize checkbox.
         */
        this.sanitizeCheckboxLabel = this.translationService.translateAsync('vcd.cc.sanitize.question');
        /**
         * Hint message that is below the sanitize checkbox.
         */
        this.sanitizeCheckboxHint = this.translationService.translateAsync('vcd.cc.sanitize.hint');
        /**
         * Text the info message next to the sanitize checkbox.
         */
        this.sanitizeInfoMessage = this.translationService.translateAsync('vcd.cc.sanitize.info');
        /**
         * The message that is displayed while the data is downloading.
         */
        this.downloadingMessage = this.translationService.translateAsync('vcd.cc.exporter.downloading');
        /**
         * The message that is displayed while the data is writing to file.
         */
        this.writingMessage = this.translationService.translateAsync('vcd.cc.exporter.writing');
        this._open = false;
        this.subscriptionTracker = new SubscriptionTracker(this);
        this.forceDropdownOpen = false;
        /**
         * Fires when {\@link _open} changes. Its parameter indicates the new state.
         */
        this.openChange = new EventEmitter();
        /**
         * Called when the export is ready to be created
         */
        this.dataExportRequest = new EventEmitter();
        this._isRequestPending = false;
        this._progress = 0;
        this.fieldNameMap = new Map();
        this.optionsFormGroup = new FormGroup((_a = {},
            _a[UserOptions.selectAll] = new FormControl(true),
            _a[UserOptions.friendlyNames] = new FormControl(true),
            _a[UserOptions.sanitize] = new FormControl(true),
            _a));
        /**
         * Says if the column dropdown is open.
         */
        this.isDropdownOpen = false;
    }
    Object.defineProperty(DataExporterComponent.prototype, "columnDropdown", {
        set: /**
         * @param {?} columnDropdown
         * @return {?}
         */
        function (columnDropdown) {
            var _this = this;
            if (!columnDropdown) {
                return;
            }
            this.subscriptionTracker.subscribe(columnDropdown.toggleService.openChange, (/**
             * @param {?} opened
             * @return {?}
             */
            function (opened) {
                _this.isDropdownOpen = opened;
            }));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "columns", {
        get: /**
         * @return {?}
         */
        function () {
            return this._columns;
        },
        /**
         * List of columns that can be exported, user may deselect some before sending the download request.
         * Display name defaults to field name if there is no displayName
         */
        set: /**
         * List of columns that can be exported, user may deselect some before sending the download request.
         * Display name defaults to field name if there is no displayName
         * @param {?} cols
         * @return {?}
         */
        function (cols) {
            this._columns = cols;
            this.updateFieldNameMap(cols);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "open", {
        get: /**
         * @return {?}
         */
        function () {
            return this._open;
        },
        /**
         * Whether the dialog is open
         */
        set: /**
         * Whether the dialog is open
         * @param {?} value
         * @return {?}
         */
        function (value) {
            this._open = value;
            this.openChange.emit(value);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "isRequestPending", {
        /**
         * True between the time {@link dataExportRequest} fires and {@link DataExportRequestEvent.exportData} is called
         * or an error is thrown
         */
        get: /**
         * True between the time {\@link dataExportRequest} fires and {\@link DataExportRequestEvent.exportData} is called
         * or an error is thrown
         * @return {?}
         */
        function () {
            return this._isRequestPending;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "progress", {
        /**
         * Number between 0-1, used for displaying the progress bar.
         */
        get: /**
         * Number between 0-1, used for displaying the progress bar.
         * @return {?}
         */
        function () {
            return this._progress;
        },
        enumerable: true,
        configurable: true
    });
    /**
     * @return {?}
     */
    DataExporterComponent.prototype.onClickExport = /**
     * @return {?}
     */
    function () {
        this.exportStage = this.downloadingMessage;
        this._isRequestPending = true;
        this.dataExportRequest.emit({
            exportData: this.exportData.bind(this),
            updateProgress: this.updateProgress.bind(this),
            selectedColumns: this.selectedColumns,
        });
    };
    Object.defineProperty(DataExporterComponent.prototype, "selectAllControl", {
        get: /**
         * @return {?}
         */
        function () {
            return (/** @type {?} */ (this.optionsFormGroup.get(UserOptions.selectAll)));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "sanitizeControl", {
        get: /**
         * @return {?}
         */
        function () {
            return (/** @type {?} */ (this.optionsFormGroup.get(UserOptions.sanitize)));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "friendlyFieldsControl", {
        get: /**
         * @return {?}
         */
        function () {
            return (/** @type {?} */ (this.optionsFormGroup.get(UserOptions.friendlyNames)));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "isExportEnabled", {
        get: /**
         * @return {?}
         */
        function () {
            var e_1, _a;
            if (this.isRequestPending) {
                return false;
            }
            try {
                for (var _b = __values(this.columns), _c = _b.next(); !_c.done; _c = _b.next()) {
                    var column = _c.value;
                    if (this.formGroup.controls[column.fieldName].value) {
                        return true;
                    }
                }
            }
            catch (e_1_1) { e_1 = { error: e_1_1 }; }
            finally {
                try {
                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
                }
                finally { if (e_1) throw e_1.error; }
            }
            return false;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "shouldShowBubbles", {
        get: /**
         * @return {?}
         */
        function () {
            return !this.selectAllControl.value && !this.isDropdownOpen;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(DataExporterComponent.prototype, "selectedColumns", {
        /**
         * Gives a list of all the columns that are selected.
         */
        get: /**
         * Gives a list of all the columns that are selected.
         * @return {?}
         */
        function () {
            var _this = this;
            return this.columns.filter((/**
             * @param {?} col
             * @return {?}
             */
            function (col) { return _this.formGroup.controls[col.fieldName].value; }));
        },
        enumerable: true,
        configurable: true
    });
    /**
     * Sets the selected value of the given column.
     */
    /**
     * Sets the selected value of the given column.
     * @param {?} column
     * @param {?} selected
     * @return {?}
     */
    DataExporterComponent.prototype.selectColumn = /**
     * Sets the selected value of the given column.
     * @param {?} column
     * @param {?} selected
     * @return {?}
     */
    function (column, selected) {
        this.formGroup.controls[column.fieldName].setValue(selected);
    };
    /**
     * @return {?}
     */
    DataExporterComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        var _this = this;
        /** @type {?} */
        var controls = this.columns.reduce((/**
         * @param {?} previousValue
         * @param {?} currentValue
         * @return {?}
         */
        function (previousValue, currentValue) {
            previousValue[currentValue.fieldName] = new FormControl(true);
            return previousValue;
        }), {});
        this.formGroup = new FormGroup(controls);
        this.subscriptionTracker.subscribe(this.selectAllControl.valueChanges, (/**
         * @param {?} change
         * @return {?}
         */
        function (change) {
            var e_2, _a;
            if (change) {
                try {
                    for (var _b = __values(_this.columns), _c = _b.next(); !_c.done; _c = _b.next()) {
                        var column = _c.value;
                        _this.formGroup.controls[column.fieldName].setValue(true);
                    }
                }
                catch (e_2_1) { e_2 = { error: e_2_1 }; }
                finally {
                    try {
                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
                    }
                    finally { if (e_2) throw e_2.error; }
                }
            }
            else {
                _this.forceDropdownOpen = true;
                _this.isDropdownOpen = true;
            }
        }));
    };
    /**
     * @return {?}
     */
    DataExporterComponent.prototype.ngOnDestroy = /**
     * @return {?}
     */
    function () { };
    /**
     * @private
     * @param {?} records
     * @return {?}
     */
    DataExporterComponent.prototype.exportData = /**
     * @private
     * @param {?} records
     * @return {?}
     */
    function (records) {
        var _this = this;
        if (!this.open) {
            return;
        }
        /** @type {?} */
        var rows = __spread([
            // First row is the display names
            Object.keys(records[0]).map((/**
             * @param {?} fieldName
             * @return {?}
             */
            function (fieldName) {
                return _this.friendlyFieldsControl.value ? _this.getDisplayNameForField(fieldName) : fieldName;
            }))
        ], records.map((/**
         * @param {?} rec
         * @return {?}
         */
        function (rec) { return Object.keys(rec).map((/**
         * @param {?} key
         * @return {?}
         */
        function (key) { return rec[key]; })); })));
        return this.downloadData(rows, this.sanitizeControl.value);
    };
    /**
     * @param {?} data
     * @param {?=} shouldSanitize
     * @return {?}
     */
    DataExporterComponent.prototype.downloadData = /**
     * @param {?} data
     * @param {?=} shouldSanitize
     * @return {?}
     */
    function (data, shouldSanitize) {
        var _this = this;
        if (shouldSanitize === void 0) { shouldSanitize = false; }
        this.exportStage = this.writingMessage;
        return new Promise((/**
         * @param {?} resolve
         * @return {?}
         */
        function (resolve) {
            // We need to setTimeout because we changed how the message should be displayed
            // but we need to interrupt the current task to get the message to display
            // We tried to use window.requestAnimationFrame, but this didn't work so we had to use
            // setTimeout().
            setTimeout((/**
             * @return {?}
             */
            function () {
                _this._isRequestPending = false;
                /** @type {?} */
                var csvFile = _this.csvExporterService.createCsv(data, shouldSanitize);
                _this.csvExporterService.downloadCsvFile(csvFile, _this.fileName);
                _this.open = false;
                resolve(csvFile);
            }));
        }));
    };
    /**
     * @private
     * @param {?} progress
     * @return {?}
     */
    DataExporterComponent.prototype.updateProgress = /**
     * @private
     * @param {?} progress
     * @return {?}
     */
    function (progress) {
        this._progress = progress;
    };
    /**
     * @private
     * @param {?} fieldName
     * @return {?}
     */
    DataExporterComponent.prototype.getDisplayNameForField = /**
     * @private
     * @param {?} fieldName
     * @return {?}
     */
    function (fieldName) {
        if (this.fieldNameMap.has(fieldName)) {
            /** @type {?} */
            var exportColumn = this.fieldNameMap.get(fieldName);
            return exportColumn.displayName || exportColumn.fieldName;
        }
        else {
            return fieldName;
        }
    };
    /**
     * @private
     * @param {?} cols
     * @return {?}
     */
    DataExporterComponent.prototype.updateFieldNameMap = /**
     * @private
     * @param {?} cols
     * @return {?}
     */
    function (cols) {
        var _this = this;
        this.fieldNameMap.clear();
        cols.forEach((/**
         * @param {?} column
         * @return {?}
         */
        function (column) {
            _this.fieldNameMap.set(column.fieldName, column);
        }));
    };
    DataExporterComponent.decorators = [
        { type: Component, args: [{
                    selector: 'vcd-data-exporter',
                    template: "<clr-modal [clrModalOpen]=\"open\" (clrModalOpenChange)=\"openChange.emit($event)\" [clrModalSize]=\"'md'\" #modal>\n    <h3 class=\"modal-title\">{{ dialogHeader | lazyString }}</h3>\n    <div class=\"modal-body\">\n        <div>\n            <ul class=\"list-unstyled\" [formGroup]=\"optionsFormGroup\">\n                <li>\n                    <div class=\"flex-row\">\n                        <clr-checkbox-wrapper>\n                            <input\n                                class=\"friendly-names\"\n                                type=\"checkbox\"\n                                clrCheckbox\n                                [formControl]=\"this.friendlyFieldsControl\"\n                            />\n                            <label>{{ friendlyNamesCheckboxLabel | lazyString }}</label>\n                        </clr-checkbox-wrapper>\n                        <div class=\"fill-space\"></div>\n                        <clr-signpost>\n                            <clr-icon clrSignpostTrigger shape=\"info-circle\" size=\"24\"></clr-icon>\n                            <clr-signpost-content *clrIfOpen>\n                                <span>{{ friendlyNamesInfoMessage | lazyString }}</span>\n                            </clr-signpost-content>\n                        </clr-signpost>\n                    </div>\n                    <i>{{ friendlyNamesHint | lazyString }}</i>\n                    <div class=\"flex-row\">\n                        <clr-checkbox-wrapper>\n                            <input\n                                class=\"sanitize-cells\"\n                                type=\"checkbox\"\n                                clrCheckbox\n                                [formControl]=\"this.sanitizeControl\"\n                            />\n                            <label>{{ sanitizeCheckboxLabel | lazyString }}</label>\n                        </clr-checkbox-wrapper>\n                        <div class=\"fill-space\"></div>\n                        <clr-signpost>\n                            <clr-icon clrSignpostTrigger shape=\"info-circle\" size=\"24\"></clr-icon>\n                            <clr-signpost-content *clrIfOpen>\n                                <span>{{ sanitizeInfoMessage | lazyString }}</span>\n                            </clr-signpost-content>\n                        </clr-signpost>\n                    </div>\n                    <i>{{ sanitizeCheckboxHint | lazyString }}</i>\n                    <div class=\"flex-row\">\n                        <clr-checkbox-wrapper>\n                            <input\n                                class=\"export-all\"\n                                type=\"checkbox\"\n                                clrCheckbox\n                                [formControl]=\"this.selectAllControl\"\n                            />\n                            <label>{{ exportAllText | lazyString }}</label>\n                        </clr-checkbox-wrapper>\n                        <clr-dropdown *ngIf=\"!this.selectAllControl.value\">\n                            <clr-icon\n                                [attr.shape]=\"isDropdownOpen ? 'caret up' : 'caret down'\"\n                                size=\"24\"\n                                clrDropdownTrigger\n                                class=\"dropdown-button\"\n                            ></clr-icon>\n                            <clr-dropdown-menu clrPosition=\"bottom\" *clrIfOpen=\"forceDropdownOpen\">\n                                <ul class=\"list-unstyled column-selection\" [formGroup]=\"formGroup\">\n                                    <li *ngFor=\"let col of columns\" class=\"dropdown-item\">\n                                        <clr-checkbox-wrapper class=\"column-checkbox\">\n                                            <input type=\"checkbox\" clrCheckbox [formControlName]=\"col.fieldName\" />\n                                            <label>{{\n                                                this.friendlyFieldsControl.value\n                                                    ? col.displayName || col.fieldName\n                                                    : col.fieldName\n                                            }}</label>\n                                        </clr-checkbox-wrapper>\n                                    </li>\n                                </ul>\n                            </clr-dropdown-menu>\n                        </clr-dropdown>\n                    </div>\n                </li>\n            </ul>\n            <div [ngStyle]=\"{ visibility: shouldShowBubbles ? 'visible' : 'hidden' }\" class=\"column-container\">\n                <span class=\"label column-label\" *ngFor=\"let column of selectedColumns\">\n                    {{ this.friendlyFieldsControl.value ? column.displayName || column.fieldName : column.fieldName }}\n                    <clr-icon shape=\"close\" class=\"badge badge-info\" (click)=\"selectColumn(column, false)\"> </clr-icon>\n                </span>\n            </div>\n        </div>\n        <div class=\"progress-divider\"></div>\n        <ng-container *ngIf=\"isRequestPending\">{{ exportStage | lazyString }}</ng-container>\n        <div class=\"progress-divider\"></div>\n        <div class=\"progress\" [ngClass]=\"{ loop: progress == -1, pending: isRequestPending }\">\n            <progress max=\"100\" value=\"{{ progress * 100 }}\"></progress>\n        </div>\n    </div>\n\n    <div class=\"modal-footer\">\n        <button type=\"button\" class=\"btn btn-outline cancel\" (click)=\"open = false\">\n            {{ cancelText | lazyString }}\n        </button>\n        <button type=\"button\" class=\"btn btn-primary export\" [disabled]=\"!isExportEnabled\" (click)=\"onClickExport()\">\n            {{ exportText | lazyString }}\n        </button>\n    </div>\n</clr-modal>\n",
                    styles: ["div.progress{visibility:hidden}div.progress.pending{visibility:visible}.flex-row{display:flex;flex-direction:row}.fill-space{flex:1}.dropdown-button{margin-top:-1px;margin-left:2px}.progress-divider{height:20px}.column-container{overflow:auto;height:50px;display:block}button.select-all{margin:0;padding:0}clr-dropdown-menu{height:200px;overflow:auto}"]
                }] }
    ];
    /** @nocollapse */
    DataExporterComponent.ctorParameters = function () { return [
        { type: CsvExporterService },
        { type: TranslationService }
    ]; };
    DataExporterComponent.propDecorators = {
        columnDropdown: [{ type: ViewChild, args: [ClrDropdown,] }],
        columns: [{ type: Input }],
        fileName: [{ type: Input }],
        dialogHeader: [{ type: Input }],
        cancelText: [{ type: Input }],
        exportAllText: [{ type: Input }],
        selectColumnsText: [{ type: Input }],
        exportText: [{ type: Input }],
        yesText: [{ type: Input }],
        noText: [{ type: Input }],
        friendlyNamesCheckboxLabel: [{ type: Input }],
        friendlyNamesInfoMessage: [{ type: Input }],
        friendlyNamesHint: [{ type: Input }],
        sanitizeCheckboxLabel: [{ type: Input }],
        sanitizeCheckboxHint: [{ type: Input }],
        sanitizeInfoMessage: [{ type: Input }],
        downloadingMessage: [{ type: Input }],
        writingMessage: [{ type: Input }],
        open: [{ type: Input }],
        openChange: [{ type: Output }],
        dataExportRequest: [{ type: Output }]
    };
    return DataExporterComponent;
}());
export { DataExporterComponent };
if (false) {
    /** @type {?} */
    DataExporterComponent.prototype._columns;
    /**
     * The name of the file to be downloaded
     * @type {?}
     */
    DataExporterComponent.prototype.fileName;
    /**
     * Text for the Dialog Header
     * @type {?}
     */
    DataExporterComponent.prototype.dialogHeader;
    /**
     * Text for the cancel button.
     * @type {?}
     */
    DataExporterComponent.prototype.cancelText;
    /**
     * Text for the export all button.
     * @type {?}
     */
    DataExporterComponent.prototype.exportAllText;
    /**
     * Text for the select columns dropdown button.
     * @type {?}
     */
    DataExporterComponent.prototype.selectColumnsText;
    /**
     * Text for the export button.
     * @type {?}
     */
    DataExporterComponent.prototype.exportText;
    /**
     * Text for the yes button.
     * @type {?}
     */
    DataExporterComponent.prototype.yesText;
    /**
     * Text for the yes button.
     * @type {?}
     */
    DataExporterComponent.prototype.noText;
    /**
     * Text label that is next to the friendly field names checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.friendlyNamesCheckboxLabel;
    /**
     * Text the info message next to the friendly field names checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.friendlyNamesInfoMessage;
    /**
     * Text the hint message below the friendly field names checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.friendlyNamesHint;
    /**
     * Text label that is next to the sanitize checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.sanitizeCheckboxLabel;
    /**
     * Hint message that is below the sanitize checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.sanitizeCheckboxHint;
    /**
     * Text the info message next to the sanitize checkbox.
     * @type {?}
     */
    DataExporterComponent.prototype.sanitizeInfoMessage;
    /**
     * The message that is displayed while the data is downloading.
     * @type {?}
     */
    DataExporterComponent.prototype.downloadingMessage;
    /**
     * The message that is displayed while the data is writing to file.
     * @type {?}
     */
    DataExporterComponent.prototype.writingMessage;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype._open;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype.subscriptionTracker;
    /** @type {?} */
    DataExporterComponent.prototype.forceDropdownOpen;
    /**
     * Fires when {\@link _open} changes. Its parameter indicates the new state.
     * @type {?}
     */
    DataExporterComponent.prototype.openChange;
    /**
     * Called when the export is ready to be created
     * @type {?}
     */
    DataExporterComponent.prototype.dataExportRequest;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype._isRequestPending;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype._progress;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype.fieldNameMap;
    /** @type {?} */
    DataExporterComponent.prototype.formGroup;
    /** @type {?} */
    DataExporterComponent.prototype.exportStage;
    /** @type {?} */
    DataExporterComponent.prototype.optionsFormGroup;
    /**
     * Says if the column dropdown is open.
     * @type {?}
     */
    DataExporterComponent.prototype.isDropdownOpen;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype.csvExporterService;
    /**
     * @type {?}
     * @private
     */
    DataExporterComponent.prototype.translationService;
}
//# sourceMappingURL=data:application/json;base64, 