History

Use Microsoft product icons in picker

Rhys Sullivan committed 4 months ago

Commit dcae4981 parent 0f656f74 files · +30 −1Browse files

Unified · Split

4 files
  1. e2e/scenarios/provider-plugins-ui.test.ts +2 −0
  2. packages/plugins/microsoft/src/react/MicrosoftScopePicker.tsx +10 −1
  3. packages/plugins/microsoft/src/sdk/presets.test.ts +6 −0
  4. packages/plugins/microsoft/src/sdk/presets.ts +12 −0
e2e/scenarios/provider-plugins-ui.test.ts+2−0
@@ -51,6 +51,8 @@ scenario( · 50 unmodified lines
5151 await page.getByText("Customize Microsoft Graph").waitFor();
5252 await page.getByText("Outlook Mail").waitFor();
5353 await page.getByText("OneDrive Files").waitFor();
54+ await page.locator('img[src*="svgl.app/library/microsoft-outlook.svg"]').first().waitFor();
55+ await page.locator('img[src*="svgl.app/library/microsoft-onedrive.svg"]').waitFor();
5456 await page.getByRole("button", { name: /View scopes/ }).click();
5557 await page.getByText("offline_access").waitFor();
5658 await page.getByText("Mail.ReadWrite").waitFor();
packages/plugins/microsoft/src/react/MicrosoftScopePicker.tsx+10−1
@@ -1,5 +1,10 @@
11 import { useMemo, useState } from "react";
2−import { ChevronDownIcon, PlusIcon, ShieldAlertIcon, XIcon } from "lucide-react";
2+import {
3+ ChevronDownIcon,
4+ PlusIcon,
5+ ShieldAlertIcon,
6+ XIcon,
7+} from "lucide-react";
38
49 import { cn } from "@executor-js/react/lib/utils";
510 import { Badge } from "@executor-js/react/components/badge";
@@ -12,6 +17,7 @@ import { · 6 unmodified lines
1217 } from "@executor-js/react/components/collapsible";
1318 import { FieldLabel } from "@executor-js/react/components/field";
1419 import { Input } from "@executor-js/react/components/input";
20+import { IntegrationFavicon } from "@executor-js/react/components/integration-favicon";
1521
1622 import {
1723 microsoftGraphScopePresets,
@@ -56,6 +62,9 @@ const ScopeRow = ({ · 38 unmodified lines
5662 )}
5763 >
5864 <Checkbox checked={checked} onCheckedChange={(next) => onToggle(next === true)} />
65+ <div className="shrink-0">
66+ <IntegrationFavicon icon={preset.icon} size={16} />
67+ </div>
5968 <div className="min-w-0 flex-1">
6069 <div className="flex min-w-0 items-center gap-2">
6170 <span className="truncate text-sm font-medium text-foreground">{preset.name}</span>
packages/plugins/microsoft/src/sdk/presets.test.ts+6−0
@@ -29,4 +29,10 @@ describe("Microsoft Graph scope presets", () => { · 28 unmodified lines
2929 expect(microsoftGraphExactPathsForPresetIds(["profile"])).toContain("/me");
3030 expect(microsoftGraphPathPrefixesForPresetIds(["mail"])).toContain("/me/messages");
3131 });
32+
33+ it("declares product icons for each workload", () => {
34+ for (const preset of microsoftGraphScopePresets) {
35+ expect(preset.icon).toMatch(/^https:\/\/svgl\.app\/library\/.+\.svg$/);
36+ }
37+ });
3238 });
packages/plugins/microsoft/src/sdk/presets.ts+12−0
@@ -12,6 +12,7 @@ export interface MicrosoftGraphScopePreset { · 11 unmodified lines
1212 readonly id: string;
1313 readonly name: string;
1414 readonly summary: string;
15+ readonly icon?: string;
1516 readonly scopes: readonly string[];
1617 readonly exactPaths?: readonly string[];
1718 readonly pathPrefixes?: readonly string[];
@@ -20,6 +21,7 @@ export interface MicrosoftGraphScopePreset { · 2 unmodified lines
2021 }
2122
2223 const MICROSOFT_ICON = "https://www.microsoft.com/favicon.ico";
24+const svglIcon = (name: string) => `https://svgl.app/library/${name}.svg`;
2325
2426 export const MICROSOFT_GRAPH_OPENAPI_URL =
2527 "https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml";
@@ -46,6 +48,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 20 unmodified lines
4648 id: "profile",
4749 name: "Profile",
4850 summary: "Signed-in user profile and photo.",
51+ icon: svglIcon("microsoft"),
4952 scopes: ["User.Read"],
5053 exactPaths: ["/me", "/me/photo", "/me/photo/$value"],
5154 featured: true,
@@ -55,6 +58,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 3 unmodified lines
5558 id: "mail",
5659 name: "Outlook Mail",
5760 summary: "Messages, folders, attachments, and send mail.",
61+ icon: svglIcon("microsoft-outlook"),
5862 scopes: ["Mail.ReadWrite", "Mail.Send"],
5963 pathPrefixes: [
6064 "/me/messages",
@@ -71,6 +75,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 10 unmodified lines
7175 id: "calendar",
7276 name: "Outlook Calendar",
7377 summary: "Calendars, events, and scheduling.",
78+ icon: svglIcon("microsoft-outlook"),
7479 scopes: ["Calendars.ReadWrite"],
7580 pathPrefixes: [
7681 "/me/calendar",
@@ -89,6 +94,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 12 unmodified lines
8994 id: "files",
9095 name: "OneDrive Files",
9196 summary: "Drives, files, folders, sharing links, and permissions.",
97+ icon: svglIcon("microsoft-onedrive"),
9298 scopes: ["Files.ReadWrite.All"],
9399 pathPrefixes: ["/me/drive", "/users/{user-id}/drive", "/drives", "/shares"],
94100 featured: true,
@@ -98,6 +104,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 3 unmodified lines
98104 id: "excel",
99105 name: "Excel Workbooks",
100106 summary: "Workbook tables, worksheets, ranges, charts, and sessions.",
107+ icon: svglIcon("microsoft-excel"),
101108 scopes: ["Files.ReadWrite.All"],
102109 pathPrefixes: [
103110 "/me/drive/items/{driveItem-id}/workbook",
@@ -110,6 +117,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 6 unmodified lines
110117 id: "contacts",
111118 name: "Outlook Contacts",
112119 summary: "Contacts and contact folders.",
120+ icon: svglIcon("microsoft-outlook"),
113121 scopes: ["Contacts.ReadWrite"],
114122 pathPrefixes: [
115123 "/me/contacts",
@@ -123,6 +131,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 7 unmodified lines
123131 id: "tasks",
124132 name: "To Do Tasks",
125133 summary: "Task lists, tasks, and checklist items.",
134+ icon: svglIcon("microsoft-todo"),
126135 scopes: ["Tasks.ReadWrite"],
127136 pathPrefixes: ["/me/todo", "/users/{user-id}/todo"],
128137 audience: "standard-user",
@@ -131,6 +140,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 2 unmodified lines
131140 id: "teams-chat",
132141 name: "Teams Chats",
133142 summary: "Chats, chat messages, installed apps, and members.",
143+ icon: svglIcon("microsoft-teams"),
134144 scopes: ["Chat.ReadWrite"],
135145 pathPrefixes: ["/me/chats", "/chats"],
136146 audience: "standard-user",
@@ -139,6 +149,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 2 unmodified lines
139149 id: "sites",
140150 name: "SharePoint Sites",
141151 summary: "Sites, lists, pages, and columns.",
152+ icon: svglIcon("microsoft-sharepoint"),
142153 scopes: ["Sites.ReadWrite.All"],
143154 pathPrefixes: ["/sites"],
144155 audience: "admin",
@@ -147,6 +158,7 @@ export const microsoftGraphScopePresets: readonly MicrosoftGraphScopePreset[] = · 2 unmodified lines
147158 id: "users",
148159 name: "Directory Users",
149160 summary: "Users, managers, app role assignments, and directory metadata.",
161+ icon: svglIcon("microsoft"),
150162 scopes: ["User.ReadWrite.All", "Directory.Read.All"],
151163 pathPrefixes: ["/users"],
152164 audience: "admin",