From 156fefae3b265e443a322b7a50e5f08e33d5f297 Mon Sep 17 00:00:00 2001 From: evlist Date: Tue, 6 Dec 2022 21:27:25 +0100 Subject: [PATCH] Working on Wpt save after edition. --- package-lock.json | 7 +++++++ package.json | 1 + src/components/wpt/Wpt.tsx | 23 +++++++++++++++++++++-- src/db/change-handler.ts | 4 ++-- src/db/wpt.ts | 15 ++++++++++++++- src/workers/dispatcher-worker.ts | 4 +++- 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0c340d..85280d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "devDependencies": { "@capacitor/cli": "^3.4.3", "@testing-library/jest-dom": "^5.16.2", + "@types/lodash": "^4.14.191", "@types/memoizee": "^0.4.8", "jsdom": ">19.0.0", "solid-testing-library": ">0.3.0", @@ -1425,6 +1426,12 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "node_modules/@types/memoizee": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/@types/memoizee/-/memoizee-0.4.8.tgz", diff --git a/package.json b/package.json index 270d1f1..4adea6f 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@capacitor/cli": "^3.4.3", "@testing-library/jest-dom": "^5.16.2", + "@types/lodash": "^4.14.191", "@types/memoizee": "^0.4.8", "jsdom": ">19.0.0", "solid-testing-library": ">0.3.0", diff --git a/src/components/wpt/Wpt.tsx b/src/components/wpt/Wpt.tsx index a2058da..12e1c58 100644 --- a/src/components/wpt/Wpt.tsx +++ b/src/components/wpt/Wpt.tsx @@ -12,6 +12,7 @@ import GeoJSON from 'ol/format/GeoJSON'; import { setBranch, tree } from '../map'; import { Feature } from 'ol'; import { useI18n } from '@solid-primitives/i18n'; +import { cloneDeep } from 'lodash'; import Dialog from '../dialog'; import { Box, Button, Grid, Stack, TextField } from '@suid/material'; @@ -29,6 +30,7 @@ export const Wpt: Component = ({ vectorSource, wptId: wptId }) => { const [t, { add, locale, dict }] = useI18n(); const [wpt, setWpt] = createSignal(); + const [editedWpt, setEditedWpt] = createSignal(); const [dispatchId, setDispatchId] = createSignal(-1); const getTitle = () => { @@ -77,6 +79,7 @@ export const Wpt: Component = ({ vectorSource, wptId: wptId }) => { const edit = () => { setMode(Mode.EDIT); + setEditedWpt(cloneDeep(wpt())); }; createEffect(() => { @@ -115,6 +118,20 @@ export const Wpt: Component = ({ vectorSource, wptId: wptId }) => { setMode(Mode.CLOSED); }; + const saveHandler = () => { + console.log({ + caller: 'Wpt / saveHandler', + wptId, + editedWpt: editedWpt(), + }); + // const newWpt = wpt(); + // if (newWpt) { + // newWpt.name = name.value; + // } + dispatch({ action: 'putWpt', params: { id: wptId, wpt: editedWpt() } }); + setMode(Mode.CLOSED); + }; + return ( = ({ vectorSource, wptId: wptId }) => {
{ + setEditedWpt({ ...editedWpt(), name: value }); + }} /> - diff --git a/src/db/change-handler.ts b/src/db/change-handler.ts index 59d91aa..b67e783 100644 --- a/src/db/change-handler.ts +++ b/src/db/change-handler.ts @@ -11,7 +11,7 @@ const methods = { const changeHandler = async (change: any) => { console.log({ caller: 'ChangeHandler', change }); - const { id } = change.id; + const { id } = change; if (!globalThis.watches) { globalThis.watches = new Map(); } @@ -19,7 +19,7 @@ const changeHandler = async (change: any) => { if (params) { const { method, _dispatchId, id, ...otherParams } = params; const returnValue = await methods[method](params); - if (false) { + if (returnValue) { returnAgain(_dispatchId, returnValue); } } diff --git a/src/db/wpt.ts b/src/db/wpt.ts index 81f1d62..11bdd24 100644 --- a/src/db/wpt.ts +++ b/src/db/wpt.ts @@ -43,9 +43,22 @@ export const putNewWpt = async (id?: IdGpx | IdWpt) => { return finalId as IdWpt; }; +export const putWpt = async (params: any) => { + console.log({ caller: 'putWpt', params }); + const { id, wpt } = params; + await put( + id, + 'wpt', + (_) => { + return wpt; + }, + wpt + ); + return id; +}; export const getWpt = async (params: any) => { const { id } = params; const doc = await get(id); return doc.doc; -}; \ No newline at end of file +}; diff --git a/src/workers/dispatcher-worker.ts b/src/workers/dispatcher-worker.ts index 366e652..5a98950 100644 --- a/src/workers/dispatcher-worker.ts +++ b/src/workers/dispatcher-worker.ts @@ -11,7 +11,7 @@ import { } from '../db/gpx'; import { getTrk, putNewTrk } from '../db/trk'; import { getTrkseg } from '../db/trkseg'; -import { getWpt } from '../db/wpt'; +import { getWpt, putWpt } from '../db/wpt'; //const self = globalThis as unknown as WorkerGlobalScope; @@ -31,6 +31,8 @@ onmessage = async function (e) { getTrkseg, getWpt, + putWpt, + getAndWatch, cancelWatch, };