Export all users to a CSV with name and email
This commit is contained in:
		
							parent
							
								
									dc2fada751
								
							
						
					
					
						commit
						d2f5742231
					
				|  | @ -35,55 +35,74 @@ function UsersTable() { | |||
|   // Sort users by createdTime descending, by default
 | ||||
|   users = users.sort((a, b) => b.createdTime - a.createdTime) | ||||
| 
 | ||||
|   function exportCsv() { | ||||
|     const csv = users | ||||
|       // @ts-ignore
 | ||||
|       .map((u) => [u.email, u.name].join(', ')) | ||||
|       .join('\n') | ||||
|     const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }) | ||||
|     const url = URL.createObjectURL(blob) | ||||
|     const a = document.createElement('a') | ||||
|     a.href = url | ||||
|     a.download = 'manifold-users.csv' | ||||
|     a.click() | ||||
|     URL.revokeObjectURL(url) | ||||
|   } | ||||
| 
 | ||||
|   return ( | ||||
|     <Grid | ||||
|       data={users} | ||||
|       columns={[ | ||||
|         { | ||||
|           id: 'avatarUrl', | ||||
|           name: 'Avatar', | ||||
|           formatter: (cell) => html(avatarHtml(cell as string)), | ||||
|         }, | ||||
|         { | ||||
|           id: 'username', | ||||
|           name: 'Username', | ||||
|           formatter: (cell) => | ||||
|             html(`<a 
 | ||||
|     <> | ||||
|       <Grid | ||||
|         data={users} | ||||
|         columns={[ | ||||
|           { | ||||
|             id: 'avatarUrl', | ||||
|             name: 'Avatar', | ||||
|             formatter: (cell) => html(avatarHtml(cell as string)), | ||||
|           }, | ||||
|           { | ||||
|             id: 'username', | ||||
|             name: 'Username', | ||||
|             formatter: (cell) => | ||||
|               html(`<a 
 | ||||
|               class="hover:underline hover:decoration-indigo-400 hover:decoration-2" | ||||
|               href="/${cell}">@${cell}</a>`),
 | ||||
|         }, | ||||
|         'Email', | ||||
|         { | ||||
|           id: 'createdTime', | ||||
|           name: 'Created Time', | ||||
|           formatter: (cell) => | ||||
|             html( | ||||
|               `<span class="whitespace-nowrap">${dayjs(cell as number).format( | ||||
|                 'MMM D, h:mma' | ||||
|               )}</span>` | ||||
|             ), | ||||
|         }, | ||||
|         { | ||||
|           id: 'balance', | ||||
|           name: 'Balance', | ||||
|           formatter: (cell) => (cell as number).toFixed(0), | ||||
|         }, | ||||
|         { | ||||
|           id: 'id', | ||||
|           name: 'ID', | ||||
|           formatter: (cell) => | ||||
|             html(`<a
 | ||||
|           }, | ||||
|           'Email', | ||||
|           { | ||||
|             id: 'createdTime', | ||||
|             name: 'Created Time', | ||||
|             formatter: (cell) => | ||||
|               html( | ||||
|                 `<span class="whitespace-nowrap">${dayjs(cell as number).format( | ||||
|                   'MMM D, h:mma' | ||||
|                 )}</span>` | ||||
|               ), | ||||
|           }, | ||||
|           { | ||||
|             id: 'balance', | ||||
|             name: 'Balance', | ||||
|             formatter: (cell) => (cell as number).toFixed(0), | ||||
|           }, | ||||
|           { | ||||
|             id: 'id', | ||||
|             name: 'ID', | ||||
|             formatter: (cell) => | ||||
|               html(`<a
 | ||||
|               class="hover:underline hover:decoration-indigo-400 hover:decoration-2" | ||||
|               href="https://console.firebase.google.com/project/mantic-markets/firestore/data/~2Fusers~2F${cell}">${cell}</a>`),
 | ||||
|         }, | ||||
|       ]} | ||||
|       search={true} | ||||
|       sort={true} | ||||
|       pagination={{ | ||||
|         enabled: true, | ||||
|         limit: 25, | ||||
|       }} | ||||
|     /> | ||||
|           }, | ||||
|         ]} | ||||
|         search={true} | ||||
|         sort={true} | ||||
|         pagination={{ | ||||
|           enabled: true, | ||||
|           limit: 25, | ||||
|         }} | ||||
|       /> | ||||
|       <button className="btn" onClick={exportCsv}> | ||||
|         Export emails to CSV | ||||
|       </button> | ||||
|     </> | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user