develop #22
@@ -3,14 +3,22 @@ import Card from "../../../ui/Card";
|
|||||||
import CardHeader from "../../../ui/CardHeader";
|
import CardHeader from "../../../ui/CardHeader";
|
||||||
import ChannelFields from "./ChannelFields";
|
import ChannelFields from "./ChannelFields";
|
||||||
import type { FormTypes } from "../../../types/types";
|
import type { FormTypes } from "../../../types/types";
|
||||||
|
import { useGetOutputs } from "../hooks/useGetOutputs";
|
||||||
|
|
||||||
const ChannelCard = () => {
|
const ChannelCard = () => {
|
||||||
const { values, errors, touched } = useFormikContext<FormTypes>();
|
const { values, errors, touched, setFieldValue } = useFormikContext<FormTypes>();
|
||||||
|
const { query } = useGetOutputs(values?.format?.toLowerCase() || "json");
|
||||||
|
const outputData = query?.data;
|
||||||
return (
|
return (
|
||||||
<Card className="p-4 h-150 md:h-full">
|
<Card className="p-4 h-150 md:h-full">
|
||||||
<CardHeader title={`Channel (${values?.format})`} />
|
<CardHeader title={`Channel (${values?.format})`} />
|
||||||
<ChannelFields errors={errors} touched={touched} values={values} />
|
<ChannelFields
|
||||||
|
errors={errors}
|
||||||
|
touched={touched}
|
||||||
|
values={values}
|
||||||
|
outputData={outputData}
|
||||||
|
onSetFieldValue={setFieldValue}
|
||||||
|
/>
|
||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="w-full md:w-1/4 text-white bg-green-700 hover:bg-green-800 font-small rounded-lg text-sm px-2 py-2.5"
|
className="w-full md:w-1/4 text-white bg-green-700 hover:bg-green-800 font-small rounded-lg text-sm px-2 py-2.5"
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { Field } from "formik";
|
import { Field } from "formik";
|
||||||
import type { FormTypes, InitialValuesFormErrors } from "../../../types/types";
|
import type { FormTypes, InitialValuesFormErrors } from "../../../types/types";
|
||||||
|
import type { UseQueryResult } from "@tanstack/react-query";
|
||||||
|
import { useEffect, useMemo } from "react";
|
||||||
|
|
||||||
type ChannelFieldsProps = {
|
type ChannelFieldsProps = {
|
||||||
values: FormTypes;
|
values: FormTypes;
|
||||||
@@ -8,9 +10,26 @@ type ChannelFieldsProps = {
|
|||||||
connectTimeoutSeconds?: boolean | undefined;
|
connectTimeoutSeconds?: boolean | undefined;
|
||||||
readTimeoutSeconds?: boolean | undefined;
|
readTimeoutSeconds?: boolean | undefined;
|
||||||
};
|
};
|
||||||
|
outputData?: UseQueryResult<FormTypes, Error>;
|
||||||
|
onSetFieldValue: (field: string, value: string, shouldValidate?: boolean | undefined) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const ChannelFields = ({ errors, touched, values }: ChannelFieldsProps) => {
|
const ChannelFields = ({ errors, touched, values, outputData, onSetFieldValue }: ChannelFieldsProps) => {
|
||||||
|
const channelFieldsObject = useMemo(() => {
|
||||||
|
return {
|
||||||
|
connectTimeoutSeconds: outputData?.propConnectTimeoutSeconds?.value || 5,
|
||||||
|
readTimeoutSeconds: outputData?.propReadTimeoutSeconds?.value || 15,
|
||||||
|
backOfficeURL: outputData?.propBackofficeURL?.value || "",
|
||||||
|
username: outputData?.propUsername?.value || "",
|
||||||
|
password: outputData?.propPassword?.value || "",
|
||||||
|
};
|
||||||
|
}, [outputData]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
for (const [key, value] of Object.entries(channelFieldsObject)) {
|
||||||
|
onSetFieldValue(key, value);
|
||||||
|
}
|
||||||
|
}, [channelFieldsObject, onSetFieldValue, outputData]);
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-4 p-4">
|
<div className="flex flex-col gap-4 p-4">
|
||||||
<div className="flex flex-row justify-between">
|
<div className="flex flex-row justify-between">
|
||||||
|
|||||||
@@ -2,10 +2,16 @@ import { Formik, Form } from "formik";
|
|||||||
import BearerTypeCard from "./BearerTypeCard";
|
import BearerTypeCard from "./BearerTypeCard";
|
||||||
import ChannelCard from "./ChannelCard";
|
import ChannelCard from "./ChannelCard";
|
||||||
import type { FormTypes } from "../../../types/types";
|
import type { FormTypes } from "../../../types/types";
|
||||||
|
import { usePostOutputs } from "../hooks/usePostOutputs";
|
||||||
|
|
||||||
const Output = () => {
|
const Output = () => {
|
||||||
|
const { mutation } = usePostOutputs();
|
||||||
const handleSubmit = (values: FormTypes) => {
|
const handleSubmit = (values: FormTypes) => {
|
||||||
console.log(values);
|
const channelFields = {
|
||||||
|
backOfficeURL: values.backOfficeURL,
|
||||||
|
username: values.username,
|
||||||
|
password: values.password,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const inititalValues: FormTypes = {
|
const inititalValues: FormTypes = {
|
||||||
@@ -32,7 +38,7 @@ const Output = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Formik initialValues={inititalValues} onSubmit={handleSubmit}>
|
<Formik initialValues={inititalValues} onSubmit={handleSubmit} enableReinitialize>
|
||||||
<Form className="grid grid-cols-1 md:grid-cols-2">
|
<Form className="grid grid-cols-1 md:grid-cols-2">
|
||||||
<BearerTypeCard />
|
<BearerTypeCard />
|
||||||
<ChannelCard />
|
<ChannelCard />
|
||||||
|
|||||||
20
src/features/output/hooks/useGetOutputs.ts
Normal file
20
src/features/output/hooks/useGetOutputs.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { useQuery } from "@tanstack/react-query";
|
||||||
|
|
||||||
|
const fetchOutputs = async (format: string) => {
|
||||||
|
const response = await fetch(`http://100.115.148.59/api/fetch-config?id=Dispatcher0-${format}`, {
|
||||||
|
method: "GET",
|
||||||
|
});
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error("Network response was not ok");
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useGetOutputs = (format: string) => {
|
||||||
|
const query = useQuery({
|
||||||
|
queryKey: ["outputs", format],
|
||||||
|
queryFn: () => fetchOutputs(format),
|
||||||
|
});
|
||||||
|
|
||||||
|
return { query };
|
||||||
|
};
|
||||||
21
src/features/output/hooks/usePostOutputs.ts
Normal file
21
src/features/output/hooks/usePostOutputs.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { useMutation } from "@tanstack/react-query";
|
||||||
|
import type { BearerTypeFields } from "../../../types/types";
|
||||||
|
|
||||||
|
const postQuery = async (query: BearerTypeFields) => {
|
||||||
|
const response = await fetch("/api/outputs", {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ query }),
|
||||||
|
});
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error("Network response was not ok");
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
export const usePostOutputs = () => {
|
||||||
|
const mutation = useMutation({
|
||||||
|
mutationFn: (query: BearerTypeFields) => postQuery(query),
|
||||||
|
mutationKey: ["outputs"],
|
||||||
|
});
|
||||||
|
return { mutation };
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user