@shipfox/client-triggers 17.0.0 → 22.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 +41 -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-states.d.ts.map +1 -1
- package/dist/components/events-list-states.js +31 -35
- package/dist/components/events-list-states.js.map +1 -1
- package/dist/components/events-list.d.ts.map +1 -1
- package/dist/components/events-list.js +5 -3
- 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-states.tsx +32 -30
- package/src/components/events-list.test.tsx +9 -0
- package/src/components/events-list.tsx +6 -3
- 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 (286ms)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @shipfox/client-triggers
|
|
2
2
|
|
|
3
|
+
## 22.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7693eb3: Render empty and load-error states inside bordered panel bodies and keep loading placeholders aligned with their data regions.
|
|
8
|
+
- 00c1cb8: Panels across these surfaces share one hover, focus, and elevation treatment. Grids of openable things, including the integration gallery, the available providers grid, and the harness picker, render as cells inside a single panel divided by hairlines instead of separate bordered tiles.
|
|
9
|
+
- Updated dependencies [50b3867]
|
|
10
|
+
- Updated dependencies [00c1cb8]
|
|
11
|
+
- Updated dependencies [7693eb3]
|
|
12
|
+
- Updated dependencies [00c1cb8]
|
|
13
|
+
- Updated dependencies [00c1cb8]
|
|
14
|
+
- Updated dependencies [00c1cb8]
|
|
15
|
+
- Updated dependencies [56f4526]
|
|
16
|
+
- @shipfox/client-shell@22.0.0
|
|
17
|
+
- @shipfox/react-ui@2.1.0
|
|
18
|
+
- @shipfox/client-ui@22.0.0
|
|
19
|
+
- @shipfox/client-projects@22.0.0
|
|
20
|
+
- @shipfox/integration-icons@0.3.5
|
|
21
|
+
|
|
22
|
+
## 21.0.0
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- fd15e1f: Recomposes the events page onto the data frame and shared panel surfaces.
|
|
27
|
+
- 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.
|
|
28
|
+
- Updated dependencies [0f4abe4]
|
|
29
|
+
- Updated dependencies [71d0c44]
|
|
30
|
+
- Updated dependencies [9c21429]
|
|
31
|
+
- Updated dependencies [30beb8f]
|
|
32
|
+
- Updated dependencies [16733a7]
|
|
33
|
+
- Updated dependencies [163c40a]
|
|
34
|
+
- Updated dependencies [c4376a1]
|
|
35
|
+
- Updated dependencies [6703982]
|
|
36
|
+
- Updated dependencies [f1d127e]
|
|
37
|
+
- Updated dependencies [0e860d7]
|
|
38
|
+
- @shipfox/react-ui@2.0.0
|
|
39
|
+
- @shipfox/client-shell@21.0.0
|
|
40
|
+
- @shipfox/client-projects@21.0.0
|
|
41
|
+
- @shipfox/client-ui@21.0.0
|
|
42
|
+
- @shipfox/integration-icons@0.3.4
|
|
43
|
+
|
|
3
44
|
## 17.0.0
|
|
4
45
|
|
|
5
46
|
### 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-states.d.ts","sourceRoot":"","sources":["../../src/components/events-list-states.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAQ5D,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"events-list-states.d.ts","sourceRoot":"","sources":["../../src/components/events-list-states.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAQ5D,wBAAgB,kBAAkB,gCAqBjC;AAED,wBAAgB,eAAe,CAAC,EAAC,aAAa,EAAC,EAAE;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAC,+BAkBpF;AAED,wBAAgB,mBAAmB,CAAC,EAAC,OAAO,EAAC,EAAE;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAC,+BAcnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAC,KAAK,EAAC,EAAE;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAC,+BAqBzE"}
|
|
@@ -7,13 +7,13 @@ import { Text } from '@shipfox/react-ui/typography';
|
|
|
7
7
|
import { Link } from '@tanstack/react-router';
|
|
8
8
|
export function EventsListSkeleton() {
|
|
9
9
|
return /*#__PURE__*/ _jsx("div", {
|
|
10
|
-
className: "flex flex-col
|
|
10
|
+
className: "flex flex-col divide-y divide-border-neutral-base",
|
|
11
11
|
role: "status",
|
|
12
12
|
"aria-label": "Loading events",
|
|
13
13
|
children: Array.from({
|
|
14
14
|
length: 8
|
|
15
15
|
}).map((_, index)=>/*#__PURE__*/ _jsxs("div", {
|
|
16
|
-
className: "flex h-
|
|
16
|
+
className: "flex min-h-44 items-center gap-cluster px-row py-row",
|
|
17
17
|
children: [
|
|
18
18
|
/*#__PURE__*/ _jsx(Skeleton, {
|
|
19
19
|
className: "size-6 shrink-0 rounded-full"
|
|
@@ -32,42 +32,38 @@ export function EventsListSkeleton() {
|
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
export function EventsListEmpty({ workspaceSlug }) {
|
|
35
|
-
return /*#__PURE__*/ _jsx(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}) : undefined
|
|
53
|
-
})
|
|
35
|
+
return /*#__PURE__*/ _jsx(EmptyState, {
|
|
36
|
+
icon: "pulseLine",
|
|
37
|
+
title: "No events yet",
|
|
38
|
+
description: "Events appear here once a connected integration delivers one or you fire a trigger.",
|
|
39
|
+
action: workspaceSlug ? /*#__PURE__*/ _jsx(Button, {
|
|
40
|
+
asChild: true,
|
|
41
|
+
size: "sm",
|
|
42
|
+
variant: "secondary",
|
|
43
|
+
children: /*#__PURE__*/ _jsx(Link, {
|
|
44
|
+
to: "/w/$workspaceSlug/settings/integrations",
|
|
45
|
+
params: {
|
|
46
|
+
workspaceSlug
|
|
47
|
+
},
|
|
48
|
+
children: "Configure integrations"
|
|
49
|
+
})
|
|
50
|
+
}) : undefined,
|
|
51
|
+
variant: "panel"
|
|
54
52
|
});
|
|
55
53
|
}
|
|
56
54
|
export function EventsListNoMatches({ onClear }) {
|
|
57
|
-
return /*#__PURE__*/ _jsx(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
70
|
-
})
|
|
55
|
+
return /*#__PURE__*/ _jsx(EmptyState, {
|
|
56
|
+
icon: "filterOffLine",
|
|
57
|
+
title: "No matching events",
|
|
58
|
+
description: "No events match your current filters.",
|
|
59
|
+
action: /*#__PURE__*/ _jsx(Button, {
|
|
60
|
+
type: "button",
|
|
61
|
+
size: "sm",
|
|
62
|
+
variant: "secondary",
|
|
63
|
+
onClick: onClear,
|
|
64
|
+
children: "Clear filters"
|
|
65
|
+
}),
|
|
66
|
+
variant: "panel"
|
|
71
67
|
});
|
|
72
68
|
}
|
|
73
69
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/events-list-states.tsx"],"sourcesContent":["import type {QueryLoadErrorQuery} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {Link} from '@tanstack/react-router';\n\nexport function EventsListSkeleton() {\n return (\n <div
|
|
1
|
+
{"version":3,"sources":["../../src/components/events-list-states.tsx"],"sourcesContent":["import type {QueryLoadErrorQuery} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {Text} from '@shipfox/react-ui/typography';\nimport {Link} from '@tanstack/react-router';\n\nexport function EventsListSkeleton() {\n return (\n <div\n className=\"flex flex-col divide-y divide-border-neutral-base\"\n role=\"status\"\n aria-label=\"Loading events\"\n >\n {Array.from({length: 8}).map((_, index) => (\n <div\n // biome-ignore lint/suspicious/noArrayIndexKey: skeleton row, stable position\n key={index}\n className=\"flex min-h-44 items-center gap-cluster px-row py-row\"\n >\n <Skeleton className=\"size-6 shrink-0 rounded-full\" />\n <Skeleton className=\"h-12 w-1/4\" />\n <Skeleton className=\"h-12 w-20\" />\n <Skeleton className=\"ml-auto h-12 w-40\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport function EventsListEmpty({workspaceSlug}: {workspaceSlug?: string | undefined}) {\n return (\n <EmptyState\n icon=\"pulseLine\"\n title=\"No events yet\"\n description=\"Events appear here once a connected integration delivers one or you fire a trigger.\"\n action={\n workspaceSlug ? (\n <Button asChild size=\"sm\" variant=\"secondary\">\n <Link to=\"/w/$workspaceSlug/settings/integrations\" params={{workspaceSlug}}>\n Configure integrations\n </Link>\n </Button>\n ) : undefined\n }\n variant=\"panel\"\n />\n );\n}\n\nexport function EventsListNoMatches({onClear}: {onClear: () => void}) {\n return (\n <EmptyState\n icon=\"filterOffLine\"\n title=\"No matching events\"\n description=\"No events match your current filters.\"\n action={\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" onClick={onClear}>\n Clear filters\n </Button>\n }\n variant=\"panel\"\n />\n );\n}\n\n/**\n * Slim banner shown when a background refetch fails after a prior success, so the loaded\n * rows stay on screen with the retry inline rather than being wiped by a full placeholder.\n */\nexport function EventsListStaleError({query}: {query: QueryLoadErrorQuery}) {\n return (\n <div className=\"p-tight\">\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex items-center justify-between gap-inline\">\n <Text size=\"xs\">Could not refresh events.</Text>\n <Button\n type=\"button\"\n size=\"2xs\"\n variant=\"secondary\"\n isLoading={query.isFetching}\n onClick={() => {\n void query.refetch();\n }}\n >\n Retry\n </Button>\n </div>\n </Callout>\n </div>\n );\n}\n"],"names":["Button","Callout","EmptyState","Skeleton","Text","Link","EventsListSkeleton","div","className","role","aria-label","Array","from","length","map","_","index","EventsListEmpty","workspaceSlug","icon","title","description","action","asChild","size","variant","to","params","undefined","EventsListNoMatches","onClear","type","onClick","EventsListStaleError","query","isLoading","isFetching","refetch"],"mappings":";AACA,SAAQA,MAAM,QAAO,2BAA2B;AAChD,SAAQC,OAAO,QAAO,4BAA4B;AAClD,SAAQC,UAAU,QAAO,gCAAgC;AACzD,SAAQC,QAAQ,QAAO,6BAA6B;AACpD,SAAQC,IAAI,QAAO,+BAA+B;AAClD,SAAQC,IAAI,QAAO,yBAAyB;AAE5C,OAAO,SAASC;IACd,qBACE,KAACC;QACCC,WAAU;QACVC,MAAK;QACLC,cAAW;kBAEVC,MAAMC,IAAI,CAAC;YAACC,QAAQ;QAAC,GAAGC,GAAG,CAAC,CAACC,GAAGC,sBAC/B,MAACT;gBAGCC,WAAU;;kCAEV,KAACL;wBAASK,WAAU;;kCACpB,KAACL;wBAASK,WAAU;;kCACpB,KAACL;wBAASK,WAAU;;kCACpB,KAACL;wBAASK,WAAU;;;eANfQ;;AAWf;AAEA,OAAO,SAASC,gBAAgB,EAACC,aAAa,EAAuC;IACnF,qBACE,KAAChB;QACCiB,MAAK;QACLC,OAAM;QACNC,aAAY;QACZC,QACEJ,8BACE,KAAClB;YAAOuB,OAAO;YAACC,MAAK;YAAKC,SAAQ;sBAChC,cAAA,KAACpB;gBAAKqB,IAAG;gBAA0CC,QAAQ;oBAACT;gBAAa;0BAAG;;aAI5EU;QAENH,SAAQ;;AAGd;AAEA,OAAO,SAASI,oBAAoB,EAACC,OAAO,EAAwB;IAClE,qBACE,KAAC5B;QACCiB,MAAK;QACLC,OAAM;QACNC,aAAY;QACZC,sBACE,KAACtB;YAAO+B,MAAK;YAASP,MAAK;YAAKC,SAAQ;YAAYO,SAASF;sBAAS;;QAIxEL,SAAQ;;AAGd;AAEA;;;CAGC,GACD,OAAO,SAASQ,qBAAqB,EAACC,KAAK,EAA+B;IACxE,qBACE,KAAC3B;QAAIC,WAAU;kBACb,cAAA,KAACP;YAAQQ,MAAK;YAAQsB,MAAK;sBACzB,cAAA,MAACxB;gBAAIC,WAAU;;kCACb,KAACJ;wBAAKoB,MAAK;kCAAK;;kCAChB,KAACxB;wBACC+B,MAAK;wBACLP,MAAK;wBACLC,SAAQ;wBACRU,WAAWD,MAAME,UAAU;wBAC3BJ,SAAS;4BACP,KAAKE,MAAMG,OAAO;wBACpB;kCACD;;;;;;AAOX"}
|
|
@@ -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,+BAwEjB"}
|
|
@@ -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,
|
|
@@ -34,7 +35,8 @@ export function EventsList({ events, query, facets, filters, onFiltersChange, wo
|
|
|
34
35
|
!query.isPending ? /*#__PURE__*/ _jsx(QueryLoadError, {
|
|
35
36
|
query: query,
|
|
36
37
|
subject: "events",
|
|
37
|
-
icon: "pulseLine"
|
|
38
|
+
icon: "pulseLine",
|
|
39
|
+
variant: "panel"
|
|
38
40
|
}) : null,
|
|
39
41
|
!query.isPending && refreshFailed ? /*#__PURE__*/ _jsx(EventsListStaleError, {
|
|
40
42
|
query: query
|
|
@@ -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 ? (\n <QueryLoadError query={query} subject=\"events\" icon=\"pulseLine\" variant=\"panel\" />\n ) : 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","variant","map","selected","id","onSelect","div","type","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,iBACf,KAACjC;gBAAeiB,OAAOA;gBAAO4B,SAAQ;gBAASC,MAAK;gBAAYC,SAAQ;iBACtE;YACH,CAAC9B,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,OAAOgC,GAAG,CAAC,CAACX,sBACX,KAACvB;wCAECuB,OAAOA;wCACPY,UAAUZ,MAAMa,EAAE,KAAKzB;wCACvB0B,UAAUzB;uCAHLW,MAAMa,EAAE;;;;oBAQpB5B,4BACC,KAAC8B;wBAAIX,WAAU;kCACb,cAAA,KAACxC;4BACCoD,MAAK;4BACLN,SAAQ;4BACRO,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"}
|