show past dates in event date list
This commit is contained in:
@ -12,7 +12,6 @@ import styles from "./dateList.module.scss";
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
const DateListItem = ({ occurrence }: { occurrence: EventOccurrence }) => {
|
const DateListItem = ({ occurrence }: { occurrence: EventOccurrence }) => {
|
||||||
const dateFormat = "EEEE d. MMMM yyyy";
|
|
||||||
const timeFormat = "'kl.' HH:mm";
|
const timeFormat = "'kl.' HH:mm";
|
||||||
const wholeCastle = occurrence.venue?.slug === "hele-huset";
|
const wholeCastle = occurrence.venue?.slug === "hele-huset";
|
||||||
|
|
||||||
@ -43,24 +42,26 @@ const DateListItem = ({ occurrence }: { occurrence: EventOccurrence }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const DateList = ({ event }: { event: EventFragment }) => {
|
export const DateList = ({ event }: { event: EventFragment }) => {
|
||||||
const [showPast, setShowPast] = useState(false);
|
|
||||||
|
|
||||||
const futureOccurrences = event.occurrences
|
|
||||||
.filter((occurrence) => isTodayOrFuture(occurrence.start))
|
|
||||||
.sort((a, b) => compareDates(a.start, b.start));
|
|
||||||
const pastOccurrences = event.occurrences
|
|
||||||
.filter((occurrence) => !isTodayOrFuture(occurrence.start))
|
|
||||||
.sort((a, b) => compareDates(a.start, b.start));
|
|
||||||
|
|
||||||
// TODO: events occurring once
|
|
||||||
// TODO: end date/time?
|
|
||||||
// TODO: past occurrences?
|
|
||||||
|
|
||||||
const [showAllDates, setShowAllDates] = useState(false);
|
const [showAllDates, setShowAllDates] = useState(false);
|
||||||
function toggleDates() {
|
function toggleDates() {
|
||||||
setShowAllDates(!showAllDates);
|
setShowAllDates(!showAllDates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const oneOff = event.occurrences.length === 1;
|
||||||
|
const showToggle = event.occurrences.length > 4;
|
||||||
|
const futureOccurrences = event.occurrences
|
||||||
|
.filter((occurrence) => isTodayOrFuture(occurrence.start))
|
||||||
|
.sort((a, b) => compareDates(a.start, b.start));
|
||||||
|
|
||||||
|
let visibleOccurrences = [];
|
||||||
|
if (oneOff || showAllDates || event.occurrences.length <= 4) {
|
||||||
|
visibleOccurrences = event.occurrences;
|
||||||
|
} else {
|
||||||
|
visibleOccurrences = futureOccurrences.slice(0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: end date/time?
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.dateWrapper}>
|
<div className={styles.dateWrapper}>
|
||||||
<div className={`${styles.header} suphead`}>
|
<div className={`${styles.header} suphead`}>
|
||||||
@ -69,42 +70,23 @@ export const DateList = ({ event }: { event: EventFragment }) => {
|
|||||||
<span>Sted</span>
|
<span>Sted</span>
|
||||||
</div>
|
</div>
|
||||||
<ul className={styles.dateList} data-showall={showAllDates}>
|
<ul className={styles.dateList} data-showall={showAllDates}>
|
||||||
{futureOccurrences.map((occurrence) => (
|
{visibleOccurrences.map((occurrence) => (
|
||||||
<DateListItem
|
<DateListItem
|
||||||
key={occurrence.id}
|
key={occurrence.id}
|
||||||
occurrence={occurrence as EventOccurrence}
|
occurrence={occurrence as EventOccurrence}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
{futureOccurrences.length > 4 && (
|
{showToggle && (
|
||||||
<div className={styles.showMore}>
|
<div className={styles.showMore}>
|
||||||
<button onClick={() => toggleDates()} className="button tertiary">
|
<button onClick={() => toggleDates()} className="button tertiary">
|
||||||
{!showAllDates && (
|
{!showAllDates && (
|
||||||
<span>Vis alle kommende datoer ({futureOccurrences.length})</span>
|
<span>Vis alle datoer ({event.occurrences.length})</span>
|
||||||
)}
|
)}
|
||||||
{showAllDates && <span>Vis færre datoer</span>}
|
{showAllDates && <span>Vis færre datoer</span>}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{/* <div onClick={() => setShowPast(!showPast)}>
|
|
||||||
{showPast ? "Skjul" : "Vis"} tidligere
|
|
||||||
</div>
|
|
||||||
{showPast && (
|
|
||||||
<>
|
|
||||||
<h2 className="circlehead">
|
|
||||||
<span className="circle"></span>
|
|
||||||
<span className="circle"></span>
|
|
||||||
<span className="circle"></span>
|
|
||||||
Tidligere datoer{" "}
|
|
||||||
<span className="number">({pastOccurrences.length})</span>
|
|
||||||
</h2>
|
|
||||||
<ul className={styles.dateList}>
|
|
||||||
{pastOccurrences.map((occurrence) => (
|
|
||||||
<DateListItem key={occurrence.id} occurrence={occurrence} />
|
|
||||||
))}
|
|
||||||
</ul>
|
|
||||||
</>
|
|
||||||
)} */}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -42,8 +42,8 @@ export function formatExtendedDateTime(
|
|||||||
// year included if not current year
|
// year included if not current year
|
||||||
const parsed = toLocalTime(date);
|
const parsed = toLocalTime(date);
|
||||||
const timePart = dateOnly ? "" : " 'kl.' HH:mm";
|
const timePart = dateOnly ? "" : " 'kl.' HH:mm";
|
||||||
const isCurrentYear = parsed.getFullYear === new Date().getFullYear;
|
const isCurrentYear = parsed.getFullYear() === new Date().getFullYear();
|
||||||
const yearPart = isCurrentYear && !alwaysIncludeYear ? "" : " yyyy";
|
const yearPart = (!isCurrentYear || alwaysIncludeYear) ? " yyyy" : "";
|
||||||
return formatDate(parsed, `EEEE d. MMMM${yearPart}${timePart}`);
|
return formatDate(parsed, `EEEE d. MMMM${yearPart}${timePart}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user