From 8adeb4fe5b2dfe135075ea85e27033b50e71027c Mon Sep 17 00:00:00 2001 From: xeltica Date: Sat, 4 Sep 2021 22:19:35 +0900 Subject: [PATCH] =?UTF-8?q?=E3=81=8Awip=E3=81=A7=E3=81=99=E3=82=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + src/backend/controllers/session.ts | 6 +++ src/backend/models/entities/user.ts | 3 +- src/common/types/score.ts | 4 +- src/common/types/user.ts | 22 +++++++++ src/frontend/App.tsx | 11 +++-- src/frontend/components/SessionData.tsx | 44 +++++++++++++++++ src/frontend/components/Tab.tsx | 6 +-- src/frontend/const.tsx | 1 + src/frontend/pages/index.session.tsx | 41 +++++++++++----- src/frontend/services/session.ts | 32 +++++++++++++ src/frontend/store/index.ts | 21 ++++++++ src/frontend/style.scss | 18 +++++-- yarn.lock | 64 +++++++++++++++++++++++-- 14 files changed, 245 insertions(+), 30 deletions(-) create mode 100644 src/common/types/user.ts create mode 100644 src/frontend/components/SessionData.tsx create mode 100644 src/frontend/const.tsx create mode 100644 src/frontend/services/session.ts create mode 100644 src/frontend/store/index.ts diff --git a/package.json b/package.json index 181761e..48d8527 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "dependencies": { "@babel/preset-react": "^7.14.5", + "@reduxjs/toolkit": "^1.6.1", "@types/koa-bodyparser": "^4.3.0", "@types/koa-multer": "^1.0.0", "@types/koa-send": "^4.1.3", @@ -58,6 +59,7 @@ "pug": "^3.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-redux": "^7.2.4", "react-router-dom": "^5.2.1", "reflect-metadata": "^0.1.13", "rndstr": "^1.0.0", diff --git a/src/backend/controllers/session.ts b/src/backend/controllers/session.ts index 8afb445..fd24134 100644 --- a/src/backend/controllers/session.ts +++ b/src/backend/controllers/session.ts @@ -4,6 +4,7 @@ */ import { CurrentUser, Get, JsonController } from 'routing-controllers'; +import { getScores } from '../functions/get-scores'; import { User } from '../models/entities/user'; @JsonController('/session') @@ -11,4 +12,9 @@ export class SessionController { @Get() get(@CurrentUser({ required: true }) user: User) { return user; } + + @Get('/score') + async getScore(@CurrentUser({ required: true }) user: User) { + return getScores(user); + } } diff --git a/src/backend/models/entities/user.ts b/src/backend/models/entities/user.ts index 23e8ff2..3b5e5cd 100644 --- a/src/backend/models/entities/user.ts +++ b/src/backend/models/entities/user.ts @@ -1,10 +1,11 @@ import { Entity, Column, PrimaryGeneratedColumn, Index } from 'typeorm'; import { AlertMode, alertModes } from '../../../common/types/alert-mode'; import { visibilities, Visibility } from '../../../common/types/visibility'; +import { IUser } from '../../../common/types/user'; @Entity() @Index(['username', 'host'], { unique: true }) -export class User { +export class User implements IUser { @PrimaryGeneratedColumn() public id: number; diff --git a/src/common/types/score.ts b/src/common/types/score.ts index 32a36a2..9d0b01a 100644 --- a/src/common/types/score.ts +++ b/src/common/types/score.ts @@ -1,9 +1,9 @@ -export type Score = { +export interface Score { notesCount: number; followingCount: number; followersCount: number; notesDelta: string; followingDelta: string; followersDelta: string; -}; +} diff --git a/src/common/types/user.ts b/src/common/types/user.ts new file mode 100644 index 0000000..46e7214 --- /dev/null +++ b/src/common/types/user.ts @@ -0,0 +1,22 @@ +import { AlertMode } from './alert-mode'; +import { Visibility } from './visibility'; + +export interface IUser { + id: number; + username: string; + host: string; + token: string; + misshaiToken: string; + prevNotesCount: number; + prevFollowingCount: number; + prevFollowersCount: number; + alertMode: AlertMode; + visibility: Visibility; + localOnly: boolean; + remoteFollowersOnly: boolean; + template: string | null; + prevRating: number; + rating: number; + bannedFromRanking: boolean; +} + diff --git a/src/frontend/App.tsx b/src/frontend/App.tsx index 8de69d5..dbeebf1 100644 --- a/src/frontend/App.tsx +++ b/src/frontend/App.tsx @@ -1,16 +1,19 @@ import * as React from 'react'; import { BrowserRouter, Link, Route, Switch, useLocation } from 'react-router-dom'; +import { Provider } from 'react-redux'; import { IndexPage } from './pages'; import { RankingPage } from './pages/ranking'; import { Header } from './components/Header'; import { TermPage } from './pages/term'; +import { store } from './store'; import 'xeltica-ui/dist/css/xeltica-ui.min.css'; import './style.scss'; const AppInner : React.VFC = () => { const $location = useLocation(); + return ( <>
@@ -30,7 +33,9 @@ const AppInner : React.VFC = () => { }; export const App: React.VFC = () => ( - - - + + + + + ); diff --git a/src/frontend/components/SessionData.tsx b/src/frontend/components/SessionData.tsx new file mode 100644 index 0000000..4299867 --- /dev/null +++ b/src/frontend/components/SessionData.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { useGetScoreQuery } from '../services/session'; + +export const SessionData: React.VFC = () => { + const { data: score, error, isLoading } = useGetScoreQuery(undefined); + + return isLoading ? ( +
Loading...
+ ) : score === undefined ? ( +
No score
+ ) : ( + <> +
+

みす廃データ

+ + + + + + + + + + + + + + + + + + + + + + + + + +
内容スコア前日比
ノート{score.notesCount}{score.notesDelta}
フォロー{score.followingCount}{score.followingDelta}
フォロワー{score.followersCount}{score.followersDelta}
+
+ + ); +}; diff --git a/src/frontend/components/Tab.tsx b/src/frontend/components/Tab.tsx index 4fbe361..af5e4de 100644 --- a/src/frontend/components/Tab.tsx +++ b/src/frontend/components/Tab.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React from 'react'; export type TabItem = { label: string; @@ -11,14 +11,14 @@ export type TabProps = { }; // タブコンポーネント -export const Tab: React.FC = (props) => { +export const Tab: React.VFC = (props) => { return (
{props.items.map((item, index) => { return (