diff --git a/src/features/dashboard/components/SystemHealth.tsx b/src/features/dashboard/components/SystemHealth.tsx
index 4a21206..f6cee37 100644
--- a/src/features/dashboard/components/SystemHealth.tsx
+++ b/src/features/dashboard/components/SystemHealth.tsx
@@ -19,7 +19,6 @@ const SystemHealth = ({ startTime, uptime, statuses, isLoading, isError, dateUpd
if (isLoading) {
return Loading system health…;
}
- console.log(statuses);
return (
diff --git a/src/features/output/components/ChannelFields.tsx b/src/features/output/components/ChannelFields.tsx
index 6162946..b3ab4c4 100644
--- a/src/features/output/components/ChannelFields.tsx
+++ b/src/features/output/components/ChannelFields.tsx
@@ -1,6 +1,7 @@
import { Field } from "formik";
import type { FormTypes, InitialValuesFormErrors, OutputDataResponse } from "../../../types/types";
import { useEffect, useMemo } from "react";
+import { useOptionalConstants } from "../hooks/useOptionalConstants";
type ChannelFieldsProps = {
values: FormTypes;
@@ -14,6 +15,8 @@ type ChannelFieldsProps = {
};
const ChannelFields = ({ errors, touched, values, outputData, onSetFieldValue }: ChannelFieldsProps) => {
+ const { optionalConstantsQuery } = useOptionalConstants(outputData?.id?.split("-")[1] || "");
+ const optionalConstants = optionalConstantsQuery?.data;
const channelFieldsObject = useMemo(() => {
return {
connectTimeoutSeconds: outputData?.propConnectTimeoutSeconds?.value || "5",
@@ -21,8 +24,22 @@ const ChannelFields = ({ errors, touched, values, outputData, onSetFieldValue }:
backOfficeURL: outputData?.propBackofficeURL?.value || "",
username: outputData?.propUsername?.value || "",
password: outputData?.propPassword?.value || "",
+ SCID: optionalConstants?.propSourceIdentifier?.value || "",
+ timestampSource: optionalConstants?.propTimeZoneType?.value || "UTC",
+ GPSFormat: optionalConstants?.propGpsFormat?.value || "Minutes",
+ FFID: optionalConstants?.propFeedIdentifier?.value || "",
};
- }, [outputData]);
+ }, [
+ optionalConstants?.propFeedIdentifier?.value,
+ optionalConstants?.propGpsFormat?.value,
+ optionalConstants?.propSourceIdentifier?.value,
+ optionalConstants?.propTimeZoneType?.value,
+ outputData?.propBackofficeURL?.value,
+ outputData?.propConnectTimeoutSeconds?.value,
+ outputData?.propPassword?.value,
+ outputData?.propReadTimeoutSeconds?.value,
+ outputData?.propUsername?.value,
+ ]);
useEffect(() => {
for (const [key, value] of Object.entries(channelFieldsObject)) {
@@ -194,7 +211,7 @@ const ChannelFields = ({ errors, touched, values, outputData, onSetFieldValue }:
className="p-2 border border-gray-400 rounded-lg text-white bg-[#253445] w-full md:w-60"
>
-
+
diff --git a/src/features/output/components/OutputForms.tsx b/src/features/output/components/OutputForms.tsx
index 8f8fe88..aa52ece 100644
--- a/src/features/output/components/OutputForms.tsx
+++ b/src/features/output/components/OutputForms.tsx
@@ -1,15 +1,21 @@
import { Formik, Form } from "formik";
import BearerTypeCard from "./BearerTypeCard";
import ChannelCard from "./ChannelCard";
-import type { BearerTypeFields, FormTypes, OptionalBOF2Constants } from "../../../types/types";
+import type { BearerTypeFields, FormTypes, OptionalBOF2Constants, OptionalUTMCConstants } from "../../../types/types";
import { usePostBearerConfig } from "../hooks/useBearer";
import { useDispatcherConfig } from "../hooks/useDispatcherConfig";
+import { useOptionalConstants } from "../hooks/useOptionalConstants";
const OutputForms = () => {
const { bearerMutation } = usePostBearerConfig();
const { dispatcherQuery, dispatcherMutation } = useDispatcherConfig();
const format = dispatcherQuery?.data?.propFormat?.value;
+ const { optionalConstantsQuery, optionalConstantsMutation } = useOptionalConstants(format?.toLowerCase());
+ const FFID = optionalConstantsQuery?.data?.propFeedIdentifier?.value;
+ const SCID = optionalConstantsQuery?.data?.propSourceIdentifier?.value;
+ const timestampSource = optionalConstantsQuery?.data?.propTimeZoneType?.value;
+ const gpsFormat = optionalConstantsQuery?.data?.propGpsFormat?.value;
const inititalValues: FormTypes = {
format: format ?? "JSON",
@@ -22,11 +28,11 @@ const OutputForms = () => {
overviewQuality: "HIGH",
cropSizeFactor: "3/4",
- // Bof2 -optional constants
- FFID: "",
- SCID: "",
- timestampSource: "UTC",
- GPSFormat: "Minutes",
+ // optional constants
+ FFID: FFID ?? "",
+ SCID: SCID ?? "",
+ timestampSource: timestampSource ?? "UTC",
+ GPSFormat: gpsFormat ?? "Minutes",
//BOF2 - optional Lane IDs
laneId: "",
@@ -56,14 +62,25 @@ const OutputForms = () => {
if (result?.id) {
await bearerMutation.mutateAsync(bearerFields);
+
if (values.format === "BOF2") {
const optionalBOF2Fields: OptionalBOF2Constants = {
+ format: values.format,
FFID: values.FFID,
SCID: values.SCID,
timestampSource: values.timestampSource,
GPSFormat: values.GPSFormat,
};
- console.log("Submit BOF2 optional fields:", optionalBOF2Fields);
+ await optionalConstantsMutation.mutateAsync(optionalBOF2Fields);
+ }
+ if (values.format === "UTMC") {
+ const optionalUTMCFields: OptionalUTMCConstants = {
+ format: values.format,
+ SCID: values.SCID,
+ timestampSource: values.timestampSource,
+ GPSFormat: values.GPSFormat,
+ };
+ await optionalConstantsMutation.mutateAsync(optionalUTMCFields);
}
}
};
diff --git a/src/features/output/hooks/useOptionalConstants.tsx b/src/features/output/hooks/useOptionalConstants.tsx
index e69de29..2ddb1f8 100644
--- a/src/features/output/hooks/useOptionalConstants.tsx
+++ b/src/features/output/hooks/useOptionalConstants.tsx
@@ -0,0 +1,62 @@
+import { useQuery, useMutation } from "@tanstack/react-query";
+import type { OptionalBOF2Constants } from "../../../types/types";
+
+const fetchOptionalConstants = async (format: string) => {
+ if (!format || format === "json") return null;
+ const response = await fetch(`http://100.115.148.59/api/fetch-config?id=Dispatcher0-${format}-constants`);
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+};
+
+const postOptionalConstants = async (config: OptionalBOF2Constants) => {
+ const fields = [
+ {
+ property: "propSourceIdentifier",
+ value: config?.SCID,
+ },
+ {
+ property: "propTimeZoneType",
+ value: config?.timestampSource,
+ },
+ {
+ property: "propGpsFormat",
+ value: config?.GPSFormat,
+ },
+ ];
+
+ if (config.FFID) {
+ fields.push({
+ property: "propFeedIdentifier",
+ value: config.FFID,
+ });
+ }
+ const updateConfigPayload = {
+ id: `Dispatcher0-${config.format?.toLowerCase()}-constants`,
+ fields: fields,
+ };
+
+ const response = await fetch(`http://100.115.148.59/api/update-config`, {
+ method: "POST",
+ body: JSON.stringify(updateConfigPayload),
+ });
+ if (!response.ok) {
+ throw new Error("Network response was not ok");
+ }
+ return response.json();
+};
+
+export const useOptionalConstants = (format: string) => {
+ const optionalConstantsQuery = useQuery({
+ queryKey: ["optionalConstants", format],
+ queryFn: () => fetchOptionalConstants(format),
+ enabled: !!format && format !== "json",
+ });
+
+ const optionalConstantsMutation = useMutation({
+ mutationKey: ["postOptionalConstants"],
+ mutationFn: postOptionalConstants,
+ });
+ return { optionalConstantsQuery, optionalConstantsMutation };
+};
diff --git a/src/types/types.ts b/src/types/types.ts
index 4477f7a..cf5bbb7 100644
--- a/src/types/types.ts
+++ b/src/types/types.ts
@@ -76,11 +76,19 @@ export type DispatcherConfig = {
};
export type OptionalBOF2Constants = {
+ format?: string;
FFID?: string;
SCID?: string;
timestampSource?: string;
GPSFormat?: string;
};
+
+export type OptionalUTMCConstants = {
+ format?: string;
+ SCID?: string;
+ timestampSource?: string;
+ GPSFormat?: string;
+};
export type OptionalBOF2LaneIDs = {
laneId?: string;
LID1?: string;