mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-21 04:46:02 +00:00
message view UX
This commit is contained in:
@@ -4,20 +4,30 @@
|
||||
import JSONNode from './JSONNode.svelte';
|
||||
import JSONKey from './JSONKey.svelte';
|
||||
|
||||
export let key, keys, colon = ':', label = '', isParentExpanded, isParentArray, isArray = false, bracketOpen, bracketClose;
|
||||
export let key,
|
||||
keys,
|
||||
colon = ':',
|
||||
label = '',
|
||||
isParentExpanded,
|
||||
isParentArray,
|
||||
isArray = false,
|
||||
bracketOpen,
|
||||
bracketClose;
|
||||
export let previewKeys = keys;
|
||||
export let getKey = key => key;
|
||||
export let getValue = key => key;
|
||||
export let getPreviewValue = getValue;
|
||||
export let expanded = false, expandable = true;
|
||||
export let expanded = false,
|
||||
expandable = true;
|
||||
export let elementValue = null;
|
||||
export let onRootExpandedChanged = null;
|
||||
|
||||
const context = getContext('json-tree-context-key');
|
||||
setContext('json-tree-context-key', { ...context, colon })
|
||||
const elementData=getContext('json-tree-element-data');
|
||||
setContext('json-tree-context-key', { ...context, colon });
|
||||
const elementData = getContext('json-tree-element-data');
|
||||
const slicedKeyCount = getContext('json-tree-sliced-key-count');
|
||||
|
||||
$: slicedKeys = expanded ? keys: previewKeys.slice(0, slicedKeyCount || 5);
|
||||
$: slicedKeys = expanded ? keys : previewKeys.slice(0, slicedKeyCount || 5);
|
||||
|
||||
$: if (!isParentExpanded) {
|
||||
expanded = false;
|
||||
@@ -25,6 +35,9 @@
|
||||
|
||||
function toggleExpand() {
|
||||
expanded = !expanded;
|
||||
if (onRootExpandedChanged) {
|
||||
onRootExpandedChanged(expanded);
|
||||
}
|
||||
}
|
||||
|
||||
function expand() {
|
||||
@@ -34,10 +47,41 @@
|
||||
let domElement;
|
||||
|
||||
$: if (domElement && elementData && elementValue) {
|
||||
elementData.set(domElement, elementValue)
|
||||
elementData.set(domElement, elementValue);
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<li class:indent={isParentExpanded} class:jsonValueHolder={!!elementValue} bind:this={domElement}>
|
||||
<label>
|
||||
{#if expandable && isParentExpanded}
|
||||
<JSONArrow on:click={toggleExpand} {expanded} />
|
||||
{/if}
|
||||
<JSONKey {key} colon={context.colon} {isParentExpanded} {isParentArray} on:click={toggleExpand} />
|
||||
<span on:click={toggleExpand}><span>{label}</span>{bracketOpen}</span>
|
||||
</label>
|
||||
{#if isParentExpanded}
|
||||
<ul class:collapse={!expanded} on:click={expand}>
|
||||
{#each slicedKeys as key, index}
|
||||
<JSONNode
|
||||
key={getKey(key)}
|
||||
isParentExpanded={expanded}
|
||||
isParentArray={isArray}
|
||||
value={expanded ? getValue(key) : getPreviewValue(key)}
|
||||
/>
|
||||
{#if !expanded && index < previewKeys.length - 1}
|
||||
<span class="comma">,</span>
|
||||
{/if}
|
||||
{/each}
|
||||
{#if slicedKeys.length < previewKeys.length}
|
||||
<span>…</span>
|
||||
{/if}
|
||||
</ul>
|
||||
{:else}
|
||||
<span>…</span>
|
||||
{/if}
|
||||
<span>{bracketClose}</span>
|
||||
</li>
|
||||
|
||||
<style>
|
||||
label {
|
||||
display: inline-block;
|
||||
@@ -60,28 +104,3 @@
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
<li class:indent={isParentExpanded} class:jsonValueHolder={!!elementValue} bind:this={domElement}>
|
||||
<label>
|
||||
{#if expandable && isParentExpanded}
|
||||
<JSONArrow on:click={toggleExpand} {expanded} />
|
||||
{/if}
|
||||
<JSONKey {key} colon={context.colon} {isParentExpanded} {isParentArray} on:click={toggleExpand} />
|
||||
<span on:click={toggleExpand}><span>{label}</span>{bracketOpen}</span>
|
||||
</label>
|
||||
{#if isParentExpanded}
|
||||
<ul class:collapse={!expanded} on:click={expand}>
|
||||
{#each slicedKeys as key, index}
|
||||
<JSONNode key={getKey(key)} isParentExpanded={expanded} isParentArray={isArray} value={expanded ? getValue(key) : getPreviewValue(key)} />
|
||||
{#if !expanded && index < previewKeys.length - 1}
|
||||
<span class="comma">,</span>
|
||||
{/if}
|
||||
{/each}
|
||||
{#if slicedKeys.length < previewKeys.length }
|
||||
<span>…</span>
|
||||
{/if}
|
||||
</ul>
|
||||
{:else}
|
||||
<span>…</span>
|
||||
{/if}
|
||||
<span>{bracketClose}</span>
|
||||
</li>
|
||||
@@ -15,6 +15,7 @@
|
||||
export let isParentArray;
|
||||
export let expanded = !!getContext('json-tree-default-expanded');
|
||||
export let labelOverride = null;
|
||||
export let onRootExpandedChanged = null;
|
||||
|
||||
$: nodeType = objType(value);
|
||||
$: componentType = getComponent(nodeType);
|
||||
@@ -79,4 +80,5 @@
|
||||
{valueGetter}
|
||||
{expanded}
|
||||
{labelOverride}
|
||||
{onRootExpandedChanged}
|
||||
/>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
export let key, value, isParentExpanded, isParentArray, nodeType;
|
||||
export let expanded = false;
|
||||
export let labelOverride = null;
|
||||
export let onRootExpandedChanged = null;
|
||||
|
||||
$: keys = Object.getOwnPropertyNames(value);
|
||||
|
||||
@@ -24,4 +25,5 @@
|
||||
bracketOpen={'{'}
|
||||
bracketClose={'}'}
|
||||
elementValue={value}
|
||||
{onRootExpandedChanged}
|
||||
/>
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
export let labelOverride = null;
|
||||
export let slicedKeyCount = null;
|
||||
export let disableContextMenu = null;
|
||||
export let onRootExpandedChanged = null;
|
||||
|
||||
export let isDeleted = false;
|
||||
export let isInserted = false;
|
||||
@@ -66,7 +67,15 @@
|
||||
class:isInserted
|
||||
class:isModified
|
||||
>
|
||||
<JSONNode {key} {value} isParentExpanded={true} isParentArray={false} {expanded} {labelOverride} />
|
||||
<JSONNode
|
||||
{key}
|
||||
{value}
|
||||
isParentExpanded={true}
|
||||
isParentArray={false}
|
||||
{expanded}
|
||||
{labelOverride}
|
||||
{onRootExpandedChanged}
|
||||
/>
|
||||
</ul>
|
||||
|
||||
<style>
|
||||
|
||||
Reference in New Issue
Block a user