| 
									
										
										
										
											2023-01-03 11:55:46 -08:00
										 |  |  | // Copyright 2020 Signal Messenger, LLC
 | 
					
						
							| 
									
										
										
										
											2020-10-30 15:34:04 -05:00
										 |  |  | // SPDX-License-Identifier: AGPL-3.0-only
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | import * as React from 'react'; | 
					
						
							|  |  |  | import { boolean, date, select, text } from '@storybook/addon-knobs'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-17 20:30:08 -04:00
										 |  |  | import { setupI18n } from '../../util/setupI18n'; | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | import enMessages from '../../../_locales/en/messages.json'; | 
					
						
							| 
									
										
										
										
											2022-01-26 17:05:26 -06:00
										 |  |  | import type { Props } from './MessageTimestamp'; | 
					
						
							|  |  |  | import { MessageTimestamp } from './MessageTimestamp'; | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | const i18n = setupI18n('en', enMessages); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-06 20:48:02 -04:00
										 |  |  | export default { | 
					
						
							|  |  |  |   title: 'Components/Conversation/MessageTimestamp', | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  | const { now } = Date; | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | const seconds = (n: number) => n * 1000; | 
					
						
							|  |  |  | const minutes = (n: number) => 60 * seconds(n); | 
					
						
							|  |  |  | const hours = (n: number) => 60 * minutes(n); | 
					
						
							|  |  |  | const days = (n: number) => 24 * hours(n); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const get1201 = () => { | 
					
						
							|  |  |  |   const d = new Date(); | 
					
						
							|  |  |  |   d.setHours(0, 1, 0, 0); | 
					
						
							|  |  |  |   return d.getTime(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const times = (): Array<[string, number]> => [ | 
					
						
							|  |  |  |   ['500ms ago', now() - seconds(0.5)], | 
					
						
							|  |  |  |   ['30s ago', now() - seconds(30)], | 
					
						
							|  |  |  |   ['1m ago', now() - minutes(1)], | 
					
						
							|  |  |  |   ['30m ago', now() - minutes(30)], | 
					
						
							|  |  |  |   ['45m ago', now() - minutes(45)], | 
					
						
							|  |  |  |   ['1h ago', now() - hours(1)], | 
					
						
							|  |  |  |   ['12:01am today', get1201()], | 
					
						
							|  |  |  |   ['24h ago', now() - hours(24)], | 
					
						
							|  |  |  |   ['7d ago', now() - days(7)], | 
					
						
							|  |  |  |   ['366d ago', now() - days(366)], | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const createProps = (overrideProps: Partial<Props> = {}): Props => ({ | 
					
						
							|  |  |  |   i18n, | 
					
						
							| 
									
										
										
										
											2022-03-03 22:35:59 -06:00
										 |  |  |   timestamp: overrideProps.timestamp || Date.now(), | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  |   module: text('module', ''), | 
					
						
							|  |  |  |   withImageNoCaption: boolean('withImageNoCaption', false), | 
					
						
							|  |  |  |   withSticker: boolean('withSticker', false), | 
					
						
							|  |  |  |   withTapToViewExpired: boolean('withTapToViewExpired', false), | 
					
						
							|  |  |  |   direction: | 
					
						
							|  |  |  |     select( | 
					
						
							|  |  |  |       'direction', | 
					
						
							|  |  |  |       { none: '', incoming: 'incoming', outgoing: 'outgoing' }, | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     ) || undefined, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const createTable = (overrideProps: Partial<Props> = {}) => ( | 
					
						
							|  |  |  |   <table cellPadding={5}> | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  |     <tbody> | 
					
						
							|  |  |  |       <tr> | 
					
						
							|  |  |  |         <th>Description</th> | 
					
						
							|  |  |  |         <th>Timestamp</th> | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  |       </tr> | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  |       {times().map(([description, timestamp]) => ( | 
					
						
							|  |  |  |         <tr key={timestamp}> | 
					
						
							|  |  |  |           <td>{description}</td> | 
					
						
							|  |  |  |           <td> | 
					
						
							| 
									
										
										
										
											2022-01-26 17:05:26 -06:00
										 |  |  |             <MessageTimestamp | 
					
						
							| 
									
										
										
										
											2020-09-14 12:51:27 -07:00
										 |  |  |               key={timestamp} | 
					
						
							|  |  |  |               {...createProps({ ...overrideProps, timestamp })} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           </td> | 
					
						
							|  |  |  |         </tr> | 
					
						
							|  |  |  |       ))} | 
					
						
							|  |  |  |     </tbody> | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  |   </table> | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-06 20:48:02 -04:00
										 |  |  | export const Normal = (): JSX.Element => { | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  |   return createTable(); | 
					
						
							| 
									
										
										
										
											2022-06-06 20:48:02 -04:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-17 16:45:19 -08:00
										 |  |  | export function Knobs(): JSX.Element { | 
					
						
							| 
									
										
										
										
											2020-08-26 14:08:22 -07:00
										 |  |  |   const props = createProps({ | 
					
						
							|  |  |  |     timestamp: date('timestamp', new Date()), | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-26 17:05:26 -06:00
										 |  |  |   return <MessageTimestamp {...props} />; | 
					
						
							| 
									
										
										
										
											2022-11-17 16:45:19 -08:00
										 |  |  | } |