|
|
|
@ -1,13 +1,14 @@
|
|
|
|
|
### Countdown at different rates
|
|
|
|
|
|
|
|
|
|
```jsx
|
|
|
|
|
<util.ConversationContext theme={util.theme}>
|
|
|
|
|
<util.ConversationContext theme={util.theme} ios={util.ios}>
|
|
|
|
|
<li>
|
|
|
|
|
<Message
|
|
|
|
|
authorColor="cyan"
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="10 second timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 10 * 1000}
|
|
|
|
|
expirationLength={10 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 10 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -18,6 +19,7 @@
|
|
|
|
|
authorColor="cyan"
|
|
|
|
|
text="30 second timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 30 * 1000}
|
|
|
|
|
expirationLength={30 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 30 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -28,6 +30,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="1 minute timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 55 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 55 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -38,6 +41,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="5 minute timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 5 * 60 * 1000}
|
|
|
|
|
expirationLength={5 * 60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 5 * 60 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -48,13 +52,14 @@
|
|
|
|
|
### Timer calculations
|
|
|
|
|
|
|
|
|
|
```jsx
|
|
|
|
|
<util.ConversationContext theme={util.theme}>
|
|
|
|
|
<util.ConversationContext theme={util.theme} ios={util.ios}>
|
|
|
|
|
<li>
|
|
|
|
|
<Message
|
|
|
|
|
authorColor="cyan"
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="Full timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 60 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 60 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -65,6 +70,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="Full timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 60 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 60 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -75,6 +81,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="55 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 55 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 55 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -85,6 +92,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="55 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 55 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 55 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -95,6 +103,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="30 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 30 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 30 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -105,6 +114,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="30 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 30 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 30 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -115,6 +125,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="5 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 5 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 5 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -125,6 +136,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="5 timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 5 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 5 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -135,6 +147,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="Expired timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now()}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now()}
|
|
|
|
|
/>
|
|
|
|
@ -145,6 +158,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="Expired timer"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now()}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now()}
|
|
|
|
|
/>
|
|
|
|
@ -155,6 +169,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="Expiration is too far away"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 120 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 120 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -165,6 +180,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="Expiration is too far away"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() + 120 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() + 120 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -175,6 +191,7 @@
|
|
|
|
|
direction="incoming"
|
|
|
|
|
text="Already expired"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() - 20 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() - 20 * 1000}
|
|
|
|
|
/>
|
|
|
|
@ -185,6 +202,7 @@
|
|
|
|
|
status="delivered"
|
|
|
|
|
text="Already expired"
|
|
|
|
|
i18n={util.i18n}
|
|
|
|
|
timestamp={Date.now() - 20 * 1000}
|
|
|
|
|
expirationLength={60 * 1000}
|
|
|
|
|
expirationTimestamp={Date.now() - 20 * 1000}
|
|
|
|
|
/>
|
|
|
|
|