-
Notifications
You must be signed in to change notification settings - Fork 4
/
FeaturePropTopValues.svelte
84 lines (74 loc) · 1.82 KB
/
FeaturePropTopValues.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{#if showHeader}
<div style="margin: 5px 0 5px 0;">
Top values by
<select bind:value="valueSort">
<option>count</option>
<option>values</option>
</select>
</div>
{/if}
<table>
<thead>
<tr><td style="text-align: right;">#</td><td></td><td>Value</td></tr>
</thead>
<tbody>
{#each valueCounts.slice(0, 50) as [value, count], i }
<tr>
<td style="width: 15px; text-align: right;">{count}</td>
<td style="width: 15px;">
<!-- uses color calc code shared with tangram-->
{#if valueColorFunction}
<span class="dot" style="background-color: {valueColorFunction(value)};">
</span>
{/if}
</td>
<td
class="value_row"
class:active="propValue != '' && value == propValue"
on:click="set({propValue: (value != propValue ? value : '')})">
{maybeStringifyObject(value)}
</td>
</tr>
{/each}
</tbody>
</table>
{#if valueCounts.length > 50}
<i>{valueCounts.length - 50} more {valueCounts.length - 50 > 1 ? 'values' : 'value'} for {prop} not shown</i>
{/if}
<script>
export default {
data() {
return {
prop: null,
propValue: null,
valueSort: null,
valueCounts: [],
valueColorFunction: null,
showHeader: true
}
},
helpers: {
maybeStringifyObject(v) {
// stringify objects, otherwise just return original object
return (v != null && typeof v === 'object') ? JSON.stringify(v) : v;
}
}
};
</script>
<style>
.dot {
height: 11px;
width: 11px;
background-color: yellow;
border: 2px solid grey;
border-radius: 50%;
display: inline-block;
vertical-align: bottom;
}
.active {
background-color: lightyellow; padding: 3px;
}
.value_row:hover {
background-color: rgba(240, 240, 240, 0.75);
}
</style>