From 3935339ba8187f3ff0be3c594b714fb79a6baa80 Mon Sep 17 00:00:00 2001 From: naronchen Date: Thu, 12 Jun 2025 11:40:30 -0400 Subject: [PATCH 01/15] NVtable persists --- .../NamedVersionSelector.tsx | 219 +++++++++++------- .../src/VersionCompareContext.tsx | 1 + .../src/api/VersionCompareManager.ts | 2 +- .../src/widgets/NamedVersionOpenedContext.tsx | 8 + 4 files changed, 150 insertions(+), 80 deletions(-) create mode 100644 packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index c89cf9f2..cb04b9c9 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -63,6 +63,7 @@ export function NamedVersionSelectorWidget(props: Readonly { const cleanup = [ @@ -86,20 +87,66 @@ export function NamedVersionSelectorWidget(props: Readonly(null); - if (!isComparing) { - return ( - - ); - } + const onNamedVersionOpened = async (targetVersion?: NamedVersionEntry) => { + // manager.targetVersion = targetVersion?.namedVersion; + if (!targetVersion || !currentNamedVersion || targetVersion.job?.status !== "Completed") { + return; + } + + await runManagerStartComparisonV2({ + comparisonJob: { + comparisonJob: { + status: "Completed", + jobId: targetVersion.job.jobId, + iTwinId, + iModelId, + startChangesetId: currentChangesetId, + endChangesetId: targetVersion.namedVersion.targetChangesetId ?? "", + comparison: { + href: targetVersion.job.comparisonUrl, + }, + }, + }, + comparisonJobClient, + iModelConnection: iModel, + targetVersion: targetVersion.namedVersion, + currentVersion: currentNamedVersion, + getToastsEnabled: () => true, + iModelsClient, + }); + // manager.versionCompareStopped.addOnce(() => {}); @naron: need to test on versionCompareStopped + }; + + // if (!isComparing) { + // return ( + // + // ); + // } return ( @@ -110,6 +157,14 @@ export function NamedVersionSelectorWidget(props: Readonly {t("VersionCompare:versionCompare.versionPickerTitle")} + + { + // @naron: what does this do?? + !isComparing && manager.currentVersion && + + } + + {isComparing &&
-
+ } + - - {(value) => ( - - {props.manager?.currentVersion && isComparisonStarted && - } - - - )} - + { + currentNamedVersion && + + } + + { + !isComparing && + + } + + { + isComparing && + + {(value) => ( + + + + )} + + } +
); } @@ -171,6 +251,7 @@ function LoadedState(props: Readonly): ReactElement { ); } +// @naron: is all of these needed? type NamedVersionSelectorContentProps = { isLoading: boolean; entries: NamedVersionEntry[]; @@ -204,6 +285,11 @@ function NamedVersionSelectorContent( interface NamedVersionSelectorProps { iModel: IModelConnection; manager: VersionCompareManager; + isLoading: boolean; + currentNamedVersion: NamedVersion | undefined; + entries: NamedVersionEntry[]; + updateJobStatus: ReturnType["updateJobStatus"]; + onNamedVersionOpened: (version: NamedVersionEntry) => void; emptyState?: ReactNode; manageVersions?: ReactNode; feedbackUrl?: string; @@ -211,53 +297,38 @@ interface NamedVersionSelectorProps { } function NamedVersionSelector(props: Readonly): ReactElement { - const { iModelsClient, comparisonJobClient } = useVersionCompare(); - if (!comparisonJobClient) { - throw new Error("V2 Client is not initialized in given context."); - } - const { iModel, manager, emptyState, manageVersions, feedbackUrl } = props; + const { + iModel, + isLoading, + currentNamedVersion, + entries, + updateJobStatus, + onNamedVersionOpened, + emptyState, + manageVersions, + feedbackUrl } = props; + //@naron: this is repeated also const iTwinId = iModel.iTwinId as string; const iModelId = iModel.iModelId as string; - const currentChangesetId = iModel.changeset.id; - const { isLoading, currentNamedVersion, entries, updateJobStatus } = useNamedVersionsList({ - iTwinId, - iModelId, - currentChangesetId, - }); + // const [currentSillyVersion, setCurrentSillyVersion] = useState({ + // id: "", + // displayName: "", + // description: "", + // changesetId: currentChangesetId, + // changesetIndex: 0, + // description: "", + // createdDateTime: "", + // }); - const [openedVersion, setOpenedVersion] = useState(manager.targetVersion); - const onNamedVersionOpened = async (targetVersion?: NamedVersionEntry) => { - setOpenedVersion(targetVersion?.namedVersion); - if (!targetVersion || !currentNamedVersion || targetVersion.job?.status !== "Completed") { - return; - } + // useEffect(() => { + // if (currentNamedVersion){ + // setCurrentSillyVersion(currentNamedVersion) + // } + // },[currentNamedVersion]) - await runManagerStartComparisonV2({ - comparisonJob: { - comparisonJob: { - status: "Completed", - jobId: targetVersion.job.jobId, - iTwinId, - iModelId, - startChangesetId: currentChangesetId, - endChangesetId: targetVersion.namedVersion.targetChangesetId ?? "", - comparison: { - href: targetVersion.job.comparisonUrl, - }, - }, - }, - comparisonJobClient, - iModelConnection: iModel, - targetVersion: targetVersion.namedVersion, - currentVersion: currentNamedVersion, - getToastsEnabled: () => true, - iModelsClient, - }); - manager.versionCompareStopped.addOnce(() => setOpenedVersion(undefined)); - }; const namedVersionSelectorProps: Readonly = { isLoading, @@ -272,22 +343,12 @@ function NamedVersionSelector(props: Readonly): React }; return ( - - - - {t("VersionCompare:versionCompare.versionPickerTitle")} - - {currentNamedVersion && } - - { - currentNamedVersion && - - } + <>
{feedbackUrl && }
-
+ ); } diff --git a/packages/changed-elements-react/src/VersionCompareContext.tsx b/packages/changed-elements-react/src/VersionCompareContext.tsx index ad0271b7..3d78c66c 100644 --- a/packages/changed-elements-react/src/VersionCompareContext.tsx +++ b/packages/changed-elements-react/src/VersionCompareContext.tsx @@ -57,3 +57,4 @@ export interface VersionCompareContextValue { } const versionCompareContext = createContext(undefined); + diff --git a/packages/changed-elements-react/src/api/VersionCompareManager.ts b/packages/changed-elements-react/src/api/VersionCompareManager.ts index a45f8a81..91dcc5fb 100644 --- a/packages/changed-elements-react/src/api/VersionCompareManager.ts +++ b/packages/changed-elements-react/src/api/VersionCompareManager.ts @@ -449,7 +449,7 @@ export class VersionCompareManager { this.progressCoordinator.updateProgress(VersionCompareProgressStage.OpenTargetImodel, 100); - // Keep metadata around for UI uses and other queries + // // Keep metadata around for UI uses and other queries this.currentVersion = currentVersion; this.targetVersion = targetVersion; diff --git a/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx b/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx new file mode 100644 index 00000000..5c5dbd04 --- /dev/null +++ b/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx @@ -0,0 +1,8 @@ +import { createContext } from "react"; +import { VersionCompareContextValue } from "../VersionCompareContext.js"; +import { NamedVersionEntry } from "../NamedVersionSelector/useNamedVersionsList.js"; + +export const NamedVersionContext = createContext void; +}>(null!); +//@naron: do i need this? From 8b691fcd32ec532e495654aacd8739e74f57257f Mon Sep 17 00:00:00 2001 From: naronchen Date: Thu, 12 Jun 2025 14:31:56 -0400 Subject: [PATCH 02/15] info button stick during loading --- .../NamedVersionSelector.tsx | 80 ++++--------------- .../src/api/VersionCompareManager.ts | 6 -- .../common/versionCompareV2WidgetUtils.ts | 1 - 3 files changed, 15 insertions(+), 72 deletions(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index cb04b9c9..0bfc7dd2 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -103,10 +103,11 @@ export function NamedVersionSelectorWidget(props: Readonly(null); const onNamedVersionOpened = async (targetVersion?: NamedVersionEntry) => { - // manager.targetVersion = targetVersion?.namedVersion; + manager.targetVersion = targetVersion?.namedVersion; if (!targetVersion || !currentNamedVersion || targetVersion.job?.status !== "Completed") { return; } @@ -135,19 +136,6 @@ export function NamedVersionSelectorWidget(props: Readonly {}); @naron: need to test on versionCompareStopped }; - // if (!isComparing) { - // return ( - // - // ); - // } - return ( @@ -159,12 +147,11 @@ export function NamedVersionSelectorWidget(props: Readonly { - // @naron: what does this do?? - !isComparing && manager.currentVersion && + !isComparisonStarted && } - {isComparing && + {isComparisonStarted &&
): ReactElement { - - const { - iModel, - isLoading, - currentNamedVersion, - entries, - updateJobStatus, - onNamedVersionOpened, - emptyState, - manageVersions, - feedbackUrl } = props; - - //@naron: this is repeated also - const iTwinId = iModel.iTwinId as string; - const iModelId = iModel.iModelId as string; - - // const [currentSillyVersion, setCurrentSillyVersion] = useState({ - // id: "", - // displayName: "", - // description: "", - // changesetId: currentChangesetId, - // changesetIndex: 0, - // description: "", - // createdDateTime: "", - // }); - - // useEffect(() => { - // if (currentNamedVersion){ - // setCurrentSillyVersion(currentNamedVersion) - // } - // },[currentNamedVersion]) - - - const namedVersionSelectorProps: Readonly = { - isLoading, - currentNamedVersion, - entries, - iTwinId, - iModelId, - onNamedVersionOpened, - updateJobStatus, - emptyState, - manageVersions, - }; - +function NamedVersionSelector({ + iModel: { iTwinId, iModelId }, + feedbackUrl, + ...rest +}: Readonly): ReactElement { return ( <> - +
{feedbackUrl && }
diff --git a/packages/changed-elements-react/src/api/VersionCompareManager.ts b/packages/changed-elements-react/src/api/VersionCompareManager.ts index 91dcc5fb..e75696c8 100644 --- a/packages/changed-elements-react/src/api/VersionCompareManager.ts +++ b/packages/changed-elements-react/src/api/VersionCompareManager.ts @@ -417,7 +417,6 @@ export class VersionCompareManager { */ public async startComparisonV2( currentIModel: IModelConnection, - currentVersion: NamedVersion, targetVersion: NamedVersion, changedElements: ChangedElements[], ): Promise { @@ -448,11 +447,6 @@ export class VersionCompareManager { ); this.progressCoordinator.updateProgress(VersionCompareProgressStage.OpenTargetImodel, 100); - - // // Keep metadata around for UI uses and other queries - this.currentVersion = currentVersion; - this.targetVersion = targetVersion; - this.progressCoordinator.updateProgress(VersionCompareProgressStage.InitComparison); let wantedModelClasses = [ diff --git a/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts b/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts index 212d78c5..bba6dc11 100644 --- a/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts +++ b/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts @@ -44,7 +44,6 @@ export const runManagerStartComparisonV2 = async (args: ManagerStartComparisonV2 const changedElements = await args.comparisonJobClient.getComparisonJobResult(args.comparisonJob); VersionCompare.manager?.startComparisonV2( args.iModelConnection, - args.currentVersion, await updateTargetVersion(args.iModelConnection, args.targetVersion, args.iModelsClient), [changedElements.changedElements]).catch((e) => { Logger.logError(VersionCompare.logCategory, "Could not start version comparison: " + e); From 5e9a44e822efd60c3a12bd53ff0a8365345c7ddb Mon Sep 17 00:00:00 2001 From: naronchen Date: Thu, 12 Jun 2025 17:49:31 -0400 Subject: [PATCH 03/15] useContext --- .../NamedVersionSelector.tsx | 66 ++++++------------- .../NamedVersionSelectorContext.tsx | 5 ++ .../src/widgets/NamedVersionOpenedContext.tsx | 8 --- 3 files changed, 25 insertions(+), 54 deletions(-) delete mode 100644 packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index 0bfc7dd2..1d9695e2 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -26,7 +26,7 @@ import { runManagerStartComparisonV2 } from "../widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.js"; import { IconEx } from "./IconEx.js"; -import { namedVersionSelectorContext } from "./NamedVersionSelectorContext.js"; +import { NamedVersionSelectorContentContext, namedVersionSelectorContext } from "./NamedVersionSelectorContext.js"; import { Sticky } from "./Sticky.js"; import { TextEx } from "./TextEx.js"; import { useComparisonJobs } from "./useComparisonJobs.js"; @@ -87,7 +87,6 @@ export function NamedVersionSelectorWidget(props: Readonly true, iModelsClient, }); - // manager.versionCompareStopped.addOnce(() => {}); @naron: need to test on versionCompareStopped }; return ( @@ -175,7 +173,8 @@ export function NamedVersionSelectorWidget(props: Readonly & { currentNamedVersion: NamedVersion; }; - -function LoadedState(props: Readonly): ReactElement { - return ( - - ); -} - -// @naron: is all of these needed? -type NamedVersionSelectorContentProps = { +export type NamedVersionSelectorContentProps = { isLoading: boolean; entries: NamedVersionEntry[]; currentNamedVersion: NamedVersion | undefined; @@ -251,9 +238,8 @@ type NamedVersionSelectorContentProps = { manageVersions?: ReactNode; }; -function NamedVersionSelectorContent( - props: Readonly, -): ReactElement { +function NamedVersionSelectorContent(): ReactElement { + const props = useContext(NamedVersionSelectorContentContext); if (!props.isLoading && props.entries.length === 0) { return ; } @@ -263,14 +249,13 @@ function NamedVersionSelectorContent( } return ( - + ); } interface NamedVersionSelectorProps { - iModel: IModelConnection; + iTwinId: string; + iModelId: string; manager: VersionCompareManager; isLoading: boolean; currentNamedVersion: NamedVersion | undefined; @@ -284,21 +269,16 @@ interface NamedVersionSelectorProps { } function NamedVersionSelector({ - iModel: { iTwinId, iModelId }, feedbackUrl, ...rest }: Readonly): ReactElement { return ( - <> - + +
{feedbackUrl && }
- +
); } @@ -405,18 +385,7 @@ function PlaceholderNamedVersionInfo(): ReactElement { ); } -interface NamedVersionSelectorLoadedProps { - iTwinId: string; - iModelId: string; - currentNamedVersion: NamedVersion; - entries: NamedVersionEntry[]; - updateJobStatus: ReturnType["updateJobStatus"]; - onNamedVersionOpened: (version: NamedVersionEntry) => void; - emptyState?: ReactNode; - manageVersions?: ReactNode; -} - -function NamedVersionSelectorLoaded(props: Readonly): ReactElement { +function NamedVersionSelectorLoaded(): ReactElement { const { iTwinId, iModelId, @@ -425,7 +394,12 @@ function NamedVersionSelectorLoaded(props: Readonly; + } const { queryJobStatus, startJob } = useComparisonJobs({ iTwinId, @@ -529,7 +503,7 @@ function NamedVersionSelectorLoaded(props: Readonly { - props.entries.map((entry) => ( + entries.map((entry) => ( )) } diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx index bd3198c2..719b2e46 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx @@ -5,6 +5,7 @@ import { createContext } from "react"; import type { NamedVersionEntry } from "./useNamedVersionsList.js"; +import { NamedVersionSelectorContentProps } from "./NamedVersionSelector.js"; export interface NamedVersionSelectorContextValue { /** Invoked when users request Named Version processinig. */ @@ -42,3 +43,7 @@ export const namedVersionSelectorContext = createContext ({ cancel: () => { } }), contextExists: false, }); + +export const NamedVersionSelectorContentContext = createContext( + {} as NamedVersionSelectorContentProps +) diff --git a/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx b/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx deleted file mode 100644 index 5c5dbd04..00000000 --- a/packages/changed-elements-react/src/widgets/NamedVersionOpenedContext.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { createContext } from "react"; -import { VersionCompareContextValue } from "../VersionCompareContext.js"; -import { NamedVersionEntry } from "../NamedVersionSelector/useNamedVersionsList.js"; - -export const NamedVersionContext = createContext void; -}>(null!); -//@naron: do i need this? From 3d8fe70dbf57c687982c4ed9b6a15e2e526d4bbc Mon Sep 17 00:00:00 2001 From: naronchen Date: Fri, 13 Jun 2025 12:03:09 -0400 Subject: [PATCH 04/15] move NamedVersionSelectorContentProps --- .../NamedVersionSelector.tsx | 12 ------------ .../NamedVersionSelectorContext.tsx | 18 +++++++++++++++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index 1d9695e2..fb3cdd94 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -226,18 +226,6 @@ function LoadingState(): ReactElement { ); } -export type NamedVersionSelectorContentProps = { - isLoading: boolean; - entries: NamedVersionEntry[]; - currentNamedVersion: NamedVersion | undefined; - iTwinId: string; - iModelId: string; - onNamedVersionOpened: (version: NamedVersionEntry) => void; - updateJobStatus: ReturnType["updateJobStatus"]; - emptyState?: ReactNode; - manageVersions?: ReactNode; -}; - function NamedVersionSelectorContent(): ReactElement { const props = useContext(NamedVersionSelectorContentContext); if (!props.isLoading && props.entries.length === 0) { diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx index 719b2e46..5c08f5f2 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx @@ -2,10 +2,10 @@ * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ -import { createContext } from "react"; +import { createContext, ReactNode } from "react"; -import type { NamedVersionEntry } from "./useNamedVersionsList.js"; -import { NamedVersionSelectorContentProps } from "./NamedVersionSelector.js"; +import type { NamedVersionEntry, useNamedVersionsList } from "./useNamedVersionsList.js"; +import { NamedVersion } from "../clients/iModelsClient.js"; export interface NamedVersionSelectorContextValue { /** Invoked when users request Named Version processinig. */ @@ -44,6 +44,18 @@ export const namedVersionSelectorContext = createContext void; + updateJobStatus: ReturnType["updateJobStatus"]; + emptyState?: ReactNode; + manageVersions?: ReactNode; +}; + export const NamedVersionSelectorContentContext = createContext( {} as NamedVersionSelectorContentProps ) From bfa9fd07e9926ac4b41e4c84f610bd151d3ddf6f Mon Sep 17 00:00:00 2001 From: naronchen Date: Fri, 13 Jun 2025 12:40:39 -0400 Subject: [PATCH 05/15] omit isloading --- .../NamedVersionSelector.tsx | 26 ++++++++++--------- .../NamedVersionSelectorContext.tsx | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index fb3cdd94..6c8faa4d 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -26,7 +26,7 @@ import { runManagerStartComparisonV2 } from "../widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.js"; import { IconEx } from "./IconEx.js"; -import { NamedVersionSelectorContentContext, namedVersionSelectorContext } from "./NamedVersionSelectorContext.js"; +import { NamedVersionSelectorContentContext, NamedVersionSelectorContentProps, namedVersionSelectorContext } from "./NamedVersionSelectorContext.js"; import { Sticky } from "./Sticky.js"; import { TextEx } from "./TextEx.js"; import { useComparisonJobs } from "./useComparisonJobs.js"; @@ -227,17 +227,22 @@ function LoadingState(): ReactElement { } function NamedVersionSelectorContent(): ReactElement { - const props = useContext(NamedVersionSelectorContentContext); - if (!props.isLoading && props.entries.length === 0) { + const ctx = useContext(NamedVersionSelectorContentContext); + if (!ctx.isLoading && ctx.entries.length === 0) { return ; } - if (!props.currentNamedVersion || (props.isLoading && props.entries.length === 0)) { + if (!ctx.currentNamedVersion || (ctx.isLoading && ctx.entries.length === 0)) { return ; } + const { isLoading, currentNamedVersion, ...restProps } = ctx; + return ( - + ); } @@ -373,7 +378,9 @@ function PlaceholderNamedVersionInfo(): ReactElement { ); } -function NamedVersionSelectorLoaded(): ReactElement { +type LoadedStateProps = Omit & { currentNamedVersion: NamedVersion; }; + +function NamedVersionSelectorLoaded(props: LoadedStateProps): ReactElement { const { iTwinId, iModelId, @@ -382,12 +389,7 @@ function NamedVersionSelectorLoaded(): ReactElement { updateJobStatus, onNamedVersionOpened, manageVersions, - } = useContext(NamedVersionSelectorContentContext); - - // @naron: this is a bit of a hack, this will never be null at this stage. Not sure whats a better way to handle this - if (!currentNamedVersion) { - return ; - } + } = props; const { queryJobStatus, startJob } = useComparisonJobs({ iTwinId, diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx index 5c08f5f2..9ef8765a 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx @@ -44,7 +44,7 @@ export const namedVersionSelectorContext = createContext Date: Fri, 13 Jun 2025 12:56:00 -0400 Subject: [PATCH 06/15] flatten NamedVersionSelector --- .../NamedVersionSelector.tsx | 71 ++++++------------- 1 file changed, 22 insertions(+), 49 deletions(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index 6c8faa4d..a73589b9 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -102,7 +102,7 @@ export function NamedVersionSelectorWidget(props: Readonly(null); const onNamedVersionOpened = async (targetVersion?: NamedVersionEntry) => { @@ -172,20 +172,24 @@ export function NamedVersionSelectorWidget(props: Readonly + + +
+ {feedbackUrl && } +
+
} { @@ -227,17 +231,15 @@ function LoadingState(): ReactElement { } function NamedVersionSelectorContent(): ReactElement { - const ctx = useContext(NamedVersionSelectorContentContext); - if (!ctx.isLoading && ctx.entries.length === 0) { + const { isLoading, currentNamedVersion, ...restProps } = useContext(NamedVersionSelectorContentContext); + if (isLoading && restProps.entries.length === 0) { return ; } - if (!ctx.currentNamedVersion || (ctx.isLoading && ctx.entries.length === 0)) { + if (!currentNamedVersion || (isLoading && restProps.entries.length === 0)) { return ; } - const { isLoading, currentNamedVersion, ...restProps } = ctx; - return ( ["updateJobStatus"]; - onNamedVersionOpened: (version: NamedVersionEntry) => void; - emptyState?: ReactNode; - manageVersions?: ReactNode; - feedbackUrl?: string; - documentationHref?: string; -} - -function NamedVersionSelector({ - feedbackUrl, - ...rest -}: Readonly): ReactElement { - return ( - - -
- {feedbackUrl && } -
-
- ); -} - interface WidgetProps { children?: ReactNode; } From 5f710dbebc01ea173706628e8b4ae8b6cda21a7c Mon Sep 17 00:00:00 2001 From: naronchen Date: Fri, 13 Jun 2025 12:57:42 -0400 Subject: [PATCH 07/15] lint --- .../src/NamedVersionSelector/NamedVersionSelector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index a73589b9..8382d1ec 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -57,7 +57,7 @@ export function NamedVersionSelectorWidget(props: Readonly Date: Fri, 13 Jun 2025 13:02:49 -0400 Subject: [PATCH 08/15] weird lint --- .../src/NamedVersionSelector/NamedVersionSelector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index 8382d1ec..a73589b9 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -57,7 +57,7 @@ export function NamedVersionSelectorWidget(props: Readonly Date: Fri, 13 Jun 2025 13:13:27 -0400 Subject: [PATCH 09/15] mistake in loadingFlag --- .../src/NamedVersionSelector/NamedVersionSelector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index a73589b9..03f193e8 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -232,7 +232,7 @@ function LoadingState(): ReactElement { function NamedVersionSelectorContent(): ReactElement { const { isLoading, currentNamedVersion, ...restProps } = useContext(NamedVersionSelectorContentContext); - if (isLoading && restProps.entries.length === 0) { + if (!isLoading && restProps.entries.length === 0) { return ; } From 105fab41c16f2fa72985011a3e16e7846a02d663 Mon Sep 17 00:00:00 2001 From: naronchen Date: Fri, 13 Jun 2025 13:15:29 -0400 Subject: [PATCH 10/15] lint fix --- .../src/NamedVersionSelector/NamedVersionSelectorContext.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx index 9ef8765a..117989da 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelectorContext.tsx @@ -57,5 +57,5 @@ export type NamedVersionSelectorContentProps = { }; export const NamedVersionSelectorContentContext = createContext( - {} as NamedVersionSelectorContentProps + {} as NamedVersionSelectorContentProps, ) From b3ce9156b18e206e541164b57dce2a009046b69f Mon Sep 17 00:00:00 2001 From: naronchen Date: Fri, 13 Jun 2025 13:17:59 -0400 Subject: [PATCH 11/15] changeset --- .changeset/eighty-apples-care.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/eighty-apples-care.md diff --git a/.changeset/eighty-apples-care.md b/.changeset/eighty-apples-care.md new file mode 100644 index 00000000..345450eb --- /dev/null +++ b/.changeset/eighty-apples-care.md @@ -0,0 +1,5 @@ +--- +"@itwin/changed-elements-react": patch +--- + +Nvtable persists when loading comparison From 237b0cd6d1a5c2256290584b6921037d569be947 Mon Sep 17 00:00:00 2001 From: naronchen Date: Mon, 23 Jun 2025 13:33:24 -0400 Subject: [PATCH 12/15] versions get set in Manager --- .../src/NamedVersionSelector/NamedVersionSelector.tsx | 6 +++--- .../changed-elements-react/src/api/VersionCompareManager.ts | 5 +++++ .../common/versionCompareV2WidgetUtils.ts | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx index 03f193e8..f4ae0243 100644 --- a/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx +++ b/packages/changed-elements-react/src/NamedVersionSelector/NamedVersionSelector.tsx @@ -61,6 +61,7 @@ export function NamedVersionSelectorWidget(props: Readonly(); const [isComparing, setIsComparing] = useState(manager.isComparing); const [isComparisonStarted, setIsComparisonStarted] = useState(manager.isComparisonReady); @@ -102,11 +103,10 @@ export function NamedVersionSelectorWidget(props: Readonly(null); const onNamedVersionOpened = async (targetVersion?: NamedVersionEntry) => { - manager.targetVersion = targetVersion?.namedVersion; + setTargetVersion(targetVersion?.namedVersion); if (!targetVersion || !currentNamedVersion || targetVersion.job?.status !== "Completed") { return; } @@ -167,7 +167,7 @@ export function NamedVersionSelectorWidget(props: Readonly { currentNamedVersion && - + } { diff --git a/packages/changed-elements-react/src/api/VersionCompareManager.ts b/packages/changed-elements-react/src/api/VersionCompareManager.ts index e75696c8..4eb92ada 100644 --- a/packages/changed-elements-react/src/api/VersionCompareManager.ts +++ b/packages/changed-elements-react/src/api/VersionCompareManager.ts @@ -417,6 +417,7 @@ export class VersionCompareManager { */ public async startComparisonV2( currentIModel: IModelConnection, + currentVersion: NamedVersion, targetVersion: NamedVersion, changedElements: ChangedElements[], ): Promise { @@ -438,6 +439,10 @@ export class VersionCompareManager { this.progressCoordinator.updateProgress(VersionCompareProgressStage.OpenTargetImodel); + // Keep metadata around for UI uses and other queries + this.currentVersion = currentVersion; + this.targetVersion = targetVersion; + // Open the target version IModel const changesetId = targetVersion.changesetId; this._targetIModel = await CheckpointConnection.openRemote( diff --git a/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts b/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts index bba6dc11..212d78c5 100644 --- a/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts +++ b/packages/changed-elements-react/src/widgets/comparisonJobWidget/common/versionCompareV2WidgetUtils.ts @@ -44,6 +44,7 @@ export const runManagerStartComparisonV2 = async (args: ManagerStartComparisonV2 const changedElements = await args.comparisonJobClient.getComparisonJobResult(args.comparisonJob); VersionCompare.manager?.startComparisonV2( args.iModelConnection, + args.currentVersion, await updateTargetVersion(args.iModelConnection, args.targetVersion, args.iModelsClient), [changedElements.changedElements]).catch((e) => { Logger.logError(VersionCompare.logCategory, "Could not start version comparison: " + e); From d52cd3cdd4e8198074c49f539877a4e650ca94b9 Mon Sep 17 00:00:00 2001 From: "iTwin.js admin" <38288322+imodeljs-admin@users.noreply.github.com> Date: Tue, 17 Jun 2025 17:22:21 -0400 Subject: [PATCH 13/15] Release packages [publish docs] (#232) This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to master, this PR will be updated. # Releases ## @itwin/changed-elements-react@0.15.4 ### Patch Changes #### [0.15.4](https://github.com/iTwin/changed-elements-react/tree/v0.15.4/packages/changed-elements-react) - 2025-06-06 fix alignment in header of version comapre Co-authored-by: imodeljs-admin --- .changeset/dull-carrots-change.md | 5 ----- packages/changed-elements-react/CHANGELOG.md | 8 ++++++++ packages/changed-elements-react/package.json | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) delete mode 100644 .changeset/dull-carrots-change.md diff --git a/.changeset/dull-carrots-change.md b/.changeset/dull-carrots-change.md deleted file mode 100644 index 63311377..00000000 --- a/.changeset/dull-carrots-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@itwin/changed-elements-react": patch ---- - -fix alignment in header of version comapre diff --git a/packages/changed-elements-react/CHANGELOG.md b/packages/changed-elements-react/CHANGELOG.md index faef4f1f..0aa35e52 100644 --- a/packages/changed-elements-react/CHANGELOG.md +++ b/packages/changed-elements-react/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.15.4 + +### Patch Changes + +#### [0.15.4](https://github.com/iTwin/changed-elements-react/tree/v0.15.4/packages/changed-elements-react) - 2025-06-06 + +fix alignment in header of version comapre + ## 0.15.3 ### Patch Changes diff --git a/packages/changed-elements-react/package.json b/packages/changed-elements-react/package.json index e2c41825..2ce658f5 100644 --- a/packages/changed-elements-react/package.json +++ b/packages/changed-elements-react/package.json @@ -1,6 +1,6 @@ { "name": "@itwin/changed-elements-react", - "version": "0.15.3", + "version": "0.15.4", "license": "MIT", "repository": { "type": "git", From ba3ca2dae84f9bff229ebcc7fb264854a5a709d9 Mon Sep 17 00:00:00 2001 From: Naron <72578270+naronchen@users.noreply.github.com> Date: Wed, 18 Jun 2025 06:55:34 -0400 Subject: [PATCH 14/15] changedElementsHeaderButtons spacing (#235) JP mentioned this when i worked on the bug on right aligning header button that he want a bit more spacing between those buttons. the side effect of this change is when squeezing it becomes ![image](https://github.com/user-attachments/assets/bb71944c-6732-42ca-b82c-89795bcc68f5) cuz of the fixed spacing while previously if squeezed: ![image](https://github.com/user-attachments/assets/3344c4de-df5e-4670-a17c-9430a4c3cf03) --------- Co-authored-by: naronchen --- .changeset/slimy-lines-heal.md | 5 +++++ .../src/widgets/ChangedElementsWidget.scss | 5 +++++ .../src/widgets/ChangedElementsWidget.tsx | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 .changeset/slimy-lines-heal.md diff --git a/.changeset/slimy-lines-heal.md b/.changeset/slimy-lines-heal.md new file mode 100644 index 00000000..65cfb467 --- /dev/null +++ b/.changeset/slimy-lines-heal.md @@ -0,0 +1,5 @@ +--- +"@itwin/changed-elements-react": patch +--- + +spacing around che ele header buttons diff --git a/packages/changed-elements-react/src/widgets/ChangedElementsWidget.scss b/packages/changed-elements-react/src/widgets/ChangedElementsWidget.scss index c9dd8b94..62c5013c 100644 --- a/packages/changed-elements-react/src/widgets/ChangedElementsWidget.scss +++ b/packages/changed-elements-react/src/widgets/ChangedElementsWidget.scss @@ -9,3 +9,8 @@ text-align: center; padding: var(--iui-size-xs); } + +.header-buttons { + display: flex; + gap: var(--iui-size-xs); +} diff --git a/packages/changed-elements-react/src/widgets/ChangedElementsWidget.tsx b/packages/changed-elements-react/src/widgets/ChangedElementsWidget.tsx index e5b418ad..923921e9 100644 --- a/packages/changed-elements-react/src/widgets/ChangedElementsWidget.tsx +++ b/packages/changed-elements-react/src/widgets/ChangedElementsWidget.tsx @@ -529,7 +529,7 @@ export function ChangedElementsHeaderButtons(props: Readonly +
{ !props.useNewNamedVersionSelector && } - +
); } From 8fea3bf9aa244fd46b5f7486b1762953344634db Mon Sep 17 00:00:00 2001 From: naronchen Date: Mon, 23 Jun 2025 13:38:47 -0400 Subject: [PATCH 15/15] DS store --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2435c323..b5d06cc4 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ pnpm-debug.log* .env.* packages/test-app-frontend/dist/ +.DS_Store