From 39f100f8ff1c7cfc2db4335fbbf6345cfe621fe7 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 15 Feb 2025 20:45:09 +0200 Subject: [PATCH] Add Article Revisions Feature --- package-lock.json | 39 ++++++++++++++++++++ package.json | 1 + src/App.tsx | 4 ++- src/components/article/Revisions.tsx | 54 ++++++++++++++++++++++++++++ src/lib/hooks/useRevisions.ts | 35 ++++++++++++++++++ src/pages/ArticlePage.tsx | 13 ++++++- 6 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 src/components/article/Revisions.tsx create mode 100644 src/lib/hooks/useRevisions.ts diff --git a/package-lock.json b/package-lock.json index 3b12f0b..4f23825 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "@babel/cli": "^7.20.7", "@babel/core": "^7.20.12", "@babel/preset-typescript": "^7.18.6", + "@types/react-toastify": "^4.0.2", "@typescript-eslint/eslint-plugin": "^5.49.0", "@typescript-eslint/parser": "^5.49.0", "eslint": "^8.32.0", @@ -4213,6 +4214,27 @@ "@types/react": "*" } }, + "node_modules/@types/react-toastify": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/react-toastify/-/react-toastify-4.0.2.tgz", + "integrity": "sha512-pHjCstnN0ZgopIWQ9UiWsD9n+HsXs1PnMQC4hIZuSzpDO0lRjigpTuqsUtnBkMbLIg+mGFSAsBjL49SspzoLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "@types/react-transition-group": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -21723,6 +21745,23 @@ "@types/react": "*" } }, + "@types/react-toastify": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/react-toastify/-/react-toastify-4.0.2.tgz", + "integrity": "sha512-pHjCstnN0ZgopIWQ9UiWsD9n+HsXs1PnMQC4hIZuSzpDO0lRjigpTuqsUtnBkMbLIg+mGFSAsBjL49SspzoLKA==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/react-transition-group": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "dev": true, + "requires": {} + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", diff --git a/package.json b/package.json index bbe6f1b..d664795 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@babel/cli": "^7.20.7", "@babel/core": "^7.20.12", "@babel/preset-typescript": "^7.18.6", + "@types/react-toastify": "^4.0.2", "@typescript-eslint/eslint-plugin": "^5.49.0", "@typescript-eslint/parser": "^5.49.0", "eslint": "^8.32.0", diff --git a/src/App.tsx b/src/App.tsx index f9fb05b..c13f921 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,11 +1,13 @@ import React from 'react'; import Router from './Router'; import UserContextProvider from '@/contexts/UserContextProvider'; - +import "react-toastify/dist/ReactToastify.css"; +import { ToastContainer } from "react-toastify"; function App() { return (
Loading revisions...
; + if (error) returnError loading revisions
; + + return ( ++ Timestamp: {new Date(revision.created_at).toLocaleString()} +
++ Content: {revision.content.slice(0, 50)}... +
+ {isAdmin && ( + + )} +