[phylo] add "second" time unit to phylo

parent 9179b519
Pipeline #7847 passed with stages
in 28 minutes and 46 seconds
......@@ -95,6 +95,7 @@ data TimeUnit
| Day TimeUnitCriteria
| Hour TimeUnitCriteria
| Minute TimeUnitCriteria
| Second TimeUnitCriteria
derive instance Generic TimeUnit _
derive instance Eq TimeUnit
......@@ -113,6 +114,7 @@ instance JSON.WriteForeign TimeUnit where
Day (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseDay) o
Hour (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseHour) o
Minute (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseMinute) o
Second (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseSecond) o
where
parseEpoch =
Record.rename
......@@ -205,6 +207,19 @@ instance JSON.WriteForeign TimeUnit where
>>> Record.insert
(Proxy :: Proxy "tag")
"Minute"
parseSecond =
Record.rename
(Proxy :: Proxy "period")
(Proxy :: Proxy "_second_period")
>>> Record.rename
(Proxy :: Proxy "step")
(Proxy :: Proxy "_second_step")
>>> Record.rename
(Proxy :: Proxy "matchingFrame")
(Proxy :: Proxy "_second_matchingFrame")
>>> Record.insert
(Proxy :: Proxy "tag")
"Second"
data ReflexiveTimeUnit
= Epoch_
......@@ -214,6 +229,7 @@ data ReflexiveTimeUnit
| Day_
| Hour_
| Minute_
| Second_
derive instance Generic ReflexiveTimeUnit _
derive instance Eq ReflexiveTimeUnit
......@@ -230,6 +246,7 @@ instance Read ReflexiveTimeUnit where
"Day_" -> Just Day_
"Hour_" -> Just Hour_
"Minute_" -> Just Minute_
"Second_" -> Just Second_
_ -> Nothing
newtype TimeUnitCriteria = TimeUnitCriteria
......@@ -338,6 +355,7 @@ toReflexiveTimeUnit (Week _) = Week_
toReflexiveTimeUnit (Day _) = Day_
toReflexiveTimeUnit (Hour _) = Hour_
toReflexiveTimeUnit (Minute _) = Minute_
toReflexiveTimeUnit (Second _) = Second_
fromReflexiveTimeUnit :: ReflexiveTimeUnit -> TimeUnitCriteria -> TimeUnit
fromReflexiveTimeUnit Epoch_ c = Epoch c
......@@ -347,6 +365,7 @@ fromReflexiveTimeUnit Week_ c = Week c
fromReflexiveTimeUnit Day_ c = Day c
fromReflexiveTimeUnit Hour_ c = Hour c
fromReflexiveTimeUnit Minute_ c = Minute c
fromReflexiveTimeUnit Second_ c = Second c
extractCriteria :: TimeUnit -> TimeUnitCriteria
extractCriteria (Epoch (o :: TimeUnitCriteria)) = o
......@@ -356,6 +375,7 @@ extractCriteria (Week (o :: TimeUnitCriteria)) = o
extractCriteria (Day (o :: TimeUnitCriteria)) = o
extractCriteria (Hour (o :: TimeUnitCriteria)) = o
extractCriteria (Minute (o :: TimeUnitCriteria)) = o
extractCriteria (Second (o :: TimeUnitCriteria)) = o
toReflexiveClique :: Clique -> ReflexiveClique
toReflexiveClique (FIS _) = FIS_
......
......@@ -201,6 +201,9 @@ component = R.hooksComponent "configForm" cpt
, H.option
{ value: show Minute_ }
[ H.text "Minute" ]
, H.option
{ value: show Second_ }
[ H.text "Second" ]
]
]
]
......
......@@ -373,6 +373,11 @@ data TimeUnit
, _minute_step :: Int
, _minute_matchingFrame :: Int
}
| Second
{ _second_period :: Int
, _second_step :: Int
, _second_matchingFrame :: Int
}
derive instance Generic TimeUnit _
derive instance Eq TimeUnit
......
......@@ -185,3 +185,9 @@ detailsTimeUnit t =
, detailsParams _minute_step "Step"
, detailsParams _minute_matchingFrame "Matching frame"
]
parseTimeUnit (Second { _second_period, _second_step, _second_matchingFrame }) =
[ detailsParams "Second" "Time unit"
, detailsParams _second_period "Period"
, detailsParams _second_step "Step"
, detailsParams _second_matchingFrame "Matching frame"
]
......@@ -67,6 +67,16 @@ export function minuteToDate(minutes) {
return d.add(minutes, 'minutes').toDate();
}
/**
* @name secondToDate
* @param {string} year
* @returns {Date}
*/
export function secondToDate(seconds) {
var d = dayjs('0001-01-01T00:00:00Z');
return d.add(seconds, 'seconds').toDate();
}
/**
* @name stringToDate
* @param {string} str
......
......@@ -50,6 +50,7 @@ foreign import weekToDate :: String -> Date.Date
foreign import dayToDate :: String -> Date.Date
foreign import hourToDate :: String -> Date.Date
foreign import minuteToDate :: String -> Date.Date
foreign import secondToDate :: String -> Date.Date
foreign import stringToDate :: String -> Date.Date
foreign import utcStringToDate :: String -> Date.Date
......@@ -476,6 +477,7 @@ parseNodeDate (Week _) _ s _ = weekToDate (s)
parseNodeDate (Day _) _ s _ = dayToDate (s)
parseNodeDate (Hour _) _ s _ = hourToDate (s)
parseNodeDate (Minute _) _ s _ = minuteToDate (s)
parseNodeDate (Second _) _ s _ = secondToDate (s)
parseNodeDate tu _ s _ = unsafeCrashWith $ "[parseNodeDate] s = " <> s <> " unsupported for time unit = " <> show tu
parsePos :: String -> Tuple.Tuple Number Number
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment