Skip to content

Commit 9fe9fc1

Browse files
committed
Fixed initial sorting
1 parent eca183a commit 9fe9fc1

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

src/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<div class="scriptonly" id="loading">
2121
<img src="/images/spinner.gif" alt="Loading..." />
2222
</div>
23-
<div id="achtable" style="display:none">
23+
<div id="emojitable" style="display:none">
2424
</div>
2525
<div id="errdiv" class="d-none d-flex flex-column justify-content-center align-items-center w-100 h-100">
2626
<div class="alert alert-danger m-3" role="alert">

src/index.ts

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type SearchData = {
3636

3737
type EmojiData = {
3838
codepoints: string;
39+
order: number;
3940
emoji: string;
4041
description: string;
4142
tags: string[];
@@ -242,6 +243,7 @@ async function main() {
242243
return;
243244
}
244245

246+
var order = 0;
245247
for (const row of rawData.data) {
246248
const tags = [row.group.replaceAll(' ', '-'), row.subgroup, row.qualification, row.version];
247249
if (row.description.endsWith("skin tone")) {
@@ -254,6 +256,7 @@ async function main() {
254256
}
255257
data.push( {
256258
codepoints: row.codepoints,
259+
order: order++,
257260
emoji: row.emoji,
258261
description: row.description,
259262
tags,
@@ -264,17 +267,17 @@ async function main() {
264267
console.log(data[0]);
265268

266269
const qs = new URLSearchParams(window.location.search);
267-
const sort: Sorter[] = [ { column: "codepoints", dir: "asc" } ];
270+
const initialSort: Sorter[] = [ { column: "emoji", dir: "asc" } ];
268271
const filters: Filter[] = [];
269272
if (qs) {
270273
;
271274
for (const [key, value] of qs.entries()) {
272275
if (key == "sort") {
273-
sort[0].column = value;
276+
initialSort[0].column = value;
274277
continue;
275278
}
276279
if (key == "dir") {
277-
sort[0].dir = (value == "desc") ? "desc" : "asc";
280+
initialSort[0].dir = value == "desc" ? "desc" : "asc";
278281
}
279282
if (key && value) {
280283
filters.push({ field: key, type: "=", value: value });
@@ -295,7 +298,7 @@ async function main() {
295298
TooltipModule,
296299
]);
297300

298-
const table = new Tabulator("#achtable", {
301+
const table = new Tabulator("#emojitable", {
299302
autoResize: true,
300303
data,
301304
columns: [
@@ -331,9 +334,13 @@ async function main() {
331334
return headerValue == rowValue;
332335
},
333336
headerHozAlign: "center",
334-
headerSort: false,
335337
hozAlign: "center",
336338
responsive: 0,
339+
sorter: (a, b, aRow, bRow, column, dir, sorterParams) => {
340+
var aOrder = aRow.getData().order;
341+
var bOrder = bRow.getData().order;
342+
return aOrder - bOrder;
343+
},
337344
title: "Emoji",
338345
width: 150,
339346
},
@@ -389,7 +396,7 @@ async function main() {
389396
],
390397
height: "100%",
391398
initialHeaderFilter: filters,
392-
initialSort: [{ column: "code", dir: "asc" }],
399+
initialSort,
393400
layout: "fitDataStretch",
394401
placeholder: "No matches",
395402
responsiveLayout: "hide",
@@ -402,31 +409,30 @@ async function main() {
402409

403410
table.on("dataFiltered", function (filters, rows) {
404411
var el = document.getElementById("rowcount");
412+
var qs = new URLSearchParams(window.location.search);
413+
for (const col of table.getColumns()) {
414+
qs.delete(col.getField());
415+
}
405416
if (filters && filters.length > 0) {
406417
el!.innerHTML = `Rows: ${rows.length.toLocaleString()} of ${data.length.toLocaleString()}`;
407-
var qs = filters
408-
.map(f => `${encodeURIComponent(f.field)}=${encodeURIComponent(f.value)}`)
409-
.join("&");
410-
qs += `&sort=${table.getSorters()[0]?.column.getField()}&dir=${table.getSorters()[0]?.dir}`;
411-
window.history.replaceState(null, "", "?" + qs);
418+
for (const f of filters) {
419+
qs.set(f.field, f.value as string);
420+
}
412421
} else {
413422
el!.innerHTML = `Rows: ${data.length.toLocaleString()}`;
414423
}
424+
window.history.replaceState(null, "", "?" + qs);
415425
});
416426

417427
table.on("dataSorted", function (sorters, rows) {
418-
var qs = `sort=${sorters[0]?.column.getField()}&dir=${sorters[0]?.dir}`;
419-
const filters = table.getFilters(true);
420-
if (filters && filters.length > 0) {
421-
qs = filters
422-
.map(f => `${encodeURIComponent(f.field)}=${encodeURIComponent(f.value)}`)
423-
.join("&") + "&" + qs;
424-
}
428+
var qs = new URLSearchParams(window.location.search);
429+
qs.set("sort", sorters[0]?.column.getField());
430+
qs.set("dir", sorters[0]?.dir);
425431
window.history.replaceState(null, "", "?" + qs);
426432
});
427433

428434
document.getElementById("loading")!.style.display = "none";
429-
document.getElementById("achtable")!.style.display = "block";
435+
document.getElementById("emojitable")!.style.display = "block";
430436
}
431437

432438
main();

0 commit comments

Comments
 (0)