Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- Before starting a feature, skim an existing page or form with similar behavior and mirror the conventions—this codebase is intentionally conventional. Look for similar pages in `app/pages` and forms in `app/forms` to use as templates.
- `@oxide/api` is at `app/api` and `@oxide/api-mocks` is at `mock-api/index.ts`.
- The language server often has out of date errors. tsgo is extremely fast, so confirm errors that come from the language server by running `npm run tsc`
- Format with `npm run fmt` (oxfmt). Never use prettier directly—it is not the project formatter.
- Use Node.js 22+, then install deps and start the mock-backed dev server (skip if `npm run dev` is already running in another terminal):

```sh
Expand Down
6 changes: 5 additions & 1 deletion app/forms/anti-affinity-group-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,11 @@ export default function CreateAntiAffinityGroupForm() {
{ value: 'fail', label: 'Fail' },
]}
/>
<SideModalFormDocs docs={[docLinks.affinity]} />
<SideModalFormDocs
docs={[docLinks.affinity]}
apiOp="anti_affinity_group_create"
cliCmd="instance/anti-affinity/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/anti-affinity-group-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,11 @@ export default function EditAntiAffintyGroupForm() {
>
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.affinity]} />
<SideModalFormDocs
docs={[docLinks.affinity]}
apiOp="anti_affinity_group_update"
cliCmd="instance/anti-affinity/update"
/>
</SideModalForm>
)
}
2 changes: 1 addition & 1 deletion app/forms/disk-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ export function CreateDiskSideModalForm({
images={images}
areImagesLoading={areImagesLoading}
/>
<SideModalFormDocs docs={[docLinks.disks]} />
<SideModalFormDocs docs={[docLinks.disks]} apiOp="disk_create" cliCmd="disk/create" />
</SideModalForm>
)
}
Expand Down
6 changes: 5 additions & 1 deletion app/forms/external-subnet-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,11 @@ export default function CreateExternalSubnetSideModalForm() {
description="The subnet to reserve, e.g., 10.128.1.0/24"
/>
)}
<SideModalFormDocs docs={[docLinks.externalSubnets]} />
<SideModalFormDocs
docs={[docLinks.externalSubnets]}
apiOp="external_subnet_create"
cliCmd="external-subnet/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/external-subnet-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ export default function EditExternalSubnetSideModalForm() {
</PropertiesTable>
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.externalSubnets]} />
<SideModalFormDocs
docs={[docLinks.externalSubnets]}
apiOp="external_subnet_update"
cliCmd="external-subnet/update"
/>
</SideModalForm>
)
}
12 changes: 10 additions & 2 deletions app/forms/fleet-access.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@ export function FleetAccessAddUserSideModal({
control={form.control}
/>
<RoleRadioField name="roleName" control={form.control} scope="Fleet" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="system_policy_update"
cliCmd="system/policy/update"
/>
</SideModalForm>
)
}
Expand Down Expand Up @@ -122,7 +126,11 @@ export function FleetAccessEditUserSideModal({
}}
>
<RoleRadioField name="roleName" control={form.control} scope="Fleet" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="system_policy_update"
cliCmd="system/policy/update"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/floating-ip-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ export default function CreateFloatingIpSideModalForm() {
placeholder="Select a pool"
noItemsPlaceholder="No pools available"
/>
<SideModalFormDocs docs={[docLinks.floatingIps]} />
<SideModalFormDocs
docs={[docLinks.floatingIps]}
apiOp="floating_ip_create"
cliCmd="floating-ip/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/floating-ip-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,11 @@ export default function EditFloatingIpSideModalForm() {
</PropertiesTable>
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.floatingIps]} />
<SideModalFormDocs
docs={[docLinks.floatingIps]}
apiOp="floating_ip_update"
cliCmd="floating-ip/update"
/>
</SideModalForm>
)
}
5 changes: 4 additions & 1 deletion app/forms/idp/edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,10 @@ export default function EditIdpSideModalForm() {
control={form.control}
disabled
/>
<SideModalFormDocs docs={[docLinks.identityProviders]} />
<SideModalFormDocs
docs={[docLinks.identityProviders]}
apiOp="saml_identity_provider_view"
/>
</ReadOnlySideModalForm>
)
}
2 changes: 1 addition & 1 deletion app/forms/image-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export function EditImageSideModalForm({
<DescriptionField name="description" control={form.control} required disabled />
<TextField name="os" label="OS" control={form.control} required disabled />
<TextField name="version" control={form.control} required disabled />
<SideModalFormDocs docs={[docLinks.images]} />
<SideModalFormDocs docs={[docLinks.images]} apiOp="image_view" cliCmd="image/view" />
</ReadOnlySideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/image-from-snapshot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,11 @@ export default function CreateImageFromSnapshotSideModalForm() {
<DescriptionField name="description" control={form.control} required />
<TextField name="os" label="OS" control={form.control} required />
<TextField name="version" control={form.control} required />
<SideModalFormDocs docs={[docLinks.images]} />
<SideModalFormDocs
docs={[docLinks.images]}
apiOp="image_create"
cliCmd="image/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/image-upload.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,11 @@ export default function ImageCreate() {
/>
</Modal>
)}
<SideModalFormDocs docs={[docLinks.images]} />
<SideModalFormDocs
docs={[docLinks.images]}
apiOp="image_create"
cliCmd="image/create"
/>
</SideModalForm>
)
}
Expand Down
6 changes: 5 additions & 1 deletion app/forms/ip-pool-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,11 @@ export default function CreateIpPoolSideModalForm() {
]}
/>
*/}
<SideModalFormDocs docs={[docLinks.systemIpPools]} />
<SideModalFormDocs
docs={[docLinks.systemIpPools]}
apiOp="system_ip_pool_create"
cliCmd="system/networking/ip-pool/create"
/>
</SideModalForm>
)
}
Expand Down
6 changes: 5 additions & 1 deletion app/forms/ip-pool-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,11 @@ export default function EditIpPoolSideModalForm() {
<IpPoolVisibilityMessage />
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.systemIpPools]} />
<SideModalFormDocs
docs={[docLinks.systemIpPools]}
apiOp="system_ip_pool_update"
cliCmd="system/networking/ip-pool/update"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/ip-pool-range-add.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,11 @@ export default function IpPoolAddRange() {
control={form.control}
required
/>
<SideModalFormDocs docs={[docLinks.systemIpPools]} />
<SideModalFormDocs
docs={[docLinks.systemIpPools]}
apiOp="system_ip_pool_range_add"
cliCmd="system/networking/ip-pool/range/add"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/network-interface-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,11 @@ export function CreateNetworkInterfaceForm({
placeholder="Leave blank for auto-assignment"
/>
)}
<SideModalFormDocs docs={[docLinks.networkInterfaces, docLinks.vpcs]} />
<SideModalFormDocs
docs={[docLinks.networkInterfaces, docLinks.vpcs]}
apiOp="instance_network_interface_create"
cliCmd="instance/nic/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/network-interface-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,11 @@ export function EditNetworkInterfaceForm({
variant="info"
content={`This network interface supports ${supportedVersions} transit IPs.`}
/>
<SideModalFormDocs docs={[docLinks.networkInterfaces, docLinks.vpcs]} />
<SideModalFormDocs
docs={[docLinks.networkInterfaces, docLinks.vpcs]}
apiOp="instance_network_interface_update"
cliCmd="instance/nic/update"
/>
</SideModalForm>
)
}
12 changes: 10 additions & 2 deletions app/forms/project-access.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,11 @@ export function ProjectAccessAddUserSideModal({ onDismiss, policy }: AddRoleModa
control={form.control}
/>
<RoleRadioField name="roleName" control={form.control} scope="Project" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="project_policy_update"
cliCmd="project/policy/update"
/>
</SideModalForm>
)
}
Expand Down Expand Up @@ -123,7 +127,11 @@ export function ProjectAccessEditUserSideModal({
onDismiss={onDismiss}
>
<RoleRadioField name="roleName" control={form.control} scope="Project" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="project_policy_update"
cliCmd="project/policy/update"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/project-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,11 @@ export default function ProjectCreateSideModalForm() {
>
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.projects]} />
<SideModalFormDocs
docs={[docLinks.projects]}
apiOp="project_create"
cliCmd="project/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/project-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,11 @@ export default function EditProjectSideModalForm() {
>
<NameField name="name" control={form.control} />
<DescriptionField name="description" control={form.control} />
<SideModalFormDocs docs={[docLinks.projects]} />
<SideModalFormDocs
docs={[docLinks.projects]}
apiOp="project_update"
cliCmd="project/update"
/>
</SideModalForm>
)
}
12 changes: 10 additions & 2 deletions app/forms/silo-access.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,11 @@ export function SiloAccessAddUserSideModal({ onDismiss, policy }: AddRoleModalPr
control={form.control}
/>
<RoleRadioField name="roleName" control={form.control} scope="Silo" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="policy_update"
cliCmd="policy/update"
/>
</SideModalForm>
)
}
Expand Down Expand Up @@ -118,7 +122,11 @@ export function SiloAccessEditUserSideModal({
}}
>
<RoleRadioField name="roleName" control={form.control} scope="Silo" />
<SideModalFormDocs docs={[docLinks.access]} />
<SideModalFormDocs
docs={[docLinks.access]}
apiOp="policy_update"
cliCmd="policy/update"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/silo-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,11 @@ export default function CreateSiloSideModalForm() {
</div>
<FormDivider />
<TlsCertsField control={form.control} />
<SideModalFormDocs docs={[docLinks.systemSiloCreate, docLinks.systemSilo]} />
<SideModalFormDocs
docs={[docLinks.systemSiloCreate, docLinks.systemSilo]}
apiOp="silo_create"
cliCmd="silo/create"
/>
</SideModalForm>
)
}
Expand Down
6 changes: 5 additions & 1 deletion app/forms/snapshot-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,11 @@ export default function SnapshotCreate() {
required
control={form.control}
/>
<SideModalFormDocs docs={[docLinks.snapshots]} />
<SideModalFormDocs
docs={[docLinks.snapshots]}
apiOp="snapshot_create"
cliCmd="snapshot/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/ssh-key-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,11 @@ export function SSHKeyCreate({ onDismiss, message }: Props) {
control={form.control}
/>
{message}
<SideModalFormDocs docs={[docLinks.sshKeys]} />
<SideModalFormDocs
docs={[docLinks.sshKeys]}
apiOp="current_user_ssh_key_create"
cliCmd="current-user/ssh-key/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/ssh-key-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@ export default function EditSSHKeySideModalForm() {
disabled
/>
</div>
<SideModalFormDocs docs={[docLinks.sshKeys]} />
<SideModalFormDocs
docs={[docLinks.sshKeys]}
apiOp="current_user_ssh_key_view"
cliCmd="current-user/ssh-key/view"
/>
</ReadOnlySideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/subnet-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,11 @@ export default function CreateSubnetForm() {
control={form.control}
required
/>
<SideModalFormDocs docs={[docLinks.vpcs]} />
<SideModalFormDocs
docs={[docLinks.vpcs]}
apiOp="vpc_subnet_create"
cliCmd="vpc/subnet/create"
/>
</SideModalForm>
)
}
6 changes: 5 additions & 1 deletion app/forms/subnet-edit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,11 @@ export default function EditSubnetForm() {
control={form.control}
required
/>
<SideModalFormDocs docs={[docLinks.vpcs]} />
<SideModalFormDocs
docs={[docLinks.vpcs]}
apiOp="vpc_subnet_update"
cliCmd="vpc/subnet/update"
/>
</SideModalForm>
)
}
2 changes: 1 addition & 1 deletion app/forms/vpc-create.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export default function CreateVpcSideModalForm() {
<DescriptionField name="description" control={form.control} />
<NameField name="dnsName" label="DNS name" control={form.control} />
<TextField name="ipv6Prefix" label="IPV6 prefix" control={form.control} />
<SideModalFormDocs docs={[docLinks.vpcs]} />
<SideModalFormDocs docs={[docLinks.vpcs]} apiOp="vpc_create" cliCmd="vpc/create" />
</SideModalForm>
)
}
Loading
Loading