// Library. import {ChangeEvent, useEffect, useState} from 'react' import {Item, Menu, TriggerEvent, useContextMenu} from 'react-contexify' import {__} from '@wordpress/i18n' // Ours. import {Description, Field, FormTable, Header, Nonce, Row} from './form' import {Marker, NaverMap} from './map' // Types. import {LocationProps} from '../types' // Style. import 'react-contexify/ReactContexify.css' import '../styles/edit-location.css' type Props = { data: LocationProps nonce: string, postId: number, } const MENU_ID = 'edit-location' export default function EditLocation(props: Props) { const {show} = useContextMenu({ id: MENU_ID, }) const [map, setMap] = useState(null), [data, setData] = useState(props.data), [isMarked, setMarked] = useState(props.data.address.length > 0) // Make sure that the map is correctly displayed, especially when it is in a meta-box. useEffect(() => { setTimeout(() => { window.dispatchEvent(new Event('resize')) }, 100) }, []) return ( <>
{__('Map', 'shoplic-integration-for-naver-map')}
{ setData((prevState) => ({ ...prevState, coord: { lat: event.coord.y, lng: event.coord.x, }, })) }} ref={(_map: naver.maps.Map | null) => setMap(() => _map)} style={{ height: '480px' }} > {map && data.coord && { show({ event: event.pointerEvent as TriggerEvent }) }} markerOptions={{ map: map, position: data.coord, }} /> }

{__('Latitude', 'shoplic-integration-for-naver-map')}: {data.coord.lat.toFixed(4)}, {__('Longitude', 'shoplic-integration-for-naver-map')}: {data.coord.lng.toFixed(4)}

{ if ( data.address.length && !confirm(__('The address is entered. Overwrite?', 'shoplic-integration-for-naver-map')) ) { return } naver.maps.Service.reverseGeocode({ coords: new naver.maps.LatLng(data.coord.lat, data.coord.lng), orders: [ naver.maps.Service.OrderType.ROAD_ADDR, naver.maps.Service.OrderType.ADDR, ].join(',') }, (status, response) => { if (naver.maps.Service.Status.ERROR === status) { return alert('Something Wrong!') } const {roadAddress, jibunAddress} = response.v2.address if (roadAddress.length) { setData((prevState) => ({ ...prevState, address: roadAddress, })) } else if (jibunAddress.length) { setData((prevState) => ({ ...prevState, address: jibunAddress, })) } else { return alert('Address not found.') } }) }} >{__('Enter an address for this location', 'shoplic-integration-for-naver-map')}
{ setData((prevState) => { return { ...prevState, address: (e.target as HTMLInputElement).value, } }) }} type="text" value={data.address} />
{__('You may need to enter a detailed address yourself.', 'shoplic-integration-for-naver-map')}
{ const value = (e.target as HTMLInputElement).value.replace(/[^0-9\\-]/g, '') setData((prevState) => { return { ...prevState, telephone: value, } }) }} placeholder="000-0000-0000" type="tel" value={data.telephone} /> {__('Phone number at this location.', 'shoplic-integration-for-naver-map')}
{ setData((prevState) => { return { ...prevState, url: (e.target as HTMLInputElement).value, } }) }} placeholder="https://...." type="text" value={data.url} /> {__('URL related to this location.', 'shoplic-integration-for-naver-map')}
{ setData((prevState) => { return { ...prevState, alt_title: (e.target as HTMLInputElement).value, } }) }} type="text" value={data.alt_title} /> {__('The title you want to use. Leave blank to use the post title.', 'shoplic-integration-for-naver-map')}
{/* Nonce is here! */} ) }