SYNC: form cell view - show JSON

This commit is contained in:
SPRINX0\prochazka
2025-12-15 10:31:47 +01:00
committed by Diflow
parent 088dfcd4dc
commit 4527866276

View File

@@ -7,7 +7,6 @@
import createRef from '../utility/createRef'; import createRef from '../utility/createRef';
import { showModal } from '../modals/modalTools'; import { showModal } from '../modals/modalTools';
import EditCellDataModal from '../modals/EditCellDataModal.svelte'; import EditCellDataModal from '../modals/EditCellDataModal.svelte';
import ShowFormButton from '../formview/ShowFormButton.svelte';
import { openJsonDocument } from '../tabs/JsonTab.svelte'; import { openJsonDocument } from '../tabs/JsonTab.svelte';
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte'; import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
import SearchInput from '../elements/SearchInput.svelte'; import SearchInput from '../elements/SearchInput.svelte';
@@ -16,6 +15,8 @@
import ColumnLabel from '../elements/ColumnLabel.svelte'; import ColumnLabel from '../elements/ColumnLabel.svelte';
import CheckboxField from '../forms/CheckboxField.svelte'; import CheckboxField from '../forms/CheckboxField.svelte';
import { getLocalStorage, setLocalStorage } from '../utility/storageCache'; import { getLocalStorage, setLocalStorage } from '../utility/storageCache';
import JSONTree from '../jsontree/JSONTree.svelte';
import Link from '../elements/Link.svelte';
export let selection; export let selection;
@@ -107,10 +108,11 @@
function handleClick(field) { function handleClick(field) {
if (!editable || !grider) return; if (!editable || !grider) return;
if (isJsonValue(field.value) && !field.hasMultipleValues) { if (isJsonValue(field.value)) return;
openEditModal(field); // if (isJsonValue(field.value) && !field.hasMultipleValues) {
return; // openEditModal(field);
} // return;
// }
startEditing(field); startEditing(field);
} }
@@ -171,11 +173,12 @@
if (nextIndex < 0 || nextIndex >= filteredFields.length) return; if (nextIndex < 0 || nextIndex >= filteredFields.length) return;
tick().then(() => { tick().then(() => {
if (isJsonValue(nextField.value)) { startEditing(nextField);
openEditModal(nextField); // if (isJsonValue(nextField.value)) {
} else { // openEditModal(nextField);
startEditing(nextField); // } else {
} // startEditing(nextField);
// }
}); });
} }
@@ -233,6 +236,11 @@
if (!isJsonLikeLongString(value)) return null; if (!isJsonLikeLongString(value)) return null;
return safeJsonParse(value); return safeJsonParse(value);
} }
function handleEdit(field) {
editingColumn = null;
openEditModal(field);
}
</script> </script>
<div class="outer"> <div class="outer">
@@ -247,13 +255,14 @@
<CloseSearchButton bind:filter /> <CloseSearchButton bind:filter />
</SearchBoxWrapper> </SearchBoxWrapper>
<CheckboxField <CheckboxField
defaultChecked={notNull}
on:change={e => { on:change={e => {
// @ts-ignore // @ts-ignore
notNull = e.target.checked; notNull = e.target.checked;
setLocalStorage('dataGridCellDataFormNotNull', notNull ? 'true' : 'false'); setLocalStorage('dataGridCellDataFormNotNull', notNull ? 'true' : 'false');
}} }}
/> />
{_t('tableCell.notNull', { defaultMessage: 'Not null' })} {_t('tableCell.hideNullValues', { defaultMessage: 'Hide NULL values' })}
</div> </div>
{/if} {/if}
<div class="inner"> <div class="inner">
@@ -262,7 +271,11 @@
{:else} {:else}
{#each filteredFields as field (field.uniqueName)} {#each filteredFields as field (field.uniqueName)}
<div class="field"> <div class="field">
<div class="field-name"><ColumnLabel {...field} showDataType /></div> <div class="field-name">
<ColumnLabel {...field} showDataType /><Link onClick={() => handleEdit(field)}
>{_t('tableCell.edit', { defaultMessage: 'Edit' })}
</Link>
</div>
<div class="field-value" class:editable on:click={() => handleClick(field)}> <div class="field-value" class:editable on:click={() => handleClick(field)}>
{#if editingColumn === field.uniqueName} {#if editingColumn === field.uniqueName}
<div class="editor-wrapper"> <div class="editor-wrapper">
@@ -275,20 +288,13 @@
on:blur={() => handleBlur(field)} on:blur={() => handleBlur(field)}
class="inline-editor" class="inline-editor"
/> />
{#if editable && !field.hasMultipleValues}
<ShowFormButton
icon="icon edit"
on:click={() => {
editingColumn = null;
openEditModal(field);
}}
/>
{/if}
</div> </div>
{:else if field.hasMultipleValues} {:else if field.hasMultipleValues}
<span class="multiple-values" <span class="multiple-values"
>({_t('tableCell.multipleValues', { defaultMessage: 'Multiple values' })})</span >({_t('tableCell.multipleValues', { defaultMessage: 'Multiple values' })})</span
> >
{:else if isJsonValue(field.value)}
<JSONTree value={getJsonParsedValue(field.value)} />
{:else} {:else}
<CellValue <CellValue
{rowData} {rowData}
@@ -296,9 +302,6 @@
jsonParsedValue={getJsonParsedValue(field.value)} jsonParsedValue={getJsonParsedValue(field.value)}
{editorTypes} {editorTypes}
/> />
{#if isJsonValue(field.value)}
<ShowFormButton icon="icon open-in-new" on:click={() => openJsonInNewTab(field)} />
{/if}
{/if} {/if}
</div> </div>
</div> </div>
@@ -357,6 +360,8 @@
font-size: 11px; font-size: 11px;
color: var(--theme-font-2); color: var(--theme-font-2);
border-bottom: 1px solid var(--theme-border); border-bottom: 1px solid var(--theme-border);
display: flex;
justify-content: space-between;
} }
.field-value { .field-value {