@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.
- package/.storybook/main.ts +1 -0
- package/.storybook/preview.css +8 -0
- package/.storybook/preview.tsx +89 -0
- package/.turbo/turbo-build.log +2 -0
- package/.turbo/turbo-type$colon$emit.log +1 -0
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +120 -0
- package/LICENSE +21 -0
- package/dist/components/events-filter-bar.d.ts +13 -0
- package/dist/components/events-filter-bar.d.ts.map +1 -0
- package/dist/components/events-filter-bar.js +198 -0
- package/dist/components/events-filter-bar.js.map +1 -0
- package/dist/components/events-list-states.d.ts +16 -0
- package/dist/components/events-list-states.d.ts.map +1 -0
- package/dist/components/events-list-states.js +105 -0
- package/dist/components/events-list-states.js.map +1 -0
- package/dist/components/events-list.d.ts +3 -0
- package/dist/components/events-list.d.ts.map +1 -0
- package/dist/components/events-list.js +97 -0
- package/dist/components/events-list.js.map +1 -0
- package/dist/components/events-list.stories.d.ts +53 -0
- package/dist/components/events-list.stories.d.ts.map +1 -0
- package/dist/components/events-list.stories.js +180 -0
- package/dist/components/events-list.stories.js.map +1 -0
- package/dist/components/trigger-event-detail.d.ts +13 -0
- package/dist/components/trigger-event-detail.d.ts.map +1 -0
- package/dist/components/trigger-event-detail.js +376 -0
- package/dist/components/trigger-event-detail.js.map +1 -0
- package/dist/components/trigger-event-detail.stories.d.ts +65 -0
- package/dist/components/trigger-event-detail.stories.d.ts.map +1 -0
- package/dist/components/trigger-event-detail.stories.js +181 -0
- package/dist/components/trigger-event-detail.stories.js.map +1 -0
- package/dist/components/trigger-event-result.d.ts +15 -0
- package/dist/components/trigger-event-result.d.ts.map +1 -0
- package/dist/components/trigger-event-result.js +48 -0
- package/dist/components/trigger-event-result.js.map +1 -0
- package/dist/components/trigger-event-row.d.ts +9 -0
- package/dist/components/trigger-event-row.d.ts.map +1 -0
- package/dist/components/trigger-event-row.js +91 -0
- package/dist/components/trigger-event-row.js.map +1 -0
- package/dist/components/trigger-source-icon.d.ts +20 -0
- package/dist/components/trigger-source-icon.d.ts.map +1 -0
- package/dist/components/trigger-source-icon.js +28 -0
- package/dist/components/trigger-source-icon.js.map +1 -0
- package/dist/components/types.d.ts +20 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +3 -0
- package/dist/components/types.js.map +1 -0
- package/dist/hooks/api/trigger-events.d.ts +164 -0
- package/dist/hooks/api/trigger-events.d.ts.map +1 -0
- package/dist/hooks/api/trigger-events.js +122 -0
- package/dist/hooks/api/trigger-events.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/pages/events-page.d.ts +12 -0
- package/dist/pages/events-page.d.ts.map +1 -0
- package/dist/pages/events-page.js +82 -0
- package/dist/pages/events-page.js.map +1 -0
- package/dist/search.d.ts +23 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +28 -0
- package/dist/search.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -0
- package/package.json +92 -0
- package/src/components/events-filter-bar.tsx +191 -0
- package/src/components/events-list-states.tsx +89 -0
- package/src/components/events-list.stories.tsx +141 -0
- package/src/components/events-list.test.tsx +173 -0
- package/src/components/events-list.tsx +107 -0
- package/src/components/trigger-event-detail.stories.tsx +169 -0
- package/src/components/trigger-event-detail.test.tsx +201 -0
- package/src/components/trigger-event-detail.tsx +317 -0
- package/src/components/trigger-event-result.test.ts +40 -0
- package/src/components/trigger-event-result.ts +40 -0
- package/src/components/trigger-event-row.tsx +86 -0
- package/src/components/trigger-source-icon.react.test.tsx +34 -0
- package/src/components/trigger-source-icon.test.ts +23 -0
- package/src/components/trigger-source-icon.tsx +36 -0
- package/src/components/types.ts +22 -0
- package/src/hooks/api/trigger-events.test.ts +252 -0
- package/src/hooks/api/trigger-events.ts +143 -0
- package/src/index.ts +4 -0
- package/src/pages/events-page.test.tsx +100 -0
- package/src/pages/events-page.tsx +79 -0
- package/src/search.test.ts +66 -0
- package/src/search.ts +38 -0
- package/test/setup.ts +35 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +3 -0
- package/tsconfig.test.json +8 -0
- package/vercel.json +8 -0
- 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 @@
|
|
|
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":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|