multiline dialog fixes

This commit is contained in:
Jan Prochazka
2024-08-26 09:58:09 +02:00
parent 4cbfa7c937
commit 60bf682449
5 changed files with 47 additions and 36 deletions

View File

@@ -259,6 +259,28 @@ export function safeJsonParse(json, defaultValue?, logError = false) {
} }
} }
export function shouldOpenMultilineDialog(value) {
if (_isString(value)) {
if (value.includes('\n')) {
return true;
}
const parsed = safeJsonParse(value);
if (parsed && (_isPlainObject(parsed) || _isArray(parsed))) {
return true;
}
}
if (value?.$oid) {
return false;
}
if (value?.$date) {
return false;
}
if (_isPlainObject(value) || _isArray(value)) {
return true;
}
return false;
}
export function isJsonLikeLongString(value) { export function isJsonLikeLongString(value) {
return _isString(value) && value.length > 100 && value.match(/^\s*\{.*\}\s*$|^\s*\[.*\]\s*$/); return _isString(value) && value.length > 100 && value.match(/^\s*\{.*\}\s*$|^\s*\[.*\]\s*$/);
} }

View File

@@ -343,7 +343,13 @@
<script lang="ts"> <script lang="ts">
import { GridDisplay } from 'dbgate-datalib'; import { GridDisplay } from 'dbgate-datalib';
import { driverBase, parseCellValue, detectSqlFilterBehaviour, stringifyCellValue } from 'dbgate-tools'; import {
driverBase,
parseCellValue,
detectSqlFilterBehaviour,
stringifyCellValue,
shouldOpenMultilineDialog,
} from 'dbgate-tools';
import { getContext, onDestroy } from 'svelte'; import { getContext, onDestroy } from 'svelte';
import _, { map } from 'lodash'; import _, { map } from 'lodash';
import registerCommand from '../commands/registerCommand'; import registerCommand from '../commands/registerCommand';
@@ -397,7 +403,7 @@
import { isCtrlOrCommandKey, isMac } from '../utility/common'; import { isCtrlOrCommandKey, isMac } from '../utility/common';
import { createGeoJsonFromSelection, selectionCouldBeShownOnMap } from '../elements/SelectionMapView.svelte'; import { createGeoJsonFromSelection, selectionCouldBeShownOnMap } from '../elements/SelectionMapView.svelte';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte'; import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
import EditCellDataModal, { shouldOpenMultilineDialog } from '../modals/EditCellDataModal.svelte'; import EditCellDataModal from '../modals/EditCellDataModal.svelte';
import { getDatabaseInfo, useDatabaseStatus } from '../utility/metadataLoaders'; import { getDatabaseInfo, useDatabaseStatus } from '../utility/metadataLoaders';
import { showSnackbarSuccess } from '../utility/snackbar'; import { showSnackbarSuccess } from '../utility/snackbar';
import { openJsonLinesData } from '../utility/openJsonLinesData'; import { openJsonLinesData } from '../utility/openJsonLinesData';
@@ -811,7 +817,8 @@
const cellData = rowData[realColumnUniqueNames[currentCell[1]]]; const cellData = rowData[realColumnUniqueNames[currentCell[1]]];
showModal(EditCellDataModal, { showModal(EditCellDataModal, {
value: stringifyCellValue(cellData, 'multilineEditorIntent').value, value: cellData,
dataEditorTypesBehaviour: display?.driver?.dataEditorTypesBehaviour,
onSave: value => grider.setCellValue(currentCell[0], realColumnUniqueNames[currentCell[1]], value), onSave: value => grider.setCellValue(currentCell[0], realColumnUniqueNames[currentCell[1]], value),
}); });
} }
@@ -1246,7 +1253,8 @@
const cellData = rowData[realColumnUniqueNames[cell[1]]]; const cellData = rowData[realColumnUniqueNames[cell[1]]];
if (shouldOpenMultilineDialog(cellData)) { if (shouldOpenMultilineDialog(cellData)) {
showModal(EditCellDataModal, { showModal(EditCellDataModal, {
value: stringifyCellValue(cellData, 'multilineEditorIntent').value, dataEditorTypesBehaviour: display?.driver?.dataEditorTypesBehaviour,
value: cellData,
onSave: value => grider.setCellValue(cell[0], realColumnUniqueNames[cell[1]], value), onSave: value => grider.setCellValue(cell[0], realColumnUniqueNames[cell[1]], value),
}); });
return true; return true;

View File

@@ -105,7 +105,8 @@
dispatchInsplaceEditor({ type: 'close' }); dispatchInsplaceEditor({ type: 'close' });
showModal(EditCellDataModal, { showModal(EditCellDataModal, {
value: stringifyCellValue(cellValue, 'multilineEditorIntent', editorTypes).value, value: cellValue,
dataEditorTypesBehaviour: editorTypes,
onSave: onSetValue, onSave: onSetValue,
}); });
}} }}

View File

@@ -157,7 +157,7 @@
<script lang="ts"> <script lang="ts">
import { getFilterValueExpression } from 'dbgate-filterparser'; import { getFilterValueExpression } from 'dbgate-filterparser';
import { filterName, stringifyCellValue } from 'dbgate-tools'; import { filterName, shouldOpenMultilineDialog, stringifyCellValue } from 'dbgate-tools';
import _ from 'lodash'; import _ from 'lodash';
@@ -175,7 +175,7 @@
import { plusExpandIcon } from '../icons/expandIcons'; import { plusExpandIcon } from '../icons/expandIcons';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import DictionaryLookupModal from '../modals/DictionaryLookupModal.svelte'; import DictionaryLookupModal from '../modals/DictionaryLookupModal.svelte';
import EditCellDataModal, { shouldOpenMultilineDialog } from '../modals/EditCellDataModal.svelte'; import EditCellDataModal from '../modals/EditCellDataModal.svelte';
import { showModal } from '../modals/modalTools'; import { showModal } from '../modals/modalTools';
import { apiCall } from '../utility/api'; import { apiCall } from '../utility/api';
@@ -490,7 +490,8 @@
const cellData = rowData[column.uniqueName]; const cellData = rowData[column.uniqueName];
if (shouldOpenMultilineDialog(cellData)) { if (shouldOpenMultilineDialog(cellData)) {
showModal(EditCellDataModal, { showModal(EditCellDataModal, {
value: stringifyCellValue(cellData, 'multilineEditorIntent').value, value: cellData,
dataEditorTypesBehaviour: display?.driver?.dataEditorTypesBehaviour,
onSave: value => grider.setCellValue(0, column.uniqueName, value), onSave: value => grider.setCellValue(0, column.uniqueName, value),
}); });
return true; return true;

View File

@@ -1,27 +1,3 @@
<script lang="ts" context="module">
export function shouldOpenMultilineDialog(value) {
if (_.isString(value)) {
if (value.includes('\n')) {
return true;
}
const parsed = safeJsonParse(value);
if (parsed && (_.isPlainObject(parsed) || _.isArray(parsed))) {
return true;
}
}
if (value?.$oid) {
return false;
}
if (value?.$date) {
return false;
}
if (_.isPlainObject(value) || _.isArray(value)) {
return true;
}
return false;
}
</script>
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte'; import { onMount } from 'svelte';
@@ -34,17 +10,20 @@
import ModalBase from './ModalBase.svelte'; import ModalBase from './ModalBase.svelte';
import { closeCurrentModal, showModal } from './modalTools'; import { closeCurrentModal, showModal } from './modalTools';
import SelectField from '../forms/SelectField.svelte'; import SelectField from '../forms/SelectField.svelte';
import { safeJsonParse } from 'dbgate-tools'; import { parseCellValue, safeJsonParse, stringifyCellValue } from 'dbgate-tools';
import { showSnackbarError } from '../utility/snackbar'; import { showSnackbarError } from '../utility/snackbar';
import ErrorMessageModal from './ErrorMessageModal.svelte'; import ErrorMessageModal from './ErrorMessageModal.svelte';
import da from 'date-fns/locale/da';
export let onSave; export let onSave;
export let value; export let value;
export let dataEditorTypesBehaviour;
let editor; let editor;
let syntaxMode = 'text'; let syntaxMode = 'text';
let textValue = value?.toString() || ''; let textValue = stringifyCellValue(value, 'multilineEditorIntent', dataEditorTypesBehaviour).value;
onMount(() => { onMount(() => {
editor.getEditor().focus(); editor.getEditor().focus();
@@ -61,7 +40,7 @@
function handleKeyDown(ev) { function handleKeyDown(ev) {
if (ev.keyCode == keycodes.enter && ev.ctrlKey) { if (ev.keyCode == keycodes.enter && ev.ctrlKey) {
onSave(textValue); onSave(parseCellValue(textValue, dataEditorTypesBehaviour));
closeCurrentModal(); closeCurrentModal();
} }
} }
@@ -90,7 +69,7 @@
value="OK" value="OK"
title="Ctrl+Enter" title="Ctrl+Enter"
on:click={() => { on:click={() => {
onSave(textValue); onSave(parseCellValue(textValue, dataEditorTypesBehaviour));
closeCurrentModal(); closeCurrentModal();
}} }}
/> />