diff --git a/src/components/finder/Finder.tsx b/src/components/finder/Finder.tsx index ca507f2..34c93fd 100644 --- a/src/components/finder/Finder.tsx +++ b/src/components/finder/Finder.tsx @@ -7,7 +7,7 @@ import { useI18n } from '@solid-primitives/i18n'; import proj4 from 'proj4'; import style from './Finder.module.css'; -import { Box, IconButton, TextField } from '@suid/material'; +import { Box, Button, IconButton, TextField } from '@suid/material'; import Dialog from '../dialog'; import { getMap, getState } from '../map'; import { Overlay } from 'ol'; @@ -47,7 +47,7 @@ const Finder: Component = (props) => { const utm = `+proj=utm +zone=${utmMatch[1]}`; coordinates = proj4(utm, 'EPSG:4326', [+utmMatch[3], +utmMatch[4]]); setPopupContent( - <>{`${coordinates[0]}, ${coordinates[1]} (${utmMatch[0]})`} + <>{`${coordinates[0]}, ${coordinates[1]} (UTM ${utmMatch[0]})`} ); } console.log({ @@ -118,11 +118,15 @@ const Finder: Component = (props) => { ); diff --git a/src/components/wpt/WptEditButtonAndDialog.tsx b/src/components/wpt/WptEditButtonAndDialog.tsx new file mode 100644 index 0000000..996a6dc --- /dev/null +++ b/src/components/wpt/WptEditButtonAndDialog.tsx @@ -0,0 +1,37 @@ +import { useI18n } from '@solid-primitives/i18n'; +import { Box, TextField, Stack, Button, IconButton } from '@suid/material'; +import { cloneDeep } from 'lodash'; +import { Component, createSignal } from 'solid-js'; +import { emptyWpt } from '../../db/wpt'; +import { peekCachedSignal } from '../../workers/cached-signals'; +import dispatch from '../../workers/dispatcher-main'; +import EditIcon from '@suid/icons-material/Edit'; +import Dialog from '../dialog'; +import WptEditDialog from './WptEditDialog'; + +interface Props { + wptId: string; +} + +const WptEditButtonAndDialog: Component = ({ wptId }) => { + const [open, setOpen] = createSignal(false); + return ( + <> + { + setOpen(true); + return false; + }} + > + + + setOpen(false)} + /> + + ); +}; + +export default WptEditButtonAndDialog; diff --git a/src/components/wpt/WptEditDialog.tsx b/src/components/wpt/WptEditDialog.tsx new file mode 100644 index 0000000..6472781 --- /dev/null +++ b/src/components/wpt/WptEditDialog.tsx @@ -0,0 +1,122 @@ +import { Box, Button, Stack, TextField } from '@suid/material'; +import { Component, createEffect, createSignal } from 'solid-js'; +import { useI18n } from '@solid-primitives/i18n'; + +import Dialog from '../dialog'; +import { peekCachedSignal } from '../../workers/cached-signals'; +import dispatch from '../../workers/dispatcher-main'; + +interface Props { + wptId: string; + open: () => boolean; + closeHandler?: () => vpod; +} + +const WptEditDialog: Component = (props) => { + const { wptId, closeHandler, open } = props; + const [t, { add, locale, dict }] = useI18n(); + + const wpt = peekCachedSignal({ id: wptId, method: 'getWpt' }); + const [editedWpt, setEditedWpt] = createSignal(); + + createEffect(() => { + console.log({ + caller: 'WptEditDialog / createEffect', + wptId, + wpt: wpt(), + }); + setEditedWpt(wpt()); + }); + + const _closeHandler = () => { + if (!!closeHandler) { + closeHandler(); + } + }; + + const saveHandler = () => { + console.log({ + caller: 'WptEditDialog / saveHandler', + wptId, + editedWpt: editedWpt(), + }); + dispatch({ action: 'putWpt', params: { id: wptId, wpt: editedWpt() } }); + _closeHandler(); + }; + + const getTitle = () => { + if (wpt()?.name) { + return `${wpt()?.name} (${t('wpt')})`; + } + return t('wpt'); + }; + + return ( + + +
+ { + setEditedWpt({ ...editedWpt(), name: value }); + }} + /> + { + setEditedWpt({ ...editedWpt(), sym: value }); + }} + /> + { + const extensions = { + ...editedWpt()?.extensions, + 'dyo:minZoom': parseFloat(value), + }; + setEditedWpt({ ...editedWpt(), extensions }); + }} + /> + { + setEditedWpt({ ...editedWpt(), desc: event.target.value }); + }} + InputProps={{ inputComponent: 'textarea' }} + /> + + + + +
+
+
+ ); +}; + +export default WptEditDialog; diff --git a/src/components/wpt/WptEditor.tsx b/src/components/wpt/WptEditor.tsx deleted file mode 100644 index bbd0a40..0000000 --- a/src/components/wpt/WptEditor.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { useI18n } from '@solid-primitives/i18n'; -import { Box, TextField, Stack, Button, IconButton } from '@suid/material'; -import { cloneDeep } from 'lodash'; -import { Component, createSignal } from 'solid-js'; -import { emptyWpt } from '../../db/wpt'; -import { peekCachedSignal } from '../../workers/cached-signals'; -import dispatch from '../../workers/dispatcher-main'; -import EditIcon from '@suid/icons-material/Edit'; -import Dialog from '../dialog'; - -enum Mode { - CLOSED, - EDIT, -} - -interface Props { - wptId?: string; -} - -const WptEditor: Component = ({ wptId }) => { - const [mode, setMode] = createSignal(Mode.CLOSED); - const [editedWpt, setEditedWpt] = createSignal(); - - const [t, { add, locale, dict }] = useI18n(); - - const wpt = - wptId !== undefined - ? peekCachedSignal({ id: wptId, method: 'getWpt' }) - : () => emptyWpt; - - const edit = () => { - setMode(Mode.EDIT); - setEditedWpt(cloneDeep(wpt())); - console.log({ - caller: 'WptEditor / edit', - wptId, - editedWpt: editedWpt(), - }); - }; - - const closeHandler = () => { - setMode(Mode.CLOSED); - }; - - const saveHandler = () => { - console.log({ - caller: 'WptEditor / saveHandler', - wptId, - editedWpt: editedWpt(), - }); - dispatch({ action: 'putWpt', params: { id: wptId, wpt: editedWpt() } }); - setMode(Mode.CLOSED); - }; - - const getTitle = () => { - if (wpt()?.name) { - return `${wpt()?.name} (${t('wpt')})`; - } - return t('wpt'); - }; - - return ( - <> - - - - - -
- { - setEditedWpt({ ...editedWpt(), name: value }); - }} - /> - { - setEditedWpt({ ...editedWpt(), sym: value }); - }} - /> - { - const extensions = { - ...editedWpt()?.extensions, - 'dyo:minZoom': parseFloat(value), - }; - setEditedWpt({ ...editedWpt(), extensions }); - }} - /> - { - setEditedWpt({ ...editedWpt(), desc: event.target.value }); - }} - InputProps={{ inputComponent: 'textarea' }} - /> - - - - -
-
-
- - ); -}; - -export default WptEditor; diff --git a/src/components/wpt/WptViewer.tsx b/src/components/wpt/WptViewer.tsx index b358c21..283a8d6 100644 --- a/src/components/wpt/WptViewer.tsx +++ b/src/components/wpt/WptViewer.tsx @@ -2,8 +2,7 @@ import { Component } from 'solid-js'; import WptIcon from '../../icons/location-pin-svgrepo-com.svg?component-solid'; import { peekCachedSignal } from '../../workers/cached-signals'; import Tree from '../tree'; -import { IconButton } from '@suid/material'; -import WptEditor from './WptEditor'; +import WptEditButtonAndDialog from './WptEditButtonAndDialog'; interface Props { wptId: string; @@ -22,7 +21,7 @@ const WptViewer: Component = ({ wptId }) => { <> {title()} - + } content={undefined} diff --git a/src/components/wpt/index.ts b/src/components/wpt/index.ts index 8387af6..c09c567 100644 --- a/src/components/wpt/index.ts +++ b/src/components/wpt/index.ts @@ -1,4 +1,4 @@ export { default } from './Wpt'; export { default as WptViewer } from './WptViewer'; -export { default as WptEditor } from './WptEditor'; +export { default as WptEditButtonAndDialog } from './WptEditButtonAndDialog';