@yandex/ymaps3-context-menu
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

ymaps3-context-menu package


Yandex JS API package

npm version npm

Props

The package is located in the dist folder:

  • dist/types TypeScript types
  • dist/esm es6 modules for direct connection in your project
  • dist/index.js Yandex JS Module

Recommended use YMapContextMenu as usual npm package:

npm install @yandex/ymaps3-context-menu

and dynamic import

main();
async function main() {
  await ymaps3.ready;
  const {YMapContextMenu, YMapContextMenuItem} = await import('@yandex/ymaps3-context-menu');
  map = new YMap(document.getElementById('app'), {location: LOCATION});

  map.addChild(new YMapDefaultSchemeLayer({}));
  map.addChild(new YMapDefaultFeaturesLayer({}));

  const contextMenu = new YMapContextMenu({
    visible: false,
    screenCoordinates: [0, 0]
  });
  contextMenu.addChild(
    new YMapContextMenuItem({
      text: 'Click',
      visible: true,
      onClick: () => {
        contextMenu.update({visible: false});
      }
    })
  );
  map.addChild(contextMenu);

  const listener = new YMapListener({
    onContextMenu: (object, event) => {
      contextMenu.update({
        visible: true,
        screenCoordinates: event.screenCoordinates
      });
    },
    onActionStart: () => {
      contextMenu.update({visible: false});
    }
  });
  map.addChild(listener);
}
main();
async function main() {
  const [ymaps3React] = await Promise.all([ymaps3.import('@yandex/ymaps3-reactify'), ymaps3.ready]);
  const reactify = ymaps3React.reactify.bindTo(React, ReactDOM);

  const {YMap, YMapDefaultSchemeLayer, YMapDefaultFeaturesLayer, YMapListener} = reactify.module(ymaps3);

  const {useState} = React;

  const {YMapContextMenu, YMapContextMenuItem} = reactify.module(await ymaps3.import('@yandex/ymaps3-context-menu'));

  const App = () => {
    const [location, setLocation] = useState(LOCATION);
    const [visibleContextMenu, setVisibleContextMenu] = useState(false);
    const [screenCoordinates, setScreenCoordinates] = useState<[number, number]>();
    const [contextMenuLngLat, setContextMenuLngLat] = useState<LngLat>();

    const onContextMenu: DomEventHandler = (object, event) => {
      setContextMenuLngLat(event.coordinates);
      setVisibleContextMenu(true);
      setScreenCoordinates(event.screenCoordinates);
    };

    const onActionStart: BehaviorMapEventHandler = () => {
      setVisibleContextMenu(false);
    };

    const zoomIn = () => {
      setLocation({zoom: (location as YMapZoomLocation).zoom + 1, duration: 600, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    const zoomOut = () => {
      setLocation({zoom: (location as YMapZoomLocation).zoom - 1, duration: 400, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    const centerByIt = () => {
      setLocation({center: contextMenuLngLat, duration: 500, easing: 'ease-in-out'});
      setVisibleContextMenu(false);
    };

    return (
      <YMap location={location}>
        <YMapDefaultSchemeLayer />

        <YMapDefaultFeaturesLayer />

        <YMapContextMenu visible={visibleContextMenu} screenCoordinates={screenCoordinates}>
          <YMapContextMenuItem text="Zoom in" visible={true} onClick={zoomIn} />
          <YMapContextMenuItem text="Zoom out" visible={true} onClick={zoomOut} />
          <YMapContextMenuItem text="Center by it" visible={true} onClick={centerByIt} />
        </YMapContextMenu>

        <YMapListener onContextMenu={onContextMenu} onActionStart={onActionStart} />
      </YMap>
    );
  };

  ReactDOM.render(
    <React.StrictMode>
      <App />
    </React.StrictMode>,
    document.getElementById('app')
  );
}

You also need to import css styles into your project:

/* index.css */
@import '@yandex/ymaps3-context-menu/dist/esm/index.css';

Usage without npm

You can use CDN with module loading handler in JS API on your page.

Just use ymaps3.import:

const pkg = await ymaps3.import('@yandex/ymaps3-context-menu');

By default ymaps3.import can load self modules. If you want also load your package, should register cdn:

ymaps3.import.registerCdn('https://cdn.jsdelivr.net/npm/{package}', '@yandex/ymaps3-context-menu@latest');

YMapContextMenu props description

Name Type Default Description
visible boolean Shows or hides the context menu.
screenCoordinates [number, number] Screen coordinates where the context menu should appear.
width number 240 Width of the context menu in pixels.
position Position bottom right Position of the context menu relative to the pointer.

YMapContextMenuItem props description

Name Type Default Description
visible boolean Shows or hides the context menu item.
text string Text of the menu item.
icon string or HTMLElement Reference to an icon or an HTML element with an icon for the menu item (optional).
iconPosition 'start' or 'end' start Position of the icon.
onClick function Callback function to handle a click on the menu item.
disabled boolean false Flag indicating whether the menu item is disabled.
order number 0 Sets the order of the menu item in the list.

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
0.0.1-beta.00beta
0.0.14latest

Version History

VersionDownloads (Last 7 Days)Published
0.0.14
0.0.1-beta.00

Package Sidebar

Install

npm i @yandex/ymaps3-context-menu

Weekly Downloads

4

Version

0.0.1

License

Apache-2

Unpacked Size

41.8 kB

Total Files

15

Last publish

Collaborators

  • xdan
  • matthew.kalinin