diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts index 026ac63540a6..f0b83aa72633 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart-controls/src/utils/D3Formatting.ts @@ -46,7 +46,7 @@ export const D3_TIME_FORMAT_OPTIONS: [string, string][] = [ ['%m/%d/%Y', '%m/%d/%Y | 01/14/2019'], ['%Y-%m-%d', '%Y-%m-%d | 2019-01-14'], ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S | 2019-01-14 01:32:10'], - ['%d-%m-%Y %H:%M:%S', '%Y-%m-%d %H:%M:%S | 14-01-2019 01:32:10'], + ['%d-%m-%Y %H:%M:%S', '%d-%m-%Y %H:%M:%S | 14-01-2019 01:32:10'], ['%H:%M:%S', '%H:%M:%S | 01:32:10'], ]; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/formatters/smartDateDetailed.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/formatters/smartDateDetailed.ts new file mode 100644 index 000000000000..f582641bb958 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/formatters/smartDateDetailed.ts @@ -0,0 +1,18 @@ +import createMultiFormatter from '../factories/createMultiFormatter'; + +const smartDateDetailedFormatter = createMultiFormatter({ + id: 'smart_date_detailed', + label: 'Detailed adaptive formatter', + formats: { + millisecond: '%Y-%m-%d %H:%M:%S.%L', + second: '%Y-%m-%d %H:%M:%S', + minute: '%Y-%m-%d %H:%M', + hour: '%Y-%m-%d %H:%M', + day: '%Y-%m-%d', + week: '%Y-%m-%d', + month: '%Y-%m-%d', + year: '%Y', + }, +}); + +export default smartDateDetailedFormatter; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/index.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/index.ts index fcb39df25b34..78c19970841f 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/index.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/time-format/index.ts @@ -14,6 +14,7 @@ export { default as createD3TimeFormatter } from './factories/createD3TimeFormat export { default as createMultiFormatter } from './factories/createMultiFormatter'; export { default as smartDateFormatter } from './formatters/smartDate'; +export { default as smartDateDetailedFormatter } from './formatters/smartDateDetailed'; export { default as smartDateVerboseFormatter } from './formatters/smartDateVerbose'; export * from './types'; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/time-format/formatters/smartDateDetailed.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/time-format/formatters/smartDateDetailed.test.ts new file mode 100644 index 000000000000..fb1c99511b90 --- /dev/null +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/time-format/formatters/smartDateDetailed.test.ts @@ -0,0 +1,30 @@ +import TimeFormatter from '@superset-ui/core/src/time-format/TimeFormatter'; +import smartDateDetailedFormatter from '@superset-ui/core/src/time-format/formatters/smartDateDetailed'; + +describe('smartDateDetailedFormatter', () => { + const formatter = smartDateDetailedFormatter; + + it('is a function', () => { + expect(formatter).toBeInstanceOf(TimeFormatter); + }); + + it('shows only year when 1st day of the year', () => { + expect(formatter(new Date('2020-01-01 0:00:00'))).toBe('2020'); + }); + + it('shows full date when a regular date', () => { + expect(formatter(new Date('2020-03-01 00:00:00'))).toBe('2020-03-01'); + }); + + it('shows full date including time of day without seconds when hour precision', () => { + expect(formatter(new Date('2020-03-01 13:00:00'))).toBe('2020-03-01 13:00'); + }); + + it('shows full date including time of day when minute precision', () => { + expect(formatter(new Date('2020-03-10 13:10:00'))).toBe('2020-03-10 13:10'); + }); + + it('shows full date including time of day when subsecond precision', () => { + expect(formatter(new Date('2020-03-10 13:10:00.1'))).toBe('2020-03-10 13:10:00.100'); + }); +}); diff --git a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-echarts/src/Timeseries/controlPanel.tsx b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-echarts/src/Timeseries/controlPanel.tsx index 5986ef44e79e..8e8407fa7195 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-echarts/src/Timeseries/controlPanel.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/plugins/plugin-chart-echarts/src/Timeseries/controlPanel.tsx @@ -18,7 +18,12 @@ */ import React from 'react'; import { legacyValidateInteger, legacyValidateNumber, t } from '@superset-ui/core'; -import { ControlPanelConfig, sections } from '@superset-ui/chart-controls'; +import { + ControlPanelConfig, + D3_TIME_FORMAT_DOCS, + sections, + sharedControls, +} from '@superset-ui/chart-controls'; import { DEFAULT_FORM_DATA, @@ -51,12 +56,14 @@ const { rowLimit, seriesType, stack, + tooltipTimeFormat, truncateYAxis, yAxisBounds, zoomable, xAxisLabelRotation, + xAxisShowMinLabel, + xAxisShowMaxLabel, } = DEFAULT_FORM_DATA; - const config: ControlPanelConfig = { controlPanelSections: [ sections.legacyTimeseriesTime, @@ -314,14 +321,25 @@ const config: ControlPanelConfig = { [legendTypeControl, legendOrientationControl], [legendMarginControl, noopControl], [