Skip to content

Commit 756faaa

Browse files
authored
Add docs links to more forms (#3052)
* add docs links to more forms, roll formdivider into the component * update relevant docs skill for component refactor * more links. the user WILL BE EDUCATED
1 parent cbfd675 commit 756faaa

35 files changed

+99
-46
lines changed

.claude/skills/add-relevant-docs/SKILL.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,27 +96,32 @@ import { docLinks } from '~/util/links'
9696
</PageHeader>
9797
```
9898

99-
### 5. Add ModalLinks to side modal forms
99+
### 5. Add SideModalFormDocs to side modal forms
100100

101-
Used at the bottom of `SideModalForm` and `ReadOnlySideModalForm` content, after a `FormDivider`.
101+
Used at the bottom of `SideModalForm` and `ReadOnlySideModalForm` content. The component renders a `FormDivider` automatically before the links.
102102

103103
**File**: `app/ui/lib/ModalLinks.tsx`
104104

105105
```tsx
106-
import { FormDivider } from '~/ui/lib/Divider'
106+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
107+
import { docLinks } from '~/util/links'
108+
109+
// Inside the form, after form fields:
110+
111+
;<SideModalFormDocs docs={[docLinks.someLink]} />
112+
```
113+
114+
For custom links not in `docLinks`, use `ModalLinks` and `ModalLink` directly:
115+
116+
```tsx
107117
import { ModalLink, ModalLinks } from '~/ui/lib/ModalLinks'
108118
import { links } from '~/util/links'
109119
110-
// Inside the form, after form fields:
111-
<FormDivider />
112-
<ModalLinks heading="Relevant docs">
120+
;<ModalLinks heading="Relevant docs">
113121
<ModalLink to={links.somePageDocs} label="Human-Readable Label" />
114-
<ModalLink to={links.anotherPageDocs} label="Another Label" />
115122
</ModalLinks>
116123
```
117124

118-
Note: `ModalLink` uses `links.*` (raw URLs), not `docLinks.*` (which are `{href, linkText}` objects for DocsPopover).
119-
120125
### 6. Write good microcopy
121126

122127
Guidelines:

app/forms/anti-affinity-group-create.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import { HL } from '~/components/HL'
1818
import { titleCrumb } from '~/hooks/use-crumbs'
1919
import { useProjectSelector } from '~/hooks/use-params'
2020
import { addToast } from '~/stores/toast'
21+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
22+
import { docLinks } from '~/util/links'
2123
import { pb } from '~/util/path-builder'
2224

2325
import { policyHelpText } from './affinity-util'
@@ -77,6 +79,7 @@ export default function CreateAntiAffinityGroupForm() {
7779
{ value: 'fail', label: 'Fail' },
7880
]}
7981
/>
82+
<SideModalFormDocs docs={[docLinks.affinity]} />
8083
</SideModalForm>
8184
)
8285
}

app/forms/anti-affinity-group-edit.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import {
2727
useAntiAffinityGroupSelector,
2828
} from '~/hooks/use-params'
2929
import { addToast } from '~/stores/toast'
30+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
31+
import { docLinks } from '~/util/links'
3032
import { pb } from '~/util/path-builder'
3133

3234
import { antiAffinityGroupView } from './affinity-util'
@@ -81,6 +83,7 @@ export default function EditAntiAffintyGroupForm() {
8183
>
8284
<NameField name="name" control={form.control} />
8385
<DescriptionField name="description" control={form.control} />
86+
<SideModalFormDocs docs={[docLinks.affinity]} />
8487
</SideModalForm>
8588
)
8689
}

app/forms/disk-create.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import { SideModalForm } from '~/components/form/SideModalForm'
3434
import { HL } from '~/components/HL'
3535
import { useProjectSelector } from '~/hooks/use-params'
3636
import { addToast } from '~/stores/toast'
37-
import { FormDivider } from '~/ui/lib/Divider'
3837
import { FieldLabel } from '~/ui/lib/FieldLabel'
3938
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
4039
import { Radio } from '~/ui/lib/Radio'
@@ -223,7 +222,6 @@ export function CreateDiskSideModalForm({
223222
images={images}
224223
areImagesLoading={areImagesLoading}
225224
/>
226-
<FormDivider />
227225
<SideModalFormDocs docs={[docLinks.disks]} />
228226
</SideModalForm>
229227
)

app/forms/floating-ip-create.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import { HL } from '~/components/HL'
2727
import { titleCrumb } from '~/hooks/use-crumbs'
2828
import { useProjectSelector } from '~/hooks/use-params'
2929
import { addToast } from '~/stores/toast'
30-
import { FormDivider } from '~/ui/lib/Divider'
3130
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
3231
import { ALL_ISH } from '~/util/consts'
3332
import { docLinks } from '~/util/links'
@@ -99,7 +98,6 @@ export default function CreateFloatingIpSideModalForm() {
9998
<NameField name="name" control={form.control} />
10099
<DescriptionField name="description" control={form.control} />
101100
<IpPoolSelector control={form.control} poolFieldName="pool" pools={unicastPools} />
102-
<FormDivider />
103101
<SideModalFormDocs docs={[docLinks.floatingIps]} />
104102
</SideModalForm>
105103
)

app/forms/floating-ip-edit.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ import { addToast } from '~/stores/toast'
2727
import { EmptyCell } from '~/table/cells/EmptyCell'
2828
import { IpPoolCell } from '~/table/cells/IpPoolCell'
2929
import { CopyableIp } from '~/ui/lib/CopyableIp'
30+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
3031
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
3132
import { ALL_ISH } from '~/util/consts'
33+
import { docLinks } from '~/util/links'
3234
import { pb } from '~/util/path-builder'
3335
import type * as PP from '~/util/path-params'
3436

@@ -115,6 +117,7 @@ export default function EditFloatingIpSideModalForm() {
115117
</PropertiesTable>
116118
<NameField name="name" control={form.control} />
117119
<DescriptionField name="description" control={form.control} />
120+
<SideModalFormDocs docs={[docLinks.floatingIps]} />
118121
</SideModalForm>
119122
)
120123
}

app/forms/idp/edit.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ import { ReadOnlySideModalForm } from '~/components/form/ReadOnlySideModalForm'
1818
import { titleCrumb } from '~/hooks/use-crumbs'
1919
import { getIdpSelector, useIdpSelector } from '~/hooks/use-params'
2020
import { FormDivider } from '~/ui/lib/Divider'
21+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
2122
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
2223
import { ResourceLabel, SideModal } from '~/ui/lib/SideModal'
24+
import { docLinks } from '~/util/links'
2325
import { pb } from '~/util/path-builder'
2426

2527
export async function clientLoader({ params }: LoaderFunctionArgs) {
@@ -115,6 +117,7 @@ export default function EditIdpSideModalForm() {
115117
control={form.control}
116118
disabled
117119
/>
120+
<SideModalFormDocs docs={[docLinks.identityProviders]} />
118121
</ReadOnlySideModalForm>
119122
)
120123
}

app/forms/image-edit.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import { DescriptionField } from '~/components/form/fields/DescriptionField'
1515
import { NameField } from '~/components/form/fields/NameField'
1616
import { TextField } from '~/components/form/fields/TextField'
1717
import { ReadOnlySideModalForm } from '~/components/form/ReadOnlySideModalForm'
18+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
1819
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
1920
import { ResourceLabel } from '~/ui/lib/SideModal'
21+
import { docLinks } from '~/util/links'
2022
import { capitalize } from '~/util/str'
2123
import { bytesToGiB } from '~/util/units'
2224

@@ -58,6 +60,7 @@ export function EditImageSideModalForm({
5860
<DescriptionField name="description" control={form.control} required disabled />
5961
<TextField name="os" label="OS" control={form.control} required disabled />
6062
<TextField name="version" control={form.control} required disabled />
63+
<SideModalFormDocs docs={[docLinks.images]} />
6164
</ReadOnlySideModalForm>
6265
)
6366
}

app/forms/image-from-snapshot.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import { HL } from '~/components/HL'
2626
import { titleCrumb } from '~/hooks/use-crumbs'
2727
import { getProjectSnapshotSelector, useProjectSnapshotSelector } from '~/hooks/use-params'
2828
import { addToast } from '~/stores/toast'
29+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
2930
import { PropertiesTable } from '~/ui/lib/PropertiesTable'
31+
import { docLinks } from '~/util/links'
3032
import { pb } from '~/util/path-builder'
3133
import type * as PP from '~/util/path-params'
3234

@@ -100,6 +102,7 @@ export default function CreateImageFromSnapshotSideModalForm() {
100102
<DescriptionField name="description" control={form.control} required />
101103
<TextField name="os" label="OS" control={form.control} required />
102104
<TextField name="version" control={form.control} required />
105+
<SideModalFormDocs docs={[docLinks.images]} />
103106
</SideModalForm>
104107
)
105108
}

app/forms/image-upload.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import { titleCrumb } from '~/hooks/use-crumbs'
4141
import { useProjectSelector } from '~/hooks/use-params'
4242
import { Message } from '~/ui/lib/Message'
4343
import { Modal } from '~/ui/lib/Modal'
44+
import { SideModalFormDocs } from '~/ui/lib/ModalLinks'
4445
import { Progress } from '~/ui/lib/Progress'
4546
import { Spinner } from '~/ui/lib/Spinner'
4647
import { anySignal } from '~/util/abort'
@@ -570,18 +571,6 @@ export default function ImageCreate() {
570571
submitError={formError}
571572
submitLabel={allDone ? 'Done' : 'Upload image'}
572573
>
573-
<Message
574-
variant="info"
575-
content={
576-
<>
577-
Read the{' '}
578-
<a target="_blank" rel="noreferrer" href={docLinks.images.href}>
579-
{docLinks.images.linkText}
580-
</a>{' '}
581-
guide to learn more about image requirements.
582-
</>
583-
}
584-
/>
585574
<NameField name="imageName" label="Name" control={form.control} />
586575
<DescriptionField
587576
name="imageDescription"
@@ -691,6 +680,7 @@ export default function ImageCreate() {
691680
/>
692681
</Modal>
693682
)}
683+
<SideModalFormDocs docs={[docLinks.images]} />
694684
</SideModalForm>
695685
)
696686
}

0 commit comments

Comments
 (0)