mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-12-26 04:11:24 +00:00
* First dark theme commits for command bar * Updated theme on sidebar * Updated tabs, sidebar, splash screen * settings theme changes * Dark theme applied to Monaco editor * Dark theme to stored procedures * Fixed sidebar scroll * Updated scroll issue in sidebar * Command bar items fixed * Fixed lint errors * fixed lint errors * settings side panel fixed * Second last iteration for css * Fixed all the issues of css * Updated the theme icon for now on DE to change the theme from portal/DE itself * Formatting issue resolved * Remove CloudShellTerminalComponent changes - revert to master version * Fixed test issue * Fixed formatting issue * Fix tests: update snapshots and revert xterm imports for compatibility * Fix xterm imports in CloudShellTerminalComponent to use @xterm packages * Fix Cloud Shell component imports for compatibility * Update test snapshots * Fix xterm package consistency across all CloudShell components * Fix TypeScript compilation errors in CloudShell components and query Documents - Standardized xterm package imports across CloudShell components to use legacy 'xterm' package - Fixed Terminal type compatibility issues in CommonUtils.tsx - Added type casting for enableQueryControl property in queryDocuments.ts to handle Azure Cosmos SDK interface limitations - Applied code formatting to ensure consistency * Update failing snapshot tests - Updated TreeNodeComponent snapshot tests for loading states - Updated ThroughputInputAutoPilotV3Component snapshots for number formatting changes (10,00,000 -> 1,000,000) - All snapshot tests now pass * Fixed test issue * Fixed test issue * Updated the buttons for theme * Updated the Theme changes based on portal theme changes * Updated review comments * Updated the duplicate code and fixed the fabric react error * Few places styling added and resolving few comments * Fixed errors * Fixed comments * Fixed comments * Fixed comments * Fixed full text policy issue for mongoru accounts * Resolved comments for class Name and few others * Added css for homepage in ru accounts * Final commit with all the feedback issues resolved * Lint error resolved * Updated the review comments and few Ui issues * Resolved review comments and changed header bg and active state color * Moved svg code to different file and imported * css fixed for the hpome page boxed for ru account * Lint errors * Fixed boxes issue in ru accounts * Handled the initial theme from the portal * Updated snap * Update snapshots for TreeNodeComponent and CreateCopyJobScreensProvider tests * Fix duplicate DataExplorerRoot test id causing Playwright strict mode violation * Fix locale-dependent number formatting in ThroughputInputAutoPilotV3Component --------- Co-authored-by: Sakshi Gupta <sakshig+microsoft@microsoft.com> Co-authored-by: Sakshi Gupta <sakshig@microsoft.com>
223 lines
7.8 KiB
TypeScript
223 lines
7.8 KiB
TypeScript
import { ChoiceGroup, IChoiceGroupOption, ITextFieldProps, Stack, TextField } from "@fluentui/react";
|
|
import * as React from "react";
|
|
import * as DataModels from "../../../../Contracts/DataModels";
|
|
import * as ViewModels from "../../../../Contracts/ViewModels";
|
|
import {
|
|
conflictResolutionCustomToolTip,
|
|
conflictResolutionLwwTooltip,
|
|
getChoiceGroupStyles,
|
|
subComponentStackProps,
|
|
} from "../SettingsRenderUtils";
|
|
import { isDirty } from "../SettingsUtils";
|
|
import { ToolTipLabelComponent } from "./ToolTipLabelComponent";
|
|
|
|
export interface ConflictResolutionComponentProps {
|
|
collection: ViewModels.Collection;
|
|
conflictResolutionPolicyMode: DataModels.ConflictResolutionMode;
|
|
conflictResolutionPolicyModeBaseline: DataModels.ConflictResolutionMode;
|
|
onConflictResolutionPolicyModeChange: (newMode: DataModels.ConflictResolutionMode) => void;
|
|
conflictResolutionPolicyPath: string;
|
|
conflictResolutionPolicyPathBaseline: string;
|
|
|
|
onConflictResolutionPolicyPathChange: (newPath: string) => void;
|
|
conflictResolutionPolicyProcedure: string;
|
|
conflictResolutionPolicyProcedureBaseline: string;
|
|
|
|
onConflictResolutionPolicyProcedureChange: (newProcedure: 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 onConflictResolutionPolicyModeChange = (
|
|
event?: React.FormEvent<HTMLElement | HTMLInputElement>,
|
|
option?: IChoiceGroupOption,
|
|
): void =>
|
|
this.props.onConflictResolutionPolicyModeChange(
|
|
DataModels.ConflictResolutionMode[option.key as keyof typeof DataModels.ConflictResolutionMode],
|
|
);
|
|
|
|
private onConflictResolutionPolicyPathChange = (
|
|
event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>,
|
|
newValue?: string,
|
|
): void => this.props.onConflictResolutionPolicyPathChange(newValue);
|
|
|
|
private onConflictResolutionPolicyProcedureChange = (
|
|
event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>,
|
|
newValue?: string,
|
|
): void => this.props.onConflictResolutionPolicyProcedureChange(newValue);
|
|
|
|
private getConflictResolutionModeComponent = (): JSX.Element => (
|
|
<ChoiceGroup
|
|
label="Mode"
|
|
selectedKey={this.props.conflictResolutionPolicyMode}
|
|
options={this.conflictResolutionChoiceGroupOptions}
|
|
onChange={this.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={{
|
|
fieldGroup: {
|
|
height: 25,
|
|
width: 300,
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
borderColor: "var(--colorNeutralStroke1)",
|
|
selectors: {
|
|
":disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
borderColor: "var(--colorNeutralStroke1)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
input: {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground1)",
|
|
},
|
|
"input:disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
},
|
|
},
|
|
field: {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground1)",
|
|
selectors: {
|
|
":disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
},
|
|
},
|
|
subComponentStyles: {
|
|
label: {
|
|
root: {
|
|
color: "var(--colorNeutralForeground1)",
|
|
},
|
|
},
|
|
},
|
|
}}
|
|
value={this.props.conflictResolutionPolicyPath}
|
|
onChange={this.onConflictResolutionPolicyPathChange}
|
|
/>
|
|
);
|
|
|
|
private onRenderCustomComponentTextField = (props: ITextFieldProps) => (
|
|
<ToolTipLabelComponent label={props.label} toolTipElement={conflictResolutionCustomToolTip} />
|
|
);
|
|
|
|
private getConflictResolutionCustomComponent = (): JSX.Element => {
|
|
return (
|
|
<TextField
|
|
id="conflictResolutionCustomTextField"
|
|
label="Stored procedure"
|
|
onRenderLabel={this.onRenderCustomComponentTextField}
|
|
styles={{
|
|
fieldGroup: {
|
|
height: 25,
|
|
width: 300,
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
borderColor: "var(--colorNeutralStroke1)",
|
|
selectors: {
|
|
":disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
borderColor: "var(--colorNeutralStroke1)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
input: {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground1)",
|
|
},
|
|
"input:disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
},
|
|
},
|
|
field: {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground1)",
|
|
selectors: {
|
|
":disabled": {
|
|
backgroundColor: "var(--colorNeutralBackground2)",
|
|
color: "var(--colorNeutralForeground2)",
|
|
},
|
|
},
|
|
},
|
|
subComponentStyles: {
|
|
label: {
|
|
root: {
|
|
color: "var(--colorNeutralForeground1)",
|
|
},
|
|
},
|
|
},
|
|
}}
|
|
value={this.props.conflictResolutionPolicyProcedure}
|
|
onChange={this.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>
|
|
);
|
|
}
|
|
}
|