message view UX

This commit is contained in:
SPRINX0\prochazka
2024-11-06 15:39:51 +01:00
parent 193940fd63
commit fbf288198b
11 changed files with 191 additions and 37 deletions

View File

@@ -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>

View File

@@ -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}
/>

View File

@@ -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}
/>

View File

@@ -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>