Skip to content

Commit bf7d34f

Browse files
committed
frontend: Support links
1 parent e448485 commit bf7d34f

File tree

6 files changed

+33
-43
lines changed

6 files changed

+33
-43
lines changed

codersdk/deployment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ type SupportConfig struct {
285285
type LinkConfig struct {
286286
Name string `json:"name"`
287287
Target string `json:"target"`
288-
Icon string `json:"icon,omitempty"`
288+
Icon string `json:"icon"`
289289
}
290290

291291
type Flaggable interface {

site/src/api/typesGenerated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ export interface License {
440440
export interface LinkConfig {
441441
readonly name: string
442442
readonly target: string
443-
readonly icon?: string
443+
readonly icon: string
444444
}
445445

446446
// From codersdk/deployment.go

site/src/components/Navbar/Navbar.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const Navbar: FC = () => {
2222
user={me}
2323
logo_url={appearance.config.logo_url}
2424
buildInfo={buildInfo}
25+
supportLinks={appearance.config.support_links}
2526
onSignOut={onSignOut}
2627
canViewAuditLog={canViewAuditLog}
2728
canViewDeployment={canViewDeployment}

site/src/components/NavbarView/NavbarView.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface NavbarViewProps {
1919
logo_url?: string
2020
user?: TypesGen.User
2121
buildInfo?: TypesGen.BuildInfoResponse
22+
supportLinks?: TypesGen.LinkConfig[]
2223
onSignOut: () => void
2324
canViewAuditLog: boolean
2425
canViewDeployment: boolean
@@ -86,6 +87,7 @@ export const NavbarView: React.FC<React.PropsWithChildren<NavbarViewProps>> = ({
8687
user,
8788
logo_url,
8889
buildInfo,
90+
supportLinks,
8991
onSignOut,
9092
canViewAuditLog,
9193
canViewDeployment,
@@ -147,6 +149,7 @@ export const NavbarView: React.FC<React.PropsWithChildren<NavbarViewProps>> = ({
147149
<UserDropdown
148150
user={user}
149151
buildInfo={buildInfo}
152+
supportLinks={supportLinks}
150153
onSignOut={onSignOut}
151154
/>
152155
)}

site/src/components/UserDropdown/UsersDropdown.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import { UserDropdownContent } from "../UserDropdownContent/UserDropdownContent"
1313
export interface UserDropdownProps {
1414
user: TypesGen.User
1515
buildInfo?: TypesGen.BuildInfoResponse
16+
supportLinks?: TypesGen.LinkConfig[]
1617
onSignOut: () => void
1718
}
1819

1920
export const UserDropdown: FC<PropsWithChildren<UserDropdownProps>> = ({
2021
buildInfo,
2122
user,
23+
supportLinks,
2224
onSignOut,
2325
}: UserDropdownProps) => {
2426
const styles = useStyles()
@@ -69,6 +71,7 @@ export const UserDropdown: FC<PropsWithChildren<UserDropdownProps>> = ({
6971
<UserDropdownContent
7072
user={user}
7173
buildInfo={buildInfo}
74+
supportLinks={supportLinks}
7275
onPopoverClose={onPopoverClose}
7376
onSignOut={onSignOut}
7477
/>

site/src/components/UserDropdownContent/UserDropdownContent.tsx

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,19 @@ export const Language = {
2525
export interface UserDropdownContentProps {
2626
user: TypesGen.User
2727
buildInfo?: TypesGen.BuildInfoResponse
28+
supportLinks?: TypesGen.LinkConfig[]
2829
onPopoverClose: () => void
2930
onSignOut: () => void
3031
}
3132

3233
export const UserDropdownContent: FC<UserDropdownContentProps> = ({
3334
buildInfo,
3435
user,
36+
supportLinks,
3537
onPopoverClose,
3638
onSignOut,
3739
}) => {
3840
const styles = useStyles()
39-
const githubUrl = `https://github.com/coder/coder/issues/new?labels=needs+grooming&body=${encodeURIComponent(`Version: [\`${buildInfo?.version}\`](${buildInfo?.external_url})
40-
41-
<!--- Ask a question or leave feedback! -->`)}`
42-
const discordUrl = `https://coder.com/chat?utm_source=coder&utm_medium=coder&utm_campaign=server-footer`
4341

4442
return (
4543
<div>
@@ -64,43 +62,28 @@ export const UserDropdownContent: FC<UserDropdownContentProps> = ({
6462

6563
<Divider className={styles.divider} />
6664

67-
<a
68-
href="https://coder.com/docs/coder-oss"
69-
target="_blank"
70-
rel="noreferrer"
71-
className={styles.link}
72-
>
73-
<MenuItem className={styles.menuItem} onClick={onPopoverClose}>
74-
<DocsIcon className={styles.menuItemIcon} />
75-
<span className={styles.menuItemText}>{Language.docsLabel}</span>
76-
</MenuItem>
77-
</a>
78-
79-
<a
80-
href={githubUrl}
81-
target="_blank"
82-
rel="noreferrer"
83-
className={styles.link}
84-
>
85-
<MenuItem className={styles.menuItem} onClick={onPopoverClose}>
86-
<BugIcon className={styles.menuItemIcon} />
87-
<span className={styles.menuItemText}>{Language.bugLabel}</span>
88-
</MenuItem>
89-
</a>
90-
91-
<a
92-
href={discordUrl}
93-
target="_blank"
94-
rel="noreferrer"
95-
className={styles.link}
96-
>
97-
<MenuItem className={styles.menuItem} onClick={onPopoverClose}>
98-
<ChatIcon className={styles.menuItemIcon} />
99-
<span className={styles.menuItemText}>{Language.discordLabel}</span>
100-
</MenuItem>
101-
</a>
102-
103-
<Divider className={styles.divider} />
65+
<>
66+
{ supportLinks && supportLinks.map((link) => (
67+
<a
68+
href={link.target}
69+
key={link.name}
70+
target="_blank"
71+
rel="noreferrer"
72+
className={styles.link}
73+
>
74+
<MenuItem className={styles.menuItem} onClick={onPopoverClose}>
75+
{link.icon === "bug" && ( <BugIcon className={styles.menuItemIcon}/> )}
76+
{link.icon === "chat" && ( <ChatIcon className={styles.menuItemIcon}/> )}
77+
{link.icon === "docs" && ( <DocsIcon className={styles.menuItemIcon}/> )}
78+
<span className={styles.menuItemText}>{link.name}</span>
79+
</MenuItem>
80+
</a>
81+
)) }
82+
</>
83+
84+
{supportLinks && (
85+
<Divider className={styles.divider} />
86+
)}
10487

10588
<Stack className={styles.info} spacing={0}>
10689
<a

0 commit comments

Comments
 (0)