chore: updated user nav and added about
09b13728
2 file(s) · +62 −22
| 13 | 13 | - [x] Collapse both side bars if desired? |
|
| 14 | 14 | - [x] Update logo in top left |
|
| 15 | 15 | - [x] Marking Read and Unread |
|
| 16 | - | - [ ] Change Reset to "Log out" or something along those lines |
|
| 17 | - | - [ ] Add About to settings menu? |
|
| 16 | + | - [x] Change Reset to "Log out" or something along those lines |
|
| 17 | + | - [x] Add About to settings menu? |
|
| 18 | 18 | - [ ] Add Home screen with start button + acknowledgements |
|
| 19 | 19 | - [ ] Import + Export OPML in settings |
| 6 | 6 | CreditCard, |
|
| 7 | 7 | Eye, |
|
| 8 | 8 | EyeOff, |
|
| 9 | + | Info, |
|
| 9 | 10 | LogOut, |
|
| 10 | 11 | Sparkles, |
|
| 12 | + | Trash2, |
|
| 11 | 13 | Upload, |
|
| 12 | 14 | } from "lucide-react"; |
|
| 13 | 15 | import { |
|
| 20 | 22 | } from "@/components/ui/dialog"; |
|
| 21 | 23 | import { Button } from "@/components/ui/button"; |
|
| 22 | 24 | import { use, useState } from "react"; |
|
| 23 | - | import { useEvolu } from "@/lib/evolu"; |
|
| 25 | + | import { useEvolu, reset } from "@/lib/evolu"; |
|
| 24 | 26 | ||
| 25 | - | import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; |
|
| 26 | 27 | import { |
|
| 27 | 28 | DropdownMenu, |
|
| 28 | 29 | DropdownMenuContent, |
|
| 44 | 45 | const { isMobile } = useSidebar(); |
|
| 45 | 46 | const [isDialogOpen, setIsDialogOpen] = useState(false); |
|
| 46 | 47 | const [isRestoreDialogOpen, setIsRestoreDialogOpen] = useState(false); |
|
| 48 | + | const [isAboutDialogOpen, setIsAboutDialogOpen] = useState(false); |
|
| 47 | 49 | const [backupPhrase, setBackupPhrase] = useState<Mnemonic | null>(); |
|
| 48 | 50 | const [isRevealed, setIsRevealed] = useState(false); |
|
| 49 | 51 | const [isCopied, setIsCopied] = useState(false); |
|
| 122 | 124 | sideOffset={4} |
|
| 123 | 125 | > |
|
| 124 | 126 | <DropdownMenuGroup> |
|
| 127 | + | <DropdownMenuItem onClick={() => setIsAboutDialogOpen(true)}> |
|
| 128 | + | <Info /> |
|
| 129 | + | About |
|
| 130 | + | </DropdownMenuItem> |
|
| 131 | + | </DropdownMenuGroup> |
|
| 132 | + | <DropdownMenuSeparator /> |
|
| 133 | + | <DropdownMenuGroup> |
|
| 125 | 134 | <DialogTrigger asChild> |
|
| 126 | 135 | <DropdownMenuItem> |
|
| 127 | 136 | <BookKey /> |
|
| 136 | 145 | </DropdownMenuItem> |
|
| 137 | 146 | </DropdownMenuGroup> |
|
| 138 | 147 | <DropdownMenuSeparator /> |
|
| 139 | - | <DropdownMenuGroup> |
|
| 140 | - | <DropdownMenuItem> |
|
| 141 | - | <BadgeCheck /> |
|
| 142 | - | Account |
|
| 143 | - | </DropdownMenuItem> |
|
| 144 | - | <DropdownMenuItem> |
|
| 145 | - | <CreditCard /> |
|
| 146 | - | Billing |
|
| 147 | - | </DropdownMenuItem> |
|
| 148 | - | <DropdownMenuItem> |
|
| 149 | - | <Bell /> |
|
| 150 | - | Notifications |
|
| 151 | - | </DropdownMenuItem> |
|
| 152 | - | </DropdownMenuGroup> |
|
| 153 | - | <DropdownMenuSeparator /> |
|
| 154 | - | <DropdownMenuItem> |
|
| 155 | - | <LogOut /> |
|
| 156 | - | Log out |
|
| 148 | + | <DropdownMenuItem onClick={reset}> |
|
| 149 | + | <Trash2 /> |
|
| 150 | + | Clear Data |
|
| 157 | 151 | </DropdownMenuItem> |
|
| 158 | 152 | </DropdownMenuContent> |
|
| 159 | 153 | </DropdownMenu> |
|
| 231 | 225 | <Upload className="h-4 w-4 mr-2" /> |
|
| 232 | 226 | Restore Account |
|
| 233 | 227 | </Button> |
|
| 228 | + | </div> |
|
| 229 | + | </DialogContent> |
|
| 230 | + | </Dialog> |
|
| 231 | + | <Dialog open={isAboutDialogOpen} onOpenChange={setIsAboutDialogOpen}> |
|
| 232 | + | <DialogContent> |
|
| 233 | + | <DialogHeader> |
|
| 234 | + | <DialogTitle>About</DialogTitle> |
|
| 235 | + | </DialogHeader> |
|
| 236 | + | <div className="space-y-4"> |
|
| 237 | + | <p className="text-sm text-muted-foreground"> |
|
| 238 | + | Alcove is built on two principles: privacy, and freedom of speech. |
|
| 239 | + | Those two things are becoming harder to find these days, yet blogs |
|
| 240 | + | and RSS feeds provides a way out. As long as someone is publishing |
|
| 241 | + | and someone else is listening, these two fundamentals can help |
|
| 242 | + | keep free speech alive. Alcove accomplishes privacy through a |
|
| 243 | + | "can't be evil" tech stack, which you can read more about{" "} |
|
| 244 | + | <a className="underline" target="_blank" rel="noreferrer" href=""> |
|
| 245 | + | here |
|
| 246 | + | </a> |
|
| 247 | + | . TLDR: all of your feeds and posts that you read are encrypted |
|
| 248 | + | locally and synced via cryptographic keypairs. Even if we wanted |
|
| 249 | + | to read your stuff, we can't. |
|
| 250 | + | </p> |
|
| 251 | + | <p className="text-sm text-muted-foreground"> |
|
| 252 | + | Due to how the encryption works, it is critical that you backup |
|
| 253 | + | your account passphrase to a secure location like a password |
|
| 254 | + | manager. If you clear your local browser data there is no way for |
|
| 255 | + | us to recover your account or feeds, and you will need to make a |
|
| 256 | + | new one. Back it up now in the settings page! |
|
| 257 | + | </p> |
|
| 258 | + | <p className="text-sm text-muted-foreground"> |
|
| 259 | + | Alcove is{" "} |
|
| 260 | + | <a className="underline" href="" target="_blank" rel="noreferrer"> |
|
| 261 | + | MIT open sourced |
|
| 262 | + | </a>{" "} |
|
| 263 | + | and run by{" "} |
|
| 264 | + | <a |
|
| 265 | + | className="underline" |
|
| 266 | + | href="https://stevedylan.dev" |
|
| 267 | + | target="_blank" |
|
| 268 | + | rel="noreferrer" |
|
| 269 | + | > |
|
| 270 | + | Steve |
|
| 271 | + | </a> |
|
| 272 | + | . |
|
| 273 | + | </p> |
|
| 234 | 274 | </div> |
|
| 235 | 275 | </DialogContent> |
|
| 236 | 276 | </Dialog> |
|