@evolver-fi/evolver-basics-admin-components 0.0.21 → 8.2.2-alpha.2
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/EnumSelectFilter-DDWIjz5i.js +35 -0
- package/dist/EnumSelectFilter-DDWIjz5i.js.map +1 -0
- package/dist/FilterLink-OxQDWR5G.js +29 -0
- package/dist/FilterLink-OxQDWR5G.js.map +1 -0
- package/dist/Table-IciQttr3.js +79 -0
- package/dist/Table-IciQttr3.js.map +1 -0
- package/dist/TableMetadataDisplay-BM61EulC.js +49 -0
- package/dist/TableMetadataDisplay-BM61EulC.js.map +1 -0
- package/dist/TextFilter-CLOKjiSd.js +54 -0
- package/dist/TextFilter-CLOKjiSd.js.map +1 -0
- package/dist/api-CMiZYkfc.js +32 -0
- package/dist/api-CMiZYkfc.js.map +1 -0
- package/dist/breadcrumbs/index.js +2 -5
- package/dist/breadcrumbs-BAwnKRxL.js +32 -0
- package/dist/breadcrumbs-BAwnKRxL.js.map +1 -0
- package/dist/breadcrumbs.css +1 -0
- package/dist/client/index.js +341 -0
- package/dist/client/index.js.map +1 -0
- package/dist/configuration-values/index.js +2 -0
- package/dist/configuration-values-CjOfmPRq.js +3464 -0
- package/dist/configuration-values-CjOfmPRq.js.map +1 -0
- package/dist/control-values/index.js +2 -0
- package/dist/control-values-CzQOB4WJ.js +144 -0
- package/dist/control-values-CzQOB4WJ.js.map +1 -0
- package/dist/exhaustiveValues-BYWkg9M1.js +6 -0
- package/dist/exhaustiveValues-BYWkg9M1.js.map +1 -0
- package/dist/filter/index.js +4 -11
- package/dist/formData-BO275hRZ.js +43 -0
- package/dist/formData-BO275hRZ.js.map +1 -0
- package/dist/jwt-tokens/index.js +2 -7
- package/dist/jwt-tokens-DnKsHei4.js +71 -0
- package/dist/jwt-tokens-DnKsHei4.js.map +1 -0
- package/dist/main/index.js +17 -51
- package/dist/message-log/index.js +2 -10
- package/dist/message-log-BdrJtbsP.js +337 -0
- package/dist/message-log-BdrJtbsP.js.map +1 -0
- package/dist/message-sending/index.js +2 -10
- package/dist/message-sending-dvTw2fFm.js +181 -0
- package/dist/message-sending-dvTw2fFm.js.map +1 -0
- package/dist/message-targets/index.js +2 -0
- package/dist/message-targets-8EppIJde.js +406 -0
- package/dist/message-targets-8EppIJde.js.map +1 -0
- package/dist/pagination-C4QUYRMf.js +20 -0
- package/dist/pagination-C4QUYRMf.js.map +1 -0
- package/dist/scheduled-tasks/index.js +2 -14
- package/dist/scheduled-tasks-BtBnBrE7.js +647 -0
- package/dist/scheduled-tasks-BtBnBrE7.js.map +1 -0
- package/dist/schemas-D-8_LuND.js +2986 -0
- package/dist/schemas-D-8_LuND.js.map +1 -0
- package/dist/table/index.js +2 -6
- package/dist/triggerables/index.js +3 -9
- package/dist/triggerables-DgrIeQMi.js +51 -0
- package/dist/triggerables-DgrIeQMi.js.map +1 -0
- package/dist/types/breadcrumbs.d.ts +1 -1
- package/dist/types/client/index.d.ts +5 -0
- package/dist/types/client.d.ts +2 -0
- package/dist/types/common/exhaustiveValues.d.ts +5 -0
- package/dist/types/common/formData.d.ts +20 -0
- package/dist/types/common/pagination.d.ts +8 -0
- package/dist/types/{admin-components/src/components → components}/breadcrumbs/BreadCrumbs.d.ts +1 -1
- package/dist/types/{admin-components/src/components → components}/filter/EnumSelectFilter.d.ts +0 -4
- package/dist/types/{admin-components/src/components → components}/filter/FilterHelperTexts.d.ts +1 -1
- package/dist/types/{admin-components/src/components → components}/filter/FilterLink.d.ts +1 -1
- package/dist/types/{admin-components/src/components → components}/filter/TextFilter.d.ts +1 -1
- package/dist/types/components/filter/createEnumSelectFilter.d.ts +5 -0
- package/dist/types/components/metadata/TableMetadataDisplay.d.ts +2 -0
- package/dist/types/{admin-components/src/components → components}/table/Pagination.d.ts +1 -1
- package/dist/types/{admin-components/src/components → components}/table/Table.d.ts +1 -1
- package/dist/types/configuration-values.d.ts +2 -0
- package/dist/types/control-values.d.ts +2 -0
- package/dist/types/filter.d.ts +1 -1
- package/dist/types/{admin-components/src/index.d.ts → index.d.ts} +3 -0
- package/dist/types/jwt-tokens.d.ts +1 -1
- package/dist/types/main.d.ts +1 -1
- package/dist/types/message-log.d.ts +1 -1
- package/dist/types/message-sending.d.ts +1 -1
- package/dist/types/message-targets.d.ts +2 -0
- package/dist/types/routes/configuration-values/ConfigurationValueFormRoute.d.ts +2 -0
- package/dist/types/routes/configuration-values/ConfigurationValuesRoute.d.ts +2 -0
- package/dist/types/routes/configuration-values/action.d.ts +8 -0
- package/dist/types/routes/configuration-values/api.d.ts +53 -0
- package/dist/types/routes/configuration-values/configurationValueColumns.d.ts +4 -0
- package/dist/types/routes/configuration-values/index.d.ts +5 -0
- package/dist/types/routes/configuration-values/loader.d.ts +52 -0
- package/dist/types/routes/control-values/ControlValuesRoute.d.ts +2 -0
- package/dist/types/routes/control-values/SingleControlValueRoute.d.ts +2 -0
- package/dist/types/routes/control-values/api.d.ts +43 -0
- package/dist/types/routes/control-values/controlValueColumns.d.ts +4 -0
- package/dist/types/routes/control-values/index.d.ts +4 -0
- package/dist/types/routes/control-values/loader.d.ts +43 -0
- package/dist/types/routes/jwt-tokens/JwtTokensRoute.d.ts +6 -0
- package/dist/types/routes/jwt-tokens/api.d.ts +41 -0
- package/dist/types/routes/jwt-tokens/index.d.ts +3 -0
- package/dist/types/routes/jwt-tokens/loader.d.ts +35 -0
- package/dist/types/routes/message-log/LogBodyLink.d.ts +6 -0
- package/dist/types/routes/message-log/MessageLogRoute.d.ts +2 -0
- package/dist/types/routes/message-log/SingleLogMessageRoute.d.ts +6 -0
- package/dist/types/routes/message-log/api.d.ts +88 -0
- package/dist/types/routes/message-log/index.d.ts +4 -0
- package/dist/types/routes/message-log/loader.d.ts +53 -0
- package/dist/types/routes/message-sending/MessageSendingRoute.d.ts +2 -0
- package/dist/types/routes/message-sending/SingleMessageRoute.d.ts +2 -0
- package/dist/types/routes/message-sending/api.d.ts +92 -0
- package/dist/types/routes/message-sending/index.d.ts +4 -0
- package/dist/types/routes/message-sending/loader.d.ts +34 -0
- package/dist/types/{admin-components/src/routes → routes}/message-sending/types.d.ts +4 -2
- package/dist/types/routes/message-targets/MessageTargetFormRoute.d.ts +2 -0
- package/dist/types/routes/message-targets/MessageTargetsRoute.d.ts +2 -0
- package/dist/types/routes/message-targets/action.d.ts +8 -0
- package/dist/types/routes/message-targets/api.d.ts +12 -0
- package/dist/types/routes/message-targets/index.d.ts +5 -0
- package/dist/types/routes/message-targets/loader.d.ts +15 -0
- package/dist/types/routes/scheduled-tasks/ScheduledTaskFormRoute.d.ts +2 -0
- package/dist/types/routes/scheduled-tasks/ScheduledTasksRoute.d.ts +2 -0
- package/dist/types/routes/scheduled-tasks/action.d.ts +21 -0
- package/dist/types/routes/scheduled-tasks/api.d.ts +75 -0
- package/dist/types/routes/scheduled-tasks/index.d.ts +5 -0
- package/dist/types/routes/scheduled-tasks/loader.d.ts +57 -0
- package/dist/types/routes/scheduled-tasks/parseScheduledTask.d.ts +15 -0
- package/dist/types/routes/triggerables/TriggerablesRoute.d.ts +2 -0
- package/dist/types/routes/triggerables/action.d.ts +6 -0
- package/dist/types/routes/triggerables/api.d.ts +33 -0
- package/dist/types/routes/triggerables/index.d.ts +4 -0
- package/dist/types/routes/triggerables/loader.d.ts +3 -0
- package/dist/types/scheduled-tasks.d.ts +1 -1
- package/dist/types/table.d.ts +1 -1
- package/dist/types/triggerables.d.ts +1 -1
- package/dist/types/types/openapiTypes.d.ts +3321 -0
- package/package.json +60 -29
- package/dist/BreadCrumbs-BzG2oi8Z.js +0 -19
- package/dist/BreadCrumbs-BzG2oi8Z.js.map +0 -1
- package/dist/BreadCrumbs.css +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-BT4ghiqv.js +0 -305
- package/dist/SingleLogMessageRoute-BT4ghiqv.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 +0 -3556
- package/dist/TriggerablesRoute-opCAjNCv.js.map +0 -1
- package/dist/breadcrumbs/index.js.map +0 -1
- package/dist/createSvgIcon-Cf1cru4R.js +0 -3945
- package/dist/createSvgIcon-Cf1cru4R.js.map +0 -1
- package/dist/evolverClient-B_TZXnpV.js +0 -1602
- package/dist/evolverClient-B_TZXnpV.js.map +0 -1
- package/dist/filter/index.js.map +0 -1
- package/dist/jsx-runtime-B6kdoens.js +0 -635
- package/dist/jsx-runtime-B6kdoens.js.map +0 -1
- package/dist/jwt-tokens/index.js.map +0 -1
- package/dist/main/index.js.map +0 -1
- package/dist/message-log/index.js.map +0 -1
- package/dist/message-sending/index.js.map +0 -1
- package/dist/parser-Bj3mcA83.js +0 -6096
- package/dist/parser-Bj3mcA83.js.map +0 -1
- package/dist/scheduled-tasks/index.js.map +0 -1
- package/dist/table/index.js.map +0 -1
- package/dist/triggerables/index.js.map +0 -1
- package/dist/types/admin-components/src/components/metadata/TableMetadataDisplay.d.ts +0 -2
- 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-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/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
- /package/dist/types/{admin-components/src/common → common}/format.d.ts +0 -0
- /package/dist/types/{admin-components/src/common → common}/types.d.ts +0 -0
- /package/dist/types/{admin-components/src/common → common}/validation.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/breadcrumbs/index.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/filter/index.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/filter/types.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/metadata/utils.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/table/index.d.ts +0 -0
- /package/dist/types/{admin-components/src/components → components}/table/types.d.ts +0 -0
- /package/dist/types/{admin-components/src/routes → routes}/message-log/messageLogColumns.d.ts +0 -0
- /package/dist/types/{admin-components/src/routes → routes}/message-log/types.d.ts +0 -0
- /package/dist/types/{admin-components/src/routes → routes}/message-sending/messageSendingColumns.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-tasks-BtBnBrE7.js","names":[],"sources":["../src/routes/scheduled-tasks/api.ts","../src/routes/scheduled-tasks/action.ts","../src/routes/scheduled-tasks/loader.ts","../src/routes/scheduled-tasks/parseScheduledTask.ts","../src/routes/scheduled-tasks/ScheduledTaskFormRoute.tsx","../src/routes/scheduled-tasks/ScheduledTasksRoute.tsx"],"sourcesContent":["import type { ApiClient } from \"../../client\";\nimport type { paths } from \"../../types/openapiTypes\";\n\n// TODO: NonNullable or not?\nexport type ScheduledTaskFilter = paths[\"/schedule\"][\"get\"][\"parameters\"][\"query\"];\nexport type ScheduledTask =\n paths[\"/schedule\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\ntype ScheduledTaskState =\n paths[\"/schedule/{id}/state/{state}\"][\"post\"][\"parameters\"][\"path\"][\"state\"];\n\nexport const fetchScheduledTasks = async (query: ScheduledTaskFilter, client: ApiClient) => {\n const result = await client.GET(\"/schedule\", {\n params: {\n query,\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch scheduled tasks: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const fetchScheduledTaskById = async (id: number, client: ApiClient) => {\n const result = await client.GET(\"/schedule/{id}\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch scheduled task: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const saveScheduledTask = async (task: ScheduledTask, client: ApiClient) => {\n const result = await client.POST(\"/schedule\", {\n body: task,\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to save scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const deleteScheduledTask = async (id: number, client: ApiClient) => {\n const result = await client.POST(\"/schedule/{id}/delete\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to delete scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const runScheduledTask = async (id: number, client: ApiClient) => {\n const result = await client.POST(\"/schedule/{id}/run\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to trigger scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const updateScheduledTaskState = async (\n id: number,\n state: ScheduledTaskState,\n client: ApiClient,\n) => {\n if (!state) {\n throw new Error(\"State is required to update scheduled task state\");\n }\n const result = await client.POST(\"/schedule/{id}/state/{state}\", {\n params: {\n path: { id, state },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to update scheduled task state: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n","import { redirect, type ActionFunctionArgs } from \"react-router\";\nimport type { paths } from \"../../types/openapiTypes\";\nimport type { ScheduledTask } from \"./api\";\nimport {\n deleteScheduledTask,\n runScheduledTask,\n saveScheduledTask,\n updateScheduledTaskState,\n} from \"./api\";\nimport type { ApiClient } from \"../../client\";\n\ntype FormActionType = \"save\" | \"delete\";\n\ninterface FormActionPayload {\n type: FormActionType;\n task?: ScheduledTask;\n id?: number;\n}\n\nexport type ScheduledTaskFormActionResult = {\n status: number;\n message: string;\n};\n\nexport const getScheduledTaskFormAction =\n (client: ApiClient) =>\n async ({ request }: ActionFunctionArgs): Promise<ScheduledTaskFormActionResult> => {\n try {\n const payload: FormActionPayload = await request.json();\n\n switch (payload.type) {\n case \"save\": {\n if (!payload.task) {\n return { status: 400, message: \"Task data is required\" };\n }\n\n const status = await saveScheduledTask(payload.task, client);\n\n if (status === 204) {\n const isNew = payload.task.id === undefined || payload.task.id === 0;\n if (isNew) {\n throw redirect(\"/scheduled-tasks\");\n }\n\n return {\n status: 204,\n message: \"Task updated\",\n };\n }\n\n return { status, message: \"Failed to save task\" };\n }\n\n case \"delete\": {\n if (!payload.id) {\n return { status: 400, message: \"Task ID is required\" };\n }\n\n const status = await deleteScheduledTask(payload.id, client);\n\n if (status === 204) {\n throw redirect(\"/scheduled-tasks\");\n }\n\n if (status === 404) {\n return { status: 404, message: \"Task not found\" };\n }\n\n return { status, message: \"Failed to delete task\" };\n }\n\n default:\n return { status: 400, message: \"Invalid action type\" };\n }\n } catch (error) {\n if (error instanceof Response && error.status >= 300 && error.status < 400) {\n throw error;\n }\n\n console.error(error);\n return {\n status: 500,\n message: \"Failed to process request\",\n };\n }\n };\n\nexport type ScheduledTaskFormAction = ReturnType<typeof getScheduledTaskFormAction>;\n\ntype ListActionType = \"trigger\" | \"updateState\";\n\nexport interface ListActionPayload {\n type: ListActionType;\n id?: number;\n state?: NonNullable<\n NonNullable<paths[\"/schedule/{id}/state/{state}\"][\"post\"]>[\"parameters\"]\n >[\"path\"][\"state\"];\n}\n\nexport const getScheduledTasksAction =\n (client: ApiClient) =>\n async ({ request }: ActionFunctionArgs): Promise<{ status: number; message: string }> => {\n try {\n const payload: ListActionPayload = await request.json();\n\n switch (payload.type) {\n case \"trigger\": {\n if (!payload.id) {\n return { status: 400, message: \"Task ID is required\" };\n }\n\n const status = await runScheduledTask(payload.id, client);\n\n if (status === 200 || status === 204) {\n return { status, message: \"Task triggered\" };\n }\n\n return { status, message: \"Failed to trigger task\" };\n }\n\n case \"updateState\": {\n if (!payload.id || !payload.state) {\n return {\n status: 400,\n message: \"Task ID and state are required\",\n };\n }\n\n const status = await updateScheduledTaskState(payload.id, payload.state, client);\n\n if (status === 200 || status === 204) {\n return { status, message: \"Task state updated\" };\n }\n\n return {\n status,\n message: \"Failed to update task state\",\n };\n }\n\n default:\n return { status: 400, message: \"Invalid action type\" };\n }\n } catch (error) {\n console.error(error);\n return {\n status: 500,\n message: \"Failed to process request\",\n };\n }\n };\n\nexport type ScheduledTasksAction = ReturnType<typeof getScheduledTasksAction>\n","import type { LoaderFunctionArgs } from \"react-router\";\nimport type { ScheduledTask } from \"./api\";\nimport { fetchScheduledTaskById, fetchScheduledTasks } from \"./api\";\nimport type { ApiClient } from \"../../client\";\nimport type { components } from \"../../types/openapiTypes\";\nimport { getPagingValuesFromSearchParams } from \"../../common/pagination\";\nimport { fetchTriggerables } from \"../triggerables/api\";\n\nconst getInitialScheduledTask = (): ScheduledTask => ({\n name: \"\",\n state: \"WAITING\",\n cronExpression: \"\",\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone || \"UTC\",\n triggerable: \"\",\n priority: 0,\n timeoutMs: 0,\n missPolicy: \"SKIP_ALL\",\n args: {},\n});\n\nexport type ScheduledTaskFormLoaderData = {\n task: ScheduledTask;\n triggerables: Record<string, components[\"schemas\"][\"ArgObject\"][]>;\n};\n\nexport const getSingleTaskLoader =\n (client: ApiClient) =>\n async ({ params }: LoaderFunctionArgs): Promise<ScheduledTaskFormLoaderData> => {\n const id = params.id;\n const triggerableData = await fetchTriggerables(client);\n\n if (id === \"new\") {\n const newTask = getInitialScheduledTask();\n return {\n task: newTask,\n triggerables: triggerableData,\n };\n }\n\n if ((!id && id !== \"0\") || Number.isNaN(parseInt(id, 10))) {\n throw new Response(\"\", {\n status: 404,\n statusText: \"Not found\",\n });\n }\n\n const taskId = parseInt(id, 10);\n const task = await fetchScheduledTaskById(taskId, client);\n\n return {\n task,\n triggerables: triggerableData,\n };\n };\n\nexport type SingleScheduledTaskLoader = ReturnType<typeof getSingleTaskLoader>;\n\nexport const getScheduledTasksLoader =\n (client: ApiClient) =>\n async ({ request }: LoaderFunctionArgs) => {\n try {\n const requestUrl = new URL(request.url);\n const filter = getPagingValuesFromSearchParams(requestUrl.searchParams);\n\n const scheduledTaskResponse = await fetchScheduledTasks(filter, client);\n\n return scheduledTaskResponse;\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to fetch scheduled tasks\");\n }\n };\n\nexport type ScheduledTasksLoader = ReturnType<typeof getScheduledTasksLoader>;\n","import cronstrue from \"cronstrue\";\nimport { z } from \"zod\";\nimport { exhaustiveStringValues } from \"../../common/exhaustiveValues\";\nimport type { ScheduledTask } from \"./api\";\n\nexport type ScheduledTaskFormErrors = Partial<Record<keyof ScheduledTask | \"args\", string>>;\nexport type ScheduledTaskState = NonNullable<ScheduledTask[\"state\"]>;\nexport type ScheduledTaskMissPolicy = ScheduledTask[\"missPolicy\"];\ntype ScheduledTaskFormErrorKey = Extract<keyof ScheduledTask, string> | \"args\";\n\nexport const scheduledTaskStates = exhaustiveStringValues<ScheduledTaskState>()([\n \"WAITING\",\n \"RUNNING\",\n \"PAUSED\",\n]);\n\nexport const missPolicies = exhaustiveStringValues<ScheduledTaskMissPolicy>()([\n \"SKIP_ALL\",\n \"RUN_ONCE\",\n \"RUN_ALL\",\n]);\n\nexport const isScheduledTaskState = (value: string): value is ScheduledTaskState =>\n scheduledTaskStates.some((state) => state === value);\n\nexport const isMissPolicy = (value: string): value is ScheduledTaskMissPolicy =>\n missPolicies.some((missPolicy) => missPolicy === value);\n\nconst isCronExpression = (value: string): boolean => {\n const normalized = value.trim();\n\n try {\n cronstrue.toString(normalized, {\n use24HourTimeFormat: true,\n });\n return true;\n } catch {\n return false;\n }\n};\n\nconst isValidTimeZone = (value: string): boolean => {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value });\n return true;\n } catch {\n return false;\n }\n};\n\nconst argsSchema = z.string().transform((value, context): ScheduledTask[\"args\"] => {\n try {\n const parsed: unknown = JSON.parse(value || \"{}\");\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n context.addIssue({\n code: \"custom\",\n message: \"Args must be a JSON object\",\n });\n return z.NEVER;\n }\n\n return Object.fromEntries(\n Object.entries(parsed).map(([key, argValue]) => [key, String(argValue)]),\n );\n } catch {\n context.addIssue({\n code: \"custom\",\n message: \"Args must be valid JSON\",\n });\n return z.NEVER;\n }\n});\n\nconst scheduledTaskSchema = z\n .object({\n task: z.object({\n id: z.number().optional(),\n name: z.string().trim().min(1, { message: \"Name is required\" }),\n state: z.enum(scheduledTaskStates).optional(),\n cronExpression: z\n .string()\n .trim()\n .min(1, { message: \"Cron expression is required\" })\n .refine(isCronExpression, {\n message: \"Cron expression must be a valid Spring cron expression\",\n }),\n timeZone: z\n .string()\n .trim()\n .min(1, { message: \"Time zone is required\" })\n .refine(isValidTimeZone, { message: \"Invalid IANA time zone\" }),\n lastFiredTime: z.number().optional(),\n lastFinishedTime: z.number().optional(),\n nextFireTime: z.number().optional(),\n triggerable: z.string().trim().min(1, { message: \"Triggerable is required\" }),\n priority: z\n .number()\n .refine(Number.isFinite, { message: \"Priority is required\" })\n .refine(Number.isInteger, { message: \"Priority must be an integer\" }),\n timeoutMs: z\n .number()\n .refine(Number.isFinite, { message: \"Timeout is required\" })\n .refine(Number.isInteger, { message: \"Timeout must be an integer\" })\n .refine((value) => value >= 0, { message: \"Timeout must be zero or greater\" }),\n missPolicy: z.enum(missPolicies),\n lastInitiator: z.string().optional(),\n running: z.string().optional(),\n }),\n argsText: argsSchema,\n })\n .transform(\n ({ task, argsText }): ScheduledTask => ({\n ...task,\n args: argsText,\n }),\n );\n\nconst scheduledTaskFormErrorKeys = exhaustiveStringValues<ScheduledTaskFormErrorKey>()([\n \"id\",\n \"name\",\n \"state\",\n \"cronExpression\",\n \"timeZone\",\n \"lastFiredTime\",\n \"lastFinishedTime\",\n \"nextFireTime\",\n \"triggerable\",\n \"priority\",\n \"timeoutMs\",\n \"missPolicy\",\n \"lastInitiator\",\n \"running\",\n \"args\",\n]);\n\nconst isScheduledTaskFormErrorKey = (value: unknown): value is ScheduledTaskFormErrorKey =>\n typeof value === \"string\" && scheduledTaskFormErrorKeys.some((key) => key === value);\n\nconst getFormErrorKey = (path: Array<PropertyKey>): ScheduledTaskFormErrorKey | undefined => {\n const [scope, field] = path;\n\n if (scope === \"argsText\") {\n return \"args\";\n }\n\n if (scope === \"task\" && isScheduledTaskFormErrorKey(field)) {\n return field;\n }\n\n return undefined;\n};\n\nexport const parseScheduledTask = (\n task: ScheduledTask,\n argsText: string,\n): { ok: true; value: ScheduledTask } | { ok: false; errors: ScheduledTaskFormErrors } => {\n const result = scheduledTaskSchema.safeParse({ task, argsText });\n\n if (result.success) {\n return { ok: true, value: result.data };\n }\n\n const errors: ScheduledTaskFormErrors = {};\n\n result.error.issues.forEach((issue) => {\n const errorKey = getFormErrorKey(issue.path);\n\n if (errorKey !== undefined && !(errorKey in errors)) {\n errors[errorKey] = issue.message;\n }\n });\n\n return { ok: false, errors };\n};\n","import cronstrue from \"cronstrue\";\nimport { useState } from \"react\";\nimport { useActionData, useLoaderData, useNavigate, useParams, useSubmit } from \"react-router\";\n\nimport {\n Alert,\n Box,\n Button,\n Collapse,\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport type { ScheduledTaskFormAction } from \"./action\";\nimport type { ScheduledTask } from \"./api\";\nimport type { ScheduledTaskFormLoaderData, SingleScheduledTaskLoader } from \"./loader\";\nimport {\n isMissPolicy,\n isScheduledTaskState,\n missPolicies,\n parseScheduledTask,\n scheduledTaskStates,\n type ScheduledTaskFormErrors,\n} from \"./parseScheduledTask\";\n\n// TODO: the component library needs a reusable toast component\ntype ToastProps = {\n severity: \"success\" | \"error\";\n message: string;\n};\n\nconst formatEpochMillis = (value?: number): string => {\n if (value === undefined) {\n return \"-\";\n }\n\n return new Date(value).toISOString();\n};\n\nconst formatArgs = (args?: ScheduledTask[\"args\"]): string => JSON.stringify(args ?? {}, null, 2);\n\nconst formatTriggerableArg = (\n arg: ScheduledTaskFormLoaderData[\"triggerables\"][string][number],\n): string => {\n const name = arg.name ?? \"(unnamed)\";\n const type = arg.type ? `: ${arg.type}` : \"\";\n const required = arg.required ? \"required\" : \"optional\";\n return `${name}${type} (${required})`;\n};\n\nconst describeCronExpression = (cronExpression: string): string | undefined => {\n if (!cronExpression.trim()) {\n return undefined;\n }\n\n try {\n return cronstrue.toString(cronExpression, {\n use24HourTimeFormat: true,\n });\n } catch {\n return undefined;\n }\n};\n\nconst ScheduledTaskFormRoute = () => {\n const data = useLoaderData<SingleScheduledTaskLoader>();\n const [task, setTask] = useState<ScheduledTask>(data.task);\n const [argsText, setArgsText] = useState(formatArgs(data.task.args));\n const [formErrors, setFormErrors] = useState<ScheduledTaskFormErrors>({});\n const triggerableNames = Object.keys(data.triggerables).sort((a, b) => a.localeCompare(b));\n const triggerableOptions =\n task.triggerable && !triggerableNames.includes(task.triggerable)\n ? [task.triggerable, ...triggerableNames]\n : triggerableNames;\n const selectedTriggerableArgs = data.triggerables[task.triggerable] ?? [];\n const triggerableArgsText = selectedTriggerableArgs.length\n ? selectedTriggerableArgs.map(formatTriggerableArg).join(\", \")\n : \"Selected triggerable does not declare args.\";\n const cronDescription = describeCronExpression(task.cronExpression);\n const params = useParams();\n const { id } = params;\n const navigate = useNavigate();\n const submit = useSubmit();\n\n const actionData = useActionData<ScheduledTaskFormAction>();\n\n const handleDelete = () => {\n if (id === \"new\" || task.id === undefined) return;\n\n const confirmed = window.confirm(`Delete scheduled task \"${task.name || task.id}\"?`);\n\n if (!confirmed) {\n return;\n }\n\n submit(\n { type: \"delete\", id: task.id },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const handleSave = () => {\n const taskResult = parseScheduledTask(task, argsText);\n\n if (!taskResult.ok) {\n setFormErrors(taskResult.errors);\n return;\n }\n\n setFormErrors({});\n\n let taskToSave: ScheduledTask | Omit<ScheduledTask, \"id\">;\n\n if (id !== \"new\" && taskResult.value.id !== 0) {\n taskToSave = taskResult.value;\n } else {\n const { id: _id, ...newTaskWithoutId } = taskResult.value;\n taskToSave = newTaskWithoutId;\n }\n\n submit(\n { type: \"save\", task: taskToSave },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const actionToastProps: ToastProps | null = actionData\n ? {\n severity: actionData.status < 300 ? \"success\" : \"error\",\n message: actionData.message,\n }\n : null;\n return (\n <Box component=\"section\" sx={{ p: 2, maxWidth: 1000 }}>\n <Collapse in={actionToastProps !== null} unmountOnExit>\n <Alert severity={actionToastProps?.severity}>{actionToastProps?.message}</Alert>\n </Collapse>\n <Paper sx={{ p: 2, mt: 2 }}>\n <Typography variant=\"h4\" component=\"h1\" sx={{ mb: 2 }}>\n {id === \"new\" ? \"New scheduled task\" : \"Edit scheduled task\"}\n </Typography>\n <Stack gap={2}>\n <TextField\n label=\"Name\"\n required\n value={task.name}\n error={!!formErrors.name}\n helperText={formErrors.name}\n onChange={(event) => setTask({ ...task, name: event.target.value })}\n />\n <FormControl>\n <InputLabel id=\"scheduled-task-state-label\">State</InputLabel>\n <Select\n labelId=\"scheduled-task-state-label\"\n label=\"State\"\n value={task.state ?? \"WAITING\"}\n onChange={(event) => {\n const state = event.target.value;\n\n if (isScheduledTaskState(state)) {\n setTask({\n ...task,\n state,\n });\n }\n }}\n >\n {scheduledTaskStates.map((state) => (\n <MenuItem key={state} value={state}>\n {state}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n label=\"Cron expression\"\n required\n value={task.cronExpression}\n error={!!formErrors.cronExpression}\n helperText={\n formErrors.cronExpression ??\n cronDescription ??\n \"Cron preview unavailable. The value will still be submitted to the backend.\"\n }\n onChange={(event) => setTask({ ...task, cronExpression: event.target.value })}\n />\n <TextField\n label=\"Time zone\"\n required\n value={task.timeZone}\n error={!!formErrors.timeZone}\n helperText={\n formErrors.timeZone ?? \"IANA time zone, for example Europe/Helsinki or UTC.\"\n }\n onChange={(event) => setTask({ ...task, timeZone: event.target.value })}\n />\n <FormControl required error={!!formErrors.triggerable}>\n <InputLabel id=\"scheduled-task-triggerable-label\">Triggerable</InputLabel>\n <Select\n labelId=\"scheduled-task-triggerable-label\"\n label=\"Triggerable\"\n value={task.triggerable}\n onChange={(event) => setTask({ ...task, triggerable: event.target.value })}\n >\n <MenuItem value=\"\">\n <em>Select triggerable</em>\n </MenuItem>\n {triggerableOptions.map((triggerable) => (\n <MenuItem key={triggerable} value={triggerable}>\n {triggerable}\n </MenuItem>\n ))}\n </Select>\n <FormHelperText>\n {formErrors.triggerable ?? \"Fetched from the triggerables endpoint.\"}\n </FormHelperText>\n </FormControl>\n <TextField\n type=\"number\"\n label=\"Priority\"\n value={task.priority}\n error={!!formErrors.priority}\n helperText={formErrors.priority}\n onChange={(event) =>\n setTask({\n ...task,\n priority: Number.parseInt(event.target.value, 10),\n })\n }\n />\n <TextField\n type=\"number\"\n label=\"Timeout, ms\"\n value={task.timeoutMs}\n error={!!formErrors.timeoutMs}\n helperText={formErrors.timeoutMs}\n onChange={(event) =>\n setTask({\n ...task,\n timeoutMs: Number.parseInt(event.target.value, 10),\n })\n }\n />\n <FormControl>\n <InputLabel id=\"scheduled-task-miss-policy-label\">Miss policy</InputLabel>\n <Select\n labelId=\"scheduled-task-miss-policy-label\"\n label=\"Miss policy\"\n value={task.missPolicy}\n onChange={(event) => {\n const missPolicy = event.target.value;\n\n if (isMissPolicy(missPolicy)) {\n setTask({\n ...task,\n missPolicy,\n });\n }\n }}\n >\n {missPolicies.map((missPolicy) => (\n <MenuItem key={missPolicy} value={missPolicy}>\n {missPolicy}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n label=\"Args\"\n multiline\n minRows={4}\n value={argsText}\n error={!!formErrors.args}\n helperText={formErrors.args ?? \"JSON object. Values are saved as strings.\"}\n onChange={(event) => setArgsText(event.target.value)}\n />\n {task.triggerable && (\n <Box\n sx={{\n mt: -1,\n px: 1.75,\n py: 1,\n bgcolor: \"grey.100\",\n borderRadius: 1,\n }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\" component=\"div\">\n Declared args for {task.triggerable}\n </Typography>\n <Typography variant=\"body2\">{triggerableArgsText}</Typography>\n </Box>\n )}\n {id !== \"new\" && (\n <Box component=\"dl\" sx={{ display: \"grid\", gridTemplateColumns: \"160px 1fr\", gap: 1 }}>\n <Typography component=\"dt\">Last fired</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.lastFiredTime)}\n </Typography>\n <Typography component=\"dt\">Last finished</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.lastFinishedTime)}\n </Typography>\n <Typography component=\"dt\">Next fire</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.nextFireTime)}\n </Typography>\n </Box>\n )}\n <Stack direction=\"row\" gap={1}>\n <Button variant=\"contained\" onClick={handleSave}>\n Save\n </Button>\n {id !== \"new\" && (\n <Button color=\"error\" variant=\"outlined\" onClick={handleDelete}>\n Delete\n </Button>\n )}\n <Button variant=\"outlined\" onClick={() => navigate(\"/scheduled-tasks\")}>\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Paper>\n </Box>\n );\n};\n\nexport default ScheduledTaskFormRoute;\n","import {\n Box,\n Button,\n CircularProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TablePagination,\n TableRow,\n} from \"@mui/material\";\nimport { useLoaderData, useNavigate, useNavigation, useSearchParams, useSubmit } from \"react-router\";\nimport { getPagingValuesFromSearchParams, getSearchParamsWithPage } from \"../../common/pagination\";\nimport type { ScheduledTasksLoader } from \"./loader\";\n\n\nconst formatEpochMillis = (value?: number): string => {\n if (value === undefined) {\n return \"-\";\n }\n\n return new Date(value).toISOString();\n};\n\nconst ScheduledTasksRoute = () => {\n const navigate = useNavigate();\n const navigation = useNavigation();\n const submit = useSubmit();\n const [searchParams, setSearchParams] = useSearchParams();\n const taskFilter = getPagingValuesFromSearchParams(searchParams);\n\n const navigationState = navigation.state;\n\n const scheduledTasksResponse = useLoaderData<ScheduledTasksLoader>();\n const { content: scheduledTasksList, totalElements } = scheduledTasksResponse;\n\n const handlePageChange = (newPage: number) => {\n setSearchParams(getSearchParamsWithPage(searchParams, newPage));\n };\n\n const handleTriggerTask = (id: number) => {\n submit(\n { type: \"trigger\", id },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const handleUpdateTaskState = (id: number, state: string) => {\n submit(\n { type: \"updateState\", id, state },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n if (navigationState === \"loading\") {\n return <CircularProgress />;\n }\n\n return (\n <>\n <Box sx={{ p: 1 }}>\n <Button variant=\"contained\" onClick={() => navigate(\"./new\", { relative: \"path\" })}>\n New scheduled task\n </Button>\n </Box>\n <TableContainer sx={{ height: \"calc(100vh - 180px)\" }}>\n <Table size=\"small\" stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>State</TableCell>\n <TableCell>Cron expression</TableCell>\n <TableCell>Time zone</TableCell>\n <TableCell>Last fired</TableCell>\n <TableCell>Last finished</TableCell>\n <TableCell>Next fire</TableCell>\n <TableCell>Triggerable</TableCell>\n <TableCell>Priority</TableCell>\n <TableCell>Timeout, ms</TableCell>\n <TableCell>Miss policy</TableCell>\n <TableCell>Trigger</TableCell>\n <TableCell>State action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(scheduledTasksList ?? []).map((task) => {\n const taskId = task.id;\n\n return (\n <TableRow\n key={taskId ?? task.name}\n hover\n sx={{ cursor: taskId !== undefined ? \"pointer\" : \"default\" }}\n onClick={() => {\n if (taskId !== undefined) {\n navigate(`/scheduled-tasks/${taskId}`);\n }\n }}\n >\n <TableCell>{task.name}</TableCell>\n <TableCell>{task.state}</TableCell>\n <TableCell>{task.cronExpression}</TableCell>\n <TableCell>{task.timeZone}</TableCell>\n <TableCell>{formatEpochMillis(task.lastFiredTime)}</TableCell>\n <TableCell>{formatEpochMillis(task.lastFinishedTime)}</TableCell>\n <TableCell>{formatEpochMillis(task.nextFireTime)}</TableCell>\n <TableCell>{task.triggerable}</TableCell>\n <TableCell>{task.priority}</TableCell>\n <TableCell>{task.timeoutMs}</TableCell>\n <TableCell>{task.missPolicy}</TableCell>\n <TableCell>\n {taskId !== undefined && task.state !== \"RUNNING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleTriggerTask(taskId);\n }}\n >\n Trigger\n </Button>\n )}\n </TableCell>\n <TableCell>\n {taskId !== undefined && task.state === \"PAUSED\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"WAITING\");\n }}\n >\n Activate\n </Button>\n )}\n {taskId !== undefined && task.state === \"WAITING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"PAUSED\");\n }}\n >\n Pause\n </Button>\n )}\n {taskId !== undefined && task.state === \"RUNNING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"WAITING\");\n }}\n >\n Stop\n </Button>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\"\n count={totalElements ?? 0}\n rowsPerPage={taskFilter.size ?? 100}\n page={taskFilter.page}\n onPageChange={(_, newPage) => handlePageChange(newPage)}\n rowsPerPageOptions={[]}\n showFirstButton\n showLastButton\n />\n </>\n );\n};\n\nexport default ScheduledTasksRoute;\n"],"mappings":"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"}
|