update = (step) => {
const svg = d3.select(chart);
const current = dataByDate[step];
const x = d3.scaleLinear()
.domain([0, d3.max(current.values, d => d.sales)])
.range([margin.left, width - margin.right]);
const y = d3.scaleBand()
.domain(current.values.map(d => d.name))
.range([margin.top, height - margin.bottom])
.padding(0.1);
svg.select(".x-axis")
.transition().duration(500)
.call(d3.axisTop(x).ticks(5));
svg.select(".y-axis")
.transition().duration(500)
.call(d3.axisLeft(y));
const bars = svg.selectAll(".bar")
.data(current.values, d => d.name);
bars.enter().append("rect")
.attr("class", "bar")
.attr("x", margin.left)
.attr("height", y.bandwidth())
.attr("y", d => y(d.name))
.attr("width", d => x(d.sales) - margin.left)
.merge(bars)
.transition().duration(500)
.attr("y", d => y(d.name))
.attr("width", d => x(d.sales) - margin.left);
bars.exit().remove();
}