Logo

Charts

The Dashboard page continues with a donut chart that visualizes some of the same facts reported using InfoCard. We define it as a Statuses component whose width and title are defined by its containing Dashboard component. Here we'll use it standalone.
<App>
  <Statuses width="50%" title="Statuses" />
</App>
Statuses uses three critical properties of DonutChart.
  • data: The ubiquitous attribute that refers to data that may be defined literally or, as in this case, via an API call backed by a database query.
  • dataKey: The object key that holds data.
  • nameKey: The object key whose value is the data label.
<Component name="Statuses">
  <DataSource id="dashboardStats" url="/api/dashboard/stats" method="GET" />
  <Card title="Statuses" height="400px" width="{$props.width}">
    <DonutChart
      data="{
        [
          {
            name: 'sent',
            value: dashboardStats.value[0].sent_invoices
          },
          {
            name: 'draft',
            value: dashboardStats.value[0].draft_invoices
          },
          {
            name: 'paid',
            value: dashboardStats.value[0].paid_invoices
          },
        ]
      }"
      dataKey="value"
      nameKey="name"
    />
  </Card>
</Component>

Multiseries charts

PieChart and DonutChart work with a single series of data and use dataKey. BarChart and LineChart can display multiple series denoted by dataKeys. We see that in the MonthlyStatus chart.
<Component name="MonthlyStatus"">

    <DataSource
        id="monthlyStatus"
        url="/resources/files/monthly-status.json"
        method="GET" />

    <VStack width="{$props.width}">
        <H1>{$props.title}</H1>

        <Card height="400px">
        <BarChart
          layout="horizontal"
          data="{ monthlyStatus }"
          dataKeys="{['paid_revenue', 'sent_revenue']}" nameKey="month"
          stacked="true"
          showLegend="true"
          tickFormatter="{(value) => {
            return window.formatMonth(value);
          }}"
        />
        </Card>
    </VStack>

</Component>
<App>
  <MonthlyStatus />
</App>
<Component name="MonthlyStatus">

    <DataSource
        id="monthlyStatus"
        url="/resources/files/monthly-status.json"
        method="GET" />

    <VStack width="{$props.width}">
        <H1>{$props.title}</H1>

        <Card height="400px">
        <BarChart
          layout="horizontal"
          data="{ monthlyStatus }"
          dataKeys="{['paid_revenue', 'sent_revenue']}" nameKey="month"
          stacked="true"
          showLegend="true"
          tickFormatter="{(value) => {
            return window.formatMonth(value);
          }}"
        />
        </Card>
    </VStack>

</Component>
<App>
  <MonthlyStatus />
</App>
<Component name="MonthlyStatus">

    <DataSource
        id="monthlyStatus"
        url="/resources/files/monthly-status.json"
        method="GET" />

    <VStack width="{$props.width}">
        <H1>{$props.title}</H1>

        <Card height="400px">
        <BarChart
          layout="horizontal"
          data="{ monthlyStatus }"
          dataKeys="{['paid_revenue', 'sent_revenue']}" nameKey="month"
          stacked="true"
          showLegend="true"
          tickFormatter="{(value) => {
            return window.formatMonth(value);
          }}"
        />
        </Card>
    </VStack>

</Component>
This site is an XMLUI™ app.