Skip to content

Commit

Permalink
remove sub-1-hour frequency options, and add current connection frequ…
Browse files Browse the repository at this point in the history
…ency to dropdown
  • Loading branch information
lmossman committed Aug 17, 2022
1 parent d3cefac commit 0da519b
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 38 deletions.
21 changes: 0 additions & 21 deletions airbyte-webapp/src/config/FrequencyConfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,6 @@
"type": "manual",
"config": null
},
{
"type": "5 min",
"config": {
"units": 5,
"timeUnit": "minutes"
}
},
{
"type": "15 min",
"config": {
"units": 15,
"timeUnit": "minutes"
}
},
{
"type": "30 min",
"config": {
"units": 30,
"timeUnit": "minutes"
}
},
{
"type": "1 hour",
"config": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ const ConnectionForm: React.FC<ConnectionFormProps> = ({
);

const errorMessage = submitError ? createFormErrorMessage(submitError) : null;
const frequencies = useFrequencyDropdownData();
const frequencies = useFrequencyDropdownData(connection.schedule);

return (
<Formik
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { renderHook } from "@testing-library/react-hooks";

import FrequencyConfig from "config/FrequencyConfig.json";
import { ConnectionScheduleTimeUnit } from "core/request/AirbyteClient";
import { TestWrapper as wrapper } from "utils/testutils";

import { useFrequencyDropdownData } from "./formConfig";

describe("useFrequencyDropdownData", () => {
it("should return only default frequencies when no additional frequency is provided", () => {
const { result } = renderHook(() => useFrequencyDropdownData(undefined), { wrapper });
const stringifiedResult = JSON.stringify(result.current.map((item) => item.value));
const stringifiedConfig = JSON.stringify(FrequencyConfig.map((item) => item.config));

expect(stringifiedResult).toEqual(stringifiedConfig);
});

it("should return only default frequencies when additional frequency is already present", () => {
const additionalFrequency = {
units: 1,
timeUnit: ConnectionScheduleTimeUnit["hours"],
};
const { result } = renderHook(() => useFrequencyDropdownData(additionalFrequency), { wrapper });
const stringifiedResult = JSON.stringify(result.current.map((item) => item.value));
const stringifiedConfig = JSON.stringify(FrequencyConfig.map((item) => item.config));

expect(stringifiedResult).toEqual(stringifiedConfig);
});

it("should include additional frequency when provided and unique", () => {
const additionalFrequency = {
units: 7,
timeUnit: ConnectionScheduleTimeUnit["minutes"],
};
const { result } = renderHook(() => useFrequencyDropdownData(additionalFrequency), { wrapper });

expect(result.current.length).toEqual(FrequencyConfig.length + 1);
expect(
result.current.some(
(item) => item.label === "Every 7 minutes" && item.value.units === 7 && item.value.timeUnit === "minutes"
)
).toBeTruthy();
});
});
43 changes: 27 additions & 16 deletions airbyte-webapp/src/views/Connection/ConnectionForm/formConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -254,24 +254,35 @@ const useInitialValues = (
}, [initialSchema, connection, isEditMode, destDefinition]);
};

const useFrequencyDropdownData = (): DropDownRow.IDataItem[] => {
const useFrequencyDropdownData = (
additionalFrequency: WebBackendConnectionRead["schedule"]
): DropDownRow.IDataItem[] => {
const { formatMessage } = useIntl();

return useMemo(
() =>
FrequencyConfig.map((item) => ({
value: item.config,
label: item.config
? formatMessage(
{
id: `form.every.${item.config.timeUnit}`,
},
{ value: item.config.units }
)
: formatMessage({ id: "frequency.manual" }),
})),
[formatMessage]
);
return useMemo(() => {
const frequencies = FrequencyConfig.map((frequencyConfig) => frequencyConfig.config);
if (additionalFrequency) {
const additionalFreqAlreadyPresent = frequencies.some(
(frequency) =>
frequency?.timeUnit === additionalFrequency.timeUnit && frequency?.units === additionalFrequency.units
);
if (!additionalFreqAlreadyPresent) {
frequencies.unshift(additionalFrequency);
}
}

return frequencies.map((frequency) => ({
value: frequency,
label: frequency
? formatMessage(
{
id: `form.every.${frequency.timeUnit}`,
},
{ value: frequency.units }
)
: formatMessage({ id: "frequency.manual" }),
}));
}, [formatMessage, additionalFrequency]);
};

export type { ConnectionFormValues, FormikConnectionFormValues };
Expand Down

0 comments on commit 0da519b

Please sign in to comment.