| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | /* | 
					
						
							|  |  |  | 	 GoToSocial | 
					
						
							| 
									
										
										
										
											2023-01-05 12:43:00 +01:00
										 |  |  | 	 Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	 This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | 	 it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  | 	 the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | 	 (at your option) any later version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	 This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | 	 but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | 	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | 	 GNU Affero General Public License for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	 You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  | 	 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const React = require("react"); | 
					
						
							|  |  |  | const {Link} = require("wouter"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const NewEmojiForm = require("./new-emoji"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-11 16:00:23 +01:00
										 |  |  | const query = require("../../../lib/query"); | 
					
						
							|  |  |  | const { useEmojiByCategory } = require("../category-select"); | 
					
						
							|  |  |  | const Loading = require("../../../components/loading"); | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-11 16:00:23 +01:00
										 |  |  | const base = "/settings/custom-emoji/local"; | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = function EmojiOverview() { | 
					
						
							|  |  |  | 	const { | 
					
						
							| 
									
										
										
										
											2022-11-16 17:05:49 +01:00
										 |  |  | 		data: emoji = [], | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 		isLoading, | 
					
						
							|  |  |  | 		error | 
					
						
							|  |  |  | 	} = query.useGetAllEmojiQuery({filter: "domain:local"}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ( | 
					
						
							|  |  |  | 		<> | 
					
						
							| 
									
										
										
										
											2022-12-11 16:00:23 +01:00
										 |  |  | 			<h1>Custom Emoji (local)</h1> | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 			{error &&  | 
					
						
							|  |  |  | 				<div className="error accent">{error}</div> | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			{isLoading | 
					
						
							| 
									
										
										
										
											2022-12-11 16:00:23 +01:00
										 |  |  | 				? <Loading/> | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 				: <> | 
					
						
							| 
									
										
										
										
											2022-11-25 15:49:48 +01:00
										 |  |  | 					<EmojiList emoji={emoji}/> | 
					
						
							|  |  |  | 					<NewEmojiForm emoji={emoji}/> | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 				</> | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		</> | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-25 15:49:48 +01:00
										 |  |  | function EmojiList({emoji}) { | 
					
						
							|  |  |  | 	const emojiByCategory = useEmojiByCategory(emoji); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 	return ( | 
					
						
							|  |  |  | 		<div> | 
					
						
							|  |  |  | 			<h2>Overview</h2> | 
					
						
							|  |  |  | 			<div className="list emoji-list"> | 
					
						
							| 
									
										
										
										
											2022-11-16 17:05:49 +01:00
										 |  |  | 				{emoji.length == 0 && "No local emoji yet, add one below"} | 
					
						
							|  |  |  | 				{Object.entries(emojiByCategory).map(([category, entries]) => { | 
					
						
							| 
									
										
										
										
											2022-11-08 17:51:44 +01:00
										 |  |  | 					return <EmojiCategory key={category} category={category} entries={entries}/>; | 
					
						
							|  |  |  | 				})} | 
					
						
							|  |  |  | 			</div> | 
					
						
							|  |  |  | 		</div> | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function EmojiCategory({category, entries}) { | 
					
						
							|  |  |  | 	return ( | 
					
						
							|  |  |  | 		<div className="entry"> | 
					
						
							|  |  |  | 			<b>{category}</b> | 
					
						
							|  |  |  | 			<div className="emoji-group"> | 
					
						
							|  |  |  | 				{entries.map((e) => { | 
					
						
							|  |  |  | 					return ( | 
					
						
							|  |  |  | 						<Link key={e.id} to={`${base}/${e.id}`}> | 
					
						
							|  |  |  | 							{/* <Link key={e.static_url} to={`${base}`}> */} | 
					
						
							|  |  |  | 							<a> | 
					
						
							|  |  |  | 								<img src={e.url} alt={e.shortcode} title={`:${e.shortcode}:`}/> | 
					
						
							|  |  |  | 							</a> | 
					
						
							|  |  |  | 						</Link> | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				})} | 
					
						
							|  |  |  | 			</div> | 
					
						
							|  |  |  | 		</div> | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | } |