This is an automated email from the ASF dual-hosted git repository.

amatya pushed a commit to branch 27.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/27.0.0 by this push:
     new e5c8c7aca9 Web console: make typing fun again (#14632) (#14646)
e5c8c7aca9 is described below

commit e5c8c7aca9143fa4e8b59503c3883030c553b0f5
Author: AmatyaAvadhanula <[email protected]>
AuthorDate: Mon Jul 24 17:58:20 2023 +0530

    Web console: make typing fun again (#14632) (#14646)
    
    * extract common function
    
    * make typing fun again
    
    Co-authored-by: Vadim Ogievetsky <[email protected]>
---
 web-console/src/react-table/react-table-inputs.tsx       | 16 ++++++++++------
 web-console/src/utils/date.ts                            |  4 ++++
 .../execution-stages-pane/execution-stages-pane.tsx      |  3 ++-
 .../recent-query-task-panel/recent-query-task-panel.tsx  |  9 +++++++--
 4 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/web-console/src/react-table/react-table-inputs.tsx 
b/web-console/src/react-table/react-table-inputs.tsx
index 4be942cd79..50937750b3 100644
--- a/web-console/src/react-table/react-table-inputs.tsx
+++ b/web-console/src/react-table/react-table-inputs.tsx
@@ -41,7 +41,7 @@ interface FilterRendererProps {
 
 export function GenericFilterInput({ column, filter, onChange, key }: 
FilterRendererProps) {
   const [menuOpen, setMenuOpen] = useState(false);
-  const [focused, setFocused] = useState(false);
+  const [focusedText, setFocusedText] = useState<string | undefined>();
 
   const enableComparisons = 
String(column.headerClassName).includes('enable-comparisons');
 
@@ -53,7 +53,7 @@ export function GenericFilterInput({ column, filter, 
onChange, key }: FilterRend
   return (
     <InputGroup
       className={classNames('generic-filter-input', {
-        'hide-icon': !filter && !(menuOpen || focused),
+        'hide-icon': !filter && !(menuOpen || typeof focusedText === 'string'),
       })}
       key={key}
       leftElement={
@@ -79,14 +79,18 @@ export function GenericFilterInput({ column, filter, 
onChange, key }: FilterRend
           <Button className="filter-mode-button" icon={filterModeToIcon(mode)} 
minimal />
         </Popover2>
       }
-      value={needle}
-      onChange={e => onChange(combineModeAndNeedle(mode, e.target.value))}
+      value={focusedText ?? needle}
+      onChange={e => {
+        const enteredText = e.target.value;
+        setFocusedText(enteredText);
+        onChange(combineModeAndNeedle(mode, enteredText));
+      }}
       rightElement={
         filter ? <Button icon={IconNames.CROSS} minimal onClick={() => 
onChange('')} /> : undefined
       }
-      onFocus={() => setFocused(true)}
+      onFocus={() => setFocusedText(needle)}
       onBlur={e => {
-        setFocused(false);
+        setFocusedText(undefined);
         if (filter && !e.target.value) onChange('');
       }}
     />
diff --git a/web-console/src/utils/date.ts b/web-console/src/utils/date.ts
index dcc4374d4a..ecab2c39ca 100644
--- a/web-console/src/utils/date.ts
+++ b/web-console/src/utils/date.ts
@@ -24,6 +24,10 @@ export function dateToIsoDateString(date: Date): string {
   return date.toISOString().slice(0, 10);
 }
 
+export function prettyFormatIsoDate(isoDate: string): string {
+  return isoDate.replace('T', ' ').replace(/\.\d\d\dZ$/, '');
+}
+
 export function utcToLocalDate(utcDate: Date): Date {
   // Function removes the local timezone of the date and displays it in UTC
   return new Date(utcDate.getTime() + utcDate.getTimezoneOffset() * 60000);
diff --git 
a/web-console/src/views/workbench-view/execution-stages-pane/execution-stages-pane.tsx
 
b/web-console/src/views/workbench-view/execution-stages-pane/execution-stages-pane.tsx
index 98035b3ed5..57827534df 100644
--- 
a/web-console/src/views/workbench-view/execution-stages-pane/execution-stages-pane.tsx
+++ 
b/web-console/src/views/workbench-view/execution-stages-pane/execution-stages-pane.tsx
@@ -49,6 +49,7 @@ import {
   formatInteger,
   formatPercent,
   oneOf,
+  prettyFormatIsoDate,
   twoLines,
 } from '../../../utils';
 
@@ -685,7 +686,7 @@ ${title} uncompressed size: ${formatBytesCompact(
             if (!value) return null;
             return (
               <div title={value + (duration ? 
`/${formatDurationWithMs(duration)}` : '')}>
-                <div>{value.replace('T', ' ').replace(/\.\d\d\dZ$/, '')}</div>
+                <div>{prettyFormatIsoDate(value)}</div>
                 <div>{duration ? formatDurationDynamic(duration) : ''}</div>
               </div>
             );
diff --git 
a/web-console/src/views/workbench-view/recent-query-task-panel/recent-query-task-panel.tsx
 
b/web-console/src/views/workbench-view/recent-query-task-panel/recent-query-task-panel.tsx
index bd31c88693..13e8f716a7 100644
--- 
a/web-console/src/views/workbench-view/recent-query-task-panel/recent-query-task-panel.tsx
+++ 
b/web-console/src/views/workbench-view/recent-query-task-panel/recent-query-task-panel.tsx
@@ -32,7 +32,12 @@ import { Execution, WorkbenchQuery } from 
'../../../druid-models';
 import { cancelTaskExecution, getTaskExecution } from '../../../helpers';
 import { useClock, useInterval, useQueryManager } from '../../../hooks';
 import { AppToaster } from '../../../singletons';
-import { downloadQueryDetailArchive, formatDuration, queryDruidSql } from 
'../../../utils';
+import {
+  downloadQueryDetailArchive,
+  formatDuration,
+  prettyFormatIsoDate,
+  queryDruidSql,
+} from '../../../utils';
 import { CancelQueryDialog } from '../cancel-query-dialog/cancel-query-dialog';
 import { workStateStore } from '../work-state-store';
 
@@ -231,7 +236,7 @@ LIMIT 100`,
                       style={{ color }}
                     />
                     <div className="timing">
-                      {w.createdTime.replace('T', ' ').replace(/\.\d\d\dZ$/, 
'') +
+                      {prettyFormatIsoDate(w.createdTime) +
                         (duration > 0 ? ` (${formatDuration(duration)})` : '')}
                     </div>
                   </div>


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

Reply via email to