Skip to content

Commit e0fb59b

Browse files
author
Benoit Casoetto
committed
Add order enforcement in stack process
includes creation of group parameter shouldStackEnforceOrder
1 parent 44bed94 commit e0fb59b

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

src/lib/utility/calendar.js

+36-11
Original file line numberDiff line numberDiff line change
@@ -287,15 +287,34 @@ export function getVisibleItems(items, canvasTimeStart, canvasTimeEnd, keys) {
287287

288288
const EPSILON = 0.001
289289

290-
export function collision(a, b, lineHeight, collisionPadding = EPSILON) {
290+
export function simpleCollision(a, b, lineHeight, collisionPadding = EPSILON) {
291291
// 2d collisions detection - https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
292292
var verticalMargin = 0
293293

294294
return (
295295
a.collisionLeft + collisionPadding < b.collisionLeft + b.collisionWidth &&
296296
a.collisionLeft + a.collisionWidth - collisionPadding > b.collisionLeft &&
297-
a.top - verticalMargin + collisionPadding < b.top + b.height &&
298-
a.top + a.height + verticalMargin - collisionPadding > b.top
297+
a.top - verticalMargin + collisionPadding < b.top + b.height &&
298+
a.top + a.height + verticalMargin - collisionPadding > b.top
299+
)
300+
}
301+
302+
export function collisionOrOrderMismatch(a, b, lineHeight, collisionPadding = EPSILON) {
303+
// 2d collisions detection - https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
304+
var verticalMargin = 0
305+
306+
return (
307+
a.collisionLeft + collisionPadding < b.collisionLeft + b.collisionWidth &&
308+
a.collisionLeft + a.collisionWidth - collisionPadding > b.collisionLeft &&
309+
((
310+
a.top - verticalMargin + collisionPadding < b.top + b.height &&
311+
a.top + a.height + verticalMargin - collisionPadding > b.top
312+
)
313+
||
314+
(
315+
a.top < b.top
316+
)
317+
)
299318
)
300319
}
301320

@@ -309,7 +328,8 @@ export function groupStack(
309328
group,
310329
groupHeight,
311330
groupTop,
312-
itemIndex
331+
itemIndex,
332+
collision
313333
) {
314334
// calculate non-overlapping positions
315335
let curHeight = groupHeight
@@ -387,9 +407,12 @@ export function stackAll(itemsDimensions, groupOrders, lineHeight, stackItems) {
387407
// Is group being stacked?
388408
const isGroupStacked =
389409
group.stackItems !== undefined ? group.stackItems : stackItems
410+
const shouldStackEnforceOrder =
411+
group.shouldStackEnforceOrder !== undefined ? group.shouldStackEnforceOrder : false
390412
const { groupHeight, verticalMargin } = stackGroup(
391413
itemsDimensions,
392414
isGroupStacked,
415+
shouldStackEnforceOrder,
393416
lineHeight,
394417
groupTop
395418
)
@@ -411,15 +434,16 @@ export function stackAll(itemsDimensions, groupOrders, lineHeight, stackItems) {
411434
}
412435

413436
/**
414-
*
415-
* @param {*} itemsDimensions
416-
* @param {*} isGroupStacked
417-
* @param {*} lineHeight
418-
* @param {*} groupTop
437+
*
438+
* @param {*} itemsDimensions
439+
* @param {*} isGroupStacked
440+
* @param {*} lineHeight
441+
* @param {*} groupTop
419442
*/
420-
export function stackGroup(itemsDimensions, isGroupStacked, lineHeight, groupTop) {
443+
export function stackGroup(itemsDimensions, isGroupStacked, shouldStackEnforceOrder, lineHeight, groupTop) {
421444
var groupHeight = 0
422445
var verticalMargin = 0
446+
const collision = shouldStackEnforceOrder ? collisionOrOrderMismatch : simpleCollision
423447
// Find positions for each item in group
424448
for (let itemIndex = 0; itemIndex < itemsDimensions.length; itemIndex++) {
425449
let r = {}
@@ -430,7 +454,8 @@ export function stackGroup(itemsDimensions, isGroupStacked, lineHeight, groupTop
430454
itemsDimensions,
431455
groupHeight,
432456
groupTop,
433-
itemIndex
457+
itemIndex,
458+
collision
434459
)
435460
} else {
436461
r = groupNoStack(lineHeight, itemsDimensions[itemIndex], groupHeight, groupTop)

0 commit comments

Comments
 (0)