fix log settings menu bug

pull/1561/head
gabrielburnworth 2019-11-06 09:00:40 -08:00
parent 3495cf9cf6
commit 212fa65a4e
2 changed files with 58 additions and 21 deletions

View File

@ -36,6 +36,20 @@ describe("<LogsSettingsMenu />", () => {
expect(wrapper.text().toLowerCase()).toContain(string));
});
it("doesn't update", () => {
const p = fakeProps();
p.sourceFbosConfig = () => ({ value: false, consistent: true });
const wrapper = mount<LogsSettingsMenu>(<LogsSettingsMenu {...p} />);
expect(wrapper.instance().shouldComponentUpdate(p)).toBeFalsy();
});
it("updates", () => {
const p = fakeProps();
p.sourceFbosConfig = () => ({ value: true, consistent: true });
const wrapper = mount<LogsSettingsMenu>(<LogsSettingsMenu {...p} />);
expect(wrapper.instance().shouldComponentUpdate(fakeProps())).toBeTruthy();
});
function testSettingToggle(setting: ConfigurationName, position: number) {
it("toggles setting", () => {
const p = fakeProps();
@ -66,4 +80,15 @@ describe("<LogsSettingsMenu />", () => {
wrapper.find("button").at(0).simulate("click");
expect(setFilterLevel).not.toHaveBeenCalled();
});
it("doesn't change filter levels", () => {
const p = fakeProps();
p.sourceFbosConfig = () => ({ value: true, consistent: true });
const setFilterLevel = jest.fn();
p.setFilterLevel = () => setFilterLevel;
const wrapper = mount(<LogsSettingsMenu {...p} />);
mockStorj[NumericSetting.busy_log] = 0;
wrapper.find("button").at(0).simulate("click");
expect(setFilterLevel).not.toHaveBeenCalled();
});
});

View File

@ -52,6 +52,9 @@ const FIRMWARE_LOG_SETTINGS = (): LogSettingRecord[] => [
},
];
const LOG_SETTING_NAMES = SEQUENCE_LOG_SETTINGS().map(s => s.setting)
.concat(FIRMWARE_LOG_SETTINGS().map(s => s.setting));
const LogSetting = (props: LogSettingProps) => {
const { label, setting, toolTip, setFilterLevel, sourceFbosConfig } = props;
/** Update the current filter level to a minimum needed for log display. */
@ -65,7 +68,7 @@ const LogSetting = (props: LogSettingProps) => {
<label>
{t(label)}
</label>
<Help text={t(toolTip)} position={Position.LEFT_TOP}/>
<Help text={t(toolTip)} position={Position.LEFT_TOP} requireClick={true} />
<ToggleButton
toggleValue={config.value}
dim={!config.consistent}
@ -93,23 +96,32 @@ const LogSetting = (props: LogSettingProps) => {
</fieldset>;
};
export const LogsSettingsMenu = (props: LogsSettingsMenuProps) => {
const { setFilterLevel, sourceFbosConfig, getConfigValue } = props;
const LogSettingRow = (settingProps: LogSettingRecord) => {
const { label, setting, tooltip } = settingProps;
return <LogSetting
label={label}
setting={setting}
toolTip={tooltip}
setFilterLevel={setFilterLevel}
dispatch={props.dispatch}
sourceFbosConfig={sourceFbosConfig}
getConfigValue={getConfigValue} />;
};
return <div className={"logs-settings-menu"}>
{t("Sequence logs:")}
{SEQUENCE_LOG_SETTINGS().map(p => <LogSettingRow key={p.setting} {...p} />)}
{t("Firmware logs:")}
{FIRMWARE_LOG_SETTINGS().map(p => <LogSettingRow key={p.setting} {...p} />)}
</div>;
};
export class LogsSettingsMenu extends React.Component<LogsSettingsMenuProps> {
shouldComponentUpdate(nextProps: LogsSettingsMenuProps) {
const data = (props: LogsSettingsMenuProps) =>
JSON.stringify(LOG_SETTING_NAMES.map(s => props.sourceFbosConfig(s)));
return data(nextProps) !== data(this.props);
}
render() {
const { setFilterLevel, sourceFbosConfig, getConfigValue } = this.props;
const LogSettingRow = (settingProps: LogSettingRecord) => {
const { label, setting, tooltip } = settingProps;
return <LogSetting
label={label}
setting={setting}
toolTip={tooltip}
setFilterLevel={setFilterLevel}
dispatch={this.props.dispatch}
sourceFbosConfig={sourceFbosConfig}
getConfigValue={getConfigValue} />;
};
return <div className={"logs-settings-menu"}>
{t("Sequence logs:")}
{SEQUENCE_LOG_SETTINGS().map(p => <LogSettingRow key={p.setting} {...p} />)}
{t("Firmware logs:")}
{FIRMWARE_LOG_SETTINGS().map(p => <LogSettingRow key={p.setting} {...p} />)}
</div>;
}
}