Fix issues found when testing Flask upgrade and wcDocker changes. #6479

This commit is contained in:
Aditya Toshniwal 2023-11-08 18:07:32 +05:30
parent ef0b30b1ca
commit 85dd1e92ad
13 changed files with 51 additions and 46 deletions

View File

@ -415,6 +415,8 @@ SECURITY_EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE = \
# Email address validation
##########################################################################
CHECK_EMAIL_DELIVERABILITY = False
SECURITY_EMAIL_VALIDATOR_ARGS = \
{"check_deliverability": CHECK_EMAIL_DELIVERABILITY}
##########################################################################
# Upgrade checks

View File

@ -491,6 +491,8 @@ def create_app(app_name=None):
# CSRF Token expiration till session expires
'WTF_CSRF_TIME_LIMIT': getattr(config, 'CSRF_TIME_LIMIT', None),
'WTF_CSRF_METHODS': ['GET', 'POST', 'PUT', 'DELETE'],
# Disable deliverable check for email addresss
'SECURITY_EMAIL_VALIDATOR_ARGS': config.SECURITY_EMAIL_VALIDATOR_ARGS
}))
if 'SCRIPT_NAME' in os.environ and os.environ["SCRIPT_NAME"]:

View File

@ -590,6 +590,11 @@ function getFinalTheme(baseTheme) {
color: baseTheme.otherVars.activeColor,
},
}
},
MuiBackdrop: {
root: {
backgroundColor: baseTheme.otherVars.loader.backgroundColor,
}
}
}
}, baseTheme);

View File

@ -11,6 +11,7 @@ export default function rcdockOverride(theme) {
return {
'.dock-layout': {
height: '100%',
...theme.mixins.panelBorder.top,
'& .dock-ink-bar': {
height: '2px',
backgroundColor: theme.otherVars.activeBorder,

View File

@ -86,7 +86,7 @@ export default function(basicSettings) {
},
borderColor: '#dde0e6',
loader: {
backgroundColor: alpha('#000', 0.65),
backgroundColor: alpha('#090d11', 0.6),
color: '#fff',
},
errorColor: '#E53935',

View File

@ -35,7 +35,7 @@ ExternalIcon.propTypes = {
export const QueryToolIcon = ({style})=><ExternalIcon Icon={QueryToolSvg} style={{height: '1rem', ...style}} data-label="QueryToolIcon" />;
QueryToolIcon.propTypes = {style: PropTypes.object};
export const ViewDataIcon = ({style})=><ExternalIcon Icon={ViewDataSvg} style={{height: '0.8rem', ...style}} data-label="ViewDataIcon" />;
export const ViewDataIcon = ({style})=><ExternalIcon Icon={ViewDataSvg} style={{height: '0.85rem', ...style}} data-label="ViewDataIcon" />;
ViewDataIcon.propTypes = {style: PropTypes.object};
export const SaveDataIcon = ({style})=><ExternalIcon Icon={SaveDataSvg} style={{height: '1rem', ...style}} data-label="SaveDataIcon" />;

View File

@ -17,9 +17,6 @@ export const tabPanelStyles = makeStyles((theme)=>({
root: {
...theme.mixins.tabPanel,
},
content: {
height: '100%',
}
}));
/* Material UI does not have any tabpanel component, we create one for us */

View File

@ -1,4 +1,4 @@
import React, { useEffect, useLayoutEffect, useState } from 'react';
import React, { useEffect, useState } from 'react';
import { usePgAdmin } from '../BrowserComponent';
import { Box } from '@material-ui/core';
import { QueryToolIcon, RowFilterIcon, TerminalIcon, ViewDataIcon } from '../components/ExternalIcon';
@ -51,13 +51,12 @@ export default function ObjectExplorerToolbar() {
useEffect(()=>{
const deregister = pgAdmin.Browser.Events.on('pgadmin:nw-enable-disable-menu-items', _.debounce(checkMenuState, 100));
checkMenuState();
return ()=>{
deregister();
};
}, []);
useLayoutEffect(_.debounce(checkMenuState, 100), []);
return (
<Box display="flex" alignItems="center" gridGap={'2px'}>
<PgButtonGroup size="small">
@ -65,7 +64,7 @@ export default function ObjectExplorerToolbar() {
<ToolbarButton icon={<ViewDataIcon />} menuItem={menus['view_all_rows_context_table']} />
<ToolbarButton icon={<RowFilterIcon />} menuItem={menus['view_filtered_rows_context_table']} />
<ToolbarButton icon={<SearchOutlinedIcon style={{height: '1.4rem'}} />} menuItem={menus['search_objects']} />
<ToolbarButton icon={<TerminalIcon />} menuItem={menus['psql']} />
{!_.isUndefined(menus['psql']) && <ToolbarButton icon={<TerminalIcon />} menuItem={menus['psql']} />}
</PgButtonGroup>
</Box>
);

View File

@ -15,7 +15,7 @@ import { usePgAdmin } from '../../../static/js/BrowserComponent';
export default function withStandardTabInfo(Component, tabId) {
// eslint-disable-next-line react/display-name
const HOCComponent = (props)=>{
const [[isStale, nodeItem, nodeData], setNodeInfo] = useState([]);
const [[isStale, nodeItem, nodeData], setNodeInfo] = useState([true, undefined, undefined]);
const pgAdmin = usePgAdmin();
const node = nodeData && pgAdmin.Browser.Nodes[nodeData?._type];
const treeNodeInfo = pgAdmin.Browser.tree?.getTreeNodeHierarchy(nodeItem);
@ -29,11 +29,11 @@ export default function withStandardTabInfo(Component, tabId) {
}
setIsActive(layoutDocker.isTabVisible(tabId));
const onTabActive = _.debounce((currentTabId)=>{
if(currentTabId == tabId) {
setIsActive(true);
const onTabActive = _.debounce(()=>{
if(layoutDocker.isTabVisible(tabId)) {
!isActive && setIsActive(true);
} else {
setIsActive(false);
isActive && setIsActive(false);
}
}, 100);
@ -45,14 +45,7 @@ export default function withStandardTabInfo(Component, tabId) {
});
let deregisterActive = layoutDocker.eventBus.registerListener(LAYOUT_EVENTS.ACTIVE, onTabActive);
// if there is any dock changes to the tab and it appears to be active/inactive
let deregisterChange = layoutDocker.eventBus.registerListener(LAYOUT_EVENTS.CHANGE, (currentTabId)=>{
if(currentTabId != tabId) return;
if(layoutDocker.isTabVisible(tabId) && !isActive) {
setIsActive(true);
} else {
setIsActive(false);
}
});
let deregisterChange = layoutDocker.eventBus.registerListener(LAYOUT_EVENTS.CHANGE, onTabActive);
return ()=>{
onTabActive?.cancel();

View File

@ -316,7 +316,7 @@ $scrollbar-width: 1rem;
$security-text-color: $white;
$security-btn-color: #038bba;
$loading-bg : rgba($black,0.6);
$loading-bg : rgba(#090d11, 0.6);
$loading-fg : $white;
$loader-icon : url("data:image/svg+xml;charset=UTF-8,%3c?xml version='1.0' encoding='utf-8'?%3e%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 38 38' style='enable-background:new 0 0 38 38;' xml:space='preserve'%3e%3cstyle type='text/css'%3e .st0%7bfill:none;stroke:%23ebeef3;stroke-width:2;%7d .st1%7bfill:none;stroke:%23326690;stroke-width:2;%7d %3c/style%3e%3cg%3e%3cg transform='translate(1 1)'%3e%3ccircle class='st0' cx='18' cy='18' r='18'/%3e%3cpath class='st1' d='M36,18c0-9.9-8.1-18-18-18 '%3e%3canimateTransform accumulate='none' additive='replace' attributeName='transform' calcMode='linear' dur='0.7s' fill='remove' from='0 18 18' repeatCount='indefinite' restart='always' to='360 18 18' type='rotate'%3e%3c/animateTransform%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e ") !default;

View File

@ -28,6 +28,7 @@ import { BROWSER_PANELS } from '../../../../browser/static/js/constants';
import { NotifierProvider } from '../../../../static/js/helpers/Notifier';
import usePreferences from '../../../../preferences/static/js/store';
import pgAdmin from 'sources/pgadmin';
import { PgAdminContext } from '../../../../static/js/BrowserComponent';
export default class DebuggerModule {
static instance;
@ -588,18 +589,20 @@ export default class DebuggerModule {
ReactDOM.render(
<Theme>
<ModalProvider>
<NotifierProvider pgAdmin={pgAdmin} pgWindow={pgWindow} />
<DebuggerComponent pgAdmin={pgWindow.pgAdmin} selectedNodeInfo={selectedNodeInfo}
panelId={`${BROWSER_PANELS.DEBUGGER_TOOL}_${this.trans_id}`}
panelDocker={pgWindow.pgAdmin.Browser.docker}
layout={layout} params={{
transId: trans_id,
directDebugger: this,
funcArgsInstance: this.funcArgs
}}
/>
</ModalProvider>
<PgAdminContext.Provider value={pgAdmin}>
<ModalProvider>
<NotifierProvider pgAdmin={pgAdmin} pgWindow={pgWindow} />
<DebuggerComponent pgAdmin={pgWindow.pgAdmin} selectedNodeInfo={selectedNodeInfo}
panelId={`${BROWSER_PANELS.DEBUGGER_TOOL}_${this.trans_id}`}
panelDocker={pgWindow.pgAdmin.Browser.docker}
layout={layout} params={{
transId: trans_id,
directDebugger: this,
funcArgsInstance: this.funcArgs
}}
/>
</ModalProvider>
</PgAdminContext.Provider>
</Theme>,
container
);

View File

@ -20,6 +20,7 @@ import { BROWSER_PANELS } from '../../../../browser/static/js/constants';
import { NotifierProvider } from '../../../../static/js/helpers/Notifier';
import usePreferences, { listenPreferenceBroadcast } from '../../../../preferences/static/js/store';
import pgAdmin from 'sources/pgadmin';
import { PgAdminContext } from '../../../../static/js/BrowserComponent';
export function setPanelTitle(docker, panelId, panelTitle) {
docker.setTitle(panelId, panelTitle);
@ -142,16 +143,18 @@ export default class ERDModule {
await listenPreferenceBroadcast();
ReactDOM.render(
<Theme>
<ModalProvider>
<NotifierProvider pgAdmin={this.pgAdmin} pgWindow={pgWindow} />
<ERDTool
params={params}
pgWindow={pgWindow}
pgAdmin={this.pgAdmin}
panelId={`${BROWSER_PANELS.ERD_TOOL}_${params.trans_id}`}
panelDocker={pgWindow.pgAdmin.Browser.docker}
/>
</ModalProvider>
<PgAdminContext.Provider value={pgAdmin}>
<ModalProvider>
<NotifierProvider pgAdmin={this.pgAdmin} pgWindow={pgWindow} />
<ERDTool
params={params}
pgWindow={pgWindow}
pgAdmin={this.pgAdmin}
panelId={`${BROWSER_PANELS.ERD_TOOL}_${params.trans_id}`}
panelDocker={pgWindow.pgAdmin.Browser.docker}
/>
</ModalProvider>
</PgAdminContext.Provider>
</Theme>,
container
);

View File

@ -61,7 +61,7 @@ function setPanelTitle(docker, panelId, title, qtState, dirty=false) {
title = title.slice(0, -1);
}
} else {
title = qtState.params.title;
title = title ?? qtState.params.title;
}
title = title + (dirty ? '*': '');