mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-25 20:01:45 +00:00
* added SettingsV2 Tab * lint changes * foxed failing test * Addressed PR comments - removed dangerouslySetInnerHtml - removed underscore dependency - added AccessibleElement - removed unnecesary exceptions to linting * split render into separate functions - removed sinon in test - Added some enums to replace constant strings - removed dangerously set inner html - made autopilot input as StatefulValue * add settingscomponent snapshot * fixed linting errors * fixed errors * addressed PR comments - Moved StatefulValue to new class - Split render to more functions for throughputInputComponents * Added sub components - Added tests for SettingsRenderUtls - Added empty test files for adding tests later * Moved all inputs to fluent UI - removed rupm - added reusable styles * Added Tabs - Added ToolTipLabel component - Removed toggleables for individual components - Removed accessible elements - Added IndexingPolicyComponent * Added more tests * Addressed PR comments * Moved Label radio buttons to choicegroup * fixed lint errors * Removed StatefulValue - Moved conflict res tab to the end - Added styling for autpilot radiobuttons * fixed linting errors * fix bugs from merge to master * fixed formatting issue * Addressed PR comments - Added unit tests for smaller methods within each component * fixed linting errors * removed redundant snapshots * removed empty line * made separate props objects for subcomponents * Moved dirty checks to sub components * Made indesing policy component height = 80% of view port - modified auto pilot v3 messages - Added Fluent UI tolltip - * Moved warning messages inline * moved conflict res helpers out * fixed bugs * added stack style for message * fixed tests * Added tests * fixed linting and format errors * undid changes * more edits * fixed compile errors * fixed compile errors * fixed errors * fixed bug with save and discard buttons * fixed compile errors * addressed PR comments
143 lines
5.0 KiB
TypeScript
143 lines
5.0 KiB
TypeScript
import * as React from "react";
|
|
import * as ViewModels from "../../../../Contracts/ViewModels";
|
|
import * as DataModels from "../../../../Contracts/DataModels";
|
|
import Explorer from "../../../Explorer";
|
|
import {
|
|
getTextFieldStyles,
|
|
conflictResolutionLwwTooltip,
|
|
conflictResolutionCustomToolTip,
|
|
subComponentStackProps,
|
|
getChoiceGroupStyles
|
|
} from "../SettingsRenderUtils";
|
|
import { TextField, ITextFieldProps, Stack, IChoiceGroupOption, ChoiceGroup } from "office-ui-fabric-react";
|
|
import { ToolTipLabelComponent } from "./ToolTipLabelComponent";
|
|
import { isDirty } from "../SettingsUtils";
|
|
|
|
export interface ConflictResolutionComponentProps {
|
|
collection: ViewModels.Collection;
|
|
container: Explorer;
|
|
conflictResolutionPolicyMode: DataModels.ConflictResolutionMode;
|
|
conflictResolutionPolicyModeBaseline: DataModels.ConflictResolutionMode;
|
|
onConflictResolutionPolicyModeChange: (
|
|
event?: React.FormEvent<HTMLElement | HTMLInputElement>,
|
|
option?: IChoiceGroupOption
|
|
) => void;
|
|
conflictResolutionPolicyPath: string;
|
|
conflictResolutionPolicyPathBaseline: string;
|
|
|
|
onConflictResolutionPolicyPathChange: (
|
|
event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>,
|
|
newValue?: string
|
|
) => void;
|
|
conflictResolutionPolicyProcedure: string;
|
|
conflictResolutionPolicyProcedureBaseline: string;
|
|
|
|
onConflictResolutionPolicyProcedureChange: (
|
|
event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>,
|
|
newValue?: string
|
|
) => void;
|
|
onConflictResolutionDirtyChange: (isConflictResolutionDirty: boolean) => void;
|
|
}
|
|
|
|
export class ConflictResolutionComponent extends React.Component<ConflictResolutionComponentProps> {
|
|
private shouldCheckComponentIsDirty = true;
|
|
private conflictResolutionChoiceGroupOptions: IChoiceGroupOption[] = [
|
|
{
|
|
key: DataModels.ConflictResolutionMode.LastWriterWins,
|
|
text: "Last Write Wins (default)"
|
|
},
|
|
{ key: DataModels.ConflictResolutionMode.Custom, text: "Merge Procedure (custom)" }
|
|
];
|
|
|
|
componentDidMount(): void {
|
|
this.onComponentUpdate();
|
|
}
|
|
|
|
componentDidUpdate(): void {
|
|
this.onComponentUpdate();
|
|
}
|
|
|
|
private onComponentUpdate = (): void => {
|
|
if (!this.shouldCheckComponentIsDirty) {
|
|
this.shouldCheckComponentIsDirty = true;
|
|
return;
|
|
}
|
|
this.props.onConflictResolutionDirtyChange(this.IsComponentDirty());
|
|
this.shouldCheckComponentIsDirty = false;
|
|
};
|
|
|
|
public IsComponentDirty = (): boolean => {
|
|
if (
|
|
isDirty(this.props.conflictResolutionPolicyMode, this.props.conflictResolutionPolicyModeBaseline) ||
|
|
isDirty(this.props.conflictResolutionPolicyPath, this.props.conflictResolutionPolicyPathBaseline) ||
|
|
isDirty(this.props.conflictResolutionPolicyProcedure, this.props.conflictResolutionPolicyProcedureBaseline)
|
|
) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
private getConflictResolutionModeComponent = (): JSX.Element => (
|
|
<ChoiceGroup
|
|
label="Mode"
|
|
selectedKey={this.props.conflictResolutionPolicyMode}
|
|
options={this.conflictResolutionChoiceGroupOptions}
|
|
onChange={this.props.onConflictResolutionPolicyModeChange}
|
|
styles={getChoiceGroupStyles(
|
|
this.props.conflictResolutionPolicyMode,
|
|
this.props.conflictResolutionPolicyModeBaseline
|
|
)}
|
|
/>
|
|
);
|
|
|
|
private onRenderLwwComponentTextField = (props: ITextFieldProps) => (
|
|
<ToolTipLabelComponent label={props.label} toolTipElement={conflictResolutionLwwTooltip} />
|
|
);
|
|
|
|
private getConflictResolutionLWWComponent = (): JSX.Element => (
|
|
<TextField
|
|
id="conflictResolutionLwwTextField"
|
|
label={"Conflict Resolver Property"}
|
|
onRenderLabel={this.onRenderLwwComponentTextField}
|
|
styles={getTextFieldStyles(
|
|
this.props.conflictResolutionPolicyPath,
|
|
this.props.conflictResolutionPolicyPathBaseline
|
|
)}
|
|
value={this.props.conflictResolutionPolicyPath}
|
|
onChange={this.props.onConflictResolutionPolicyPathChange}
|
|
/>
|
|
);
|
|
|
|
private onRenderCustomComponentTextField = (props: ITextFieldProps) => (
|
|
<ToolTipLabelComponent label={props.label} toolTipElement={conflictResolutionCustomToolTip} />
|
|
);
|
|
|
|
private getConflictResolutionCustomComponent = (): JSX.Element => (
|
|
<TextField
|
|
id="conflictResolutionCustomTextField"
|
|
label="Stored procedure"
|
|
onRenderLabel={this.onRenderCustomComponentTextField}
|
|
styles={getTextFieldStyles(
|
|
this.props.conflictResolutionPolicyProcedure,
|
|
this.props.conflictResolutionPolicyProcedureBaseline
|
|
)}
|
|
value={this.props.conflictResolutionPolicyProcedure}
|
|
onChange={this.props.onConflictResolutionPolicyProcedureChange}
|
|
/>
|
|
);
|
|
|
|
public render(): JSX.Element {
|
|
return (
|
|
<Stack {...subComponentStackProps}>
|
|
{this.getConflictResolutionModeComponent()}
|
|
|
|
{this.props.conflictResolutionPolicyMode === DataModels.ConflictResolutionMode.LastWriterWins &&
|
|
this.getConflictResolutionLWWComponent()}
|
|
|
|
{this.props.conflictResolutionPolicyMode === DataModels.ConflictResolutionMode.Custom &&
|
|
this.getConflictResolutionCustomComponent()}
|
|
</Stack>
|
|
);
|
|
}
|
|
}
|