diff --git a/packages/web/src/DragAndDropFileTarget.js b/packages/web/src/DragAndDropFileTarget.js index 810045ad8..98efe992d 100644 --- a/packages/web/src/DragAndDropFileTarget.js +++ b/packages/web/src/DragAndDropFileTarget.js @@ -1,5 +1,6 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from './icons'; const TargetStyled = styled.div` position: fixed; @@ -41,7 +42,7 @@ export default function DragAndDropFileTarget({ isDragActive, inputProps }) { - + Drop the files to upload to DbGate Supported file types: csv, MS Excel, json-lines diff --git a/packages/web/src/TabsPanel.js b/packages/web/src/TabsPanel.js index 391f16156..f162ca863 100644 --- a/packages/web/src/TabsPanel.js +++ b/packages/web/src/TabsPanel.js @@ -7,6 +7,7 @@ import { DropDownMenuItem, DropDownMenuDivider } from './modals/DropDownMenu'; import { useOpenedTabs, useSetOpenedTabs, useCurrentDatabase, useSetCurrentDatabase } from './utility/globalState'; import { showMenu } from './modals/DropDownMenu'; import { getConnectionInfo } from './utility/metadataLoaders'; +import { FontIcon } from './icons'; // const files = [ // { name: 'app.js' }, @@ -116,9 +117,9 @@ function getTabDbKey(tab) { } function getDbIcon(key) { - if (key.startsWith('database://')) return 'mdi mdi-database'; - if (key.startsWith('archive://')) return 'mdi mdi-archive'; - return 'mdi mdi-file'; + if (key.startsWith('database://')) return 'icon database'; + if (key.startsWith('archive://')) return 'icon archive'; + return 'icon file'; } export default function TabsPanel() { @@ -252,7 +253,7 @@ export default function TabsPanel() { selected={tabsByDb[dbKey][0].tabDbKey == currentDbKey} onClick={() => handleSetDb(tabsByDb[dbKey][0].props)} > - {tabsByDb[dbKey][0].tabDbName} + {tabsByDb[dbKey][0].tabDbName} {_.sortBy(tabsByDb[dbKey], 'title').map((tab) => ( @@ -264,7 +265,7 @@ export default function TabsPanel() { onMouseUp={(e) => handleMouseUp(e, tab.tabid)} onContextMenu={(e) => handleContextMenu(e, tab.tabid, tab.props)} > - {} + {} {tab.title} {prefix} - {isBusy ? : } + {isBusy ? : } {title} {statusIcon && ( - + )} diff --git a/packages/web/src/datagrid/ColumnHeaderControl.js b/packages/web/src/datagrid/ColumnHeaderControl.js index 0f2688dac..4653619bf 100644 --- a/packages/web/src/datagrid/ColumnHeaderControl.js +++ b/packages/web/src/datagrid/ColumnHeaderControl.js @@ -7,6 +7,7 @@ import { useSplitterDrag } from '../widgets/Splitter'; import { isTypeDateTime } from '@dbgate/tools'; import { openDatabaseObjectDetail } from '../appobj/databaseObjectAppObject'; import { useSetOpenedTabs } from '../utility/globalState'; +import { FontIcon } from '../icons'; const HeaderDiv = styled.div` display: flex; @@ -85,12 +86,12 @@ export default function ColumnHeaderControl({ {order == 'ASC' && ( - + )} {order == 'DESC' && ( - + )} diff --git a/packages/web/src/datagrid/ColumnLabel.js b/packages/web/src/datagrid/ColumnLabel.js index b0b8801da..6910843c3 100644 --- a/packages/web/src/datagrid/ColumnLabel.js +++ b/packages/web/src/datagrid/ColumnLabel.js @@ -2,6 +2,7 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; const Label = styled.span` font-weight: ${props => (props.notNull ? 'bold' : 'normal')}; @@ -15,7 +16,7 @@ export default function ColumnLabel(column) { if (column.foreignKey) icon = 'mdi mdi-key-link'; return ( ); } diff --git a/packages/web/src/datagrid/DataFilterControl.js b/packages/web/src/datagrid/DataFilterControl.js index be7a2b30f..45a4a1a34 100644 --- a/packages/web/src/datagrid/DataFilterControl.js +++ b/packages/web/src/datagrid/DataFilterControl.js @@ -8,6 +8,7 @@ import InlineButton from '../widgets/InlineButton'; import useShowModal from '../modals/showModal'; import FilterMultipleValuesModal from '../modals/FilterMultipleValuesModal'; import SetFilterModal from '../modals/SetFilterModal'; +import { FontIcon } from '../icons'; // import { $ } from '../../Utility/jquery'; // import autobind from 'autobind-decorator'; // import * as React from 'react'; @@ -291,7 +292,7 @@ export default function DataFilterControl({ autocomplete="off" /> - + ); diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js index 8dd996e62..f88d089d7 100644 --- a/packages/web/src/datagrid/DataGridCore.js +++ b/packages/web/src/datagrid/DataGridCore.js @@ -28,6 +28,7 @@ import LoadingInfo from '../widgets/LoadingInfo'; import ErrorInfo from '../widgets/ErrorInfo'; import { openNewTab } from '../utility/common'; import { useSetOpenedTabs } from '../utility/globalState'; +import { FontIcon } from '../icons'; const GridContainer = styled.div` position: absolute; @@ -971,7 +972,7 @@ export default function DataGridCore(props) { > {filterCount > 0 && ( - + )} diff --git a/packages/web/src/datagrid/ReferenceHeader.js b/packages/web/src/datagrid/ReferenceHeader.js index cce042a10..576f251fd 100644 --- a/packages/web/src/datagrid/ReferenceHeader.js +++ b/packages/web/src/datagrid/ReferenceHeader.js @@ -2,6 +2,7 @@ import React from 'react'; import ToolbarButton from '../widgets/ToolbarButton'; import styled from 'styled-components'; import theme from '../theme'; +import { FontIcon } from '../icons'; const Container = styled.div` display: flex; @@ -29,7 +30,7 @@ export default function ReferenceHeader({ reference, onClose }) { return (
- + {reference.pureName} [{reference.columns.map((x) => x.refName).join(', ')}] = master [ {reference.columns.map((x) => x.baseName).join(', ')}] diff --git a/packages/web/src/datagrid/ReferenceManager.js b/packages/web/src/datagrid/ReferenceManager.js index b259b04db..7fc5f27ee 100644 --- a/packages/web/src/datagrid/ReferenceManager.js +++ b/packages/web/src/datagrid/ReferenceManager.js @@ -3,6 +3,7 @@ import styled from 'styled-components'; import { ManagerInnerContainer } from './ManagerStyles'; import SearchInput from '../widgets/SearchInput'; import { filterName } from '@dbgate/datalib'; +import { FontIcon } from '../icons'; const SearchBoxWrapper = styled.div` display: flex; @@ -33,7 +34,7 @@ const NameContainer = styled.div` function ManagerRow({ tableName, columns, icon, onClick }) { return ( - + {tableName} ({columns.map((x) => x.columnName).join(', ')}) diff --git a/packages/web/src/freetable/MacroDetail.js b/packages/web/src/freetable/MacroDetail.js index 86cadb2e3..7178a01fa 100644 --- a/packages/web/src/freetable/MacroDetail.js +++ b/packages/web/src/freetable/MacroDetail.js @@ -8,6 +8,7 @@ import MacroParameters from './MacroParameters'; import { WidgetTitle } from '../widgets/WidgetStyles'; import { FormButton } from '../utility/forms'; import FormStyledButton from '../widgets/FormStyledButton'; +import { FontIcon } from '../icons'; const Container = styled.div` display: flex; @@ -62,7 +63,7 @@ function MacroHeader({ selectedMacro, setSelectedMacro, onExecute }) { return (
- + {selectedMacro.title}
diff --git a/packages/web/src/icons.js b/packages/web/src/icons.js index 0aba58e0b..a0d7e03e6 100644 --- a/packages/web/src/icons.js +++ b/packages/web/src/icons.js @@ -1,14 +1,30 @@ import React from 'react'; import _ from 'lodash'; -export function ExpandIcon({ isBlank = false, isExpanded = false, className = '', ...other }) { - if (isBlank) { - return ; +const iconNames = { + 'icon minus-box': 'mdi mdi-minus-box-outline', + 'icon plus-box': 'mdi mdi-plus-box-outline', + 'icon invisible-box': 'mdi mdi-minus-box-outline icon-invisible', + 'icon cloud-upload': 'mdi mdi-cloud-upload', + + 'icon database': 'mdi mdi-database', + 'icon archive': 'mdi mdi-archive', + 'icon file': 'mdi mdi-file', +}; + +export function FontIcon({ icon, className = '', ...other }) { + if (!icon) return null; + let cls = icon; + if (icon.startsWith('icon ')) { + cls = iconNames[icon]; + if (!cls) return null; } - return ( - - ); + return ; +} + +export function ExpandIcon({ isBlank = false, isExpanded = false, ...other }) { + if (isBlank) { + return ; + } + return ; } diff --git a/packages/web/src/impexp/ImportExportConfigurator.js b/packages/web/src/impexp/ImportExportConfigurator.js index 4f32301fa..332a188ea 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.js +++ b/packages/web/src/impexp/ImportExportConfigurator.js @@ -23,6 +23,7 @@ import axios from '../utility/axios'; import LoadingInfo from '../widgets/LoadingInfo'; import SqlEditor from '../sqleditor/SqlEditor'; import { useUploadsProvider } from '../utility/UploadsProvider'; +import { FontIcon } from '../icons'; const Container = styled.div` // max-height: 50vh; @@ -294,7 +295,7 @@ function SourceName({ name }) {
{name}
- +
); @@ -352,7 +353,7 @@ export default function ImportExportConfigurator({ uploadedFile = undefined }) { engine={sourceEngine} /> - + - + {message} diff --git a/packages/web/src/modals/ModalHeader.js b/packages/web/src/modals/ModalHeader.js index 9130973f1..766504f10 100644 --- a/packages/web/src/modals/ModalHeader.js +++ b/packages/web/src/modals/ModalHeader.js @@ -1,5 +1,6 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; const Wrapper = styled.div` font-size: 15pt; @@ -23,7 +24,7 @@ export default function ModalHeader({ children, modalState }) {
{children}
- +
); diff --git a/packages/web/src/widgets/DropDownButton.js b/packages/web/src/widgets/DropDownButton.js index 52c91ac4f..2fdfcc01f 100644 --- a/packages/web/src/widgets/DropDownButton.js +++ b/packages/web/src/widgets/DropDownButton.js @@ -1,4 +1,5 @@ import React from 'react'; +import { FontIcon } from '../icons'; import { showMenu } from '../modals/DropDownMenu'; import InlineButton from './InlineButton'; @@ -12,7 +13,7 @@ export default function DropDownButton({ children }) { return ( - + ); } diff --git a/packages/web/src/widgets/ErrorInfo.js b/packages/web/src/widgets/ErrorInfo.js index ecab0e372..3cc2f3aa9 100644 --- a/packages/web/src/widgets/ErrorInfo.js +++ b/packages/web/src/widgets/ErrorInfo.js @@ -1,6 +1,7 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; const Container = styled.div` display: flex; @@ -22,7 +23,7 @@ export default function ErrorInfo({ message, icon = 'mdi mdi-close-circle color- if (isSmall) { return ( - + {message} ); @@ -30,7 +31,7 @@ export default function ErrorInfo({ message, icon = 'mdi mdi-close-circle color- return ( - + {message} diff --git a/packages/web/src/widgets/LoadingInfo.js b/packages/web/src/widgets/LoadingInfo.js index 01dfc3024..ab725c428 100644 --- a/packages/web/src/widgets/LoadingInfo.js +++ b/packages/web/src/widgets/LoadingInfo.js @@ -1,6 +1,7 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; const Container = styled.div` display: flex; @@ -33,7 +34,7 @@ export default function LoadingInfo({ message, wrapper = false }) { const core = ( - + {message} diff --git a/packages/web/src/widgets/StatusBar.js b/packages/web/src/widgets/StatusBar.js index 4a87ce70a..3b3420add 100644 --- a/packages/web/src/widgets/StatusBar.js +++ b/packages/web/src/widgets/StatusBar.js @@ -1,5 +1,6 @@ import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; import { useCurrentDatabase } from '../utility/globalState'; import { useDatabaseStatus } from '../utility/metadataLoaders'; @@ -24,18 +25,18 @@ export default function StatusBar() { {name && ( - {name} + {name} )} {(displayName || server) && ( - {displayName || server} + {displayName || server} )} {user && ( - {user} + {user} )} @@ -43,17 +44,17 @@ export default function StatusBar() { {status.name == 'pending' && ( <> - Loading + Loading )} {status.name == 'ok' && ( <> - Connected + Connected )} {status.name == 'error' && ( <> - Error + Error )} @@ -61,7 +62,7 @@ export default function StatusBar() { {!connection && ( <> - Not connected + Not connected )} diff --git a/packages/web/src/widgets/ToolbarButton.js b/packages/web/src/widgets/ToolbarButton.js index 6f64448c4..b2e3a01c6 100644 --- a/packages/web/src/widgets/ToolbarButton.js +++ b/packages/web/src/widgets/ToolbarButton.js @@ -1,6 +1,7 @@ // @ts-nocheck import React from 'react'; import styled from 'styled-components'; +import { FontIcon } from '../icons'; import theme from '../theme'; const ButtonDiv = styled.div` @@ -53,7 +54,7 @@ export default function ToolbarButton({ children, onClick, icon = undefined, dis {icon && ( - + )} {children} diff --git a/packages/web/src/widgets/WidgetIconPanel.js b/packages/web/src/widgets/WidgetIconPanel.js index 1fdd1560d..9e11a8d94 100644 --- a/packages/web/src/widgets/WidgetIconPanel.js +++ b/packages/web/src/widgets/WidgetIconPanel.js @@ -2,6 +2,7 @@ import React from 'react'; import theme from '../theme'; import styled from 'styled-components'; import { useCurrentWidget, useSetCurrentWidget } from '../utility/globalState'; +import { FontIcon } from '../icons'; const IconWrapper = styled.div` color: ${theme.widgetMenu.iconFontColor}; @@ -62,7 +63,7 @@ export default function WidgetIconPanel() { onClick={() => setCurrentWidget(name === currentWidget ? null : name)} title={title} > - + ))}