Имеется иерархическая структура данных Контейнер–Ряд–Ячейка. На уровнях Контейнер и Ряд имеются только индексы. Практически значимые данные находятся на уровне Ячейка. Данные поставляются в формате JSON и имеют следующую структуру:
[{ pillar: № стеллажа,
data: [ { shelf: № полки,
data: [ { seat: № места,
data: { busy: false/true,
size: 1/2;
status: "string";
model: "string"
}
},...
]
},...
]
},...
]
Для отображения иерархии создаю три React-компонента:
class PillarListItem extends Component {
render () {
const {pillar, showMachine} = this.props;
return (
<div className="machines-pillar">
<table className="pillar">
<caption>
Стеллаж {pillar.pillar}
</caption>
<tbody>
{
pillar.data.map((s , index) => {
return <ShelfListItem
key = {s.shelf}
shelf={s}
showShelfMachine = {() => showMachine(s)}
/>
})
}
</tbody>
</table>
</div>
)
}
}
class ShelfListItem extends Component {
render () {
const {shelf, showShelfMachine} = this.props;
return (
<tr>
{
shelf.data.map((m , index) => {
return <PlaceListItem
key = {m.seat}
seat={m}
showPlaceMachine = {() => showShelfMachine(m)}
/>
})
}
</tr>
)
}
}
class PlaceListItem extends Component {
render () {
const {seat, showPlaceMachine} = this.props;
if (seat.data.busy) {
return (
<td className={seat.data.status} colSpan={seat.data.size} onClick={showPlaceMachine}>{seat.data.id}</td>
)
} else {
return (
<td className={seat.data.status} colSpan={seat.data.size}>{seat.data.model}</td>
)
}
}
}
Отображение иерархической структуры оформляю следующим вызовом:
class Pillars extends Component {
constructor (props) {
super(props);
this.state = {
setterMachines: gon.setterMachines,
selectedMachine: null
}
}
showPillarHandler = (machine) => {
this.setState({
selectedMachine: machine.data
})
}
tooglePopup = () => {
this.setState({
selectedMachine: null
})
}
render () {
const {selectedMachine, setterMachines} = this.state;
return (
<div className="container-machines">
{
setterMachines.map((p,index) => {
return <PillarListItem
key = {p.pillar}
pillar={p}
showMachine = {() => this.showPillarHandler(p.data[1].data[1])}
/>
})
}
{selectedMachine &&
<MachineShow toogle={this.tooglePopup} machine={selectedMachine}/>
}
</div>
)
}
}
Стоит задача в получении расшифровки с уровня Ячейки при клике на неё.
Проблема. Как программно получить индексы Ряда и Ячейки для строки кода
this.showPillarHandler(p.data[индекс Ряда].data[индекс Ячейки]) ?