turkey-map-react
Version:
An interactive SVG Turkey map for React JS applications.
158 lines (105 loc) • 6.68 kB
Markdown
# Interactive Turkey Map React Component
An out-of-the-box city map of Turkey.
Live demo : https://turkey-map-react-demo.netlify.app/
## Installation
```javascript
npm install turkey-map-react
```
or
```javascript
yarn add turkey-map-react
```
## Usage
### Importing (ES6)
```javascript
import TurkeyMap from 'turkey-map-react';
```
### Basic usage with defaults
```javascript
<TurkeyMap />
```
### Handling events
On click example:
```javascript
<TurkeyMap onClick={ ({ plateNumber, name }) => console.log(plateNumber + " - " + name + " is just clicked!") } />
```
On mouse over example:
```javascript
<TurkeyMap
hoverable={true}
onHover={ ({ plateNumber, name }) => console.log("Cursor is over on " + plateNumber + " - " + name + "!") }
/>
```
### City component wrapping
```javascript
const renderCity = (cityComponent, cityData) => (
<Tooltip title={cityData.name} key={cityData.id}>
{cityComponent}
</Tooltip>
);
<TurkeyMap cityWrapper={renderCity} />
```
This is generally used for [Antd](https://ant.design/components/tooltip/) style *Tooltip*.
"*child*" parameter is the city DOM.
### Custom Data
```javascript
<TurkeyMap data={this.state.apiData}/>
```
If custom SVG paths and/or city metadata is needed to be rendered, it can be provided through *data* property.
*data* property has to be in type of following:
```javascript
CityType[]
```
in other words :
```javascript
{ id: string, plateNumber: number, name: string, path: string }[]
```
## API
### Types
| Type | Description |
| :---------------- | :-------------------------------------------------------------------------------------- |
| *CityType* | { **id**: *string*, **plateNumber**: *number*, **name**: *string*, **path**: *string* } |
| *ViewBoxType* | { **top**: *number*, **left**: *number*, **width**: *number*, **height**: *number* } |
| *CustomStyleType* | { **idleColor**: *string*, **hoverColor**: *string* } |
### props
| Property | Description | Type | Default | Since |
| :---------- | :--------------------------------------------------------- | :--------------------------------------------------------------------------- | :--------------------------------------------------------------------- | ----: |
| viewBox | Position and dimension information of the map (svg) layout | *ViewBoxType* | { **top**: *0*, **left**: *80*, **width**: *1050*, **height**: *585* } | 1.0.0 |
| visible | Defines the visibility of the component | *boolean* | *true* | 1.0.0 |
| hoverable | Enables *onHover* event availability | *boolean* | *true* | 1.0.0 |
| showTooltip | Displays default tooltip if set to true | *boolean* | *false* | 1.1.0 |
| tooltipText | Sets custom text to default tooltip | *string* | *City Name* | 1.1.0 |
| customStyle | Stylizing the component. | *CustomStyleType*[] | { **idleColor**: *#444*, **hoverColor**: *#dc3522* } | 1.0.0 |
| data | Allows for providing custom SVG paths and metadata. | *CityType*[] | *Built-in data* | 1.0.0 |
| cityWrapper | City DOMs are wrapped by provided component. | ( **cityComponent**: *JSX.Element*, **city** : *CityType* ) => *JSX.Element* | *Unwrapped city* | 1.0.0 |
| onHover | Event when a city hovered on the map. | ( **city** : *CityType* ) => *void* | - | 1.0.0 |
| onClick | Event when a city clicked on the map | ( **city** : *CityType* ) => *void* | - | 1.0.0 |
### Styling
Colors of the city can be overwritten with setting *customStyle* property.
Example:
```javascript
<TurkeyMap customStyle={{ idleColor: "#444", hoverColor: "#dc3522" }} />
```
Default tooltip can be styled through predefined html IDs.
`#svg-turkiye-haritasi-container-tooltip` is the ID for tooltip DOM. While `#svg-turkiye-haritasi-container` is the ID for container (parent) DOM.
Example:
```css
#svg-turkiye-haritasi-container > #svg-turkiye-haritasi-container-tooltip {
background-color: rgba(54, 0, 99, 0.479);
}
```
## Licensing
This project is released under a MIT License.
## Versioning
Versioning scheme defined as in the pattern of "_majorVersion.minorVersion.bugfixVersion_"
| Level | Description |
| :-------------- | :-------------------------------------------------------------------------------------------------------------------------- |
| *majorVersion* | This indicates that the version introduces breaking changes those possibly not backward compatible features. |
| *minorVersion* | This indicates that the version introduces small changes those are backward compatible with fine fitting for existing uses. |
| *bugfixVersion* | This indicates that the version solves some problems those popped out in the current major or minor versions. |
## Contributing
To contribute to this project please just open a pull request with a comprehensive description.
---
## Credits
This project has been derivated from **dnomak**'s [svg-turkiye-haritasi][dnomak-link] project.
[dnomak-link]:https://github.com/dnomak/svg-turkiye-haritasi