Skip to content

Commit 5716035

Browse files
committed
add summary rows from unique values
1 parent 3be5e57 commit 5716035

File tree

5 files changed

+50
-21
lines changed

5 files changed

+50
-21
lines changed

ui/src/CellEdit.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
slTypes[ColumnType.Email] = "email"
8989
slTypes[ColumnType.Date] = "date"
9090
slTypes[ColumnType.URL] = "text"
91+
slTypes[ColumnType.Currency] = "currency"
9192
9293
let value
9394
</script>
@@ -115,7 +116,7 @@
115116
}}
116117
type={slTypes[type]}
117118
style="width:{width}px"
118-
value={value}
119+
value={value}
119120
on:sl-input={(e)=>{
120121
value = e.target.value
121122
}}

ui/src/Queries.svelte

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,17 @@ const queryStore = writable(initialQuery);
3737
3838
function changeQuery(newQuery) {
3939
currentQuery[activeHashB64] = newQuery
40-
console.log("new query", newQuery)
4140
queriedData[activeHashB64] = []
4241
$state.rows.forEach((row) => {
4342
if (newQuery.length === 0) {
4443
queriedData[activeHashB64].push(row.id)
4544
} else {
46-
console.log("jjk")
4745
// for key and value in row.cells
4846
let subbedQuery = newQuery
49-
// console.log("subbedQuery", subbedQuery)
5047
5148
Object.keys(row.cells).forEach((cellId) => {
52-
console.log("cellId", cellId)
5349
let value: any = '"' + row.cells[cellId]?.value + '"'
5450
55-
console.log($state.columnDefs.find((col) => col.id === cellId)?.type)
56-
5751
if ($state.columnDefs.find((col) => col.id === cellId)?.type === 1) {
5852
const tempValue = parseInt(row.cells[cellId]?.value)
5953
if (!isNaN(tempValue)) {
@@ -62,18 +56,15 @@ function changeQuery(newQuery) {
6256
}
6357
6458
subbedQuery = subbedQuery.replace(new RegExp(cellId, 'g'), value);
65-
console.log("subbedQuery", subbedQuery, value, cellId)
6659
subbedQuery = subbedQuery.replace(new RegExp('contains', 'g'), 'includes');
6760
})
6861
69-
console.log("subbedQuery", subbedQuery)
70-
if (eval(subbedQuery)) {
62+
// console.log("subbedQuery", subbedQuery)
63+
if (subbedQuery && eval(subbedQuery)) {
7164
queriedData[activeHashB64].push(row.id)
7265
}
7366
}
7467
})
75-
76-
console.log("queried data", queriedData[activeHashB64])
7768
}
7869
7970
// Function to handle query changes

ui/src/SummaryRow.svelte

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
{@const sum = Object.values(querriedData).reduce((acc, row) => {
6868
const cell = row.cells[def.id];
6969
if (cell && cell.value) {
70-
return acc + Number(cell.value);
70+
return acc + Number(cell.value.replace(/[^0-9-.]/g, ''));
7171
}
7272
return acc;
7373
}, 0)}
@@ -76,7 +76,7 @@
7676
{@const sum = Object.values(querriedData).reduce((acc, row) => {
7777
const cell = row.cells[def.id];
7878
if (cell && cell.value) {
79-
return acc + Number(cell.value);
79+
return acc + Number(cell.value.replace(/[^0-9-.]/g, ''));
8080
}
8181
return acc;
8282
}, 0)}
@@ -94,7 +94,7 @@
9494
}
9595
} else {
9696
console.log(Math.max(acc, Number(cell.value)))
97-
return Math.max(acc, Number(cell.value));
97+
return Math.max(acc, Number(cell.value.replace(/[^0-9-.]/g, '')));
9898
}
9999
}
100100
return acc;
@@ -114,7 +114,7 @@
114114
return Math.min(acc, dateNumber);
115115
}
116116
}
117-
return Math.min(acc, Number(cell.value));
117+
return Math.min(acc, Number(cell.value.replace(/[^0-9-.]/g, '')));
118118
}
119119
return acc;
120120
},
@@ -126,7 +126,7 @@
126126
{@const values = Object.values(querriedData).map(row => {
127127
const cell = row.cells[def.id];
128128
if (cell && cell.value) {
129-
return Number(cell.value);
129+
return Number(cell.value.replace(/[^0-9-.]/g, ''));
130130
}
131131
}).sort((a, b) => a - b).filter(value => value !== undefined)}
132132

@@ -135,7 +135,7 @@
135135
{@const values = Object.values(querriedData).map(row => {
136136
const cell = row.cells[def.id];
137137
if (cell && cell.value) {
138-
return Number(cell.value);
138+
return Number(cell.value.replace(/[^0-9-.]/g, ''));
139139
}
140140
}).filter(value => value !== undefined)}
141141
{@const counts = values.reduce((acc, value) => {
@@ -152,15 +152,15 @@
152152
{@const values = Object.values(querriedData).map(row => {
153153
const cell = row.cells[def.id];
154154
if (cell && cell.value) {
155-
return Number(cell.value);
155+
return Number(cell.value.replace(/[^0-9-.]/g, ''));
156156
}
157157
}).sort((a, b) => a - b).filter(value => value !== undefined)}
158158
{values[values.length - 1] - values[0]}
159159
{:else if sumType == SumType.StDeviation}
160160
{@const values = Object.values(querriedData).map(row => {
161161
const cell = row.cells[def.id];
162162
if (cell && cell.value) {
163-
return Number(cell.value);
163+
return Number(cell.value.replace(/[^0-9-.]/g, ''));
164164
}
165165
}).filter(value => value !== undefined)}
166166
{@const mean = values.reduce((acc, value) => acc + value, 0) / values.length}
@@ -184,7 +184,7 @@
184184
{#if !embedded}
185185
<div style="float: right; color: #baa480; margin: 2px;">
186186
{SumType[sumType]}
187-
{#if def.type == ColumnType.Number}
187+
{#if def.type == ColumnType.Number || def.type == ColumnType.Currency}
188188
<select
189189
style="width: 15px;"
190190
bind:value={sumType}

ui/src/TablePane.svelte

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
$: showEditHeader = false;
5959
$: editHeaderIndex = null;
6060
$: dataView = false;
61+
$: addUniqueSummaryFromColumn = null;
6162
6263
function setFilterOption(newOption) {
6364
filterOption = newOption;
@@ -542,6 +543,41 @@
542543
<h3>{query.label}</h3>
543544
</div>
544545
{/each}
546+
<!-- allow adding a new summary row for each label from a label row -->
547+
Summary by unique value:
548+
<select
549+
on:change={(e)=>{
550+
addUniqueSummaryFromColumn = e.target.value
551+
}}
552+
>
553+
<option></option>
554+
{#each $state.columnDefs as def}
555+
<option value={def.id}>{def.name}</option>
556+
{/each}
557+
</select>
558+
{#if addUniqueSummaryFromColumn}
559+
{@const columnValues = $state.rows.map(row=>row.cells[addUniqueSummaryFromColumn]?.value)}
560+
{#each Array.from(new Set(columnValues)) as value}
561+
<div class="modal-body" style="display:flex; margin: 10px 0">
562+
<button
563+
class="add-summary-row-button"
564+
on:click={()=>{
565+
// add summary row to board
566+
let summaryDefs = {}
567+
$state.columnDefs.forEach(def=> {
568+
// if (def.type) {
569+
// summaryDefs[def.id] = def.type
570+
// }
571+
summaryDefs[def.id] = 0
572+
})
573+
activeBoard.requestChanges([{ type: "add-summary-row", summaryRow: {id: uuidv1(), query: `${addUniqueSummaryFromColumn} == ${JSON.stringify(value)}`, queryLabel: `${value}`, summaryDefs: summaryDefs}}]);
574+
}}>
575+
<SvgIcon icon=faPlus size=10 style="height:20px;"/>
576+
</button>&nbsp;
577+
<h3>{$state.columnDefs.find(def=>def.id == addUniqueSummaryFromColumn).name} = {value}</h3>
578+
</div>
579+
{/each}
580+
{/if}
545581
<!-- <button on:click={()=>{newSummaryRowModal = false}}>Done</button> -->
546582
</div>
547583
</div>

ui/src/board.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export enum ColumnType {
3232
String,
3333
Number,
3434
Date,
35+
Currency,
3536
Email,
3637
URL,
3738
Label,

0 commit comments

Comments
 (0)