NewIssue.tsx
⎇
Raw
1import type { RepositoryRow } from "../../db/index.ts";
2import type { SessionUser } from "../../middleware/session.ts";
3import { Layout } from "../layout.tsx";
4import { RepoHeader } from "../repos/RepoHeader.tsx";
5import { RepoNav } from "../repos/RepoNav.tsx";
6
7interface NewIssueProps {
8 user: SessionUser;
9 repo: RepositoryRow;
10 error?: string;
11}
12
13export function NewIssue({ user, repo, error }: NewIssueProps) {
14 return (
15 <Layout user={user} title={`New issue — ${repo.name}`}>
16 <div class="container container-narrow">
17 <RepoHeader repo={repo} />
18 <RepoNav repo={repo} active="issues" user={user} />
19 <h2 class="section-title">New issue</h2>
20 {error && <p class="form-error">{error}</p>}
21 <form
22 method="POST"
23 action={`/${repo.name}/issues`}
24 class="form-card"
25 >
26 <div class="form-group">
27 <label for="title">Title</label>
28 <input
29 id="title"
30 name="title"
31 type="text"
32 required
33 placeholder="Short, descriptive title"
34 />
35 </div>
36 <div class="form-group">
37 <label for="body">
38 Description{" "}
39 <span class="text-muted">(Markdown supported)</span>
40 </label>
41 <textarea
42 id="body"
43 name="body"
44 rows="10"
45 placeholder="Describe the issue..."
46 />
47 </div>
48 <div class="form-actions">
49 <button type="submit" class="btn btn-primary">
50 Submit issue
51 </button>
52 <a href={`/${repo.name}/issues`} class="btn btn-ghost">
53 Cancel
54 </a>
55 </div>
56 </form>
57 </div>
58 </Layout>
59 );
60}
61