From 38ad983d6d1b9f29cbb54a6589f2c7709f240f78 Mon Sep 17 00:00:00 2001 From: User Date: Sat, 28 Dec 2024 13:32:46 -0500 Subject: [PATCH] Reading history --- app/Http/Controllers/ComicController.php | 26 +++++ app/Models/User.php | 2 +- bun.lockb | Bin 151983 -> 152800 bytes package.json | 1 + resources/js/Layouts/AppLayout.jsx | 2 +- resources/js/Pages/Comic/Chapters.jsx | 12 +-- resources/js/Pages/Comic/Favourites.jsx | 2 - resources/js/Pages/Comic/Histories.jsx | 116 +++++++++++++++++++++ resources/js/components/ThemeProvider.tsx | 75 ------------- resources/js/components/ui/app-sidebar.jsx | 2 +- routes/web.php | 5 +- 11 files changed, 156 insertions(+), 87 deletions(-) create mode 100644 resources/js/Pages/Comic/Histories.jsx delete mode 100644 resources/js/components/ThemeProvider.tsx diff --git a/app/Http/Controllers/ComicController.php b/app/Http/Controllers/ComicController.php index 21fd55e..2a008b3 100644 --- a/app/Http/Controllers/ComicController.php +++ b/app/Http/Controllers/ComicController.php @@ -12,6 +12,7 @@ use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Foundation\Application; use Illuminate\Http\JsonResponse; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response as IlluminateHttpResponse; use Illuminate\Support\Facades\Cache; @@ -169,9 +170,14 @@ class ComicController extends Controller // Do an upsert Chapter::upsert($arrayForUpsert, uniqueBy: 'chapter_uuid'); + // Get history + $histories = $request->user()->readingHistories()->where('reading_histories.comic_id', $comicObject->id) + ->distinct()->select('chapter_uuid')->get()->pluck('chapter_uuid'); + return Inertia::render('Comic/Chapters', [ 'comic' => $comic, 'chapters' => $chapters, + 'histories' => $histories ]); } @@ -213,12 +219,32 @@ class ComicController extends Controller // Do an upsert Image::upsert($arrayForUpsert, uniqueBy: 'url'); + // Update history + $request->user()->readingHistories()->attach($chapterObj->id, ['comic_id' => $comicObj->id]); + return Inertia::render('Comic/Read', [ 'comic' => $comic, 'chapter' => $chapter, ]); } + public function histories(Request $request): Response + { + // Get history + $histories = $request->user()->readingHistories()->with(['comic:id,name,pathword'])->orderByDesc('reading_histories.created_at') + ->select(['reading_histories.id as hid', 'reading_histories.created_at', 'chapters.comic_id', 'chapters.name'])->paginate(50)->toArray(); + + return Inertia::render('Comic/Histories', [ + 'histories' => $histories + ]); + } + + public function destroyHistories(Request $request): RedirectResponse + { + $histories = $request->user()->readingHistories()->whereIn('reading_histories.id', $request->get('ids'))->delete(); + return redirect()->route('comics.histories'); + } + public function tags() { // TODO diff --git a/app/Models/User.php b/app/Models/User.php index 5976655..2bc51e9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -56,7 +56,7 @@ class User extends Authenticatable implements MustVerifyEmail public function readingHistories(): BelongsToMany { - return $this->belongsToMany(Comic::class, 'reading_histories')->withTimestamps(); + return $this->belongsToMany(Chapter::class, 'reading_histories')->withTimestamps(); } } diff --git a/bun.lockb b/bun.lockb index dc9001140005f45ecc43dc0aee330f2d4581d0dc..56f01cb441c288a331a5fbaf86ba5d4cbd749b87 100755 GIT binary patch delta 26567 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 delta 26041 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 D!{asx diff --git a/package.json b/package.json index 5eae54c..eeb6c64 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-toast": "^1.2.4", "@radix-ui/react-tooltip": "^1.1.6", + "@tanstack/react-table": "^8.20.6", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lodash": "^4.17.21", diff --git a/resources/js/Layouts/AppLayout.jsx b/resources/js/Layouts/AppLayout.jsx index e4faa1b..949efab 100644 --- a/resources/js/Layouts/AppLayout.jsx +++ b/resources/js/Layouts/AppLayout.jsx @@ -1,5 +1,5 @@ import { SidebarInset, SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'; -import { AppSidebar } from '@/Components/ui/app-sidebar.jsx'; +import { AppSidebar } from '@/components/ui/app-sidebar.jsx'; import { Separator } from "@radix-ui/react-separator"; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList } from "@/components/ui/breadcrumb"; import { Toaster } from '@/components/ui/toaster'; diff --git a/resources/js/Pages/Comic/Chapters.jsx b/resources/js/Pages/Comic/Chapters.jsx index 46efb0e..800bc91 100644 --- a/resources/js/Pages/Comic/Chapters.jsx +++ b/resources/js/Pages/Comic/Chapters.jsx @@ -1,18 +1,18 @@ import { useState } from 'react'; import { Head, Link, router } from '@inertiajs/react'; -import { Moon, Plus, Star, ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react'; +import { Plus, Star, ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react'; import AppLayout from '@/Layouts/AppLayout.jsx'; +import { Badge } from "@/components/ui/badge"; import { BreadcrumbItem, BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb'; import { Button } from '@/components/ui/button'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { useToast } from '@/hooks/use-toast'; -import { Badge } from "@/components/ui/badge.jsx"; -export default function Chapters({ auth, comic, chapters }) { +export default function Chapters({ auth, comic, chapters, histories }) { const [group, setGroup] = useState('default'); const [favourites, setFavourites] = useState(auth.user.favourites); @@ -42,12 +42,13 @@ export default function Chapters({ auth, comic, chapters }) { const ComicChapterLink = (props) => { const isNew = Date.now() - Date.parse(props.datetime_created) < 6.048e+8; + const isRead = histories.includes(props.uuid); return ( - + + + + + Select + Comic + Chapter + Read at + + + + { histories.data.map((h, i) => ( + + + + + { h.name } + { h.comic.name } + { h.created_at } + + )) } + +
+
+ + + { histories.current_page > 1 && ( + + + + ) } + + { histories.current_page } + + + + + { histories.current_page < histories.last_page && ( + + + + ) } + + + +
+ + +); +} diff --git a/resources/js/components/ThemeProvider.tsx b/resources/js/components/ThemeProvider.tsx deleted file mode 100644 index 3b59c58..0000000 --- a/resources/js/components/ThemeProvider.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { createContext, useContext, useEffect, useState } from "react" - -type Theme = "dark" | "light" | "system" - -type ThemeProviderProps = { - children: React.ReactNode - defaultTheme?: Theme - storageKey?: string -} - -type ThemeProviderState = { - theme: Theme - setTheme: (theme: Theme) => void -} - -const initialState: ThemeProviderState = { - theme: "system", - setTheme: () => null, -} - -const ThemeProviderContext = createContext(initialState) - -export function ThemeProvider({ - children, - defaultTheme = "system", - storageKey = "vite-ui-theme", - ...props - }: ThemeProviderProps) { - const [theme, setTheme] = useState( - () => (localStorage.getItem(storageKey) as Theme) || defaultTheme - ) - - useEffect(() => { - const root = window.document.documentElement - - root.classList.remove("light", "dark") - - if (theme === "system") { - const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") - .matches - ? "dark" - : "light" - - root.classList.add(systemTheme) - return - } - - root.classList.add(theme) - }, [theme]) - - const value = { - theme, - setTheme: (theme: Theme) => { - console.log(storageKey) - localStorage.setItem(storageKey, theme) - setTheme(theme) - }, - } - - // @ts-ignore - return ( - - {children} - - ) -} - -export const useTheme = () => { - const context = useContext(ThemeProviderContext) - console.log(context); - if (context === undefined) - throw new Error("useTheme must be used within a ThemeProvider") - - return context -} diff --git a/resources/js/components/ui/app-sidebar.jsx b/resources/js/components/ui/app-sidebar.jsx index 3dc8434..97e0916 100644 --- a/resources/js/components/ui/app-sidebar.jsx +++ b/resources/js/components/ui/app-sidebar.jsx @@ -120,7 +120,7 @@ export function AppSidebar({ auth }) { Profile Favourites - History + History Log out diff --git a/routes/web.php b/routes/web.php index cd9b4c3..7996e8c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,7 +2,6 @@ use App\Http\Controllers\ComicController; use App\Http\Controllers\ProfileController; -use Illuminate\Foundation\Application; use Illuminate\Support\Facades\Route; use Inertia\Inertia; @@ -21,6 +20,10 @@ Route::controller(ComicController::class)->middleware('auth')->name('comics.')-> // Toggle favourites Route::post('/favourites', 'postFavourite')->name('postFavourite'); + + // Histories + Route::get('/histories', 'histories')->name('histories'); + Route::patch('/histories', 'destroyHistories')->name('destroyHistories'); // Only patch accept params }); Route::get('/dashboard', function () {