[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 ...@@ -95,6 +95,7 @@ data TimeUnit
| Day TimeUnitCriteria | Day TimeUnitCriteria
| Hour TimeUnitCriteria | Hour TimeUnitCriteria
| Minute TimeUnitCriteria | Minute TimeUnitCriteria
| Second TimeUnitCriteria
derive instance Generic TimeUnit _ derive instance Generic TimeUnit _
derive instance Eq TimeUnit derive instance Eq TimeUnit
...@@ -113,6 +114,7 @@ instance JSON.WriteForeign TimeUnit where ...@@ -113,6 +114,7 @@ instance JSON.WriteForeign TimeUnit where
Day (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseDay) o Day (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseDay) o
Hour (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseHour) o Hour (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseHour) o
Minute (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseMinute) o Minute (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseMinute) o
Second (TimeUnitCriteria o) -> (JSON.writeImpl <<< parseSecond) o
where where
parseEpoch = parseEpoch =
Record.rename Record.rename
...@@ -205,6 +207,19 @@ instance JSON.WriteForeign TimeUnit where ...@@ -205,6 +207,19 @@ instance JSON.WriteForeign TimeUnit where
>>> Record.insert >>> Record.insert
(Proxy :: Proxy "tag") (Proxy :: Proxy "tag")
"Minute" "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 data ReflexiveTimeUnit
= Epoch_ = Epoch_
...@@ -214,6 +229,7 @@ data ReflexiveTimeUnit ...@@ -214,6 +229,7 @@ data ReflexiveTimeUnit
| Day_ | Day_
| Hour_ | Hour_
| Minute_ | Minute_
| Second_
derive instance Generic ReflexiveTimeUnit _ derive instance Generic ReflexiveTimeUnit _
derive instance Eq ReflexiveTimeUnit derive instance Eq ReflexiveTimeUnit
...@@ -230,6 +246,7 @@ instance Read ReflexiveTimeUnit where ...@@ -230,6 +246,7 @@ instance Read ReflexiveTimeUnit where
"Day_" -> Just Day_ "Day_" -> Just Day_
"Hour_" -> Just Hour_ "Hour_" -> Just Hour_
"Minute_" -> Just Minute_ "Minute_" -> Just Minute_
"Second_" -> Just Second_
_ -> Nothing _ -> Nothing
newtype TimeUnitCriteria = TimeUnitCriteria newtype TimeUnitCriteria = TimeUnitCriteria
...@@ -338,6 +355,7 @@ toReflexiveTimeUnit (Week _) = Week_ ...@@ -338,6 +355,7 @@ toReflexiveTimeUnit (Week _) = Week_
toReflexiveTimeUnit (Day _) = Day_ toReflexiveTimeUnit (Day _) = Day_
toReflexiveTimeUnit (Hour _) = Hour_ toReflexiveTimeUnit (Hour _) = Hour_
toReflexiveTimeUnit (Minute _) = Minute_ toReflexiveTimeUnit (Minute _) = Minute_
toReflexiveTimeUnit (Second _) = Second_
fromReflexiveTimeUnit :: ReflexiveTimeUnit -> TimeUnitCriteria -> TimeUnit fromReflexiveTimeUnit :: ReflexiveTimeUnit -> TimeUnitCriteria -> TimeUnit
fromReflexiveTimeUnit Epoch_ c = Epoch c fromReflexiveTimeUnit Epoch_ c = Epoch c
...@@ -347,6 +365,7 @@ fromReflexiveTimeUnit Week_ c = Week c ...@@ -347,6 +365,7 @@ fromReflexiveTimeUnit Week_ c = Week c
fromReflexiveTimeUnit Day_ c = Day c fromReflexiveTimeUnit Day_ c = Day c
fromReflexiveTimeUnit Hour_ c = Hour c fromReflexiveTimeUnit Hour_ c = Hour c
fromReflexiveTimeUnit Minute_ c = Minute c fromReflexiveTimeUnit Minute_ c = Minute c
fromReflexiveTimeUnit Second_ c = Second c
extractCriteria :: TimeUnit -> TimeUnitCriteria extractCriteria :: TimeUnit -> TimeUnitCriteria
extractCriteria (Epoch (o :: TimeUnitCriteria)) = o extractCriteria (Epoch (o :: TimeUnitCriteria)) = o
...@@ -356,6 +375,7 @@ extractCriteria (Week (o :: TimeUnitCriteria)) = o ...@@ -356,6 +375,7 @@ extractCriteria (Week (o :: TimeUnitCriteria)) = o
extractCriteria (Day (o :: TimeUnitCriteria)) = o extractCriteria (Day (o :: TimeUnitCriteria)) = o
extractCriteria (Hour (o :: TimeUnitCriteria)) = o extractCriteria (Hour (o :: TimeUnitCriteria)) = o
extractCriteria (Minute (o :: TimeUnitCriteria)) = o extractCriteria (Minute (o :: TimeUnitCriteria)) = o
extractCriteria (Second (o :: TimeUnitCriteria)) = o
toReflexiveClique :: Clique -> ReflexiveClique toReflexiveClique :: Clique -> ReflexiveClique
toReflexiveClique (FIS _) = FIS_ toReflexiveClique (FIS _) = FIS_
......
...@@ -201,6 +201,9 @@ component = R.hooksComponent "configForm" cpt ...@@ -201,6 +201,9 @@ component = R.hooksComponent "configForm" cpt
, H.option , H.option
{ value: show Minute_ } { value: show Minute_ }
[ H.text "Minute" ] [ H.text "Minute" ]
, H.option
{ value: show Second_ }
[ H.text "Second" ]
] ]
] ]
] ]
......
...@@ -373,6 +373,11 @@ data TimeUnit ...@@ -373,6 +373,11 @@ data TimeUnit
, _minute_step :: Int , _minute_step :: Int
, _minute_matchingFrame :: Int , _minute_matchingFrame :: Int
} }
| Second
{ _second_period :: Int
, _second_step :: Int
, _second_matchingFrame :: Int
}
derive instance Generic TimeUnit _ derive instance Generic TimeUnit _
derive instance Eq TimeUnit derive instance Eq TimeUnit
......
...@@ -185,3 +185,9 @@ detailsTimeUnit t = ...@@ -185,3 +185,9 @@ detailsTimeUnit t =
, detailsParams _minute_step "Step" , detailsParams _minute_step "Step"
, detailsParams _minute_matchingFrame "Matching frame" , 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) { ...@@ -67,6 +67,16 @@ export function minuteToDate(minutes) {
return d.add(minutes, 'minutes').toDate(); 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 * @name stringToDate
* @param {string} str * @param {string} str
......
...@@ -50,6 +50,7 @@ foreign import weekToDate :: String -> Date.Date ...@@ -50,6 +50,7 @@ foreign import weekToDate :: String -> Date.Date
foreign import dayToDate :: String -> Date.Date foreign import dayToDate :: String -> Date.Date
foreign import hourToDate :: String -> Date.Date foreign import hourToDate :: String -> Date.Date
foreign import minuteToDate :: String -> Date.Date foreign import minuteToDate :: String -> Date.Date
foreign import secondToDate :: String -> Date.Date
foreign import stringToDate :: String -> Date.Date foreign import stringToDate :: String -> Date.Date
foreign import utcStringToDate :: String -> Date.Date foreign import utcStringToDate :: String -> Date.Date
...@@ -476,6 +477,7 @@ parseNodeDate (Week _) _ s _ = weekToDate (s) ...@@ -476,6 +477,7 @@ parseNodeDate (Week _) _ s _ = weekToDate (s)
parseNodeDate (Day _) _ s _ = dayToDate (s) parseNodeDate (Day _) _ s _ = dayToDate (s)
parseNodeDate (Hour _) _ s _ = hourToDate (s) parseNodeDate (Hour _) _ s _ = hourToDate (s)
parseNodeDate (Minute _) _ s _ = minuteToDate (s) parseNodeDate (Minute _) _ s _ = minuteToDate (s)
parseNodeDate (Second _) _ s _ = secondToDate (s)
parseNodeDate tu _ s _ = unsafeCrashWith $ "[parseNodeDate] s = " <> s <> " unsupported for time unit = " <> show tu parseNodeDate tu _ s _ = unsafeCrashWith $ "[parseNodeDate] s = " <> s <> " unsupported for time unit = " <> show tu
parsePos :: String -> Tuple.Tuple Number Number 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