Skip to content

Commit

Permalink
Working date selection
Browse files Browse the repository at this point in the history
  • Loading branch information
RawToast committed Mar 30, 2018
1 parent f6efa94 commit e62d441
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 12 deletions.
4 changes: 3 additions & 1 deletion dokusho/src/app/Actions.re
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ module Actions = {
Client.userHistory(userId)
|> then_((serverResponse: serverResponse) => {
if(List.length(serverResponse.readingHistory.days) != 0) {
self.send(UpdateHistory(serverResponse.readingHistory.days))
self.send(
UpdateHistory(
serverResponse.readingHistory.days))
};
resolve(serverResponse);
}))
Expand Down
3 changes: 2 additions & 1 deletion dokusho/src/app/DateSelector.re
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ let component = ReasonReact.reducerComponent("DateSelector");

let getDate = Js.Date.make;

let make = (~onChangeSelect, _children) => {
let make = (~onChangeSelect, ~enabledDates, _children) => {
...component,
initialState: () => getDate(),
reducer: (state, _ext) =>
Expand All @@ -13,6 +13,7 @@ let make = (~onChangeSelect, _children) => {
<ReactToolbox.DatePicker
label="Date"
value=(`Date(state))
enabledDates=(enabledDates)
onChange=((date, _mouse) =>
{
onChangeSelect(date);
Expand Down
2 changes: 1 addition & 1 deletion dokusho/src/app/Day.re
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,5 @@ module Day {
|> List.map(i => float_of_int(i.value) *. PageType.pageScore(i.kind))
|> List.fold_left((a, b) => a +. b, 0.);

let entries = (d) => d.entries
let entries = (d: day) => d.entries
}
33 changes: 26 additions & 7 deletions dokusho/src/app/Dokusho.re
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,52 @@ open PageTypeSelection;
open Actions;
open Entries;
open Footer;
open Rationale;

module Dokusho {
let component = ReasonReact.reducerComponent("Dokusho");
let initState = () => {
readingData: { days : [Day.now()] },
selectedEntry: Book
selectedEntry: Book,
selectedDate: Js.Date.make()
};

let make = (_children) => {
...component,
initialState: () => initState(),
reducer: (action, { readingData, selectedEntry }) =>
reducer: (action, { readingData, selectedEntry, selectedDate }) =>
switch action {
| ChangeSelection(pageType) =>
ReasonReact.Update({readingData: readingData, selectedEntry: pageType});
ReasonReact.Update({readingData: readingData, selectedEntry: pageType, selectedDate: selectedDate});
| AddEntry(pageType, count) =>
Actions.addNewEntry(pageType, count);
| UpdateHistory(days) =>
ReasonReact.Update({readingData: {days: days}, selectedEntry: selectedEntry});
ReasonReact.Update({readingData: {days: days}, selectedEntry: selectedEntry, selectedDate: selectedDate});
| LoadUserData(userId) =>
Actions.loadUserData(userId);
| SelectDate(date) =>
ReasonReact.Update({readingData: readingData, selectedEntry: selectedEntry, selectedDate: date});
},
didMount: (_self) => {
Actions.loadUserData(testUser);
},
render: (self) => {
let pageCount = Day.pageCount(List.hd(self.state.readingData.days));
let calendarDate = Js.Date.fromFloat(Js.Date.utcWithYMDHMS(
~year=Js.Date.getFullYear(self.state.selectedDate),
~month=Js.Date.getMonth(self.state.selectedDate),
~date=Js.Date.getDate(self.state.selectedDate),
~hours=0.,
~minutes=0.,
~seconds=0.)());

let dateKey = Js.String.slice(0, 16, Js.Date.toISOString(calendarDate));

let day = RList.find(d => d.date == dateKey, self.state.readingData.days);
let pageCount = day |> Option.fmap(Day.pageCount) |> Option.default(0.);
let ents = day |> Option.fmap(d => d.entries) |> Option.default([]);

let dats = self.state.readingData.days |> List.map(d => Js.Date.fromString(d.date)) |> (ls) => [Js.Date.make(), ...ls] |> Array.of_list;

<div>
<div className="title">
(ReasonReact.stringToElement("Dokusho"))
Expand All @@ -43,9 +62,9 @@ module Dokusho {
/>
<PageTypeSelection onChangeSelect=(self.reduce(selected => ChangeSelection(selected))) />

<DateSelector onChangeSelect=((a) => ()) />
<DateSelector onChangeSelect=(self.reduce(dt => SelectDate(dt))) enabledDates=(dats) />

<Entries entries=(List.hd(self.state.readingData.days).entries) />
<Entries entries=(ents) />

<Footer pageCount=(pageCount) />
</div>
Expand Down
6 changes: 4 additions & 2 deletions dokusho/src/app/Types.re
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,16 @@ type readingHistory = {days: list(day)};

type mainState = {
readingData: readingHistory,
selectedEntry: pageType
selectedEntry: pageType,
selectedDate: Js.Date.t
};

type action =
| AddEntry(pageType, int)
| ChangeSelection(pageType)
| UpdateHistory(list(day))
| LoadUserData(string);
| LoadUserData(string)
| SelectDate(Js.Date.t);

module Decoders = {
let parsePageType = (asString:string) => {
Expand Down

0 comments on commit e62d441

Please sign in to comment.