|
1 | 1 | <script lang="ts"> |
2 | 2 | import { page } from '$app/stores' |
3 | 3 |
|
| 4 | + import scriptData from '../../lib/lib/script-data.json' |
| 5 | + import type { ScriptData } from '../../lib/types/script-data' |
| 6 | +
|
4 | 7 | import FormEntity from '@nick-mazuk/ui-svelte/src/form/form-entity/form-entity.svelte' |
5 | 8 | import EmailInput from '@nick-mazuk/ui-svelte/src/form/inputs/email-input/email-input.svelte' |
| 9 | + import NameInput from '@nick-mazuk/ui-svelte/src/form/inputs/name-input/name-input.svelte' |
6 | 10 | import TextInput from '@nick-mazuk/ui-svelte/src/form/inputs/text-input/text-input.svelte' |
| 11 | + import Select from '@nick-mazuk/ui-svelte/src/form/inputs/select/select.svelte' |
7 | 12 |
|
8 | 13 | import Seo from '@nick-mazuk/ui-svelte/src/utilities/seo/seo.svelte' |
9 | 14 | import Spacer from '@nick-mazuk/ui-svelte/src/utilities/spacer/spacer.svelte' |
10 | 15 |
|
11 | 16 | import luaLogo from '$lib/assets/images/lua-logo.png' |
| 17 | + import type { HandleSubmit } from '@nick-mazuk/ui-svelte/src/form' |
| 18 | + import Note from '@nick-mazuk/ui-svelte/src/elements/note/note.svelte' |
| 19 | +
|
| 20 | + const scripts: ScriptData[] = scriptData |
| 21 | + let issueUrl = '' |
| 22 | +
|
| 23 | + const handleSubmit: HandleSubmit = async (data) => { |
| 24 | + const response = await fetch('/api/create-issue', { |
| 25 | + method: 'post', |
| 26 | + body: JSON.stringify(data), |
| 27 | + }) |
| 28 | + const json = await response.json() |
| 29 | +
|
| 30 | + if (typeof json.url === 'string') issueUrl = json.url |
| 31 | +
|
| 32 | + return response.status === 200 |
| 33 | + } |
12 | 34 | </script> |
13 | 35 |
|
14 | 36 | <Seo |
|
29 | 51 | <FormEntity |
30 | 52 | title="Report an issue" |
31 | 53 | primaryAction="Submit" |
| 54 | + handleSubmit="{handleSubmit}" |
32 | 55 | description="Tell us about an issue you're having. Everything you submit will be publically available because this project is open source and we use GitHub to keep track of everything. This form will simply create an issue on GitHub without you needing a GitHub account." |
| 56 | + success="Submitted successfully" |
| 57 | + resetOnSubmit |
33 | 58 | > |
34 | | - <TextInput /> |
| 59 | + <TextInput |
| 60 | + label="Describe your issue, steps to reproduce it, and expected behavor" |
| 61 | + name="description" |
| 62 | + placeholder="{`I encountered this.\n\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\nI expected this to happen.`}" |
| 63 | + type="textarea" |
| 64 | + defaultValue="IGNORE. This is a test for a new issue reporting system for the JW Lua scripts website. The page will allow users without GitHub accounts to create a GitHub issue like this one." |
| 65 | + maxCharacters="{1000}" |
| 66 | + /> |
| 67 | + <Select label="Finale version" name="finale" defaultValue="Finale v27"> |
| 68 | + <option value="Finale v27">Finale v27</option> |
| 69 | + <option value="Finale v26">Finale v26</option> |
| 70 | + <option value="Finale v25">Finale v25</option> |
| 71 | + <option value="Finale 2014.5">Finale 2014.5</option> |
| 72 | + <option value="Finale 2014">Finale 2014</option> |
| 73 | + <option value="Finale below 2014">Finale below 2014</option> |
| 74 | + </Select> |
| 75 | + <Select label="Operating system" name="os" defaultValue="macOS 12"> |
| 76 | + <option value="macOS 12">macOS 12: Monterey</option> |
| 77 | + <option value="macOS 11">macOS 11: Big Sur</option> |
| 78 | + <option value="macOS 10.15">macOS 10.15: Catalina</option> |
| 79 | + <option value="macOS 10.14">macOS 10.14: Mojave</option> |
| 80 | + <option value="macOS < 10.14">macOS below 10.14</option> |
| 81 | + <option value="Windows 11">Windows 11</option> |
| 82 | + <option value="Windows 10">Windows 10</option> |
| 83 | + <option value="Windows 8">Windows 8</option> |
| 84 | + <option value="Windows 7">Windows 7</option> |
| 85 | + </Select> |
| 86 | + <Select label="Script name" name="script" defaultValue="n/a"> |
| 87 | + <option value="n/a">Not applicable</option> |
| 88 | + {#each scripts as script} |
| 89 | + <option value="{script.fileName}">{script.name}</option> |
| 90 | + {/each} |
| 91 | + </Select> |
| 92 | + <NameInput optional helpText="This will be public" /> |
35 | 93 | <EmailInput |
36 | | - helpText="This will be public, we will only use it to contact you if we need more info or to let you know when it's resolved" |
| 94 | + helpText="This will be public, we will only use it to contact you if needed" |
37 | 95 | optional |
38 | 96 | /> |
39 | 97 | </FormEntity> |
| 98 | + {#if issueUrl} |
| 99 | + <Spacer /> |
| 100 | + <Note label="Success" variant="success"> |
| 101 | + Your issue is created. You can view it at |
| 102 | + <a href="{issueUrl}" target="_blank" rel="noreferrer" class="border-b border-success"> |
| 103 | + {issueUrl} |
| 104 | + </a> |
| 105 | + </Note> |
| 106 | + {/if} |
40 | 107 | </main> |
0 commit comments