mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 07:53:58 +00:00
modal refactor
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
|||||||
} from './utility/globalState';
|
} from './utility/globalState';
|
||||||
import { SocketProvider } from './utility/SocketProvider';
|
import { SocketProvider } from './utility/SocketProvider';
|
||||||
import ConnectionsPinger from './utility/ConnectionsPinger';
|
import ConnectionsPinger from './utility/ConnectionsPinger';
|
||||||
|
import { ModalLayerProvider } from './modals/showModal';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
@@ -22,7 +23,9 @@ function App() {
|
|||||||
<OpenedConnectionsProvider>
|
<OpenedConnectionsProvider>
|
||||||
<LeftPanelWidthProvider>
|
<LeftPanelWidthProvider>
|
||||||
<ConnectionsPinger>
|
<ConnectionsPinger>
|
||||||
<Screen />
|
<ModalLayerProvider>
|
||||||
|
<Screen />
|
||||||
|
</ModalLayerProvider>
|
||||||
</ConnectionsPinger>
|
</ConnectionsPinger>
|
||||||
</LeftPanelWidthProvider>
|
</LeftPanelWidthProvider>
|
||||||
</OpenedConnectionsProvider>
|
</OpenedConnectionsProvider>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import WidgetContainer from './widgets/WidgetContainer';
|
|||||||
import ToolBar from './widgets/Toolbar';
|
import ToolBar from './widgets/Toolbar';
|
||||||
import StatusBar from './widgets/StatusBar';
|
import StatusBar from './widgets/StatusBar';
|
||||||
import { useSplitterDrag, HorizontalSplitHandle } from './widgets/Splitter';
|
import { useSplitterDrag, HorizontalSplitHandle } from './widgets/Splitter';
|
||||||
|
import { ModalLayer } from './modals/showModal';
|
||||||
|
|
||||||
const BodyDiv = styled.div`
|
const BodyDiv = styled.div`
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@@ -132,6 +133,7 @@ export default function Screen() {
|
|||||||
<StausBarContainer>
|
<StausBarContainer>
|
||||||
<StatusBar />
|
<StatusBar />
|
||||||
</StausBarContainer>
|
</StausBarContainer>
|
||||||
|
<ModalLayer />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,14 @@ import _ from 'lodash';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { getEngineIcon } from '../icons';
|
import { getEngineIcon } from '../icons';
|
||||||
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
import { DropDownMenuItem } from '../modals/DropDownMenu';
|
||||||
import showModal from '../modals/showModal';
|
import useShowModal from '../modals/showModal';
|
||||||
import ConnectionModal from '../modals/ConnectionModal';
|
import ConnectionModal from '../modals/ConnectionModal';
|
||||||
import axios from '../utility/axios';
|
import axios from '../utility/axios';
|
||||||
import { filterName } from '@dbgate/datalib';
|
import { filterName } from '@dbgate/datalib';
|
||||||
import ConfirmModal from '../modals/ConfirmModal';
|
import ConfirmModal from '../modals/ConfirmModal';
|
||||||
import { useConfig } from '../utility/metadataLoaders';
|
import { useConfig } from '../utility/metadataLoaders';
|
||||||
|
|
||||||
function Menu({ data, setOpenedConnections, openedConnections }) {
|
function Menu({ data, setOpenedConnections, openedConnections, config, showModal }) {
|
||||||
const config = useConfig();
|
|
||||||
const handleEdit = () => {
|
const handleEdit = () => {
|
||||||
showModal((modalState) => <ConnectionModal modalState={modalState} connection={data} />);
|
showModal((modalState) => <ConnectionModal modalState={modalState} connection={data} />);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import styled from 'styled-components';
|
|||||||
import keycodes from '../utility/keycodes';
|
import keycodes from '../utility/keycodes';
|
||||||
import { parseFilter, createMultiLineFilter } from '@dbgate/filterparser';
|
import { parseFilter, createMultiLineFilter } from '@dbgate/filterparser';
|
||||||
import InlineButton from '../widgets/InlineButton';
|
import InlineButton from '../widgets/InlineButton';
|
||||||
import showModal from '../modals/showModal';
|
import useShowModal from '../modals/showModal';
|
||||||
import FilterMultipleValuesModal from '../modals/FilterMultipleValuesModal';
|
import FilterMultipleValuesModal from '../modals/FilterMultipleValuesModal';
|
||||||
import SetFilterModal from '../modals/SetFilterModal';
|
import SetFilterModal from '../modals/SetFilterModal';
|
||||||
// import { $ } from '../../Utility/jquery';
|
// import { $ } from '../../Utility/jquery';
|
||||||
@@ -167,6 +167,7 @@ function DropDownContent({ filterType, setFilter, filterMultipleValues, openFilt
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function DataFilterControl({ isReadOnly = false, filterType, filter, setFilter }) {
|
export default function DataFilterControl({ isReadOnly = false, filterType, filter, setFilter }) {
|
||||||
|
const showModal = useShowModal();
|
||||||
const [filterState, setFilterState] = React.useState('empty');
|
const [filterState, setFilterState] = React.useState('empty');
|
||||||
const setFilterText = (filter) => {
|
const setFilterText = (filter) => {
|
||||||
setFilter(filter);
|
setFilter(filter);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import DataGridContextMenu from './DataGridContextMenu';
|
|||||||
import useSocket from '../utility/SocketProvider';
|
import useSocket from '../utility/SocketProvider';
|
||||||
import LoadingInfo from '../widgets/LoadingInfo';
|
import LoadingInfo from '../widgets/LoadingInfo';
|
||||||
import ErrorInfo from '../widgets/ErrorInfo';
|
import ErrorInfo from '../widgets/ErrorInfo';
|
||||||
import showModal from '../modals/showModal';
|
import useShowModal from '../modals/showModal';
|
||||||
import ErrorMessageModal from '../modals/ErrorMessageModal';
|
import ErrorMessageModal from '../modals/ErrorMessageModal';
|
||||||
import ImportExportModal from '../modals/ImportExportModal';
|
import ImportExportModal from '../modals/ImportExportModal';
|
||||||
|
|
||||||
@@ -249,6 +249,8 @@ export default function DataGridCore(props) {
|
|||||||
[selectedCells]
|
[selectedCells]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const showModal = useShowModal();
|
||||||
|
|
||||||
const handleLoadRowCount = async () => {
|
const handleLoadRowCount = async () => {
|
||||||
const rowCount = await loadRowCount(props);
|
const rowCount = await loadRowCount(props);
|
||||||
setLoadProps((oldLoadProps) => ({
|
setLoadProps((oldLoadProps) => ({
|
||||||
|
|||||||
@@ -2,16 +2,43 @@ import React from 'react';
|
|||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import useModalState from './useModalState';
|
import useModalState from './useModalState';
|
||||||
|
|
||||||
function ShowModalComponent({ renderModal, container }) {
|
function ShowModalComponent({ renderModal, onClose }) {
|
||||||
const modalState = useModalState(true);
|
const modalState = useModalState(true);
|
||||||
if (!modalState.isOpen) {
|
if (!modalState.isOpen) {
|
||||||
container.remove();
|
onClose();
|
||||||
}
|
}
|
||||||
return renderModal(modalState);
|
return renderModal(modalState);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function showModal(renderModal) {
|
const Context = React.createContext(null);
|
||||||
const container = document.createElement('div');
|
|
||||||
document.body.appendChild(container);
|
export function ModalLayerProvider({ children }) {
|
||||||
ReactDOM.render(<ShowModalComponent renderModal={renderModal} container={container} />, container);
|
const [modals, setModals] = React.useState([]);
|
||||||
|
return <Context.Provider value={[modals, setModals]}>{children}</Context.Provider>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ModalLayer() {
|
||||||
|
const [modals, setModals] = React.useContext(Context);
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{modals.map((modal, index) => (
|
||||||
|
<ShowModalComponent
|
||||||
|
key={index}
|
||||||
|
renderModal={modal}
|
||||||
|
onClose={() => setModals((x) => x.filter((y) => y != modal))}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function useShowModal() {
|
||||||
|
const [modals, setModals] = React.useContext(Context);
|
||||||
|
const showModal = (renderModal) => {
|
||||||
|
setModals([...modals, renderModal]);
|
||||||
|
};
|
||||||
|
return showModal;
|
||||||
|
// const container = document.createElement('div');
|
||||||
|
// document.body.appendChild(container);
|
||||||
|
// ReactDOM.render(<ShowModalComponent renderModal={renderModal} container={container} />, container);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import useDimensions from '../utility/useDimensions';
|
|||||||
import analyseQuerySources from './analyseQuerySources';
|
import analyseQuerySources from './analyseQuerySources';
|
||||||
import keycodes from '../utility/keycodes';
|
import keycodes from '../utility/keycodes';
|
||||||
import useCodeCompletion from './useCodeCompletion';
|
import useCodeCompletion from './useCodeCompletion';
|
||||||
import showModal from '../modals/showModal';
|
import useShowModal from '../modals/showModal';
|
||||||
import InsertJoinModal from '../modals/InsertJoinModal';
|
import InsertJoinModal from '../modals/InsertJoinModal';
|
||||||
import { getDatabaseInfo } from '../utility/metadataLoaders';
|
import { getDatabaseInfo } from '../utility/metadataLoaders';
|
||||||
|
|
||||||
@@ -57,6 +57,7 @@ export default function SqlEditor({
|
|||||||
const ownEditorRef = React.useRef(null);
|
const ownEditorRef = React.useRef(null);
|
||||||
|
|
||||||
const currentEditorRef = editorRef || ownEditorRef;
|
const currentEditorRef = editorRef || ownEditorRef;
|
||||||
|
const showModal = useShowModal();
|
||||||
|
|
||||||
useCodeCompletion({
|
useCodeCompletion({
|
||||||
conid,
|
conid,
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import useStorage from './useStorage';
|
import useStorage from './useStorage';
|
||||||
import { useConnectionInfo } from './metadataLoaders';
|
import { useConnectionInfo, useConfig } from './metadataLoaders';
|
||||||
import usePrevious from './usePrevious';
|
import usePrevious from './usePrevious';
|
||||||
import useNewQuery from '../query/useNewQuery';
|
import useNewQuery from '../query/useNewQuery';
|
||||||
|
import useShowModal from '../modals/showModal';
|
||||||
|
|
||||||
function createGlobalState(defaultValue) {
|
function createGlobalState(defaultValue) {
|
||||||
const Context = React.createContext(null);
|
const Context = React.createContext(null);
|
||||||
@@ -86,6 +87,8 @@ export function useAppObjectParams() {
|
|||||||
const setSavedSqlFiles = useSetSavedSqlFiles();
|
const setSavedSqlFiles = useSetSavedSqlFiles();
|
||||||
const openedConnections = useOpenedConnections();
|
const openedConnections = useOpenedConnections();
|
||||||
const setOpenedConnections = useSetOpenedConnections();
|
const setOpenedConnections = useSetOpenedConnections();
|
||||||
|
const showModal = useShowModal();
|
||||||
|
const config = useConfig();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
setOpenedTabs,
|
setOpenedTabs,
|
||||||
@@ -95,6 +98,8 @@ export function useAppObjectParams() {
|
|||||||
setSavedSqlFiles,
|
setSavedSqlFiles,
|
||||||
openedConnections,
|
openedConnections,
|
||||||
setOpenedConnections,
|
setOpenedConnections,
|
||||||
|
config,
|
||||||
|
showModal,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user