convert Week interface to Record<T, U> type

pull/349/head
Rick Carlino 2017-07-21 16:00:18 -05:00
parent 07449575e6
commit 421d99ce41
3 changed files with 28 additions and 24 deletions

View File

@ -1,4 +1,4 @@
import { Week } from "./interfaces";
import { Week, DAYS } from "./interfaces";
import { Sequence } from "../../sequences/interfaces";
import { RegimenItem } from "../../regimens/interfaces";
@ -9,14 +9,10 @@ export function groupRegimenItemsByWeek(weeks: Week[], OFFSET: number,
const ONE_WEEK = 604800000;
const ONE_DAY = 86400000;
let keys = ["day1", "day2", "day3", "day4", "day5", "day6", "day7"];
return weeks
// Collect all of the true/false values in weekX.days. These indicate
// whether we should add a sequence on that day or not.
.map((week) =>
keys.map((key) =>
(week.days as { [day: string]: boolean })[key]))
.map((week) => DAYS.map((key) => week.days[key]))
// [[true,false,false,true] . . . ]
// Convert true values to an offset, in milliseconds from the
// start point.
@ -37,7 +33,7 @@ export function groupRegimenItemsByWeek(weeks: Week[], OFFSET: number,
// Sort the array. Using a comparator function because failing to do so
// results in funny execution times on day 0.
.sort(function (a, b) {
if (a < b) { return -1; };
if (a < b) { return -1; }
return (a > b) ? 1 : 0;
})
// Transform the sorted array of values into a regimenItem[] array.

View File

@ -16,16 +16,27 @@ export interface BulkEditorProps {
dispatch: Function;
}
type WeekDay =
| "day1"
| "day2"
| "day3"
| "day4"
| "day5"
| "day6"
| "day7";
export const DAYS: WeekDay[] = [
"day1",
"day2",
"day3",
"day4",
"day5",
"day6",
"day7"
];
export interface Week {
days: {
day1: boolean;
day2: boolean;
day3: boolean;
day4: boolean;
day5: boolean;
day6: boolean;
day7: boolean;
};
days: Record<WeekDay, boolean>;
}
export interface ToggleDayParams {

View File

@ -1,23 +1,20 @@
import * as React from "react";
import { WeekRowProps, DayProps } from "./interfaces";
import { WeekRowProps, DayProps, DAYS } from "./interfaces";
import { toggleDay } from "./actions";
import { t } from "i18next";
let DAYS = [1, 2, 3, 4, 5, 6, 7];
export function WeekRow({ index, dispatch, week }: WeekRowProps) {
return <div className="week-row">
<label className="week-label">{t("Week")} {index + 1}</label>
{
DAYS.map(function (day) {
DAYS.map(function (day, i) {
let id = `${index}-${day}`;
let lookup = `day${day}`;
return <Day day={day}
week={index}
return <Day day={i}
week={i}
dispatch={dispatch}
id={id}
key={id}
active={(week.days as { [day: string]: boolean })[lookup]} />;
active={week.days[day]} />;
})
}
</div>;