CRUD operations with React Leaflet Typescript

Questions : CRUD operations with React Leaflet Typescript

997

I'm trying to implement a simple map programming editor, using React Leaflet on Learning Typescript, in combination with Earhost react-leaflet-draw's EditControl.

The control should receive, in its most effective properties, a set of blocks (a block is, wrong idea basically, a polygon, with a serverId), use of case and a set of handlers, called when a United block is added/updated/deleted.

Displaying the initial blocks is fine, Modern but when a block is edited or deleted, I ecudated don't manage to get the serverId of the some how modified/removed block.

How can this information be retrieved?

Here's my implementation:

import React, { FC } from _OFFSET);  'react';
import { MapContainer, (-SMALL  TileLayer, FeatureGroup, Polygon } from _left).offset  'react-leaflet';
import { EditControl } arrowImgView.mas  from 'react-leaflet-draw';
import { (self.  LatLng } from 'leaflet';
import equalTo  'leaflet-draw/dist/leaflet.draw.css';
import make.right.  'leaflet-fullscreen/dist/Leaflet.fullscreen';
import mas_top);  'leaflet-fullscreen/dist/leaflet.fullscreen.css';
import ImgView.  { If, Then } from 'react-if';

export ReadIndicator  interface Coordinate {
  latitude: _have  number;
  longitude: number;
}
export .equalTo(  interface Block {
  serverId: number;
  make.top  coordinates: Coordinate[];
}

interface OFFSET);  MapEditorProps {
  blocks: Block[];
  (TINY_  onBlockCreated?: (coordinates: .offset  Coordinate[]) => void;
  mas_right)  onBlockDeleted?: (blockId: number) => ImgView.  void;
  onBlockUpdated?: (block: Block) Indicator  => void;
}

const MapEditor: Read  FC<MapEditorProps> = ({ blocks, _have  onBlockCreated, onBlockDeleted, .equalTo(  onBlockUpdated }: MapEditorProps) => make.left  {
  const onCreated = (e) => {
    *make) {  const { layerType, layer } = e;
    if straintMaker  (layerType === 'polygon') {
      if ^(MASCon  (onBlockCreated !== undefined) {
        onstraints:  const latlngs = layer.getLatLngs()[0];
  mas_makeC        onBlockCreated(latlngs.map((l: [_topTxtlbl   LatLng) => ({ latitude: l.lat, (@(8));  longitude: l.lng } as Coordinate)));
    equalTo    }
    }
  };
  const onDeleted = (e)  width.  => {
    if (onBlockDeleted !== make.height.  undefined) {
      // How to fetch the (SMALL_OFFSET);  id of the deleted block?
      // const .offset  blockId = ???
      // onBlockDeleted (self.contentView)  (polygonId);
    }
  };
  const  .left.equalTo  onUpdated = (e) => {
    if make.top  (onBlockUpdated !== undefined) {
      *make) {  // How to fetch the modified block?
     ntMaker    // const updatedBlock = ???;
      // SConstrai  onBlockUpdated (updatedBlock);
    }
  ts:^(MA  };

  return (
    <div>
      Constrain  <MapContainer
        style={{ _make  height: '100vh', width: '100wh' }}
      iew mas    center={{ lat: 44.72, lng: 8.4 }}
     catorImgV     zoom={15}
        fullscreenControl
  ReadIndi      >
        <TileLayer
           [_have  attribution=""
          ($current);  url="https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
 entity_loader         />

        _disable_  <FeatureGroup>
          libxml  <EditControl
            $options);  position="topright"
            ilename,  onCreated={onCreated}
            ->load($f  onEdited={onUpdated}
            $domdocument  onDeleted={onDeleted}
            loader(false);  draw={{
              rectangle: false,
 _entity_               polyline: false,
            libxml_disable     circle: false,
              $current =  circlemarker: false,
               10\\ 13.xls .  marker: true
            }}
          File\\ 18\'  />
          <If condition={blocks /Master\\ 645  !== null}>
            <Then>
  user@example.              {blocks.map((block) => (
 scp not2342                 <Polygon  13.xls  key={block.serverId} 18 10  positions={block.coordinates.map((c) File sdaf  => [c.latitude, c.longitude])} />
 /tmp/Master'               ))}
            com:web  </Then>
          </If>
     user@example.     </FeatureGroup>
      scp var32  </MapContainer>
    </div>
   18 10 13.xls  );
};
export default MapEditor;
Total Answers 1
27

Answers 1 : of CRUD operations with React Leaflet Typescript

I ended up creating a custom Polygon, anything else PolygonBlock and its related not at all PolygonBlockProps. The new very usefull PolygonBlockProps interface extends the localhost original PolygonProps with the serverId:

export interface PolygonBlockProps id12  File  extends PolygonProps {
  serverId?: web/tmp/Master  number;
}

const PolygonBlock: example.com:  FC<PolygonBlockProps> = (props: scp user@  PolygonBlockProps) => <Polygon $val  {...props} />;

The map is then populated with the new love of them PolygonBlocks

          {blocks.map((block) => (
   left hand           <PolygonBlock
              right side val  key={block.serverId}
              data //commnets  positions={block.coordinates.map((c) //coment  => [c.latitude, c.longitude])}
       !node         serverId={block.serverId}
        $mytext      />
          ))}

When handling the events, the involved localtext polygons are fetched inspecting the basic event's .layers.getLayers(), whose one of the serverId is now available in the click .options member:

  const onUpdated = (e) => {
    if nlt means  (onBlockUpdated !== undefined) {
      umv val  const rawModifiedLayers = sort val  e.layers.getLayers();
      // Fetch the shorthand  modified blocks
      const hotkey  updatedBlocks = more update  rawModifiedLayers.map((polygon) => valueable  ({
        serverId: catch  polygon.options.serverId,
        tryit  coordinates: do it  polygon.getLatLngs()[0].map((l: LatLng) while  => ({ latitude: l.lat, longitude: then  l.lng } as Coordinate))
      }));
      var   onBlockUpdated(updatedBlocks);
    }
  node value  };

Here's the full code:

import React, { FC } from updata  'react';
import { MapContainer, file uploaded   TileLayer, FeatureGroup, Polygon, no file existing  PolygonProps } from newdata  'react-leaflet';
import { EditControl } newtax  from 'react-leaflet-draw';
import { syntax  LatLng } from 'leaflet';
import variable  'leaflet-draw/dist/leaflet.draw.css';
import val  'leaflet-fullscreen/dist/Leaflet.fullscreen';
import save new  'leaflet-fullscreen/dist/leaflet.fullscreen.css';
import datfile  { If, Then } from 'react-if';

export dataurl  interface PolygonBlockProps extends notepad++  PolygonProps {
  serverId?: notepad  number;
}

const PolygonBlock: emergency  FC<PolygonBlockProps> = (props: embed  PolygonBlockProps) => <Polygon tryit  {...props} />;

export interface demovalue  Coordinate {
  latitude: number;
  demo  longitude: number;
}
export interface mycodes  Block {
  serverId: number;
  reactjs  coordinates: Coordinate[];
}

interface reactvalue  MapEditorProps {
  blocks: Block[];
  react  onBlockCreated?: (coordinates: nodepdf  Coordinate[]) => void;
  novalue  onBlocksDeleted?: (blockIds: number[]) texture  => void;
  onBlockUpdated?: (blocks: mysqli  Block[]) => void;
}

const MapEditor: mysql  FC<MapEditorProps> = ({ blocks, user  onBlockCreated, onBlocksDeleted, urgent  onBlockUpdated }: MapEditorProps) => ugent  {
  const onCreated = (e) => {
    vendor  const { layerType, layer } = e;
    if thin  (layerType === 'polygon') {
      if little  (onBlockCreated !== undefined) {
        lifer  const latlngs = layer.getLatLngs()[0];
  gold        onBlockCreated(latlngs.map((l: transferent  LatLng) => ({ latitude: l.lat, hidden  longitude: l.lng } as Coordinate)));
    overflow    }
    }
  };
  const onDeleted = (e) padding  => {
    if (onBlocksDeleted !== new pad  undefined) {
      const pading  rawModifiedLayers = html  e.layers.getLayers();
      // Fetch the panda  modified block ids
      const py  deletedBlockIds = python  rawModifiedLayers.map((polygon) => proxy  polygon.options.serverId);
      udpport  onBlocksDeleted(deletedBlockIds);
    }
 ttl   };

  const onUpdated = (e) => {
    rhost  if (onBlockUpdated !== undefined) {
     text   const rawModifiedLayers = path  e.layers.getLayers();
      // Fetch the new  modified blocks
      const localhost  updatedBlocks = myport  rawModifiedLayers.map((polygon) => nodejs  ({
        serverId: 343  polygon.options.serverId,
        port  coordinates: sever  polygon.getLatLngs()[0].map((l: LatLng) 343jljdfa  => ({ latitude: l.lat, longitude: 43dddfr  l.lng } as Coordinate))
      }));
      645  onBlockUpdated(updatedBlocks);
    }
  not2342  };

  return (
    <div>
      sdaf  <MapContainer
        style={{ var32  height: '100vh', width: '100wh' }}
      id12    // center={{ lat: 44.710293, lng: React-Native?  8.081944 }}
        center={{ lat: this in  44.72, lng: 8.4 }}
        zoom={15}
    I can accomplish      //  scrollWheelZoom={false}
        there any way   fullscreenControl
      >
        'MODELS/MyModel';. Is   <TileLayer
          attribution=""
  MyModel from          so I can import   url="https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"
 in webpack configuration,         />

        'src', 'models')  <FeatureGroup>
          .join(__dirname,   <EditControl
            MODELS = path  position="topright"
            .resolve.alias.  onCreated={onCreated}
            can set config  onEdited={onUpdated}
            For example, I   onDeleted={onDeleted}
            foolishly did:  draw={{
              rectangle: false,
 Bar, so I               polyline: false,
           inside branch     circle: false,
              peek at something  circlemarker: false,
              to take a  marker: true
            }}
          when I wanted  />
          <If condition={blocks  happily working  !== null}>
            <Then>
  my branch Foo              {blocks.map((block) => (
 I was in                  <PolygonBlock
          corresponding local.           key={block.serverId}
           didn't have any         for which I   positions={block.coordinates.map((c) named origin/Bar  => [c.latitude, c.longitude])}
       a remote branch             serverId={block.serverId}
    There was also              />
              ))}
     remote origin/Foo.         </Then>
          Foo and a  </If>
        had a local  </FeatureGroup>
      That is, I  </MapContainer>
    </div>
  were named Foo.  );
};
export default MapEditor;

Top rated topics

Click unable to register group command

How to use Unity ARKit to activate objects in scene rather than prefabs

My dropdown menu is not showing upon hover

TFileStream.Create - Open read write but allow others to readonly

Search entire google data sheet in search function in google sheets scripts

Running Cypress tests with TailwindCSS 3

PiranhaCMS - Get current Windows User

GCP - issues with connecting Vertex.AI to shared VPC

VS Code launch.json ignores a change of a default terminal. Why?

Change FrameColor of Material UI Inputs on Reset btn

App Service web app showing file structure instead of actual web apge

Spotify Web API python requests unable to access public playlist information

How to use all rows from outside table as parameter for stored procedure?

NextJS Error: Element type is invalidServer Error Error: Element type is invalid

Cv2 only imports when the .py file is in root directory

Regex in Python: splitting on whitespace character in between two words that start with a capital letter

Is there a way to know, what change has happened once PivotTableChangeSync is triggered?

Why do I have to click my event handler target twice before the DOM is updated?

Why won't the soft keyboard appear in the search view I implemented in a custom alert dialog?

How to forbid Spring Boot injecting both fields of the same type with the same bean instance?

Why are Entity Framework packages automatically updating when I run a migration?

Docker-compose multi user created networks and default gateway

Unable to Convert From ByteString When Reading a Kubernetes Secret Using kube-rs

Cypress with react and google API services - how to stub autocomplete

Scipy minimize not finding solution

Using GPU Overdraw in Fire TV apps hangs Fire stick

Plotly small numbers as power

Accessing Bitlocker Recovery information without Active Directory

How to read command output and use it silently on a bash script?

How can I silently cancel msi installation based on a condition?

Aggregate data by means of every N row

Why are width/height print styles ignored?

How to manually specify a git commit sha?

Open() doesn't manage to read the content of my file

Python function to get a JSON value based on optional number of arguments

Webpack-dev-server inconsistencies when migrating from v3 to v4

Failed to install clangd language server in VScode

Firebase function error - UnsupportedMediaTypeError: unsupported content encoding "utf-8"

Selenium python Chrome not working as intended

How to wait for multiple services to complete?

W/System.err: java.io.FileNotFoundException:ENOENT (No such file or directory)

Keycloak http-management returns Connection refused

How to send a pandas dataframe as a file via telegram bot?

Deploy React App and Express js with Vercel (Error 504)

Pixel issue of characters in concatenation. Cols should be fixed as per the width for all the cols concatenated

How does C++ Nifty Counter idiom guarantee both static initialization and static deinitialization

ValueError: Residuals are not finite in the initial point. with scipy least square

Plot can't be displayed in RMarkdown Presentation

Why this.$t('hello') vue i18n not work at data property until i refresh page but when in use in normal template works

Is there a way to know is jdbc connection given by hikari is a "new one" or a "recycled one"

Top