class Arr{
constructor(props){
Object.keys(props).forEach((key)=>{this[key] = props[key]})
this.outer = this.element.append("g").attr("transform",`translate(${this.x},${this.y})`)
this.inner = this.outer.append("g")
this.array = []
for(var i = 0;i<this.data.length;i++){
this.array.push(new Entry({element:this.inner,x:30*i,y:0,fill:"white",datumFill:"black",datum:this.data[i]}))
}
}
swap(i,j,duration,ease){
var temp = this.array[i]
this.array[i] = this.array[j]
this.array[j] = temp
temp = this.array[i].x
this.array[i].setX(this.array[j].x,duration,ease)
return this.array[j].setX(temp,duration,ease)
}
async insert(i,duration,color){
var entries = this.array
var proceed = true
await entries[i].setY(-30,duration,d3.easeLinear).end()
while(proceed){
if(i > 0 && entries[i].datum<entries[i-1].datum){
this.swap(i-1,i,duration,d3.easeLinear)
i = i - 1
}else{
proceed = false
}
}
await entries[i].setY(-30,duration,d3.easeLinear).end()
await entries[i].setY(0,duration,d3.easeLinear).end()
entries[i].setFill(color,duration)
entries[i].setDatumFill("white",duration)
}
}