@aclymatepackages/modules 2.0.9 → 2.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
|
+
var _recharts = require("recharts");
|
|
11
|
+
var _material = require("@mui/material");
|
|
12
|
+
var _atoms = require("@aclymatepackages/atoms");
|
|
13
|
+
var _converters = require("@aclymatepackages/converters");
|
|
14
|
+
var _formatters = require("@aclymatepackages/formatters");
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
19
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
20
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
21
|
+
const AccountingChartTooltip = _ref => {
|
|
22
|
+
let {
|
|
23
|
+
convertCarbonUnits,
|
|
24
|
+
displayUnitLabel,
|
|
25
|
+
payload: passedPayload
|
|
26
|
+
} = _ref;
|
|
27
|
+
const {
|
|
28
|
+
payload
|
|
29
|
+
} = passedPayload[0] || {};
|
|
30
|
+
if (!payload) {
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
|
|
32
|
+
}
|
|
33
|
+
const {
|
|
34
|
+
year,
|
|
35
|
+
baseline,
|
|
36
|
+
tonsCo2e,
|
|
37
|
+
isPledgeYear,
|
|
38
|
+
overEmitted,
|
|
39
|
+
underEmitted,
|
|
40
|
+
expectedPercentage,
|
|
41
|
+
future,
|
|
42
|
+
expectedTonsCo2e
|
|
43
|
+
} = payload;
|
|
44
|
+
const buildTextIcon = () => {
|
|
45
|
+
const title = "".concat(year, "- ").concat((0, _formatters.formatDecimal)(convertCarbonUnits(tonsCo2e || expectedTonsCo2e)), " ").concat(displayUnitLabel);
|
|
46
|
+
if (baseline) {
|
|
47
|
+
return {
|
|
48
|
+
title,
|
|
49
|
+
subtitle: "Baseline Year"
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (isPledgeYear) {
|
|
53
|
+
return {
|
|
54
|
+
title,
|
|
55
|
+
subtitle: "Pledge Year"
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (future) {
|
|
59
|
+
return {
|
|
60
|
+
title,
|
|
61
|
+
subtitle: "No more than ".concat((0, _formatters.formatDecimal)(convertCarbonUnits(expectedTonsCo2e)), " ").concat(displayUnitLabel, " allowed")
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (!expectedPercentage) {
|
|
65
|
+
return {
|
|
66
|
+
title,
|
|
67
|
+
subtitle: "You emitted ".concat((0, _formatters.formatDecimal)(overEmitted || underEmitted), "% of your baseline")
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
title,
|
|
72
|
+
subtitle: "You emitted ".concat((0, _formatters.formatDecimal)(overEmitted || underEmitted), "% of your reduction pledge")
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const {
|
|
76
|
+
title,
|
|
77
|
+
subtitle
|
|
78
|
+
} = buildTextIcon();
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement(_atoms.DefaultPaper, null, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
80
|
+
container: true,
|
|
81
|
+
direction: "column",
|
|
82
|
+
spacing: 2
|
|
83
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
84
|
+
item: true
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
86
|
+
variant: "h4"
|
|
87
|
+
}, title), /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
88
|
+
variant: "subtitle1",
|
|
89
|
+
color: "textSecondary"
|
|
90
|
+
}, subtitle))));
|
|
91
|
+
};
|
|
92
|
+
const AccountingChart = _ref2 => {
|
|
93
|
+
let {
|
|
94
|
+
accountingYears,
|
|
95
|
+
pledgeYear,
|
|
96
|
+
pledgeYears,
|
|
97
|
+
baselineDate,
|
|
98
|
+
pledgeTons,
|
|
99
|
+
baselineTons,
|
|
100
|
+
convertCarbonUnits = tons => tons,
|
|
101
|
+
displayUnitLabel = "tons",
|
|
102
|
+
card
|
|
103
|
+
} = _ref2;
|
|
104
|
+
const {
|
|
105
|
+
palette
|
|
106
|
+
} = (0, _material.useTheme)();
|
|
107
|
+
const buildChartData = () => {
|
|
108
|
+
const pledgeBaselineTonsMultiplier = pledgeTons / baselineTons;
|
|
109
|
+
const findYearChartProps = _ref3 => {
|
|
110
|
+
let {
|
|
111
|
+
baseline,
|
|
112
|
+
baselinePercentage,
|
|
113
|
+
year,
|
|
114
|
+
pledgePercentage,
|
|
115
|
+
expectedPercentage,
|
|
116
|
+
tonsCo2e
|
|
117
|
+
} = _ref3;
|
|
118
|
+
if (baseline) {
|
|
119
|
+
return {
|
|
120
|
+
baseline: 100,
|
|
121
|
+
year,
|
|
122
|
+
tonsCo2e
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (!pledgeYear || pledgeYear > year) {
|
|
126
|
+
const underEmittedObj = baselinePercentage <= 100 ? {
|
|
127
|
+
underEmitted: baselinePercentage
|
|
128
|
+
} : {};
|
|
129
|
+
const overEmittedObj = baselinePercentage > 100 ? {
|
|
130
|
+
overEmitted: baselinePercentage
|
|
131
|
+
} : {};
|
|
132
|
+
return _objectSpread(_objectSpread({
|
|
133
|
+
year,
|
|
134
|
+
tonsCo2e
|
|
135
|
+
}, underEmittedObj), overEmittedObj);
|
|
136
|
+
}
|
|
137
|
+
const buildPledgeYearProps = function buildPledgeYearProps() {
|
|
138
|
+
let multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
|
139
|
+
const underEmittedObj = pledgePercentage <= expectedPercentage ? {
|
|
140
|
+
underEmitted: pledgePercentage * multiplier,
|
|
141
|
+
expectedPercentage: (expectedPercentage - pledgePercentage) * multiplier
|
|
142
|
+
} : {};
|
|
143
|
+
const overEmittedObj = pledgePercentage > expectedPercentage ? {
|
|
144
|
+
overEmitted: (pledgePercentage - expectedPercentage) * multiplier,
|
|
145
|
+
expectedPercentage: expectedPercentage * multiplier
|
|
146
|
+
} : {};
|
|
147
|
+
return _objectSpread(_objectSpread({
|
|
148
|
+
year,
|
|
149
|
+
tonsCo2e,
|
|
150
|
+
isPledgeYear: year === pledgeYear
|
|
151
|
+
}, underEmittedObj), overEmittedObj);
|
|
152
|
+
};
|
|
153
|
+
if (pledgeYear === (0, _dayjs.default)(baselineDate).year()) {
|
|
154
|
+
return buildPledgeYearProps();
|
|
155
|
+
}
|
|
156
|
+
return buildPledgeYearProps(pledgeBaselineTonsMultiplier);
|
|
157
|
+
};
|
|
158
|
+
const existingYearsChartData = accountingYears.map(findYearChartProps);
|
|
159
|
+
const futureYearsChartData = pledgeYears ? pledgeYears.filter(_ref4 => {
|
|
160
|
+
let {
|
|
161
|
+
year
|
|
162
|
+
} = _ref4;
|
|
163
|
+
return !existingYearsChartData.find(existingYear => existingYear.year === year);
|
|
164
|
+
}).map(_ref5 => {
|
|
165
|
+
let {
|
|
166
|
+
year,
|
|
167
|
+
expectedPercentage,
|
|
168
|
+
expectedTonsCo2e
|
|
169
|
+
} = _ref5;
|
|
170
|
+
return {
|
|
171
|
+
year,
|
|
172
|
+
future: expectedPercentage * pledgeBaselineTonsMultiplier,
|
|
173
|
+
expectedTonsCo2e
|
|
174
|
+
};
|
|
175
|
+
}) : [];
|
|
176
|
+
return [...existingYearsChartData, ...futureYearsChartData];
|
|
177
|
+
};
|
|
178
|
+
const chartDataArray = buildChartData();
|
|
179
|
+
const barAreasArray = [{
|
|
180
|
+
dataKey: "baseline",
|
|
181
|
+
color: palette.primary.main
|
|
182
|
+
}, {
|
|
183
|
+
dataKey: "underEmitted",
|
|
184
|
+
color: palette.secondary.main
|
|
185
|
+
}, {
|
|
186
|
+
dataKey: "expectedPercentage",
|
|
187
|
+
color: palette.backgroundGray.dark
|
|
188
|
+
}, {
|
|
189
|
+
dataKey: "overEmitted",
|
|
190
|
+
color: palette.error.main
|
|
191
|
+
}, {
|
|
192
|
+
dataKey: "future",
|
|
193
|
+
color: (0, _converters.hexToRgba)(palette.backgroundGray.main, 0.8)
|
|
194
|
+
}];
|
|
195
|
+
return /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
196
|
+
position: "relative",
|
|
197
|
+
style: {
|
|
198
|
+
width: "100%"
|
|
199
|
+
}
|
|
200
|
+
}, /*#__PURE__*/_react.default.createElement(_recharts.ResponsiveContainer, {
|
|
201
|
+
width: "100%",
|
|
202
|
+
aspect: card ? 3 : 2.5
|
|
203
|
+
}, /*#__PURE__*/_react.default.createElement(_recharts.BarChart, {
|
|
204
|
+
data: chartDataArray
|
|
205
|
+
}, /*#__PURE__*/_react.default.createElement(_recharts.CartesianGrid, {
|
|
206
|
+
strokeDasharray: "3 3"
|
|
207
|
+
}), /*#__PURE__*/_react.default.createElement(_recharts.XAxis, {
|
|
208
|
+
dataKey: "year",
|
|
209
|
+
interval: "equidistantPreserveChart",
|
|
210
|
+
height: 20
|
|
211
|
+
}), /*#__PURE__*/_react.default.createElement(_recharts.YAxis, {
|
|
212
|
+
width: 70,
|
|
213
|
+
name: "Percentage",
|
|
214
|
+
tickFormatter: tick => "".concat((0, _formatters.formatDecimal)(tick), "%")
|
|
215
|
+
}), /*#__PURE__*/_react.default.createElement(_recharts.Tooltip, {
|
|
216
|
+
wrapperStyle: {
|
|
217
|
+
zIndex: 99
|
|
218
|
+
},
|
|
219
|
+
content: /*#__PURE__*/_react.default.createElement(AccountingChartTooltip, {
|
|
220
|
+
convertCarbonUnits: convertCarbonUnits,
|
|
221
|
+
displayUnitLabel: displayUnitLabel
|
|
222
|
+
})
|
|
223
|
+
}), barAreasArray.map((_ref6, idx) => {
|
|
224
|
+
let {
|
|
225
|
+
dataKey,
|
|
226
|
+
color
|
|
227
|
+
} = _ref6;
|
|
228
|
+
return /*#__PURE__*/_react.default.createElement(_recharts.Bar, {
|
|
229
|
+
key: "view-chart-bar-".concat(idx),
|
|
230
|
+
dataKey: dataKey,
|
|
231
|
+
fill: color,
|
|
232
|
+
stackId: "a",
|
|
233
|
+
isAnimationActive: false
|
|
234
|
+
});
|
|
235
|
+
}), /*#__PURE__*/_react.default.createElement(_recharts.ReferenceLine, {
|
|
236
|
+
y: 100
|
|
237
|
+
}))));
|
|
238
|
+
};
|
|
239
|
+
var _default = exports.default = AccountingChart;
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "AccountingChart", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _AccountingChart.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "CompaniesAutocomplete", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function get() {
|
|
@@ -117,6 +123,7 @@ Object.defineProperty(exports, "useStripeInput", {
|
|
|
117
123
|
return _stripeInput.default;
|
|
118
124
|
}
|
|
119
125
|
});
|
|
126
|
+
var _AccountingChart = _interopRequireDefault(require("./components/AccountingChart"));
|
|
120
127
|
var _FootprintVideo = _interopRequireDefault(require("./components/FootprintVideo"));
|
|
121
128
|
var _IndustryAutocomplete = _interopRequireDefault(require("./components/IndustryAutocomplete"));
|
|
122
129
|
var _PlacesAutocomplete = _interopRequireDefault(require("./components/PlacesAutocomplete"));
|
package/package.json
CHANGED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
XAxis,
|
|
6
|
+
YAxis,
|
|
7
|
+
CartesianGrid,
|
|
8
|
+
ResponsiveContainer,
|
|
9
|
+
Bar,
|
|
10
|
+
BarChart,
|
|
11
|
+
ReferenceLine,
|
|
12
|
+
Tooltip,
|
|
13
|
+
} from "recharts";
|
|
14
|
+
|
|
15
|
+
import { Box, Typography, Grid, useTheme } from "@mui/material";
|
|
16
|
+
|
|
17
|
+
import { DefaultPaper } from "@aclymatepackages/atoms";
|
|
18
|
+
import { hexToRgba } from "@aclymatepackages/converters";
|
|
19
|
+
import { formatDecimal } from "@aclymatepackages/formatters";
|
|
20
|
+
|
|
21
|
+
const AccountingChartTooltip = ({
|
|
22
|
+
convertCarbonUnits,
|
|
23
|
+
displayUnitLabel,
|
|
24
|
+
payload: passedPayload,
|
|
25
|
+
}) => {
|
|
26
|
+
const { payload } = passedPayload[0] || {};
|
|
27
|
+
if (!payload) {
|
|
28
|
+
return <></>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const {
|
|
32
|
+
year,
|
|
33
|
+
baseline,
|
|
34
|
+
tonsCo2e,
|
|
35
|
+
isPledgeYear,
|
|
36
|
+
overEmitted,
|
|
37
|
+
underEmitted,
|
|
38
|
+
expectedPercentage,
|
|
39
|
+
future,
|
|
40
|
+
expectedTonsCo2e,
|
|
41
|
+
} = payload;
|
|
42
|
+
|
|
43
|
+
const buildTextIcon = () => {
|
|
44
|
+
const title = `${year}- ${formatDecimal(
|
|
45
|
+
convertCarbonUnits(tonsCo2e || expectedTonsCo2e)
|
|
46
|
+
)} ${displayUnitLabel}`;
|
|
47
|
+
|
|
48
|
+
if (baseline) {
|
|
49
|
+
return { title, subtitle: "Baseline Year" };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (isPledgeYear) {
|
|
53
|
+
return { title, subtitle: "Pledge Year" };
|
|
54
|
+
}
|
|
55
|
+
if (future) {
|
|
56
|
+
return {
|
|
57
|
+
title,
|
|
58
|
+
subtitle: `No more than ${formatDecimal(
|
|
59
|
+
convertCarbonUnits(expectedTonsCo2e)
|
|
60
|
+
)} ${displayUnitLabel} allowed`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (!expectedPercentage) {
|
|
65
|
+
return {
|
|
66
|
+
title,
|
|
67
|
+
subtitle: `You emitted ${formatDecimal(
|
|
68
|
+
overEmitted || underEmitted
|
|
69
|
+
)}% of your baseline`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
title,
|
|
75
|
+
subtitle: `You emitted ${formatDecimal(
|
|
76
|
+
overEmitted || underEmitted
|
|
77
|
+
)}% of your reduction pledge`,
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const { title, subtitle } = buildTextIcon();
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<DefaultPaper>
|
|
85
|
+
<Grid container direction="column" spacing={2}>
|
|
86
|
+
<Grid item>
|
|
87
|
+
<Typography variant="h4">{title}</Typography>
|
|
88
|
+
<Typography variant="subtitle1" color="textSecondary">
|
|
89
|
+
{subtitle}
|
|
90
|
+
</Typography>
|
|
91
|
+
</Grid>
|
|
92
|
+
</Grid>
|
|
93
|
+
</DefaultPaper>
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const AccountingChart = ({
|
|
98
|
+
accountingYears,
|
|
99
|
+
pledgeYear,
|
|
100
|
+
pledgeYears,
|
|
101
|
+
baselineDate,
|
|
102
|
+
pledgeTons,
|
|
103
|
+
baselineTons,
|
|
104
|
+
convertCarbonUnits = (tons) => tons,
|
|
105
|
+
displayUnitLabel = "tons",
|
|
106
|
+
card,
|
|
107
|
+
}) => {
|
|
108
|
+
const { palette } = useTheme();
|
|
109
|
+
|
|
110
|
+
const buildChartData = () => {
|
|
111
|
+
const pledgeBaselineTonsMultiplier = pledgeTons / baselineTons;
|
|
112
|
+
|
|
113
|
+
const findYearChartProps = ({
|
|
114
|
+
baseline,
|
|
115
|
+
baselinePercentage,
|
|
116
|
+
year,
|
|
117
|
+
pledgePercentage,
|
|
118
|
+
expectedPercentage,
|
|
119
|
+
tonsCo2e,
|
|
120
|
+
}) => {
|
|
121
|
+
if (baseline) {
|
|
122
|
+
return { baseline: 100, year, tonsCo2e };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!pledgeYear || pledgeYear > year) {
|
|
126
|
+
const underEmittedObj =
|
|
127
|
+
baselinePercentage <= 100 ? { underEmitted: baselinePercentage } : {};
|
|
128
|
+
|
|
129
|
+
const overEmittedObj =
|
|
130
|
+
baselinePercentage > 100 ? { overEmitted: baselinePercentage } : {};
|
|
131
|
+
|
|
132
|
+
return { year, tonsCo2e, ...underEmittedObj, ...overEmittedObj };
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const buildPledgeYearProps = (multiplier = 1) => {
|
|
136
|
+
const underEmittedObj =
|
|
137
|
+
pledgePercentage <= expectedPercentage
|
|
138
|
+
? {
|
|
139
|
+
underEmitted: pledgePercentage * multiplier,
|
|
140
|
+
expectedPercentage:
|
|
141
|
+
(expectedPercentage - pledgePercentage) * multiplier,
|
|
142
|
+
}
|
|
143
|
+
: {};
|
|
144
|
+
|
|
145
|
+
const overEmittedObj =
|
|
146
|
+
pledgePercentage > expectedPercentage
|
|
147
|
+
? {
|
|
148
|
+
overEmitted:
|
|
149
|
+
(pledgePercentage - expectedPercentage) * multiplier,
|
|
150
|
+
expectedPercentage: expectedPercentage * multiplier,
|
|
151
|
+
}
|
|
152
|
+
: {};
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
year,
|
|
156
|
+
tonsCo2e,
|
|
157
|
+
isPledgeYear: year === pledgeYear,
|
|
158
|
+
...underEmittedObj,
|
|
159
|
+
...overEmittedObj,
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
if (pledgeYear === dayjs(baselineDate).year()) {
|
|
164
|
+
return buildPledgeYearProps();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return buildPledgeYearProps(pledgeBaselineTonsMultiplier);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const existingYearsChartData = accountingYears.map(findYearChartProps);
|
|
171
|
+
|
|
172
|
+
const futureYearsChartData = pledgeYears
|
|
173
|
+
? pledgeYears
|
|
174
|
+
.filter(
|
|
175
|
+
({ year }) =>
|
|
176
|
+
!existingYearsChartData.find(
|
|
177
|
+
(existingYear) => existingYear.year === year
|
|
178
|
+
)
|
|
179
|
+
)
|
|
180
|
+
.map(({ year, expectedPercentage, expectedTonsCo2e }) => ({
|
|
181
|
+
year,
|
|
182
|
+
future: expectedPercentage * pledgeBaselineTonsMultiplier,
|
|
183
|
+
expectedTonsCo2e,
|
|
184
|
+
}))
|
|
185
|
+
: [];
|
|
186
|
+
|
|
187
|
+
return [...existingYearsChartData, ...futureYearsChartData];
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const chartDataArray = buildChartData();
|
|
191
|
+
|
|
192
|
+
const barAreasArray = [
|
|
193
|
+
{ dataKey: "baseline", color: palette.primary.main },
|
|
194
|
+
{ dataKey: "underEmitted", color: palette.secondary.main },
|
|
195
|
+
{ dataKey: "expectedPercentage", color: palette.backgroundGray.dark },
|
|
196
|
+
{ dataKey: "overEmitted", color: palette.error.main },
|
|
197
|
+
{ dataKey: "future", color: hexToRgba(palette.backgroundGray.main, 0.8) },
|
|
198
|
+
];
|
|
199
|
+
|
|
200
|
+
return (
|
|
201
|
+
<Box position="relative" style={{ width: "100%" }}>
|
|
202
|
+
<ResponsiveContainer width="100%" aspect={card ? 3 : 2.5}>
|
|
203
|
+
<BarChart data={chartDataArray}>
|
|
204
|
+
<CartesianGrid strokeDasharray="3 3" />
|
|
205
|
+
<XAxis
|
|
206
|
+
dataKey="year"
|
|
207
|
+
interval="equidistantPreserveChart"
|
|
208
|
+
height={20}
|
|
209
|
+
/>
|
|
210
|
+
<YAxis
|
|
211
|
+
width={70}
|
|
212
|
+
name="Percentage"
|
|
213
|
+
tickFormatter={(tick) => `${formatDecimal(tick)}%`}
|
|
214
|
+
/>
|
|
215
|
+
<Tooltip
|
|
216
|
+
wrapperStyle={{ zIndex: 99 }}
|
|
217
|
+
content={
|
|
218
|
+
<AccountingChartTooltip
|
|
219
|
+
convertCarbonUnits={convertCarbonUnits}
|
|
220
|
+
displayUnitLabel={displayUnitLabel}
|
|
221
|
+
/>
|
|
222
|
+
}
|
|
223
|
+
/>
|
|
224
|
+
{barAreasArray.map(({ dataKey, color }, idx) => (
|
|
225
|
+
<Bar
|
|
226
|
+
key={`view-chart-bar-${idx}`}
|
|
227
|
+
dataKey={dataKey}
|
|
228
|
+
fill={color}
|
|
229
|
+
stackId="a"
|
|
230
|
+
isAnimationActive={false}
|
|
231
|
+
/>
|
|
232
|
+
))}
|
|
233
|
+
<ReferenceLine y={100} />
|
|
234
|
+
</BarChart>
|
|
235
|
+
</ResponsiveContainer>
|
|
236
|
+
</Box>
|
|
237
|
+
);
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
export default AccountingChart;
|
package/src/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import AccountingChart from "./components/AccountingChart";
|
|
1
2
|
import FootprintVideo from "./components/FootprintVideo";
|
|
2
3
|
import IndustryAutocomplete from "./components/IndustryAutocomplete";
|
|
3
4
|
import PlacesAutocomplete from "./components/PlacesAutocomplete";
|
|
@@ -19,6 +20,7 @@ import ReportGraphContentLayout from "./components/ReportGraphContentLayout";
|
|
|
19
20
|
import EmissionsSummarySentence from "./components/EmissionsSummarySentence";
|
|
20
21
|
|
|
21
22
|
export {
|
|
23
|
+
AccountingChart,
|
|
22
24
|
FootprintVideo,
|
|
23
25
|
IndustryAutocomplete,
|
|
24
26
|
PlacesAutocomplete,
|