feat: home page.
This commit is contained in:
parent
d22f8075a2
commit
4e14860d34
12
commons/graphql/queries.ts
Normal file
12
commons/graphql/queries.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import gql from "graphql-tag";
|
||||||
|
|
||||||
|
export const ARTICLE_FOR_HOME = gql`
|
||||||
|
query ArticlesForHome {
|
||||||
|
articles {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
content
|
||||||
|
publishedAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
@ -2,5 +2,15 @@
|
|||||||
@apply flex;
|
@apply flex;
|
||||||
}
|
}
|
||||||
.sidebar {
|
.sidebar {
|
||||||
@apply md:w-64 w-32;
|
@apply md:w-64 w-32 flex-none;
|
||||||
|
}
|
||||||
|
.primary {
|
||||||
|
@apply flex-auto;
|
||||||
|
@apply bg-gray-100 text-gray-700;
|
||||||
|
.wrapper {
|
||||||
|
@apply mx-auto max-w-screen-xl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.pageHeader {
|
||||||
|
@apply p-3 bg-gray-50 flex justify-between;
|
||||||
}
|
}
|
@ -1,16 +1,43 @@
|
|||||||
import '../styles/globals.css'
|
import "../styles/globals.css";
|
||||||
import "tailwindcss/tailwind.css";
|
import "tailwindcss/tailwind.css";
|
||||||
import React from 'react';
|
import React from "react";
|
||||||
import { GlobalSidebar } from '../components/layouts/global-sidebar';
|
import { GlobalSidebar } from "../components/layouts/global-sidebar";
|
||||||
import styles from './_app.module.css';
|
import styles from "./_app.module.css";
|
||||||
|
import { ApolloProvider } from "@apollo/client";
|
||||||
|
import { client } from "../commons/graphql/client";
|
||||||
|
|
||||||
function MyApp({ Component, pageProps }) {
|
function MyApp({ Component, pageProps }) {
|
||||||
return (
|
return (
|
||||||
|
<ApolloProvider client={client}>
|
||||||
<div className={styles.page}>
|
<div className={styles.page}>
|
||||||
<GlobalSidebar className={styles.sidebar} />
|
<GlobalSidebar className={styles.sidebar} />
|
||||||
|
<div className={styles.primary}>
|
||||||
|
<header className={styles.pageHeader}>
|
||||||
|
<h1>{"Ivan Li 的个人博客"}</h1>
|
||||||
|
<div className={styles.actions}>
|
||||||
|
<button onClick={() => switchTheme("light")}>亮色</button>
|
||||||
|
<button onClick={() => switchTheme("dark")}>暗色</button>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div className={styles.wrapper}>
|
||||||
<Component {...pageProps} />
|
<Component {...pageProps} />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ApolloProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default MyApp
|
function switchTheme(mode: "light" | "dark" | "auto") {
|
||||||
|
if (mode === "auto") {
|
||||||
|
mode = "light";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode === "dark") {
|
||||||
|
document.documentElement.classList.add("dark");
|
||||||
|
} else {
|
||||||
|
document.documentElement.classList.remove("dark");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MyApp;
|
||||||
|
17
pages/index.module.css
Normal file
17
pages/index.module.css
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
.index {
|
||||||
|
ol {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
@apply my-2 mx-4 px-3 overflow-hidden;
|
||||||
|
@apply rounded-md shadow-sm hover:shadow;
|
||||||
|
@apply bg-gray-50 hover:bg-white;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
@apply text-lg my-2;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
@apply text-sm text-gray-600 leading-6 my-2;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,23 @@
|
|||||||
import styles from '../styles/home.module.css';
|
import { useQuery } from '@apollo/client';
|
||||||
|
import { Article } from '../commons/graphql/generated';
|
||||||
|
import { ARTICLE_FOR_HOME } from '../commons/graphql/queries';
|
||||||
|
import styles from './index.module.css';
|
||||||
|
|
||||||
export default function Index() {
|
export default function Index() {
|
||||||
return <main className={styles.test}>TEST</main>;
|
const { data, loading } = useQuery<{articles: Article[]}>(ARTICLE_FOR_HOME);
|
||||||
|
|
||||||
|
return <main className={styles.index}>
|
||||||
|
<ol>
|
||||||
|
{
|
||||||
|
data?.articles?.map(article => <Item article={article} key={article.id} />)
|
||||||
|
}
|
||||||
|
</ol>
|
||||||
|
</main>;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Item({article}: {article: Article}) {
|
||||||
|
return <li className={styles.item}>
|
||||||
|
<h2 className={styles.title}>{article.title}</h2>
|
||||||
|
<p className={styles.description}>{article.content}</p>
|
||||||
|
</li>
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user