-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix a crash of the report suites override section. #405
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -33,7 +33,7 @@ const FormikNumberField = ({ name, width, validate, ...otherProps }) => { | |
return ( | ||
<NumberField | ||
{...otherProps} | ||
value={value} | ||
value={value === "" ? null : value} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you provide an empty string to a Spectrum Number Field, it automatically converts that to 0. For keeping it empty, you need to provide a Formik on the other hand it, will complain if you initialize a field with That is what I added this change. |
||
onChange={(val) => { | ||
setValue(val).then(() => { | ||
setTouched(true); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The extension configuration was crashing because the instanceSettings was returned. The instance settings was containing keys that could potentially override other bridge method from different sections. We need to return an object that contains just the |
||
} | ||
|
||
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]) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here I clear the empty values of optional fields. Before, they were saved to the DB. |
||
delete streamingMedia[key]; | ||
} | ||
}); | ||
|
||
if (streamingMedia.channel && streamingMedia.playerName) { | ||
instanceSettings.streamingMedia = streamingMedia; | ||
} | ||
|
@@ -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) => | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you know a better way to make a field accept the number or an empty string, please let me know. |
||
/^\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"], | ||
), | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Schema was to relaxed. You could have saved an object without channel or playerName. You could have saved also other properties that were not defined.