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 d8e3ac89c3a Web console: don't assume that activeTasks is an array 
(#17254) (#17258)
d8e3ac89c3a is described below

commit d8e3ac89c3afaf269015297b4b16c0c02fc2d669
Author: Kashif Faraz <[email protected]>
AuthorDate: Sat Oct 5 18:44:24 2024 +0530

    Web console: don't assume that activeTasks is an array (#17254) (#17258)
    
    Co-authored-by: Vadim Ogievetsky <[email protected]>
---
 .../explore-view/components/module-pane/module-pane.tsx |  8 ++++----
 web-console/src/views/explore-view/explore-state.ts     | 10 ++++++----
 web-console/src/views/explore-view/explore-view.tsx     | 17 ++++++++++-------
 web-console/src/views/explore-view/models/parameter.ts  |  6 +++---
 .../src/views/supervisors-view/supervisors-view.tsx     |  8 ++++++--
 5 files changed, 29 insertions(+), 20 deletions(-)

diff --git 
a/web-console/src/views/explore-view/components/module-pane/module-pane.tsx 
b/web-console/src/views/explore-view/components/module-pane/module-pane.tsx
index b57a078ed73..b360effc87c 100644
--- a/web-console/src/views/explore-view/components/module-pane/module-pane.tsx
+++ b/web-console/src/views/explore-view/components/module-pane/module-pane.tsx
@@ -20,7 +20,7 @@ import { ResizeSensor } from '@blueprintjs/core';
 import type { QueryResult, SqlExpression, SqlQuery } from 
'@druid-toolkit/query';
 import React, { useMemo, useState } from 'react';
 
-import type { ParameterDefinition, QuerySource } from '../../models';
+import type { ParameterDefinition, ParameterValues, QuerySource } from 
'../../models';
 import { effectiveParameterDefault, Stage } from '../../models';
 import { ModuleRepository } from '../../module-repository/module-repository';
 import { Issue } from '../issue/issue';
@@ -28,7 +28,7 @@ import { Issue } from '../issue/issue';
 import './module-pane.scss';
 
 function fillInDefaults(
-  parameterValues: Record<string, any>,
+  parameterValues: ParameterValues,
   parameters: Record<string, ParameterDefinition>,
   querySource: QuerySource,
 ): Record<string, any> {
@@ -46,8 +46,8 @@ export interface ModulePaneProps {
   where: SqlExpression;
   setWhere(where: SqlExpression): void;
 
-  parameterValues: Record<string, any>;
-  setParameterValues(parameters: Record<string, any>): void;
+  parameterValues: ParameterValues;
+  setParameterValues(parameters: ParameterValues): void;
   runSqlQuery(query: string | SqlQuery): Promise<QueryResult>;
 }
 
diff --git a/web-console/src/views/explore-view/explore-state.ts 
b/web-console/src/views/explore-view/explore-state.ts
index 087c03ce8ea..07a53d6de70 100644
--- a/web-console/src/views/explore-view/explore-state.ts
+++ b/web-console/src/views/explore-view/explore-state.ts
@@ -42,7 +42,7 @@ interface ExploreStateValue {
   showSourceQuery?: boolean;
   where: SqlExpression;
   moduleId: string;
-  parameterValues: Record<string, any>;
+  parameterValues: ParameterValues;
 }
 
 export class ExploreState {
@@ -64,7 +64,7 @@ export class ExploreState {
   public readonly showSourceQuery: boolean;
   public readonly where: SqlExpression;
   public readonly moduleId: string;
-  public readonly parameterValues: Record<string, any>;
+  public readonly parameterValues: ParameterValues;
 
   public readonly parsedSource: SqlQuery | undefined;
   public readonly parseError: string | undefined;
@@ -178,8 +178,10 @@ export class ExploreState {
       parameterValues = {};
     } else {
       moduleId = 'grouping-table';
-      parameterValues = this.moduleId === moduleId ? this.parameterValues : {};
-      parameterValues.splitColumns = [ExpressionMeta.fromColumn(column)];
+      parameterValues = {
+        ...(this.moduleId === moduleId ? this.parameterValues : {}),
+        splitColumns: [ExpressionMeta.fromColumn(column)],
+      };
     }
 
     return this.change({
diff --git a/web-console/src/views/explore-view/explore-view.tsx 
b/web-console/src/views/explore-view/explore-view.tsx
index fead1b5c7b2..546c47b190b 100644
--- a/web-console/src/views/explore-view/explore-view.tsx
+++ b/web-console/src/views/explore-view/explore-view.tsx
@@ -186,7 +186,7 @@ export const ExploreView = React.memo(function 
ExploreView() {
     }
   }, [module, parameterValues, querySourceState.data]);
 
-  function setModuleId(moduleId: string, parameterValues: Record<string, any>) 
{
+  function setModuleId(moduleId: string, parameterValues: ParameterValues) {
     if (exploreState.moduleId === moduleId) return;
     setExploreState(exploreState.change({ moduleId, parameterValues }));
   }
@@ -326,7 +326,7 @@ export const ExploreView = React.memo(function 
ExploreView() {
           <ModulePicker
             selectedModuleId={moduleId}
             onSelectedModuleIdChange={newModuleId => {
-              const newParameterValues = 
getStickyParameterValuesForModule(newModuleId);
+              let newParameterValues = 
getStickyParameterValuesForModule(newModuleId);
 
               const oldModule = ModuleRepository.getModule(moduleId);
               const newModule = ModuleRepository.getModule(newModuleId);
@@ -349,11 +349,14 @@ export const ExploreView = React.memo(function 
ExploreView() {
                   );
                   if (!target) continue;
 
-                  newParameterValues[target[0]] = adjustTransferValue(
-                    parameterValue,
-                    oldParameterDefinition.type,
-                    target[1].type,
-                  );
+                  newParameterValues = {
+                    ...newParameterValues,
+                    [target[0]]: adjustTransferValue(
+                      parameterValue,
+                      oldParameterDefinition.type,
+                      target[1].type,
+                    ),
+                  };
                 }
               }
 
diff --git a/web-console/src/views/explore-view/models/parameter.ts 
b/web-console/src/views/explore-view/models/parameter.ts
index f4a5f622d73..7884a32ed8d 100644
--- a/web-console/src/views/explore-view/models/parameter.ts
+++ b/web-console/src/views/explore-view/models/parameter.ts
@@ -26,9 +26,9 @@ import type { QuerySource } from './query-source';
 
 export type OptionValue = string | number;
 
-export type ModuleFunctor<T> = T | ((options: { parameterValues: 
Record<string, any> }) => T);
+export type ModuleFunctor<T> = T | ((options: { parameterValues: 
ParameterValues }) => T);
 
-export function evaluateFunctor<T>(fn: ModuleFunctor<T>, parameterValues: 
Record<string, any>): T {
+export function evaluateFunctor<T>(fn: ModuleFunctor<T>, parameterValues: 
ParameterValues): T {
   if (typeof fn === 'function') {
     return (fn as any)({ parameterValues });
   } else {
@@ -144,7 +144,7 @@ export function getModuleOptionLabel(
   );
 }
 
-export type ParameterValues = Record<string, any>;
+export type ParameterValues = Readonly<Record<string, any>>;
 export type Parameters = Record<string, ParameterDefinition>;
 
 // -----------------------------------------------------
diff --git a/web-console/src/views/supervisors-view/supervisors-view.tsx 
b/web-console/src/views/supervisors-view/supervisors-view.tsx
index 5988dff1031..f963e449b48 100644
--- a/web-console/src/views/supervisors-view/supervisors-view.tsx
+++ b/web-console/src/views/supervisors-view/supervisors-view.tsx
@@ -843,10 +843,14 @@ export class SupervisorsView extends React.PureComponent<
             accessor: 'stats',
             Cell: ({ value, original }) => {
               if (!value) return;
-              const activeTaskIds: string[] | undefined = deepGet(
+              const activeTasks: SupervisorStatusTask[] | undefined = deepGet(
                 original,
                 'status.payload.activeTasks',
-              )?.map((t: SupervisorStatusTask) => t.id);
+              );
+              const activeTaskIds: string[] | undefined = 
Array.isArray(activeTasks)
+                ? activeTasks.map((t: SupervisorStatusTask) => t.id)
+                : undefined;
+
               const c = getTotalSupervisorStats(value, statsKey, 
activeTaskIds);
               const seconds = getRowStatsKeySeconds(statsKey);
               const totalLabel = `Total (past ${statsKey}): `;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to