@evolver-fi/evolver-basics-admin-components 0.0.20 → 1.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/dist/ArrowBack-Bifnzxvs.js +6430 -0
- package/dist/ArrowBack-Bifnzxvs.js.map +1 -0
- package/dist/{BreadCrumbs-BzG2oi8Z.js → BreadCrumbs-DMuPCevY.js} +2 -2
- package/dist/BreadCrumbs-DMuPCevY.js.map +1 -0
- package/dist/EnumSelectFilter-BdGla5Yf.js +36 -0
- package/dist/EnumSelectFilter-BdGla5Yf.js.map +1 -0
- package/dist/ExpandMore-DUn2zrFA.js +1644 -0
- package/dist/ExpandMore-DUn2zrFA.js.map +1 -0
- package/dist/FilterLink-DIeFjfZX.js +49 -0
- package/dist/FilterLink-DIeFjfZX.js.map +1 -0
- package/dist/JwtTokensRoute-C74zNV7A.js +2374 -0
- package/dist/JwtTokensRoute-C74zNV7A.js.map +1 -0
- package/dist/ScheduledTasksRoute-BAetDHqN.js +611 -0
- package/dist/ScheduledTasksRoute-BAetDHqN.js.map +1 -0
- package/dist/SingleLogMessageRoute-Dl2NFfqG.js +419 -0
- package/dist/SingleLogMessageRoute-Dl2NFfqG.js.map +1 -0
- package/dist/SingleMessageRoute-fC94BR1C.js +306 -0
- package/dist/SingleMessageRoute-fC94BR1C.js.map +1 -0
- package/dist/Table-DWiRP1za.js +120 -0
- package/dist/Table-DWiRP1za.js.map +1 -0
- package/dist/TextFilter-BHWY2B7i.js +67 -0
- package/dist/TextFilter-BHWY2B7i.js.map +1 -0
- package/dist/{TriggerablesRoute-opCAjNCv.js → TriggerablesRoute-DiEEX1cR.js} +572 -576
- package/dist/TriggerablesRoute-DiEEX1cR.js.map +1 -0
- package/dist/api-BD_4zyJw.js +38 -0
- package/dist/api-BD_4zyJw.js.map +1 -0
- package/dist/breadcrumbs/index.js +1 -1
- package/dist/client/index.js +380 -0
- package/dist/client/index.js.map +1 -0
- package/dist/configuration-values/index.js +13 -0
- package/dist/configuration-values/index.js.map +1 -0
- package/dist/control-values/index.js +10 -0
- package/dist/control-values/index.js.map +1 -0
- package/dist/createSvgIcon-dA_Vj2W0.js +3914 -0
- package/dist/{createSvgIcon-Cf1cru4R.js.map → createSvgIcon-dA_Vj2W0.js.map} +1 -1
- package/dist/exhaustiveValues-Dx50G3yz.js +5 -0
- package/dist/exhaustiveValues-Dx50G3yz.js.map +1 -0
- package/dist/filter/index.js +5 -6
- package/dist/formData-BH8saYep.js +65 -0
- package/dist/formData-BH8saYep.js.map +1 -0
- package/dist/{jsx-runtime-B6kdoens.js → jsx-runtime-D858t2LC.js} +201 -219
- package/dist/{jsx-runtime-B6kdoens.js.map → jsx-runtime-D858t2LC.js.map} +1 -1
- package/dist/jwt-tokens/index.js +6 -4
- package/dist/loader-CrveWlGb.js +375 -0
- package/dist/loader-CrveWlGb.js.map +1 -0
- package/dist/loader-D-oC32OJ.js +3612 -0
- package/dist/loader-D-oC32OJ.js.map +1 -0
- package/dist/loader-rVy8Z9xH.js +130 -0
- package/dist/loader-rVy8Z9xH.js.map +1 -0
- package/dist/main/index.js +84 -48
- package/dist/main/index.js.map +1 -1
- package/dist/message-log/index.js +7 -5
- package/dist/message-sending/index.js +4 -4
- package/dist/message-targets/index.js +15 -0
- package/dist/message-targets/index.js.map +1 -0
- package/dist/pagination-Dy4ansKN.js +21 -0
- package/dist/pagination-Dy4ansKN.js.map +1 -0
- package/dist/scheduled-tasks/index.js +11 -9
- package/dist/schemas-CBHIJ_eF.js +3059 -0
- package/dist/schemas-CBHIJ_eF.js.map +1 -0
- package/dist/table/index.js +1 -1
- package/dist/triggerables/index.js +5 -3
- package/dist/triggerables/index.js.map +1 -1
- package/dist/types/breadcrumbs.d.ts +0 -1
- package/dist/types/client.d.ts +1 -0
- package/dist/types/configuration-values.d.ts +1 -0
- package/dist/types/control-values.d.ts +1 -0
- package/dist/types/filter.d.ts +0 -1
- package/dist/types/jwt-tokens.d.ts +0 -1
- package/dist/types/main.d.ts +0 -1
- package/dist/types/message-log.d.ts +0 -1
- package/dist/types/message-sending.d.ts +0 -1
- package/dist/types/message-targets.d.ts +1 -0
- package/dist/types/scheduled-tasks.d.ts +0 -1
- package/dist/types/table.d.ts +0 -1
- package/dist/types/triggerables.d.ts +0 -1
- package/package.json +51 -27
- package/dist/BreadCrumbs-BzG2oi8Z.js.map +0 -1
- package/dist/ConfirmButton-jayUa8_J.js +0 -16
- package/dist/ConfirmButton-jayUa8_J.js.map +0 -1
- package/dist/EnumSelectFilter-DiJhYa2m.js +0 -40
- package/dist/EnumSelectFilter-DiJhYa2m.js.map +0 -1
- package/dist/ExpandMore-D6gf2UVG.js +0 -14
- package/dist/ExpandMore-D6gf2UVG.js.map +0 -1
- package/dist/FilterLink-CHw7-m82.js +0 -43
- package/dist/FilterLink-CHw7-m82.js.map +0 -1
- package/dist/JwtTokensRoute-B3SgLM0q.js +0 -2335
- package/dist/JwtTokensRoute-B3SgLM0q.js.map +0 -1
- package/dist/ScheduledTasksRoute-CNhOAAKd.js +0 -1152
- package/dist/ScheduledTasksRoute-CNhOAAKd.js.map +0 -1
- package/dist/SingleLogMessageRoute-C9CL51r-.js +0 -274
- package/dist/SingleLogMessageRoute-C9CL51r-.js.map +0 -1
- package/dist/SingleMessageRoute-DaaWvgfS.js +0 -293
- package/dist/SingleMessageRoute-DaaWvgfS.js.map +0 -1
- package/dist/Table-DgRqEB1x.js +0 -154
- package/dist/Table-DgRqEB1x.js.map +0 -1
- package/dist/TableMetadataDisplay-C7RP2ZrM.js +0 -122
- package/dist/TableMetadataDisplay-C7RP2ZrM.js.map +0 -1
- package/dist/TextFilter-BKUfkFQe.js +0 -70
- package/dist/TextFilter-BKUfkFQe.js.map +0 -1
- package/dist/TriggerablesRoute-opCAjNCv.js.map +0 -1
- package/dist/createSvgIcon-Cf1cru4R.js +0 -3945
- package/dist/evolverClient-B_TZXnpV.js +0 -1602
- package/dist/evolverClient-B_TZXnpV.js.map +0 -1
- package/dist/parser-Bj3mcA83.js +0 -6096
- package/dist/parser-Bj3mcA83.js.map +0 -1
- package/dist/types/admin-components/src/common/format.d.ts +0 -1
- package/dist/types/admin-components/src/common/types.d.ts +0 -27
- package/dist/types/admin-components/src/common/validation.d.ts +0 -5
- package/dist/types/admin-components/src/components/breadcrumbs/BreadCrumbs.d.ts +0 -10
- package/dist/types/admin-components/src/components/breadcrumbs/index.d.ts +0 -1
- package/dist/types/admin-components/src/components/filter/EnumSelectFilter.d.ts +0 -11
- package/dist/types/admin-components/src/components/filter/FilterHelperTexts.d.ts +0 -4
- package/dist/types/admin-components/src/components/filter/FilterLink.d.ts +0 -2
- package/dist/types/admin-components/src/components/filter/TextFilter.d.ts +0 -2
- package/dist/types/admin-components/src/components/filter/index.d.ts +0 -5
- package/dist/types/admin-components/src/components/filter/types.d.ts +0 -20
- package/dist/types/admin-components/src/components/metadata/TableMetadataDisplay.d.ts +0 -2
- package/dist/types/admin-components/src/components/metadata/utils.d.ts +0 -1
- package/dist/types/admin-components/src/components/table/Pagination.d.ts +0 -7
- package/dist/types/admin-components/src/components/table/Table.d.ts +0 -3
- package/dist/types/admin-components/src/components/table/index.d.ts +0 -3
- package/dist/types/admin-components/src/components/table/types.d.ts +0 -48
- package/dist/types/admin-components/src/index.d.ts +0 -8
- package/dist/types/admin-components/src/routes/jwt-tokens/JwtTokensRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/jwt-tokens/index.d.ts +0 -2
- package/dist/types/admin-components/src/routes/jwt-tokens/loader.d.ts +0 -11
- package/dist/types/admin-components/src/routes/message-log/MessageLogRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/message-log/SingleLogMessageRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/message-log/index.d.ts +0 -3
- package/dist/types/admin-components/src/routes/message-log/loader.d.ts +0 -7
- package/dist/types/admin-components/src/routes/message-log/messageLogColumns.d.ts +0 -3
- package/dist/types/admin-components/src/routes/message-log/types.d.ts +0 -35
- package/dist/types/admin-components/src/routes/message-sending/MessageSendingRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/message-sending/SingleMessageRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/message-sending/index.d.ts +0 -3
- package/dist/types/admin-components/src/routes/message-sending/loader.d.ts +0 -6
- package/dist/types/admin-components/src/routes/message-sending/messageSendingColumns.d.ts +0 -3
- package/dist/types/admin-components/src/routes/message-sending/types.d.ts +0 -41
- package/dist/types/admin-components/src/routes/scheduled-tasks/ScheduledTaskFormRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/scheduled-tasks/ScheduledTasksRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/scheduled-tasks/action.d.ts +0 -20
- package/dist/types/admin-components/src/routes/scheduled-tasks/index.d.ts +0 -4
- package/dist/types/admin-components/src/routes/scheduled-tasks/loader.d.ts +0 -9
- package/dist/types/admin-components/src/routes/triggerables/TriggerablesRoute.d.ts +0 -2
- package/dist/types/admin-components/src/routes/triggerables/action.d.ts +0 -10
- package/dist/types/admin-components/src/routes/triggerables/index.d.ts +0 -3
- package/dist/types/admin-components/src/routes/triggerables/loader.d.ts +0 -9
- package/dist/types/admin-ui/src/front-page/FrontPage.d.ts +0 -2
- package/dist/validation-DStiilqx.js +0 -22
- package/dist/validation-DStiilqx.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleLogMessageRoute-Dl2NFfqG.js","sources":["../src/routes/message-log/api.ts","../src/routes/message-log/loader.ts","../src/routes/message-log/messageLogColumns.tsx","../src/routes/message-log/MessageLogRoute.tsx","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/utils/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/actions/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/slices/logSlice.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/components/LogMessageComponent.js","../src/routes/message-log/SingleLogMessageRoute.tsx"],"sourcesContent":["import type { ApiClient } from \"../../client\";\nimport type { paths } from \"../../types/openapiTypes\";\n\ntype OpenApiFetchMessageLogsQuery = NonNullable<paths[\"/log\"][\"get\"][\"parameters\"][\"query\"]>;\n\nexport type FetchMessageLogsQuery = OpenApiFetchMessageLogsQuery;\nexport type MessageLogStringFilterValue = NonNullable<FetchMessageLogsQuery[\"v\"]>[number];\nexport type MessageLogIntFilterValue = NonNullable<FetchMessageLogsQuery[\"mci\"]>[number];\n\nconst serializeFilterValue = ({\n value,\n null: isNull,\n inverted,\n}: MessageLogStringFilterValue | MessageLogIntFilterValue): string =>\n `${inverted ? \"!\" : \"\"}${isNull ? \"null\" : value}`;\n\nconst appendFilterValues = (\n params: URLSearchParams,\n key: string,\n values: MessageLogStringFilterValue[] | MessageLogIntFilterValue[] | undefined,\n) => {\n values?.forEach((value) => {\n params.append(key, serializeFilterValue(value));\n });\n};\n\nconst appendQueryParam = (\n params: URLSearchParams,\n key: string,\n value: number | string | undefined,\n) => {\n if (value !== undefined) {\n params.set(key, String(value));\n }\n};\n\nconst serializeMessageLogsQuery = (query: FetchMessageLogsQuery): string => {\n const params = new URLSearchParams();\n\n appendFilterValues(params, \"v\", query.v);\n appendFilterValues(params, \"srv\", query.srv);\n appendFilterValues(params, \"m\", query.m);\n appendFilterValues(params, \"p\", query.p);\n appendFilterValues(params, \"c\", query.c);\n appendFilterValues(params, \"mci\", query.mci);\n appendFilterValues(params, \"rqsn\", query.rqsn);\n appendFilterValues(params, \"rpsn\", query.rpsn);\n appendQueryParam(params, \"s.min\", query[\"s.min\"]);\n appendQueryParam(params, \"s.max\", query[\"s.max\"]);\n appendQueryParam(params, \"d.min\", query[\"d.min\"]);\n appendQueryParam(params, \"d.max\", query[\"d.max\"]);\n appendQueryParam(params, \"rqs.min\", query[\"rqs.min\"]);\n appendQueryParam(params, \"rqs.max\", query[\"rqs.max\"]);\n appendQueryParam(params, \"rps.min\", query[\"rps.min\"]);\n appendQueryParam(params, \"rps.max\", query[\"rps.max\"]);\n appendQueryParam(params, \"md\", query.md);\n appendQueryParam(params, \"page\", query.page);\n appendQueryParam(params, \"size\", query.size);\n query.sort?.forEach((sort) => {\n params.append(\"sort\", sort);\n });\n\n return params.toString();\n};\n\nexport const fetchMessageLogs = async (query: FetchMessageLogsQuery, client: ApiClient) => {\n const result = await client.GET(\"/log\", {\n params: {\n query,\n },\n querySerializer: serializeMessageLogsQuery,\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch logs: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const fetchMessageLogById = async (id: number, client: ApiClient) => {\n const result = await client.GET(\"/log/{id}\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch log message: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const getLogBodyUrl = (id: number, type: \"request\" | \"response\"): string => {\n // TODO: add some apiBaceUrl with Vite env value\n return `/log/${id}/${type}?pretty=true`;\n};\n\nexport const downloadLogBody = async (\n id: number,\n type: \"request\" | \"response\",\n client: ApiClient,\n) => {\n if (type === \"request\") {\n const result = await client.GET(\"/log/{id}/request\", {\n params: {\n path: { id },\n query: { pretty: true },\n },\n parseAs: \"blob\",\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to download log request: ${result.response.status}`);\n }\n\n return {\n blob: result.data,\n contentType: result.response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n };\n }\n\n const result = await client.GET(\"/log/{id}/response\", {\n params: {\n path: { id },\n query: { pretty: true },\n },\n parseAs: \"blob\",\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to download log response: ${result.response.status}`);\n }\n\n return {\n blob: result.data,\n contentType: result.response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n };\n};\n","import type { LoaderFunctionArgs } from \"react-router\";\nimport type {\n FetchMessageLogsQuery,\n MessageLogIntFilterValue,\n MessageLogStringFilterValue,\n} from \"./api\";\nimport { fetchMessageLogById, fetchMessageLogs } from \"./api\";\nimport { mapMetadata } from \"../../components/metadata/utils\";\nimport type { ApiClient } from \"../../client\";\nimport { getPagingValuesFromSearchParams } from \"../../common/pagination\";\n\nconst getTrimmedParam = (params: URLSearchParams, key: string): string | undefined => {\n const value = params.get(key)?.trim();\n return value ? value : undefined;\n};\n\nconst parseNumberRange = (value: string): { min?: number; max?: number } => {\n const normalized = value.replace(/\\s+/g, \"\");\n\n if (!normalized.includes(\"-\")) {\n const exact = Number(normalized);\n return Number.isNaN(exact) ? {} : { min: exact, max: exact };\n }\n\n const [rawMin, rawMax] = normalized.split(\"-\", 2);\n const min = rawMin ? Number(rawMin) : undefined;\n const max = rawMax ? Number(rawMax) : undefined;\n\n return {\n min: min !== undefined && !Number.isNaN(min) ? min : undefined,\n max: max !== undefined && !Number.isNaN(max) ? max : undefined,\n };\n};\n\nconst parseDateRange = (value: string): { min?: string; max?: string } => {\n const splitBySpacedDash = value.split(/\\s-\\s/, 2);\n\n if (splitBySpacedDash.length === 2) {\n const min = splitBySpacedDash[0]?.trim();\n const max = splitBySpacedDash[1]?.trim();\n\n return {\n min: min || undefined,\n max: max || undefined,\n };\n }\n\n const exact = value.trim();\n return exact ? { min: exact, max: exact } : {};\n};\n\nconst parseFilterToken = (\n rawValue: string,\n): { isInverted: boolean; isNull: boolean; value: string } => {\n const trimmedValue = rawValue.trim();\n const isInverted = trimmedValue.length > 1 && trimmedValue.startsWith(\"!\");\n const value = isInverted ? trimmedValue.slice(1) : trimmedValue;\n\n return {\n isInverted,\n isNull: value.toLowerCase() === \"null\",\n value,\n };\n};\n\nconst parseStringFilterValue = (rawValue: string): MessageLogStringFilterValue => {\n const { isInverted, isNull, value } = parseFilterToken(rawValue);\n\n return {\n ...(isNull ? { null: true } : { value }),\n ...(isInverted ? { inverted: true } : {}),\n };\n};\n\nconst parseIntFilterValue = (rawValue: string): MessageLogIntFilterValue | undefined => {\n const { isInverted, isNull, value } = parseFilterToken(rawValue);\n const parsedValue = Number(value);\n\n if (!isNull && Number.isNaN(parsedValue)) {\n return undefined;\n }\n\n return {\n ...(isNull ? { null: true } : { value: parsedValue }),\n ...(isInverted ? { inverted: true } : {}),\n };\n};\n\nconst splitFilterValues = (value: string): string[] =>\n value\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n\nconst parseStringFilterValues = (value: string): MessageLogStringFilterValue[] | undefined => {\n const values = splitFilterValues(value).map(parseStringFilterValue);\n return values.length > 0 ? values : undefined;\n};\n\nconst parseIntFilterValues = (value: string): MessageLogIntFilterValue[] | undefined => {\n const values = splitFilterValues(value).flatMap((filterValue) => {\n const parsedValue = parseIntFilterValue(filterValue);\n return parsedValue ? [parsedValue] : [];\n });\n\n return values.length > 0 ? values : undefined;\n};\n\nconst buildMessageLogQuery = (params: URLSearchParams): FetchMessageLogsQuery => {\n const query: FetchMessageLogsQuery = {};\n\n const v = getTrimmedParam(params, \"v\");\n if (v) query.v = parseStringFilterValues(v);\n\n const srv = getTrimmedParam(params, \"srv\");\n if (srv) query.srv = parseStringFilterValues(srv);\n\n const m = getTrimmedParam(params, \"m\");\n if (m) query.m = parseStringFilterValues(m);\n\n const p = getTrimmedParam(params, \"p\");\n if (p) query.p = parseStringFilterValues(p);\n\n const c = getTrimmedParam(params, \"c\");\n if (c) query.c = parseStringFilterValues(c);\n\n const rqsn = getTrimmedParam(params, \"rqsn\");\n if (rqsn) query.rqsn = parseStringFilterValues(rqsn);\n\n const rpsn = getTrimmedParam(params, \"rpsn\");\n if (rpsn) query.rpsn = parseStringFilterValues(rpsn);\n\n const md = getTrimmedParam(params, \"md\");\n if (md) query.md = md;\n\n const mci = getTrimmedParam(params, \"mci\");\n if (mci) query.mci = parseIntFilterValues(mci);\n\n const startTime = getTrimmedParam(params, \"s\");\n if (startTime) {\n const { min, max } = parseDateRange(startTime);\n if (min) query[\"s.min\"] = min;\n if (max) query[\"s.max\"] = max;\n }\n\n const durationMs = getTrimmedParam(params, \"d\");\n if (durationMs) {\n const { min, max } = parseNumberRange(durationMs);\n if (min !== undefined) query[\"d.min\"] = min;\n if (max !== undefined) query[\"d.max\"] = max;\n }\n\n const requestSize = getTrimmedParam(params, \"rqs\");\n if (requestSize) {\n const { min, max } = parseNumberRange(requestSize);\n if (min !== undefined) query[\"rqs.min\"] = min;\n if (max !== undefined) query[\"rqs.max\"] = max;\n }\n\n const responseSize = getTrimmedParam(params, \"rps\");\n if (responseSize) {\n const { min, max } = parseNumberRange(responseSize);\n if (min !== undefined) query[\"rps.min\"] = min;\n if (max !== undefined) query[\"rps.max\"] = max;\n }\n\n const { page, size } = getPagingValuesFromSearchParams(params);\n query.page = page;\n query.size = size;\n\n return query;\n};\n\nexport const getMessageLogLoader =\n (client: ApiClient) =>\n async ({ request }: LoaderFunctionArgs) => {\n try {\n const requestUrl = new URL(request.url);\n const filter = buildMessageLogQuery(requestUrl.searchParams);\n\n const logs = await fetchMessageLogs(filter, client);\n return logs;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const getSingleLogMessageLoader =\n (client: ApiClient) =>\n async ({ params }: LoaderFunctionArgs) => {\n if (!params.id) {\n throw new Error(\"No message id provided\"); // shouldn't route here without an id\n }\n try {\n const id = Number.parseInt(params.id, 10);\n\n if (Number.isNaN(id)) {\n throw new Error(\"Invalid message id provided\");\n }\n\n const message = await fetchMessageLogById(id, client);\n return mapMetadata(message);\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n","import { getLogBodyUrl } from \"./api\";\nimport { formatDateTime } from \"../../common/format\";\nimport {\n datetimeRangeValidator,\n numberRangeValidator,\n numberValidator,\n} from \"../../common/validation\";\nimport { FilterLink } from \"../../components/filter/FilterLink\";\nimport { TextFilter } from \"../../components/filter/TextFilter\";\nimport { TableMetadataDisplay } from \"../../components/metadata/TableMetadataDisplay\";\nimport type { ColumnDefinitions } from \"../../components/table/types\";\nimport type { LogFilter, LogMessage } from \"./types\";\n\n// oxlint-disable-next-line react/only-export-components\nconst LogBodyLink = ({\n size,\n id,\n type,\n}: {\n size: number;\n id: number;\n type: \"request\" | \"response\";\n}) =>\n size ? (\n <a href={getLogBodyUrl(id, type)} onClick={(e) => e.stopPropagation()}>\n {size}\n </a>\n ) : (\n size\n );\n\nexport const messageLogColumns: ColumnDefinitions<LogMessage, LogFilter> = [\n {\n key: \"startTime\",\n title: \"Start time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"s\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"durationMs\",\n title: \"Duration, ms\",\n minWidth: 100,\n searchKey: \"d\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"messageType\",\n title: \"Type\",\n minWidth: 100,\n searchKey: \"m\",\n filterHelperText: \"e.g. ControlValue/list\",\n FilterComponent: TextFilter,\n },\n {\n key: \"protocol\",\n title: \"Protocol\",\n minWidth: 100,\n searchKey: \"p\",\n filterHelperText: \"e.g. http\",\n FilterComponent: TextFilter,\n },\n {\n key: \"requestingSystem\",\n title: \"Requesting System\",\n minWidth: 100,\n searchKey: \"rqsn\",\n FilterComponent: TextFilter,\n },\n {\n key: \"respondingSystem\",\n title: \"Responding System\",\n minWidth: 100,\n searchKey: \"rpsn\",\n FilterComponent: TextFilter,\n },\n {\n key: \"statusCode\",\n title: \"Status\",\n minWidth: 100,\n searchKey: \"c\",\n filterHelperText: \"e.g. 400\",\n FilterComponent: TextFilter,\n },\n {\n key: \"messageChainId\",\n title: \"Message Chain ID\",\n CellComponent: FilterLink,\n minWidth: 150,\n searchKey: \"mci\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"requestSize\",\n title: \"Request size\",\n CellComponent: ({ value, row }) => <LogBodyLink size={value} id={row.id} type=\"request\" />,\n minWidth: 150,\n searchKey: \"rqs\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"responseSize\",\n title: \"Response size\",\n CellComponent: ({ value, row }) => <LogBodyLink size={value} id={row.id} type=\"response\" />,\n minWidth: 150,\n searchKey: \"rps\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"metadata\",\n title: \"Metadata\",\n CellComponent: TableMetadataDisplay,\n minWidth: 150,\n searchKey: \"md\",\n filterHelperText: \"A=a, B=b\",\n FilterComponent: TextFilter,\n },\n];\n","import { Form, useLoaderData, useNavigate, useSearchParams } from \"react-router\";\n\nimport { TableContainer } from \"@mui/material\";\nimport { getSearchParamsWithPage } from \"../../common/pagination\";\nimport { Pagination } from \"../../components/table/Pagination\";\nimport { Table } from \"../../components/table/Table\";\nimport { messageLogColumns } from \"./messageLogColumns\";\nimport type { LogFilter, LogMessageResponse } from \"./types\";\n\nconst getRowId = ({ id }: { id: number }) => id;\n\nconst searchParamsToFilter = (params: URLSearchParams): LogFilter => ({\n appVersion: params.get(\"v\") ?? \"\",\n messageType: params.get(\"m\") ?? \"\",\n protocol: params.get(\"p\") ?? \"\",\n startTime: params.get(\"s\") ?? \"\",\n durationMs: params.get(\"d\") ?? \"\",\n statusCode: params.get(\"c\") ?? \"\",\n messageChainId: params.get(\"mci\") ?? \"\",\n requestSize: params.get(\"rqs\") ?? \"\",\n responseSize: params.get(\"rps\") ?? \"\",\n metadata: params.get(\"md\") ?? \"\",\n requestingSystem: params.get(\"rqsn\") ?? \"\",\n respondingSystem: params.get(\"rpsn\") ?? \"\",\n});\n\nconst MessageLogRoute = () => {\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const logMessageResponse = useLoaderData() as LogMessageResponse;\n\n return (\n <>\n <Form method=\"get\">\n <TableContainer sx={{ height: \"calc(100vh - 130px)\" }}>\n <Table\n columns={messageLogColumns}\n rows={logMessageResponse.content}\n getRowId={getRowId}\n onRowClick={(row) => navigate(`./${row.id}`, { relative: \"path\" })}\n defaultFilter={searchParamsToFilter(searchParams)}\n />\n </TableContainer>\n <input type=\"submit\" hidden />\n </Form>\n <Pagination\n page={logMessageResponse.number}\n rowsPerPage={logMessageResponse.size}\n total={logMessageResponse.totalElements}\n onPageChange={(page) => {\n setSearchParams(getSearchParamsWithPage(searchParams, page));\n }}\n />\n </>\n );\n};\n\nexport default MessageLogRoute;\n","import { formatDatetimeRangeFilter, formatNumberRangeFilter, } from '../../common/components/listUtils';\nimport { getBackendClient } from '../../common/evolverClient';\nimport { createFilterQuery } from '../../common/utils/filterUtils';\nexport const formatterByKey = {\n s: formatDatetimeRangeFilter,\n d: formatNumberRangeFilter,\n rqs: formatNumberRangeFilter,\n rps: formatNumberRangeFilter,\n};\nexport const fetchLogs = (logFilters, backendClient) => {\n const client = backendClient || getBackendClient();\n const searchParams = new URLSearchParams();\n createFilterQuery(logFilters, formatterByKey).forEach((value, key) => searchParams.append(key, value));\n const searchParamsString = searchParams.toString() ? `?${searchParams.toString()}` : '';\n return client.get(`log${searchParamsString}`);\n};\nexport const fetchLogById = (id, backendClient) => {\n const client = backendClient || getBackendClient();\n return client.get(`log/${id}`);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchLogs } from '../utils';\nexport const fetchLogsAction = createAsyncThunk('logs/fetchLogs', async (logFilters, thunkApi) => {\n const response = await fetchLogs(logFilters);\n if (response.status !== 200) {\n return thunkApi.rejectWithValue({\n message: 'Failed to fetch logs.',\n });\n }\n return response.data;\n});\n","import { createSlice } from '@reduxjs/toolkit';\nimport { fetchLogsAction } from '../actions';\nconst initialState = {\n logMessages: [],\n logMessageTotalCount: 0,\n status: 'loading',\n filters: {\n page: '0',\n size: '100',\n },\n};\nexport const logSlice = createSlice({\n name: 'log',\n initialState,\n reducers: {\n updateLogs(state, { payload }) {\n state.logMessages = payload;\n },\n updateFilters(state, { payload }) {\n state.filters = { ...state.filters, ...payload };\n },\n clearFilters(state, { payload }) {\n const filters = { ...state.filters };\n payload.forEach((element) => {\n delete filters[element];\n });\n state.filters = filters;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchLogsAction.pending, (state) => {\n state.status = 'loading';\n state.error = 'undefined';\n });\n builder.addCase(fetchLogsAction.fulfilled, (state, { payload }) => {\n state.logMessages = payload.content;\n state.logMessageTotalCount = payload.totalElements;\n state.status = 'succeeded';\n });\n builder.addCase(fetchLogsAction.rejected, (state, { payload }) => {\n if (payload) {\n state.error = payload.message;\n }\n state.status = 'failed';\n });\n },\n});\nexport const { updateLogs, updateFilters, clearFilters } = logSlice.actions;\nexport const selectLogs = (state) => state.logs.logMessages;\nexport const selectLogMessageTotalCount = (state) => state.logs.logMessageTotalCount;\nexport const selectFilters = (state) => state.logs.filters;\nexport const selectStatus = (state) => state.logs.status;\nexport default logSlice.reducer;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Button, Grid, TextField } from '@mui/material';\nimport { formatDateTime } from '../../common/components/listUtils';\nconst LogMessageField = ({ label, value, isWide, isFull, }) => (_jsx(Grid, { item: true, xs: 12, sm: isFull ? 12 : 6, md: isFull ? 12 : isWide ? 6 : 3, children: _jsx(TextField, { label: label, value: value, InputProps: {\n readOnly: true,\n }, InputLabelProps: {\n style: { fontSize: 20 },\n }, multiline: true, fullWidth: true }) }));\nconst LogMessageComponent = ({ message, backAction, downloadDataAction, }) => {\n return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: \"contained\", startIcon: _jsx(ArrowBackIcon, {}), onClick: () => backAction(), sx: {\n marginBottom: 0.5,\n width: 200,\n backgroundColor: 'secondary.main',\n }, children: \"Back\" }), message ? (_jsxs(Grid, { container: true, direction: \"row\", justifyContent: \"flex-start\", spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 12, lg: 12, children: _jsx(\"h1\", { children: \"Message Details\" }) }), _jsx(LogMessageField, { label: \"Sent At\", value: formatDateTime(message.startTime) }), _jsx(LogMessageField, { label: \"Duration, ms\", value: message.durationMs }), _jsx(LogMessageField, { label: \"App Server\", value: message.appServer }), _jsx(LogMessageField, { label: \"App Version\", value: message.appVersion }), _jsx(LogMessageField, { label: \"Type\", value: message.messageType }), _jsx(LogMessageField, { label: \"Protocol\", value: message.protocol }), _jsx(LogMessageField, { label: \"Requesting system\", value: message.requestingSystem }), _jsx(LogMessageField, { label: \"Responding system\", value: message.respondingSystem }), _jsxs(Grid, { item: true, container: true, xs: 12, spacing: 2, children: [_jsx(LogMessageField, { label: \"Request headers\", value: message.requestHeaders, isWide: true }), _jsx(LogMessageField, { label: \"Response headers\", value: message.responseHeaders, isWide: true })] }), _jsx(LogMessageField, { label: \"Address\", value: message.address, isFull: true }), _jsx(LogMessageField, { label: \"Status code\", value: message.statusCode }), _jsx(LogMessageField, { label: \"Status message\", value: message.statusMessage }), _jsx(LogMessageField, { label: \"Message chain ID\", value: message.messageChainId }), _jsx(LogMessageField, { label: \"Request Size (B)\", value: message.requestSize }), _jsx(LogMessageField, { label: \"Response Size (B)\", value: message.responseSize }), _jsx(Grid, { item: true, container: true, xs: 12, spacing: 2, children: _jsx(LogMessageField, { label: \"Metadata\", value: Object.entries(message.metadata)\n .map(([key, value]) => `${key} = ${value}`)\n .join('\\n'), isFull: true }) }), _jsxs(Grid, { container: true, item: true, direction: \"row\", xs: 12, spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.requestSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'request'), sx: { margin: 1, width: 200 }, children: \"Download Request\" }) }), _jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.responseSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'response'), sx: { margin: 1, width: 200 }, children: \"Download Response\" }) })] })] })) : (_jsx(\"p\", { children: \"No message data found\" }))] }));\n};\nexport default LogMessageComponent;\n","import type { LogMessage } from \"@evolver-fi/evolver-basics/message-log\";\nimport { LogMessageComponent } from \"@evolver-fi/evolver-basics/message-log\";\nimport { useLoaderData, useNavigate } from \"react-router\";\nimport { downloadLogBody } from \"./api\";\nimport type { ApiClient } from \"../../client\";\n\ntype SingleMessageRouteProps = {\n client: ApiClient;\n};\n\nconst SingleMessageRoute = ({ client }: SingleMessageRouteProps) => {\n const navigate = useNavigate();\n const message = useLoaderData() as LogMessage; // TODO: cast to <typeof [loader]> later\n\n return (\n <LogMessageComponent\n message={message}\n backAction={() => navigate(\"..\", { relative: \"path\" })}\n downloadDataAction={async function (id: number, type: string): Promise<void> {\n try {\n const safeType = type === \"response\" ? \"response\" : \"request\";\n const { blob, contentType } = await downloadLogBody(id, safeType, client);\n const typedBlob = new Blob([blob], {\n type: contentType,\n });\n const url = window.URL.createObjectURL(typedBlob);\n\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = `log-${id}-${safeType}.txt`;\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error(\"Failed to download log data:\", error);\n }\n }}\n />\n );\n};\n\nexport default SingleMessageRoute;\n"],"names":["serializeFilterValue","value","isNull","inverted","appendFilterValues","params","key","values","appendQueryParam","serializeMessageLogsQuery","query","sort","fetchMessageLogs","client","result","fetchMessageLogById","id","getLogBodyUrl","type","downloadLogBody","getTrimmedParam","parseNumberRange","normalized","exact","rawMin","rawMax","min","max","parseDateRange","splitBySpacedDash","parseFilterToken","rawValue","trimmedValue","isInverted","parseStringFilterValue","parseIntFilterValue","parsedValue","splitFilterValues","part","parseStringFilterValues","parseIntFilterValues","filterValue","buildMessageLogQuery","v","srv","m","p","c","rqsn","rpsn","md","mci","startTime","durationMs","requestSize","responseSize","page","size","getPagingValuesFromSearchParams","getMessageLogLoader","request","requestUrl","filter","error","getSingleLogMessageLoader","message","mapMetadata","LogBodyLink","jsx","e","messageLogColumns","formatDateTime","datetimeRangeValidator","TextFilter","numberRangeValidator","FilterLink","numberValidator","row","TableMetadataDisplay","getRowId","searchParamsToFilter","MessageLogRoute","navigate","useNavigate","searchParams","setSearchParams","useSearchParams","logMessageResponse","useLoaderData","jsxs","Fragment","Form","TableContainer","Table","Pagination","getSearchParamsWithPage","formatterByKey","formatDatetimeRangeFilter","formatNumberRangeFilter","fetchLogs","logFilters","backendClient","getBackendClient","createFilterQuery","searchParamsString","fetchLogsAction","createAsyncThunk","thunkApi","response","initialState","logSlice","createSlice","state","payload","filters","element","builder","updateLogs","updateFilters","clearFilters","LogMessageField","label","isWide","isFull","_jsx","Grid","TextField","LogMessageComponent","backAction","downloadDataAction","_jsxs","_Fragment","Button","ArrowBackIcon","SingleMessageRoute","safeType","blob","contentType","typedBlob","url","link"],"mappings":"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","x_google_ignoreList":[4,5,6,7]}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { filterFromUrlSearchParams as V } from "@evolver-fi/evolver-basics";
|
|
2
|
+
import { m as H, d as E, a as x, n as P, T as w, f as T, c as k, b as B, e as C, A as W, g as y, h as G } from "./ArrowBack-Bifnzxvs.js";
|
|
3
|
+
import { j as t } from "./jsx-runtime-D858t2LC.js";
|
|
4
|
+
import { Grid as f, TextField as j, InputAdornment as S, IconButton as F, TableContainer as $, Button as R, FormControl as K, Select as U, MenuItem as z, Checkbox as _, FormHelperText as O } from "@mui/material";
|
|
5
|
+
import { useNavigate as v, useSearchParams as Y, useLoaderData as A, Form as q } from "react-router";
|
|
6
|
+
import { g as Q } from "./pagination-Dy4ansKN.js";
|
|
7
|
+
import { T as J, P as X } from "./Table-DWiRP1za.js";
|
|
8
|
+
import { E as Z } from "./EnumSelectFilter-BdGla5Yf.js";
|
|
9
|
+
import { B as I, T as u } from "./TextFilter-BHWY2B7i.js";
|
|
10
|
+
import { e as ee } from "./exhaustiveValues-Dx50G3yz.js";
|
|
11
|
+
import { g as te, c as ae, a as re } from "./ExpandMore-DUn2zrFA.js";
|
|
12
|
+
import M, { useEffect as se } from "react";
|
|
13
|
+
import "axios";
|
|
14
|
+
const b = (e) => /^\d*$/.test(e) ? void 0 : "Value must be numeric!", ie = (e) => /^[0-9]*\s*-{0,1}\s*[0-9]*$/.test(e) ? void 0 : "Value must be numeric or a range!", L = (e) => /^(\d{4}-\d{2}-\d{2}((\s|T)\d{2}:\d{2}:\d{2})?){0,1}\s*-{0,1}\s*(\d{4}-\d{2}-\d{2}((\s|T)\d{2}:\d{2}:\d{2})?){0,1}$/.test(e) ? void 0 : "Value must be a date(time) or range!", ne = ({ filterValue: e, validationError: a, setFilterValue: r }) => {
|
|
15
|
+
const [i, n] = e?.split("-") || "", [o, g] = M.useState(i), [c, h] = M.useState(n);
|
|
16
|
+
return se(() => {
|
|
17
|
+
const s = `${o || ""}${c || o ? "-" : ""}${c || ""}`;
|
|
18
|
+
r(s);
|
|
19
|
+
}, [o, c]), t.jsxs(f, { container: !0, direction: "row", spacing: 1, children: [t.jsx(f, { item: !0, xs: 12, xl: 6, children: t.jsx(j, { size: "small", error: !!a, helperText: a || "Start", value: o || "", onChange: (s) => {
|
|
20
|
+
g(`${s.target.value}:00`);
|
|
21
|
+
}, fullWidth: !0, InputProps: {
|
|
22
|
+
endAdornment: o && o.length > 0 ? t.jsx(S, { position: "end", children: t.jsx(F, { onClick: (s) => {
|
|
23
|
+
s.preventDefault(), s.stopPropagation(), g(void 0);
|
|
24
|
+
}, size: "small", children: t.jsx(I, {}) }) }) : void 0
|
|
25
|
+
} }) }), t.jsx(f, { item: !0, xs: 12, xl: 6, children: t.jsx(j, { size: "small", value: c || "", helperText: "End", onChange: (s) => {
|
|
26
|
+
h(`${s.target.value}:00`);
|
|
27
|
+
}, fullWidth: !0, InputProps: {
|
|
28
|
+
endAdornment: c && c.length > 0 ? t.jsx(S, { position: "end", children: t.jsx(F, { onClick: (s) => {
|
|
29
|
+
s.preventDefault(), s.stopPropagation(), h(void 0);
|
|
30
|
+
}, size: "small", children: t.jsx(I, {}) }) }) : void 0
|
|
31
|
+
} }) })] });
|
|
32
|
+
}, le = async (e, a) => {
|
|
33
|
+
const r = await a.GET("/message", {
|
|
34
|
+
params: {
|
|
35
|
+
query: e
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if ("error" in r)
|
|
39
|
+
throw new Error(`Failed to fetch messages: ${r.response.status}`);
|
|
40
|
+
return r.data;
|
|
41
|
+
}, oe = async (e, a) => {
|
|
42
|
+
const r = await a.GET("/message/{id}", {
|
|
43
|
+
params: {
|
|
44
|
+
path: { id: e }
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
if ("error" in r)
|
|
48
|
+
throw new Error(`Failed to fetch message by id: ${r.response.status}`);
|
|
49
|
+
return r.data;
|
|
50
|
+
}, Be = (e) => async ({ params: a }) => {
|
|
51
|
+
try {
|
|
52
|
+
if (!a.id)
|
|
53
|
+
throw new Error("No message id provided");
|
|
54
|
+
const r = Number.parseInt(a.id, 10);
|
|
55
|
+
if (Number.isNaN(r))
|
|
56
|
+
throw new Error("Invalid message id provided");
|
|
57
|
+
return await oe(r, e);
|
|
58
|
+
} catch (r) {
|
|
59
|
+
throw console.error(r), r;
|
|
60
|
+
}
|
|
61
|
+
}, We = (e) => async ({ request: a }) => {
|
|
62
|
+
try {
|
|
63
|
+
const r = new URL(a.url), i = V(
|
|
64
|
+
r.searchParams,
|
|
65
|
+
["s", "mci", "ct", "lut", "fc", "mgi", "p", "md", "page", "size"]
|
|
66
|
+
// TODO: should sort be included?
|
|
67
|
+
), n = await le(i, e);
|
|
68
|
+
return H(n);
|
|
69
|
+
} catch (r) {
|
|
70
|
+
throw console.error(r), r;
|
|
71
|
+
}
|
|
72
|
+
}, de = (e) => (a) => /* @__PURE__ */ t.jsx(Z, { ...a, enumValues: e }), ce = ee()([
|
|
73
|
+
"DELAYED",
|
|
74
|
+
"PENDING",
|
|
75
|
+
"SENDING",
|
|
76
|
+
"SENT",
|
|
77
|
+
"FAILED",
|
|
78
|
+
"DISABLED"
|
|
79
|
+
]), me = ce.map((e) => ({
|
|
80
|
+
label: e,
|
|
81
|
+
value: e
|
|
82
|
+
})), ue = [
|
|
83
|
+
{
|
|
84
|
+
key: "creationTime",
|
|
85
|
+
title: "Creation time",
|
|
86
|
+
CellComponent: ({ value: e }) => T(e),
|
|
87
|
+
minWidth: 250,
|
|
88
|
+
searchKey: "ct",
|
|
89
|
+
filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
|
|
90
|
+
filterValidator: E,
|
|
91
|
+
FilterComponent: u
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: "lastUpdatedTime",
|
|
95
|
+
title: "Last updated time",
|
|
96
|
+
CellComponent: ({ value: e }) => T(e),
|
|
97
|
+
minWidth: 250,
|
|
98
|
+
searchKey: "lut",
|
|
99
|
+
filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
|
|
100
|
+
filterValidator: E,
|
|
101
|
+
FilterComponent: u
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
key: "state",
|
|
105
|
+
title: "State",
|
|
106
|
+
minWidth: 130,
|
|
107
|
+
searchKey: "s",
|
|
108
|
+
filterHelperText: "e.g. SENT",
|
|
109
|
+
FilterComponent: de(me)
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
key: "messageChainId",
|
|
113
|
+
title: "Message Chain ID",
|
|
114
|
+
minWidth: 150,
|
|
115
|
+
searchKey: "mci",
|
|
116
|
+
filterHelperText: "e.g. 123",
|
|
117
|
+
filterValidator: x,
|
|
118
|
+
FilterComponent: u
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: "messageGroupId",
|
|
122
|
+
title: "Message Group ID",
|
|
123
|
+
minWidth: 150,
|
|
124
|
+
searchKey: "mgi",
|
|
125
|
+
filterHelperText: "e.g. 123",
|
|
126
|
+
filterValidator: x,
|
|
127
|
+
FilterComponent: u
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
key: "failCount",
|
|
131
|
+
title: "Fail count",
|
|
132
|
+
minWidth: 150,
|
|
133
|
+
searchKey: "fc",
|
|
134
|
+
filterHelperText: "number - ?number",
|
|
135
|
+
filterValidator: P,
|
|
136
|
+
FilterComponent: u
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
key: "priority",
|
|
140
|
+
title: "Priority",
|
|
141
|
+
minWidth: 150,
|
|
142
|
+
searchKey: "p",
|
|
143
|
+
filterHelperText: "e.g. 123",
|
|
144
|
+
filterValidator: x,
|
|
145
|
+
FilterComponent: u
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
key: "metadata",
|
|
149
|
+
title: "Metadata",
|
|
150
|
+
CellComponent: w,
|
|
151
|
+
minWidth: 150,
|
|
152
|
+
searchKey: "md",
|
|
153
|
+
filterHelperText: "A=a, B=b",
|
|
154
|
+
FilterComponent: u
|
|
155
|
+
}
|
|
156
|
+
], ge = ({ id: e }) => e, pe = (e) => ({
|
|
157
|
+
state: e.get("s") ?? "",
|
|
158
|
+
messageChainId: e.get("mci") ?? "",
|
|
159
|
+
creationTime: e.get("ct") ?? "",
|
|
160
|
+
lastUpdatedTime: e.get("lut") ?? "",
|
|
161
|
+
failCount: e.get("fc") ?? "",
|
|
162
|
+
messageGroupId: e.get("mgi") ?? "",
|
|
163
|
+
priority: e.get("p") ?? "",
|
|
164
|
+
metadata: e.get("md") ?? ""
|
|
165
|
+
}), Ge = () => {
|
|
166
|
+
const e = v(), [a, r] = Y(), i = A();
|
|
167
|
+
return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
|
|
168
|
+
/* @__PURE__ */ t.jsxs(q, { method: "get", children: [
|
|
169
|
+
/* @__PURE__ */ t.jsx($, { sx: { height: "calc(100vh - 130px)" }, children: /* @__PURE__ */ t.jsx(
|
|
170
|
+
J,
|
|
171
|
+
{
|
|
172
|
+
columns: ue,
|
|
173
|
+
rows: i.content,
|
|
174
|
+
getRowId: ge,
|
|
175
|
+
onRowClick: (n) => e(`./${n.id}`, { relative: "path" }),
|
|
176
|
+
defaultFilter: pe(a)
|
|
177
|
+
}
|
|
178
|
+
) }),
|
|
179
|
+
/* @__PURE__ */ t.jsx("input", { type: "submit", hidden: !0 })
|
|
180
|
+
] }),
|
|
181
|
+
/* @__PURE__ */ t.jsx(
|
|
182
|
+
X,
|
|
183
|
+
{
|
|
184
|
+
page: i.number,
|
|
185
|
+
rowsPerPage: i.size,
|
|
186
|
+
total: i.totalElements,
|
|
187
|
+
onPageChange: (n) => {
|
|
188
|
+
r(Q(a, n));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
] });
|
|
193
|
+
}, fe = {
|
|
194
|
+
ct: C,
|
|
195
|
+
lut: C,
|
|
196
|
+
fc: B
|
|
197
|
+
}, he = (e, a) => {
|
|
198
|
+
const r = te(), i = new URLSearchParams();
|
|
199
|
+
k(e, fe).forEach((o, g) => i.append(g, o));
|
|
200
|
+
const n = i.toString() ? `?${i.toString()}` : "";
|
|
201
|
+
return r.get(`message${n}`);
|
|
202
|
+
}, D = ae("messages/fetchMessages", async (e, a) => {
|
|
203
|
+
const r = await he(e);
|
|
204
|
+
return r.status !== 200 ? a.rejectWithValue({
|
|
205
|
+
message: "Failed to fetch messages."
|
|
206
|
+
}) : r.data;
|
|
207
|
+
}), ye = {
|
|
208
|
+
messages: [],
|
|
209
|
+
messageTotalCount: 0,
|
|
210
|
+
status: "loading",
|
|
211
|
+
filters: {
|
|
212
|
+
page: "0",
|
|
213
|
+
size: "100"
|
|
214
|
+
}
|
|
215
|
+
}, xe = re({
|
|
216
|
+
name: "message",
|
|
217
|
+
initialState: ye,
|
|
218
|
+
reducers: {
|
|
219
|
+
updateMessages(e, { payload: a }) {
|
|
220
|
+
e.messages = a;
|
|
221
|
+
},
|
|
222
|
+
updateFilters(e, { payload: a }) {
|
|
223
|
+
e.filters = { ...e.filters, ...a };
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
extraReducers: (e) => {
|
|
227
|
+
e.addCase(D.pending, (a) => {
|
|
228
|
+
a.status = "loading", a.error = "undefined";
|
|
229
|
+
}), e.addCase(D.fulfilled, (a, { payload: r }) => {
|
|
230
|
+
a.messages = r.content, a.messageTotalCount = r.totalElements, a.status = "succeeded";
|
|
231
|
+
}), e.addCase(D.rejected, (a, { payload: r }) => {
|
|
232
|
+
r && (a.error = r.message), a.status = "failed";
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}), { updateMessages: $e, updateFilters: Re } = xe.actions, l = ({ label: e, value: a, isFull: r }) => t.jsx(f, { item: !0, xs: 12, sm: r ? 12 : 6, md: r ? 12 : 3, children: t.jsx(j, { label: e, value: a, InputProps: {
|
|
236
|
+
readOnly: !0
|
|
237
|
+
}, InputLabelProps: {
|
|
238
|
+
style: { fontSize: 20 }
|
|
239
|
+
}, multiline: !0, fullWidth: !0 }) }), be = ({ message: e, backAction: a }) => t.jsxs(t.Fragment, { children: [t.jsx(R, { variant: "contained", startIcon: t.jsx(W, {}), onClick: () => a(), sx: {
|
|
240
|
+
backgroundColor: "secondary.main",
|
|
241
|
+
marginBottom: 0.5,
|
|
242
|
+
width: 200
|
|
243
|
+
}, children: "Back" }), e ? t.jsxs(f, { container: !0, direction: "row", justifyContent: "center", spacing: 2, children: [t.jsx(f, { item: !0, xs: 12, children: t.jsx("h1", { children: "Message Details" }) }), t.jsx(l, { label: "State", value: e.state }), t.jsx(l, { label: "MessageChain ID", value: e.messageChainId }), t.jsx(l, { label: "Creation time", value: y(e.creationTime) }), t.jsx(l, { label: "Last updated time", value: y(e.lastUpdatedTime) }), t.jsx(l, { label: "Fail count", value: e.failCount }), t.jsx(l, { label: "MessageGroup Id", value: e.messageGroupId }), t.jsx(l, { label: "Priority", value: e.priority }), t.jsx(l, { label: "Message target config", value: e.messageTargetConfig.messageType }), t.jsx(l, { label: "Target system", value: e.targetSystem }), t.jsx(l, { label: "Message type", value: e.messageType }), t.jsx(l, { label: "Target Uri", value: e.targetUri, isFull: !0 }), t.jsx(l, { label: "Metadata", value: Object.entries(e.metadata).map(([r, i]) => `${r} = ${i}`).join(`
|
|
244
|
+
`), isFull: !0 })] }) : t.jsx("p", { children: "No message data found" })] });
|
|
245
|
+
var m;
|
|
246
|
+
(function(e) {
|
|
247
|
+
e.DELAYED = "DELAYED", e.PENDING = "PENDING", e.SENDING = "SENDING", e.SENT = "SENT", e.FAILED = "FAILED", e.DISABLED = "DISABLED";
|
|
248
|
+
})(m || (m = {}));
|
|
249
|
+
var N;
|
|
250
|
+
(function(e) {
|
|
251
|
+
e.ENABLED = "ENABLED", e.LOG_ONLY = "LOG_ONLY", e.PAUSED = "PAUSED", e.DISABLED = "DISABLED";
|
|
252
|
+
})(N || (N = {}));
|
|
253
|
+
const De = "null", je = "!null";
|
|
254
|
+
function Ee(e) {
|
|
255
|
+
return typeof e == "string";
|
|
256
|
+
}
|
|
257
|
+
const Te = ({ filterValue: e, validationError: a, setFilterValue: r, enumValues: i }) => {
|
|
258
|
+
const n = [
|
|
259
|
+
{ label: "None", value: De },
|
|
260
|
+
{ label: "Any", value: je },
|
|
261
|
+
...i
|
|
262
|
+
], o = (s) => n.find((p) => p.value === s || p.label === s)?.label, g = (s) => {
|
|
263
|
+
const d = n.find((p) => p.label === s);
|
|
264
|
+
return d?.value ?? d?.label;
|
|
265
|
+
}, c = (s) => {
|
|
266
|
+
const { target: { value: d } } = s;
|
|
267
|
+
if (Ee(d)) {
|
|
268
|
+
r(d);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const p = d.map(g).filter(Boolean);
|
|
272
|
+
r(p.join(",") || "");
|
|
273
|
+
}, h = e?.split(",")?.map((s) => o(s) ?? "") ?? [];
|
|
274
|
+
return t.jsx(t.Fragment, { children: t.jsxs(K, { sx: { width: 300 }, children: [t.jsx(U, { size: "small", labelId: "demo-multiple-checkbox-label", id: "demo-multiple-checkbox", multiple: !0, value: h, onChange: c, renderValue: (s) => s.join(", "), error: !!a, children: n.map((s) => t.jsxs(z, { value: s.label, children: [t.jsx(_, { checked: h.find((d) => d === s.label) !== void 0 }), s.label] }, s.label)) }), a && t.jsx(O, { children: a })] }) });
|
|
275
|
+
}, Ce = (e) => (a) => t.jsx(Te, { enumValues: e, ...a });
|
|
276
|
+
Ce([
|
|
277
|
+
{ label: m.DELAYED },
|
|
278
|
+
{ label: m.PENDING },
|
|
279
|
+
{ label: m.SENDING },
|
|
280
|
+
{ label: m.SENT },
|
|
281
|
+
{ label: m.FAILED },
|
|
282
|
+
{ label: m.DISABLED }
|
|
283
|
+
]);
|
|
284
|
+
const Ke = () => {
|
|
285
|
+
const e = A(), a = v(), r = () => {
|
|
286
|
+
a(-1);
|
|
287
|
+
}, i = (n, o) => {
|
|
288
|
+
};
|
|
289
|
+
return e ? /* @__PURE__ */ t.jsx(
|
|
290
|
+
be,
|
|
291
|
+
{
|
|
292
|
+
message: e,
|
|
293
|
+
backAction: r,
|
|
294
|
+
downloadDataAction: i
|
|
295
|
+
}
|
|
296
|
+
) : /* @__PURE__ */ t.jsx("div", { children: "Loading..." });
|
|
297
|
+
};
|
|
298
|
+
export {
|
|
299
|
+
Ge as M,
|
|
300
|
+
Ke as S,
|
|
301
|
+
le as a,
|
|
302
|
+
Be as b,
|
|
303
|
+
oe as f,
|
|
304
|
+
We as g
|
|
305
|
+
};
|
|
306
|
+
//# sourceMappingURL=SingleMessageRoute-fC94BR1C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleMessageRoute-fC94BR1C.js","sources":["../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/utils/validation.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/components/DateTimeRangeFilterField.js","../src/routes/message-sending/api.ts","../src/routes/message-sending/loader.ts","../src/components/filter/createEnumSelectFilter.tsx","../src/routes/message-sending/types.ts","../src/routes/message-sending/messageSendingColumns.tsx","../src/routes/message-sending/MessageSendingRoute.tsx","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/utils/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/actions/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/slices/messageSlice.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/components/MessageComponent.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/types/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/types/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/common/components/EnumSelectFilterField.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/crud/filterUtils.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/messages/components/messageListColumnDefinitions.js","../src/routes/message-sending/SingleMessageRoute.tsx"],"sourcesContent":["import parser from 'cron-parser';\nexport const numberValidator = (value) => !/^\\d*$/.test(value) ? 'Value must be numeric!' : undefined;\nexport const booleanValidator = (value) => !/^(true|false)$/.test(value) ? 'Value must be true or false!' : undefined;\nexport const numberRangeValidator = (value) => !/^[0-9]*\\s*-{0,1}\\s*[0-9]*$/.test(value) ? 'Value must be numeric or a range!' : undefined;\nexport const datetimeRangeValidator = (value) => !/^(\\d{4}-\\d{2}-\\d{2}((\\s|T)\\d{2}:\\d{2}:\\d{2})?){0,1}\\s*-{0,1}\\s*(\\d{4}-\\d{2}-\\d{2}((\\s|T)\\d{2}:\\d{2}:\\d{2})?){0,1}$/.test(value)\n ? 'Value must be a date(time) or range!'\n : undefined;\n/**\n * Cron expression valditor: checks it the cron expression is valid.\n * Supports seconds field if allowSeconds is true. Does not support years field.\n *\n * @param value Cron expression\n * @param options Options for the parser\n * @returns error string if the cron expression is invalid, otherwise undefined\n */\nexport const cronExpressionValidator = (value, options = {}) => {\n try {\n const parserDefaults = { utc: true };\n const parserOptions = { ...parserDefaults, ...options };\n const fieldCount = value\n .trim()\n .split(/\\s/)\n .filter((el) => el !== '').length;\n if (fieldCount === 6 && !parserOptions.allowSeconds && !parserOptions.requireSeconds) {\n return 'Seconds field is not allowed!';\n }\n if (fieldCount === 5 && parserOptions.requireSeconds) {\n return 'Seconds field is required!';\n }\n if (fieldCount < 5 || fieldCount > 6) {\n return 'Invalid number of fields, expected 5 or 6!';\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const interval = parser.parseExpression(value, parserOptions);\n }\n catch (e) {\n const errorMessage = e instanceof Error ? e.message : '';\n return 'Invalid cron expression: ' + errorMessage;\n }\n return undefined;\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useEffect } from 'react';\nimport { Grid, IconButton, InputAdornment, TextField } from '@mui/material';\nimport Backspace from '@mui/icons-material/Backspace';\nconst DateTimeRangeFilterField = ({ filterValue, validationError, setFilterValue, }) => {\n const [initialStartDateTime, initialEndDateTime] = filterValue?.split('-') || '';\n const [startDateTime, setStartDateTime] = React.useState(initialStartDateTime);\n const [endDateTime, setEndDateTime] = React.useState(initialEndDateTime);\n useEffect(() => {\n const value = `${startDateTime || ''}${endDateTime || startDateTime ? '-' : ''}${endDateTime || ''}`;\n setFilterValue(value);\n }, [startDateTime, endDateTime]);\n return (_jsxs(Grid, { container: true, direction: \"row\", spacing: 1, children: [_jsx(Grid, { item: true, xs: 12, xl: 6, children: _jsx(TextField, { size: \"small\", error: !!validationError, helperText: validationError || 'Start', value: startDateTime || '', onChange: (event) => {\n setStartDateTime(`${event.target.value}:00`);\n }, fullWidth: true, InputProps: {\n endAdornment: startDateTime && startDateTime.length > 0 ? (_jsx(InputAdornment, { position: \"end\", children: _jsx(IconButton, { onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n setStartDateTime(undefined);\n }, size: \"small\", children: _jsx(Backspace, {}) }) })) : undefined,\n } }) }), _jsx(Grid, { item: true, xs: 12, xl: 6, children: _jsx(TextField, { size: \"small\", value: endDateTime || '', helperText: \"End\", onChange: (event) => {\n setEndDateTime(`${event.target.value}:00`);\n }, fullWidth: true, InputProps: {\n endAdornment: endDateTime && endDateTime.length > 0 ? (_jsx(InputAdornment, { position: \"end\", children: _jsx(IconButton, { onClick: (e) => {\n e.preventDefault();\n e.stopPropagation();\n setEndDateTime(undefined);\n }, size: \"small\", children: _jsx(Backspace, {}) }) })) : undefined,\n } }) })] }));\n};\nexport default DateTimeRangeFilterField;\n","import type { ApiClient } from \"../../client\";\nimport type { paths } from \"../../types/openapiTypes\";\n\n// TODO: NonNullable or not?\nexport type MessageQuery = paths[\"/message\"][\"get\"][\"parameters\"][\"query\"];\n\nexport const fetchMessages = async (query: MessageQuery, client: ApiClient) => {\n const result = await client.GET(\"/message\", {\n params: {\n query: query,\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch messages: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const fetchMessageById = async (id: number, client: ApiClient) => {\n const result = await client.GET(\"/message/{id}\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch message by id: ${result.response.status}`);\n }\n\n return result.data;\n};\n","import { filterFromUrlSearchParams } from \"@evolver-fi/evolver-basics\";\nimport type { MessageFilter } from \"@evolver-fi/evolver-basics/messages\";\nimport type { LoaderFunctionArgs } from \"react-router\";\nimport { mapMetadata } from \"../../components/metadata/utils\";\nimport type { MessageQuery } from \"./api\";\nimport { fetchMessageById, fetchMessages } from \"./api\";\nimport type { ApiClient } from \"../../client\";\n\nexport const getSingleMessageLoader =\n (client: ApiClient) =>\n async ({ params }: LoaderFunctionArgs) => {\n try {\n if (!params.id) {\n throw new Error(\"No message id provided\"); // shouldn't route here without an id\n }\n const id = Number.parseInt(params.id, 10);\n\n if (Number.isNaN(id)) {\n throw new Error(\"Invalid message id provided\");\n }\n\n return await fetchMessageById(id, client);\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const getMessageListLoader =\n (client: ApiClient) =>\n async ({ request }: LoaderFunctionArgs) => {\n try {\n const requestUrl = new URL(request.url);\n const query = filterFromUrlSearchParams<MessageFilter>(\n requestUrl.searchParams,\n [\"s\", \"mci\", \"ct\", \"lut\", \"fc\", \"mgi\", \"p\", \"md\", \"page\", \"size\"], // TODO: should sort be included?\n );\n\n const data = await fetchMessages(query as MessageQuery, client); // TODO: filterFromUrlSearchParams should use MessageQuery type\n\n return mapMetadata(data);\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n","import { EnumSelectFilter } from \"./EnumSelectFilter\";\nimport type { GenericFilterProps } from \"./types\";\n\nexport const createEnumSelectFilter = (enumValues: { label: string; value: string }[]) => {\n return (props: GenericFilterProps<string>) => (\n <EnumSelectFilter {...props} enumValues={enumValues} />\n );\n};\n","import type { PagedResponse } from \"../../common/types\";\nimport { exhaustiveStringValues } from \"../../common/exhaustiveValues\";\nimport type { components } from \"../../types/openapiTypes\";\n\nexport type MessageStatus = NonNullable<components[\"schemas\"][\"MessageLite\"][\"state\"]>;\n\nexport const messageStatuses = exhaustiveStringValues<MessageStatus>()([\n \"DELAYED\",\n \"PENDING\",\n \"SENDING\",\n \"SENT\",\n \"FAILED\",\n \"DISABLED\",\n]);\n\nexport type MessageData = {\n creationTime: string;\n failCount: number;\n id: number;\n lastUpdatedTime: string;\n messageChainId: number;\n messageGroupId: string;\n messageTargetConfig: MessageTargetConfig;\n messageType: string;\n metadata: Record<string, string>;\n priority: number;\n state: MessageStatus;\n targetSystem: string;\n targetUri: string;\n};\n\nexport type MessageTargetConfigStatus = NonNullable<\n components[\"schemas\"][\"MessageTargetConfig\"][\"state\"]\n>;\n\nexport type MessageTargetConfig = {\n filters: string | null;\n id: number;\n messageType: string;\n properties: Record<string, string>;\n retryDelayMs: number;\n retryLimit: number;\n state: MessageTargetConfigStatus;\n targetSystem: string;\n throttling: string | null;\n uri: string;\n};\n\nexport type MessageFilter = {\n state: string;\n messageChainId: string;\n creationTime: string;\n lastUpdatedTime: string;\n failCount: string;\n messageGroupId: string;\n priority: string;\n metadata: string;\n};\n\nexport type MessageResponse = PagedResponse<MessageData>;\n","import { formatDateTime } from \"../../common/format\";\nimport {\n datetimeRangeValidator,\n numberRangeValidator,\n numberValidator,\n} from \"../../common/validation\";\nimport { createEnumSelectFilter } from \"../../components/filter/createEnumSelectFilter\";\nimport { TextFilter } from \"../../components/filter/TextFilter\";\nimport { TableMetadataDisplay } from \"../../components/metadata/TableMetadataDisplay\";\nimport type { ColumnDefinitions } from \"../../components/table/types\";\nimport { messageStatuses, type MessageData, type MessageFilter } from \"./types\";\n\nconst messageStatusFilterOptions = messageStatuses.map((status) => ({\n label: status,\n value: status,\n}));\n\nexport const messageSendingColumns: ColumnDefinitions<MessageData, MessageFilter> = [\n {\n key: \"creationTime\",\n title: \"Creation time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"ct\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"lastUpdatedTime\",\n title: \"Last updated time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"lut\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"state\",\n title: \"State\",\n minWidth: 130,\n searchKey: \"s\",\n filterHelperText: \"e.g. SENT\",\n FilterComponent: createEnumSelectFilter(messageStatusFilterOptions),\n },\n {\n key: \"messageChainId\",\n title: \"Message Chain ID\",\n minWidth: 150,\n searchKey: \"mci\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"messageGroupId\",\n title: \"Message Group ID\",\n minWidth: 150,\n searchKey: \"mgi\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"failCount\",\n title: \"Fail count\",\n minWidth: 150,\n searchKey: \"fc\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"priority\",\n title: \"Priority\",\n minWidth: 150,\n searchKey: \"p\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"metadata\",\n title: \"Metadata\",\n CellComponent: TableMetadataDisplay,\n minWidth: 150,\n searchKey: \"md\",\n filterHelperText: \"A=a, B=b\",\n FilterComponent: TextFilter,\n },\n];\n","import { TableContainer } from \"@mui/material\";\nimport { Form, useLoaderData, useNavigate, useSearchParams } from \"react-router\";\nimport { getSearchParamsWithPage } from \"../../common/pagination\";\nimport { Pagination } from \"../../components/table/Pagination\";\nimport { Table } from \"../../components/table/Table\";\nimport { messageSendingColumns } from \"./messageSendingColumns\";\nimport type { MessageFilter, MessageResponse } from \"./types\";\n\nconst getRowId = ({ id }: { id: number }) => id;\n\nconst searchParamsToFilter = (params: URLSearchParams): MessageFilter => ({\n state: params.get(\"s\") ?? \"\",\n messageChainId: params.get(\"mci\") ?? \"\",\n creationTime: params.get(\"ct\") ?? \"\",\n lastUpdatedTime: params.get(\"lut\") ?? \"\",\n failCount: params.get(\"fc\") ?? \"\",\n messageGroupId: params.get(\"mgi\") ?? \"\",\n priority: params.get(\"p\") ?? \"\",\n metadata: params.get(\"md\") ?? \"\",\n});\n\nconst MessageSendingRoute = () => {\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const messageResponse = useLoaderData() as MessageResponse;\n\n return (\n <>\n <Form method=\"get\">\n <TableContainer sx={{ height: \"calc(100vh - 130px)\" }}>\n <Table\n columns={messageSendingColumns}\n rows={messageResponse.content}\n getRowId={getRowId}\n onRowClick={(row) => navigate(`./${row.id}`, { relative: \"path\" })}\n defaultFilter={searchParamsToFilter(searchParams)}\n />\n </TableContainer>\n <input type=\"submit\" hidden />\n </Form>\n <Pagination\n page={messageResponse.number}\n rowsPerPage={messageResponse.size}\n total={messageResponse.totalElements}\n onPageChange={(page) => {\n setSearchParams(getSearchParamsWithPage(searchParams, page));\n }}\n />\n </>\n );\n};\n\nexport default MessageSendingRoute;\n","import { formatDatetimeRangeFilter, formatNumberRangeFilter, } from '../../common/components/listUtils';\nimport { getBackendClient } from '../../common/evolverClient';\nimport { createFilterQuery } from '../../common/utils/filterUtils';\nexport const formatterByKey = {\n ct: formatDatetimeRangeFilter,\n lut: formatDatetimeRangeFilter,\n fc: formatNumberRangeFilter,\n};\nexport const fetchMessages = (filters, backendClient) => {\n const client = backendClient || getBackendClient();\n const searchParams = new URLSearchParams();\n createFilterQuery(filters, formatterByKey).forEach((value, key) => searchParams.append(key, value));\n const searchParamsString = searchParams.toString() ? `?${searchParams.toString()}` : '';\n return client.get(`message${searchParamsString}`);\n};\nexport const fetchMessageById = (id, backendClient) => {\n const client = backendClient || getBackendClient();\n return client.get(`message/${id}`);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchMessages } from '../utils';\nexport const fetchMessagesAction = createAsyncThunk('messages/fetchMessages', async (filters, thunkApi) => {\n const response = await fetchMessages(filters);\n if (response.status !== 200) {\n return thunkApi.rejectWithValue({\n message: 'Failed to fetch messages.',\n });\n }\n return response.data;\n});\n","import { createSlice } from '@reduxjs/toolkit';\nimport { fetchMessagesAction } from '../actions';\nconst initialState = {\n messages: [],\n messageTotalCount: 0,\n status: 'loading',\n filters: {\n page: '0',\n size: '100',\n },\n};\nexport const messageSlice = createSlice({\n name: 'message',\n initialState,\n reducers: {\n updateMessages(state, { payload }) {\n state.messages = payload;\n },\n updateFilters(state, { payload }) {\n state.filters = { ...state.filters, ...payload };\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchMessagesAction.pending, (state) => {\n state.status = 'loading';\n state.error = 'undefined';\n });\n builder.addCase(fetchMessagesAction.fulfilled, (state, { payload }) => {\n state.messages = payload.content;\n state.messageTotalCount = payload.totalElements;\n state.status = 'succeeded';\n });\n builder.addCase(fetchMessagesAction.rejected, (state, { payload }) => {\n if (payload) {\n state.error = payload.message;\n }\n state.status = 'failed';\n });\n },\n});\nexport const { updateMessages, updateFilters } = messageSlice.actions;\nexport const selectMessages = (state) => state.messages.messages;\nexport const selectMessageTotalCount = (state) => state.messages.messageTotalCount;\nexport const selectFilters = (state) => state.messages.filters;\nexport const selectStatus = (state) => state.messages.status;\nexport default messageSlice.reducer;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Button, Grid, TextField } from '@mui/material';\nimport { formatDateTime } from '../../common/components/listUtils';\nconst MessageField = ({ label, value, isFull }) => (_jsx(Grid, { item: true, xs: 12, sm: isFull ? 12 : 6, md: isFull ? 12 : 3, children: _jsx(TextField, { label: label, value: value, InputProps: {\n readOnly: true,\n }, InputLabelProps: {\n style: { fontSize: 20 },\n }, multiline: true, fullWidth: true }) }));\nconst MessageComponent = ({ message, backAction, }) => {\n return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: \"contained\", startIcon: _jsx(ArrowBackIcon, {}), onClick: () => backAction(), sx: {\n backgroundColor: 'secondary.main',\n marginBottom: 0.5,\n width: 200,\n }, children: \"Back\" }), message ? (_jsxs(Grid, { container: true, direction: \"row\", justifyContent: \"center\", spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, children: _jsx(\"h1\", { children: \"Message Details\" }) }), _jsx(MessageField, { label: \"State\", value: message.state }), _jsx(MessageField, { label: \"MessageChain ID\", value: message.messageChainId }), _jsx(MessageField, { label: \"Creation time\", value: formatDateTime(message.creationTime) }), _jsx(MessageField, { label: \"Last updated time\", value: formatDateTime(message.lastUpdatedTime) }), _jsx(MessageField, { label: \"Fail count\", value: message.failCount }), _jsx(MessageField, { label: \"MessageGroup Id\", value: message.messageGroupId }), _jsx(MessageField, { label: \"Priority\", value: message.priority }), _jsx(MessageField, { label: \"Message target config\", value: message.messageTargetConfig.messageType }), _jsx(MessageField, { label: \"Target system\", value: message.targetSystem }), _jsx(MessageField, { label: \"Message type\", value: message.messageType }), _jsx(MessageField, { label: \"Target Uri\", value: message.targetUri, isFull: true }), _jsx(MessageField, { label: \"Metadata\", value: Object.entries(message.metadata)\n .map(([key, value]) => `${key} = ${value}`)\n .join('\\n'), isFull: true })] })) : (_jsx(\"p\", { children: \"No message data found\" }))] }));\n};\nexport default MessageComponent;\n","export var MessageStatus;\n(function (MessageStatus) {\n MessageStatus[\"DELAYED\"] = \"DELAYED\";\n MessageStatus[\"PENDING\"] = \"PENDING\";\n MessageStatus[\"SENDING\"] = \"SENDING\";\n MessageStatus[\"SENT\"] = \"SENT\";\n MessageStatus[\"FAILED\"] = \"FAILED\";\n MessageStatus[\"DISABLED\"] = \"DISABLED\";\n})(MessageStatus || (MessageStatus = {}));\nexport var MessageTargetConfigStatus;\n(function (MessageTargetConfigStatus) {\n MessageTargetConfigStatus[\"ENABLED\"] = \"ENABLED\";\n MessageTargetConfigStatus[\"LOG_ONLY\"] = \"LOG_ONLY\";\n MessageTargetConfigStatus[\"PAUSED\"] = \"PAUSED\";\n MessageTargetConfigStatus[\"DISABLED\"] = \"DISABLED\";\n})(MessageTargetConfigStatus || (MessageTargetConfigStatus = {}));\n","export const NULL_VALUE = 'null';\nexport const NOT_NULL_VALUE = '!null';\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Checkbox, FormControl, FormHelperText, MenuItem, Select, } from '@mui/material';\nimport { NOT_NULL_VALUE, NULL_VALUE } from '../types';\nfunction isString(data) {\n return typeof data === 'string';\n}\nconst EnumSelectFilterField = ({ filterValue, validationError, setFilterValue, enumValues, }) => {\n const selectValues = [\n { label: 'None', value: NULL_VALUE },\n { label: 'Any', value: NOT_NULL_VALUE },\n ...enumValues,\n ];\n const findLabelByValue = (value) => {\n const entry = selectValues.find((sv) => sv.value === value || sv.label === value);\n return entry?.label;\n };\n const findValueByLabel = (label) => {\n const entry = selectValues.find((sv) => sv.label === label);\n return entry?.value ?? entry?.label;\n };\n const handleChange = (event) => {\n const { target: { value }, } = event;\n if (isString(value)) {\n setFilterValue(value);\n return;\n }\n const newValue = value.map(findValueByLabel).filter(Boolean);\n setFilterValue(newValue.join(',') || '');\n };\n const formattedFilterValue = filterValue?.split(',')?.map((v) => findLabelByValue(v) ?? '') ?? [];\n return (_jsx(_Fragment, { children: _jsxs(FormControl, { sx: { width: 300 }, children: [_jsx(Select, { size: \"small\", labelId: \"demo-multiple-checkbox-label\", id: \"demo-multiple-checkbox\", multiple: true, value: formattedFilterValue, onChange: handleChange, renderValue: (selected) => selected.join(', '), error: !!validationError, children: selectValues.map((flow) => (_jsxs(MenuItem, { value: flow.label, children: [_jsx(Checkbox, { checked: formattedFilterValue.find((sv) => sv === flow.label) !== undefined }), flow.label] }, flow.label))) }), validationError && _jsx(FormHelperText, { children: validationError })] }) }));\n};\nexport default EnumSelectFilterField;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport EnumSelectFilterField from '../common/components/EnumSelectFilterField';\nexport const createEnumSelectFilter = (field) => {\n if (field.type === 'enum') {\n const selectValues = field.enumValues.map((v) => ({\n label: v,\n }));\n return createSelectFilterRenderer(selectValues);\n }\n return undefined;\n};\nexport const createSelectFilterRenderer = (enumValues) => {\n // eslint-disable-next-line react/display-name\n return (props) => (_jsx(EnumSelectFilterField, { enumValues: enumValues, ...props }));\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { MessageStatus } from '../types';\nimport { formatDateTime, formatMetadata } from '../../common/components/listUtils';\nimport { datetimeRangeValidator, numberRangeValidator, numberValidator, } from '../../common/utils/validation';\nimport DateTimeRangeFilterField from '../../common/components/DateTimeRangeFilterField';\nimport { createSelectFilterRenderer } from '../../crud/filterUtils';\nconst definition = [\n {\n id: 'creationTime',\n label: 'Creation time',\n renderValue: (value) => formatDateTime(value),\n minWidth: 250,\n filterKey: 'ct',\n filterHelper: 'yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss',\n filterValidator: datetimeRangeValidator,\n renderFilter: (props) => _jsx(DateTimeRangeFilterField, { ...props }),\n },\n {\n id: 'lastUpdatedTime',\n label: 'Last updated time',\n renderValue: (value) => formatDateTime(value),\n minWidth: 250,\n filterKey: 'lut',\n filterHelper: 'yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss',\n filterValidator: datetimeRangeValidator,\n },\n {\n id: 'state',\n label: 'State',\n minWidth: 100,\n filterKey: 's',\n filterHelper: 'e.g. SENT',\n renderFilter: createSelectFilterRenderer([\n { label: MessageStatus.DELAYED },\n { label: MessageStatus.PENDING },\n { label: MessageStatus.SENDING },\n { label: MessageStatus.SENT },\n { label: MessageStatus.FAILED },\n { label: MessageStatus.DISABLED },\n ]),\n },\n {\n id: 'messageChainId',\n label: 'Message Chain ID',\n minWidth: 150,\n filterKey: 'mci',\n filterHelper: 'e.g. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'messageGroupId',\n label: 'Message Group ID',\n minWidth: 150,\n filterKey: 'mgi',\n filterHelper: 'e.g. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'failCount',\n label: 'Fail count',\n minWidth: 150,\n filterKey: 'fc',\n filterHelper: 'number - ?number',\n filterValidator: numberRangeValidator,\n },\n {\n id: 'priority',\n label: 'Priority',\n minWidth: 150,\n filterKey: 'p',\n filterHelper: 'eg. 123',\n filterValidator: numberValidator,\n },\n {\n id: 'metadata',\n label: 'Metadata',\n renderValue: (value) => formatMetadata(value),\n minWidth: 150,\n filterKey: 'md',\n filterHelper: 'A=a, B=b',\n },\n];\nexport default definition;\n","import type { Message } from \"@evolver-fi/evolver-basics/messages\";\nimport { MessageComponent } from \"@evolver-fi/evolver-basics/messages\";\nimport { useLoaderData, useNavigate } from \"react-router\";\n\nconst SingleMessageRoute = () => {\n const message = useLoaderData() as Message; //TODO: cast to <typeof [loader]> later\n\n const navigate = useNavigate();\n\n const handleBackAction = () => {\n navigate(-1);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const handleDownloadDataAction = (_id: number, _type: string) => {\n // download data from /messages/:id/download\n // TODO: download not implemented in the component library\n };\n\n if (!message) {\n return <div>Loading...</div>; // TODO: handle 404, maybe in the loader?\n }\n\n // TODO: insert some messages into the backend and actually test this\n return (\n <MessageComponent\n message={message}\n backAction={handleBackAction}\n downloadDataAction={handleDownloadDataAction}\n />\n );\n};\n\nexport default SingleMessageRoute;\n"],"names":["numberValidator","value","numberRangeValidator","datetimeRangeValidator","DateTimeRangeFilterField","filterValue","validationError","setFilterValue","initialStartDateTime","initialEndDateTime","startDateTime","setStartDateTime","React","endDateTime","setEndDateTime","useEffect","_jsxs","Grid","_jsx","TextField","event","InputAdornment","IconButton","e","Backspace","fetchMessages","query","client","result","fetchMessageById","id","getSingleMessageLoader","params","error","getMessageListLoader","request","requestUrl","filterFromUrlSearchParams","data","mapMetadata","createEnumSelectFilter","enumValues","props","jsx","EnumSelectFilter","messageStatuses","exhaustiveStringValues","messageStatusFilterOptions","status","messageSendingColumns","formatDateTime","TextFilter","TableMetadataDisplay","getRowId","searchParamsToFilter","MessageSendingRoute","navigate","useNavigate","searchParams","setSearchParams","useSearchParams","messageResponse","useLoaderData","jsxs","Fragment","Form","TableContainer","Table","row","Pagination","page","getSearchParamsWithPage","formatterByKey","formatDatetimeRangeFilter","formatNumberRangeFilter","filters","backendClient","getBackendClient","createFilterQuery","key","searchParamsString","fetchMessagesAction","createAsyncThunk","thunkApi","response","initialState","messageSlice","createSlice","state","payload","builder","updateMessages","updateFilters","MessageField","label","isFull","MessageComponent","message","backAction","_Fragment","Button","ArrowBackIcon","MessageStatus","MessageTargetConfigStatus","NULL_VALUE","NOT_NULL_VALUE","isString","EnumSelectFilterField","selectValues","findLabelByValue","sv","findValueByLabel","entry","handleChange","newValue","formattedFilterValue","v","FormControl","Select","selected","flow","MenuItem","Checkbox","FormHelperText","createSelectFilterRenderer","SingleMessageRoute","handleBackAction","handleDownloadDataAction","_id","_type"],"mappings":"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","x_google_ignoreList":[0,1,8,9,10,11,12,13,14,15,16]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { j as r } from "./jsx-runtime-D858t2LC.js";
|
|
2
|
+
import { TablePagination as j, TableHead as b, TableRow as x, TableCell as c, TableBody as u, Table as T } from "@mui/material";
|
|
3
|
+
import { memo as l, useMemo as v } from "react";
|
|
4
|
+
const z = ({
|
|
5
|
+
page: t,
|
|
6
|
+
rowsPerPage: i,
|
|
7
|
+
total: s,
|
|
8
|
+
onPageChange: a
|
|
9
|
+
}) => /* @__PURE__ */ r.jsx(
|
|
10
|
+
j,
|
|
11
|
+
{
|
|
12
|
+
component: "div",
|
|
13
|
+
count: s,
|
|
14
|
+
page: t,
|
|
15
|
+
rowsPerPage: i,
|
|
16
|
+
onPageChange: (e, o) => a(o),
|
|
17
|
+
rowsPerPageOptions: [],
|
|
18
|
+
showFirstButton: !0,
|
|
19
|
+
showLastButton: !0
|
|
20
|
+
}
|
|
21
|
+
), S = ({
|
|
22
|
+
columns: t,
|
|
23
|
+
filter: i,
|
|
24
|
+
defaultFilter: s,
|
|
25
|
+
onFilterChange: a
|
|
26
|
+
}) => {
|
|
27
|
+
const e = v(() => t.some((o) => !!o.FilterComponent), [t]);
|
|
28
|
+
return /* @__PURE__ */ r.jsxs(
|
|
29
|
+
b,
|
|
30
|
+
{
|
|
31
|
+
sx: {
|
|
32
|
+
position: "sticky",
|
|
33
|
+
top: 0,
|
|
34
|
+
zIndex: 3,
|
|
35
|
+
bgcolor: "background.paper",
|
|
36
|
+
borderBottom: "1px solid",
|
|
37
|
+
borderColor: "divider"
|
|
38
|
+
},
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ r.jsx(x, { children: t.map(({ key: o, title: n, minWidth: d }) => /* @__PURE__ */ r.jsx(
|
|
41
|
+
c,
|
|
42
|
+
{
|
|
43
|
+
sx: {
|
|
44
|
+
bgcolor: "primary.main",
|
|
45
|
+
color: "common.white",
|
|
46
|
+
minWidth: d
|
|
47
|
+
},
|
|
48
|
+
children: n
|
|
49
|
+
},
|
|
50
|
+
String(o)
|
|
51
|
+
)) }),
|
|
52
|
+
e && /* @__PURE__ */ r.jsx(x, { children: t.map(({ key: o, searchKey: n, FilterComponent: d, filterHelperText: p, filterValidator: g }) => /* @__PURE__ */ r.jsx(c, { sx: { verticalAlign: "top" }, children: d && /* @__PURE__ */ r.jsx(
|
|
53
|
+
d,
|
|
54
|
+
{
|
|
55
|
+
name: n ?? String(o),
|
|
56
|
+
value: i?.[o],
|
|
57
|
+
defaultValue: s?.[o],
|
|
58
|
+
filter: i ?? s,
|
|
59
|
+
helperText: p,
|
|
60
|
+
validator: g,
|
|
61
|
+
onChange: a ? (m, h) => a({
|
|
62
|
+
...i ?? s,
|
|
63
|
+
...h ?? {},
|
|
64
|
+
[o]: m
|
|
65
|
+
}) : void 0
|
|
66
|
+
},
|
|
67
|
+
s ? `${String(o)}-${s[o]}` : void 0
|
|
68
|
+
) }, `filter-${String(o)}`)) })
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}, B = l(S), P = ({
|
|
73
|
+
rows: t,
|
|
74
|
+
getRowId: i,
|
|
75
|
+
onRowClick: s,
|
|
76
|
+
columns: a
|
|
77
|
+
}) => /* @__PURE__ */ r.jsx(
|
|
78
|
+
u,
|
|
79
|
+
{
|
|
80
|
+
sx: {
|
|
81
|
+
" & .MuiTableRow-root:nth-of-type(odd)": {
|
|
82
|
+
bgcolor: "grey.100"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
children: t.map((e) => /* @__PURE__ */ r.jsx(
|
|
86
|
+
x,
|
|
87
|
+
{
|
|
88
|
+
hover: !0,
|
|
89
|
+
onClick: s ? () => s(e) : void 0,
|
|
90
|
+
sx: { cursor: s ? "pointer" : "default" },
|
|
91
|
+
children: a.map(({ CellComponent: o, key: n, searchKey: d }) => /* @__PURE__ */ r.jsx(c, { children: o ? /* @__PURE__ */ r.jsx(o, { rowKey: n, searchKey: d, row: e, value: e[n] }) : String(e[n] ?? "") }, String(n)))
|
|
92
|
+
},
|
|
93
|
+
String(i(e))
|
|
94
|
+
))
|
|
95
|
+
}
|
|
96
|
+
), $ = l(P), M = ({
|
|
97
|
+
columns: t,
|
|
98
|
+
rows: i,
|
|
99
|
+
filter: s,
|
|
100
|
+
defaultFilter: a,
|
|
101
|
+
onFilterChange: e,
|
|
102
|
+
getRowId: o,
|
|
103
|
+
onRowClick: n
|
|
104
|
+
}) => /* @__PURE__ */ r.jsxs(T, { size: "small", children: [
|
|
105
|
+
/* @__PURE__ */ r.jsx(
|
|
106
|
+
B,
|
|
107
|
+
{
|
|
108
|
+
columns: t,
|
|
109
|
+
filter: s,
|
|
110
|
+
defaultFilter: a,
|
|
111
|
+
onFilterChange: e
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
/* @__PURE__ */ r.jsx($, { rows: i, getRowId: o, onRowClick: n, columns: t })
|
|
115
|
+
] });
|
|
116
|
+
export {
|
|
117
|
+
z as P,
|
|
118
|
+
M as T
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=Table-DWiRP1za.js.map
|