Skip to content

Commit 52723bf

Browse files
authored
Cleanup timezone handling and groupBy logic (#148)
1 parent 2f83f82 commit 52723bf

3 files changed

Lines changed: 17 additions & 15 deletions

File tree

src/Events.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class Events
4848

4949
public static function defaultTimezone(): string
5050
{
51-
// return static::setting('timezone', config('statamic.system.display_timezone') ?? config('app.timezone', 'UTC'));
5251
return static::setting('timezone');
5352
}
5453

@@ -175,7 +174,7 @@ private function output(callable $type): EntryCollection|LengthAwarePaginator
175174
return $occurrence
176175
->setSupplement('start', $start)
177176
->setSupplement('end', $end)
178-
->setSupplement('spans_days', ! $start->isSameDay($end));
177+
->setSupplement('spanning', ! $start->isSameDay($end));
179178
});
180179
}
181180

src/Tags/Events.php

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,7 @@ public function calendar(): Collection
4747
$occurrences = $this
4848
->generator()
4949
->between(from: $from, to: $to)
50-
->groupBy(function (Entry $occurrence) {
51-
$periodInTimezone = CarbonPeriodImmutable::between(
52-
$occurrence->start->setTimezone($this->params->get('timezone') ?? Generator::defaultTimezone())->startOfDay(),
53-
$occurrence->end->setTimezone($this->params->get('timezone') ?? Generator::defaultTimezone())->endOfDay()
54-
);
55-
56-
return collect($periodInTimezone->toArray())
57-
->map(fn (CarbonImmutable $date) => $date->toDateString())
58-
->all();
59-
})
50+
->groupBy($this->spanningDays())
6051
->map(fn(EntryCollection $occurrences, string $date) => $this->day(date: $date, occurrences: $occurrences));
6152

6253
$days = $this->output($this->makeEmptyDates(from: $from, to: $to)->merge($occurrences)->values());
@@ -194,7 +185,7 @@ private function generator(): Generator
194185
value: $this->params->bool('collapse_multi_days'),
195186
callback: fn (Generator $generator) => $generator->collapseMultiDays()
196187
)->when(
197-
value: $this->params->get('timezone'),
188+
value: $this->params->get('timezone', Generator::defaultTimezone()),
198189
callback: fn (Generator $generator, string $tz) => $generator->timezone(timezone: $tz)
199190
);
200191
}
@@ -252,4 +243,16 @@ private function parseTermIds(string $key, array|Builder|string $terms): array
252243
->map(fn (Term|string $term) => $this->getTermId(handle: $handle, term: $term))
253244
->all();
254245
}
246+
247+
private function spanningDays(): \Closure
248+
{
249+
return function (Entry $occurrence) {
250+
$spanningDays = CarbonPeriodImmutable::between(
251+
$occurrence->start->startOfDay(),
252+
$occurrence->end->endOfDay()
253+
)->toArray();
254+
255+
return collect($spanningDays)->map(fn(CarbonImmutable $date) => $date->toDateString())->all();
256+
};
257+
}
255258
}

tests/Tags/EventsTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@
428428
->first()->start->timezone->getName()->toBe('America/Vancouver');
429429
});
430430

431-
it('sets "spans_days"', function () {
431+
it('sets "spanning"', function () {
432432
Carbon::setTestNow(now()->setTimeFromTimeString('10:00'));
433433

434434
Entry::make()
@@ -454,5 +454,5 @@
454454
$occurrences = $this->tag->between();
455455

456456
expect($occurrences)->toHaveCount(1)
457-
->first()->spans_days->toBeTrue();
457+
->first()->spanning->toBeTrue();
458458
});

0 commit comments

Comments
 (0)