@activecollab/components 2.0.349 → 2.0.351

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/cjs/components/Autocomplete/Autocomplete.js +2 -0
  2. package/dist/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
  3. package/dist/cjs/components/Select/Option/Option.js.map +1 -1
  4. package/dist/cjs/components/Select/OptionContent/OptionContent.js +6 -2
  5. package/dist/cjs/components/Select/OptionContent/OptionContent.js.map +1 -1
  6. package/dist/cjs/components/Select/OptionContent/Styles.js +8 -3
  7. package/dist/cjs/components/Select/OptionContent/Styles.js.map +1 -1
  8. package/dist/cjs/components/Select/OptionGroup/OptionGroup.js +6 -2
  9. package/dist/cjs/components/Select/OptionGroup/OptionGroup.js.map +1 -1
  10. package/dist/cjs/components/Select/OptionGroup/Styles.js +13 -3
  11. package/dist/cjs/components/Select/OptionGroup/Styles.js.map +1 -1
  12. package/dist/cjs/components/Select/Select.js +4 -0
  13. package/dist/cjs/components/Select/Select.js.map +1 -1
  14. package/dist/cjs/presentation/shared/WebhookLogsDialog.js +124 -14
  15. package/dist/cjs/presentation/shared/WebhookLogsDialog.js.map +1 -1
  16. package/dist/cjs/presentation/shared/headers.js +73 -37
  17. package/dist/cjs/presentation/shared/headers.js.map +1 -1
  18. package/dist/cjs/presentation/shared/index.js +7 -0
  19. package/dist/cjs/presentation/shared/index.js.map +1 -1
  20. package/dist/esm/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  21. package/dist/esm/components/Autocomplete/Autocomplete.js +2 -0
  22. package/dist/esm/components/Autocomplete/Autocomplete.js.map +1 -1
  23. package/dist/esm/components/Select/Option/Option.d.ts +2 -0
  24. package/dist/esm/components/Select/Option/Option.d.ts.map +1 -1
  25. package/dist/esm/components/Select/Option/Option.js.map +1 -1
  26. package/dist/esm/components/Select/OptionContent/OptionContent.d.ts +3 -1
  27. package/dist/esm/components/Select/OptionContent/OptionContent.d.ts.map +1 -1
  28. package/dist/esm/components/Select/OptionContent/OptionContent.js +7 -3
  29. package/dist/esm/components/Select/OptionContent/OptionContent.js.map +1 -1
  30. package/dist/esm/components/Select/OptionContent/Styles.d.ts +1 -0
  31. package/dist/esm/components/Select/OptionContent/Styles.d.ts.map +1 -1
  32. package/dist/esm/components/Select/OptionContent/Styles.js +7 -2
  33. package/dist/esm/components/Select/OptionContent/Styles.js.map +1 -1
  34. package/dist/esm/components/Select/OptionGroup/OptionGroup.d.ts.map +1 -1
  35. package/dist/esm/components/Select/OptionGroup/OptionGroup.js +7 -3
  36. package/dist/esm/components/Select/OptionGroup/OptionGroup.js.map +1 -1
  37. package/dist/esm/components/Select/OptionGroup/Styles.d.ts +2 -0
  38. package/dist/esm/components/Select/OptionGroup/Styles.d.ts.map +1 -1
  39. package/dist/esm/components/Select/OptionGroup/Styles.js +12 -2
  40. package/dist/esm/components/Select/OptionGroup/Styles.js.map +1 -1
  41. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  42. package/dist/esm/components/Select/Select.js +4 -0
  43. package/dist/esm/components/Select/Select.js.map +1 -1
  44. package/dist/esm/presentation/shared/WebhookLogsDialog.d.ts +22 -1
  45. package/dist/esm/presentation/shared/WebhookLogsDialog.d.ts.map +1 -1
  46. package/dist/esm/presentation/shared/WebhookLogsDialog.js +133 -35
  47. package/dist/esm/presentation/shared/WebhookLogsDialog.js.map +1 -1
  48. package/dist/esm/presentation/shared/headers.d.ts +8 -1
  49. package/dist/esm/presentation/shared/headers.d.ts.map +1 -1
  50. package/dist/esm/presentation/shared/headers.js +64 -35
  51. package/dist/esm/presentation/shared/headers.js.map +1 -1
  52. package/dist/esm/presentation/shared/index.d.ts +2 -2
  53. package/dist/esm/presentation/shared/index.d.ts.map +1 -1
  54. package/dist/esm/presentation/shared/index.js +1 -1
  55. package/dist/esm/presentation/shared/index.js.map +1 -1
  56. package/dist/index.js +37 -8
  57. package/dist/index.js.map +1 -1
  58. package/dist/index.min.js +1 -1
  59. package/dist/index.min.js.map +1 -1
  60. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookLogsDialog.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Chip","_Dialog","_Filter","_IconButton","_Icons","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","WEBHOOK_CONNECTIONS","exports","id","service","EVENT_KIND_LABELS","issue","merge_request","repository","ping","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","GitHubIcon","GitLabIcon","GitIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","Chip","label","backgroundColor","color","typographyProps","variant","weight","style","borderRadius","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","connectionId","eventKind","deliveryIdentifier","outcomes","payload","receivedOn","receivedAt","zen","hook_id","escapeHtml","replace","highlightJson","json","match","cls","concat","PAYLOAD_COLLAPSED_LINES","PayloadPre","styled","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","useState","_useState2","collapsed","setCollapsed","lineCount","useMemo","split","html","canToggle","className","Button","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","_useState3","_useState4","open","setOpen","ConnIcon","type","CollapseExpandSingleIcon","Body2","Caption1","map","outcome","index","key","WebhookLogsDialogStyled","Dialog","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref5","onClose","initialConnectionId","connectionIds","_useState5","_useState6","filters","setFilters","connectionsById","forEach","filterData","submenu","Set","keys","visibleLogs","_filters$connection","_filters$event_type","_filters$status","byConnection","byEvent","byStatus","filter","includes","sort","b","enableBackgroundClick","Title","disableDefaultHeading","Header3","Filter","data","selected","clearAllText","noResultText","emptyFilterText","onChange","IconButton","CancelCrossIcon","ContentDivider","Content","Fragment","Caption2"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, { ElementType, ReactElement, useMemo, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues`, GitLab `Issue Hook`, …) onto one provider-agnostic\n * kind, so the same logical event reads — and filters — identically across\n * connections instead of appearing once per provider.\n */\ntype WebhookEventKind =\n | \"issue\"\n | \"push\"\n | \"merge_request\"\n | \"repository\"\n | \"ping\";\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Localized outcome summaries; empty when we never reached that stage. */\n outcomes: string[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Display timestamp. */\n receivedOn: string;\n /** Sort key — newest logs render at the top. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n issue: \"Issue\",\n push: \"Push\",\n merge_request: \"Merge request\",\n repository: \"Repository\",\n ping: \"Ping\",\n};\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n style={{ borderRadius: 6 }}\n />\n );\n};\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n {\n id: \"log-7\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\"Created task #1842 from issue #42\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 29, 2026 · 14:32\",\n receivedAt: 1751207520,\n },\n {\n id: \"log-6\",\n connectionId: \"gl-content\",\n eventKind: \"merge_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [\"Skipped: merge request has no linked issue\"],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedOn: \"Jun 29, 2026 · 11:08\",\n receivedAt: 1751195280,\n },\n {\n id: \"log-5\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [\"Failed at task creation: project not found\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 28, 2026 · 18:54\",\n receivedAt: 1751136840,\n },\n {\n id: \"log-4\",\n connectionId: \"gl-content\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n \"Created task #1839 from issue #311\",\n \"Created task #1840 from issue #312\",\n ],\n payload: PAYLOAD_PUSH,\n receivedOn: \"Jun 28, 2026 · 09:21\",\n receivedAt: 1751102460,\n },\n {\n id: \"log-3\",\n connectionId: \"gh-activecollab\",\n eventKind: \"ping\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedOn: \"Jun 27, 2026 · 16:05\",\n receivedAt: 1751040300,\n },\n {\n id: \"log-2\",\n connectionId: \"gl-content\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedOn: \"Jun 27, 2026 · 08:47\",\n receivedAt: 1751013420,\n },\n {\n id: \"log-1\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [\"Created task #1804 from issue #29\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:12\",\n receivedAt: 1750943520,\n },\n {\n id: \"log-1-replay\",\n connectionId: \"gh-activecollab\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:18\",\n receivedAt: 1750943880,\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-toggle {\n display: flex;\n justify-content: flex-end;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n {canToggle ? (\n <div className=\"payload-toggle\">\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n </div>\n ) : null}\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Default icon points up; collapsed → point right, expanded → point down. */\n .lr-expand {\n flex-shrink: 0;\n color: var(--color-theme-600);\n transform: rotate(90deg);\n transition: transform 150ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(180deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-status {\n flex-shrink: 0;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n}\n\nconst LogRow = ({ log, connection }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n {log.outcomes.length > 0 ? (\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index}>\n <Body2 color=\"tertiary\">{outcome}</Body2>\n </li>\n ))}\n </ul>\n ) : (\n <Body2 color=\"tertiary\">\n No outcomes were recorded for this webhook.\n </Body2>\n )}\n </div>\n\n {log.payload ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Payload\n </Caption1>\n <PayloadBlock payload={log.payload} />\n </div>\n ) : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-status {\n width: 96px;\n flex-shrink: 0;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n padding: 40px 0;\n text-align: center;\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n if (connectionIds && connectionIds.length > 0) {\n return { connection: connectionIds };\n }\n if (initialConnectionId) {\n return { connection: [initialConnectionId] };\n }\n return {};\n });\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(\n () => [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: Array.from(\n new Set(WEBHOOK_LOGS.map((log) => log.eventKind))\n ).map((eventKind) => ({\n id: eventKind,\n name: EVENT_KIND_LABELS[eventKind],\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ],\n []\n );\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n return (\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={setFilters}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2 className=\"lh-outcomes\" color=\"secondary\" weight=\"bold\">\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WebhookLogsDialog.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_Button","_Chip","_Dialog","_Filter","_IconButton","_Icons","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","WEBHOOK_CONNECTIONS","exports","id","service","WEBHOOK_REPOSITORIES","path","connectionId","EVENT_KIND_LABELS","issue","merge_request","repository","ping","STATUS_LABELS","received","unhandled","skipped","processed","failed","duplicate","STATUS_COLORS","bg","fg","connectionIcon","GitHubIcon","GitLabIcon","GitIcon","StatusChip","_ref","status","_STATUS_COLORS$status","createElement","Chip","label","backgroundColor","color","typographyProps","variant","weight","style","borderRadius","PAYLOAD_ISSUE_OPENED","JSON","stringify","action","number","title","state","html_url","labels","user","login","full_name","private","sender","PAYLOAD_MERGE_REQUEST","object_kind","event_type","username","project","path_with_namespace","object_attributes","iid","source_branch","target_branch","PAYLOAD_PUSH","ref","before","after","commits","message","author","email","WEBHOOK_LOGS","repositoryId","eventKind","deliveryIdentifier","outcomes","payload","receivedOn","receivedAt","zen","hook_id","escapeHtml","replace","highlightJson","json","match","cls","concat","PAYLOAD_COLLAPSED_LINES","PayloadPre","styled","pre","withConfig","displayName","componentId","_ref2","$collapsed","PayloadWrap","div","PayloadBlock","_ref3","_useState","useState","_useState2","collapsed","setCollapsed","lineCount","useMemo","split","html","canToggle","className","Button","size","onClick","dangerouslySetInnerHTML","__html","LogRowWrap","LogRow","_ref4","_connection$name","log","connection","_useState3","_useState4","open","setOpen","ConnIcon","type","CollapseExpandSingleIcon","Body2","Caption1","map","outcome","index","key","WebhookLogsDialogStyled","Dialog","DialogTitleBar","LogListHeader","EmptyLogs","WebhookLogsDialog","_ref5","onClose","initialConnectionId","connectionIds","repositoryIds","_useState5","initial","_useState6","filters","setFilters","connectionsById","filterData","_filters$connection","selectedConnections","repositorySubmenu","includes","sort","b","localeCompare","_connectionsById$repo","_connectionsById$repo2","submenu","searchPlaceholder","disableInternalSort","Set","visibleLogs","_filters$connection2","_filters$repository","_filters$event_type","_filters$status","byConnection","byRepository","byEvent","byStatus","handleFiltersChange","useCallback","_next$connection","_next$repository","selectedRepositories","allowedRepositoryIds","prunedRepositories","updated","enableBackgroundClick","Title","disableDefaultHeading","Header3","Filter","data","selected","clearAllText","noResultText","emptyFilterText","onChange","IconButton","CancelCrossIcon","ContentDivider","Content","Fragment","Caption2"],"sources":["../../../../src/presentation/shared/WebhookLogsDialog.tsx"],"sourcesContent":["import React, {\n ElementType,\n ReactElement,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Chip } from \"../../components/Chip\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Filter, SelectedType } from \"../../components/Filter\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n CancelCrossIcon,\n CollapseExpandSingleIcon,\n GitHubIcon,\n GitIcon,\n GitLabIcon,\n} from \"../../components/Icons\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\n\n/**\n * \"Webhook Logs\" — the VCS webhook delivery log, shown as a wide dialog with a\n * filterable, expandable list. Extracted into `shared/` so it can be opened\n * from more than one surface (the Apps & Integrations Repositories page and the\n * project \"...\" menu on the Project Repos story).\n *\n * Mirrors the app's webhook log model:\n * `vcs_webhook_logs` → connection_id, event_type, processing_status\n * (received / unhandled / skipped / processed /\n * failed / duplicate), delivery_identifier, payload,\n * created_on\n * `vcs_webhook_outcomes` → one row per outcome, each with a localized summary\n *\n * The status is derived from the outcomes server-side; here we render the\n * stored value and map it to a palette colour. The connection glyph is the\n * provider icon (GitHub / GitLab, Git for anything else).\n */\n\ntype WebhookStatus =\n | \"received\"\n | \"unhandled\"\n | \"skipped\"\n | \"processed\"\n | \"failed\"\n | \"duplicate\";\n\nexport interface WebhookConnection {\n id: string;\n name: string;\n service: \"github\" | \"gitlab\";\n}\n\nexport interface WebhookRepository {\n id: string;\n /** Full repository path, e.g. activecollab/feather. */\n path: string;\n connectionId: string;\n}\n\n/**\n * Normalized event kind. The processor layer maps each provider's raw event\n * header (GitHub `issues`, GitLab `Issue Hook`, …) onto one provider-agnostic\n * kind, so the same logical event reads — and filters — identically across\n * connections instead of appearing once per provider.\n */\ntype WebhookEventKind =\n | \"issue\"\n | \"push\"\n | \"merge_request\"\n | \"repository\"\n | \"ping\";\n\nexport interface WebhookLog {\n id: string;\n connectionId: string;\n /** Repository the delivery belongs to (always within `connectionId`). */\n repositoryId: string;\n eventKind: WebhookEventKind;\n status: WebhookStatus;\n /** X-GitHub-Delivery GUID / X-Gitlab-Event-UUID. */\n deliveryIdentifier: string;\n /** Localized outcome summaries; empty when we never reached that stage. */\n outcomes: string[];\n /** Pretty-printed JSON payload; absent when no JSON body was logged. */\n payload?: string;\n /** Display timestamp. */\n receivedOn: string;\n /** Sort key — newest logs render at the top. */\n receivedAt: number;\n}\n\nexport const WEBHOOK_CONNECTIONS: WebhookConnection[] = [\n { id: \"gh-activecollab\", name: \"ActiveCollab\", service: \"github\" },\n { id: \"gh-abstergo\", name: \"Abstergo Ltd.\", service: \"github\" },\n { id: \"gh-binford\", name: \"Binford & Co.\", service: \"github\" },\n { id: \"gl-platform\", name: \"Platform\", service: \"gitlab\" },\n { id: \"gl-content\", name: \"Content\", service: \"gitlab\" },\n { id: \"gl-acme-ce\", name: \"Acme Community\", service: \"gitlab\" },\n];\n\n/**\n * Repositories that belong to the connections above. A webhook delivery is\n * always scoped to one repository, and a repository belongs to exactly one\n * connection — so the Repository filter can be narrowed to the connection(s)\n * currently selected in the Connection filter.\n */\nexport const WEBHOOK_REPOSITORIES: WebhookRepository[] = [\n {\n id: \"ac-feather\",\n path: \"activecollab/feather\",\n connectionId: \"gh-activecollab\",\n },\n {\n id: \"ac-backend\",\n path: \"activecollab/backend\",\n connectionId: \"gh-activecollab\",\n },\n { id: \"ab-animus\", path: \"abstergo/animus\", connectionId: \"gh-abstergo\" },\n { id: \"bi-tool-time\", path: \"binford/tool-time\", connectionId: \"gh-binford\" },\n {\n id: \"pl-gateway\",\n path: \"platform/api-gateway\",\n connectionId: \"gl-platform\",\n },\n { id: \"co-handbook\", path: \"content/handbook\", connectionId: \"gl-content\" },\n {\n id: \"co-marketing\",\n path: \"content/marketing-site\",\n connectionId: \"gl-content\",\n },\n { id: \"acme-ce\", path: \"acme/community-edition\", connectionId: \"gl-acme-ce\" },\n];\n\nconst EVENT_KIND_LABELS: Record<WebhookEventKind, string> = {\n issue: \"Issue\",\n push: \"Push\",\n merge_request: \"Merge request\",\n repository: \"Repository\",\n ping: \"Ping\",\n};\n\nconst STATUS_LABELS: Record<WebhookStatus, string> = {\n received: \"Received\",\n unhandled: \"Unhandled\",\n skipped: \"Skipped\",\n processed: \"Processed\",\n failed: \"Failed\",\n duplicate: \"Duplicate\",\n};\n\n/**\n * Status → palette colour, chosen so the colour matches the meaning:\n * processed → green (success), failed → coral (error),\n * skipped → orange (warning), received → sky-blue (in progress),\n * unhandled → silver (neutral / no handler matched),\n * duplicate → purple (replayed delivery, dropped before processing).\n */\nconst STATUS_COLORS: Record<WebhookStatus, { bg: string; fg: string }> = {\n processed: {\n bg: \"var(--color-green-pale)\",\n fg: \"var(--color-green-pale-darker)\",\n },\n failed: { bg: \"var(--color-coral)\", fg: \"var(--color-coral-darker)\" },\n skipped: { bg: \"var(--color-orange)\", fg: \"var(--color-orange-darker)\" },\n received: {\n bg: \"var(--color-blue-sky)\",\n fg: \"var(--color-blue-sky-darker)\",\n },\n unhandled: {\n bg: \"var(--color-gray-silver)\",\n fg: \"var(--color-gray-silver-darker)\",\n },\n duplicate: {\n bg: \"var(--color-purple)\",\n fg: \"var(--color-purple-darker)\",\n },\n};\n\n/** Provider glyph for a connection: GitHub / GitLab, Git for anything else. */\nconst connectionIcon = (\n service?: WebhookConnection[\"service\"]\n): ElementType => {\n if (service === \"github\") {\n return GitHubIcon;\n }\n if (service === \"gitlab\") {\n return GitLabIcon;\n }\n return GitIcon;\n};\n\nconst StatusChip = ({ status }: { status: WebhookStatus }): ReactElement => {\n const { bg, fg } = STATUS_COLORS[status];\n\n return (\n <Chip\n label={STATUS_LABELS[status]}\n backgroundColor={bg}\n color={fg}\n typographyProps={{ variant: \"Caption 1\", weight: \"medium\" }}\n style={{ borderRadius: 6 }}\n />\n );\n};\n\n/* --- Mock log data (newest first is enforced by sorting on receivedAt) --- */\n\nconst PAYLOAD_ISSUE_OPENED = JSON.stringify(\n {\n action: \"opened\",\n issue: {\n id: 2002934201,\n number: 42,\n title: \"Webhook delivery retries are not logged\",\n state: \"open\",\n html_url: \"https://github.com/activecollab/feather/issues/42\",\n labels: [{ name: \"bug\" }, { name: \"vcs\" }],\n user: { login: \"octocat\", id: 583231 },\n },\n repository: {\n id: 776611234,\n full_name: \"activecollab/feather\",\n private: true,\n },\n sender: { login: \"octocat\", id: 583231 },\n },\n null,\n 2\n);\n\nconst PAYLOAD_MERGE_REQUEST = JSON.stringify(\n {\n object_kind: \"merge_request\",\n event_type: \"merge_request\",\n user: { id: 41, name: \"Jane Doe\", username: \"jdoe\" },\n project: { id: 1801, path_with_namespace: \"content/handbook\" },\n object_attributes: {\n iid: 318,\n title: \"Add changelog for 8.2\",\n state: \"merged\",\n action: \"merge\",\n source_branch: \"changelog-8-2\",\n target_branch: \"main\",\n },\n },\n null,\n 2\n);\n\nconst PAYLOAD_PUSH = JSON.stringify(\n {\n ref: \"refs/heads/main\",\n before: \"9b2c1f0e\",\n after: \"f4a7d3c1\",\n commits: [\n {\n id: \"f4a7d3c1\",\n message: \"Fix typo in webhook log repository\",\n author: { name: \"Marko\", email: \"marko@example.com\" },\n },\n ],\n repository: { full_name: \"activecollab/feather\" },\n },\n null,\n 2\n);\n\nconst WEBHOOK_LOGS: WebhookLog[] = [\n {\n id: \"log-7\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"d3b07384-d9a0-4c9b-8f1e-2a6f1b9c4e21\",\n outcomes: [\"Created task #1842 from issue #42\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 29, 2026 · 14:32\",\n receivedAt: 1751207520,\n },\n {\n id: \"log-6\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"merge_request\",\n status: \"skipped\",\n deliveryIdentifier: \"b1946ac9-2f3a-4c0d-9b7e-1d2c3e4f5a6b\",\n outcomes: [\"Skipped: merge request has no linked issue\"],\n payload: PAYLOAD_MERGE_REQUEST,\n receivedOn: \"Jun 29, 2026 · 11:08\",\n receivedAt: 1751195280,\n },\n {\n id: \"log-5\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-backend\",\n eventKind: \"issue\",\n status: \"failed\",\n deliveryIdentifier: \"9c1185a5-c5e9-4e3f-8a1b-7d6e5f4c3b2a\",\n outcomes: [\"Failed at task creation: project not found\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 28, 2026 · 18:54\",\n receivedAt: 1751136840,\n },\n {\n id: \"log-4\",\n connectionId: \"gl-content\",\n repositoryId: \"co-handbook\",\n eventKind: \"push\",\n status: \"processed\",\n deliveryIdentifier: \"f7c3bc1d-8c5a-4b2e-9f0a-1b2c3d4e5f60\",\n outcomes: [\n \"Created task #1839 from issue #311\",\n \"Created task #1840 from issue #312\",\n ],\n payload: PAYLOAD_PUSH,\n receivedOn: \"Jun 28, 2026 · 09:21\",\n receivedAt: 1751102460,\n },\n {\n id: \"log-3\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"ping\",\n status: \"unhandled\",\n deliveryIdentifier: \"1574bddb-75c3-4b1e-8a9c-0d1e2f3a4b5c\",\n outcomes: [],\n payload: JSON.stringify(\n { zen: \"Keep it logically awesome.\", hook_id: 552012 },\n null,\n 2\n ),\n receivedOn: \"Jun 27, 2026 · 16:05\",\n receivedAt: 1751040300,\n },\n {\n id: \"log-2\",\n connectionId: \"gl-content\",\n repositoryId: \"co-marketing\",\n eventKind: \"issue\",\n status: \"received\",\n deliveryIdentifier: \"0716d970-2b9e-4a1d-9c3f-5e6a7b8c9d01\",\n outcomes: [],\n receivedOn: \"Jun 27, 2026 · 08:47\",\n receivedAt: 1751013420,\n },\n {\n id: \"log-1\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"processed\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [\"Created task #1804 from issue #29\"],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:12\",\n receivedAt: 1750943520,\n },\n {\n id: \"log-1-replay\",\n connectionId: \"gh-activecollab\",\n repositoryId: \"ac-feather\",\n eventKind: \"issue\",\n status: \"duplicate\",\n deliveryIdentifier: \"fa3ebd6742c360b2d9652b7f78d9bd7d\",\n outcomes: [],\n payload: PAYLOAD_ISSUE_OPENED,\n receivedOn: \"Jun 26, 2026 · 13:18\",\n receivedAt: 1750943880,\n },\n];\n\n/* --- Lightweight, Prism-style JSON syntax highlighter -------------------- */\n/* design-system has no `prismjs` dependency (it's an app dependency), so for */\n/* this throwaway mock we tokenize JSON ourselves and colour the tokens with */\n/* the same token classes Prism uses, styled via PayloadPre below. */\n\nconst escapeHtml = (value: string): string =>\n value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\nconst highlightJson = (json: string): string =>\n escapeHtml(json).replace(\n /(\"(?:\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(?:true|false)\\b|\\bnull\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/g,\n (match) => {\n let cls = \"tok-number\";\n\n if (/^\"/.test(match)) {\n cls = /:$/.test(match) ? \"tok-key\" : \"tok-string\";\n } else if (/true|false/.test(match)) {\n cls = \"tok-boolean\";\n } else if (/null/.test(match)) {\n cls = \"tok-null\";\n }\n\n return `<span class=\"${cls}\">${match}</span>`;\n }\n );\n\nconst PAYLOAD_COLLAPSED_LINES = 6;\n\nconst PayloadPre = styled.pre<{ $collapsed: boolean }>`\n margin: 0;\n padding: 12px 14px;\n border: 1px solid var(--color-theme-400);\n border-radius: 6px;\n background-color: var(--color-theme-200);\n color: var(--color-theme-800);\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 12px;\n line-height: 18px;\n overflow-x: auto;\n white-space: pre;\n position: relative;\n\n ${({ $collapsed }) =>\n $collapsed\n ? `max-height: ${PAYLOAD_COLLAPSED_LINES * 18 + 24}px;\n overflow-y: hidden;`\n : \"\"}\n\n .tok-key {\n color: var(--color-coral-lighter);\n }\n .tok-string {\n color: var(--color-green-pale-lighter);\n }\n .tok-number {\n color: var(--color-orange-lighter);\n }\n .tok-boolean {\n color: var(--color-blue-sky-lighter);\n }\n .tok-null {\n color: var(--color-purple-lighter);\n }\n`;\n\nconst PayloadWrap = styled.div`\n .payload-toggle {\n display: flex;\n justify-content: flex-end;\n min-height: 24px;\n margin-bottom: 4px;\n }\n`;\n\nconst PayloadBlock = ({ payload }: { payload: string }): ReactElement => {\n const [collapsed, setCollapsed] = useState(true);\n\n const lineCount = useMemo(() => payload.split(\"\\n\").length, [payload]);\n const html = useMemo(() => highlightJson(payload), [payload]);\n const canToggle = lineCount > PAYLOAD_COLLAPSED_LINES;\n\n return (\n <PayloadWrap>\n {canToggle ? (\n <div className=\"payload-toggle\">\n <Button\n variant=\"text colored\"\n size=\"small\"\n onClick={() => setCollapsed((value) => !value)}\n >\n {collapsed ? \"Show More\" : \"Show Less\"}\n </Button>\n </div>\n ) : null}\n <PayloadPre\n $collapsed={collapsed && canToggle}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </PayloadWrap>\n );\n};\n\n/* --- A single, expandable log row ---------------------------------------- */\n\nconst LogRowWrap = styled.div`\n border-top: 1px solid var(--color-theme-300);\n\n .lr-summary {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n min-height: 56px;\n padding: 8px 8px 8px 12px;\n background: none;\n border: 0;\n text-align: left;\n cursor: pointer;\n font-family: inherit;\n\n &:hover {\n background-color: var(--color-theme-200);\n }\n }\n\n /* Default icon points up; collapsed → point right, expanded → point down. */\n .lr-expand {\n flex-shrink: 0;\n color: var(--color-theme-600);\n transform: rotate(90deg);\n transition: transform 150ms ease;\n }\n\n .lr-expand.open {\n transform: rotate(180deg);\n }\n\n .lr-conn {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 180px;\n min-width: 0;\n flex-shrink: 0;\n }\n\n .lr-conn svg {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n .lr-conn .lr-conn-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .lr-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n\n .lr-status {\n flex-shrink: 0;\n }\n\n .lr-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n\n .lr-detail {\n padding: 4px 16px 20px 44px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .lr-field-label {\n display: block;\n margin-bottom: 4px;\n }\n\n .lr-id {\n font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n word-break: break-all;\n }\n\n .lr-outcome-list {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n`;\n\ninterface LogRowProps {\n log: WebhookLog;\n connection?: WebhookConnection;\n}\n\nconst LogRow = ({ log, connection }: LogRowProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const ConnIcon = connectionIcon(connection?.service);\n\n return (\n <LogRowWrap>\n <button\n type=\"button\"\n className=\"lr-summary\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <CollapseExpandSingleIcon\n className={open ? \"lr-expand open\" : \"lr-expand\"}\n />\n <span className=\"lr-conn\">\n <ConnIcon />\n <Body2 className=\"lr-conn-name\" weight=\"bold\">\n {connection?.name ?? \"Unknown\"}\n </Body2>\n </span>\n <Body2 className=\"lr-event\" color=\"tertiary\">\n {EVENT_KIND_LABELS[log.eventKind]}\n </Body2>\n <span className=\"lr-status\">\n <StatusChip status={log.status} />\n </span>\n <Caption1 className=\"lr-outcomes\" color=\"tertiary\">\n {log.outcomes.length > 0\n ? `${log.outcomes.length} ${\n log.outcomes.length === 1 ? \"outcome\" : \"outcomes\"\n }`\n : \"\"}\n </Caption1>\n </button>\n\n {open ? (\n <div className=\"lr-detail\">\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Webhook identifier\n </Caption1>\n <Body2 className=\"lr-id\" color=\"tertiary\">\n {log.deliveryIdentifier}\n </Body2>\n </div>\n\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Outcomes\n </Caption1>\n {log.outcomes.length > 0 ? (\n <ul className=\"lr-outcome-list\">\n {log.outcomes.map((outcome, index) => (\n <li key={index}>\n <Body2 color=\"tertiary\">{outcome}</Body2>\n </li>\n ))}\n </ul>\n ) : (\n <Body2 color=\"tertiary\">\n No outcomes were recorded for this webhook.\n </Body2>\n )}\n </div>\n\n {log.payload ? (\n <div>\n <Caption1\n className=\"lr-field-label\"\n color=\"secondary\"\n weight=\"bold\"\n >\n Payload\n </Caption1>\n <PayloadBlock payload={log.payload} />\n </div>\n ) : null}\n </div>\n ) : null}\n </LogRowWrap>\n );\n};\n\n/* --- The dialog ---------------------------------------------------------- */\n\n/** Wider than the default 540px dialog so the log columns have room. */\nconst WebhookLogsDialogStyled = styled(Dialog)`\n && {\n width: calc(100vw - 64px);\n max-width: 760px;\n }\n`;\n\nconst DialogTitleBar = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n\n .title-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst LogListHeader = styled.div`\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 0 8px 8px 44px;\n\n .lh-conn {\n width: 180px;\n flex-shrink: 0;\n }\n .lh-event {\n flex: 1 1 0%;\n min-width: 0;\n }\n .lh-status {\n width: 96px;\n flex-shrink: 0;\n }\n .lh-outcomes {\n width: 96px;\n flex-shrink: 0;\n text-align: right;\n }\n`;\n\nconst EmptyLogs = styled.div`\n padding: 40px 0;\n text-align: center;\n`;\n\nexport interface WebhookLogsDialogProps {\n open: boolean;\n onClose: () => void;\n /** Pre-filter to a single connection (used when opened from its row menu). */\n initialConnectionId?: string;\n /**\n * Pre-filter to a set of connections (e.g. the connections a project's\n * repositories belong to). Takes precedence over `initialConnectionId`.\n */\n connectionIds?: string[];\n /**\n * Pre-filter to a set of repositories (e.g. the repositories connected to a\n * project, when opened from the project \"...\" menu). Seeds the Repository\n * filter; IDs should exist in `WEBHOOK_REPOSITORIES` so their chips render.\n */\n repositoryIds?: string[];\n}\n\nexport const WebhookLogsDialog = ({\n open,\n onClose,\n initialConnectionId,\n connectionIds,\n repositoryIds,\n}: WebhookLogsDialogProps): ReactElement => {\n const [filters, setFilters] = useState<SelectedType>((): SelectedType => {\n const initial: SelectedType = {};\n if (connectionIds && connectionIds.length > 0) {\n initial.connection = connectionIds;\n } else if (initialConnectionId) {\n initial.connection = [initialConnectionId];\n }\n if (repositoryIds && repositoryIds.length > 0) {\n initial.repository = repositoryIds;\n }\n return initial;\n });\n\n const connectionsById = useMemo(() => {\n const map: Record<string, WebhookConnection> = {};\n WEBHOOK_CONNECTIONS.forEach((connection) => {\n map[connection.id] = connection;\n });\n return map;\n }, []);\n\n const filterData = useMemo(() => {\n // The Repository options narrow to the connection(s) currently selected in\n // the Connection filter; with no connection selected, every repository is\n // offered. Displayed as \"path (connection name)\" (matching the project\n // \"...\" menu Repositories list) and sorted by repository path.\n const selectedConnections = filters.connection ?? [];\n const repositorySubmenu = WEBHOOK_REPOSITORIES.filter(\n (repository) =>\n selectedConnections.length === 0 ||\n selectedConnections.includes(repository.connectionId)\n )\n .slice()\n .sort((a, b) => a.path.localeCompare(b.path))\n .map((repository) => ({\n id: repository.id,\n name: `${repository.path} (${\n connectionsById[repository.connectionId]?.name ?? \"Unknown\"\n })`,\n }));\n\n return [\n {\n id: \"connection\",\n title: \"Connection\",\n submenu: WEBHOOK_CONNECTIONS.map((connection) => ({\n id: connection.id,\n name: connection.name,\n })),\n },\n {\n id: \"repository\",\n title: \"Repository\",\n searchPlaceholder: \"Search repositories\",\n disableInternalSort: true,\n submenu: repositorySubmenu,\n },\n {\n id: \"event_type\",\n title: \"Event Type\",\n submenu: Array.from(\n new Set(WEBHOOK_LOGS.map((log) => log.eventKind))\n ).map((eventKind) => ({\n id: eventKind,\n name: EVENT_KIND_LABELS[eventKind],\n })),\n },\n {\n id: \"status\",\n title: \"Processing Status\",\n submenu: (Object.keys(STATUS_LABELS) as WebhookStatus[]).map(\n (status) => ({ id: status, name: STATUS_LABELS[status] })\n ),\n },\n ];\n }, [filters.connection, connectionsById]);\n\n const visibleLogs = useMemo(() => {\n const byConnection = filters.connection ?? [];\n const byRepository = filters.repository ?? [];\n const byEvent = filters.event_type ?? [];\n const byStatus = filters.status ?? [];\n\n return WEBHOOK_LOGS.filter((log) => {\n if (byConnection.length && !byConnection.includes(log.connectionId)) {\n return false;\n }\n if (byRepository.length && !byRepository.includes(log.repositoryId)) {\n return false;\n }\n if (byEvent.length && !byEvent.includes(log.eventKind)) {\n return false;\n }\n if (byStatus.length && !byStatus.includes(log.status)) {\n return false;\n }\n return true;\n }).sort((a, b) => b.receivedAt - a.receivedAt);\n }, [filters]);\n\n // When the Connection filter narrows, drop any selected repositories that no\n // longer belong to a selected connection — otherwise a stale repository\n // selection would silently filter every log out.\n const handleFiltersChange = useCallback((next: SelectedType) => {\n const selectedConnections = next.connection ?? [];\n const selectedRepositories = next.repository ?? [];\n\n if (selectedConnections.length && selectedRepositories.length) {\n const allowedRepositoryIds = new Set(\n WEBHOOK_REPOSITORIES.filter((repository) =>\n selectedConnections.includes(repository.connectionId)\n ).map((repository) => repository.id)\n );\n const prunedRepositories = selectedRepositories.filter((id) =>\n allowedRepositoryIds.has(id)\n );\n\n if (prunedRepositories.length !== selectedRepositories.length) {\n const updated = { ...next };\n if (prunedRepositories.length) {\n updated.repository = prunedRepositories;\n } else {\n delete updated.repository;\n }\n setFilters(updated);\n return;\n }\n }\n\n setFilters(next);\n }, []);\n\n return (\n <WebhookLogsDialogStyled\n open={open}\n onClose={onClose}\n enableBackgroundClick\n >\n <Dialog.Title disableDefaultHeading>\n <DialogTitleBar>\n <Header3>Webhook Logs</Header3>\n <div className=\"title-actions\">\n <Filter\n data={filterData}\n selected={filters}\n label=\"Filter\"\n clearAllText=\"Clear All\"\n noResultText=\"No results\"\n emptyFilterText=\"No filters to show\"\n onChange={handleFiltersChange}\n />\n <IconButton variant=\"text gray\" onClick={onClose}>\n <CancelCrossIcon />\n </IconButton>\n </div>\n </DialogTitleBar>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n {visibleLogs.length > 0 ? (\n <>\n <LogListHeader>\n <Caption2 className=\"lh-conn\" color=\"secondary\" weight=\"bold\">\n CONNECTION\n </Caption2>\n <Caption2 className=\"lh-event\" color=\"secondary\" weight=\"bold\">\n EVENT TYPE\n </Caption2>\n <Caption2 className=\"lh-status\" color=\"secondary\" weight=\"bold\">\n STATUS\n </Caption2>\n <Caption2 className=\"lh-outcomes\" color=\"secondary\" weight=\"bold\">\n OUTCOMES\n </Caption2>\n </LogListHeader>\n {visibleLogs.map((log) => (\n <LogRow\n key={log.id}\n log={log}\n connection={connectionsById[log.connectionId]}\n />\n ))}\n </>\n ) : (\n <EmptyLogs>\n <Body2 color=\"tertiary\">\n No webhook logs match the selected filters.\n </Body2>\n </EmptyLogs>\n )}\n </Dialog.Content>\n </WebhookLogsDialogStyled>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,7 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
9
  var _ConnectRepositoryDialog = require("./ConnectRepositoryDialog");
10
10
  var _RoundAvatar = require("./RoundAvatar");
11
11
  var _tokens = require("./tokens");
12
+ var _WebhookLogsDialog = require("./WebhookLogsDialog");
12
13
  var _Badge = require("../../components/Badge");
13
14
  var _Button = require("../../components/Button");
14
15
  var _GlobalAddButton = require("../../components/Button/GlobalAddButton");
@@ -78,11 +79,24 @@ var StyledProjectMenu = _styledComponents.default.div.withConfig({
78
79
  componentId: "sc-yf6o6n-2"
79
80
  })([".toggle-item{justify-content:space-between;}.toggle-item .opt-left{display:flex;align-items:center;min-width:0;}.toggle-item .opt-left svg{margin-right:8px;flex-shrink:0;}.toggle-item .c-complete-checkbox{width:16px;height:16px;border-radius:3px;align-self:center;flex-shrink:0;}.submenu-item{justify-content:space-between;}.submenu-item .repo-right{display:flex;align-items:center;gap:8px;flex-shrink:0;}.submenu-item .repo-right .c-badge{background-color:var(--color-theme-300);color:var(--color-theme-700);}.submenu-item .repo-caret{flex-shrink:0;fill:var(--color-theme-600);}.repo-row{min-width:0;}.repo-row > svg{flex-shrink:0;}.repo-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}"]);
80
81
 
82
+ /* The project "..." menu shares the Webhook Logs dialog's repository /
83
+ * connection universe, so a repository connected here is one that dialog can
84
+ * pre-filter by. `WebhookConnection` and `Connection` share a shape, and a
85
+ * `WebhookRepository`'s `path` maps onto a `Repository`'s `name`. */
86
+ var PROJECT_MENU_CONNECTIONS = _WebhookLogsDialog.WEBHOOK_CONNECTIONS;
87
+ var PROJECT_MENU_REPOSITORIES = _WebhookLogsDialog.WEBHOOK_REPOSITORIES.map(function (repo) {
88
+ return {
89
+ id: repo.id,
90
+ name: repo.path,
91
+ connectionId: repo.connectionId
92
+ };
93
+ });
94
+
81
95
  /** Submenu row label for a connected repository: "path (Connection)". The
82
96
  * service type is omitted because the leading provider icon already conveys
83
97
  * it. */
84
98
  var repositoryMenuLabel = function repositoryMenuLabel(repo) {
85
- var connection = _ConnectRepositoryDialog.CONNECTIONS.find(function (c) {
99
+ var connection = PROJECT_MENU_CONNECTIONS.find(function (c) {
86
100
  return c.id === repo.connectionId;
87
101
  });
88
102
  return connection ? "".concat(repo.name, " (").concat(connection.name, ")") : repo.name;
@@ -92,7 +106,7 @@ var repositoryMenuLabel = function repositoryMenuLabel(repo) {
92
106
  * services, and the generic Git mark for anything else (e.g. an upcoming
93
107
  * Bitbucket connection). */
94
108
  var repositoryIcon = function repositoryIcon(repo) {
95
- var connection = _ConnectRepositoryDialog.CONNECTIONS.find(function (c) {
109
+ var connection = PROJECT_MENU_CONNECTIONS.find(function (c) {
96
110
  return c.id === repo.connectionId;
97
111
  });
98
112
  switch (connection === null || connection === void 0 ? void 0 : connection.service) {
@@ -132,7 +146,9 @@ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
132
146
  var _ref2$sourceModuleLoa = _ref2.sourceModuleLoaded,
133
147
  sourceModuleLoaded = _ref2$sourceModuleLoa === void 0 ? false : _ref2$sourceModuleLoa,
134
148
  _ref2$initialConnecte = _ref2.initialConnectedRepositories,
135
- initialConnectedRepositories = _ref2$initialConnecte === void 0 ? [] : _ref2$initialConnecte;
149
+ initialConnectedRepositories = _ref2$initialConnecte === void 0 ? [] : _ref2$initialConnecte,
150
+ _ref2$canManageProjec = _ref2.canManageProjectRepositories,
151
+ canManageProjectRepositories = _ref2$canManageProjec === void 0 ? true : _ref2$canManageProjec;
136
152
  var _useState = (0, _react.useState)(false),
137
153
  _useState2 = _slicedToArray(_useState, 2),
138
154
  open = _useState2[0],
@@ -141,43 +157,47 @@ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
141
157
  _useState4 = _slicedToArray(_useState3, 2),
142
158
  view = _useState4[0],
143
159
  setView = _useState4[1];
144
- var _useState5 = (0, _react.useState)(true),
160
+ var _useState5 = (0, _react.useState)(false),
145
161
  _useState6 = _slicedToArray(_useState5, 2),
146
- isLeft = _useState6[0],
147
- setIsLeft = _useState6[1];
148
- var _useState7 = (0, _react.useState)(0),
162
+ webhookLogsOpen = _useState6[0],
163
+ setWebhookLogsOpen = _useState6[1];
164
+ var _useState7 = (0, _react.useState)(true),
149
165
  _useState8 = _slicedToArray(_useState7, 2),
150
- height = _useState8[0],
151
- setHeight = _useState8[1];
166
+ isLeft = _useState8[0],
167
+ setIsLeft = _useState8[1];
168
+ var _useState9 = (0, _react.useState)(0),
169
+ _useState0 = _slicedToArray(_useState9, 2),
170
+ height = _useState0[0],
171
+ setHeight = _useState0[1];
152
172
  // Connected repositories drive the count badge on the Repositories item. In
153
173
  // production this count comes from the project's `count_repositories` counter,
154
174
  // kept current via pusher/websocket events, so the badge reflects repositories
155
175
  // connected or disconnected by anyone — not just the current user's actions.
156
- var _useState9 = (0, _react.useState)(initialConnectedRepositories),
157
- _useState0 = _slicedToArray(_useState9, 2),
158
- connectedRepos = _useState0[0],
159
- setConnectedRepos = _useState0[1];
160
- var _useState1 = (0, _react.useState)(false),
176
+ var _useState1 = (0, _react.useState)(initialConnectedRepositories),
161
177
  _useState10 = _slicedToArray(_useState1, 2),
162
- connectOpen = _useState10[0],
163
- setConnectOpen = _useState10[1];
178
+ connectedRepos = _useState10[0],
179
+ setConnectedRepos = _useState10[1];
164
180
  var _useState11 = (0, _react.useState)(false),
165
181
  _useState12 = _slicedToArray(_useState11, 2),
166
- infoOpen = _useState12[0],
167
- setInfoOpen = _useState12[1];
182
+ connectOpen = _useState12[0],
183
+ setConnectOpen = _useState12[1];
168
184
  var _useState13 = (0, _react.useState)(false),
169
185
  _useState14 = _slicedToArray(_useState13, 2),
170
- toastOpen = _useState14[0],
171
- setToastOpen = _useState14[1];
186
+ infoOpen = _useState14[0],
187
+ setInfoOpen = _useState14[1];
188
+ var _useState15 = (0, _react.useState)(false),
189
+ _useState16 = _slicedToArray(_useState15, 2),
190
+ toastOpen = _useState16[0],
191
+ setToastOpen = _useState16[1];
172
192
  // Bumped on each connect so the toast remounts and its auto-hide timer
173
193
  // restarts from the moment it is shown.
174
- var _useState15 = (0, _react.useState)(0),
175
- _useState16 = _slicedToArray(_useState15, 2),
176
- toastKey = _useState16[0],
177
- setToastKey = _useState16[1];
194
+ var _useState17 = (0, _react.useState)(0),
195
+ _useState18 = _slicedToArray(_useState17, 2),
196
+ toastKey = _useState18[0],
197
+ setToastKey = _useState18[1];
178
198
 
179
199
  // Repositories still available to connect (not already on the project).
180
- var connectableRepos = _ConnectRepositoryDialog.CONNECTABLE_REPOSITORIES.filter(function (r) {
200
+ var connectableRepos = PROJECT_MENU_REPOSITORIES.filter(function (r) {
181
201
  return !connectedRepos.some(function (c) {
182
202
  return c.id === r.id;
183
203
  });
@@ -230,6 +250,10 @@ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
230
250
  handleClose();
231
251
  setInfoOpen(true);
232
252
  };
253
+ var handleOpenWebhookLogs = function handleOpenWebhookLogs() {
254
+ handleClose();
255
+ setWebhookLogsOpen(true);
256
+ };
233
257
  var indexView = /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
234
258
  style: {
235
259
  padding: "8px 0"
@@ -330,7 +354,9 @@ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
330
354
  }, /*#__PURE__*/_react.default.createElement(RepoIcon, null), /*#__PURE__*/_react.default.createElement("span", {
331
355
  className: "repo-name"
332
356
  }, repositoryMenuLabel(repo)));
333
- }), sortedRepos.length > 0 ? /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null) : null, /*#__PURE__*/_react.default.createElement(_List.ListItem, {
357
+ }), sortedRepos.length > 0 ? /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null) : null, sortedRepos.length > 0 && canManageProjectRepositories ? /*#__PURE__*/_react.default.createElement(_List.ListItem, {
358
+ onClick: handleOpenWebhookLogs
359
+ }, /*#__PURE__*/_react.default.createElement(_Icons.AccessLogIcon, null), "Webhook Logs") : null, /*#__PURE__*/_react.default.createElement(_List.ListItem, {
334
360
  onClick: handleConnect
335
361
  }, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryConnectIcon, null), "Connect Repository"))))))) : indexView), /*#__PURE__*/_react.default.createElement(_ConnectRepositoryDialog.ConnectRepositoryDialog, {
336
362
  open: connectOpen,
@@ -339,7 +365,15 @@ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
339
365
  },
340
366
  onConnect: handleConnected,
341
367
  repositories: connectableRepos,
342
- connections: _ConnectRepositoryDialog.CONNECTIONS
368
+ connections: PROJECT_MENU_CONNECTIONS
369
+ }), /*#__PURE__*/_react.default.createElement(_WebhookLogsDialog.WebhookLogsDialog, {
370
+ open: webhookLogsOpen,
371
+ onClose: function onClose() {
372
+ return setWebhookLogsOpen(false);
373
+ },
374
+ repositoryIds: sortedRepos.map(function (repo) {
375
+ return repo.id;
376
+ })
343
377
  }), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
344
378
  open: infoOpen,
345
379
  onClose: function onClose() {
@@ -395,10 +429,10 @@ var StyledPeopleMenu = _styledComponents.default.div.withConfig({
395
429
  componentId: "sc-yf6o6n-4"
396
430
  })(["width:256px;.members-label{display:block;margin:8px 0;padding:0 16px;}.member-row{position:relative;display:flex;align-items:center;min-height:40px;margin:0 8px;padding:2px 8px;border-radius:4px;cursor:default;transition:background-color ", ";}.member-row:hover{background-color:var(--color-theme-200);}.member-row.leader::before{content:\"\";position:absolute;top:4px;bottom:4px;left:0;width:4px;border-radius:4px;background-color:", ";}.member-row.leader .member-avatar{outline:2px solid ", ";outline-offset:-2px;}.member-name{flex:1;margin-left:12px;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.member-right{display:flex;align-items:center;gap:2px;flex-shrink:0;margin-left:8px;}.leader-crown{flex-shrink:0;}.member-options{display:none;align-items:center;gap:2px;}.member-row:hover .member-options{display:flex;}"], _tokens.TRANSITION, LEADER_GOLD, LEADER_GOLD);
397
431
  var PeoplePopover = function PeoplePopover() {
398
- var _useState17 = (0, _react.useState)(false),
399
- _useState18 = _slicedToArray(_useState17, 2),
400
- open = _useState18[0],
401
- setOpen = _useState18[1];
432
+ var _useState19 = (0, _react.useState)(false),
433
+ _useState20 = _slicedToArray(_useState19, 2),
434
+ open = _useState20[0],
435
+ setOpen = _useState20[1];
402
436
  return /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
403
437
  open: open,
404
438
  onOpen: function onOpen() {
@@ -467,7 +501,8 @@ var ProjectPageHeader = exports.ProjectPageHeader = function ProjectPageHeader(_
467
501
  title = _ref3$title === void 0 ? "#131: Ime projekta" : _ref3$title,
468
502
  _ref3$sourceModuleLoa = _ref3.sourceModuleLoaded,
469
503
  sourceModuleLoaded = _ref3$sourceModuleLoa === void 0 ? false : _ref3$sourceModuleLoa,
470
- initialConnectedRepositories = _ref3.initialConnectedRepositories;
504
+ initialConnectedRepositories = _ref3.initialConnectedRepositories,
505
+ canManageProjectRepositories = _ref3.canManageProjectRepositories;
471
506
  return /*#__PURE__*/_react.default.createElement(StyledPageHeader, null, /*#__PURE__*/_react.default.createElement("div", {
472
507
  className: "page-header-left"
473
508
  }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
@@ -492,7 +527,8 @@ var ProjectPageHeader = exports.ProjectPageHeader = function ProjectPageHeader(_
492
527
  variant: "text gray"
493
528
  }, /*#__PURE__*/_react.default.createElement(_Icons.InfoIcon, null))), /*#__PURE__*/_react.default.createElement(PeoplePopover, null), /*#__PURE__*/_react.default.createElement(ProjectOptionsMenu, {
494
529
  sourceModuleLoaded: sourceModuleLoaded,
495
- initialConnectedRepositories: initialConnectedRepositories
530
+ initialConnectedRepositories: initialConnectedRepositories,
531
+ canManageProjectRepositories: canManageProjectRepositories
496
532
  })))), /*#__PURE__*/_react.default.createElement("div", {
497
533
  className: "page-header-spacer"
498
534
  }));
@@ -516,10 +552,10 @@ var StyledTabControls = _styledComponents.default.div.withConfig({
516
552
  var TabHeader = exports.TabHeader = function TabHeader(_ref4) {
517
553
  var _ref4$activeView = _ref4.activeView,
518
554
  activeView = _ref4$activeView === void 0 ? "list" : _ref4$activeView;
519
- var _useState19 = (0, _react.useState)(0),
520
- _useState20 = _slicedToArray(_useState19, 2),
521
- active = _useState20[0],
522
- setActive = _useState20[1];
555
+ var _useState21 = (0, _react.useState)(0),
556
+ _useState22 = _slicedToArray(_useState21, 2),
557
+ active = _useState22[0],
558
+ setActive = _useState22[1];
523
559
  return /*#__PURE__*/_react.default.createElement(StyledTabHeader, null, /*#__PURE__*/_react.default.createElement(_Nav.Nav, {
524
560
  onSelect: setActive
525
561
  }, NAV_TABS.map(function (label, index) {