From 3e744da4e682200c14918ed8223cab823775d378 Mon Sep 17 00:00:00 2001 From: trevor-anderson Date: Sun, 24 Mar 2024 11:25:27 -0400 Subject: [PATCH] fix: correct accum typings for parsers+reducers --- .../ItemDataParsers/ItemDataParser.ts | 8 ++++---- .../ItemDataParsers/ItemsPerMonthDataParser.ts | 5 ++++- .../ItemDataParsers/ItemsPerStatusDataParser.ts | 7 +++---- .../ItemDataParsers/ItemsStatisticsDataParser.ts | 2 +- .../ItemDataParsers/UpcomingEventsDataParser.ts | 2 +- .../DashboardDataContext/ItemsDataReducer.ts | 11 +++++++---- 6 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemDataParser.ts b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemDataParser.ts index 47499a6d..8c6a49d5 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemDataParser.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemDataParser.ts @@ -4,15 +4,15 @@ */ export interface ItemDataParser { initialDataAccum: TAccum; - dataAccumUpdater: DataParserAccumUpdater; + dataAccumUpdater: DataParserAccumUpdater; } export interface DataParserItem { [K: PropertyKey]: any; } -export interface DataParserAccum { - [K: string]: DataParserAccumValue; +export interface DataParserAccum { + [K: string]: any; } /** @@ -22,7 +22,7 @@ export interface DataParserAccum { * The generic _type_ parameter, `TItem`, specifies the type of the array items used * in the 2nd and 4th parameters of `Array.prototype.reduce`. */ -export type DataParserAccumUpdater = ( +export type DataParserAccumUpdater = ( accum: TAccum, item: TItem, index: number, diff --git a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerMonthDataParser.ts b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerMonthDataParser.ts index b192e8a7..a08c32a1 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerMonthDataParser.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerMonthDataParser.ts @@ -39,7 +39,10 @@ export class ItemsPerMonthDataParser // STATIC MEMBERS: static monthStartTimestamps: MonthStartTimestamps; static initialDataAccum: ItemsPerMonthDataParserAccum; - static dataAccumUpdater: DataParserAccumUpdater; + static dataAccumUpdater: DataParserAccumUpdater< + ItemsPerMonthDataParserItem, + ItemsPerMonthDataParserAccum + >; /** * Returns an integer timestamp equal to the first millisecond of the month of the diff --git a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerStatusDataParser.ts b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerStatusDataParser.ts index 9a5cc226..7d1f8b2a 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerStatusDataParser.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsPerStatusDataParser.ts @@ -15,20 +15,19 @@ export interface ItemsPerStatusDataParserAccum implements ItemDataParser> { initialDataAccum: ItemsPerStatusDataParserAccum; - dataAccumUpdater: DataParserAccumUpdater; + dataAccumUpdater: DataParserAccumUpdater>; constructor(itemStatuses: ReadonlyArray) { this.initialDataAccum = { STATUS_COUNTS: itemStatuses.reduce( (acc, status) => ({ ...acc, [status]: 0 }), - {} as ItemsPerStatusDataParserAccum["STATUS_COUNTS"] + {} as Record ), }; diff --git a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsStatisticsDataParser.ts b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsStatisticsDataParser.ts index 792ee881..ce5f50cf 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsStatisticsDataParser.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/ItemsStatisticsDataParser.ts @@ -33,7 +33,7 @@ export class ItemsStatisticsDataParser // Instance initialDataAccum is a reference to the static initialDataAccum initialDataAccum = ItemsStatisticsDataParser.initialDataAccum; - dataAccumUpdater: DataParserAccumUpdater; + dataAccumUpdater: DataParserAccumUpdater; constructor(getItemStat: GetItemStatFn) { this.initialDataAccum = { ...ItemsStatisticsDataParser.initialDataAccum }; diff --git a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/UpcomingEventsDataParser.ts b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/UpcomingEventsDataParser.ts index d192d3b6..9337ca79 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/UpcomingEventsDataParser.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemDataParsers/UpcomingEventsDataParser.ts @@ -33,7 +33,7 @@ export class UpcomingEventsDataParser private static now = dayjs(); initialDataAccum: UpcomingEventsDataParserAccum; - dataAccumUpdater: DataParserAccumUpdater; + dataAccumUpdater: DataParserAccumUpdater>; constructor( getItemEvents: GetItemEventsFn, diff --git a/src/pages/Dashboard/DashboardDataContext/ItemsDataReducer.ts b/src/pages/Dashboard/DashboardDataContext/ItemsDataReducer.ts index b81d2c5c..45dd4b2d 100644 --- a/src/pages/Dashboard/DashboardDataContext/ItemsDataReducer.ts +++ b/src/pages/Dashboard/DashboardDataContext/ItemsDataReducer.ts @@ -18,7 +18,7 @@ import type { ItemDataParser, DataParserItem, DataParserAccum } from "./ItemData */ export class ItemsDataReducer< TItem extends DataParserItem, - TDataParsers extends Array> + TDataParsers extends Array>, > { // INSTANCE MEMBERS readonly initialDataAccum: CombinedReducerAccum; @@ -34,7 +34,7 @@ export class ItemsDataReducer< // Update combinedInitialDataAccum combinedInitialDataAccum: { ...accum.combinedInitialDataAccum, - ...itemDataParser.initialDataAccum, + ...(itemDataParser.initialDataAccum as Record), }, // Update arrayOfDataAccumUpdaterFns arrayOfDataAccumUpdaterFns: [ @@ -53,7 +53,10 @@ export class ItemsDataReducer< return arrayOfItems.reduce((itemsDataAccum, item, index, itemsArray) => { // For each item, each accum-updater function is called arrayOfDataAccumUpdaterFns.forEach((dataAccumUpdater) => { - itemsDataAccum = dataAccumUpdater(itemsDataAccum, item, index, itemsArray); + // prettier-ignore + itemsDataAccum = dataAccumUpdater( + itemsDataAccum, item, index, itemsArray + ) as CombinedReducerAccum; }); return itemsDataAccum; }, structuredClone(this.initialDataAccum)); @@ -63,5 +66,5 @@ export class ItemsDataReducer< type CombinedReducerAccum< TItem extends DataParserItem, - TDataParsers extends Array> + TDataParsers extends Array>, > = Simplify>;