public inbox for [email protected]  
help / color / mirror / Atom feed
[pgAdmin][RM7308]: Server activity - Preserve sorting on refresh
3+ messages / 2 participants
[nested] [flat]

* [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh
@ 2022-04-13 17:20 Pradip Parkale <[email protected]>
  2022-04-14 03:12 ` Re: [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Pradip Parkale <[email protected]>
  0 siblings, 1 reply; 3+ messages in thread

From: Pradip Parkale @ 2022-04-13 17:20 UTC (permalink / raw)
  To: pgadmin-hackers

Hi Hackers,

Please find attached for #7308.

   1. Sorting should be preserved when the server activity is refreshed and
   the tab changes.
   2. Also, I have fixed the issue where on database selection, 'Session'
   should be selected by default.


-- 
Thanks & Regards,
Pradip Parkale
Software Engineer | EnterpriseDB Corporation


Attachments:

  [application/octet-stream] RM7308.patch (6.2K, 3-RM7308.patch)
  download | inline diff:
diff --git a/web/pgadmin/dashboard/static/js/Dashboard.jsx b/web/pgadmin/dashboard/static/js/Dashboard.jsx
index 4b7d779cc..a7f33e712 100644
--- a/web/pgadmin/dashboard/static/js/Dashboard.jsx
+++ b/web/pgadmin/dashboard/static/js/Dashboard.jsx
@@ -27,6 +27,7 @@ import ActiveQuery from './ActiveQuery.ui';
 import _ from 'lodash';
 import CachedIcon from '@mui/icons-material/Cached';
 import EmptyPanelMessage from '../../../static/js/components/EmptyPanelMessage';
+import TabPanel from '../../../static/js/components/TabPanel';
 
 function parseData(data) {
   var res = [];
@@ -123,16 +124,15 @@ export default function Dashboard({
   ...props
 }) {
   const classes = useStyles();
-  let tab = ['Sessions', 'Locks', 'Prepared Transactions'];
+  let tabs = ['Sessions', 'Locks', 'Prepared Transactions'];
   const [dashData, setdashData] = useState([]);
   const [msg, setMsg] = useState('');
-  const[infoMsg, setInfo] = useState('');
   const [val, setVal] = useState(0);
   const [refresh, setRefresh] = useState(false);
   const [schemaDict, setSchemaDict] = React.useState({});
 
   if (!did) {
-    tab.push('Configuration');
+    tabs.push('Configuration');
   }
   val == 3 && did && setVal(0);
   const tabChanged = (e, tabVal) => {
@@ -233,11 +233,9 @@ export default function Dashboard({
                     .delete(url)
                     .then(function (res) {
                       if (res.data == gettext('Success')) {
-                        setInfo(txtSuccess);
                         Notify.success(txtSuccess);
                         setRefresh(!refresh);
                       } else {
-                        setInfo(txtError);
                         Notify.error(txtError);
                       }
                     })
@@ -302,11 +300,12 @@ export default function Dashboard({
                     .delete(url)
                     .then(function (res) {
                       if (res.data == gettext('Success')) {
-                        setInfo(txtSuccess);
                         Notify.success(txtSuccess);
+                        setRefresh(!refresh);
                       } else {
-                        setInfo(txtError);
                         Notify.error(txtError);
+                        setRefresh(!refresh);
+
                       }
                     })
                     .catch(function (error) {
@@ -722,6 +721,10 @@ export default function Dashboard({
       return false;
     }
   };
+  useEffect(() => {
+    // Reset Tab values to 0, so that it will select "Sessions" on node changed.
+    nodeData?._type === 'database' && setVal(0);
+  },[nodeData]);
 
   useEffect(() => {
     let url,
@@ -770,7 +773,7 @@ export default function Dashboard({
     if (message != '') {
       setMsg(message);
     }
-  }, [nodeData, val, did, preferences, infoMsg, refresh, props.dbConnected]);
+  }, [nodeData, val, did, preferences, refresh, props.dbConnected]);
 
   const RefreshButton = () =>{
     return(
@@ -810,33 +813,47 @@ export default function Dashboard({
               >
                 {gettext('Server activity')}{' '}
               </Box>
-              <Box display="flex">
-                <Tabs
-                  value={val}
-                  onChange={tabChanged}
-                  className={classes.searchInput}
-                >
-                  {tab.map((tabValue, i) => {
-                    return <Tab key={i} label={tabValue} />;
-                  })}
-                </Tabs>
-                <RefreshButton/>
-              </Box>
-              <Box flexGrow={1}>
-                <PgTable
-                  caveTable={false}
-                  columns={
-                    val === 0
-                      ? activityColumns
-                      : val === 1
-                        ? databaseLocksColumns
-                        : val == 2
-                          ? databasePreparedColumns
-                          : serverConfigColumns
-                  }
-                  data={dashData}
-                  schema={schemaDict}
-                ></PgTable>
+              <Box height="100%" display="flex" flexDirection="column">
+                <Box>
+                  <Tabs
+                    value={val}
+                    onChange={tabChanged}
+                  >
+                    {tabs.map((tabValue, i) => {
+                      return <Tab key={i} label={tabValue} />;
+                    })}
+                    <RefreshButton/>
+                  </Tabs>
+                </Box>
+                <TabPanel value={val} index={0} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={activityColumns}
+                    data={dashData}
+                    schema={schemaDict}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={val} index={1} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={databaseLocksColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={val} index={2} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={databasePreparedColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={val} index={3} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={serverConfigColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
               </Box>
             </Box>
           </Box>
diff --git a/web/pgadmin/static/js/components/PgTable.jsx b/web/pgadmin/static/js/components/PgTable.jsx
index 35ed86488..b3e99f740 100644
--- a/web/pgadmin/static/js/components/PgTable.jsx
+++ b/web/pgadmin/static/js/components/PgTable.jsx
@@ -274,6 +274,7 @@ export default function PgTable({ columns, data, isSelectRow, caveTable=true, ..
       data,
       defaultColumn,
       isSelectRow,
+      autoResetSortBy: false,
     },
     useGlobalFilter,
     useSortBy,


^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh
  2022-04-13 17:20 [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Pradip Parkale <[email protected]>
@ 2022-04-14 03:12 ` Pradip Parkale <[email protected]>
  2022-04-14 05:43   ` Re: [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Akshay Joshi <[email protected]>
  0 siblings, 1 reply; 3+ messages in thread

From: Pradip Parkale @ 2022-04-14 03:12 UTC (permalink / raw)
  To: pgadmin-hackers

Hi Hackers,

Please ignore my previous email. Here is the updated patch.

On Wed, Apr 13, 2022 at 10:50 PM Pradip Parkale <
[email protected]> wrote:

> Hi Hackers,
>
> Please find attached for #7308.
>
>    1. Sorting should be preserved when the server activity is refreshed
>    and the tab changes.
>    2. Also, I have fixed the issue where on database selection, 'Session'
>    should be selected by default.
>
>
> --
> Thanks & Regards,
> Pradip Parkale
> Software Engineer | EnterpriseDB Corporation
>


-- 
Thanks & Regards,
Pradip Parkale
Software Engineer | EnterpriseDB Corporation


Attachments:

  [application/octet-stream] RM7308.patch (7.3K, 3-RM7308.patch)
  download | inline diff:
diff --git a/web/pgadmin/dashboard/static/js/Dashboard.jsx b/web/pgadmin/dashboard/static/js/Dashboard.jsx
index 4b7d779cc..ebf4c082b 100644
--- a/web/pgadmin/dashboard/static/js/Dashboard.jsx
+++ b/web/pgadmin/dashboard/static/js/Dashboard.jsx
@@ -27,6 +27,7 @@ import ActiveQuery from './ActiveQuery.ui';
 import _ from 'lodash';
 import CachedIcon from '@mui/icons-material/Cached';
 import EmptyPanelMessage from '../../../static/js/components/EmptyPanelMessage';
+import TabPanel from '../../../static/js/components/TabPanel';
 
 function parseData(data) {
   var res = [];
@@ -123,20 +124,19 @@ export default function Dashboard({
   ...props
 }) {
   const classes = useStyles();
-  let tab = ['Sessions', 'Locks', 'Prepared Transactions'];
+  let tabs = ['Sessions', 'Locks', 'Prepared Transactions'];
   const [dashData, setdashData] = useState([]);
   const [msg, setMsg] = useState('');
-  const[infoMsg, setInfo] = useState('');
-  const [val, setVal] = useState(0);
+  const [tabVal, setTabVal] = useState(0);
   const [refresh, setRefresh] = useState(false);
   const [schemaDict, setSchemaDict] = React.useState({});
 
   if (!did) {
-    tab.push('Configuration');
+    tabs.push('Configuration');
   }
-  val == 3 && did && setVal(0);
+  tabVal == 3 && did && setTabVal(0);
   const tabChanged = (e, tabVal) => {
-    setVal(tabVal);
+    setTabVal(tabVal);
   };
 
   const serverConfigColumns = [
@@ -233,11 +233,9 @@ export default function Dashboard({
                     .delete(url)
                     .then(function (res) {
                       if (res.data == gettext('Success')) {
-                        setInfo(txtSuccess);
                         Notify.success(txtSuccess);
                         setRefresh(!refresh);
                       } else {
-                        setInfo(txtError);
                         Notify.error(txtError);
                       }
                     })
@@ -302,11 +300,12 @@ export default function Dashboard({
                     .delete(url)
                     .then(function (res) {
                       if (res.data == gettext('Success')) {
-                        setInfo(txtSuccess);
                         Notify.success(txtSuccess);
+                        setRefresh(!refresh);
                       } else {
-                        setInfo(txtError);
                         Notify.error(txtError);
+                        setRefresh(!refresh);
+
                       }
                     })
                     .catch(function (error) {
@@ -722,6 +721,10 @@ export default function Dashboard({
       return false;
     }
   };
+  useEffect(() => {
+    // Reset Tab values to 0, so that it will select "Sessions" on node changed.
+    nodeData?._type === 'database' && setTabVal(0);
+  },[nodeData]);
 
   useEffect(() => {
     let url,
@@ -731,11 +734,11 @@ export default function Dashboard({
 
     if (sid && props.serverConnected) {
 
-      if (val === 0) {
+      if (tabVal === 0) {
         url = url_for('dashboard.activity');
-      } else if (val === 1) {
+      } else if (tabVal === 1) {
         url = url_for('dashboard.locks');
-      } else if (val === 2) {
+      } else if (tabVal === 2) {
         url = url_for('dashboard.prepared');
       } else {
         url = url_for('dashboard.config');
@@ -755,10 +758,10 @@ export default function Dashboard({
           .then((res) => {
             setdashData(parseData(res.data));
           })
-          .catch((e) => {
+          .catch((error) => {
             Notify.alert(
               gettext('Failed to retrieve data from the server.'),
-              gettext(e.message)
+              _.isUndefined(error.response) ? error.message : error.response.data.errormsg
             );
             // show failed message.
             setMsg(gettext('Failed to retrieve data from the server.'));
@@ -770,7 +773,7 @@ export default function Dashboard({
     if (message != '') {
       setMsg(message);
     }
-  }, [nodeData, val, did, preferences, infoMsg, refresh, props.dbConnected]);
+  }, [nodeData, tabVal, did, preferences, refresh, props.dbConnected]);
 
   const RefreshButton = () =>{
     return(
@@ -810,33 +813,47 @@ export default function Dashboard({
               >
                 {gettext('Server activity')}{' '}
               </Box>
-              <Box display="flex">
-                <Tabs
-                  value={val}
-                  onChange={tabChanged}
-                  className={classes.searchInput}
-                >
-                  {tab.map((tabValue, i) => {
-                    return <Tab key={i} label={tabValue} />;
-                  })}
-                </Tabs>
-                <RefreshButton/>
-              </Box>
-              <Box flexGrow={1}>
-                <PgTable
-                  caveTable={false}
-                  columns={
-                    val === 0
-                      ? activityColumns
-                      : val === 1
-                        ? databaseLocksColumns
-                        : val == 2
-                          ? databasePreparedColumns
-                          : serverConfigColumns
-                  }
-                  data={dashData}
-                  schema={schemaDict}
-                ></PgTable>
+              <Box height="100%" display="flex" flexDirection="column">
+                <Box>
+                  <Tabs
+                    value={tabVal}
+                    onChange={tabChanged}
+                  >
+                    {tabs.map((tabValue, i) => {
+                      return <Tab key={i} label={tabValue} />;
+                    })}
+                    <RefreshButton/>
+                  </Tabs>
+                </Box>
+                <TabPanel value={tabVal} index={0} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={activityColumns}
+                    data={dashData}
+                    schema={schemaDict}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={tabVal} index={1} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={databaseLocksColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={tabVal} index={2} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={databasePreparedColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
+                <TabPanel value={tabVal} index={3} classNameRoot={classes.tabPanel}>
+                  <PgTable
+                    caveTable={false}
+                    columns={serverConfigColumns}
+                    data={dashData}
+                  ></PgTable>
+                </TabPanel>
               </Box>
             </Box>
           </Box>
diff --git a/web/pgadmin/static/js/components/PgTable.jsx b/web/pgadmin/static/js/components/PgTable.jsx
index 35ed86488..b3e99f740 100644
--- a/web/pgadmin/static/js/components/PgTable.jsx
+++ b/web/pgadmin/static/js/components/PgTable.jsx
@@ -274,6 +274,7 @@ export default function PgTable({ columns, data, isSelectRow, caveTable=true, ..
       data,
       defaultColumn,
       isSelectRow,
+      autoResetSortBy: false,
     },
     useGlobalFilter,
     useSortBy,


^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh
  2022-04-13 17:20 [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Pradip Parkale <[email protected]>
  2022-04-14 03:12 ` Re: [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Pradip Parkale <[email protected]>
@ 2022-04-14 05:43   ` Akshay Joshi <[email protected]>
  0 siblings, 0 replies; 3+ messages in thread

From: Akshay Joshi @ 2022-04-14 05:43 UTC (permalink / raw)
  To: Pradip Parkale <[email protected]>; +Cc: pgadmin-hackers

Thanks, the patch applied.

On Thu, Apr 14, 2022 at 8:42 AM Pradip Parkale <
[email protected]> wrote:

> Hi Hackers,
>
> Please ignore my previous email. Here is the updated patch.
>
> On Wed, Apr 13, 2022 at 10:50 PM Pradip Parkale <
> [email protected]> wrote:
>
>> Hi Hackers,
>>
>> Please find attached for #7308.
>>
>>    1. Sorting should be preserved when the server activity is refreshed
>>    and the tab changes.
>>    2. Also, I have fixed the issue where on database selection,
>>    'Session' should be selected by default.
>>
>>
>> --
>> Thanks & Regards,
>> Pradip Parkale
>> Software Engineer | EnterpriseDB Corporation
>>
>
>
> --
> Thanks & Regards,
> Pradip Parkale
> Software Engineer | EnterpriseDB Corporation
>


-- 
*Thanks & Regards*
*Akshay Joshi*
*pgAdmin Hacker | Principal Software Architect*
*EDB Postgres <http://edbpostgres.com>*

*Mobile: +91 976-788-8246*


^ permalink  raw  reply  [nested|flat] 3+ messages in thread


end of thread, other threads:[~2022-04-14 05:43 UTC | newest]

Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2022-04-13 17:20 [pgAdmin][RM7308]: Server activity - Preserve sorting on refresh Pradip Parkale <[email protected]>
2022-04-14 03:12 ` Pradip Parkale <[email protected]>
2022-04-14 05:43   ` Akshay Joshi <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox