Folder restructuring; grouped view logic together

This commit is contained in:
Franco Speziali 2023-05-25 15:37:23 +02:00
parent b18c50c205
commit ea994df145
19 changed files with 80 additions and 71 deletions

View File

@ -1,5 +1,5 @@
import { Event } from "../../../types"; import { Event } from "../../types";
import { generateRandomColor } from "../../../utilities"; import { generateRandomColor } from "../../utilities";
export default abstract class GroupRenderer { export default abstract class GroupRenderer {
protected container: HTMLDivElement; protected container: HTMLDivElement;

View File

@ -1,5 +1,5 @@
import EventGrouping from "../../EventGrouping/EventGrouping"; import EventGrouping from "./EventGrouping";
import { Event } from "../../../types"; import { Event } from "../../types";
export default abstract class Renderer { export default abstract class Renderer {
protected abstract renderGroups( protected abstract renderGroups(

View File

@ -8,6 +8,15 @@ export default class Events {
this.sortedEvents = this.processEvents(events); this.sortedEvents = this.processEvents(events);
} }
/**
* processEvents
*
* Drops invalid events from dataset
* Sorts events by date, in ascending order
*
* @param events: Event[]
* @private
*/
private processEvents(events: Event[]): Event[] { private processEvents(events: Event[]): Event[] {
const _events = events.reduce((collection, event) => { const _events = events.reduce((collection, event) => {
// only include valid events // only include valid events

View File

@ -1,5 +1,5 @@
import EventGrouping from "./EventGrouping"; import EventGrouping from "../../Abstract/EventGrouping";
import { Event, Groups } from "../../types"; import { Event, Groups } from "../../../types";
import { import {
add, add,
differenceInCalendarDays, differenceInCalendarDays,

View File

@ -1,9 +1,9 @@
import { Event } from "../../../types"; import { Event } from "../../../types";
import DayGrouping from "../../EventGrouping/DayGrouping"; import DayGrouping from "./DayGrouping";
import GroupRenderer from "../Abstract/GroupRenderer"; import GroupRenderer from "../../Abstract/GroupRenderer";
export default class GroupDayRenderer extends GroupRenderer { export default class DayRenderer extends GroupRenderer {
constructor(group: Event[], groupDate: Date, groupIndex: number) { constructor(group: Event[], groupDate: Date, groupIndex: number) {
super(group, groupDate, groupIndex); super(group, groupDate, groupIndex);

View File

@ -1,9 +1,9 @@
import { Event } from "../../../types"; import { Event } from "../../../types";
import DayGrouping from "../../EventGrouping/DayGrouping"; import DayGrouping from "./DayGrouping";
import Renderer from "../Abstract/Renderer"; import AbstractRenderer from "../../Abstract/Renderer";
import GroupDayRenderer from "./GroupDayRenderer"; import DayRenderer from "./DayRenderer";
export default class DayRenderer extends Renderer { export default class Renderer extends AbstractRenderer {
constructor(eventGrouping: DayGrouping) { constructor(eventGrouping: DayGrouping) {
super(eventGrouping); super(eventGrouping);
this.container.className += " scale-day"; this.container.className += " scale-day";
@ -14,6 +14,6 @@ export default class DayRenderer extends Renderer {
groupDate: Date, groupDate: Date,
groupIndex: number groupIndex: number
): HTMLDivElement { ): HTMLDivElement {
return new GroupDayRenderer(group, groupDate, groupIndex).render(); return new DayRenderer(group, groupDate, groupIndex).render();
} }
} }

View File

@ -1,5 +1,5 @@
import EventGrouping from "./EventGrouping"; import EventGrouping from "../../Abstract/EventGrouping";
import { Event, Groups } from "../../types"; import { Event, Groups } from "../../../types";
import { import {
add, add,
differenceInCalendarMonths, differenceInCalendarMonths,

View File

@ -1,9 +1,9 @@
import { Event } from "../../../types"; import { Event } from "../../../types";
import MonthGrouping from "../../EventGrouping/MonthGrouping"; import MonthGrouping from "./MonthGrouping";
import GroupRenderer from "../Abstract/GroupRenderer"; import GroupRenderer from "../../Abstract/GroupRenderer";
export default class GroupMonthRenderer extends GroupRenderer { export default class MonthRenderer extends GroupRenderer {
constructor(group: Event[], groupDate: Date, groupIndex: number) { constructor(group: Event[], groupDate: Date, groupIndex: number) {
super(group, groupDate, groupIndex); super(group, groupDate, groupIndex);

View File

@ -0,0 +1,19 @@
import { Event } from "../../../types";
import MonthGrouping from "./MonthGrouping";
import AbstractRenderer from "../../Abstract/Renderer";
import MonthRenderer from "./MonthRenderer";
export default class Renderer extends AbstractRenderer {
constructor(eventGrouping: MonthGrouping) {
super(eventGrouping);
this.container.className += " scale-month";
}
protected renderGroups(
group: Event[],
groupDate: Date,
groupIndex: number
): HTMLDivElement {
return new MonthRenderer(group, groupDate, groupIndex).render();
}
}

View File

@ -0,0 +1,19 @@
import { Event } from "../../../types";
import WeekGrouping from "./WeekGrouping";
import AbstractRenderer from "../../Abstract/Renderer";
import WeekRenderer from "./WeekRenderer";
export default class Renderer extends AbstractRenderer {
constructor(eventGrouping: WeekGrouping) {
super(eventGrouping);
this.container.className += " scale-week";
}
protected renderGroups(
group: Event[],
groupDate: Date,
groupIndex: number
): HTMLDivElement {
return new WeekRenderer(group, groupDate, groupIndex).render();
}
}

View File

@ -1,5 +1,5 @@
import EventGrouping from "./EventGrouping"; import EventGrouping from "../../Abstract/EventGrouping";
import { Event, Groups } from "../../types"; import { Event, Groups } from "../../../types";
import { import {
add, add,
differenceInCalendarWeeks, differenceInCalendarWeeks,

View File

@ -1,9 +1,9 @@
import { Event } from "../../../types"; import { Event } from "../../../types";
import WeekGrouping from "../../EventGrouping/WeekGrouping"; import WeekGrouping from "./WeekGrouping";
import GroupRenderer from "../Abstract/GroupRenderer"; import GroupRenderer from "../../Abstract/GroupRenderer";
export default class GroupWeekRenderer extends GroupRenderer { export default class WeekRenderer extends GroupRenderer {
constructor(group: Event[], groupDate: Date, groupIndex: number) { constructor(group: Event[], groupDate: Date, groupIndex: number) {
super(group, groupDate, groupIndex); super(group, groupDate, groupIndex);

View File

@ -1,19 +0,0 @@
import { Event } from "../../../types";
import MonthGrouping from "../../EventGrouping/MonthGrouping";
import Renderer from "../Abstract/Renderer";
import GroupMonthRenderer from "./GroupMonthRenderer";
export default class MonthRenderer extends Renderer {
constructor(eventGrouping: MonthGrouping) {
super(eventGrouping);
this.container.className += " scale-month";
}
protected renderGroups(
group: Event[],
groupDate: Date,
groupIndex: number
): HTMLDivElement {
return new GroupMonthRenderer(group, groupDate, groupIndex).render();
}
}

View File

@ -1,19 +0,0 @@
import { Event } from "../../../types";
import WeekGrouping from "../../EventGrouping/WeekGrouping";
import Renderer from "../Abstract/Renderer";
import GroupWeekRenderer from "./GroupWeekRenderer";
export default class WeekRenderer extends Renderer {
constructor(eventGrouping: WeekGrouping) {
super(eventGrouping);
this.container.className += " scale-week";
}
protected renderGroups(
group: Event[],
groupDate: Date,
groupIndex: number
): HTMLDivElement {
return new GroupWeekRenderer(group, groupDate, groupIndex).render();
}
}

View File

@ -1,11 +1,11 @@
import { GroupTypes } from "../types"; import { GroupTypes } from "../types";
import Events from "./Events/"; import Events from "./Events/";
import DayGrouping from "./EventGrouping/DayGrouping"; import DayGrouping from "./Group/Day/DayGrouping";
import MonthGrouping from "./EventGrouping/MonthGrouping"; import MonthGrouping from "./Group/Month/MonthGrouping";
import WeekGrouping from "./EventGrouping/MonthGrouping"; import WeekGrouping from "./Group/Month/MonthGrouping";
import DayRenderer from "./HtmlRenderer/Day"; import DayRenderer from "./Group/Day/Renderer";
import MonthRenderer from "./HtmlRenderer/Month"; import MonthRenderer from "./Group/Month/Renderer";
import WeekRenderer from "./HtmlRenderer/Week"; import WeekRenderer from "./Group/Week/Renderer";
export default class Calendar { export default class Calendar {
public readonly jsonContent: object; public readonly jsonContent: object;

View File

@ -1,5 +1,5 @@
const { GroupTypes } = require("../../../types"); const { GroupTypes } = require("../../../types");
const DayGrouping = require("../../EventGrouping/DayGrouping").default; const DayGrouping = require("../../Group/Day/DayGrouping").default;
const mockSortedEvents = require("./mockSortedEvents").default; const mockSortedEvents = require("./mockSortedEvents").default;
describe("groupEventsByDay should", () => { describe("groupEventsByDay should", () => {

View File

@ -1,5 +1,5 @@
const { GroupTypes } = require("../../../types"); const { GroupTypes } = require("../../../types");
const MonthGrouping = require("../../EventGrouping/MonthGrouping").default; const MonthGrouping = require("../../Group/Month/MonthGrouping").default;
const mockSortedEvents = require("./mockSortedEvents").default; const mockSortedEvents = require("./mockSortedEvents").default;
describe("groupEventsByMonth should", () => { describe("groupEventsByMonth should", () => {

View File

@ -1,5 +1,5 @@
const { GroupTypes } = require("../../../types"); const { GroupTypes } = require("../../../types");
const WeekGrouping = require("../../EventGrouping/WeekGrouping").default; const WeekGrouping = require("../../Group/Week/WeekGrouping").default;
const mockSortedEvents = require("./mockSortedEvents").default; const mockSortedEvents = require("./mockSortedEvents").default;
describe("groupEventsByWeek should", () => { describe("groupEventsByWeek should", () => {