Skip to content

Eng 567 pr 3 version history UI#7828

Merged
Vagoasdf merged 43 commits intomainfrom
ENG-567_pr-3-version-history-ui
Apr 14, 2026
Merged

Eng 567 pr 3 version history UI#7828
Vagoasdf merged 43 commits intomainfrom
ENG-567_pr-3-version-history-ui

Conversation

@Vagoasdf
Copy link
Copy Markdown
Contributor

@Vagoasdf Vagoasdf commented Apr 3, 2026

Ticket ENG-567

Description Of Changes

Adding Frontend Changes for Version History Modals. These would include the history of SaaS configs, both out of the box integrations and custom integrations, so the customers can have a better time checking their versions, and support can check what type/version is causing problems in case we have to check their systems

Code Changes

  • New VersionHistoryTab — a new tab on the integration detail page for SaaS connections, listing all available template versions with release dates.
  • New SaaSVersionModal — a modal to inspect a specific version's config YAML and dataset YAML side by side.
  • New useSaaSVersionModal hook — manages the modal open/pending state cleanly, decoupling the connection lookup from the modal render.
  • New RTK Query endpoints on connector-template.slice — fetches version config and dataset YAML per connector type and version.
  • EventLog version badge — surfaces the saas_version on execution log entries so users can see which template version was active during a run.
  • Side-effect type tightening — connection: any → ConnectionConfigurationResponse | null | undefined in useFeatureBasedTabs, needed to access saas_config.type for the new tab. This exposed one pre-existing type mismatch (QueryLogConfigTab.name) which was fixed in this PR.

Regarding the side effect:

Changing away from any made TypeScript visible to pre-existing type issues that were previously silenced. There are 9 connection! non-null assertions inside the hook that are now technically type-unsafe — though they are safe at runtime because the sole caller ([id].tsx) wraps the tab render with !!connection &&.

The one assertion that did produce a compiler error:

QueryLogConfigTab expects  name?: string          (string | undefined)
ConnectionConfigurationResponse has  name: string | null | undefined

This was fixed in this PR by converting null → undefined at the call site.

Steps to Confirm

  1. Set up a Saas Integration.
  2. Load and set up a custom integration from the custom repo
  3. Execute a access request
  4. Verify we can see the history on the request
  5. Update the custom integration (make a small change on the config, and change the version number of the integration)
  6. Verify on the Integrations panel that we can see the version history tab
  7. Verify that the tab of the custom integration has the update

Pre-Merge Checklist

  • Issue requirements met
  • All CI pipelines succeeded
  • CHANGELOG.md updated
    • Add a db-migration This indicates that a change includes a database migration label to the entry if your change includes a DB migration
    • Add a high-risk This issue suggests changes that have a high-probability of breaking existing code label to the entry if your change includes a high-risk change (i.e. potential for performance impact or unexpected regression) that should be flagged
    • Updates unreleased work already in Changelog, no new entry necessary
  • UX feedback:
    • All UX related changes have been reviewed by a designer
    • No UX review needed
  • Followup issues:
    • Followup issues created
    • No followup issues
  • Database migrations:
    • Ensure that your downrev is up to date with the latest revision on main
    • Ensure that your downgrade() migration is correct and works
      • If a downgrade migration is not possible for this change, please call this out in the PR description!
    • No migrations
  • Documentation:
    • Documentation complete, PR opened in fidesdocs
    • Documentation issue created in fidesdocs
    • If there are any new client scopes created as part of the pull request, remember to update public-facing documentation that references our scope registry
    • No documentation updates required

Vagoasdf added 11 commits April 3, 2026 13:17
connectorType was derived from the RTK Query result, which returns
undefined once pending is cleared (skip: true). The modal condition
active && connectorType would always be falsy, so the modal never
opened in production. Store connectorType directly in active state
so the modal renders independently of the skipped query.
…ig type

If openVersionModal was called with a non-SaaS connection key, the
effect condition never fired and pending stayed set indefinitely,
keeping the hook subscribed to that connection key. Now pending is
always cleared once connection resolves, regardless of whether a
connectorType was found.
The clickable version badge was using a <span> with onClick, requiring
two jsx-a11y eslint-disable comments. Replace with a <button> when
connectionKey is present (keyboard-accessible, correct semantics) and
a plain <span> when no connectionKey is given (non-interactive).
@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Apr 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
fides-plus-nightly Ready Ready Preview, Comment Apr 14, 2026 2:37pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
fides-privacy-center Ignored Ignored Apr 14, 2026 2:37pm

Request Review

export interface State {}
const initialState: State = {};

export interface SaaSConfigVersionResponse {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a bespoke type or does it correspond directly to something on the backend (i.e. can it be autogenerated)?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're correct, it can be a model generated from the backend with the new skill. I was not aware of it so i didn't included it initally 😅
There are a some of other Models that got generated aswell, ignoring them for now.

ver,
onClick,
}: {
ver: string;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: prefer a more verbose variable name here, maybe versionIdentifier or similar.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated 👍🏽

}
if (datasetError) {
return (
<Text className="text-sm text-red-500">
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't use Tailwind for text colors so as to match the Ant palette, you can make red text by passing type="danger" as a prop here or type="secondary" for gray.

ver: string;
onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
}) =>
onClick ? (
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UX-wise, clicking on this showing the version details has pretty poor discoverability-- maybe we can add an icon or tooltip?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using a tooltip, checking how it behaves 👍🏽

Copy link
Copy Markdown
Contributor

@jpople jpople left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the changes, looks good!

@Vagoasdf Vagoasdf added this pull request to the merge queue Apr 14, 2026
Merged via the queue into main with commit 24cbe6c Apr 14, 2026
50 of 51 checks passed
@Vagoasdf Vagoasdf deleted the ENG-567_pr-3-version-history-ui branch April 14, 2026 16:27
@claude claude bot mentioned this pull request Apr 17, 2026
18 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants