reakit
Version:
Toolkit for building accessible rich web apps with React
31 lines (27 loc) • 1 kB
text/typescript
import { Item } from "./types";
import { groupItems } from "./groupItems";
import { getMaxLength } from "./getMaxLength";
/**
* Turns [row1, row1, row2, row2] into [row1, row2, row1, row2]
*/
export function verticalizeItems(items: Item[]) {
const groups = groupItems(items);
const maxLength = getMaxLength(groups);
const verticalized = [] as Item[];
for (let i = 0; i < maxLength; i += 1) {
for (const group of groups) {
if (group[i]) {
verticalized.push({
...group[i],
// If there's no groupId, it means that it's not a grid composite,
// but a single row instead. So, instead of verticalizing it, that
// is, assigning a different groupId based on the column index, we
// keep it undefined so they will be part of the same group.
// It's useful when using up/down on one-dimensional composites.
groupId: group[i].groupId ? `${i}` : undefined,
});
}
}
}
return verticalized;
}