mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
Linting JSX files (#941)
`.jsx` linting is now in-scope for the `npm run lint` command, and I linted the base files and some of the viz, there's still quite a bit of work there, but that's a first pass on it.
This commit is contained in:
committed by
GitHub
parent
7f2805a3c5
commit
a8fd23dfa4
@@ -1,64 +1,63 @@
|
||||
var $ = window.$ = require('jquery');
|
||||
var d3 = require('d3');
|
||||
import { fixDataTableBodyHeight } from '../javascripts/modules/utils'
|
||||
import { timeFormatFactory, formatDate } from '../javascripts/modules/dates'
|
||||
const $ = require('jquery');
|
||||
import d3 from 'd3';
|
||||
import { fixDataTableBodyHeight } from '../javascripts/modules/utils';
|
||||
import { timeFormatFactory, formatDate } from '../javascripts/modules/dates';
|
||||
|
||||
require('./table.css');
|
||||
require('datatables.net-bs');
|
||||
require('datatables-bootstrap3-plugin/media/css/datatables-bootstrap3.css');
|
||||
|
||||
function tableVis(slice) {
|
||||
var fC = d3.format('0,000');
|
||||
var timestampFormatter;
|
||||
const fC = d3.format('0,000');
|
||||
let timestampFormatter;
|
||||
|
||||
function refresh() {
|
||||
$.getJSON(slice.jsonEndpoint(), onSuccess).fail(onError);
|
||||
|
||||
function onError(xhr) {
|
||||
slice.error(xhr.responseText, xhr);
|
||||
return;
|
||||
}
|
||||
|
||||
function onSuccess(json) {
|
||||
var data = json.data;
|
||||
var form_data = json.form_data;
|
||||
var metrics = json.form_data.metrics;
|
||||
|
||||
const data = json.data;
|
||||
const fd = json.form_data;
|
||||
// Removing metrics (aggregates) that are strings
|
||||
var real_metrics = [];
|
||||
for (var k in data.records[0]) {
|
||||
if (metrics.indexOf(k) > -1 && !isNaN(data.records[0][k])) {
|
||||
real_metrics.push(k);
|
||||
const realMetrics = [];
|
||||
for (const k in data.records[0]) {
|
||||
if (fd.metrics.indexOf(k) > -1 && !isNaN(data.records[0][k])) {
|
||||
realMetrics.push(k);
|
||||
}
|
||||
}
|
||||
metrics = real_metrics;
|
||||
const metrics = realMetrics;
|
||||
|
||||
function col(c) {
|
||||
var arr = [];
|
||||
for (var i = 0; i < data.records.length; i++) {
|
||||
const arr = [];
|
||||
for (let i = 0; i < data.records.length; i++) {
|
||||
arr.push(data.records[i][c]);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
var maxes = {};
|
||||
for (var i = 0; i < metrics.length; i++) {
|
||||
const maxes = {};
|
||||
for (let i = 0; i < metrics.length; i++) {
|
||||
maxes[metrics[i]] = d3.max(col(metrics[i]));
|
||||
}
|
||||
|
||||
if (json.form_data.table_timestamp_format === 'smart_date') {
|
||||
if (fd.table_timestamp_format === 'smart_date') {
|
||||
timestampFormatter = formatDate;
|
||||
} else if (json.form_data.table_timestamp_format !== undefined) {
|
||||
timestampFormatter = timeFormatFactory(json.form_data.table_timestamp_format);
|
||||
} else if (fd.table_timestamp_format !== undefined) {
|
||||
timestampFormatter = timeFormatFactory(fd.table_timestamp_format);
|
||||
}
|
||||
|
||||
var div = d3.select(slice.selector);
|
||||
const div = d3.select(slice.selector);
|
||||
div.html('');
|
||||
var table = div.append('table')
|
||||
.classed('dataframe dataframe table table-striped table-bordered table-condensed table-hover dataTable no-footer', true)
|
||||
const table = div.append('table')
|
||||
.classed(
|
||||
'dataframe dataframe table table-striped table-bordered ' +
|
||||
'table-condensed table-hover dataTable no-footer', true)
|
||||
.attr('width', '100%');
|
||||
|
||||
table.append('thead').append('tr')
|
||||
.selectAll('th')
|
||||
.data(data.columns).enter()
|
||||
.data(data.columns)
|
||||
.enter()
|
||||
.append('th')
|
||||
.text(function (d) {
|
||||
return d;
|
||||
@@ -66,42 +65,45 @@ function tableVis(slice) {
|
||||
|
||||
table.append('tbody')
|
||||
.selectAll('tr')
|
||||
.data(data.records).enter()
|
||||
.data(data.records)
|
||||
.enter()
|
||||
.append('tr')
|
||||
.selectAll('td')
|
||||
.data(function (row, i) {
|
||||
return data.columns.map(function (c) {
|
||||
var val = row[c];
|
||||
if (c === 'timestamp') {
|
||||
val = timestampFormatter(val);
|
||||
}
|
||||
return {
|
||||
col: c,
|
||||
val: val,
|
||||
isMetric: metrics.indexOf(c) >= 0,
|
||||
};
|
||||
});
|
||||
}).enter()
|
||||
.data((row) => data.columns.map((c) => {
|
||||
let val = row[c];
|
||||
if (c === 'timestamp') {
|
||||
val = timestampFormatter(val);
|
||||
}
|
||||
return {
|
||||
col: c,
|
||||
val,
|
||||
isMetric: metrics.indexOf(c) >= 0,
|
||||
};
|
||||
}))
|
||||
.enter()
|
||||
.append('td')
|
||||
.style('background-image', function (d) {
|
||||
if (d.isMetric) {
|
||||
var perc = Math.round((d.val / maxes[d.col]) * 100);
|
||||
return "linear-gradient(to right, lightgrey, lightgrey " + perc + "%, rgba(0,0,0,0) " + perc + "%";
|
||||
const perc = Math.round((d.val / maxes[d.col]) * 100);
|
||||
return (
|
||||
`linear-gradient(to right, lightgrey, lightgrey ${perc}%, ` +
|
||||
`rgba(0,0,0,0) ${perc}%`
|
||||
);
|
||||
}
|
||||
return null;
|
||||
})
|
||||
.attr('title', function (d) {
|
||||
.attr('title', (d) => {
|
||||
if (!isNaN(d.val)) {
|
||||
return fC(d.val);
|
||||
}
|
||||
return null;
|
||||
})
|
||||
.attr('data-sort', function (d) {
|
||||
if (d.isMetric) {
|
||||
return d.val;
|
||||
}
|
||||
return (d.isMetric) ? d.val : null;
|
||||
})
|
||||
.on("click", function (d) {
|
||||
.on('click', function (d) {
|
||||
if (!d.isMetric) {
|
||||
var td = d3.select(this);
|
||||
const td = d3.select(this);
|
||||
if (td.classed('filtered')) {
|
||||
slice.removeFilter(d.col, [d.val]);
|
||||
d3.select(this).classed('filtered', false);
|
||||
@@ -111,43 +113,41 @@ function tableVis(slice) {
|
||||
}
|
||||
}
|
||||
})
|
||||
.style("cursor", function (d) {
|
||||
if (!d.isMetric) {
|
||||
return 'pointer';
|
||||
}
|
||||
.style('cursor', function (d) {
|
||||
return (!d.isMetric) ? 'pointer' : '';
|
||||
})
|
||||
.html(function (d) {
|
||||
.html((d) => {
|
||||
if (d.isMetric) {
|
||||
return slice.d3format(d.col, d.val);
|
||||
} else {
|
||||
return d.val;
|
||||
}
|
||||
return d.val;
|
||||
});
|
||||
var height = slice.container.height();
|
||||
var datatable = slice.container.find('.dataTable').DataTable({
|
||||
const height = slice.container.height();
|
||||
const datatable = slice.container.find('.dataTable').DataTable({
|
||||
paging: false,
|
||||
aaSorting: [],
|
||||
searching: form_data.include_search,
|
||||
searching: fd.include_search,
|
||||
bInfo: false,
|
||||
scrollY: height + "px",
|
||||
scrollY: height + 'px',
|
||||
scrollCollapse: true,
|
||||
scrollX: true,
|
||||
});
|
||||
fixDataTableBodyHeight(
|
||||
slice.container.find('.dataTables_wrapper'), height);
|
||||
// Sorting table by main column
|
||||
if (form_data.metrics.length > 0) {
|
||||
var main_metric = form_data.metrics[0];
|
||||
datatable.column(data.columns.indexOf(main_metric)).order('desc').draw();
|
||||
if (fd.metrics.length > 0) {
|
||||
const mainMetric = fd.metrics[0];
|
||||
datatable.column(data.columns.indexOf(mainMetric)).order('desc').draw();
|
||||
}
|
||||
slice.done(json);
|
||||
slice.container.parents('.widget').find('.tooltip').remove();
|
||||
}
|
||||
$.getJSON(slice.jsonEndpoint(), onSuccess).fail(onError);
|
||||
}
|
||||
|
||||
return {
|
||||
render: refresh,
|
||||
resize: function () {},
|
||||
resize() {},
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user