next.js/examples/with-edgedb/pages/drafts.tsx
drafts.tsx63 lines1.4 KB
import React from "react";
import { GetServerSideProps } from "next";
import Layout from "../components/Layout";
import Post from "../components/Post";
import { PostProps } from "./blog/[id]";
import { client, e } from "../client";

type Props = {
  drafts: PostProps[];
};

const Drafts: React.FC<Props> = (props) => {
  return (
    <Layout>
      <div className="page">
        <h1>Drafts</h1>
        <main>
          {props.drafts.length
            ? props.drafts.map((post) => (
                <div key={post.id} className="post">
                  <Post post={post} />
                </div>
              ))
            : "No drafts yet."}
        </main>
      </div>
      <style jsx>{`
        .post {
          transition: box-shadow 0s ease-in;
          border: 2px solid #eee;
          border-radius: 8px;
        }

        .post:hover {
          box-shadow: 0px 2px 8px #ccc;
          border: 2px solid #727272;
        }

        .post + .post {
          margin-top: 1rem;
        }
      `}</style>
    </Layout>
  );
};

export const getServerSideProps: GetServerSideProps = async () => {
  const drafts = await e
    .select(e.Post, (post) => ({
      id: true,
      title: true,
      content: true,
      authorName: true,
      filter: e.op("not", e.op("exists", post.published)),
    }))
    .run(client);
  return {
    props: { drafts },
  };
};

export default Drafts;
Quest for Codev2.0.0
/
SIGN IN