The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

updating leaderboard add delete button & custom embed

Luna 604c5a26 4c0e6465

+44 -15
+44 -15
app/dashboard/[guildId]/leaderboards/updating.component.tsx
··· 10 10 import { Guild } from "@/common/guilds"; 11 11 import SelectInput from "@/components/inputs/select-menu"; 12 12 import Switch from "@/components/inputs/switch"; 13 + import TextInput from "@/components/inputs/text-input"; 13 14 import Modal from "@/components/modal"; 14 15 import { ApiV1GuildsModulesLeaderboardUpdatingPostResponse } from "@/typings"; 15 16 ··· 19 20 type: "messages" | "voiceminutes" | "invites"; 20 21 } 21 22 23 + interface Embed { 24 + title?: string; 25 + color?: number; 26 + thumbnail?: string; 27 + image?: string; 28 + } 29 + 22 30 enum ModalType { 23 31 CreateAndEdit = 1, 24 32 Delete = 2 ··· 35 43 const [modal, setModal] = useState<ModalType>(); 36 44 37 45 const [channelId, setChannelId] = useState(leaderboard?.channelId); 38 - const [structure, setStructure] = useState(leaderboard?.structure); 46 + const [structure, setStructure] = useState(leaderboard?.structure || 1); 39 47 const [emoji, setEmoji] = useState(leaderboard?.emoji); 40 48 const [styles, setStyles] = useState<ApiV1GuildsModulesLeaderboardUpdatingPostResponse["styles"]>(leaderboard?.styles || { useQuotes: false, rank: null, number: null, user: null }); 49 + const [embed, setEmbed] = useState<Embed>({}); 41 50 42 51 const stylesList = [ 43 52 { name: "Bold", value: "**" }, ··· 78 87 className="flex dark:text-violet-400/60 dark:hover:text-violet-400/90 text-violet-600/60 hover:text-violet-600/90 duration-200" 79 88 > 80 89 <HiPencil className="h-4 w-4 relative top-1" /> 81 - <span className="ml-1">{leaderboard?.channelId ? "Edit" : "Create"} leaderboard</span> 90 + <span className="ml-1"> 91 + {leaderboard?.channelId ? "Edit" : "Create"} leaderboard 92 + </span> 82 93 </button> 83 94 84 - {leaderboard?.channelId && cookies.get("devTools") && 95 + {leaderboard?.channelId && 85 96 <button 86 97 onClick={() => setModal(ModalType.Delete)} 87 98 className="flex dark:text-red-400/60 dark:hover:text-red-400/90 text-red-600/60 hover:text-red-600/90 duration-200" 88 99 > 89 - <HiTrash className="h-5 w-5" /> 90 - <span className="ml-1">Delete</span> 100 + <HiTrash className="h-5 relative top-0.5" /> 101 + <span className="ml-1"> 102 + Delete 103 + </span> 91 104 </button> 92 105 } 93 106 </div> ··· 98 111 className="flex flex-col gap-3" 99 112 title={`${type.replace(/^\w/, (match) => match.toUpperCase())} leaderboard`} 100 113 isOpen={modal === ModalType.CreateAndEdit && !!guild} 114 + isDisabled={!channelId} 101 115 onClose={() => { 102 116 setModal(undefined); 103 117 }} ··· 113 127 channelId, 114 128 structure, 115 129 emoji, 116 - styles 130 + styles, 131 + embed: leaderboard?.channelId 132 + ? undefined 133 + : embed 117 134 }) 118 135 }); 119 136 }} ··· 193 210 </Tabs> 194 211 </div> 195 212 196 - {structure === 0 && 213 + {structure === 0 && <> 197 214 <div className="flex gap-2"> 198 215 <SelectInput 199 216 name="Rank" ··· 220 237 }} 221 238 /> 222 239 </div> 223 - } 224 240 225 - {structure === 0 && 226 241 <SelectInput 227 242 name="Emoji" 228 243 items={guild?.emojis?.sort((a, b) => a.name.localeCompare(b.name)).map((c) => ({ ··· 243 258 setEmoji(o.value as string); 244 259 }} 245 260 /> 246 - } 261 + 262 + {!leaderboard?.channelId && 263 + <TextInput 264 + name="Title" 265 + description="The title of the embed" 266 + defaultState={"☕ " + `${type.replace(/^\w/, (match) => match.toUpperCase())} leaderboard`} 267 + max={256} 268 + onSave={(v) => { 269 + setEmbed({ 270 + ...embed, 271 + title: v as string 272 + }); 273 + }} 274 + /> 275 + } 247 276 248 - {structure === 0 && 249 277 <Switch 250 278 name="Use quotes for text" 251 279 isTickbox ··· 254 282 setStyles({ ...styles, useQuotes: s }); 255 283 }} 256 284 /> 257 - } 258 - 285 + </>} 259 286 </Modal> 260 287 261 288 <Modal ··· 279 306 }} 280 307 onSuccess={() => { 281 308 setChannelId(undefined); 282 - setStructure(undefined); 309 + setStructure(0); 283 310 setEmoji(undefined); 284 311 setStyles({ useQuotes: false, rank: null, number: null, user: null }); 285 312 setLeaderboard(undefined); 286 313 }} 287 314 > 288 - Are you sure you want to delete this from the database? 315 + Are you sure you want to deactivate this leaderboard? 316 + This still stop updating the message in discord. 317 + This will not reset or delete any statistics or ranks. 289 318 </Modal> 290 319 291 320 </div>);