mirror of
				https://github.com/KevinMidboe/vue-chartjs.git
				synced 2025-10-29 18:00:20 +00:00 
			
		
		
		
	Merge pull request #56 from imbashamba/horizontal_bar_component
separate HorizontalBar component added
This commit is contained in:
		
							
								
								
									
										1122
									
								
								dist/vue-chartjs.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1122
									
								
								dist/vue-chartjs.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -65,7 +65,7 @@ export default Vue.extend({ | |||||||
|       let chartOptions = mergeOptions(this.defaultOptions, options) |       let chartOptions = mergeOptions(this.defaultOptions, options) | ||||||
|       this._chart = new Chart( |       this._chart = new Chart( | ||||||
|         this.$refs.canvas.getContext('2d'), { |         this.$refs.canvas.getContext('2d'), { | ||||||
|           type: type || 'bar', |           type: 'bar', | ||||||
|           data: data, |           data: data, | ||||||
|           options: chartOptions |           options: chartOptions | ||||||
|         } |         } | ||||||
|   | |||||||
							
								
								
									
										79
									
								
								src/BaseCharts/HorizontalBar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/BaseCharts/HorizontalBar.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import Chart from 'chart.js' | ||||||
|  | import { mergeOptions } from '../helpers/options' | ||||||
|  |  | ||||||
|  | export default Vue.extend({ | ||||||
|  |   render: function (createElement) { | ||||||
|  |     return createElement( | ||||||
|  |       'div', | ||||||
|  |       [ | ||||||
|  |         createElement( | ||||||
|  |           'canvas', { | ||||||
|  |             attrs: { | ||||||
|  |               id: this.chartId, | ||||||
|  |               width: this.width, | ||||||
|  |               height: this.height | ||||||
|  |             }, | ||||||
|  |             ref: 'canvas' | ||||||
|  |           } | ||||||
|  |         ) | ||||||
|  |       ] | ||||||
|  |     ) | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   props: { | ||||||
|  |     chartId: { | ||||||
|  |       default: 'horizontalbar-chart', | ||||||
|  |       type: String | ||||||
|  |     }, | ||||||
|  |     width: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     }, | ||||||
|  |     height: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data () { | ||||||
|  |     return { | ||||||
|  |       defaultOptions: { | ||||||
|  |         scales: { | ||||||
|  |           yAxes: [{ | ||||||
|  |             ticks: { | ||||||
|  |               beginAtZero: true | ||||||
|  |             }, | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             } | ||||||
|  |           }], | ||||||
|  |           xAxes: [ { | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             }, | ||||||
|  |             categoryPercentage: 0.5, | ||||||
|  |             barPercentage: 0.2 | ||||||
|  |           }] | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     renderChart (data, options, type) { | ||||||
|  |       let chartOptions = mergeOptions(this.defaultOptions, options) | ||||||
|  |       this._chart = new Chart( | ||||||
|  |         this.$refs.canvas.getContext('2d'), { | ||||||
|  |           type: 'horizontalBar', | ||||||
|  |           data: data, | ||||||
|  |           options: chartOptions | ||||||
|  |         } | ||||||
|  |       ) | ||||||
|  |       this._chart.generateLegend() | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   beforeDestroy () { | ||||||
|  |     this._chart.destroy() | ||||||
|  |   } | ||||||
|  | }) | ||||||
							
								
								
									
										16
									
								
								src/examples/HorizontalBarExample.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/examples/HorizontalBarExample.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | import HorizontalBarChart from '../BaseCharts/HorizontalBar' | ||||||
|  |  | ||||||
|  | export default HorizontalBarChart.extend({ | ||||||
|  |   mounted () { | ||||||
|  |     this.renderChart({ | ||||||
|  |       labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], | ||||||
|  |       datasets: [ | ||||||
|  |         { | ||||||
|  |           label: 'Data One', | ||||||
|  |           backgroundColor: '#f87979', | ||||||
|  |           data: [40, 20, 12, 39, 10, 40, 39, 80, 40, 20, 12, 11] | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }, {responsive: true, maintainAspectRatio: false}) | ||||||
|  |   } | ||||||
|  | }) | ||||||
| @@ -1,4 +1,5 @@ | |||||||
| import Bar from './BaseCharts/Bar' | import Bar from './BaseCharts/Bar' | ||||||
|  | import HorizontalBar from './BaseCharts/HorizontalBar' | ||||||
| import Doughnut from './BaseCharts/Doughnut' | import Doughnut from './BaseCharts/Doughnut' | ||||||
| import Line from './BaseCharts/Line' | import Line from './BaseCharts/Line' | ||||||
| import Pie from './BaseCharts/Pie' | import Pie from './BaseCharts/Pie' | ||||||
| @@ -9,6 +10,7 @@ import mixins from './mixins/index.js' | |||||||
|  |  | ||||||
| const VueCharts = { | const VueCharts = { | ||||||
|   Bar, |   Bar, | ||||||
|  |   HorizontalBar, | ||||||
|   Doughnut, |   Doughnut, | ||||||
|   Line, |   Line, | ||||||
|   Pie, |   Pie, | ||||||
| @@ -23,6 +25,7 @@ export default VueCharts | |||||||
| export { | export { | ||||||
|   VueCharts, |   VueCharts, | ||||||
|   Bar, |   Bar, | ||||||
|  |   HorizontalBar, | ||||||
|   Doughnut, |   Doughnut, | ||||||
|   Line, |   Line, | ||||||
|   Pie, |   Pie, | ||||||
|   | |||||||
							
								
								
									
										64
									
								
								test/unit/specs/HorizontalBar.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								test/unit/specs/HorizontalBar.spec.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import HorizontalBarChart from 'src/examples/HorizontalBarExample' | ||||||
|  |  | ||||||
|  | describe('HorizontalBarChart', () => { | ||||||
|  |   let el | ||||||
|  |  | ||||||
|  |   beforeEach(() => { | ||||||
|  |     el = document.createElement('div') | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('should render a canvas', () => { | ||||||
|  |     const vm = new Vue({ | ||||||
|  |       render: function (createElement) { | ||||||
|  |         return createElement( | ||||||
|  |           HorizontalBarChart | ||||||
|  |         ) | ||||||
|  |       }, | ||||||
|  |       components: { HorizontalBarChart } | ||||||
|  |     }).$mount(el) | ||||||
|  |  | ||||||
|  |     expect(vm.$el.querySelector('#horizontalbar-chart')).not.to.be.an('undefined') | ||||||
|  |     expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') | ||||||
|  |     expect(vm.$el.querySelector('canvas')).not.to.be.an('null') | ||||||
|  |     expect(vm.$el.querySelector('canvas')).to.exist | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('should change id based on prop', () => { | ||||||
|  |     const vm = new Vue({ | ||||||
|  |       render: function (createElement) { | ||||||
|  |         return createElement( | ||||||
|  |           HorizontalBarChart, { | ||||||
|  |             props: { | ||||||
|  |               chartId: 'horizontalbarchartprop' | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         ) | ||||||
|  |       }, | ||||||
|  |       components: { HorizontalBarChart } | ||||||
|  |     }).$mount(el) | ||||||
|  |  | ||||||
|  |     expect(vm.$el.querySelector('#horizontalbarchartprop')).not.to.be.an('undefined') | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('should destroy chart instance', (done) => { | ||||||
|  |     const vm = new Vue({ | ||||||
|  |       render: function (createElement) { | ||||||
|  |         return createElement( | ||||||
|  |           HorizontalBarChart | ||||||
|  |         ) | ||||||
|  |       }, | ||||||
|  |       components: { HorizontalBarChart } | ||||||
|  |     }).$mount(el) | ||||||
|  |  | ||||||
|  |     expect(vm.$children[0]._chart.chart.ctx).not.to.be.null | ||||||
|  |  | ||||||
|  |     vm.$destroy() | ||||||
|  |  | ||||||
|  |     vm.$nextTick(() => { | ||||||
|  |       vm.$forceUpdate() | ||||||
|  |       expect(vm.$children[0]._chart.chart.ctx).to.be.null | ||||||
|  |       done() | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
|  | }) | ||||||
		Reference in New Issue
	
	Block a user