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: (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 { 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, option?: IChoiceGroupOption ): void => this.props.onConflictResolutionPolicyModeChange( DataModels.ConflictResolutionMode[option.key as keyof typeof DataModels.ConflictResolutionMode] ); private onConflictResolutionPolicyPathChange = ( event: React.FormEvent, newValue?: string ): void => this.props.onConflictResolutionPolicyPathChange(newValue); private onConflictResolutionPolicyProcedureChange = ( event: React.FormEvent, newValue?: string ): void => this.props.onConflictResolutionPolicyProcedureChange(newValue); private getConflictResolutionModeComponent = (): JSX.Element => ( ); private onRenderLwwComponentTextField = (props: ITextFieldProps) => ( ); private getConflictResolutionLWWComponent = (): JSX.Element => ( ); private onRenderCustomComponentTextField = (props: ITextFieldProps) => ( ); private getConflictResolutionCustomComponent = (): JSX.Element => ( ); public render(): JSX.Element { return ( {this.getConflictResolutionModeComponent()} {this.props.conflictResolutionPolicyMode === DataModels.ConflictResolutionMode.LastWriterWins && this.getConflictResolutionLWWComponent()} {this.props.conflictResolutionPolicyMode === DataModels.ConflictResolutionMode.Custom && this.getConflictResolutionCustomComponent()} ); } }