@profesia/vue-map-component
Version:
Vue Component for svg maps
215 lines (170 loc) • 6.92 kB
Markdown
# vue-map-component
[](https://www.npmjs.com/package/@profesia/vue-map-component)
[](https://www.npmjs.com/package/@profesia/vue-map-component)
[](https://vuejs.org/)
<h2>This component is in working progress!</h2>
<p>
When final version will be released, the version number will be set to 1.0.0
</p>
## Install
#### NPM
Install the package:
```
npm install /vue-map-component --save-dev
```
Then import it in your project
```js
import Vue from 'vue'
import Vuex from 'vuex';
import store from './store';
import mapComponent from '/vue-map-component'
Vue.use(Vuex);
new Vue({
el: '#app',
store,
components: {
mapComponent,
},
});
```
##### example of empty store
```js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex)
export default new Vuex.Store({})
```
#### Browser global
You can't just include the script, because the script needs VUEX, so you have to add it in your scripts and run NPM build (or webpack, gulp, ...).
## Usage
Simply use it like so:
```html
<map-component name="myMap" country="slovakia" :regions="slovakRegions" :showAllPins="true" :showOffersCount="true"></map-component>
```
## Options
##### name
Mandatory. Name will be used to create namespace for each map component.
##### country
Mandatory. Name of the country.
##### regions
Optional. An object for storage the info about regions. Object keys can be these:
`offersCount` - for display the number of offers in each region
`pin` - for custom html for region pins
`link` - for redirect page on another page after click on the region
```js
computed: {
slovakRegions() {
return {
'ba': {
'offersCount': 5,
'link': 'https://www.example.com'
},
'za': {
'offersCount': 2,
},
'ke': {
'offersCount': 0,
}
}
},
}
```
##### showCountryBorder
Optional. A boolean parameter. If `true`, the path around country will be shown.
Defaults to `false`.
##### showPin
Optional. A boolean parameter. If `true`, the empty pins will be positioned in to the map.
If one from other parameters (`showAllPins`, `showRegionName`, `showOffersCount`, `showRegionNameWithOffersCount`) will be set to `true`, `showPin` will be set to `true` automatically.
Defaults to `false`.
##### showAllPins
Optional. A boolean parameter. If `true`, the map will show pin on each region. If `false`, only the regions with offers will show the pin (you have to set object `regions` with key `offersCount`).
Defaults to `false`.
##### showRegionName
Optional. A boolean parameter. If `true`, the map will show region shortcut in the pin, for example `BA`, `KE`, ...
Defaults to `false`.
##### showOffersCount
Optional. A boolean parameter. If `true`, the map will show offers count in the pin for each region, (you have to set object `regions` with key `offersCount`).
Defaults to `false`.
##### showRegionNameWithOffersCount
Optional. A boolean parameter. If `true`, the map will show offers count in the pin for each region on small devices, on desktop the map will show the region shortcut and the offers count will show on region mouse hover (you have to set object `regions` with key `offersCount`).
Defaults to `false`.
##### customClass
Optional. String parameter, you can add some custom class.
## Settings - VUEX store mutations
##### Select option
There is possibility to set (select) region.
You need to commit a mutation with name based on your `name`.
Structure of mutation name is `vueMap + your name +/setActiveRegion`, so if `name` is `Example`, you have to call mutation with name `vueMapExample/setActiveRegion`.
```js
store.commit('vueMapExample/setActiveRegion', ['ba', 'ke']);
```
##### Listening for selected regions
You need to listen for state with name based on your `nme`: `vueMap + your name +/activeRegion`.
```js
store.state.vueMapExample.activeRegion
```
## Structure
Once the select has been rendered, it'll create the following structure:
### HTML
##### Single map
````html
<div class="vue-map-component vue-map-show-all-pins">
<div class="vue-map-container">
<svg viewBox="0 0 209 100" xmlns="http://www.w3.org/2000/svg">
<g>
<a href="" class=""><path class="vue-map-region vue-map-region-ba" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-tt" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-nr" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-tn" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-bb" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-ke" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-po" d="..."></path></a>
<a href="" class=""><path class="vue-map-region vue-map-region-za" d="..."></path></a>
</g>
</svg>
<a href="" class="vue-map-pin vue-map-pin-ba"></a>
<a href="" class="vue-map-pin vue-map-pin-tt"></a>
<a href="" class="vue-map-pin vue-map-pin-nr"></a>
<a href="" class="vue-map-pin vue-map-pin-tn"></a>
<a href="" class="vue-map-pin vue-map-pin-bb"></a>
<a href="" class="vue-map-pin vue-map-pin-za"></a>
<a href="" class="vue-map-pin vue-map-pin-po"></a>
<a href="" class="vue-map-pin vue-map-pin-ke"></a>
</div>
</div>
````
### CSS
All CSS is based upon this structure.
```css
.vue-map-component {
...
}
.vue-map-component g {
...
}
.vue-map-pin {
...
}
```
## FAQ
- __How can I provide feedback?__ - Send an email to vrtich.sk; any feedback is appreciated.
## Release History
- 0.2.8 Add country border
- 0.2.6 Remove unnecessary async call
- 0.2.5 Fix BUG with undefined regions offer counts
- 0.2.4 Fix BUG with undefined regions when they were not necessary
- 0.2.3 Rename data to data-map
- 0.2.2 Add data region-id to pin
- 0.2.1 Add data offers-count to pin
- 0.2.0 Add new class `vue-map-active-region` when some region is active
- 0.1.2 Change babel preset to `env`
- 0.1.1 Remove SPAN tags from SVG
- 0.1.0 Replace A tags with SPAN tags
- 0.0.8 Fix styles
- 0.0.7 Create mixin Less file
- 0.0.6 Fix styles path
- 0.0.5 Edit styles, separate styles for Slovakia Map Component
- 0.0.4 svg map with bigger coordinates
- 0.0.3 Fix warning - Props with type Object/Array must use a factory function to return the default value
- 0.0.2 Edit README
- 0.0.1 Initial release