@@ -22,6 +22,11 @@ module TzBot.Render
22
22
23
23
-- * General template
24
24
, renderTemplate
25
+
26
+ -- * Flags
27
+ , SenderFlag
28
+ , asForSenderS
29
+ , asForOthersS
25
30
) where
26
31
27
32
import Universum
@@ -38,7 +43,7 @@ import Data.Time.Zones.All (TZLabel)
38
43
import Text.Interpolation.Nyan (int , rmode' )
39
44
40
45
import TzBot.Instances ()
41
- import TzBot.Slack.API (Mrkdwn (Mrkdwn ), PlainText ( .. ), User (uTz ))
46
+ import TzBot.Slack.API (Mrkdwn (Mrkdwn ), User (uTz ))
42
47
import TzBot.Slack.API.Block
43
48
import TzBot.TimeReference
44
49
import TzBot.Util
@@ -66,10 +71,20 @@ type TranslationPairs = NE.NonEmpty TranslationPair
66
71
67
72
newtype Template = Template { unTemplate :: NE. NonEmpty EitherTemplateUnit }
68
73
69
- chooseNote :: Bool -> TranslationPair -> Maybe Text
70
- chooseNote sender = if sender then tuNoteForSender else tuNoteForOthers
74
+ --------
75
+ -- Notes
76
+ -- | Used for choosing between two notes
77
+ newtype SenderFlag = SenderFlag Bool
78
+
79
+ asForSenderS , asForOthersS :: SenderFlag
80
+ asForSenderS = SenderFlag True
81
+ asForOthersS = SenderFlag False
82
+
83
+ chooseNote :: SenderFlag -> TranslationPair -> Maybe Text
84
+ chooseNote (SenderFlag sender) = if sender then tuNoteForSender else tuNoteForOthers
71
85
72
- concatTranslationPair :: Bool -> TranslationPair -> Builder
86
+ --------
87
+ concatTranslationPair :: SenderFlag -> TranslationPair -> Builder
73
88
concatTranslationPair sender t@ TranslationPair {.. } = do
74
89
let rightNote = chooseNote sender t
75
90
let note = maybe " " ((" \n " <> ) . fromText) rightNote
@@ -89,33 +104,31 @@ noRefsFoundMsg = "No time references found."
89
104
90
105
-- Render text
91
106
renderErrorsForSender :: Template -> Maybe Text
92
- renderErrorsForSender template = do
93
- let sender = True
94
- joinTranslationPairs sender <$> renderErrorsForSenderTP template
107
+ renderErrorsForSender template =
108
+ joinTranslationPairs asForSenderS <$> renderErrorsForSenderTP template
95
109
96
110
renderAllForOthers :: User -> Template -> Text
97
- renderAllForOthers user = do
98
- let sender = False
99
- joinTranslationPairs sender . renderAllForOthersTP user
111
+ renderAllForOthers user =
112
+ joinTranslationPairs asForOthersS . renderAllForOthersTP user
100
113
101
- joinTranslationPairs :: Bool -> TranslationPairs -> Text
114
+ joinTranslationPairs :: SenderFlag -> TranslationPairs -> Text
102
115
joinTranslationPairs sender =
103
116
T. toStrict . toLazyText . fold . NE. toList
104
117
. NE. map ((<> singleton ' \n ' ) . concatTranslationPair sender)
105
118
106
119
-- Render Slack block
107
- renderSlackBlocks :: Bool -> Maybe TranslationPairs -> [Block ]
120
+ renderSlackBlocks :: SenderFlag -> Maybe TranslationPairs -> [Block ]
108
121
renderSlackBlocks forSender =
109
122
maybe [noRefsFoundSection]
110
123
(intercalate [BDivider divider] . NE. toList . NE. map mkTranslationBlocks)
111
124
where
112
- noRefsFoundSection = BSection $ textSection ( PlainText noRefsFoundMsg) Nothing
125
+ noRefsFoundSection = BSection $ markdownSection $ Mrkdwn noRefsFoundMsg
113
126
mkTranslationBlocks :: TranslationPair -> [Block ]
114
127
mkTranslationBlocks timeRef = do
115
- let t = (PlainText $ tuTimeRef timeRef, PlainText $ tuTranslation timeRef)
128
+ let t = (Mrkdwn $ tuTimeRef timeRef, Mrkdwn $ tuTranslation timeRef)
116
129
mbNote = chooseNote forSender timeRef
117
- translationBlock = BSection $ fieldsSection Nothing Nothing $ NE. singleton t
118
- mkNoteBlock note = BSection $ markdownSection (Mrkdwn note) Nothing
130
+ translationBlock = BSection $ fieldsSection Nothing $ NE. singleton t
131
+ mkNoteBlock note = BSection $ markdownSection (Mrkdwn note)
119
132
withMaybe mbNote [translationBlock] $ \ note -> [translationBlock, mkNoteBlock note]
120
133
121
134
renderTemplate :: UTCTime -> User -> NE. NonEmpty TimeReference -> Template
@@ -132,7 +145,7 @@ renderEphemeralMessageTranslationPair
132
145
-> (TimeReference , TimeReferenceToUTCResult )
133
146
-> EitherTemplateUnit
134
147
renderEphemeralMessageTranslationPair now sender (timeRef, result) = case result of
135
- TRTUSuccess utcTime _offsetInfo -> do
148
+ TRTUSuccess ( TimeRefSuccess utcTime _offsetInfo) -> do
136
149
let mbSenderTimeZone =
137
150
guard (isNothing $ trLocationRef timeRef)
138
151
$> (uTz sender) :: Maybe TZLabel
@@ -145,7 +158,7 @@ renderEphemeralMessageTranslationPair now sender (timeRef, result) = case result
145
158
[int ||#{renderedUserTime} in #{userTzLabel}|]
146
159
Nothing
147
160
Nothing
148
- TRTUAmbiguous implicitSenderTimezone tzLabel -> do
161
+ TRTUAmbiguous ( TimeShiftErrorInfo implicitSenderTimezone tzLabel) -> do
149
162
let shownTZ = shownTimezone implicitSenderTimezone tzLabel
150
163
Left $ TranslationPair
151
164
{ tuTimeRef = trText timeRef
@@ -159,7 +172,7 @@ renderEphemeralMessageTranslationPair now sender (timeRef, result) = case result
159
172
time, and this particular timestamp can be possible with \
160
173
different offsets._|]
161
174
}
162
- TRTUInvalid implicitSenderTimezone tzLabel -> do
175
+ TRTUInvalid ( TimeShiftErrorInfo implicitSenderTimezone tzLabel) -> do
163
176
let shownTZ = shownTimezone implicitSenderTimezone tzLabel
164
177
Left $ TranslationPair
165
178
{ tuTimeRef = trText timeRef
0 commit comments