Skip to content

Commit 5c4dc59

Browse files
authored
feat: added cronstrue to have readable schedules (#329)
* feat: added cronstrue to have readable schedules Signed-off-by: Marcel Bertagnini <[email protected]> * fix: added cronstrue to dependencies list and handle error in catch Signed-off-by: Marcel Bertagnini <[email protected]> --------- Signed-off-by: Marcel Bertagnini <[email protected]>
1 parent 1f065d5 commit 5c4dc59

File tree

5 files changed

+39
-1
lines changed

5 files changed

+39
-1
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"@vitest/eslint-plugin": "^1.3.14",
3535
"autoprefixer": "^10.4.21",
3636
"concurrently": "^9.1.2",
37+
"cronstrue": "^3.3.0",
3738
"eslint": "^9.35.0",
3839
"eslint-import-resolver-custom-alias": "^1.3.2",
3940
"eslint-import-resolver-typescript": "^4.3.4",

packages/webview/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"watch": "vite --mode development build -w"
1717
},
1818
"dependencies": {
19+
"cronstrue": "^3.3.0",
1920
"inversify": "^7.9.1",
2021
"moment": "^2.30.1",
2122
"svelte-preprocess": "^6.0.3",

packages/webview/src/component/cronjobs/CronJobsList.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { getContext } from 'svelte';
88
import { DependencyAccessor } from '/@/inject/dependency-accessor';
99
import KubernetesEmptyScreen from '/@/component/objects/KubernetesEmptyScreen.svelte';
1010
import ActionsColumn from '/@/component/cronjobs/columns/Actions.svelte';
11+
import ScheduleColumn from '/@/component/cronjobs/columns/Schedule.svelte';
1112
import { CronJobHelper } from './cronjob-helper';
1213
import type { CronJobUI } from './CronJobUI';
1314
import CronJobIcon from '../icons/CronJobIcon.svelte';
@@ -38,7 +39,7 @@ let ageColumn = new TableColumn<CronJobUI, Date | undefined>('Age', {
3839
3940
let scheduleColumn = new TableColumn<CronJobUI, string>('Schedule', {
4041
renderMapping: (cronjob): string => cronjob.schedule,
41-
renderer: TableSimpleColumn,
42+
renderer: ScheduleColumn,
4243
comparator: (a, b): number => a.schedule.localeCompare(b.schedule),
4344
});
4445
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script lang="ts">
2+
import cronstrue from 'cronstrue';
3+
4+
interface Props {
5+
object: string;
6+
}
7+
8+
let { object }: Props = $props();
9+
10+
function getScheduleReadableText(schedule: string): string {
11+
try {
12+
return cronstrue.toString(schedule);
13+
} catch (error) {
14+
// If cronstrue cannot parse the schedule, return the original cron expression
15+
console.warn(`Failed to parse cron expression: ${schedule}`, error);
16+
return schedule;
17+
}
18+
}
19+
</script>
20+
21+
<div class="text-[var(--pd-table-body-text)] max-w-full text-wrap line-clamp-2">
22+
<span>{getScheduleReadableText(object)}</span>
23+
</div>

pnpm-lock.yaml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)