Skip to content

Commit 0da519b

Browse files
committed
remove sub-1-hour frequency options, and add current connection frequency to dropdown
1 parent d3cefac commit 0da519b

File tree

4 files changed

+72
-38
lines changed

4 files changed

+72
-38
lines changed

airbyte-webapp/src/config/FrequencyConfig.json

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,6 @@
33
"type": "manual",
44
"config": null
55
},
6-
{
7-
"type": "5 min",
8-
"config": {
9-
"units": 5,
10-
"timeUnit": "minutes"
11-
}
12-
},
13-
{
14-
"type": "15 min",
15-
"config": {
16-
"units": 15,
17-
"timeUnit": "minutes"
18-
}
19-
},
20-
{
21-
"type": "30 min",
22-
"config": {
23-
"units": 30,
24-
"timeUnit": "minutes"
25-
}
26-
},
276
{
287
"type": "1 hour",
298
"config": {

airbyte-webapp/src/views/Connection/ConnectionForm/ConnectionForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ const ConnectionForm: React.FC<ConnectionFormProps> = ({
185185
);
186186

187187
const errorMessage = submitError ? createFormErrorMessage(submitError) : null;
188-
const frequencies = useFrequencyDropdownData();
188+
const frequencies = useFrequencyDropdownData(connection.schedule);
189189

190190
return (
191191
<Formik
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { renderHook } from "@testing-library/react-hooks";
2+
3+
import FrequencyConfig from "config/FrequencyConfig.json";
4+
import { ConnectionScheduleTimeUnit } from "core/request/AirbyteClient";
5+
import { TestWrapper as wrapper } from "utils/testutils";
6+
7+
import { useFrequencyDropdownData } from "./formConfig";
8+
9+
describe("useFrequencyDropdownData", () => {
10+
it("should return only default frequencies when no additional frequency is provided", () => {
11+
const { result } = renderHook(() => useFrequencyDropdownData(undefined), { wrapper });
12+
const stringifiedResult = JSON.stringify(result.current.map((item) => item.value));
13+
const stringifiedConfig = JSON.stringify(FrequencyConfig.map((item) => item.config));
14+
15+
expect(stringifiedResult).toEqual(stringifiedConfig);
16+
});
17+
18+
it("should return only default frequencies when additional frequency is already present", () => {
19+
const additionalFrequency = {
20+
units: 1,
21+
timeUnit: ConnectionScheduleTimeUnit["hours"],
22+
};
23+
const { result } = renderHook(() => useFrequencyDropdownData(additionalFrequency), { wrapper });
24+
const stringifiedResult = JSON.stringify(result.current.map((item) => item.value));
25+
const stringifiedConfig = JSON.stringify(FrequencyConfig.map((item) => item.config));
26+
27+
expect(stringifiedResult).toEqual(stringifiedConfig);
28+
});
29+
30+
it("should include additional frequency when provided and unique", () => {
31+
const additionalFrequency = {
32+
units: 7,
33+
timeUnit: ConnectionScheduleTimeUnit["minutes"],
34+
};
35+
const { result } = renderHook(() => useFrequencyDropdownData(additionalFrequency), { wrapper });
36+
37+
expect(result.current.length).toEqual(FrequencyConfig.length + 1);
38+
expect(
39+
result.current.some(
40+
(item) => item.label === "Every 7 minutes" && item.value.units === 7 && item.value.timeUnit === "minutes"
41+
)
42+
).toBeTruthy();
43+
});
44+
});

airbyte-webapp/src/views/Connection/ConnectionForm/formConfig.tsx

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -254,24 +254,35 @@ const useInitialValues = (
254254
}, [initialSchema, connection, isEditMode, destDefinition]);
255255
};
256256

257-
const useFrequencyDropdownData = (): DropDownRow.IDataItem[] => {
257+
const useFrequencyDropdownData = (
258+
additionalFrequency: WebBackendConnectionRead["schedule"]
259+
): DropDownRow.IDataItem[] => {
258260
const { formatMessage } = useIntl();
259261

260-
return useMemo(
261-
() =>
262-
FrequencyConfig.map((item) => ({
263-
value: item.config,
264-
label: item.config
265-
? formatMessage(
266-
{
267-
id: `form.every.${item.config.timeUnit}`,
268-
},
269-
{ value: item.config.units }
270-
)
271-
: formatMessage({ id: "frequency.manual" }),
272-
})),
273-
[formatMessage]
274-
);
262+
return useMemo(() => {
263+
const frequencies = FrequencyConfig.map((frequencyConfig) => frequencyConfig.config);
264+
if (additionalFrequency) {
265+
const additionalFreqAlreadyPresent = frequencies.some(
266+
(frequency) =>
267+
frequency?.timeUnit === additionalFrequency.timeUnit && frequency?.units === additionalFrequency.units
268+
);
269+
if (!additionalFreqAlreadyPresent) {
270+
frequencies.unshift(additionalFrequency);
271+
}
272+
}
273+
274+
return frequencies.map((frequency) => ({
275+
value: frequency,
276+
label: frequency
277+
? formatMessage(
278+
{
279+
id: `form.every.${frequency.timeUnit}`,
280+
},
281+
{ value: frequency.units }
282+
)
283+
: formatMessage({ id: "frequency.manual" }),
284+
}));
285+
}, [formatMessage, additionalFrequency]);
275286
};
276287

277288
export type { ConnectionFormValues, FormikConnectionFormValues };

0 commit comments

Comments
 (0)