fix: error

This commit is contained in:
2024-03-20 17:10:47 +08:00
parent 0f9eea7d2b
commit b49ef982b9
8 changed files with 3427 additions and 3814 deletions

View File

@@ -2,6 +2,7 @@
"name": "codesecer-ui",
"private": true,
"version": "0.0.1",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
@@ -16,79 +17,77 @@
"chromatic": "npx chromatic --project-token=180ac2186305"
},
"dependencies": {
"@mantine/core": "^7.1.7",
"@mantine/ds": "^7.1.7",
"@mantine/hooks": "^7.1.7",
"@mantine/notifications": "^7.1.7",
"@reduxjs/toolkit": "^1.9.7",
"@tabler/icons-react": "^2.40.0",
"axios": "^1.6.0",
"@mantine/core": "^7.6.2",
"@mantine/hooks": "^7.6.2",
"@mantine/notifications": "^7.6.2",
"@reduxjs/toolkit": "^2.2.1",
"@tabler/icons-react": "^3.1.0",
"axios": "^1.6.8",
"dayjs": "^1.11.10",
"i18next": "^23.6.0",
"i18next-browser-languagedetector": "^7.1.0",
"i18next": "^23.10.1",
"i18next-browser-languagedetector": "^7.2.0",
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-i18next": "^13.3.1",
"react-redux": "^8.1.3",
"react-router-dom": "^6.18.0",
"react-i18next": "^14.1.0",
"react-redux": "^9.1.0",
"react-router-dom": "^6.22.3",
"remark": "^15.0.1",
"remark-html": "^16.0.1"
},
"devDependencies": {
"@babel/core": "^7.23.2",
"@mantine/form": "^7.1.7",
"@storybook/addon-actions": "^7.5.2",
"@storybook/addon-essentials": "^7.5.2",
"@storybook/addon-interactions": "^7.5.2",
"@storybook/addon-links": "^7.5.2",
"@storybook/addons": "^7.5.2",
"@storybook/api": "^7.5.2",
"@storybook/builder-vite": "^7.5.2",
"@storybook/components": "^7.5.2",
"@storybook/core-events": "^7.5.2",
"@storybook/react": "^7.5.2",
"@babel/core": "^7.24.0",
"@mantine/form": "^7.6.2",
"@storybook/addon-actions": "^8.0.1",
"@storybook/addon-essentials": "^8.0.1",
"@storybook/addon-interactions": "^8.0.1",
"@storybook/addon-links": "^8.0.1",
"@storybook/addons": "^7.6.17",
"@storybook/api": "^7.6.17",
"@storybook/builder-vite": "^8.0.1",
"@storybook/components": "^8.0.1",
"@storybook/core-events": "^8.0.1",
"@storybook/react": "^8.0.1",
"@storybook/testing-library": "^0.2.2",
"@storybook/theming": "^7.5.2",
"@testing-library/dom": "^9.3.3",
"@testing-library/jest-dom": "^6.1.4",
"@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.5.1",
"@types/jest": "^29.5.7",
"@types/lodash": "^4.14.200",
"@types/react": "^18.2.33",
"@types/react-dom": "^18.2.14",
"@typescript-eslint/eslint-plugin": "^6.9.1",
"@typescript-eslint/parser": "^6.9.1",
"@vitejs/plugin-react": "^4.1.0",
"@storybook/theming": "^8.0.1",
"@testing-library/dom": "^9.3.4",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.1",
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.12",
"@types/lodash": "^4.17.0",
"@types/react": "^18.2.67",
"@types/react-dom": "^18.2.22",
"@typescript-eslint/eslint-plugin": "^7.3.1",
"@typescript-eslint/parser": "^7.3.1",
"@vitejs/plugin-react": "^4.2.1",
"babel-loader": "^9.1.3",
"chromatic": "^7.6.0",
"eslint": "^8.52.0",
"eslint-config-prettier": "^9.0.0",
"chromatic": "^11.0.8",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.0",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-prettier": "^5.0.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.4",
"eslint-plugin-storybook": "^0.6.15",
"i18next-http-backend": "^2.3.1",
"eslint-plugin-react-refresh": "^0.4.6",
"eslint-plugin-storybook": "^0.8.0",
"i18next-http-backend": "^2.5.0",
"install-peerdeps": "^3.0.3",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"postcss": "^8.4.31",
"postcss-preset-mantine": "^1.9.0",
"postcss": "^8.4.36",
"postcss-preset-mantine": "^1.13.0",
"postcss-simple-vars": "^7.0.1",
"prettier": "^3.0.3",
"react-router": "^6.18.0",
"storybook": "^7.5.2",
"storybook-addon-react-router-v6": "2.0.8",
"storybook-dark-mode": "^3.0.1",
"storybook-react-i18next": "2.0.9",
"prettier": "^3.2.5",
"react-router": "^6.22.3",
"storybook": "^8.0.1",
"storybook-dark-mode": "^4.0.1",
"storybook-react-i18next": "3.0.1",
"stylis-plugin-rtl": "^2.1.1",
"ts-jest": "^29.1.1",
"typescript": "^5.2.2",
"vite": "^4.5.0"
"ts-jest": "^29.1.2",
"typescript": "^5.4.2",
"vite": "^5.1.6"
}
}

7079
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
// eslint-disable-next-line no-undef
module.exports = {
export default {
plugins: {
"postcss-preset-mantine": {},
"postcss-simple-vars": {

View File

@@ -4,15 +4,15 @@ import {
SegmentedControl,
useMantineColorScheme,
} from "@mantine/core";
import { IconMoon, IconSun } from "@tabler/icons-react";
import { IconMoon, IconRobot, IconSun } from "@tabler/icons-react";
export function ThemeSetting() {
const { colorScheme, toggleColorScheme } = useMantineColorScheme();
const { colorScheme, setColorScheme } = useMantineColorScheme();
return (
<SegmentedControl
value={colorScheme}
onChange={toggleColorScheme}
onChange={v => setColorScheme(v as any)}
data={[
{
value: "light",
@@ -23,6 +23,15 @@ export function ThemeSetting() {
</Center>
),
},
{
value: "auto",
label: (
<Center>
<IconRobot size="1rem" stroke={1.5} />
<Box ml={10}>Auto</Box>
</Center>
),
},
{
value: "dark",
label: (

View File

@@ -1,5 +1,6 @@
import { notifications } from "@mantine/notifications";
import axios, { AxiosResponse } from "axios";
import { merge } from "lodash";
export interface PaginationParams {
skip?: number;
@@ -63,6 +64,6 @@ export class SearchApi {
const { data } = await api.get(
new URL(`/api/paragraph/_doc/${id}`, baseUrl).toString(),
);
return data._source;
return merge(data._source, { _id: data._id, '@timestamp': data['@timestamp'] });
}
}

View File

@@ -57,23 +57,24 @@ export default function ParagraphPage() {
return (
<Container py="2rem">
<Title mb="xl">{paragraph.title}</Title>
<Group justify="space-between" align="center">
<Title >{paragraph.title}</Title>
<Group justify="space-between" align="center" my="md">
<Group>
<Text c="dimmed"> {dayjs().to(dayjs(paragraph.time))}</Text>
<Badge
<Text size="sm" c="dimmed"> {dayjs().to(dayjs(paragraph["@timestamp"]))}</Text>
<Text
ml="1rem"
radius="sm"
size="sm"
component={Link}
to={`/author/${encodeURIComponent(paragraph.author || "unknown")}`}
>
{paragraph.author}
</Badge>
</Text>
</Group>
<Group>
{paragraph.tags.map((tag, index) => (
<>
<Badge
size="sm"
component={Link}
key={index}
to={`/tag/${encodeURIComponent(tag)}`}
@@ -82,6 +83,13 @@ export default function ParagraphPage() {
</Badge>
</>
))}
{
paragraph.source_url && (
<a href={paragraph.source_url}>
Goto Source
</a>
)
}
</Group>
</Group>

View File

@@ -1,4 +1,4 @@
import { Grid, Group } from "@mantine/core";
import { Container, Grid, Group } from "@mantine/core";
import { useContext, useEffect } from "react";
import { useLoaderData, useLocation, useParams } from "react-router";
@@ -30,12 +30,12 @@ export default function SearchPage() {
} else if (location.pathname.startsWith("/author/")) {
action = `Author ${param.author}`;
}
const title = `${action} Page 1`;
const title = `${action} Page ${page}`;
setTitle(title);
}, [page, location, param, setTitle]);
return (
<div>
<Container>
<Grid my="md">
{paragraphs.map((paragraph) => {
return (
@@ -46,6 +46,6 @@ export default function SearchPage() {
})}
</Grid>
<Group justify="center">{pagination}</Group>
</div>
</Container>
);
}

View File

@@ -8,4 +8,5 @@ declare interface Paragraph {
cover: string;
time: string;
tags: string[];
source_url?: string;
}