@shipfox/client-triggers 17.0.0 → 21.0.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/components/events-filter-bar.d.ts.map +1 -1
- package/dist/components/events-filter-bar.js +98 -94
- package/dist/components/events-filter-bar.js.map +1 -1
- package/dist/components/events-list.d.ts.map +1 -1
- package/dist/components/events-list.js +3 -2
- package/dist/components/events-list.js.map +1 -1
- package/dist/components/trigger-event-detail.d.ts.map +1 -1
- package/dist/components/trigger-event-detail.js +173 -157
- package/dist/components/trigger-event-detail.js.map +1 -1
- package/dist/pages/events-page.d.ts.map +1 -1
- package/dist/pages/events-page.js +29 -47
- package/dist/pages/events-page.js.map +1 -1
- package/dist/routes/events-settings.d.ts +3 -0
- package/dist/routes/events-settings.js +3 -0
- package/dist/routes/events-settings.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/components/events-filter-bar.tsx +80 -77
- package/src/components/events-list.test.tsx +9 -0
- package/src/components/events-list.tsx +3 -2
- package/src/components/trigger-event-detail.test.tsx +3 -0
- package/src/components/trigger-event-detail.tsx +129 -126
- package/src/pages/events-page.test.tsx +7 -0
- package/src/pages/events-page.tsx +1 -15
- package/src/routes/events-settings.tsx +1 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
$ shipfox-swc
|
|
2
|
-
Successfully compiled: 18 files with swc (
|
|
2
|
+
Successfully compiled: 18 files with swc (96.81ms)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @shipfox/client-triggers
|
|
2
2
|
|
|
3
|
+
## 21.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fd15e1f: Recomposes the events page onto the data frame and shared panel surfaces.
|
|
8
|
+
- f1d127e: Use dark contrast surfaces with readable semantic foregrounds across code and log views, preserve status on log-row edge accents, and add shared highlight and tooltip tokens for code and keyboard affordances.
|
|
9
|
+
- Updated dependencies [0f4abe4]
|
|
10
|
+
- Updated dependencies [71d0c44]
|
|
11
|
+
- Updated dependencies [9c21429]
|
|
12
|
+
- Updated dependencies [30beb8f]
|
|
13
|
+
- Updated dependencies [16733a7]
|
|
14
|
+
- Updated dependencies [163c40a]
|
|
15
|
+
- Updated dependencies [c4376a1]
|
|
16
|
+
- Updated dependencies [6703982]
|
|
17
|
+
- Updated dependencies [f1d127e]
|
|
18
|
+
- Updated dependencies [0e860d7]
|
|
19
|
+
- @shipfox/react-ui@2.0.0
|
|
20
|
+
- @shipfox/client-shell@21.0.0
|
|
21
|
+
- @shipfox/client-projects@21.0.0
|
|
22
|
+
- @shipfox/client-ui@21.0.0
|
|
23
|
+
- @shipfox/integration-icons@0.3.4
|
|
24
|
+
|
|
3
25
|
## 17.0.0
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-filter-bar.d.ts","sourceRoot":"","sources":["../../src/components/events-filter-bar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events-filter-bar.d.ts","sourceRoot":"","sources":["../../src/components/events-filter-bar.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAIzB,MAAM,wBAAwB,CAAC;AAwBhC,UAAU,oBAAoB;IAC5B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAC5C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,eAAe,EACf,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,OAAO,GACR,EAAE,oBAAoB,+BA6HtB"}
|
|
@@ -3,6 +3,7 @@ import { Button } from '@shipfox/react-ui/button';
|
|
|
3
3
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@shipfox/react-ui/collapsible';
|
|
4
4
|
import { Combobox } from '@shipfox/react-ui/combobox';
|
|
5
5
|
import { DateRangePicker } from '@shipfox/react-ui/date-range-picker';
|
|
6
|
+
import { PanelHeader } from '@shipfox/react-ui/panel';
|
|
6
7
|
import { Text } from '@shipfox/react-ui/typography';
|
|
7
8
|
import { cn } from '@shipfox/react-ui/utils';
|
|
8
9
|
import { useState } from 'react';
|
|
@@ -72,105 +73,108 @@ export function EventsFilterBar({ filters, onFiltersChange, sources, events, has
|
|
|
72
73
|
to
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
|
-
return /*#__PURE__*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
asChild: true,
|
|
84
|
-
children: /*#__PURE__*/ _jsx(Button, {
|
|
85
|
-
type: "button",
|
|
86
|
-
variant: "secondary",
|
|
87
|
-
size: "sm",
|
|
88
|
-
iconLeft: "filter3Line",
|
|
89
|
-
iconRight: open ? 'arrowUpSLine' : 'arrowDownSLine',
|
|
90
|
-
children: activeCount > 0 ? `Filters (${activeCount})` : 'Filters'
|
|
91
|
-
})
|
|
92
|
-
}),
|
|
93
|
-
hasActiveFilters ? /*#__PURE__*/ _jsx(Button, {
|
|
94
|
-
type: "button",
|
|
95
|
-
size: "2xs",
|
|
96
|
-
variant: "transparentMuted",
|
|
97
|
-
onClick: onClear,
|
|
98
|
-
children: "Clear filters"
|
|
99
|
-
}) : null
|
|
100
|
-
]
|
|
101
|
-
}),
|
|
102
|
-
/*#__PURE__*/ _jsx(CollapsibleContent, {
|
|
103
|
-
children: /*#__PURE__*/ _jsxs("div", {
|
|
104
|
-
className: "grid grid-cols-1 gap-x-cluster gap-y-inline border-b border-border-neutral-base px-row py-row min-[520px]:grid-cols-2",
|
|
76
|
+
return /*#__PURE__*/ _jsx(PanelHeader, {
|
|
77
|
+
className: "min-h-48 flex-col items-stretch gap-0 p-0",
|
|
78
|
+
children: /*#__PURE__*/ _jsxs(Collapsible, {
|
|
79
|
+
open: open,
|
|
80
|
+
onOpenChange: setOpen,
|
|
81
|
+
children: [
|
|
82
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
83
|
+
className: "flex items-center justify-between gap-inline px-row py-row",
|
|
105
84
|
children: [
|
|
106
|
-
/*#__PURE__*/ _jsx(
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
} :
|
|
115
|
-
onDateRangeSelect: handleDateRange,
|
|
116
|
-
onClear: ()=>onFiltersChange({
|
|
117
|
-
from: undefined,
|
|
118
|
-
to: undefined
|
|
119
|
-
}),
|
|
120
|
-
placeholder: "Any date"
|
|
85
|
+
/*#__PURE__*/ _jsx(CollapsibleTrigger, {
|
|
86
|
+
asChild: true,
|
|
87
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
88
|
+
type: "button",
|
|
89
|
+
variant: "secondary",
|
|
90
|
+
size: "sm",
|
|
91
|
+
iconLeft: "filter3Line",
|
|
92
|
+
iconRight: open ? 'arrowUpSLine' : 'arrowDownSLine',
|
|
93
|
+
children: activeCount > 0 ? `Filters (${activeCount})` : 'Filters'
|
|
121
94
|
})
|
|
122
95
|
}),
|
|
123
|
-
/*#__PURE__*/ _jsx(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
value: resultValue,
|
|
131
|
-
onValueChange: handleResultValue,
|
|
132
|
-
placeholder: "All results",
|
|
133
|
-
emptyState: "No results",
|
|
134
|
-
className: "w-full",
|
|
135
|
-
maxVisibleChips: 2
|
|
136
|
-
})
|
|
137
|
-
}),
|
|
138
|
-
/*#__PURE__*/ _jsx(FilterField, {
|
|
139
|
-
label: "Source",
|
|
140
|
-
children: /*#__PURE__*/ _jsx(Combobox, {
|
|
141
|
-
multiple: true,
|
|
142
|
-
size: "small",
|
|
143
|
-
options: toOptions(sources),
|
|
144
|
-
value: filters.source ?? [],
|
|
145
|
-
onValueChange: (value)=>onFiltersChange({
|
|
146
|
-
source: value.length > 0 ? value : undefined
|
|
147
|
-
}),
|
|
148
|
-
placeholder: "All sources",
|
|
149
|
-
emptyState: "No sources yet",
|
|
150
|
-
className: "w-full",
|
|
151
|
-
maxVisibleChips: 2
|
|
152
|
-
})
|
|
153
|
-
}),
|
|
154
|
-
/*#__PURE__*/ _jsx(FilterField, {
|
|
155
|
-
label: "Event",
|
|
156
|
-
children: /*#__PURE__*/ _jsx(Combobox, {
|
|
157
|
-
multiple: true,
|
|
158
|
-
size: "small",
|
|
159
|
-
options: toOptions(events),
|
|
160
|
-
value: filters.event ?? [],
|
|
161
|
-
onValueChange: (value)=>onFiltersChange({
|
|
162
|
-
event: value.length > 0 ? value : undefined
|
|
163
|
-
}),
|
|
164
|
-
placeholder: "All events",
|
|
165
|
-
emptyState: "No events yet",
|
|
166
|
-
className: "w-full",
|
|
167
|
-
maxVisibleChips: 2
|
|
168
|
-
})
|
|
169
|
-
})
|
|
96
|
+
hasActiveFilters ? /*#__PURE__*/ _jsx(Button, {
|
|
97
|
+
type: "button",
|
|
98
|
+
size: "2xs",
|
|
99
|
+
variant: "transparentMuted",
|
|
100
|
+
onClick: onClear,
|
|
101
|
+
children: "Clear filters"
|
|
102
|
+
}) : null
|
|
170
103
|
]
|
|
104
|
+
}),
|
|
105
|
+
/*#__PURE__*/ _jsx(CollapsibleContent, {
|
|
106
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
107
|
+
className: "grid grid-cols-1 gap-x-cluster gap-y-inline px-row py-row min-[520px]:grid-cols-2",
|
|
108
|
+
children: [
|
|
109
|
+
/*#__PURE__*/ _jsx(FilterField, {
|
|
110
|
+
label: "Date",
|
|
111
|
+
className: "col-span-full",
|
|
112
|
+
children: /*#__PURE__*/ _jsx(DateRangePicker, {
|
|
113
|
+
size: "small",
|
|
114
|
+
className: "w-full",
|
|
115
|
+
...dateRange ? {
|
|
116
|
+
dateRange
|
|
117
|
+
} : {},
|
|
118
|
+
onDateRangeSelect: handleDateRange,
|
|
119
|
+
onClear: ()=>onFiltersChange({
|
|
120
|
+
from: undefined,
|
|
121
|
+
to: undefined
|
|
122
|
+
}),
|
|
123
|
+
placeholder: "Any date"
|
|
124
|
+
})
|
|
125
|
+
}),
|
|
126
|
+
/*#__PURE__*/ _jsx(FilterField, {
|
|
127
|
+
label: "Result",
|
|
128
|
+
children: /*#__PURE__*/ _jsx(Combobox, {
|
|
129
|
+
multiple: true,
|
|
130
|
+
size: "small",
|
|
131
|
+
"aria-label": "Filter by result",
|
|
132
|
+
options: RESULT_OPTIONS,
|
|
133
|
+
value: resultValue,
|
|
134
|
+
onValueChange: handleResultValue,
|
|
135
|
+
placeholder: "All results",
|
|
136
|
+
emptyState: "No results",
|
|
137
|
+
className: "w-full",
|
|
138
|
+
maxVisibleChips: 2
|
|
139
|
+
})
|
|
140
|
+
}),
|
|
141
|
+
/*#__PURE__*/ _jsx(FilterField, {
|
|
142
|
+
label: "Source",
|
|
143
|
+
children: /*#__PURE__*/ _jsx(Combobox, {
|
|
144
|
+
multiple: true,
|
|
145
|
+
size: "small",
|
|
146
|
+
options: toOptions(sources),
|
|
147
|
+
value: filters.source ?? [],
|
|
148
|
+
onValueChange: (value)=>onFiltersChange({
|
|
149
|
+
source: value.length > 0 ? value : undefined
|
|
150
|
+
}),
|
|
151
|
+
placeholder: "All sources",
|
|
152
|
+
emptyState: "No sources yet",
|
|
153
|
+
className: "w-full",
|
|
154
|
+
maxVisibleChips: 2
|
|
155
|
+
})
|
|
156
|
+
}),
|
|
157
|
+
/*#__PURE__*/ _jsx(FilterField, {
|
|
158
|
+
label: "Event",
|
|
159
|
+
children: /*#__PURE__*/ _jsx(Combobox, {
|
|
160
|
+
multiple: true,
|
|
161
|
+
size: "small",
|
|
162
|
+
options: toOptions(events),
|
|
163
|
+
value: filters.event ?? [],
|
|
164
|
+
onValueChange: (value)=>onFiltersChange({
|
|
165
|
+
event: value.length > 0 ? value : undefined
|
|
166
|
+
}),
|
|
167
|
+
placeholder: "All events",
|
|
168
|
+
emptyState: "No events yet",
|
|
169
|
+
className: "w-full",
|
|
170
|
+
maxVisibleChips: 2
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
})
|
|
171
175
|
})
|
|
172
|
-
|
|
173
|
-
|
|
176
|
+
]
|
|
177
|
+
})
|
|
174
178
|
});
|
|
175
179
|
}
|
|
176
180
|
function FilterField({ label, className, children }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/events-filter-bar.tsx"],"sourcesContent":["import {Button} from '@shipfox/react-ui/button';\nimport {Collapsible, CollapsibleContent, CollapsibleTrigger} from '@shipfox/react-ui/collapsible';\nimport {Combobox, type ComboboxOption} from '@shipfox/react-ui/combobox';\nimport {type DateRange, DateRangePicker} from '@shipfox/react-ui/date-range-picker';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {cn} from '@shipfox/react-ui/utils';\nimport {type ReactNode, useState} from 'react';\nimport {\n type TriggerEventFacetItem,\n type TriggerEventFilters,\n type TriggerEventOutcome,\n type TriggerEventResultKind,\n triggerEventResultFilterOutcomes,\n} from '#core/trigger-event.js';\n\n// Filters expose the same plain-language results shown in the table. `failed`\n// includes `errored` so the Failed filter does not hide rows rendered as failed.\nconst RESULT_FILTERS: {\n value: TriggerEventResultKind;\n selects: readonly TriggerEventOutcome[];\n label: string;\n}[] = [\n {value: 'triggered', selects: triggerEventResultFilterOutcomes.triggered, label: 'Triggered'},\n {value: 'no-match', selects: triggerEventResultFilterOutcomes['no-match'], label: 'No match'},\n {value: 'failed', selects: triggerEventResultFilterOutcomes.failed, label: 'Failed'},\n {value: 'evaluating', selects: triggerEventResultFilterOutcomes.evaluating, label: 'Evaluating'},\n];\n\nconst RESULT_OPTIONS: ComboboxOption[] = RESULT_FILTERS.map(({value, label}) => ({value, label}));\n\nfunction toOptions(facets: TriggerEventFacetItem[] | undefined): ComboboxOption[] {\n return (facets ?? []).map((facet) => ({\n value: facet.value,\n label: `${facet.value} (${facet.count})`,\n }));\n}\n\ninterface EventsFilterBarProps {\n filters: TriggerEventFilters;\n onFiltersChange: (patch: Partial<TriggerEventFilters>) => void;\n sources: TriggerEventFacetItem[] | undefined;\n events: TriggerEventFacetItem[] | undefined;\n hasActiveFilters: boolean;\n onClear: () => void;\n}\n\nexport function EventsFilterBar({\n filters,\n onFiltersChange,\n sources,\n events,\n hasActiveFilters,\n onClear,\n}: EventsFilterBarProps) {\n const [open, setOpen] = useState(false);\n\n const dateRange: DateRange | undefined =\n filters.from || filters.to\n ? {\n start: filters.from ? new Date(filters.from) : undefined,\n end: filters.to ? new Date(filters.to) : undefined,\n }\n : undefined;\n\n const selectedOutcomes = new Set(filters.outcome ?? []);\n const resultValue = RESULT_FILTERS.filter(({selects}) =>\n selects.some((outcome) => selectedOutcomes.has(outcome)),\n ).map(({value}) => value);\n\n // Count active dimensions, not selected options, so the badge stays stable as chips grow.\n const activeCount =\n (dateRange ? 1 : 0) +\n (filters.source?.length ? 1 : 0) +\n (filters.event?.length ? 1 : 0) +\n (resultValue.length > 0 ? 1 : 0);\n\n function handleResultValue(values: string[]) {\n const next = RESULT_FILTERS.filter(({value}) => values.includes(value)).flatMap(\n ({selects}) => selects,\n );\n onFiltersChange({outcome: next.length > 0 ? next : undefined});\n }\n\n function handleDateRange(range: DateRange | undefined) {\n const from = range?.start ? new Date(range.start).toISOString() : undefined;\n let to: string | undefined;\n if (range?.end) {\n // The backend filters received_at <= to; extend to end-of-day so the picked end\n // date is inclusive rather than cutting off at its midnight.\n const end = new Date(range.end);\n end.setHours(23, 59, 59, 999);\n to = end.toISOString();\n }\n onFiltersChange({from, to});\n }\n\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"flex items-center justify-between gap-inline border-b border-border-neutral-base px-row py-row\">\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n iconLeft=\"filter3Line\"\n iconRight={open ? 'arrowUpSLine' : 'arrowDownSLine'}\n >\n {activeCount > 0 ? `Filters (${activeCount})` : 'Filters'}\n </Button>\n </CollapsibleTrigger>\n {hasActiveFilters ? (\n <Button type=\"button\" size=\"2xs\" variant=\"transparentMuted\" onClick={onClear}>\n Clear filters\n </Button>\n ) : null}\n </div>\n <CollapsibleContent>\n <div className=\"grid grid-cols-1 gap-x-cluster gap-y-inline border-b border-border-neutral-base px-row py-row min-[520px]:grid-cols-2\">\n <FilterField label=\"Date\" className=\"col-span-full\">\n <DateRangePicker\n size=\"small\"\n className=\"w-full\"\n {...(dateRange ? {dateRange} : {})}\n onDateRangeSelect={handleDateRange}\n onClear={() => onFiltersChange({from: undefined, to: undefined})}\n placeholder=\"Any date\"\n />\n </FilterField>\n <FilterField label=\"Result\">\n <Combobox\n multiple\n size=\"small\"\n aria-label=\"Filter by result\"\n options={RESULT_OPTIONS}\n value={resultValue}\n onValueChange={handleResultValue}\n placeholder=\"All results\"\n emptyState=\"No results\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n <FilterField label=\"Source\">\n <Combobox\n multiple\n size=\"small\"\n options={toOptions(sources)}\n value={filters.source ?? []}\n onValueChange={(value) =>\n onFiltersChange({source: value.length > 0 ? value : undefined})\n }\n placeholder=\"All sources\"\n emptyState=\"No sources yet\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n <FilterField label=\"Event\">\n <Combobox\n multiple\n size=\"small\"\n options={toOptions(events)}\n value={filters.event ?? []}\n onValueChange={(value) =>\n onFiltersChange({event: value.length > 0 ? value : undefined})\n }\n placeholder=\"All events\"\n emptyState=\"No events yet\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\nfunction FilterField({\n label,\n className,\n children,\n}: {\n label: string;\n className?: string;\n children: ReactNode;\n}) {\n return (\n <div className={cn('flex min-w-0 flex-col gap-tight', className)}>\n <Text size=\"xs\" className=\"font-medium text-foreground-neutral-muted\">\n {label}\n </Text>\n {children}\n </div>\n );\n}\n"],"names":["Button","Collapsible","CollapsibleContent","CollapsibleTrigger","Combobox","DateRangePicker","Text","cn","useState","triggerEventResultFilterOutcomes","RESULT_FILTERS","value","selects","triggered","label","failed","evaluating","RESULT_OPTIONS","map","toOptions","facets","facet","count","EventsFilterBar","filters","onFiltersChange","sources","events","hasActiveFilters","onClear","open","setOpen","dateRange","from","to","start","Date","undefined","end","selectedOutcomes","Set","outcome","resultValue","filter","some","has","activeCount","source","length","event","handleResultValue","values","next","includes","flatMap","handleDateRange","range","toISOString","setHours","onOpenChange","div","className","asChild","type","variant","size","iconLeft","iconRight","onClick","FilterField","onDateRangeSelect","placeholder","multiple","aria-label","options","onValueChange","emptyState","maxVisibleChips","children"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/events-filter-bar.tsx"],"sourcesContent":["import {Button} from '@shipfox/react-ui/button';\nimport {Collapsible, CollapsibleContent, CollapsibleTrigger} from '@shipfox/react-ui/collapsible';\nimport {Combobox, type ComboboxOption} from '@shipfox/react-ui/combobox';\nimport {type DateRange, DateRangePicker} from '@shipfox/react-ui/date-range-picker';\nimport {PanelHeader} from '@shipfox/react-ui/panel';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {cn} from '@shipfox/react-ui/utils';\nimport {type ReactNode, useState} from 'react';\nimport {\n type TriggerEventFacetItem,\n type TriggerEventFilters,\n type TriggerEventOutcome,\n type TriggerEventResultKind,\n triggerEventResultFilterOutcomes,\n} from '#core/trigger-event.js';\n\n// Filters expose the same plain-language results shown in the table. `failed`\n// includes `errored` so the Failed filter does not hide rows rendered as failed.\nconst RESULT_FILTERS: {\n value: TriggerEventResultKind;\n selects: readonly TriggerEventOutcome[];\n label: string;\n}[] = [\n {value: 'triggered', selects: triggerEventResultFilterOutcomes.triggered, label: 'Triggered'},\n {value: 'no-match', selects: triggerEventResultFilterOutcomes['no-match'], label: 'No match'},\n {value: 'failed', selects: triggerEventResultFilterOutcomes.failed, label: 'Failed'},\n {value: 'evaluating', selects: triggerEventResultFilterOutcomes.evaluating, label: 'Evaluating'},\n];\n\nconst RESULT_OPTIONS: ComboboxOption[] = RESULT_FILTERS.map(({value, label}) => ({value, label}));\n\nfunction toOptions(facets: TriggerEventFacetItem[] | undefined): ComboboxOption[] {\n return (facets ?? []).map((facet) => ({\n value: facet.value,\n label: `${facet.value} (${facet.count})`,\n }));\n}\n\ninterface EventsFilterBarProps {\n filters: TriggerEventFilters;\n onFiltersChange: (patch: Partial<TriggerEventFilters>) => void;\n sources: TriggerEventFacetItem[] | undefined;\n events: TriggerEventFacetItem[] | undefined;\n hasActiveFilters: boolean;\n onClear: () => void;\n}\n\nexport function EventsFilterBar({\n filters,\n onFiltersChange,\n sources,\n events,\n hasActiveFilters,\n onClear,\n}: EventsFilterBarProps) {\n const [open, setOpen] = useState(false);\n\n const dateRange: DateRange | undefined =\n filters.from || filters.to\n ? {\n start: filters.from ? new Date(filters.from) : undefined,\n end: filters.to ? new Date(filters.to) : undefined,\n }\n : undefined;\n\n const selectedOutcomes = new Set(filters.outcome ?? []);\n const resultValue = RESULT_FILTERS.filter(({selects}) =>\n selects.some((outcome) => selectedOutcomes.has(outcome)),\n ).map(({value}) => value);\n\n // Count active dimensions, not selected options, so the badge stays stable as chips grow.\n const activeCount =\n (dateRange ? 1 : 0) +\n (filters.source?.length ? 1 : 0) +\n (filters.event?.length ? 1 : 0) +\n (resultValue.length > 0 ? 1 : 0);\n\n function handleResultValue(values: string[]) {\n const next = RESULT_FILTERS.filter(({value}) => values.includes(value)).flatMap(\n ({selects}) => selects,\n );\n onFiltersChange({outcome: next.length > 0 ? next : undefined});\n }\n\n function handleDateRange(range: DateRange | undefined) {\n const from = range?.start ? new Date(range.start).toISOString() : undefined;\n let to: string | undefined;\n if (range?.end) {\n // The backend filters received_at <= to; extend to end-of-day so the picked end\n // date is inclusive rather than cutting off at its midnight.\n const end = new Date(range.end);\n end.setHours(23, 59, 59, 999);\n to = end.toISOString();\n }\n onFiltersChange({from, to});\n }\n\n return (\n <PanelHeader className=\"min-h-48 flex-col items-stretch gap-0 p-0\">\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"flex items-center justify-between gap-inline px-row py-row\">\n <CollapsibleTrigger asChild>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n iconLeft=\"filter3Line\"\n iconRight={open ? 'arrowUpSLine' : 'arrowDownSLine'}\n >\n {activeCount > 0 ? `Filters (${activeCount})` : 'Filters'}\n </Button>\n </CollapsibleTrigger>\n {hasActiveFilters ? (\n <Button type=\"button\" size=\"2xs\" variant=\"transparentMuted\" onClick={onClear}>\n Clear filters\n </Button>\n ) : null}\n </div>\n <CollapsibleContent>\n <div className=\"grid grid-cols-1 gap-x-cluster gap-y-inline px-row py-row min-[520px]:grid-cols-2\">\n <FilterField label=\"Date\" className=\"col-span-full\">\n <DateRangePicker\n size=\"small\"\n className=\"w-full\"\n {...(dateRange ? {dateRange} : {})}\n onDateRangeSelect={handleDateRange}\n onClear={() => onFiltersChange({from: undefined, to: undefined})}\n placeholder=\"Any date\"\n />\n </FilterField>\n <FilterField label=\"Result\">\n <Combobox\n multiple\n size=\"small\"\n aria-label=\"Filter by result\"\n options={RESULT_OPTIONS}\n value={resultValue}\n onValueChange={handleResultValue}\n placeholder=\"All results\"\n emptyState=\"No results\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n <FilterField label=\"Source\">\n <Combobox\n multiple\n size=\"small\"\n options={toOptions(sources)}\n value={filters.source ?? []}\n onValueChange={(value) =>\n onFiltersChange({source: value.length > 0 ? value : undefined})\n }\n placeholder=\"All sources\"\n emptyState=\"No sources yet\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n <FilterField label=\"Event\">\n <Combobox\n multiple\n size=\"small\"\n options={toOptions(events)}\n value={filters.event ?? []}\n onValueChange={(value) =>\n onFiltersChange({event: value.length > 0 ? value : undefined})\n }\n placeholder=\"All events\"\n emptyState=\"No events yet\"\n className=\"w-full\"\n maxVisibleChips={2}\n />\n </FilterField>\n </div>\n </CollapsibleContent>\n </Collapsible>\n </PanelHeader>\n );\n}\n\nfunction FilterField({\n label,\n className,\n children,\n}: {\n label: string;\n className?: string;\n children: ReactNode;\n}) {\n return (\n <div className={cn('flex min-w-0 flex-col gap-tight', className)}>\n <Text size=\"xs\" className=\"font-medium text-foreground-neutral-muted\">\n {label}\n </Text>\n {children}\n </div>\n );\n}\n"],"names":["Button","Collapsible","CollapsibleContent","CollapsibleTrigger","Combobox","DateRangePicker","PanelHeader","Text","cn","useState","triggerEventResultFilterOutcomes","RESULT_FILTERS","value","selects","triggered","label","failed","evaluating","RESULT_OPTIONS","map","toOptions","facets","facet","count","EventsFilterBar","filters","onFiltersChange","sources","events","hasActiveFilters","onClear","open","setOpen","dateRange","from","to","start","Date","undefined","end","selectedOutcomes","Set","outcome","resultValue","filter","some","has","activeCount","source","length","event","handleResultValue","values","next","includes","flatMap","handleDateRange","range","toISOString","setHours","className","onOpenChange","div","asChild","type","variant","size","iconLeft","iconRight","onClick","FilterField","onDateRangeSelect","placeholder","multiple","aria-label","options","onValueChange","emptyState","maxVisibleChips","children"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../src/components/events-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../src/components/events-list.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAEhD,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,eAAe,EACf,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,aAAa,GACd,EAAE,eAAe,+BAsEjB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { QueryLoadError } from '@shipfox/client-ui';
|
|
3
3
|
import { Button } from '@shipfox/react-ui/button';
|
|
4
|
+
import { Panel } from '@shipfox/react-ui/panel';
|
|
4
5
|
import { Table, TableBody, TableHead, TableHeader, TableRow } from '@shipfox/react-ui/table';
|
|
5
6
|
import { hasTriggerEventFilters } from '#core/trigger-event.js';
|
|
6
7
|
import { EventsFilterBar } from './events-filter-bar.js';
|
|
@@ -19,8 +20,8 @@ export function EventsList({ events, query, facets, filters, onFiltersChange, wo
|
|
|
19
20
|
to: undefined
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
return /*#__PURE__*/ _jsxs(
|
|
23
|
-
className: "
|
|
23
|
+
return /*#__PURE__*/ _jsxs(Panel, {
|
|
24
|
+
className: "min-h-0 overflow-hidden p-0",
|
|
24
25
|
children: [
|
|
25
26
|
/*#__PURE__*/ _jsx(EventsFilterBar, {
|
|
26
27
|
filters: filters,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/events-list.tsx"],"sourcesContent":["import {QueryLoadError} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Table, TableBody, TableHead, TableHeader, TableRow} from '@shipfox/react-ui/table';\nimport {hasTriggerEventFilters} from '#core/trigger-event.js';\nimport {EventsFilterBar} from './events-filter-bar.js';\nimport {\n EventsListEmpty,\n EventsListNoMatches,\n EventsListSkeleton,\n EventsListStaleError,\n} from './events-list-states.js';\nimport {TriggerEventRow} from './trigger-event-row.js';\nimport type {EventsListProps} from './types.js';\n\nexport function EventsList({\n events,\n query,\n facets,\n filters,\n onFiltersChange,\n workspaceSlug,\n hasNextPage,\n isFetchingNextPage,\n onLoadMore,\n selectedEventId,\n onSelectEvent,\n}: EventsListProps) {\n const activeFilters = hasTriggerEventFilters(filters);\n const refreshFailed = query.isError && query.data !== undefined;\n const showEmptyState = !query.isPending && !query.isError && events.length === 0;\n\n function clearFilters() {\n onFiltersChange({\n source: undefined,\n event: undefined,\n outcome: undefined,\n from: undefined,\n to: undefined,\n });\n }\n\n return (\n <
|
|
1
|
+
{"version":3,"sources":["../../src/components/events-list.tsx"],"sourcesContent":["import {QueryLoadError} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Panel} from '@shipfox/react-ui/panel';\nimport {Table, TableBody, TableHead, TableHeader, TableRow} from '@shipfox/react-ui/table';\nimport {hasTriggerEventFilters} from '#core/trigger-event.js';\nimport {EventsFilterBar} from './events-filter-bar.js';\nimport {\n EventsListEmpty,\n EventsListNoMatches,\n EventsListSkeleton,\n EventsListStaleError,\n} from './events-list-states.js';\nimport {TriggerEventRow} from './trigger-event-row.js';\nimport type {EventsListProps} from './types.js';\n\nexport function EventsList({\n events,\n query,\n facets,\n filters,\n onFiltersChange,\n workspaceSlug,\n hasNextPage,\n isFetchingNextPage,\n onLoadMore,\n selectedEventId,\n onSelectEvent,\n}: EventsListProps) {\n const activeFilters = hasTriggerEventFilters(filters);\n const refreshFailed = query.isError && query.data !== undefined;\n const showEmptyState = !query.isPending && !query.isError && events.length === 0;\n\n function clearFilters() {\n onFiltersChange({\n source: undefined,\n event: undefined,\n outcome: undefined,\n from: undefined,\n to: undefined,\n });\n }\n\n return (\n <Panel className=\"min-h-0 overflow-hidden p-0\">\n <EventsFilterBar\n filters={filters}\n onFiltersChange={onFiltersChange}\n sources={facets?.sources}\n events={facets?.events}\n hasActiveFilters={activeFilters}\n onClear={clearFilters}\n />\n\n {query.isPending ? <EventsListSkeleton /> : null}\n {!query.isPending ? <QueryLoadError query={query} subject=\"events\" icon=\"pulseLine\" /> : null}\n {!query.isPending && refreshFailed ? <EventsListStaleError query={query} /> : null}\n {showEmptyState && !activeFilters ? <EventsListEmpty workspaceSlug={workspaceSlug} /> : null}\n {showEmptyState && activeFilters ? <EventsListNoMatches onClear={clearFilters} /> : null}\n\n {events.length > 0 ? (\n <>\n <Table>\n <TableHeader className=\"sticky top-0 z-10\">\n <TableRow>\n <TableHead>Event</TableHead>\n <TableHead>Result</TableHead>\n <TableHead className=\"text-right\">Received</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {events.map((event) => (\n <TriggerEventRow\n key={event.id}\n event={event}\n selected={event.id === selectedEventId}\n onSelect={onSelectEvent}\n />\n ))}\n </TableBody>\n </Table>\n {hasNextPage ? (\n <div className=\"flex justify-center p-panel-compact\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n isLoading={isFetchingNextPage}\n onClick={onLoadMore}\n >\n Load more\n </Button>\n </div>\n ) : null}\n </>\n ) : null}\n </Panel>\n );\n}\n"],"names":["QueryLoadError","Button","Panel","Table","TableBody","TableHead","TableHeader","TableRow","hasTriggerEventFilters","EventsFilterBar","EventsListEmpty","EventsListNoMatches","EventsListSkeleton","EventsListStaleError","TriggerEventRow","EventsList","events","query","facets","filters","onFiltersChange","workspaceSlug","hasNextPage","isFetchingNextPage","onLoadMore","selectedEventId","onSelectEvent","activeFilters","refreshFailed","isError","data","undefined","showEmptyState","isPending","length","clearFilters","source","event","outcome","from","to","className","sources","hasActiveFilters","onClear","subject","icon","map","selected","id","onSelect","div","type","variant","size","isLoading","onClick"],"mappings":";AAAA,SAAQA,cAAc,QAAO,qBAAqB;AAClD,SAAQC,MAAM,QAAO,2BAA2B;AAChD,SAAQC,KAAK,QAAO,0BAA0B;AAC9C,SAAQC,KAAK,EAAEC,SAAS,EAAEC,SAAS,EAAEC,WAAW,EAAEC,QAAQ,QAAO,0BAA0B;AAC3F,SAAQC,sBAAsB,QAAO,yBAAyB;AAC9D,SAAQC,eAAe,QAAO,yBAAyB;AACvD,SACEC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,oBAAoB,QACf,0BAA0B;AACjC,SAAQC,eAAe,QAAO,yBAAyB;AAGvD,OAAO,SAASC,WAAW,EACzBC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,OAAO,EACPC,eAAe,EACfC,aAAa,EACbC,WAAW,EACXC,kBAAkB,EAClBC,UAAU,EACVC,eAAe,EACfC,aAAa,EACG;IAChB,MAAMC,gBAAgBnB,uBAAuBW;IAC7C,MAAMS,gBAAgBX,MAAMY,OAAO,IAAIZ,MAAMa,IAAI,KAAKC;IACtD,MAAMC,iBAAiB,CAACf,MAAMgB,SAAS,IAAI,CAAChB,MAAMY,OAAO,IAAIb,OAAOkB,MAAM,KAAK;IAE/E,SAASC;QACPf,gBAAgB;YACdgB,QAAQL;YACRM,OAAON;YACPO,SAASP;YACTQ,MAAMR;YACNS,IAAIT;QACN;IACF;IAEA,qBACE,MAAC7B;QAAMuC,WAAU;;0BACf,KAAChC;gBACCU,SAASA;gBACTC,iBAAiBA;gBACjBsB,SAASxB,QAAQwB;gBACjB1B,QAAQE,QAAQF;gBAChB2B,kBAAkBhB;gBAClBiB,SAAST;;YAGVlB,MAAMgB,SAAS,iBAAG,KAACrB,0BAAwB;YAC3C,CAACK,MAAMgB,SAAS,iBAAG,KAACjC;gBAAeiB,OAAOA;gBAAO4B,SAAQ;gBAASC,MAAK;iBAAiB;YACxF,CAAC7B,MAAMgB,SAAS,IAAIL,8BAAgB,KAACf;gBAAqBI,OAAOA;iBAAY;YAC7Ee,kBAAkB,CAACL,8BAAgB,KAACjB;gBAAgBW,eAAeA;iBAAoB;YACvFW,kBAAkBL,8BAAgB,KAAChB;gBAAoBiC,SAAST;iBAAmB;YAEnFnB,OAAOkB,MAAM,GAAG,kBACf;;kCACE,MAAC/B;;0CACC,KAACG;gCAAYmC,WAAU;0CACrB,cAAA,MAAClC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;sDAAU;;sDACX,KAACA;4CAAUoC,WAAU;sDAAa;;;;;0CAGtC,KAACrC;0CACEY,OAAO+B,GAAG,CAAC,CAACV,sBACX,KAACvB;wCAECuB,OAAOA;wCACPW,UAAUX,MAAMY,EAAE,KAAKxB;wCACvByB,UAAUxB;uCAHLW,MAAMY,EAAE;;;;oBAQpB3B,4BACC,KAAC6B;wBAAIV,WAAU;kCACb,cAAA,KAACxC;4BACCmD,MAAK;4BACLC,SAAQ;4BACRC,MAAK;4BACLC,WAAWhC;4BACXiC,SAAShC;sCACV;;yBAID;;iBAEJ;;;AAGV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-event-detail.d.ts","sourceRoot":"","sources":["../../src/components/trigger-event-detail.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trigger-event-detail.d.ts","sourceRoot":"","sources":["../../src/components/trigger-event-detail.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,kBAAkB,IAAI,uBAAuB,EAE9C,MAAM,wBAAwB,CAAC;AAQhC,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,aAAa,EACb,OAAO,EACP,MAAM,GACP,EAAE,uBAAuB,+BAiBzB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,aAAa,EACb,KAAK,EACL,MAAM,GACP,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,+BAsEA"}
|