vue-google-charts
Version:
Reactive Vue.js wrapper for Google Charts lib
1 lines • 18.5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/lib/google-charts-loader.ts","../src/utils.ts","../src/lib/debounce.ts","../src/components/GChart.ts","../src/index.ts"],"sourcesContent":["/**\n * Usage:\n * import { loadGoogleCharts } from 'vue-google-charts'\n *\n * loadGoogleCharts('current', { packages: ['corechart', 'map'] })\n * .then(google => {\n * const chart = new google.visualization.Map ...\n * })\n */\n\nimport type {\n GoogleViz,\n GoogleChartLoader,\n GoogleChartVersion,\n GoogleChartLoaderOptions,\n} from '../types';\n\nconst chartsScriptUrl = 'https://www.gstatic.com/charts/loader.js';\n\nlet chartsLoaderPromise: null | Promise<GoogleChartLoader> = null;\n\nconst loadedPackages = new Map();\n\nexport function getChartsLoader(): Promise<GoogleChartLoader> {\n // If already included in the page:\n if (window.google !== undefined) {\n return Promise.resolve(window.google.charts);\n }\n\n if (chartsLoaderPromise === null) {\n chartsLoaderPromise = new Promise(resolve => {\n // Find script tag with same src in DOM.\n const foundScript = document.querySelector<HTMLScriptElement>(\n `script[src=\"${chartsScriptUrl}\"]`\n );\n\n // Create or get existed tag.\n const script = foundScript || document.createElement('script');\n\n // Set src if no script was found.\n if (!foundScript) {\n script.src = chartsScriptUrl;\n script.type = 'text/javascript';\n\n document.head.append(script);\n }\n\n script.onload = () => {\n if (window.google !== undefined) {\n resolve(window.google.charts);\n }\n };\n });\n }\n\n return chartsLoaderPromise;\n}\n\n/**\n * Function to load Google Charts JS API.\n * @param version - Chart version to load.\n * @param packages - Packages to load.\n * @param language - Languages to load.\n * @param mapsApiKey - Google Maps api key.\n * @returns\n */\nexport async function loadGoogleCharts(\n version: GoogleChartVersion = 'current',\n {\n packages = ['corechart', 'controls'],\n language = 'en',\n mapsApiKey,\n }: GoogleChartLoaderOptions\n): Promise<GoogleViz | undefined> {\n const loader = await getChartsLoader();\n\n const settingsKey = `${version}_${packages.join('_')}_${language}`;\n\n if (loadedPackages.has(settingsKey)) return loadedPackages.get(settingsKey);\n\n const loaderPromise: Promise<GoogleViz | undefined> = new Promise(resolve => {\n loader.load(version, {\n packages,\n language,\n mapsApiKey,\n });\n\n loader.setOnLoadCallback(() => resolve(window.google));\n });\n\n loadedPackages.set(settingsKey, loaderPromise);\n\n return loaderPromise;\n}\n","import {\n GoogleChartWrapper,\n GoogleChartWrapperChartType,\n GoogleDataTable,\n GoogleDataView,\n GoogleViz,\n GoogleVizEventName,\n GoogleVizEvents,\n} from './types';\n\nexport interface ICreateChartFunction {\n (\n el: HTMLElement,\n google: GoogleViz,\n type: GoogleChartWrapperChartType\n ): GoogleChartWrapper;\n}\n\nexport function getValidChartData(\n chartsLib: null | GoogleViz,\n data: unknown[][] | GoogleDataTable | Record<string, any> | null,\n isFirstRowLabels?: boolean\n): GoogleDataTable | GoogleDataView | null {\n if (chartsLib !== null && data instanceof chartsLib.visualization.DataTable) {\n return data;\n }\n\n if (chartsLib !== null && data instanceof chartsLib.visualization.DataView) {\n return data;\n }\n\n if (chartsLib !== null && Array.isArray(data)) {\n return chartsLib.visualization.arrayToDataTable(data, isFirstRowLabels);\n }\n\n if (chartsLib !== null && data !== null && typeof data === 'object') {\n return new chartsLib.visualization.DataTable(data);\n }\n\n return null;\n}\n\nexport function createChartObject(\n chartsLib: GoogleViz | null,\n chartObject: GoogleChartWrapper | null,\n chartEl: HTMLElement | null,\n chartType: GoogleChartWrapperChartType,\n chartEvents: GoogleVizEvents | null,\n createChartFunction?: ICreateChartFunction\n): GoogleChartWrapper | null {\n const createChart: ICreateChartFunction = (\n el: HTMLElement,\n google: GoogleViz,\n type: GoogleChartWrapperChartType\n ): GoogleChartWrapper => {\n if (type === undefined) {\n throw new Error('please, provide chart type property');\n }\n\n return new google.visualization[type](el);\n };\n\n if (chartsLib === null) {\n throw new Error('please, provide charts lib property');\n }\n\n if (chartEl === null) {\n throw new Error('please, provide chart element property');\n }\n\n const fn = createChartFunction || createChart;\n\n chartObject = fn(chartEl, chartsLib, chartType);\n\n attachListeners(chartsLib, chartObject, chartEvents);\n\n return chartObject;\n}\n\nfunction attachListeners(\n chartsLib: null | GoogleViz,\n chartObject: GoogleChartWrapper | null,\n chartEvents: GoogleVizEvents | null\n): void {\n if (chartEvents === null) {\n return;\n }\n\n for (const [event, listener] of Object.entries(chartEvents)) {\n if (chartsLib !== null && chartObject !== null) {\n chartsLib.visualization.events.addListener(\n chartObject,\n event as GoogleVizEventName,\n listener as (chartWrapper: GoogleChartWrapper) => any\n );\n }\n }\n}\n","export interface DebouncedFunction<\n Args extends any[],\n F extends (...args: Args) => any\n> {\n (this: ThisParameterType<F>, ...args: Args & Parameters<F>): void;\n}\n\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\n func: F,\n waitMilliseconds = 50\n): DebouncedFunction<Args, F> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n function nextInvokeTimeout() {\n return waitMilliseconds;\n }\n\n const debouncedFunction = function (\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n ) {\n const context = this;\n\n const invokeFunction = function () {\n timeoutId = undefined;\n\n func.apply(context, args);\n };\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\n };\n\n return debouncedFunction;\n}\n","import {\n defineComponent,\n ref,\n h,\n onMounted,\n onBeforeUnmount,\n watch,\n PropType,\n} from 'vue';\n\nimport {\n GoogleViz,\n GoogleChartWrapper,\n GoogleChartWrapperChartType,\n GoogleChartOptions,\n GoogleChartVersion,\n GoogleChartLoaderOptions,\n GoogleVizEvents,\n GoogleDataTable,\n} from '../types';\n\nimport {\n createChartObject,\n getValidChartData,\n ICreateChartFunction,\n} from '../utils';\n\nimport { loadGoogleCharts } from '../lib/google-charts-loader';\nimport { debounce } from '../lib/debounce';\n\nlet chartsLib: null | GoogleViz = null;\n\nexport const GChart = defineComponent({\n name: 'GChart',\n props: {\n type: {\n type: String as PropType<GoogleChartWrapperChartType>,\n required: true,\n },\n data: {\n type: [Array, Object, null] as PropType<\n unknown[][] | GoogleDataTable | Record<string, any> | null\n >,\n default: () => [],\n },\n isFirstRowLabels: {\n type: Boolean,\n default: false,\n },\n options: {\n type: Object as PropType<GoogleChartOptions>,\n default: () => ({}),\n },\n version: {\n type: String as PropType<GoogleChartVersion>,\n default: 'current',\n },\n settings: {\n type: Object as PropType<GoogleChartLoaderOptions>,\n default: () => ({\n packages: ['corechart', 'table'],\n }),\n },\n events: {\n type: Object as PropType<GoogleVizEvents | null>,\n default: null,\n },\n createChart: {\n type: Function as PropType<ICreateChartFunction>,\n default: undefined,\n },\n resizeDebounce: {\n type: Number,\n default: 200,\n },\n },\n setup(props, { emit }) {\n const chartObject = ref<GoogleChartWrapper | null>(null);\n const chartEl = ref<HTMLElement | null>(null);\n\n function drawChart(): void {\n if (chartsLib === null || chartObject.value === null) {\n return;\n }\n\n const data = getValidChartData(\n chartsLib,\n props.data,\n props.isFirstRowLabels\n );\n if (data !== null) {\n chartObject.value?.draw(data, props.options);\n }\n }\n\n watch(\n () => props.data,\n () => drawChart(),\n { deep: true }\n );\n\n watch(\n () => props.options,\n () => drawChart(),\n { deep: true }\n );\n\n watch(\n () => props.type,\n () => {\n chartObject.value = createChartObject(\n chartsLib,\n chartObject.value,\n chartEl.value,\n props.type,\n props.events,\n props.createChart\n );\n\n drawChart();\n }\n );\n\n onMounted(() => {\n loadGoogleCharts(props.version, props.settings).then(api => {\n if (api !== undefined) {\n chartsLib = api;\n\n chartObject.value = createChartObject(\n chartsLib,\n chartObject.value,\n chartEl.value,\n props.type,\n props.events,\n props.createChart\n );\n\n emit('ready', chartObject.value, api);\n\n drawChart();\n }\n });\n\n if (props.resizeDebounce > 0) {\n window.addEventListener(\n 'resize',\n debounce(drawChart, props.resizeDebounce) as EventListener\n );\n }\n });\n\n onBeforeUnmount(() => {\n if (\n chartObject.value !== null &&\n typeof chartObject.value.clearChart === 'function'\n ) {\n chartObject.value.clearChart();\n }\n\n if (props.resizeDebounce > 0) {\n window.removeEventListener(\n 'resize',\n debounce(drawChart, props.resizeDebounce) as EventListener\n );\n }\n });\n\n return () => h('div', { ref: chartEl }, []);\n },\n});\n","import { createApp } from 'vue';\n\nimport { loadGoogleCharts } from './lib/google-charts-loader';\nimport { GChart } from './components/GChart';\n\nconst app = createApp({});\n\n// Install the components\nexport function install() {\n app.component('GChart', GChart);\n}\n\n// Expose the components\nexport { loadGoogleCharts, GChart };\n\n/* -- Plugin definition & Auto-install -- */\n/* You shouldn't have to modify the code below */\n\n// Plugin\nconst plugin = {\n version: process.env.VERSION,\n install,\n};\n\nexport default plugin;\n\n// Auto-install\nlet GlobalVue = null;\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue;\n}\n\nif (GlobalVue !== null && GlobalVue !== undefined) {\n app.use(plugin);\n}\n"],"names":["chartsScriptUrl","chartsLoaderPromise","loadedPackages","Map","getChartsLoader","window","google","undefined","Promise","resolve","charts","foundScript","document","querySelector","script","createElement","src","type","head","append","onload","loadGoogleCharts","version","packages","language","mapsApiKey","loader","settingsKey","join","has","get","loaderPromise","load","setOnLoadCallback","set","getValidChartData","chartsLib","data","isFirstRowLabels","visualization","DataTable","DataView","Array","isArray","arrayToDataTable","createChartObject","chartObject","chartEl","chartType","chartEvents","createChartFunction","createChart","el","Error","fn","attachListeners","event","listener","Object","entries","events","addListener","debounce","func","waitMilliseconds","timeoutId","nextInvokeTimeout","debouncedFunction","args","context","invokeFunction","apply","clearTimeout","setTimeout","GChart","defineComponent","name","props","String","required","default","Boolean","options","settings","Function","resizeDebounce","Number","setup","emit","ref","drawChart","value","draw","watch","deep","onMounted","then","api","addEventListener","onBeforeUnmount","clearChart","removeEventListener","h","app","createApp","install","component","plugin","GlobalVue","Vue","use"],"mappings":"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"}