Auto resolution date editable
This commit is contained in:
		
							parent
							
								
									9c6c082de7
								
							
						
					
					
						commit
						727cf5df66
					
				|  | @ -28,9 +28,8 @@ export type FullContract< | |||
|   isResolved: boolean | ||||
|   resolutionTime?: number // When the market is resolved
 | ||||
|   resolution?: string | ||||
|   automaticResolution: resolution | ||||
|   automaticResolutionTime?: number | ||||
| 
 | ||||
|   autoResolution: resolution | ||||
|   autoResolutionTime: number // When the market will be resolved automatically
 | ||||
|   closeEmailsSent?: number | ||||
| 
 | ||||
|   volume: number | ||||
|  |  | |||
|  | @ -24,8 +24,8 @@ export function getNewContract( | |||
|   ante: number, | ||||
|   closeTime: number, | ||||
|   extraTags: string[], | ||||
|   automaticResolution: resolution, | ||||
|   automaticResolutionTime: number, | ||||
|   autoResolution: resolution, | ||||
|   autoResolutionTime: number, | ||||
| 
 | ||||
|   // used for numeric markets
 | ||||
|   bucketCount: number, | ||||
|  | @ -62,8 +62,8 @@ export function getNewContract( | |||
|     isResolved: false, | ||||
|     createdTime: Date.now(), | ||||
|     closeTime, | ||||
|     automaticResolution, | ||||
|     automaticResolutionTime, | ||||
|     autoResolution, | ||||
|     autoResolutionTime, | ||||
| 
 | ||||
|     volume: 0, | ||||
|     volume24Hours: 0, | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ service cloud.firestore { | |||
|     match /contracts/{contractId} { | ||||
|       allow read; | ||||
|       allow update: if request.resource.data.diff(resource.data).affectedKeys() | ||||
|         .hasOnly(['description', 'closeTime', 'tags', 'lowercaseTags']); | ||||
|         .hasOnly(['description', 'closeTime', 'tags', 'lowercaseTags', 'autoResolutionTime']); | ||||
|       allow update: if isAdmin(); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -67,8 +67,8 @@ export const createContract = newEndpoint(['POST'], async (req, [user, _]) => { | |||
|     ;({ initialProb } = validate(binarySchema, req.body))  // leading ; intentional: see above
 | ||||
|   } | ||||
| 
 | ||||
|   const automaticResolution = outcomeType == 'BINARY' ? 'MKT' : 'CANCEL' | ||||
|   const automaticResolutionTime = closeTime.setDate(closeTime.getDate() + 7) | ||||
|   const autoResolution = outcomeType == 'BINARY' ? 'MKT' : 'CANCEL' | ||||
|   const autoResolutionTime = closeTime.setDate(closeTime.getDate() + 7) | ||||
| 
 | ||||
|   // Uses utc time on server:
 | ||||
|   const today = new Date() | ||||
|  | @ -109,8 +109,8 @@ export const createContract = newEndpoint(['POST'], async (req, [user, _]) => { | |||
|     ante, | ||||
|     closeTime.getTime(), | ||||
|     tags ?? [], | ||||
|     automaticResolution, | ||||
|     automaticResolutionTime, | ||||
|     autoResolution, | ||||
|     autoResolutionTime, | ||||
|     NUMERIC_BUCKET_COUNT, | ||||
|     min ?? 0, | ||||
|     max ?? 0 | ||||
|  |  | |||
|  | @ -109,7 +109,7 @@ export function ContractDetails(props: { | |||
|   disabled?: boolean | ||||
| }) { | ||||
|   const { contract, bets, isCreator, disabled } = props | ||||
|   const { closeTime, automaticResolutionTime, creatorName, creatorUsername } = contract | ||||
|   const { closeTime, autoResolutionTime, creatorName, creatorUsername } = contract | ||||
|   const { volumeLabel, resolvedDate } = contractMetrics(contract) | ||||
| 
 | ||||
|   return ( | ||||
|  | @ -157,7 +157,6 @@ export function ContractDetails(props: { | |||
|               {/* {' - '}{' '} */} | ||||
|               <EditableCloseDate | ||||
|                 closeTime={closeTime} | ||||
|                 resolveTime={automaticResolutionTime} | ||||
|                 contract={contract} | ||||
|                 isCreator={isCreator ?? false} | ||||
|               /> | ||||
|  | @ -197,11 +196,10 @@ export function contractTextDetails(contract: Contract) { | |||
| 
 | ||||
| function EditableCloseDate(props: { | ||||
|   closeTime: number | ||||
|   resolveTime: number | undefined | ||||
|   contract: Contract | ||||
|   isCreator: boolean | ||||
| }) { | ||||
|   const { closeTime, resolveTime, contract, isCreator } = props | ||||
|   const { closeTime, contract, isCreator } = props | ||||
| 
 | ||||
|   const [isEditingCloseTime, setIsEditingCloseTime] = useState(false) | ||||
|   const [closeDate, setCloseDate] = useState( | ||||
|  | @ -242,30 +240,15 @@ function EditableCloseDate(props: { | |||
|           /> | ||||
|         </div> | ||||
|       ) : ( | ||||
|         <> | ||||
|           <DateTimeTooltip | ||||
|             text={closeTime > Date.now() ? 'Trading ends:' : 'Trading ended:'} | ||||
|             time={closeTime} | ||||
|           > | ||||
|             {isSameYear | ||||
|               ? dayjs(closeTime).format('MMM D') | ||||
|               : dayjs(closeTime).format('MMM D, YYYY')} | ||||
|             {isSameDay && <> ({fromNow(closeTime)})</>} | ||||
|           </DateTimeTooltip> | ||||
|           {resolveTime && ( | ||||
|             <DateTimeTooltip | ||||
|               text={resolveTime > Date.now() ? 'Market resolves as \'MKT\':' : ''} | ||||
|               time={resolveTime} | ||||
|             > | ||||
|               {"/ "} | ||||
|               {isSameYear | ||||
|                 ? dayjs(resolveTime).format('MMM D') | ||||
|                 : dayjs(resolveTime).format('MMM D, YYYY')} | ||||
|               {isSameDay && <> ({fromNow(resolveTime)})</>} | ||||
|               {": 'MKT'"} | ||||
|             </DateTimeTooltip> | ||||
|             )} | ||||
|       </> | ||||
|         <DateTimeTooltip | ||||
|           text={closeTime > Date.now() ? 'Trading ends:' : 'Trading ended:'} | ||||
|           time={closeTime} | ||||
|         > | ||||
|           {isSameYear | ||||
|             ? dayjs(closeTime).format('MMM D') | ||||
|             : dayjs(closeTime).format('MMM D, YYYY')} | ||||
|           {isSameDay && <> ({fromNow(closeTime)})</>} | ||||
|         </DateTimeTooltip> | ||||
|       )} | ||||
| 
 | ||||
|       {isCreator && | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ export function ContractInfoDialog(props: { contract: Contract; bets: Bet[] }) { | |||
| 
 | ||||
|   const formatTime = (dt: number) => dayjs(dt).format('MMM DD, YYYY hh:mm a z') | ||||
| 
 | ||||
|   const { createdTime, closeTime, resolutionTime } = contract | ||||
|   const { createdTime, closeTime, resolutionTime, autoResolutionTime, autoResolution } = contract | ||||
|   const tradersCount = uniqBy(bets, 'userId').length | ||||
| 
 | ||||
|   return ( | ||||
|  | @ -81,6 +81,19 @@ export function ContractInfoDialog(props: { contract: Contract; bets: Bet[] }) { | |||
|                 </tr> | ||||
|               )} | ||||
| 
 | ||||
|               {autoResolutionTime && autoResolution && ( | ||||
|                 <> | ||||
|                   <tr> | ||||
|                     <td>Automatic resolution</td> | ||||
|                     <td>{formatTime(autoResolutionTime)}</td> | ||||
|                   </tr> | ||||
|                   <tr> | ||||
|                   <td>Default resolution</td> | ||||
|                   <td>{autoResolution}</td> | ||||
|                 </tr> | ||||
|                 </> | ||||
|               )} | ||||
| 
 | ||||
|               {resolutionTime && ( | ||||
|                 <tr> | ||||
|                   <td>Market resolved</td> | ||||
|  |  | |||
|  | @ -42,10 +42,10 @@ export function contractUrl(contract: Contract) { | |||
| } | ||||
| 
 | ||||
| export function contractMetrics(contract: Contract) { | ||||
|   const { createdTime, resolutionTime, isResolved, automaticResolutionTime } = contract | ||||
|   const { createdTime, resolutionTime, isResolved, autoResolutionTime } = contract | ||||
| 
 | ||||
|   const createdDate = dayjs(createdTime).format('MMM D') | ||||
|   const automaticResolutionDate = dayjs(automaticResolutionTime).format('MMM D') | ||||
|   const autoResolutionDate = dayjs(autoResolutionTime).format('MMM D') | ||||
| 
 | ||||
|   const resolvedDate = isResolved | ||||
|     ? dayjs(resolutionTime).format('MMM D') | ||||
|  | @ -53,7 +53,7 @@ export function contractMetrics(contract: Contract) { | |||
| 
 | ||||
|   const volumeLabel = `${formatMoney(contract.volume)} bet` | ||||
| 
 | ||||
|   return { volumeLabel, createdDate, automaticResolutionDate, resolvedDate } | ||||
|   return { volumeLabel, createdDate, autoResolutionDate, resolvedDate } | ||||
| } | ||||
| 
 | ||||
| export function contractPool(contract: Contract) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user