From 53839cd8804e70ef07e0314081bcccf665f50a72 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 15 Jan 2024 16:32:04 +0100 Subject: [PATCH 1/2] feat: support links with custom icons --- coderd/apidoc/docs.go | 7 ++++++- coderd/apidoc/swagger.json | 3 ++- codersdk/deployment.go | 2 +- docs/api/enterprise.md | 2 +- docs/api/general.md | 2 +- docs/api/schemas.md | 20 +++++++++++++------ .../UserDropdown/UserDropdown.stories.tsx | 1 + .../UserDropdown/UserDropdownContent.tsx | 18 ++++++++++++++--- 8 files changed, 41 insertions(+), 14 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 1fcdd45da7381..bb29511d86a1b 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9530,7 +9530,12 @@ const docTemplate = `{ "type": "object", "properties": { "icon": { - "type": "string" + "type": "string", + "enum": [ + "bug", + "chat", + "docs" + ] }, "name": { "type": "string" diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index cbf49d80568b6..8ccff51017ee1 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8556,7 +8556,8 @@ "type": "object", "properties": { "icon": { - "type": "string" + "type": "string", + "enum": ["bug", "chat", "docs"] }, "name": { "type": "string" diff --git a/codersdk/deployment.go b/codersdk/deployment.go index d6d34393342f1..33fd584bc7f49 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -1890,7 +1890,7 @@ type SupportConfig struct { type LinkConfig struct { Name string `json:"name" yaml:"name"` Target string `json:"target" yaml:"target"` - Icon string `json:"icon" yaml:"icon"` + Icon string `json:"icon" yaml:"icon" enums:"bug,chat,docs"` } // DeploymentOptionsWithoutSecrets returns a copy of the OptionSet with secret values omitted. diff --git a/docs/api/enterprise.md b/docs/api/enterprise.md index d3729c22d7b70..11f463ad4e4f1 100644 --- a/docs/api/enterprise.md +++ b/docs/api/enterprise.md @@ -28,7 +28,7 @@ curl -X GET http://coder-server:8080/api/v2/appearance \ }, "support_links": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } diff --git a/docs/api/general.md b/docs/api/general.md index 303b36a1a26d6..ba24ecce01316 100644 --- a/docs/api/general.md +++ b/docs/api/general.md @@ -343,7 +343,7 @@ curl -X GET http://coder-server:8080/api/v2/deployment/config \ "links": { "value": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 6e4df6d796cdc..5d2409372824d 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -717,7 +717,7 @@ _None_ { "value": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } @@ -1024,7 +1024,7 @@ _None_ }, "support_links": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } @@ -2277,7 +2277,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "links": { "value": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } @@ -2655,7 +2655,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "links": { "value": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } @@ -3359,7 +3359,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in ```json { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } @@ -3373,6 +3373,14 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | `name` | string | false | | | | `target` | string | false | | | +#### Enumerated Values + +| Property | Value | +| -------- | ------ | +| `icon` | `bug` | +| `icon` | `chat` | +| `icon` | `docs` | + ## codersdk.LogLevel ```json @@ -4455,7 +4463,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "links": { "value": [ { - "icon": "string", + "icon": "bug", "name": "string", "target": "string" } diff --git a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx index 394d4846e2a2f..75aceb5beea3d 100644 --- a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx +++ b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx @@ -13,6 +13,7 @@ const meta: Meta = { { icon: "docs", name: "Documentation", target: "" }, { icon: "bug", name: "Report a bug", target: "" }, { icon: "chat", name: "Join the Coder Discord", target: "" }, + { icon: "/icon/aws.svg", name: "Amazon Web Services", target: "" }, ], }, }; diff --git a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx index af3ca9061e324..39567dc613390 100644 --- a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx +++ b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx @@ -17,6 +17,7 @@ import { type Theme, } from "@emotion/react"; import { usePopover } from "components/Popover/Popover"; +import { ExternalImage } from "components/ExternalImage/ExternalImage"; export const Language = { accountLabel: "Account", @@ -98,6 +99,19 @@ export const UserDropdownContent: FC = ({ popover.setIsOpen(false); }; + const renderMenuIcon = (icon: string): JSX.Element => { + switch (icon) { + case "bug": + return ; + case "chat": + return ; + case "docs": + return ; + default: + return ; + } + }; + return (
@@ -131,9 +145,7 @@ export const UserDropdownContent: FC = ({ css={styles.link} > - {link.icon === "bug" && } - {link.icon === "chat" && } - {link.icon === "docs" && } + {renderMenuIcon(link.icon)} {link.name} From 671b536ca4433003a349b9843c4cc040fa4af3d6 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 15 Jan 2024 16:41:42 +0100 Subject: [PATCH 2/2] fmt --- .../Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx index 39567dc613390..fda9898f6deff 100644 --- a/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx +++ b/site/src/components/Dashboard/Navbar/UserDropdown/UserDropdownContent.tsx @@ -108,7 +108,12 @@ export const UserDropdownContent: FC = ({ case "docs": return ; default: - return ; + return ( + + ); } };