report

basic-page

Générer un rapport d'une page en associant les ressources chart et insight avec le report builder

Tags: basic

Loading...
import { createVBI, VBIChartBuilder, VBIInsightBuilder, VBIReportBuilder } from '@visactor/vbi'
import { JsonRender } from '@components'
import { useEffect, useState } from 'react'

export default () => {
  const [result, setResult] = useState<any>(null)
  const [error, setError] = useState<string | null>(null)

  useEffect(() => {
    try {
      const LocalVBI = createVBI()
      const resources = {
        charts: {
          salesChart: LocalVBI.chart.create({
              "connectorId": "demoSupermarket",
              "chartType": "bar",
              "dimensions": [
                {
                  "field": "province",
                  "alias": "Province"
                }
              ],
              "measures": [
                {
                  "field": "sales",
                  "alias": "Ventes",
                  "encoding": "xAxis",
                  "aggregate": {
                    "func": "sum"
                  }
                }
              ],
              "whereFilter": {
                "id": "root",
                "op": "and",
                "conditions": []
              },
              "havingFilter": {
                "id": "root",
                "op": "and",
                "conditions": []
              },
              "theme": "light",
              "locale": "fr-FR",
              "version": 1
            }),
        },
        insights: {
          salesInsight: LocalVBI.insight.create({
              "content": "Les ventes sont concentrées en Chine de l'Est, avec les contributions les plus importantes de Shanghai et du Zhejiang.",
              "version": 0
            }),
        },
      }
      const builder = LocalVBI.report.create({
          "pages": [],
          "version": 0
        })
      const applyBuilder = (builder: VBIReportBuilder, resources: any) => {
  builder.page.add('Aperçu des ventes', page => {
    page.setChartId(resources.charts.salesChart)
    page.setInsightId(resources.insights.salesInsight)
  })
}
      applyBuilder(builder, resources)
      setResult(builder.snapshot())
    } catch (err) {
      setError(err instanceof Error ? err.message : String(err))
    }
  }, [])

  if (error) return <JsonRender value={{ error }} />
  if (!result) return <div>Loading...</div>

  return <JsonRender value={result} />
}