@shipfox/client-triggers 0.2.0

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 (95) hide show
  1. package/.storybook/main.ts +1 -0
  2. package/.storybook/preview.css +8 -0
  3. package/.storybook/preview.tsx +89 -0
  4. package/.turbo/turbo-build.log +2 -0
  5. package/.turbo/turbo-type$colon$emit.log +1 -0
  6. package/.turbo/turbo-type.log +1 -0
  7. package/CHANGELOG.md +120 -0
  8. package/LICENSE +21 -0
  9. package/dist/components/events-filter-bar.d.ts +13 -0
  10. package/dist/components/events-filter-bar.d.ts.map +1 -0
  11. package/dist/components/events-filter-bar.js +198 -0
  12. package/dist/components/events-filter-bar.js.map +1 -0
  13. package/dist/components/events-list-states.d.ts +16 -0
  14. package/dist/components/events-list-states.d.ts.map +1 -0
  15. package/dist/components/events-list-states.js +105 -0
  16. package/dist/components/events-list-states.js.map +1 -0
  17. package/dist/components/events-list.d.ts +3 -0
  18. package/dist/components/events-list.d.ts.map +1 -0
  19. package/dist/components/events-list.js +97 -0
  20. package/dist/components/events-list.js.map +1 -0
  21. package/dist/components/events-list.stories.d.ts +53 -0
  22. package/dist/components/events-list.stories.d.ts.map +1 -0
  23. package/dist/components/events-list.stories.js +180 -0
  24. package/dist/components/events-list.stories.js.map +1 -0
  25. package/dist/components/trigger-event-detail.d.ts +13 -0
  26. package/dist/components/trigger-event-detail.d.ts.map +1 -0
  27. package/dist/components/trigger-event-detail.js +376 -0
  28. package/dist/components/trigger-event-detail.js.map +1 -0
  29. package/dist/components/trigger-event-detail.stories.d.ts +65 -0
  30. package/dist/components/trigger-event-detail.stories.d.ts.map +1 -0
  31. package/dist/components/trigger-event-detail.stories.js +181 -0
  32. package/dist/components/trigger-event-detail.stories.js.map +1 -0
  33. package/dist/components/trigger-event-result.d.ts +15 -0
  34. package/dist/components/trigger-event-result.d.ts.map +1 -0
  35. package/dist/components/trigger-event-result.js +48 -0
  36. package/dist/components/trigger-event-result.js.map +1 -0
  37. package/dist/components/trigger-event-row.d.ts +9 -0
  38. package/dist/components/trigger-event-row.d.ts.map +1 -0
  39. package/dist/components/trigger-event-row.js +91 -0
  40. package/dist/components/trigger-event-row.js.map +1 -0
  41. package/dist/components/trigger-source-icon.d.ts +20 -0
  42. package/dist/components/trigger-source-icon.d.ts.map +1 -0
  43. package/dist/components/trigger-source-icon.js +28 -0
  44. package/dist/components/trigger-source-icon.js.map +1 -0
  45. package/dist/components/types.d.ts +20 -0
  46. package/dist/components/types.d.ts.map +1 -0
  47. package/dist/components/types.js +3 -0
  48. package/dist/components/types.js.map +1 -0
  49. package/dist/hooks/api/trigger-events.d.ts +164 -0
  50. package/dist/hooks/api/trigger-events.d.ts.map +1 -0
  51. package/dist/hooks/api/trigger-events.js +122 -0
  52. package/dist/hooks/api/trigger-events.js.map +1 -0
  53. package/dist/index.d.ts +5 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +6 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/pages/events-page.d.ts +12 -0
  58. package/dist/pages/events-page.d.ts.map +1 -0
  59. package/dist/pages/events-page.js +82 -0
  60. package/dist/pages/events-page.js.map +1 -0
  61. package/dist/search.d.ts +23 -0
  62. package/dist/search.d.ts.map +1 -0
  63. package/dist/search.js +28 -0
  64. package/dist/search.js.map +1 -0
  65. package/dist/tsconfig.test.tsbuildinfo +1 -0
  66. package/package.json +92 -0
  67. package/src/components/events-filter-bar.tsx +191 -0
  68. package/src/components/events-list-states.tsx +89 -0
  69. package/src/components/events-list.stories.tsx +141 -0
  70. package/src/components/events-list.test.tsx +173 -0
  71. package/src/components/events-list.tsx +107 -0
  72. package/src/components/trigger-event-detail.stories.tsx +169 -0
  73. package/src/components/trigger-event-detail.test.tsx +201 -0
  74. package/src/components/trigger-event-detail.tsx +317 -0
  75. package/src/components/trigger-event-result.test.ts +40 -0
  76. package/src/components/trigger-event-result.ts +40 -0
  77. package/src/components/trigger-event-row.tsx +86 -0
  78. package/src/components/trigger-source-icon.react.test.tsx +34 -0
  79. package/src/components/trigger-source-icon.test.ts +23 -0
  80. package/src/components/trigger-source-icon.tsx +36 -0
  81. package/src/components/types.ts +22 -0
  82. package/src/hooks/api/trigger-events.test.ts +252 -0
  83. package/src/hooks/api/trigger-events.ts +143 -0
  84. package/src/index.ts +4 -0
  85. package/src/pages/events-page.test.tsx +100 -0
  86. package/src/pages/events-page.tsx +79 -0
  87. package/src/search.test.ts +66 -0
  88. package/src/search.ts +38 -0
  89. package/test/setup.ts +35 -0
  90. package/tsconfig.build.json +9 -0
  91. package/tsconfig.build.tsbuildinfo +1 -0
  92. package/tsconfig.json +3 -0
  93. package/tsconfig.test.json +8 -0
  94. package/vercel.json +8 -0
  95. package/vitest.config.ts +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trigger-event-detail.stories.tsx"],"sourcesContent":["import {argosScreenshot} from '@argos-ci/storybook/vitest';\nimport type {TriggerEventDetailResponseDto} from '@shipfox/api-triggers-dto';\nimport {RelativeTimeProvider} from '@shipfox/react-ui/relative-time';\nimport type {Decorator, Meta, StoryObj} from '@storybook/react';\nimport {\n createMemoryHistory,\n createRootRoute,\n createRoute,\n createRouter,\n Outlet,\n RouterProvider,\n} from '@tanstack/react-router';\nimport {screen} from 'storybook/test';\nimport {TriggerEventDetailView} from './trigger-event-detail.js';\n\nconst WORKSPACE_ID = '11111111-1111-4111-8111-111111111111';\nconst PROJECT_ID = '22222222-2222-4222-8222-222222222222';\nconst RUN_ID = '33333333-3333-4333-8333-333333333333';\n\nfunction minutesAgo(minutes: number): string {\n return new Date(Date.now() - minutes * 60_000).toISOString();\n}\n\nconst withRouter: Decorator = (Story) => {\n function StoryRoute() {\n return (\n <RelativeTimeProvider>\n <div className=\"min-h-screen bg-background-subtle-base p-24\">\n <div className=\"ml-auto w-[400px]\">\n <Story />\n </div>\n </div>\n </RelativeTimeProvider>\n );\n }\n\n const rootRoute = createRootRoute({component: Outlet});\n const storyRoute = createRoute({\n getParentRoute: () => rootRoute,\n path: '/',\n component: StoryRoute,\n });\n const runRoute = createRoute({\n getParentRoute: () => rootRoute,\n path: '/workspaces/$wid/projects/$pid/runs/$workflowRunId',\n component: StoryRoute,\n });\n const router = createRouter({\n history: createMemoryHistory({initialEntries: ['/']}),\n routeTree: rootRoute.addChildren([storyRoute, runRoute]),\n });\n\n return <RouterProvider router={router} />;\n};\n\nconst routedEvent: TriggerEventDetailResponseDto = {\n id: '44444444-4444-4444-8444-444444444444',\n event_ref: 'github:delivery-179:push',\n origin: 'integration',\n workspace_id: WORKSPACE_ID,\n provider: 'github',\n source: 'github_acme',\n event: 'push',\n delivery_id: 'delivery-179',\n connection_id: '55555555-5555-4555-8555-555555555555',\n connection_name: 'ShipfoxHQ Production',\n outcome: 'routed',\n matched_count: 2,\n payload: {\n ref: 'refs/heads/main',\n repository: {full_name: 'ShipfoxHQ/platform'},\n head_commit: {id: '9f1a0f2c7a1b', message: 'Deploy event detail'},\n },\n received_at: minutesAgo(15),\n processed_at: '2026-06-25T19:30:02.000Z',\n created_at: '2026-06-25T19:30:00.000Z',\n decisions: [\n {\n id: '66666666-6666-4666-8666-666666666666',\n received_event_id: '44444444-4444-4444-8444-444444444444',\n subscription_kind: 'trigger',\n subscription_id: '77777777-7777-4777-8777-777777777777',\n subscription_name: 'Deploy production',\n workflow_definition_id: '88888888-8888-4888-8888-888888888888',\n project_id: PROJECT_ID,\n workflow_run_id: null,\n job_id: null,\n matcher_kind: null,\n matcher_ordinal: null,\n decision: 'triggered',\n run_id: RUN_ID,\n run_name: 'deploy-web #184',\n reason: null,\n created_at: '2026-06-25T19:30:02.000Z',\n },\n {\n id: '99999999-9999-4999-8999-999999999999',\n received_event_id: '44444444-4444-4444-8444-444444444444',\n subscription_kind: 'trigger',\n subscription_id: 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',\n subscription_name: 'Mirror staging',\n workflow_definition_id: 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb',\n project_id: PROJECT_ID,\n workflow_run_id: null,\n job_id: null,\n matcher_kind: null,\n matcher_ordinal: null,\n decision: 'triggered',\n run_id: 'cccccccc-cccc-4ccc-8ccc-cccccccccccc',\n run_name: 'mirror-staging #51',\n reason: null,\n created_at: '2026-06-25T19:30:02.000Z',\n },\n ],\n};\n\nconst discardedEvent: TriggerEventDetailResponseDto = {\n ...routedEvent,\n id: 'dddddddd-dddd-4ddd-8ddd-dddddddddddd',\n event_ref: 'github:delivery-180:issue_comment',\n event: 'issue_comment',\n delivery_id: 'delivery-180',\n outcome: 'discarded',\n matched_count: 0,\n payload: {action: 'created', comment: {body: '/preview'}},\n processed_at: '2026-06-25T19:33:01.000Z',\n decisions: [],\n};\n\nconst meta = {\n title: 'Triggers/EventDetail',\n component: TriggerEventDetailView,\n parameters: {\n layout: 'fullscreen',\n argos: {\n modes: {\n light: {theme: 'light'},\n dark: {theme: 'dark'},\n },\n },\n },\n decorators: [withRouter],\n args: {\n workspaceId: WORKSPACE_ID,\n event: routedEvent,\n onBack: () => undefined,\n },\n} satisfies Meta<typeof TriggerEventDetailView>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nasync function captureDetail(ctx: Parameters<NonNullable<Story['play']>>[0], name: string) {\n await screen.findByRole('complementary', {name: 'Event details'});\n await argosScreenshot(ctx, name);\n}\n\nexport const Playground: Story = {\n play: async (ctx) => {\n await captureDetail(ctx, 'Trigger Event Detail Playground');\n },\n};\n\nexport const Discarded: Story = {\n args: {event: discardedEvent},\n play: async (ctx) => {\n await captureDetail(ctx, 'Trigger Event Detail Discarded');\n },\n};\n"],"names":["argosScreenshot","RelativeTimeProvider","createMemoryHistory","createRootRoute","createRoute","createRouter","Outlet","RouterProvider","screen","TriggerEventDetailView","WORKSPACE_ID","PROJECT_ID","RUN_ID","minutesAgo","minutes","Date","now","toISOString","withRouter","Story","StoryRoute","div","className","rootRoute","component","storyRoute","getParentRoute","path","runRoute","router","history","initialEntries","routeTree","addChildren","routedEvent","id","event_ref","origin","workspace_id","provider","source","event","delivery_id","connection_id","connection_name","outcome","matched_count","payload","ref","repository","full_name","head_commit","message","received_at","processed_at","created_at","decisions","received_event_id","subscription_kind","subscription_id","subscription_name","workflow_definition_id","project_id","workflow_run_id","job_id","matcher_kind","matcher_ordinal","decision","run_id","run_name","reason","discardedEvent","action","comment","body","meta","title","parameters","layout","argos","modes","light","theme","dark","decorators","args","workspaceId","onBack","undefined","captureDetail","ctx","name","findByRole","Playground","play","Discarded"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { TriggerEventListItemDto } from '@shipfox/api-triggers-dto';
2
+ import type { BadgeVariant } from '@shipfox/react-ui/badge';
3
+ export interface TriggerEventResult {
4
+ label: string;
5
+ badge: BadgeVariant;
6
+ isFailure: boolean;
7
+ }
8
+ /**
9
+ * Collapses the raw event outcome into the single result an operator cares about:
10
+ * how many workflows it triggered (or that it failed). `routed`/`discarded` are not
11
+ * surfaced as distinct states - both are successfully-processed events that differ
12
+ * only by match count.
13
+ */
14
+ export declare function triggerEventResult(event: Pick<TriggerEventListItemDto, 'outcome' | 'matched_count'>): TriggerEventResult;
15
+ //# sourceMappingURL=trigger-event-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-event-result.d.ts","sourceRoot":"","sources":["../../src/components/trigger-event-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,eAAe,CAAC,GAChE,kBAAkB,CAsBpB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Collapses the raw event outcome into the single result an operator cares about:
3
+ * how many workflows it triggered (or that it failed). `routed`/`discarded` are not
4
+ * surfaced as distinct states - both are successfully-processed events that differ
5
+ * only by match count.
6
+ */ export function triggerEventResult(event) {
7
+ switch(event.outcome){
8
+ case 'routed':
9
+ {
10
+ const plural = event.matched_count === 1 ? '' : 's';
11
+ return {
12
+ label: `Triggered ${event.matched_count} workflow${plural}`,
13
+ badge: 'info',
14
+ isFailure: false
15
+ };
16
+ }
17
+ case 'discarded':
18
+ return {
19
+ label: 'No workflows triggered',
20
+ badge: 'neutral',
21
+ isFailure: false
22
+ };
23
+ case 'failed':
24
+ case 'errored':
25
+ return {
26
+ label: 'Failed',
27
+ badge: 'error',
28
+ isFailure: true
29
+ };
30
+ case 'received':
31
+ return {
32
+ label: 'Evaluating…',
33
+ badge: 'neutral',
34
+ isFailure: false
35
+ };
36
+ default:
37
+ {
38
+ const _exhaustive = event.outcome;
39
+ return {
40
+ label: 'Unknown',
41
+ badge: 'warning',
42
+ isFailure: false
43
+ };
44
+ }
45
+ }
46
+ }
47
+
48
+ //# sourceMappingURL=trigger-event-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trigger-event-result.ts"],"sourcesContent":["import type {TriggerEventListItemDto} from '@shipfox/api-triggers-dto';\nimport type {BadgeVariant} from '@shipfox/react-ui/badge';\n\nexport interface TriggerEventResult {\n label: string;\n badge: BadgeVariant;\n isFailure: boolean;\n}\n\n/**\n * Collapses the raw event outcome into the single result an operator cares about:\n * how many workflows it triggered (or that it failed). `routed`/`discarded` are not\n * surfaced as distinct states - both are successfully-processed events that differ\n * only by match count.\n */\nexport function triggerEventResult(\n event: Pick<TriggerEventListItemDto, 'outcome' | 'matched_count'>,\n): TriggerEventResult {\n switch (event.outcome) {\n case 'routed': {\n const plural = event.matched_count === 1 ? '' : 's';\n return {\n label: `Triggered ${event.matched_count} workflow${plural}`,\n badge: 'info',\n isFailure: false,\n };\n }\n case 'discarded':\n return {label: 'No workflows triggered', badge: 'neutral', isFailure: false};\n case 'failed':\n case 'errored':\n return {label: 'Failed', badge: 'error', isFailure: true};\n case 'received':\n return {label: 'Evaluating…', badge: 'neutral', isFailure: false};\n default: {\n const _exhaustive: never = event.outcome;\n return {label: 'Unknown', badge: 'warning', isFailure: false};\n }\n }\n}\n"],"names":["triggerEventResult","event","outcome","plural","matched_count","label","badge","isFailure","_exhaustive"],"mappings":"AASA;;;;;CAKC,GACD,OAAO,SAASA,mBACdC,KAAiE;IAEjE,OAAQA,MAAMC,OAAO;QACnB,KAAK;YAAU;gBACb,MAAMC,SAASF,MAAMG,aAAa,KAAK,IAAI,KAAK;gBAChD,OAAO;oBACLC,OAAO,CAAC,UAAU,EAAEJ,MAAMG,aAAa,CAAC,SAAS,EAAED,QAAQ;oBAC3DG,OAAO;oBACPC,WAAW;gBACb;YACF;QACA,KAAK;YACH,OAAO;gBAACF,OAAO;gBAA0BC,OAAO;gBAAWC,WAAW;YAAK;QAC7E,KAAK;QACL,KAAK;YACH,OAAO;gBAACF,OAAO;gBAAUC,OAAO;gBAASC,WAAW;YAAI;QAC1D,KAAK;YACH,OAAO;gBAACF,OAAO;gBAAeC,OAAO;gBAAWC,WAAW;YAAK;QAClE;YAAS;gBACP,MAAMC,cAAqBP,MAAMC,OAAO;gBACxC,OAAO;oBAACG,OAAO;oBAAWC,OAAO;oBAAWC,WAAW;gBAAK;YAC9D;IACF;AACF"}
@@ -0,0 +1,9 @@
1
+ import type { TriggerEventListItemDto } from '@shipfox/api-triggers-dto';
2
+ interface TriggerEventRowProps {
3
+ event: TriggerEventListItemDto;
4
+ selected: boolean;
5
+ onSelect: (eventId: string) => void;
6
+ }
7
+ export declare function TriggerEventRow({ event, selected, onSelect }: TriggerEventRowProps): import("react").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=trigger-event-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-event-row.d.ts","sourceRoot":"","sources":["../../src/components/trigger-event-row.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAUvE,UAAU,oBAAoB;IAC5B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,eAAe,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAC,EAAE,oBAAoB,+BA6DhF"}
@@ -0,0 +1,91 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { RelativeTime } from '@shipfox/react-ui/relative-time';
3
+ import { TableCell, TableRow } from '@shipfox/react-ui/table';
4
+ import { Tooltip, TooltipContent, TooltipTrigger } from '@shipfox/react-ui/tooltip';
5
+ import { Code, Text } from '@shipfox/react-ui/typography';
6
+ import { cn } from '@shipfox/react-ui/utils';
7
+ import { triggerEventResult } from './trigger-event-result.js';
8
+ import { TriggerSourceIcon } from './trigger-source-icon.js';
9
+ export function TriggerEventRow({ event, selected, onSelect }) {
10
+ const result = triggerEventResult(event);
11
+ const eventLabel = triggerEventDisplayLabel(event);
12
+ const fullEventLabel = triggerEventFullLabel(event);
13
+ function handleRowClick(clickEvent) {
14
+ const target = clickEvent.target;
15
+ if (target instanceof HTMLElement && target.closest('button,a')) return;
16
+ onSelect(event.id);
17
+ }
18
+ return /*#__PURE__*/ _jsxs(TableRow, {
19
+ "data-selected": selected ? 'true' : undefined,
20
+ className: "cursor-pointer",
21
+ onClick: handleRowClick,
22
+ children: [
23
+ /*#__PURE__*/ _jsx(TableCell, {
24
+ children: /*#__PURE__*/ _jsxs(Tooltip, {
25
+ children: [
26
+ /*#__PURE__*/ _jsx(TooltipTrigger, {
27
+ asChild: true,
28
+ children: /*#__PURE__*/ _jsxs("button", {
29
+ type: "button",
30
+ className: "flex min-w-0 items-center gap-6 rounded-6 text-left outline-none focus-visible:shadow-button-neutral-focus",
31
+ onClick: ()=>onSelect(event.id),
32
+ "aria-label": `Open details for ${fullEventLabel}`,
33
+ children: [
34
+ /*#__PURE__*/ _jsx(TriggerSourceIcon, {
35
+ provider: event.provider,
36
+ source: event.source,
37
+ "aria-hidden": "true",
38
+ className: "size-16 shrink-0 text-foreground-neutral-muted"
39
+ }),
40
+ /*#__PURE__*/ _jsx(Code, {
41
+ as: "span",
42
+ variant: "label",
43
+ className: "truncate text-foreground-neutral-base",
44
+ children: eventLabel
45
+ })
46
+ ]
47
+ })
48
+ }),
49
+ /*#__PURE__*/ _jsx(TooltipContent, {
50
+ children: /*#__PURE__*/ _jsx(Code, {
51
+ as: "span",
52
+ variant: "label",
53
+ className: "block max-w-[360px] break-words",
54
+ children: fullEventLabel
55
+ })
56
+ })
57
+ ]
58
+ })
59
+ }),
60
+ /*#__PURE__*/ _jsx(TableCell, {
61
+ children: /*#__PURE__*/ _jsx(Text, {
62
+ size: "sm",
63
+ className: cn(result.isFailure ? 'text-foreground-highlight-error' : 'text-foreground-neutral-subtle'),
64
+ children: result.label
65
+ })
66
+ }),
67
+ /*#__PURE__*/ _jsx(TableCell, {
68
+ className: "text-right",
69
+ children: /*#__PURE__*/ _jsx(Code, {
70
+ as: "span",
71
+ variant: "label",
72
+ className: "text-foreground-neutral-muted",
73
+ children: /*#__PURE__*/ _jsx(RelativeTime, {
74
+ value: event.received_at
75
+ })
76
+ })
77
+ })
78
+ ]
79
+ });
80
+ }
81
+ function triggerEventDisplayLabel(event) {
82
+ return event.event || event.source;
83
+ }
84
+ function triggerEventFullLabel(event) {
85
+ return [
86
+ event.source,
87
+ event.event
88
+ ].filter(Boolean).join(' · ');
89
+ }
90
+
91
+ //# sourceMappingURL=trigger-event-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trigger-event-row.tsx"],"sourcesContent":["import type {TriggerEventListItemDto} from '@shipfox/api-triggers-dto';\nimport {RelativeTime} from '@shipfox/react-ui/relative-time';\nimport {TableCell, TableRow} from '@shipfox/react-ui/table';\nimport {Tooltip, TooltipContent, TooltipTrigger} from '@shipfox/react-ui/tooltip';\nimport {Code, Text} from '@shipfox/react-ui/typography';\nimport {cn} from '@shipfox/react-ui/utils';\nimport type {MouseEvent} from 'react';\nimport {triggerEventResult} from './trigger-event-result.js';\nimport {TriggerSourceIcon} from './trigger-source-icon.js';\n\ninterface TriggerEventRowProps {\n event: TriggerEventListItemDto;\n selected: boolean;\n onSelect: (eventId: string) => void;\n}\n\nexport function TriggerEventRow({event, selected, onSelect}: TriggerEventRowProps) {\n const result = triggerEventResult(event);\n const eventLabel = triggerEventDisplayLabel(event);\n const fullEventLabel = triggerEventFullLabel(event);\n\n function handleRowClick(clickEvent: MouseEvent<HTMLTableRowElement>) {\n const target = clickEvent.target;\n if (target instanceof HTMLElement && target.closest('button,a')) return;\n onSelect(event.id);\n }\n\n return (\n <TableRow\n data-selected={selected ? 'true' : undefined}\n className=\"cursor-pointer\"\n onClick={handleRowClick}\n >\n <TableCell>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n className=\"flex min-w-0 items-center gap-6 rounded-6 text-left outline-none focus-visible:shadow-button-neutral-focus\"\n onClick={() => onSelect(event.id)}\n aria-label={`Open details for ${fullEventLabel}`}\n >\n <TriggerSourceIcon\n provider={event.provider}\n source={event.source}\n aria-hidden=\"true\"\n className=\"size-16 shrink-0 text-foreground-neutral-muted\"\n />\n <Code as=\"span\" variant=\"label\" className=\"truncate text-foreground-neutral-base\">\n {eventLabel}\n </Code>\n </button>\n </TooltipTrigger>\n <TooltipContent>\n <Code as=\"span\" variant=\"label\" className=\"block max-w-[360px] break-words\">\n {fullEventLabel}\n </Code>\n </TooltipContent>\n </Tooltip>\n </TableCell>\n <TableCell>\n <Text\n size=\"sm\"\n className={cn(\n result.isFailure ? 'text-foreground-highlight-error' : 'text-foreground-neutral-subtle',\n )}\n >\n {result.label}\n </Text>\n </TableCell>\n <TableCell className=\"text-right\">\n <Code as=\"span\" variant=\"label\" className=\"text-foreground-neutral-muted\">\n <RelativeTime value={event.received_at} />\n </Code>\n </TableCell>\n </TableRow>\n );\n}\n\nfunction triggerEventDisplayLabel(event: Pick<TriggerEventListItemDto, 'event' | 'source'>) {\n return event.event || event.source;\n}\n\nfunction triggerEventFullLabel(event: Pick<TriggerEventListItemDto, 'event' | 'source'>) {\n return [event.source, event.event].filter(Boolean).join(' · ');\n}\n"],"names":["RelativeTime","TableCell","TableRow","Tooltip","TooltipContent","TooltipTrigger","Code","Text","cn","triggerEventResult","TriggerSourceIcon","TriggerEventRow","event","selected","onSelect","result","eventLabel","triggerEventDisplayLabel","fullEventLabel","triggerEventFullLabel","handleRowClick","clickEvent","target","HTMLElement","closest","id","data-selected","undefined","className","onClick","asChild","button","type","aria-label","provider","source","aria-hidden","as","variant","size","isFailure","label","value","received_at","filter","Boolean","join"],"mappings":";AACA,SAAQA,YAAY,QAAO,kCAAkC;AAC7D,SAAQC,SAAS,EAAEC,QAAQ,QAAO,0BAA0B;AAC5D,SAAQC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAO,4BAA4B;AAClF,SAAQC,IAAI,EAAEC,IAAI,QAAO,+BAA+B;AACxD,SAAQC,EAAE,QAAO,0BAA0B;AAE3C,SAAQC,kBAAkB,QAAO,4BAA4B;AAC7D,SAAQC,iBAAiB,QAAO,2BAA2B;AAQ3D,OAAO,SAASC,gBAAgB,EAACC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ,EAAuB;IAC/E,MAAMC,SAASN,mBAAmBG;IAClC,MAAMI,aAAaC,yBAAyBL;IAC5C,MAAMM,iBAAiBC,sBAAsBP;IAE7C,SAASQ,eAAeC,UAA2C;QACjE,MAAMC,SAASD,WAAWC,MAAM;QAChC,IAAIA,kBAAkBC,eAAeD,OAAOE,OAAO,CAAC,aAAa;QACjEV,SAASF,MAAMa,EAAE;IACnB;IAEA,qBACE,MAACvB;QACCwB,iBAAeb,WAAW,SAASc;QACnCC,WAAU;QACVC,SAAST;;0BAET,KAACnB;0BACC,cAAA,MAACE;;sCACC,KAACE;4BAAeyB,OAAO;sCACrB,cAAA,MAACC;gCACCC,MAAK;gCACLJ,WAAU;gCACVC,SAAS,IAAMf,SAASF,MAAMa,EAAE;gCAChCQ,cAAY,CAAC,iBAAiB,EAAEf,gBAAgB;;kDAEhD,KAACR;wCACCwB,UAAUtB,MAAMsB,QAAQ;wCACxBC,QAAQvB,MAAMuB,MAAM;wCACpBC,eAAY;wCACZR,WAAU;;kDAEZ,KAACtB;wCAAK+B,IAAG;wCAAOC,SAAQ;wCAAQV,WAAU;kDACvCZ;;;;;sCAIP,KAACZ;sCACC,cAAA,KAACE;gCAAK+B,IAAG;gCAAOC,SAAQ;gCAAQV,WAAU;0CACvCV;;;;;;0BAKT,KAACjB;0BACC,cAAA,KAACM;oBACCgC,MAAK;oBACLX,WAAWpB,GACTO,OAAOyB,SAAS,GAAG,oCAAoC;8BAGxDzB,OAAO0B,KAAK;;;0BAGjB,KAACxC;gBAAU2B,WAAU;0BACnB,cAAA,KAACtB;oBAAK+B,IAAG;oBAAOC,SAAQ;oBAAQV,WAAU;8BACxC,cAAA,KAAC5B;wBAAa0C,OAAO9B,MAAM+B,WAAW;;;;;;AAKhD;AAEA,SAAS1B,yBAAyBL,KAAwD;IACxF,OAAOA,MAAMA,KAAK,IAAIA,MAAMuB,MAAM;AACpC;AAEA,SAAShB,sBAAsBP,KAAwD;IACrF,OAAO;QAACA,MAAMuB,MAAM;QAAEvB,MAAMA,KAAK;KAAC,CAACgC,MAAM,CAACC,SAASC,IAAI,CAAC;AAC1D"}
@@ -0,0 +1,20 @@
1
+ import { Icon, type IconName } from '@shipfox/react-ui/icon';
2
+ import type { ComponentProps } from 'react';
3
+ /**
4
+ * Gives first-class icons to system trigger sources; integration sources keep
5
+ * using the integration catalog and its fallback.
6
+ */
7
+ export declare function getTriggerSourceIcon({ provider, source, }: {
8
+ provider: string | null | undefined;
9
+ source: string | null | undefined;
10
+ }): IconName;
11
+ export interface TriggerSourceIconProps extends Omit<ComponentProps<typeof Icon>, 'name'> {
12
+ provider: string | null | undefined;
13
+ source: string | null | undefined;
14
+ }
15
+ /**
16
+ * Preserves the base icon props so callers can decide whether the glyph is
17
+ * decorative or labeled.
18
+ */
19
+ export declare function TriggerSourceIcon({ provider, source, ...props }: TriggerSourceIconProps): import("react").JSX.Element;
20
+ //# sourceMappingURL=trigger-source-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-source-icon.d.ts","sourceRoot":"","sources":["../../src/components/trigger-source-icon.tsx"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,KAAK,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,OAAO,CAAC;AAO1C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC,GAAG,QAAQ,CAGX;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,EAAE,MAAM,CAAC;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,EAAC,EAAE,sBAAsB,+BAErF"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getIntegrationIcon } from '@shipfox/client-integrations';
3
+ import { Icon } from '@shipfox/react-ui/icon';
4
+ const SYSTEM_TRIGGER_SOURCE_ICONS = {
5
+ manual: 'cursorLine',
6
+ cron: 'timeLine'
7
+ };
8
+ /**
9
+ * Gives first-class icons to system trigger sources; integration sources keep
10
+ * using the integration catalog and its fallback.
11
+ */ export function getTriggerSourceIcon({ provider, source }) {
12
+ const systemIcon = source ? SYSTEM_TRIGGER_SOURCE_ICONS[source] : undefined;
13
+ return systemIcon ?? getIntegrationIcon(provider);
14
+ }
15
+ /**
16
+ * Preserves the base icon props so callers can decide whether the glyph is
17
+ * decorative or labeled.
18
+ */ export function TriggerSourceIcon({ provider, source, ...props }) {
19
+ return /*#__PURE__*/ _jsx(Icon, {
20
+ name: getTriggerSourceIcon({
21
+ provider,
22
+ source
23
+ }),
24
+ ...props
25
+ });
26
+ }
27
+
28
+ //# sourceMappingURL=trigger-source-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/trigger-source-icon.tsx"],"sourcesContent":["import {getIntegrationIcon} from '@shipfox/client-integrations';\nimport {Icon, type IconName} from '@shipfox/react-ui/icon';\nimport type {ComponentProps} from 'react';\n\nconst SYSTEM_TRIGGER_SOURCE_ICONS: Record<string, IconName> = {\n manual: 'cursorLine',\n cron: 'timeLine',\n};\n\n/**\n * Gives first-class icons to system trigger sources; integration sources keep\n * using the integration catalog and its fallback.\n */\nexport function getTriggerSourceIcon({\n provider,\n source,\n}: {\n provider: string | null | undefined;\n source: string | null | undefined;\n}): IconName {\n const systemIcon = source ? SYSTEM_TRIGGER_SOURCE_ICONS[source] : undefined;\n return systemIcon ?? getIntegrationIcon(provider);\n}\n\nexport interface TriggerSourceIconProps extends Omit<ComponentProps<typeof Icon>, 'name'> {\n provider: string | null | undefined;\n source: string | null | undefined;\n}\n\n/**\n * Preserves the base icon props so callers can decide whether the glyph is\n * decorative or labeled.\n */\nexport function TriggerSourceIcon({provider, source, ...props}: TriggerSourceIconProps) {\n return <Icon name={getTriggerSourceIcon({provider, source})} {...props} />;\n}\n"],"names":["getIntegrationIcon","Icon","SYSTEM_TRIGGER_SOURCE_ICONS","manual","cron","getTriggerSourceIcon","provider","source","systemIcon","undefined","TriggerSourceIcon","props","name"],"mappings":";AAAA,SAAQA,kBAAkB,QAAO,+BAA+B;AAChE,SAAQC,IAAI,QAAsB,yBAAyB;AAG3D,MAAMC,8BAAwD;IAC5DC,QAAQ;IACRC,MAAM;AACR;AAEA;;;CAGC,GACD,OAAO,SAASC,qBAAqB,EACnCC,QAAQ,EACRC,MAAM,EAIP;IACC,MAAMC,aAAaD,SAASL,2BAA2B,CAACK,OAAO,GAAGE;IAClE,OAAOD,cAAcR,mBAAmBM;AAC1C;AAOA;;;CAGC,GACD,OAAO,SAASI,kBAAkB,EAACJ,QAAQ,EAAEC,MAAM,EAAE,GAAGI,OAA8B;IACpF,qBAAO,KAACV;QAAKW,MAAMP,qBAAqB;YAACC;YAAUC;QAAM;QAAK,GAAGI,KAAK;;AACxE"}
@@ -0,0 +1,20 @@
1
+ import type { TriggerEventFacetsResponseDto, TriggerEventListItemDto } from '@shipfox/api-triggers-dto';
2
+ import type { QueryLoadErrorQuery } from '@shipfox/client-ui';
3
+ import type { TriggerEventFilters } from '#hooks/api/trigger-events.js';
4
+ export type TriggerEventsListQuery = QueryLoadErrorQuery & {
5
+ isPending: boolean;
6
+ };
7
+ export interface EventsListProps {
8
+ events: TriggerEventListItemDto[];
9
+ query: TriggerEventsListQuery;
10
+ facets: TriggerEventFacetsResponseDto | undefined;
11
+ filters: TriggerEventFilters;
12
+ onFiltersChange: (patch: Partial<TriggerEventFilters>) => void;
13
+ workspaceId: string;
14
+ hasNextPage: boolean;
15
+ isFetchingNextPage: boolean;
16
+ onLoadMore: () => void;
17
+ selectedEventId?: string | undefined;
18
+ onSelectEvent: (eventId: string) => void;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/components/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AAEtE,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GAAG;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,MAAM,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/types.ts"],"sourcesContent":["import type {\n TriggerEventFacetsResponseDto,\n TriggerEventListItemDto,\n} from '@shipfox/api-triggers-dto';\nimport type {QueryLoadErrorQuery} from '@shipfox/client-ui';\nimport type {TriggerEventFilters} from '#hooks/api/trigger-events.js';\n\nexport type TriggerEventsListQuery = QueryLoadErrorQuery & {isPending: boolean};\n\nexport interface EventsListProps {\n events: TriggerEventListItemDto[];\n query: TriggerEventsListQuery;\n facets: TriggerEventFacetsResponseDto | undefined;\n filters: TriggerEventFilters;\n onFiltersChange: (patch: Partial<TriggerEventFilters>) => void;\n workspaceId: string;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n onLoadMore: () => void;\n selectedEventId?: string | undefined;\n onSelectEvent: (eventId: string) => void;\n}\n"],"names":[],"mappings":"AASA,WAYC"}
@@ -0,0 +1,164 @@
1
+ import type { TriggerEventOutcomeDto } from '@shipfox/api-triggers-dto';
2
+ export interface TriggerEventFilters {
3
+ source?: string[] | undefined;
4
+ event?: string[] | undefined;
5
+ outcome?: TriggerEventOutcomeDto[] | undefined;
6
+ from?: string | undefined;
7
+ to?: string | undefined;
8
+ }
9
+ export declare const triggerEventsQueryKeys: {
10
+ all: readonly ["trigger-events"];
11
+ lists: (workspaceId: string) => readonly ["trigger-events", "list", string];
12
+ list: (workspaceId: string, filters: TriggerEventFilters, limit?: number) => readonly ["trigger-events", "list", string, number, {
13
+ source: string[] | null;
14
+ event: string[] | null;
15
+ outcome: string[] | null;
16
+ from: string | null;
17
+ to: string | null;
18
+ }];
19
+ detail: (id: string) => readonly ["trigger-events", "detail", string];
20
+ facets: (workspaceId: string) => readonly ["trigger-events", "facets", string];
21
+ };
22
+ export declare function listTriggerEvents({ workspaceId, filters, limit, cursor, signal, }: {
23
+ workspaceId: string;
24
+ filters?: TriggerEventFilters;
25
+ limit?: number;
26
+ cursor?: string | undefined;
27
+ signal?: AbortSignal;
28
+ }): Promise<{
29
+ trigger_events: {
30
+ id: string;
31
+ event_ref: string;
32
+ origin: "integration" | "manual" | "cron";
33
+ workspace_id: string;
34
+ provider: string | null;
35
+ source: string;
36
+ event: string;
37
+ delivery_id: string | null;
38
+ connection_id: string | null;
39
+ outcome: "received" | "routed" | "discarded" | "failed" | "errored";
40
+ matched_count: number;
41
+ received_at: string;
42
+ processed_at: string | null;
43
+ created_at: string;
44
+ }[];
45
+ next_cursor: string | null;
46
+ }>;
47
+ export declare function getTriggerEvent({ id, signal }: {
48
+ id: string;
49
+ signal?: AbortSignal;
50
+ }): Promise<{
51
+ id: string;
52
+ event_ref: string;
53
+ origin: "integration" | "manual" | "cron";
54
+ workspace_id: string;
55
+ provider: string | null;
56
+ source: string;
57
+ event: string;
58
+ delivery_id: string | null;
59
+ connection_id: string | null;
60
+ outcome: "received" | "routed" | "discarded" | "failed" | "errored";
61
+ matched_count: number;
62
+ received_at: string;
63
+ processed_at: string | null;
64
+ created_at: string;
65
+ connection_name: string | null;
66
+ payload: Record<string, unknown> | null;
67
+ decisions: {
68
+ id: string;
69
+ received_event_id: string;
70
+ subscription_kind: "trigger" | "listener";
71
+ subscription_id: string;
72
+ subscription_name: string;
73
+ workflow_definition_id: string | null;
74
+ project_id: string | null;
75
+ workflow_run_id: string | null;
76
+ job_id: string | null;
77
+ matcher_kind: "on" | "until" | null;
78
+ matcher_ordinal: number | null;
79
+ decision: "triggered" | "filter-error" | "dispatch-error";
80
+ run_id: string | null;
81
+ run_name: string | null;
82
+ reason: string | null;
83
+ created_at: string;
84
+ }[];
85
+ }>;
86
+ export declare function useTriggerEventsInfiniteQuery(workspaceId: string | undefined, filters?: TriggerEventFilters, limit?: number): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<{
87
+ trigger_events: {
88
+ id: string;
89
+ event_ref: string;
90
+ origin: "integration" | "manual" | "cron";
91
+ workspace_id: string;
92
+ provider: string | null;
93
+ source: string;
94
+ event: string;
95
+ delivery_id: string | null;
96
+ connection_id: string | null;
97
+ outcome: "received" | "routed" | "discarded" | "failed" | "errored";
98
+ matched_count: number;
99
+ received_at: string;
100
+ processed_at: string | null;
101
+ created_at: string;
102
+ }[];
103
+ next_cursor: string | null;
104
+ }, unknown>, Error>;
105
+ export declare function useTriggerEventQuery(id: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
106
+ id: string;
107
+ event_ref: string;
108
+ origin: "integration" | "manual" | "cron";
109
+ workspace_id: string;
110
+ provider: string | null;
111
+ source: string;
112
+ event: string;
113
+ delivery_id: string | null;
114
+ connection_id: string | null;
115
+ outcome: "received" | "routed" | "discarded" | "failed" | "errored";
116
+ matched_count: number;
117
+ received_at: string;
118
+ processed_at: string | null;
119
+ created_at: string;
120
+ connection_name: string | null;
121
+ payload: Record<string, unknown> | null;
122
+ decisions: {
123
+ id: string;
124
+ received_event_id: string;
125
+ subscription_kind: "trigger" | "listener";
126
+ subscription_id: string;
127
+ subscription_name: string;
128
+ workflow_definition_id: string | null;
129
+ project_id: string | null;
130
+ workflow_run_id: string | null;
131
+ job_id: string | null;
132
+ matcher_kind: "on" | "until" | null;
133
+ matcher_ordinal: number | null;
134
+ decision: "triggered" | "filter-error" | "dispatch-error";
135
+ run_id: string | null;
136
+ run_name: string | null;
137
+ reason: string | null;
138
+ created_at: string;
139
+ }[];
140
+ }>, Error>;
141
+ export declare function getTriggerEventFacets({ workspaceId, signal, }: {
142
+ workspaceId: string;
143
+ signal?: AbortSignal;
144
+ }): Promise<{
145
+ sources: {
146
+ value: string;
147
+ count: number;
148
+ }[];
149
+ events: {
150
+ value: string;
151
+ count: number;
152
+ }[];
153
+ }>;
154
+ export declare function useTriggerEventFacetsQuery(workspaceId: string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<{
155
+ sources: {
156
+ value: string;
157
+ count: number;
158
+ }[];
159
+ events: {
160
+ value: string;
161
+ count: number;
162
+ }[];
163
+ }>, Error>;
164
+ //# sourceMappingURL=trigger-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-events.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/trigger-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAyBD,eAAO,MAAM,sBAAsB;;yBAEZ,MAAM;wBACP,MAAM,WAAW,mBAAmB;;;;;;;iBAM3C,MAAM;0BACG,MAAM;CAC7B,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAY,EACZ,KAAU,EACV,MAAM,EACN,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;;;;;;;;;;;;;;;;;;GAYA;AAED,wBAAsB,eAAe,CAAC,EAAC,EAAE,EAAE,MAAM,EAAC,EAAE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKrF;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,mBAAwB,EACjC,KAAK,SAAK;;;;;;;;;;;;;;;;;;oBAmBX;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAM1D;AAED,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,GACP,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;;;;;;;;;GAMA;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;;;;;;;;;WAUzE"}
@@ -0,0 +1,122 @@
1
+ import { apiRequest } from '@shipfox/client-api';
2
+ import { keepPreviousData, useInfiniteQuery, useQuery } from '@tanstack/react-query';
3
+ function normalizeStringFilter(values) {
4
+ return values && values.length > 0 ? [
5
+ ...new Set(values)
6
+ ].sort() : null;
7
+ }
8
+ function normalizeTriggerEventFiltersForQueryKey(filters) {
9
+ return {
10
+ source: normalizeStringFilter(filters.source),
11
+ event: normalizeStringFilter(filters.event),
12
+ outcome: normalizeStringFilter(filters.outcome),
13
+ from: filters.from ?? null,
14
+ to: filters.to ?? null
15
+ };
16
+ }
17
+ function setListParam(params, name, values) {
18
+ const normalized = normalizeStringFilter(values);
19
+ if (normalized) params.set(name, normalized.join(','));
20
+ }
21
+ export const triggerEventsQueryKeys = {
22
+ all: [
23
+ 'trigger-events'
24
+ ],
25
+ lists: (workspaceId)=>[
26
+ ...triggerEventsQueryKeys.all,
27
+ 'list',
28
+ workspaceId
29
+ ],
30
+ list: (workspaceId, filters, limit = 50)=>[
31
+ ...triggerEventsQueryKeys.lists(workspaceId),
32
+ limit,
33
+ normalizeTriggerEventFiltersForQueryKey(filters)
34
+ ],
35
+ detail: (id)=>[
36
+ ...triggerEventsQueryKeys.all,
37
+ 'detail',
38
+ id
39
+ ],
40
+ facets: (workspaceId)=>[
41
+ ...triggerEventsQueryKeys.all,
42
+ 'facets',
43
+ workspaceId
44
+ ]
45
+ };
46
+ export async function listTriggerEvents({ workspaceId, filters = {}, limit = 50, cursor, signal }) {
47
+ const params = new URLSearchParams({
48
+ workspace_id: workspaceId,
49
+ limit: String(limit)
50
+ });
51
+ if (cursor) params.set('cursor', cursor);
52
+ setListParam(params, 'source', filters.source);
53
+ setListParam(params, 'event', filters.event);
54
+ if (filters.from) params.set('from', filters.from);
55
+ if (filters.to) params.set('to', filters.to);
56
+ setListParam(params, 'outcome', filters.outcome);
57
+ return await apiRequest(`/trigger-events?${params.toString()}`, {
58
+ signal
59
+ });
60
+ }
61
+ export async function getTriggerEvent({ id, signal }) {
62
+ return await apiRequest(`/trigger-events/${encodeURIComponent(id)}`, {
63
+ signal
64
+ });
65
+ }
66
+ export function useTriggerEventsInfiniteQuery(workspaceId, filters = {}, limit = 50) {
67
+ return useInfiniteQuery({
68
+ queryKey: workspaceId ? triggerEventsQueryKeys.list(workspaceId, filters, limit) : [
69
+ ...triggerEventsQueryKeys.all,
70
+ 'list'
71
+ ],
72
+ enabled: Boolean(workspaceId),
73
+ initialPageParam: undefined,
74
+ queryFn: ({ pageParam, signal })=>listTriggerEvents({
75
+ workspaceId: workspaceId ?? '',
76
+ filters,
77
+ limit,
78
+ cursor: pageParam,
79
+ signal
80
+ }),
81
+ getNextPageParam: (lastPage)=>lastPage.next_cursor ?? undefined,
82
+ placeholderData: keepPreviousData
83
+ });
84
+ }
85
+ export function useTriggerEventQuery(id) {
86
+ return useQuery({
87
+ queryKey: id ? triggerEventsQueryKeys.detail(id) : [
88
+ ...triggerEventsQueryKeys.all,
89
+ 'detail'
90
+ ],
91
+ enabled: Boolean(id),
92
+ queryFn: ({ signal })=>getTriggerEvent({
93
+ id: id ?? '',
94
+ signal
95
+ })
96
+ });
97
+ }
98
+ export async function getTriggerEventFacets({ workspaceId, signal }) {
99
+ const params = new URLSearchParams({
100
+ workspace_id: workspaceId
101
+ });
102
+ return await apiRequest(`/trigger-events/facets?${params.toString()}`, {
103
+ signal
104
+ });
105
+ }
106
+ export function useTriggerEventFacetsQuery(workspaceId) {
107
+ return useQuery({
108
+ queryKey: workspaceId ? triggerEventsQueryKeys.facets(workspaceId) : [
109
+ ...triggerEventsQueryKeys.all,
110
+ 'facets'
111
+ ],
112
+ enabled: Boolean(workspaceId),
113
+ queryFn: ({ signal })=>getTriggerEventFacets({
114
+ workspaceId: workspaceId ?? '',
115
+ signal
116
+ }),
117
+ // Distinct values change slowly; avoid refetching on every page mount.
118
+ staleTime: 5 * 60 * 1000
119
+ });
120
+ }
121
+
122
+ //# sourceMappingURL=trigger-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/api/trigger-events.ts"],"sourcesContent":["import type {\n TriggerEventDetailResponseDto,\n TriggerEventFacetsResponseDto,\n TriggerEventListResponseDto,\n TriggerEventOutcomeDto,\n} from '@shipfox/api-triggers-dto';\nimport {apiRequest} from '@shipfox/client-api';\nimport {keepPreviousData, useInfiniteQuery, useQuery} from '@tanstack/react-query';\n\nexport interface TriggerEventFilters {\n source?: string[] | undefined;\n event?: string[] | undefined;\n outcome?: TriggerEventOutcomeDto[] | undefined;\n from?: string | undefined;\n to?: string | undefined;\n}\n\nfunction normalizeStringFilter(values: readonly string[] | undefined) {\n return values && values.length > 0 ? [...new Set(values)].sort() : null;\n}\n\nfunction normalizeTriggerEventFiltersForQueryKey(filters: TriggerEventFilters) {\n return {\n source: normalizeStringFilter(filters.source),\n event: normalizeStringFilter(filters.event),\n outcome: normalizeStringFilter(filters.outcome),\n from: filters.from ?? null,\n to: filters.to ?? null,\n };\n}\n\nfunction setListParam(\n params: URLSearchParams,\n name: string,\n values: readonly string[] | undefined,\n) {\n const normalized = normalizeStringFilter(values);\n if (normalized) params.set(name, normalized.join(','));\n}\n\nexport const triggerEventsQueryKeys = {\n all: ['trigger-events'] as const,\n lists: (workspaceId: string) => [...triggerEventsQueryKeys.all, 'list', workspaceId] as const,\n list: (workspaceId: string, filters: TriggerEventFilters, limit = 50) =>\n [\n ...triggerEventsQueryKeys.lists(workspaceId),\n limit,\n normalizeTriggerEventFiltersForQueryKey(filters),\n ] as const,\n detail: (id: string) => [...triggerEventsQueryKeys.all, 'detail', id] as const,\n facets: (workspaceId: string) => [...triggerEventsQueryKeys.all, 'facets', workspaceId] as const,\n};\n\nexport async function listTriggerEvents({\n workspaceId,\n filters = {},\n limit = 50,\n cursor,\n signal,\n}: {\n workspaceId: string;\n filters?: TriggerEventFilters;\n limit?: number;\n cursor?: string | undefined;\n signal?: AbortSignal;\n}) {\n const params = new URLSearchParams({workspace_id: workspaceId, limit: String(limit)});\n if (cursor) params.set('cursor', cursor);\n setListParam(params, 'source', filters.source);\n setListParam(params, 'event', filters.event);\n if (filters.from) params.set('from', filters.from);\n if (filters.to) params.set('to', filters.to);\n setListParam(params, 'outcome', filters.outcome);\n\n return await apiRequest<TriggerEventListResponseDto>(`/trigger-events?${params.toString()}`, {\n signal,\n });\n}\n\nexport async function getTriggerEvent({id, signal}: {id: string; signal?: AbortSignal}) {\n return await apiRequest<TriggerEventDetailResponseDto>(\n `/trigger-events/${encodeURIComponent(id)}`,\n {signal},\n );\n}\n\nexport function useTriggerEventsInfiniteQuery(\n workspaceId: string | undefined,\n filters: TriggerEventFilters = {},\n limit = 50,\n) {\n return useInfiniteQuery({\n queryKey: workspaceId\n ? triggerEventsQueryKeys.list(workspaceId, filters, limit)\n : [...triggerEventsQueryKeys.all, 'list'],\n enabled: Boolean(workspaceId),\n initialPageParam: undefined as string | undefined,\n queryFn: ({pageParam, signal}) =>\n listTriggerEvents({\n workspaceId: workspaceId ?? '',\n filters,\n limit,\n cursor: pageParam,\n signal,\n }),\n getNextPageParam: (lastPage) => lastPage.next_cursor ?? undefined,\n placeholderData: keepPreviousData,\n });\n}\n\nexport function useTriggerEventQuery(id: string | undefined) {\n return useQuery({\n queryKey: id ? triggerEventsQueryKeys.detail(id) : [...triggerEventsQueryKeys.all, 'detail'],\n enabled: Boolean(id),\n queryFn: ({signal}) => getTriggerEvent({id: id ?? '', signal}),\n });\n}\n\nexport async function getTriggerEventFacets({\n workspaceId,\n signal,\n}: {\n workspaceId: string;\n signal?: AbortSignal;\n}) {\n const params = new URLSearchParams({workspace_id: workspaceId});\n return await apiRequest<TriggerEventFacetsResponseDto>(\n `/trigger-events/facets?${params.toString()}`,\n {signal},\n );\n}\n\nexport function useTriggerEventFacetsQuery(workspaceId: string | undefined) {\n return useQuery({\n queryKey: workspaceId\n ? triggerEventsQueryKeys.facets(workspaceId)\n : [...triggerEventsQueryKeys.all, 'facets'],\n enabled: Boolean(workspaceId),\n queryFn: ({signal}) => getTriggerEventFacets({workspaceId: workspaceId ?? '', signal}),\n // Distinct values change slowly; avoid refetching on every page mount.\n staleTime: 5 * 60 * 1000,\n });\n}\n"],"names":["apiRequest","keepPreviousData","useInfiniteQuery","useQuery","normalizeStringFilter","values","length","Set","sort","normalizeTriggerEventFiltersForQueryKey","filters","source","event","outcome","from","to","setListParam","params","name","normalized","set","join","triggerEventsQueryKeys","all","lists","workspaceId","list","limit","detail","id","facets","listTriggerEvents","cursor","signal","URLSearchParams","workspace_id","String","toString","getTriggerEvent","encodeURIComponent","useTriggerEventsInfiniteQuery","queryKey","enabled","Boolean","initialPageParam","undefined","queryFn","pageParam","getNextPageParam","lastPage","next_cursor","placeholderData","useTriggerEventQuery","getTriggerEventFacets","useTriggerEventFacetsQuery","staleTime"],"mappings":"AAMA,SAAQA,UAAU,QAAO,sBAAsB;AAC/C,SAAQC,gBAAgB,EAAEC,gBAAgB,EAAEC,QAAQ,QAAO,wBAAwB;AAUnF,SAASC,sBAAsBC,MAAqC;IAClE,OAAOA,UAAUA,OAAOC,MAAM,GAAG,IAAI;WAAI,IAAIC,IAAIF;KAAQ,CAACG,IAAI,KAAK;AACrE;AAEA,SAASC,wCAAwCC,OAA4B;IAC3E,OAAO;QACLC,QAAQP,sBAAsBM,QAAQC,MAAM;QAC5CC,OAAOR,sBAAsBM,QAAQE,KAAK;QAC1CC,SAAST,sBAAsBM,QAAQG,OAAO;QAC9CC,MAAMJ,QAAQI,IAAI,IAAI;QACtBC,IAAIL,QAAQK,EAAE,IAAI;IACpB;AACF;AAEA,SAASC,aACPC,MAAuB,EACvBC,IAAY,EACZb,MAAqC;IAErC,MAAMc,aAAaf,sBAAsBC;IACzC,IAAIc,YAAYF,OAAOG,GAAG,CAACF,MAAMC,WAAWE,IAAI,CAAC;AACnD;AAEA,OAAO,MAAMC,yBAAyB;IACpCC,KAAK;QAAC;KAAiB;IACvBC,OAAO,CAACC,cAAwB;eAAIH,uBAAuBC,GAAG;YAAE;YAAQE;SAAY;IACpFC,MAAM,CAACD,aAAqBf,SAA8BiB,QAAQ,EAAE,GAClE;eACKL,uBAAuBE,KAAK,CAACC;YAChCE;YACAlB,wCAAwCC;SACzC;IACHkB,QAAQ,CAACC,KAAe;eAAIP,uBAAuBC,GAAG;YAAE;YAAUM;SAAG;IACrEC,QAAQ,CAACL,cAAwB;eAAIH,uBAAuBC,GAAG;YAAE;YAAUE;SAAY;AACzF,EAAE;AAEF,OAAO,eAAeM,kBAAkB,EACtCN,WAAW,EACXf,UAAU,CAAC,CAAC,EACZiB,QAAQ,EAAE,EACVK,MAAM,EACNC,MAAM,EAOP;IACC,MAAMhB,SAAS,IAAIiB,gBAAgB;QAACC,cAAcV;QAAaE,OAAOS,OAAOT;IAAM;IACnF,IAAIK,QAAQf,OAAOG,GAAG,CAAC,UAAUY;IACjChB,aAAaC,QAAQ,UAAUP,QAAQC,MAAM;IAC7CK,aAAaC,QAAQ,SAASP,QAAQE,KAAK;IAC3C,IAAIF,QAAQI,IAAI,EAAEG,OAAOG,GAAG,CAAC,QAAQV,QAAQI,IAAI;IACjD,IAAIJ,QAAQK,EAAE,EAAEE,OAAOG,GAAG,CAAC,MAAMV,QAAQK,EAAE;IAC3CC,aAAaC,QAAQ,WAAWP,QAAQG,OAAO;IAE/C,OAAO,MAAMb,WAAwC,CAAC,gBAAgB,EAAEiB,OAAOoB,QAAQ,IAAI,EAAE;QAC3FJ;IACF;AACF;AAEA,OAAO,eAAeK,gBAAgB,EAACT,EAAE,EAAEI,MAAM,EAAqC;IACpF,OAAO,MAAMjC,WACX,CAAC,gBAAgB,EAAEuC,mBAAmBV,KAAK,EAC3C;QAACI;IAAM;AAEX;AAEA,OAAO,SAASO,8BACdf,WAA+B,EAC/Bf,UAA+B,CAAC,CAAC,EACjCiB,QAAQ,EAAE;IAEV,OAAOzB,iBAAiB;QACtBuC,UAAUhB,cACNH,uBAAuBI,IAAI,CAACD,aAAaf,SAASiB,SAClD;eAAIL,uBAAuBC,GAAG;YAAE;SAAO;QAC3CmB,SAASC,QAAQlB;QACjBmB,kBAAkBC;QAClBC,SAAS,CAAC,EAACC,SAAS,EAAEd,MAAM,EAAC,GAC3BF,kBAAkB;gBAChBN,aAAaA,eAAe;gBAC5Bf;gBACAiB;gBACAK,QAAQe;gBACRd;YACF;QACFe,kBAAkB,CAACC,WAAaA,SAASC,WAAW,IAAIL;QACxDM,iBAAiBlD;IACnB;AACF;AAEA,OAAO,SAASmD,qBAAqBvB,EAAsB;IACzD,OAAO1B,SAAS;QACdsC,UAAUZ,KAAKP,uBAAuBM,MAAM,CAACC,MAAM;eAAIP,uBAAuBC,GAAG;YAAE;SAAS;QAC5FmB,SAASC,QAAQd;QACjBiB,SAAS,CAAC,EAACb,MAAM,EAAC,GAAKK,gBAAgB;gBAACT,IAAIA,MAAM;gBAAII;YAAM;IAC9D;AACF;AAEA,OAAO,eAAeoB,sBAAsB,EAC1C5B,WAAW,EACXQ,MAAM,EAIP;IACC,MAAMhB,SAAS,IAAIiB,gBAAgB;QAACC,cAAcV;IAAW;IAC7D,OAAO,MAAMzB,WACX,CAAC,uBAAuB,EAAEiB,OAAOoB,QAAQ,IAAI,EAC7C;QAACJ;IAAM;AAEX;AAEA,OAAO,SAASqB,2BAA2B7B,WAA+B;IACxE,OAAOtB,SAAS;QACdsC,UAAUhB,cACNH,uBAAuBQ,MAAM,CAACL,eAC9B;eAAIH,uBAAuBC,GAAG;YAAE;SAAS;QAC7CmB,SAASC,QAAQlB;QACjBqB,SAAS,CAAC,EAACb,MAAM,EAAC,GAAKoB,sBAAsB;gBAAC5B,aAAaA,eAAe;gBAAIQ;YAAM;QACpF,uEAAuE;QACvEsB,WAAW,IAAI,KAAK;IACtB;AACF"}
@@ -0,0 +1,5 @@
1
+ export * from './components/trigger-source-icon.js';
2
+ export * from './hooks/api/trigger-events.js';
3
+ export * from './pages/events-page.js';
4
+ export * from './search.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}