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, getTextFieldStyles, 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 { 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()} ); } }