From 2a90b62338b8cdf2c35f4457683e2e8e6162df48 Mon Sep 17 00:00:00 2001 From: Wroud Date: Mon, 15 Mar 2021 20:02:13 +0300 Subject: [PATCH] feat: CB-751 value panel --- .../src/FormControls/TextareaNew.tsx | 27 +++- .../core-blocks/src/Tabs/Tab/TabDefault.tsx | 4 +- .../core-blocks/src/Tabs/Tab/TabProps.ts | 4 +- .../src/Tabs/Tab/verticalRotatedTabStyles.ts | 1 + .../packages/core-blocks/src/Tabs/TabList.tsx | 4 +- .../core-blocks/src/Tabs/TabPanelList.tsx | 4 +- .../core-blocks/src/Tabs/TabsState.tsx | 15 ++- webapp/packages/core-theming/src/useStyles.ts | 5 +- .../DataGrid/CellRenderer/CellRenderer.tsx | 2 +- .../src/DataGrid/Formatters/CellFormatter.tsx | 31 ++--- .../src/styles/themes/_base-react-grid.scss | 18 ++- .../public/icons/text_value_presentation.png | Bin 0 -> 757 bytes .../TextValuePresentation.tsx | 64 ++++++++++ .../TextValuePresentationBootstrap.ts | 33 +++++ .../src/DataPresentationService.ts | 65 +++++++--- .../src/DataViewerBootstrap.ts | 12 +- .../src/DataViewerPage/DataViewerPanel.tsx | 17 +++ .../src/DataViewerTabService.ts | 14 ++- .../Actions/IDatabaseDataFormatAction.ts | 16 +++ .../Actions/IDatabaseDataSelectAction.ts | 1 + .../Actions/ResultSetFormatAction.ts | 49 ++++++++ .../Actions/ResultSetSelectAction.ts | 14 ++- .../src/IDataViewerPageState.ts | 1 + .../src/TableViewer/TableGrid.tsx | 14 +-- .../TableViewer/TableHeader/TableHeader.tsx | 2 +- .../TableHeader/TableWhereFilter.tsx | 7 -- .../PresentationTab.tsx | 15 ++- .../TablePresentationBar.tsx} | 29 +++-- .../src/TableViewer/TableViewer.tsx | 119 +++++++++++++----- .../src/TableViewer/ValuePanel.tsx | 73 +++++++++++ .../packages/plugin-data-viewer/src/index.ts | 2 + .../plugin-data-viewer/src/locales/en.ts | 1 + .../plugin-data-viewer/src/locales/ru.ts | 1 + .../plugin-data-viewer/src/manifest.ts | 11 +- .../src/IObjectViewerTabState.ts | 2 +- .../src/ObjectPage/DBObjectPageService.ts | 6 +- .../src/ObjectPage/ObjectPage.ts | 4 +- .../src/ObjectViewerTabService.ts | 6 +- .../src/SqlResultTabs/SqlResultPanel.tsx | 3 + 39 files changed, 542 insertions(+), 154 deletions(-) create mode 100644 webapp/packages/plugin-data-viewer/public/icons/text_value_presentation.png create mode 100644 webapp/packages/plugin-data-viewer/src/DataPresentation/TextValuePresentation/TextValuePresentation.tsx create mode 100644 webapp/packages/plugin-data-viewer/src/DataPresentation/TextValuePresentation/TextValuePresentationBootstrap.ts create mode 100644 webapp/packages/plugin-data-viewer/src/DatabaseDataModel/Actions/IDatabaseDataFormatAction.ts create mode 100644 webapp/packages/plugin-data-viewer/src/DatabaseDataModel/Actions/ResultSetFormatAction.ts rename webapp/packages/plugin-data-viewer/src/TableViewer/{TableLeftBar => TablePresentationBar}/PresentationTab.tsx (72%) rename webapp/packages/plugin-data-viewer/src/TableViewer/{TableLeftBar/TableLeftBar.tsx => TablePresentationBar/TablePresentationBar.tsx} (84%) create mode 100644 webapp/packages/plugin-data-viewer/src/TableViewer/ValuePanel.tsx diff --git a/webapp/packages/core-blocks/src/FormControls/TextareaNew.tsx b/webapp/packages/core-blocks/src/FormControls/TextareaNew.tsx index 9fa6016c80..baa60739bc 100644 --- a/webapp/packages/core-blocks/src/FormControls/TextareaNew.tsx +++ b/webapp/packages/core-blocks/src/FormControls/TextareaNew.tsx @@ -10,7 +10,7 @@ import { observer } from 'mobx-react-lite'; import { useCallback, useContext } from 'react'; import styled, { css, use } from 'reshadow'; -import { useStyles } from '@cloudbeaver/core-theming'; +import { ComponentStyle, useStyles } from '@cloudbeaver/core-theming'; import type { ILayoutSizeProps } from '../Containers/LayoutProps'; import { baseFormControlStylesNew } from './baseFormControlStylesNew'; @@ -20,16 +20,33 @@ const styles = css` textarea { line-height: 19px; } + field[|embedded] { + height: 100%; + display: flex; + flex-direction: column; + + & textarea { + border-radius: 0 !important; + height: 100%; + resize: none !important; + } + } field-label { display: block; padding-bottom: 10px; composes: theme-typography--body1 from global; font-weight: 500; + + &:empty { + display: none; + } } `; -type BaseProps = Omit, 'onChange'> & ILayoutSizeProps & { +type BaseProps = Omit, 'onChange' | 'style'> & ILayoutSizeProps & { mod?: 'surface'; + style?: ComponentStyle; + embedded?: boolean; }; type ControlledProps = BaseProps & { @@ -53,6 +70,7 @@ interface TextareaType { export const TextareaNew: TextareaType = observer(function TextareaNew({ name, + style, value: controlledValue, state, children, @@ -61,6 +79,7 @@ export const TextareaNew: TextareaType = observer(function TextareaNew({ medium, large, mod, + embedded, onChange = () => {}, ...rest }: ControlledProps | ObjectProps) { @@ -80,8 +99,8 @@ export const TextareaNew: TextareaType = observer(function TextareaNew({ const value = state ? state[name] : controlledValue; - return styled(useStyles(baseFormControlStylesNew, styles))( - + return styled(useStyles(baseFormControlStylesNew, styles, style))( + {children}