From 35a9aa40cbbb86bd004cf18792951dd3f81fc859 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 18:31:26 +0100 Subject: [PATCH 01/16] =?UTF-8?q?basic=20track=20deletion=20working=20?= =?UTF-8?q?=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #11 --- src/components/Tracks.svelte | 65 +++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/src/components/Tracks.svelte b/src/components/Tracks.svelte index ccacf79b..ca09781c 100644 --- a/src/components/Tracks.svelte +++ b/src/components/Tracks.svelte @@ -23,8 +23,25 @@ renderdatatable(); }, 100); }); - table_visible = true; + if (trackscache.length > 0) { + table_visible = true; + } }); + window.track__delete_handler = () => { + const trackid = parseInt(window.event.target.getAttribute("data-trackid")); + // const track = trackscache.find((e) => e.id == trackid); + // console.log(track); + // ----- + // TODO: modal or double click confirmation? + TrackService.trackControllerRemove(trackid) + .then((resp) => { + const newStoreVal = trackscache.filter((obj) => obj.id !== trackid); + tracksstore.set(newStoreVal); + }) + .catch((err) => { + console.log(err); + }); + }; function renderdatatable() { let tabledata = []; trackscache.forEach((track) => { @@ -34,31 +51,33 @@ track.minimumLapTime || 0, html(` - + `), ]); }); - if (datatable_inited === false) { - datatable = new Grid({ - columns: [ - $_("track-name"), - $_("track-length-in-m"), - $_("minimum-lap-time-in-s"), - $_("action"), - ], - language: getlang($json("datatable")), - sort: true, - search: { enabled: true }, - data: tabledata, - pagination: { - enabled: true, - limit: 25, - summary: false, - }, - }).render(table); - datatable_inited = true; - } else { - datatable.updateConfig({ data: tabledata }).forceRender(); + if (trackscache.length > 0) { + if (datatable_inited === false) { + datatable = new Grid({ + columns: [ + $_("track-name"), + $_("track-length-in-m"), + $_("minimum-lap-time-in-s"), + $_("action"), + ], + language: getlang($json("datatable")), + sort: true, + search: { enabled: true }, + data: tabledata, + pagination: { + enabled: true, + limit: 25, + summary: false, + }, + }).render(table); + datatable_inited = true; + } else { + datatable.updateConfig({ data: tabledata }).forceRender(); + } } } let table_visible = false; From 6e00ac8f1f9bcc9ac714177c5ab2d1d04854aaa5 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 18:31:36 +0100 Subject: [PATCH 02/16] improved empty state ref #11 --- src/components/TracksEmptyState.svelte | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/components/TracksEmptyState.svelte b/src/components/TracksEmptyState.svelte index 8037b1fa..af1a7220 100644 --- a/src/components/TracksEmptyState.svelte +++ b/src/components/TracksEmptyState.svelte @@ -253,17 +253,7 @@ d="M714.88 703.47l18.16-4.26v4.26l-18.16 4.26v-4.26zM931.72 628.54l18.16-4.26v4.26l-18.16 4.25v-4.25z" />

{$_('no-tracks-added-yet')}
- { - modal_open = true; - }} - class="underline text-blue-500 cursor-pointer">{$_('add-your-first-track')} -
- { - modal_open = true; - }} - class="cursor-pointer inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">{$_('add-your-first-track')} + {$_('add-your-first-track')}

From 10bf88e4ba2390dbf78925f0541c49a4abe3041d Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 20:27:06 +0100 Subject: [PATCH 03/16] fixed datatable-emptystate transition ref #11 --- src/components/Tracks.svelte | 85 +++++++++++++++--------------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/src/components/Tracks.svelte b/src/components/Tracks.svelte index ca09781c..bad8d43e 100644 --- a/src/components/Tracks.svelte +++ b/src/components/Tracks.svelte @@ -7,36 +7,29 @@ import { Grid, html } from "gridjs"; import "gridjs/dist/theme/mermaid.css"; import { tracks as tracksstore } from "../store.js"; - let trackscache = []; + $: trackscache = []; let table; let datatable; let datatable_inited = false; - let initial_load_done = false; + tracksstore.subscribe((val) => { + trackscache = val; + setTimeout(() => { + if (val.length > 0) { + renderdatatable(); + } + }, 100); + }); tracks_promise.then((data) => { tracksstore.set(data); - tracksstore.subscribe((val) => { - trackscache = val; - if (initial_load_done === false) { - initial_load_done = true; - } - setTimeout(() => { - renderdatatable(); - }, 100); - }); - if (trackscache.length > 0) { - table_visible = true; - } }); window.track__delete_handler = () => { const trackid = parseInt(window.event.target.getAttribute("data-trackid")); - // const track = trackscache.find((e) => e.id == trackid); - // console.log(track); - // ----- // TODO: modal or double click confirmation? TrackService.trackControllerRemove(trackid) - .then((resp) => { + .then(() => { const newStoreVal = trackscache.filter((obj) => obj.id !== trackid); tracksstore.set(newStoreVal); + renderdatatable(); }) .catch((err) => { console.log(err); @@ -55,36 +48,36 @@ `), ]); }); - if (trackscache.length > 0) { - if (datatable_inited === false) { - datatable = new Grid({ - columns: [ - $_("track-name"), - $_("track-length-in-m"), - $_("minimum-lap-time-in-s"), - $_("action"), - ], - language: getlang($json("datatable")), - sort: true, - search: { enabled: true }, - data: tabledata, - pagination: { - enabled: true, - limit: 25, - summary: false, - }, - }).render(table); - datatable_inited = true; - } else { - datatable.updateConfig({ data: tabledata }).forceRender(); - } + + if (datatable_inited === false) { + datatable = new Grid({ + columns: [ + $_("track-name"), + $_("track-length-in-m"), + $_("minimum-lap-time-in-s"), + $_("action"), + ], + language: getlang($json("datatable")), + sort: true, + search: { enabled: true }, + data: tabledata, + pagination: { + enabled: true, + limit: 25, + summary: false, + }, + }).render(table); + datatable_inited = true; + } else { + datatable.updateConfig({ data: tabledata }).forceRender(); } } - let table_visible = false; -{#if table_visible} +{#if trackscache.length > 0}
+{:else} + {/if} {#await tracks_promise}
{$_('track-data-is-being-loaded')}

{$_('this-might-take-a-moment')}

-{:then tracks} - {#if tracks.length > 0} - - {:else} - - {/if} {:catch error}
From 02bfecd54015ad6c6de25c246552feeab5c084ef Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 20:34:10 +0100 Subject: [PATCH 04/16] EmptyState fixup ref #11 --- src/components/Tracks.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Tracks.svelte b/src/components/Tracks.svelte index bad8d43e..46d549b3 100644 --- a/src/components/Tracks.svelte +++ b/src/components/Tracks.svelte @@ -76,8 +76,6 @@ {#if trackscache.length > 0}
-{:else} - {/if} {#await tracks_promise}
{$_('track-data-is-being-loaded')}

{$_('this-might-take-a-moment')}

+{:then} + {#if trackscache.length === 0} + + {/if} {:catch error}
From 039fd8f90ebccf8594c608c4cd7c8fe5178c66d0 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 21:16:50 +0100 Subject: [PATCH 05/16] basic edit logic in table ref #11 --- src/components/Tracks.svelte | 57 ++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/components/Tracks.svelte b/src/components/Tracks.svelte index 46d549b3..34014f33 100644 --- a/src/components/Tracks.svelte +++ b/src/components/Tracks.svelte @@ -22,6 +22,34 @@ tracks_promise.then((data) => { tracksstore.set(data); }); + window.track__edit_cancel = () => { + const trackid = parseInt(window.event.target.getAttribute("data-trackid")); + // + const elem = document.querySelector( + `[data-id="triggered_table_actions_${trackid}"]` + ).parentNode.parentNode.parentNode; + console.log(elem.childNodes[1].childNodes[0].value); + // + elem.childNodes[0].innerHTML = `${elem.childNodes[0].childNodes[0].value}`; + elem.childNodes[1].innerHTML = `${elem.childNodes[1].childNodes[0].value}`; + elem.childNodes[2].innerHTML = `${elem.childNodes[2].childNodes[0].value}`; + // + document + .querySelector(`[data-id="default_table_actions_${trackid}"]`) + .classList.remove("hidden"); + document + .querySelector(`[data-id="triggered_table_actions_${trackid}"]`) + .classList.add("hidden"); + }; + window.track__edit_save = () => { + const trackid = parseInt(window.event.target.getAttribute("data-trackid")); + document + .querySelector(`[data-id="default_table_actions_${trackid}"]`) + .classList.remove("hidden"); + document + .querySelector(`[data-id="triggered_table_actions_${trackid}"]`) + .classList.add("hidden"); + }; window.track__delete_handler = () => { const trackid = parseInt(window.event.target.getAttribute("data-trackid")); // TODO: modal or double click confirmation? @@ -35,6 +63,25 @@ console.log(err); }); }; + window.track__edit_handler = () => { + const trackid = parseInt(window.event.target.getAttribute("data-trackid")); + document + .querySelector(`[data-id="default_table_actions_${trackid}"]`) + .classList.add("hidden"); + document + .querySelector(`[data-id="triggered_table_actions_${trackid}"]`) + .classList.remove("hidden"); + const elem = document.querySelector( + `[data-id="triggered_table_actions_${trackid}"]` + ).parentNode.parentNode.parentNode; + const trackname = elem.childNodes[0].textContent; + const tracklength = parseInt(elem.childNodes[1].textContent); + const trackmintime = parseInt(elem.childNodes[2].textContent); + elem.childNodes[0].innerHTML = ``; + elem.childNodes[1].innerHTML = ``; + elem.childNodes[2].innerHTML = ``; + }; + // function renderdatatable() { let tabledata = []; trackscache.forEach((track) => { @@ -43,8 +90,14 @@ track.distance, track.minimumLapTime || 0, html(` - - + +
+ + +
`), ]); }); From 68de0762271eb9dbe0e7135f6457cf0b09d889d6 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 21:30:01 +0100 Subject: [PATCH 06/16] =?UTF-8?q?edit=20is=20working=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #11 --- src/components/Tracks.svelte | 38 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/components/Tracks.svelte b/src/components/Tracks.svelte index 34014f33..91fee3ce 100644 --- a/src/components/Tracks.svelte +++ b/src/components/Tracks.svelte @@ -22,25 +22,7 @@ tracks_promise.then((data) => { tracksstore.set(data); }); - window.track__edit_cancel = () => { - const trackid = parseInt(window.event.target.getAttribute("data-trackid")); - // - const elem = document.querySelector( - `[data-id="triggered_table_actions_${trackid}"]` - ).parentNode.parentNode.parentNode; - console.log(elem.childNodes[1].childNodes[0].value); - // - elem.childNodes[0].innerHTML = `${elem.childNodes[0].childNodes[0].value}`; - elem.childNodes[1].innerHTML = `${elem.childNodes[1].childNodes[0].value}`; - elem.childNodes[2].innerHTML = `${elem.childNodes[2].childNodes[0].value}`; - // - document - .querySelector(`[data-id="default_table_actions_${trackid}"]`) - .classList.remove("hidden"); - document - .querySelector(`[data-id="triggered_table_actions_${trackid}"]`) - .classList.add("hidden"); - }; + window.track__edit_cancel = () => renderdatatable(); window.track__edit_save = () => { const trackid = parseInt(window.event.target.getAttribute("data-trackid")); document @@ -49,6 +31,24 @@ document .querySelector(`[data-id="triggered_table_actions_${trackid}"]`) .classList.add("hidden"); + // + const elem = document.querySelector( + `[data-id="triggered_table_actions_${trackid}"]` + ).parentNode.parentNode.parentNode; + TrackService.trackControllerPut(trackid, { + id: trackid, + name: elem.childNodes[0].childNodes[0].value, + distance: parseInt(elem.childNodes[1].childNodes[0].value), + minimumLapTime: parseInt(elem.childNodes[2].childNodes[0].value), + }) + .then((r) => { + elem.childNodes[0].innerHTML = `${elem.childNodes[0].childNodes[0].value}`; + elem.childNodes[1].innerHTML = `${elem.childNodes[1].childNodes[0].value}`; + elem.childNodes[2].innerHTML = `${elem.childNodes[2].childNodes[0].value}`; + }) + .catch((err) => { + console.error(err); + }); }; window.track__delete_handler = () => { const trackid = parseInt(window.event.target.getAttribute("data-trackid")); From 34ecb8b2fb19d243db35bd59f98d93f08d522f25 Mon Sep 17 00:00:00 2001 From: Philipp Dormann Date: Tue, 5 Jan 2021 21:38:47 +0100 Subject: [PATCH 07/16] move toastify css to app base ref #11 --- src/App.svelte | 1 + src/components/Login.svelte | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.svelte b/src/App.svelte index 68a8f420..8c828204 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,5 +1,6 @@ {#if modal_open} -
+