Append tags from market page
This commit is contained in:
		
							parent
							
								
									2e7a8210bb
								
							
						
					
					
						commit
						33c8fe2bc0
					
				|  | @ -21,7 +21,7 @@ service cloud.firestore { | ||||||
| 
 | 
 | ||||||
|     match /contracts/{contractId} { |     match /contracts/{contractId} { | ||||||
|       allow read; |       allow read; | ||||||
|       allow update: if resource.data.creatorId == request.auth.uid && request.resource.data.diff(resource.data).affectedKeys() |       allow update: if request.resource.data.diff(resource.data).affectedKeys() | ||||||
|         .hasOnly(['description', 'tags', 'lowercaseTags']); |         .hasOnly(['description', 'tags', 'lowercaseTags']); | ||||||
|       allow delete: if resource.data.creatorId == request.auth.uid; |       allow delete: if resource.data.creatorId == request.auth.uid; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -194,13 +194,6 @@ export function ContractDetails(props: { contract: Contract }) { | ||||||
|         <div className="">•</div> |         <div className="">•</div> | ||||||
|         <div className="whitespace-nowrap">{formatMoney(truePool)} pool</div> |         <div className="whitespace-nowrap">{formatMoney(truePool)} pool</div> | ||||||
|       </Row> |       </Row> | ||||||
| 
 |  | ||||||
|       {tags.length > 0 && ( |  | ||||||
|         <> |  | ||||||
|           <div className="hidden sm:block">•</div> |  | ||||||
|           <CompactTagsList tags={tags} /> |  | ||||||
|         </> |  | ||||||
|       )} |  | ||||||
|     </Col> |     </Col> | ||||||
|   ) |   ) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ import { ContractFeed } from './contract-feed' | ||||||
| import { TweetButton } from './tweet-button' | import { TweetButton } from './tweet-button' | ||||||
| import { Bet } from '../../common/bet' | import { Bet } from '../../common/bet' | ||||||
| import { Comment } from '../../common/comment' | import { Comment } from '../../common/comment' | ||||||
|  | import { TagsInput } from './tags-input' | ||||||
| 
 | 
 | ||||||
| export const ContractOverview = (props: { | export const ContractOverview = (props: { | ||||||
|   contract: Contract |   contract: Contract | ||||||
|  | @ -58,7 +59,6 @@ export const ContractOverview = (props: { | ||||||
|           /> |           /> | ||||||
| 
 | 
 | ||||||
|           <ContractDetails contract={contract} /> |           <ContractDetails contract={contract} /> | ||||||
|           <TweetButton className="self-end md:hidden" tweetText={tweetText} /> |  | ||||||
|         </Col> |         </Col> | ||||||
| 
 | 
 | ||||||
|         <Col className="hidden md:flex justify-between items-end"> |         <Col className="hidden md:flex justify-between items-end"> | ||||||
|  | @ -68,7 +68,6 @@ export const ContractOverview = (props: { | ||||||
|             probPercent={probPercent} |             probPercent={probPercent} | ||||||
|             large |             large | ||||||
|           /> |           /> | ||||||
|           <TweetButton className="mt-6" tweetText={tweetText} /> |  | ||||||
|         </Col> |         </Col> | ||||||
|       </Row> |       </Row> | ||||||
| 
 | 
 | ||||||
|  | @ -76,6 +75,11 @@ export const ContractOverview = (props: { | ||||||
| 
 | 
 | ||||||
|       <ContractProbGraph contract={contract} /> |       <ContractProbGraph contract={contract} /> | ||||||
| 
 | 
 | ||||||
|  |       <Row className="justify-between mt-6 ml-4 gap-4"> | ||||||
|  |         <TagsInput contract={contract} /> | ||||||
|  |         <TweetButton tweetText={tweetText} /> | ||||||
|  |       </Row> | ||||||
|  | 
 | ||||||
|       <Spacer h={12} /> |       <Spacer h={12} /> | ||||||
| 
 | 
 | ||||||
|       {/* Show a delete button for contracts without any trading */} |       {/* Show a delete button for contracts without any trading */} | ||||||
|  |  | ||||||
							
								
								
									
										45
									
								
								web/components/tags-input.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								web/components/tags-input.tsx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | import { useState } from 'react' | ||||||
|  | import { parseWordsAsTags } from '../../common/util/parse' | ||||||
|  | import { Contract, updateContract } from '../lib/firebase/contracts' | ||||||
|  | import { Row } from './layout/row' | ||||||
|  | import { TagsList } from './tags-list' | ||||||
|  | 
 | ||||||
|  | export function TagsInput(props: { contract: Contract }) { | ||||||
|  |   const { contract } = props | ||||||
|  |   const { tags } = contract | ||||||
|  | 
 | ||||||
|  |   const [tagText, setTagText] = useState('') | ||||||
|  |   const newTags = parseWordsAsTags(`${tags.join(' ')} ${tagText}`) | ||||||
|  | 
 | ||||||
|  |   const [isSubmitting, setIsSubmitting] = useState(false) | ||||||
|  | 
 | ||||||
|  |   const updateTags = () => { | ||||||
|  |     setIsSubmitting(true) | ||||||
|  |     updateContract(contract.id, { | ||||||
|  |       tags: newTags, | ||||||
|  |       lowercaseTags: newTags.map((tag) => tag.toLowerCase()), | ||||||
|  |     }) | ||||||
|  |     setIsSubmitting(false) | ||||||
|  |     setTagText('') | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return ( | ||||||
|  |     <Row className="flex-wrap gap-4"> | ||||||
|  |       <TagsList tags={newTags.map((tag) => `#${tag}`)} /> | ||||||
|  | 
 | ||||||
|  |       <Row className="items-center gap-4"> | ||||||
|  |         <input | ||||||
|  |           style={{ maxWidth: 150 }} | ||||||
|  |           placeholder="Type a tag..." | ||||||
|  |           className="input input-sm input-bordered resize-none" | ||||||
|  |           disabled={isSubmitting} | ||||||
|  |           value={tagText} | ||||||
|  |           onChange={(e) => setTagText(e.target.value || '')} | ||||||
|  |         /> | ||||||
|  |         <button className="btn btn-xs btn-outline" onClick={updateTags}> | ||||||
|  |           Save tags | ||||||
|  |         </button> | ||||||
|  |       </Row> | ||||||
|  |     </Row> | ||||||
|  |   ) | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user