forked from mirrors/homebox
891d41b75f
* card option 1 * UI updates for item card * fix test error * fix pagination issues on backend * add integer support * remove date from cards * implement pagination for search page * resolve search state problems * other fixes * fix broken datetime * attempt to fix scroll behavior
113 lines
2.4 KiB
Vue
113 lines
2.4 KiB
Vue
<template>
|
|
<div ref="el" class="min-h-full flex flex-col">
|
|
{{ styles }}
|
|
<LineChart :chart-options="options" :chart-data="chartData" :styles="styles" />
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { Line as LineChart } from "vue-chartjs";
|
|
import {
|
|
Chart as ChartJS,
|
|
PointElement,
|
|
Title,
|
|
Tooltip,
|
|
Legend,
|
|
CategoryScale,
|
|
LinearScale,
|
|
LineElement,
|
|
} from "chart.js";
|
|
import { TChartData } from "vue-chartjs/dist/types";
|
|
|
|
ChartJS.register(Title, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement);
|
|
|
|
export default defineComponent({
|
|
name: "BarChart",
|
|
components: {
|
|
LineChart,
|
|
},
|
|
props: {
|
|
chartId: {
|
|
type: String,
|
|
default: "bar-chart",
|
|
},
|
|
datasetIdKey: {
|
|
type: String,
|
|
default: "label",
|
|
},
|
|
cssClasses: {
|
|
default: "",
|
|
type: String,
|
|
},
|
|
chartData: {
|
|
type: Object as () => TChartData<"line", number[], unknown>,
|
|
default: () => {
|
|
return {
|
|
labels: ["January", "February", "March"],
|
|
datasets: [{ data: [40, 20, 12] }],
|
|
};
|
|
},
|
|
},
|
|
},
|
|
setup() {
|
|
const el = ref<HTMLElement | null>(null);
|
|
|
|
const calcHeight = ref(0);
|
|
const calcWidth = ref(0);
|
|
|
|
function resize() {
|
|
calcHeight.value = el.value?.offsetHeight || 0;
|
|
calcWidth.value = el.value?.offsetWidth || 0;
|
|
}
|
|
|
|
onMounted(() => {
|
|
resize();
|
|
window.addEventListener("resize", resize);
|
|
});
|
|
|
|
onUnmounted(() => {
|
|
window.removeEventListener("resize", resize);
|
|
});
|
|
|
|
const styles = computed(() => {
|
|
return {
|
|
height: `${calcHeight.value}px`,
|
|
width: `${calcWidth.value}px`,
|
|
position: "relative",
|
|
};
|
|
});
|
|
|
|
return {
|
|
el,
|
|
parentHeight: calcHeight,
|
|
styles,
|
|
};
|
|
},
|
|
data() {
|
|
return {
|
|
options: {
|
|
responsive: true,
|
|
maintainAspectRatio: false,
|
|
scales: {
|
|
x: {
|
|
display: false,
|
|
},
|
|
y: {
|
|
display: true,
|
|
},
|
|
},
|
|
elements: {
|
|
line: {
|
|
borderWidth: 5,
|
|
},
|
|
point: {
|
|
radius: 4,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<style></style>
|