fix: Dont load preview for more than 500 rows
This commit is contained in:
parent
2b42838917
commit
5b193f5672
2 changed files with 40 additions and 9 deletions
|
|
@ -15,6 +15,7 @@ from frappe.exceptions import ValidationError, MandatoryError
|
|||
from frappe.model import display_fieldtypes, no_value_fields, table_fields
|
||||
|
||||
INVALID_VALUES = ["", None]
|
||||
MAX_ROWS_IN_PREVIEW = 500
|
||||
|
||||
|
||||
class Importer:
|
||||
|
|
@ -106,6 +107,13 @@ class Importer:
|
|||
self.header_row = header_row
|
||||
|
||||
def get_data_for_import_preview(self):
|
||||
out = self.get_parsed_data_from_template()
|
||||
if len(out.data) > MAX_ROWS_IN_PREVIEW:
|
||||
out.data = []
|
||||
out.max_rows_exceeded = True
|
||||
return out
|
||||
|
||||
def get_parsed_data_from_template(self):
|
||||
fields, fields_warnings = self.parse_fields_from_header_row()
|
||||
formats, formats_warnings = self.parse_formats_from_first_10_rows()
|
||||
fields, data = self.add_serial_no_column(fields, self.data)
|
||||
|
|
@ -115,7 +123,9 @@ class Importer:
|
|||
|
||||
warnings = fields_warnings + formats_warnings
|
||||
|
||||
return dict(header_row=self.header_row, fields=fields, data=data, warnings=warnings)
|
||||
return frappe._dict(
|
||||
header_row=self.header_row, fields=fields, data=data, warnings=warnings
|
||||
)
|
||||
|
||||
def parse_fields_from_header_row(self):
|
||||
remap_column = self.template_options.remap_column
|
||||
|
|
@ -321,7 +331,7 @@ class Importer:
|
|||
# set flag
|
||||
frappe.flags.in_import = True
|
||||
|
||||
out = self.get_data_for_import_preview()
|
||||
out = self.get_parsed_data_from_template()
|
||||
fields = out["fields"]
|
||||
data = out["data"]
|
||||
warnings = []
|
||||
|
|
@ -619,12 +629,12 @@ class Importer:
|
|||
row_indexes = list(set(row_indexes))
|
||||
row_indexes.sort()
|
||||
|
||||
out = self.get_data_for_import_preview()
|
||||
out = self.get_parsed_data_from_template()
|
||||
header_row = out["header_row"]
|
||||
data = out["data"]
|
||||
|
||||
rows = [header_row]
|
||||
rows += [row[1: ] for row in data if row[0] in row_indexes]
|
||||
rows += [row[1:] for row in data if row[0] in row_indexes]
|
||||
|
||||
build_csv_response(rows, self.doctype)
|
||||
|
||||
|
|
|
|||
|
|
@ -32,12 +32,14 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
this.header_row = this.preview_data.header_row;
|
||||
this.fields = this.preview_data.fields;
|
||||
this.data = this.preview_data.data;
|
||||
this.max_rows_exceeded = this.preview_data.max_rows_exceeded;
|
||||
this.make_wrapper();
|
||||
this.prepare_columns();
|
||||
this.prepare_data();
|
||||
this.render_warnings(this.warnings);
|
||||
this.render_datatable();
|
||||
this.setup_styles();
|
||||
this.add_actions();
|
||||
}
|
||||
|
||||
make_wrapper() {
|
||||
|
|
@ -45,11 +47,7 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
<div>
|
||||
<div class="warnings text-muted"></div>
|
||||
<div class="table-preview"></div>
|
||||
<div class="table-actions margin-top">
|
||||
<button class="btn btn-xs btn-default" data-action="export_errored_rows">
|
||||
${__('Export rows which are not imported')}
|
||||
</button>
|
||||
</div>
|
||||
<div class="table-actions margin-top"></div>
|
||||
</div>
|
||||
`);
|
||||
frappe.utils.bind_actions_with_class(this.wrapper, this);
|
||||
|
|
@ -135,6 +133,11 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
this.datatable.destroy();
|
||||
}
|
||||
|
||||
let no_data_message = this.max_rows_exceeded
|
||||
? __('Cannot load preview for more than 500 rows. You can still remap or skip columns.')
|
||||
: __('No Data');
|
||||
no_data_message = `<span class="text-muted">${no_data_message}</span>`;
|
||||
|
||||
this.datatable = new DataTable(this.$table_preview.get(0), {
|
||||
data: this.data,
|
||||
columns: this.columns,
|
||||
|
|
@ -143,6 +146,7 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
serialNoColumn: false,
|
||||
checkboxColumn: false,
|
||||
pasteFromClipboard: true,
|
||||
noDataMessage: no_data_message,
|
||||
headerDropdown: [
|
||||
{
|
||||
label: __('Remap Column'),
|
||||
|
|
@ -158,6 +162,12 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
}
|
||||
});
|
||||
|
||||
if (this.data.length === 0) {
|
||||
this.datatable.style.setStyle('.dt-scrollable', {
|
||||
height: 'auto'
|
||||
});
|
||||
}
|
||||
|
||||
this.datatable.style.setStyle('.dt-dropdown__list-item:nth-child(-n+4)', {
|
||||
display: 'none'
|
||||
});
|
||||
|
|
@ -218,6 +228,17 @@ frappe.data_import.ImportPreview = class ImportPreview {
|
|||
});
|
||||
}
|
||||
|
||||
add_actions() {
|
||||
let failures = this.import_log.filter(log => !log.success);
|
||||
if (failures.length > 0) {
|
||||
this.wrapper.find('.table-actions').append(
|
||||
`<button class="btn btn-xs btn-default" data-action="export_errored_rows">
|
||||
${__('Export rows which are not imported')}
|
||||
</button>
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
export_errored_rows() {
|
||||
this.events.export_errored_rows();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue