Skip to content

Commit 184f37b

Browse files
authored
Merge pull request #1891 from cboard-org/fix-chunk-tiles
Quick fix for remove rows and columns function on fixed boards
2 parents 5320816 + 9007fd7 commit 184f37b

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed

src/components/Board/Board.container.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
speak,
2525
cancelSpeech
2626
} from '../../providers/SpeechProvider/SpeechProvider.actions';
27-
import { moveOrderItem } from '../FixedGrid/utils';
27+
import { getTilesListForNewOrder, moveOrderItem } from '../FixedGrid/utils';
2828
import {
2929
addBoards,
3030
changeBoard,
@@ -664,8 +664,14 @@ export class BoardContainer extends Component {
664664
} else {
665665
newOrder = this.getDefaultOrdering(board.tiles);
666666
}
667+
const tilesForNewOrder = getTilesListForNewOrder({
668+
tileItems: board.tiles,
669+
order: newOrder
670+
});
671+
667672
const newBoard = {
668673
...board,
674+
tiles: tilesForNewOrder,
669675
grid: {
670676
...board.grid,
671677
rows: newRows,
@@ -697,8 +703,13 @@ export class BoardContainer extends Component {
697703
} else {
698704
newOrder = this.getDefaultOrdering(board.tiles);
699705
}
706+
const tilesForNewOrder = getTilesListForNewOrder({
707+
tileItems: board.tiles,
708+
order: newOrder
709+
});
700710
const newBoard = {
701711
...board,
712+
tiles: tilesForNewOrder,
702713
grid: {
703714
...board.grid,
704715
columns: newColumns,

src/components/FixedGrid/utils.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import lodash from 'lodash';
2+
import { TileItem } from './../../types';
13
export interface Grid {
24
rows: number;
35
columns: number;
@@ -123,3 +125,67 @@ export function getNewOrder({ columns,
123125
export function removeOrderItems(ids: string, order: GridOrder): GridOrder {
124126
return order.map(row => row.map(id => (id && ids.includes(id) ? null : id)));
125127
}
128+
129+
function getDeprecatedOrderedPages({
130+
tileItems,
131+
order,
132+
}: {
133+
tileItems: Array<TileItem>;
134+
order: GridOrder;
135+
}): TileItem[][] {
136+
const firstPageItemsInOrder = order.map((row) =>
137+
row.map((id) => tileItems.find((item) => item.id === id) || null),
138+
);
139+
140+
const firstPageIds = order.flat();
141+
const orderedIds = new Set(order.flat());
142+
const unorderedTiles = tileItems.filter((item) => !orderedIds.has(item.id));
143+
const fillEmptyPositionsWithUnorderedTilesForOldBoards = ({
144+
firstPageItemsInOrder,
145+
unorderedTiles,
146+
}: {
147+
firstPageItemsInOrder: (TileItem | null)[][];
148+
unorderedTiles: Array<TileItem>;
149+
}) => {
150+
let index = 0;
151+
const deprecatedFirstPageItemsInOrder = firstPageItemsInOrder.map((row) =>
152+
row.map((item) => {
153+
if (item) return item;
154+
index++;
155+
return unorderedTiles[index - 1] || null;
156+
}),
157+
);
158+
const deprecatedFirstPage = deprecatedFirstPageItemsInOrder
159+
.flat()
160+
.filter((item) => item !== null);
161+
const restOfTiles = unorderedTiles.slice(index);
162+
163+
return { deprecatedFirstPage, restOfTiles };
164+
};
165+
166+
const { deprecatedFirstPage, restOfTiles } =
167+
fillEmptyPositionsWithUnorderedTilesForOldBoards({
168+
firstPageItemsInOrder,
169+
unorderedTiles,
170+
});
171+
172+
const size = firstPageIds.length;
173+
const restOfPages = lodash.chunk(restOfTiles, size);
174+
175+
return [deprecatedFirstPage, ...restOfPages];
176+
}
177+
178+
export function getTilesListForNewOrder({
179+
tileItems,
180+
order,
181+
}: {
182+
tileItems: Array<TileItem>;
183+
order: GridOrder;
184+
}): TileItem[] {
185+
const newPages = getDeprecatedOrderedPages({
186+
order,
187+
tileItems,
188+
});
189+
const tilesListForNewOrder = newPages.flat();
190+
return tilesListForNewOrder;
191+
}

src/types.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export interface TileItem {
2+
id: string;
3+
label?: string;
4+
labelKey?: string;
5+
vocalization?: string;
6+
image: string;
7+
loadBoard?: string;
8+
sound?: string;
9+
type?: string;
10+
backgroundColor: string;
11+
linkedBoard?: boolean;
12+
}

0 commit comments

Comments
 (0)