Skip to content

Commit

Permalink
Changes to the media section in extension configuration.
Browse files Browse the repository at this point in the history
  • Loading branch information
dompuiu committed Jun 3, 2024
1 parent d808441 commit 93fecb3
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 33 deletions.
9 changes: 8 additions & 1 deletion scripts/helpers/createExtensionManifest.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,8 @@ const createExtensionManifest = ({ version }) => {
type: "integer",
},
},
required: ["channel", "playerName"],
additionalProperties: false,
},
personalizationStorageEnabled: {
type: "boolean",
Expand Down Expand Up @@ -1172,7 +1174,12 @@ const createExtensionManifest = ({ version }) => {
type: "array",
minItems: 1,
items: {
enum: ["analytics", "target", "audiencemanager", "audienceManager"]
enum: [
"analytics",
"target",
"audiencemanager",
"audienceManager",
],
},
required: ["name"],
additionalProperties: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const FormikNumberField = ({ name, width, validate, ...otherProps }) => {
return (
<NumberField
{...otherProps}
value={value}
value={value === "" ? null : value}
onChange={(val) => {
setValue(val).then(() => {
setTouched(true);
Expand Down
99 changes: 68 additions & 31 deletions src/view/configuration/streamingMediaSection.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,58 @@ governing permissions and limitations under the License.

import React from "react";
import PropTypes from "prop-types";
import { number, object, string } from "yup";
import { number, object, string, lazy } from "yup";
import { useField } from "formik";
import SectionHeader from "../components/sectionHeader";
import FormElementContainer from "../components/formElementContainer";
import FormikTextField from "../components/formikReactSpectrum3/formikTextField";
import FormikNumberField from "../components/formikReactSpectrum3/formikNumberField";
import isNonEmptyString from "../utils/isNonEmptyString";

const getDefaultSettings = () => {
return {
channel: "",
playerName: "",
appVersion: "",
adPingInterval: 10,
mainPingInterval: 10,
};
};
const getDefaultSettings = () => ({
channel: "",
playerName: "",
appVersion: "",
adPingInterval: 10,
mainPingInterval: 10,
});

export const bridge = {
getInstanceDefaults: () => ({
streamingMedia: getDefaultSettings(),
}),

getInitialInstanceValues: ({ instanceSettings }) => {
if (!instanceSettings.streamingMedia) {
instanceSettings.streamingMedia = getDefaultSettings();
return bridge.getInstanceDefaults();
}

return instanceSettings;
const streamingMedia = Object.keys(getDefaultSettings()).reduce(
(acc, k) => {
if (instanceSettings.streamingMedia[k] !== undefined) {
acc[k] = instanceSettings.streamingMedia[k];
} else {
acc[k] = "";
}

return acc;
},
{},
);

return { streamingMedia };
},

getInstanceSettings: ({ instanceValues }) => {
const instanceSettings = {};
const { streamingMedia } = instanceValues;

["appVersion", "adPingInterval", "mainPingInterval"].forEach((key) => {
if (!streamingMedia[key]) {
delete streamingMedia[key];
}
});

if (streamingMedia.channel && streamingMedia.playerName) {
instanceSettings.streamingMedia = streamingMedia;
}
Expand All @@ -66,25 +86,42 @@ export const bridge = {
"Please provide a player name for streaming media.",
),
}),
adPingInterval: number().when(["channel", "playerName"], {
is: (channel, playerName) => channel && playerName,
then: (schema) =>
schema
.min(1, "The Ad Ping Interval must be greater than 1 second.")
.max(10, "The Ad Ping Interval must be less than 10 seconds.")
.default(10),
}),
mainPingInterval: number().when(["channel", "playerName"], {
is: (channel, playerName) => channel && playerName,
then: (schema) =>
schema
.min(
10,
"The Main Ping Interval must be greater than 10 seconds.",
)
.max(60, "The Main Ping Interval must be less than 60 seconds.")
.default(10),
}),
adPingInterval: lazy((value) =>
/^\d+$/.exec(value)
? number().when(["channel", "playerName"], {
is: (channel, playerName) => channel && playerName,
then: (schema) =>
schema
.min(
1,
"The Ad Ping Interval must be greater than 1 second.",
)
.max(
10,
"The Ad Ping Interval must be less than 10 seconds.",
)
.default(10),
})
: string(),
),
mainPingInterval: lazy((value) =>
/^\d+$/.exec(value)
? number().when(["channel", "playerName"], {
is: (channel, playerName) => channel && playerName,
then: (schema) =>
schema
.min(
10,
"The Main Ping Interval must be greater than 10 seconds.",
)
.max(
60,
"The Main Ping Interval must be less than 60 seconds.",
)
.default(10),
})
: string(),
),
},
["channel", "playerName"],
),
Expand Down

0 comments on commit 93fecb3

Please sign in to comment.