This is an automated email from the ASF dual-hosted git repository.
kfaraz pushed a commit to branch 31.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/31.0.0 by this push:
new 7d515f85abb Web console: Final explore QA pass (#17240) (#17241)
7d515f85abb is described below
commit 7d515f85abb1a330d2182d7b18fa56046defb2b9
Author: Vadim Ogievetsky <[email protected]>
AuthorDate: Thu Oct 3 21:39:33 2024 -0700
Web console: Final explore QA pass (#17240) (#17241)
* cleanup
* remove redundancy
* aggregate works for multiple queries
---
.../components/filter-pane/filter-pane.scss | 2 ++
.../components/module-pane/module-pane.scss | 16 ----------------
.../components/module-picker/module-picker.tsx | 17 ++++++++++-------
web-console/src/views/explore-view/explore-view.tsx | 8 --------
.../explore-view/module-repository/module-repository.ts | 6 ++++--
.../src/views/explore-view/modules/bar-chart-module.tsx | 2 ++
.../explore-view/modules/grouping-table-module.tsx | 2 ++
web-console/src/views/explore-view/modules/index.ts | 2 +-
.../explore-view/modules/multi-axis-chart-module.tsx | 2 ++
.../src/views/explore-view/modules/pie-chart-module.tsx | 2 ++
.../views/explore-view/modules/record-table-module.tsx | 2 ++
.../views/explore-view/modules/time-chart-module.tsx | 2 ++
.../src/views/explore-view/query-macros/aggregate.ts | 16 ++++++++--------
13 files changed, 37 insertions(+), 42 deletions(-)
diff --git
a/web-console/src/views/explore-view/components/filter-pane/filter-pane.scss
b/web-console/src/views/explore-view/components/filter-pane/filter-pane.scss
index 9be736495f0..56dd2cff5c7 100644
--- a/web-console/src/views/explore-view/components/filter-pane/filter-pane.scss
+++ b/web-console/src/views/explore-view/components/filter-pane/filter-pane.scss
@@ -22,6 +22,8 @@
display: flex;
flex-wrap: wrap;
gap: 5px;
+ align-items: flex-start;
+ align-content: flex-start;
.filter-icon-button {
pointer-events: none;
diff --git
a/web-console/src/views/explore-view/components/module-pane/module-pane.scss
b/web-console/src/views/explore-view/components/module-pane/module-pane.scss
index 9d180cb8da2..6955ab1b586 100644
--- a/web-console/src/views/explore-view/components/module-pane/module-pane.scss
+++ b/web-console/src/views/explore-view/components/module-pane/module-pane.scss
@@ -47,20 +47,4 @@
left: 0;
}
}
-
- .tile-content {
- width: 100%;
- height: 100%;
-
- &.issue {
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- & > * {
- width: 100%;
- height: 100%;
- }
- }
}
diff --git
a/web-console/src/views/explore-view/components/module-picker/module-picker.tsx
b/web-console/src/views/explore-view/components/module-picker/module-picker.tsx
index d4561e1431f..6ca05de9647 100644
---
a/web-console/src/views/explore-view/components/module-picker/module-picker.tsx
+++
b/web-console/src/views/explore-view/components/module-picker/module-picker.tsx
@@ -17,24 +17,27 @@
*/
import { Button, ButtonGroup, Menu, MenuItem, Popover, Position } from
'@blueprintjs/core';
-import type { IconName } from '@blueprintjs/icons';
import { IconNames } from '@blueprintjs/icons';
import type { JSX } from 'react';
import React from 'react';
+import { ModuleRepository } from '../../module-repository/module-repository';
+
import './module-picker.scss';
export interface ModulePickerProps {
- modules: readonly { id: string; icon: IconName; label: string }[];
selectedModuleId: string | undefined;
onSelectedModuleIdChange(newSelectedModuleId: string): void;
moreMenu?: JSX.Element;
}
export const ModulePicker = React.memo(function ModulePicker(props:
ModulePickerProps) {
- const { modules, selectedModuleId, onSelectedModuleIdChange, moreMenu } =
props;
+ const { selectedModuleId, onSelectedModuleIdChange, moreMenu } = props;
- const selectedTileManifest = modules.find(module => module.id ===
selectedModuleId);
+ const modules = ModuleRepository.getAllModuleEntries();
+ const selectedModule = selectedModuleId
+ ? ModuleRepository.getModule(selectedModuleId)
+ : undefined;
return (
<ButtonGroup className="module-picker" fill>
<Popover
@@ -48,7 +51,7 @@ export const ModulePicker = React.memo(function
ModulePicker(props: ModulePicker
<MenuItem
key={i}
icon={module.icon}
- text={module.label}
+ text={module.title}
onClick={() => onSelectedModuleIdChange(module.id)}
/>
))}
@@ -56,8 +59,8 @@ export const ModulePicker = React.memo(function
ModulePicker(props: ModulePicker
}
>
<Button
- icon={selectedTileManifest ? selectedTileManifest.icon :
IconNames.BOX}
- text={selectedTileManifest ? selectedTileManifest.label : 'Select
module'}
+ icon={selectedModule ? selectedModule.icon : IconNames.BOX}
+ text={selectedModule ? selectedModule.title : 'Select module'}
fill
minimal
rightIcon={IconNames.CARET_DOWN}
diff --git a/web-console/src/views/explore-view/explore-view.tsx
b/web-console/src/views/explore-view/explore-view.tsx
index a8022fd5016..05f6ee69325 100644
--- a/web-console/src/views/explore-view/explore-view.tsx
+++ b/web-console/src/views/explore-view/explore-view.tsx
@@ -323,14 +323,6 @@ export const ExploreView = React.memo(function
ExploreView() {
}}
/>
<ModulePicker
- modules={[
- { id: 'grouping-table', icon: IconNames.PANEL_TABLE, label:
'Grouping table' },
- { id: 'record-table', icon: IconNames.TH, label: 'Record table'
},
- { id: 'time-chart', icon: IconNames.TIMELINE_LINE_CHART, label:
'Time chart' },
- { id: 'bar-chart', icon: IconNames.VERTICAL_BAR_CHART_DESC,
label: 'Bar chart' },
- { id: 'pie-chart', icon: IconNames.PIE_CHART, label: 'Pie chart'
},
- { id: 'multi-axis-chart', icon: IconNames.SERIES_ADD, label:
'Multi-axis chart' },
- ]}
selectedModuleId={moduleId}
onSelectedModuleIdChange={newModuleId => {
const newParameterValues =
getStickyParameterValuesForModule(newModuleId);
diff --git
a/web-console/src/views/explore-view/module-repository/module-repository.ts
b/web-console/src/views/explore-view/module-repository/module-repository.ts
index 0d90a8b6933..d050a2779c5 100644
--- a/web-console/src/views/explore-view/module-repository/module-repository.ts
+++ b/web-console/src/views/explore-view/module-repository/module-repository.ts
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import type { IconName } from '@blueprintjs/icons';
import type { QueryResult, SqlExpression, SqlQuery } from
'@druid-toolkit/query';
import type { CancelToken } from 'axios';
@@ -23,6 +24,7 @@ import type { ParameterDefinition, QuerySource, Stage } from
'../models';
interface ModuleDefinition<P> {
id: string;
+ icon: IconName;
title: string;
parameters: Record<keyof P, ParameterDefinition>;
component: (props: ModuleComponentProps<P>) => any;
@@ -52,7 +54,7 @@ export class ModuleRepository {
return ModuleRepository.repo.get(id);
}
- static getAllModuleIds(): string[] {
- return [...ModuleRepository.repo.keys()];
+ static getAllModuleEntries(): ModuleDefinition<any>[] {
+ return [...ModuleRepository.repo.values()];
}
}
diff --git a/web-console/src/views/explore-view/modules/bar-chart-module.tsx
b/web-console/src/views/explore-view/modules/bar-chart-module.tsx
index 8d597db47dc..21003e43108 100644
--- a/web-console/src/views/explore-view/modules/bar-chart-module.tsx
+++ b/web-console/src/views/explore-view/modules/bar-chart-module.tsx
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import { IconNames } from '@blueprintjs/icons';
import { L } from '@druid-toolkit/query';
import type { ECharts } from 'echarts';
import * as echarts from 'echarts';
@@ -43,6 +44,7 @@ interface BarChartParameterValues {
ModuleRepository.registerModule<BarChartParameterValues>({
id: 'bar-chart',
title: 'Bar chart',
+ icon: IconNames.VERTICAL_BAR_CHART_DESC,
parameters: {
splitColumn: {
type: 'expression',
diff --git
a/web-console/src/views/explore-view/modules/grouping-table-module.tsx
b/web-console/src/views/explore-view/modules/grouping-table-module.tsx
index 06c5408702d..ab19fbcf0ce 100644
--- a/web-console/src/views/explore-view/modules/grouping-table-module.tsx
+++ b/web-console/src/views/explore-view/modules/grouping-table-module.tsx
@@ -17,6 +17,7 @@
*/
import { Button } from '@blueprintjs/core';
+import { IconNames } from '@blueprintjs/icons';
import type { SqlExpression, SqlOrderByDirection, SqlQuery } from
'@druid-toolkit/query';
import { C, F } from '@druid-toolkit/query';
import React, { useMemo } from 'react';
@@ -70,6 +71,7 @@ interface GroupingTableParameterValues {
ModuleRepository.registerModule<GroupingTableParameterValues>({
id: 'grouping-table',
title: 'Grouping table',
+ icon: IconNames.PANEL_TABLE,
parameters: {
splitColumns: {
type: 'expressions',
diff --git a/web-console/src/views/explore-view/modules/index.ts
b/web-console/src/views/explore-view/modules/index.ts
index 14f1d2e86e6..3d8a063b104 100644
--- a/web-console/src/views/explore-view/modules/index.ts
+++ b/web-console/src/views/explore-view/modules/index.ts
@@ -18,7 +18,7 @@
import './grouping-table-module';
import './record-table-module';
+import './time-chart-module';
import './bar-chart-module';
import './pie-chart-module';
-import './time-chart-module';
import './multi-axis-chart-module';
diff --git
a/web-console/src/views/explore-view/modules/multi-axis-chart-module.tsx
b/web-console/src/views/explore-view/modules/multi-axis-chart-module.tsx
index 4aed56d0947..ac0d47f1b18 100644
--- a/web-console/src/views/explore-view/modules/multi-axis-chart-module.tsx
+++ b/web-console/src/views/explore-view/modules/multi-axis-chart-module.tsx
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import { IconNames } from '@blueprintjs/icons';
import type { SqlQuery } from '@druid-toolkit/query';
import { C, F, L } from '@druid-toolkit/query';
import type { ECharts } from 'echarts';
@@ -46,6 +47,7 @@ interface MultiAxisChartParameterValues {
ModuleRepository.registerModule<MultiAxisChartParameterValues>({
id: 'multi-axis-chart',
title: 'Multi-axis chart',
+ icon: IconNames.SERIES_ADD,
parameters: {
timeGranularity: {
type: 'option',
diff --git a/web-console/src/views/explore-view/modules/pie-chart-module.tsx
b/web-console/src/views/explore-view/modules/pie-chart-module.tsx
index e63c95e4a12..69d49ff9b5e 100644
--- a/web-console/src/views/explore-view/modules/pie-chart-module.tsx
+++ b/web-console/src/views/explore-view/modules/pie-chart-module.tsx
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import { IconNames } from '@blueprintjs/icons';
import { C, L } from '@druid-toolkit/query';
import type { ECharts } from 'echarts';
import * as echarts from 'echarts';
@@ -63,6 +64,7 @@ interface PieChartParameterValues {
ModuleRepository.registerModule<PieChartParameterValues>({
id: 'pie-chart',
title: 'Pie chart',
+ icon: IconNames.PIE_CHART,
parameters: {
splitColumn: {
type: 'expression',
diff --git a/web-console/src/views/explore-view/modules/record-table-module.tsx
b/web-console/src/views/explore-view/modules/record-table-module.tsx
index 43e84e60de9..7d2d86ae9ba 100644
--- a/web-console/src/views/explore-view/modules/record-table-module.tsx
+++ b/web-console/src/views/explore-view/modules/record-table-module.tsx
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import { IconNames } from '@blueprintjs/icons';
import { C, SqlQuery } from '@druid-toolkit/query';
import React, { useMemo } from 'react';
@@ -38,6 +39,7 @@ interface RecordTableParameterValues {
ModuleRepository.registerModule<RecordTableParameterValues>({
id: 'record-table',
title: 'Record table',
+ icon: IconNames.TH,
parameters: {
maxRows: {
type: 'number',
diff --git a/web-console/src/views/explore-view/modules/time-chart-module.tsx
b/web-console/src/views/explore-view/modules/time-chart-module.tsx
index c074d89222c..6cc26e681bf 100644
--- a/web-console/src/views/explore-view/modules/time-chart-module.tsx
+++ b/web-console/src/views/explore-view/modules/time-chart-module.tsx
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import { IconNames } from '@blueprintjs/icons';
import { C, F, L, SqlCase } from '@druid-toolkit/query';
import type { ECharts } from 'echarts';
import * as echarts from 'echarts';
@@ -73,6 +74,7 @@ interface TimeChartParameterValues {
ModuleRepository.registerModule<TimeChartParameterValues>({
id: 'time-chart',
title: 'Time chart',
+ icon: IconNames.TIMELINE_LINE_CHART,
parameters: {
timeGranularity: {
type: 'option',
diff --git a/web-console/src/views/explore-view/query-macros/aggregate.ts
b/web-console/src/views/explore-view/query-macros/aggregate.ts
index fd9418416e8..475810519ba 100644
--- a/web-console/src/views/explore-view/query-macros/aggregate.ts
+++ b/web-console/src/views/explore-view/query-macros/aggregate.ts
@@ -24,7 +24,7 @@ import { KNOWN_AGGREGATIONS } from '../utils';
export function rewriteAggregate(query: SqlQuery, measures: Measure[]):
SqlQuery {
const usedMeasures: Map<string, boolean> = new Map();
- let queryToRewrite: SqlQuery | undefined;
+ const queriesToRewrite: SqlQuery[] = [];
const newQuery = query.walk(ex => {
if (ex instanceof SqlFunction && ex.getEffectiveFunctionName() ===
Measure.AGGREGATE) {
if (ex.numArgs() !== 1)
@@ -51,27 +51,27 @@ export function rewriteAggregate(query: SqlQuery, measures:
Measure[]): SqlQuery
if (ex instanceof SqlQuery) {
const queryMeasures = Measure.extractQueryMeasures(ex);
if (queryMeasures.length) {
- queryToRewrite = ex;
+ queriesToRewrite.push(ex);
}
}
return ex;
}) as SqlQuery;
- if (!queryToRewrite) return newQuery;
+ if (!queriesToRewrite.length) return newQuery;
- return newQuery.walk(ex => {
- if (ex === queryToRewrite) {
- return queryToRewrite.applyForEach(
+ return newQuery.walk(subQuery => {
+ if (subQuery instanceof SqlQuery && queriesToRewrite.includes(subQuery)) {
+ return subQuery.applyForEach(
uniq(
filterMap(measures, queryMeasure =>
usedMeasures.get(queryMeasure.name) ? queryMeasure.expression :
undefined,
).flatMap(ex => ex.getUsedColumnNames()),
- ).filter(columnName =>
queryToRewrite!.getSelectIndexForOutputColumn(columnName) === -1),
+ ).filter(columnName =>
subQuery.getSelectIndexForOutputColumn(columnName) === -1),
(q, columnName) => q.addSelect(C(columnName)),
);
}
- return ex;
+ return subQuery;
}) as SqlQuery;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]