diff --git a/datahub-web-react/package.json b/datahub-web-react/package.json
index 6c2b12ba1f..41144de709 100644
--- a/datahub-web-react/package.json
+++ b/datahub-web-react/package.json
@@ -75,6 +75,7 @@
"react-color": "^2.19.3",
"react-dom": "^17.0.0",
"react-icons": "4.3.1",
+ "react-js-cron": "^2.1.0",
"react-router": "^5.2.0",
"react-router-dom": "^5.1.6",
"react-scripts": "4.0.3",
diff --git a/datahub-web-react/src/app/ingest/source/builder/CreateScheduleStep.tsx b/datahub-web-react/src/app/ingest/source/builder/CreateScheduleStep.tsx
index 1ad28d8b92..2d755d29c9 100644
--- a/datahub-web-react/src/app/ingest/source/builder/CreateScheduleStep.tsx
+++ b/datahub-web-react/src/app/ingest/source/builder/CreateScheduleStep.tsx
@@ -1,5 +1,7 @@
-import { Button, Form, Input, Typography } from 'antd';
+import { Button, Form, Typography } from 'antd';
import React, { useMemo } from 'react';
+import { Cron } from 'react-js-cron';
+import 'react-js-cron/dist/styles.css';
import styled from 'styled-components';
import cronstrue from 'cronstrue';
import { CheckCircleOutlined } from '@ant-design/icons';
@@ -24,7 +26,6 @@ const SelectTemplateHeader = styled(Typography.Title)`
const CronText = styled(Typography.Paragraph)`
&&& {
- margin-top: 8px;
margin-bottom: 0px;
}
color: ${ANTD_GRAY[7]};
@@ -41,10 +42,21 @@ const ControlsContainer = styled.div`
margin-top: 8px;
`;
+const StyledFormItem = styled(Form.Item)`
+ .cron-builder {
+ color: ${ANTD_GRAY[7]};
+ }
+ .cron-builder-select {
+ min-width: 100px;
+ }
+`;
+
const ItemDescriptionText = styled(Typography.Paragraph)``;
+const DAILY_MIDNIGHT_CRON_INTERVAL = '0 0 * * *';
+
export const CreateScheduleStep = ({ state, updateState, goTo, prev }: StepProps) => {
- const interval = state.schedule?.interval || '';
+ const interval = state.schedule?.interval?.replaceAll(', ', ' ') || DAILY_MIDNIGHT_CRON_INTERVAL;
const timezone = state.schedule?.timezone || Intl.DateTimeFormat().resolvedOptions().timeZone;
const setTimezone = (tz: string) => {
@@ -110,9 +122,14 @@ export const CreateScheduleStep = ({ state, updateState, goTo, prev }: StepProps