Skip to content

Comments

Redesign#3

Open
TarasKovalenko wants to merge 3 commits intomainfrom
Taras/re-design
Open

Redesign#3
TarasKovalenko wants to merge 3 commits intomainfrom
Taras/re-design

Conversation

@TarasKovalenko
Copy link
Owner

No description provided.

@gemini-code-assist
Copy link

Summary of Changes

Hello @TarasKovalenko, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request delivers a comprehensive redesign of the application's user interface and experience. It refactors core layout components, introduces dedicated and feature-rich detail views for various item types, and integrates a global command palette for streamlined interaction. The authentication flow has been made more robust, and all application settings are now centralized in a new dialog. These changes aim to provide users with a more intuitive, efficient, and powerful tool for managing Azure Key Vault resources.

Highlights

  • UI/UX Redesign: The application's user interface and experience have been significantly overhauled, introducing a modern, more intuitive design across various components.
  • Command Palette Integration: A new global command palette has been implemented, offering fuzzy search capabilities and keyboard shortcuts for efficient navigation and action execution.
  • Enhanced Item Detail Views: Dedicated detail components for Secrets, Keys, and Certificates now provide richer, type-specific information and actions, replacing a generic metadata drawer.
  • Improved Authentication Flow: The Azure CLI authentication process has been refined with more detailed status checks, auto-connection attempts, and clearer error messages.
  • Centralized Settings Management: A new settings dialog consolidates various application preferences, including theme, security (re-authentication, auto-hide, clipboard behavior), keyboard shortcuts, and audit log settings.
  • Flexible Split Pane Layouts: List views for Secrets, Keys, and Certificates now utilize a resizable split-pane layout, allowing users to view item lists and details side-by-side.
  • Audit Log Enhancements: The audit log now includes filtering options by action, result, and item type, along with a confirmation dialog for clearing entries.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/App.tsx
    • Updated main application layout by removing AccessView and integrating new components like CommandPalette, EmptyState, SettingsDialog, VaultDashboard, and useKeyboardShortcuts.
  • src/components/auth/SignIn.tsx
    • Enhanced authentication screen with detailed CLI status checks, copy command functionality, and improved error messages.
  • src/components/certificates/CertificateDetails.tsx
    • Added a new component to display detailed information for a selected certificate, including status, expiration, and copy thumbprint.
  • src/components/certificates/CertificatesList.tsx
    • Refactored certificate listing to use a split-pane layout with CertificateDetails and added filtering, loading skeletons, and error handling.
  • src/components/command-palette/CommandPalette.tsx
    • Added a new global command palette component with fuzzy search for executing various application commands and navigation.
  • src/components/command-palette/fuzzyMatch.ts
    • Added utility functions for performing fuzzy string matching, used by the command palette.
  • src/components/common/DangerConfirmDialog.tsx
    • Added a reusable dialog component for confirming critical or irreversible user actions.
  • src/components/common/EmptyState.tsx
    • Added a reusable component to display informative messages for empty data states with optional icons and actions.
  • src/components/common/ErrorMessage.tsx
    • Added a reusable component for displaying user-friendly error messages, including parsing and suggesting actions for Azure-specific errors.
  • src/components/common/LoadingSkeleton.tsx
    • Added a reusable component to display animated loading placeholders for data tables.
  • src/components/common/SplitPane.tsx
    • Added a reusable component to create resizable, side-by-side panel layouts.
  • src/components/keys/KeyDetails.tsx
    • Added a new component to display detailed information for a selected key, including type, operations, and metadata.
  • src/components/keys/KeysList.tsx
    • Refactored key listing to use a split-pane layout with KeyDetails and added filtering, loading skeletons, and error handling.
  • src/components/layout/ContentTabs.tsx
    • Updated content tabs to include a new 'Dashboard' tab, removed the 'Access' tab, and simplified tab labels.
  • src/components/layout/Sidebar.tsx
    • Reworked the sidebar to feature pinned and recent vaults, and vault-specific navigation items with counts, replacing the previous hierarchical structure.
  • src/components/layout/StatusBar.tsx
    • Enhanced the status bar to display user authentication status, full tenant and subscription names, and the current theme mode.
  • src/components/layout/TopBar.tsx
    • Replaced the global search input with a command palette trigger, integrated a WorkspaceSwitcher, and moved settings access to a dedicated dialog.
  • src/components/layout/WorkspaceSwitcher.tsx
    • Added a new component to provide dropdown menus for selecting tenants, subscriptions, and key vaults.
  • src/components/logs/AuditLog.tsx
    • Enhanced the audit log viewer with filtering capabilities by action, result, and item type, and added a confirmation dialog for clearing logs.
  • src/components/secrets/RevealSecretValue.tsx
    • Added a new component for securely revealing secret values with features like auto-hide, clipboard auto-clear, and re-authentication prompts.
  • src/components/secrets/SecretDetails.tsx
    • Added a new component to display detailed information for a selected secret, including metadata, value revelation, and management actions like edit, recover, delete, and purge.
  • src/components/secrets/SecretsList.tsx
    • Refactored secret listing to use a split-pane layout with SecretDetails and enhanced bulk delete functionality with a confirmation dialog and progress tracking.
  • src/components/settings/SettingsDialog.tsx
    • Added a new dialog component to centralize and manage application settings, including appearance, security, keyboard shortcuts, and audit log preferences.
  • src/components/vault/VaultDashboard.tsx
    • Added a new dashboard component to provide an overview of the selected vault, displaying item counts, properties, quick actions, and recent audit activity.
  • src/hooks/useAutoHide.ts
    • Added a new custom React hook to manage the automatic hiding of sensitive data after a configurable timeout.
  • src/hooks/useKeyboardShortcuts.ts
    • Added a new custom React hook to register and handle global keyboard shortcuts for various application actions.
  • src/index.css
    • Introduced new CSS variables and styles for focus rings, split pane handles, command palette overlay, and skeleton loading animations.
  • src/stores/appStore.ts
    • Expanded the Zustand application store to include new state properties for pinned vaults, detailed security settings, layout configurations, audit log preferences, and UI dialog states.
  • src/styles/dev-ui.css
    • Updated table styling to ensure sticky headers for improved scrollability.
  • src/types/index.ts
    • Updated ItemTab type, added PinnedVault, UserFacingError, and PaletteCommand interfaces.
Activity
  • The pull request introduces a significant redesign, indicated by the title "Redesign" and extensive changes across many UI-related files.
  • The author, TarasKovalenko, has implemented a large set of new features and refactorings in a single pull request.
  • No specific human activity (comments, reviews) is provided in the context.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This is a massive and impressive redesign of the application. The new UI is much more modern and user-friendly, with excellent additions like the command palette, split-pane detail views, and much-improved loading/error/empty states. The architecture is also significantly improved with better component encapsulation, centralized state management, and a strong focus on security best practices for handling sensitive data. I've left a few comments on potential improvements, including a suggestion for more robust error handling in the bulk delete feature and some notes on code cleanup. Overall, this is a fantastic update.

…or improved styling and structure

- Updated SecretsList component to utilize makeStyles for consistent styling and improved readability.
- Refactored toolbar and table layout in SecretsList for better alignment and spacing.
- Enhanced SettingsDialog with makeStyles for better styling management and layout consistency.
- Improved VaultDashboard layout using makeStyles, including grid layouts for better responsiveness.
- Added new CSS classes for inline cell helpers in dev-ui.css to streamline component styling.
@TarasKovalenko TarasKovalenko marked this pull request as ready for review February 21, 2026 11:39
@TarasKovalenko
Copy link
Owner Author

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request represents an impressive and comprehensive redesign of the application's UI and architecture, introducing significant improvements such as better componentization, a structured styling approach with makeStyles, and a major UX overhaul including a command palette, dashboard, and cleaner layout. The move to specific components like SecretDetails and reusable common components like SplitPane, EmptyState, and DangerConfirmDialog enhances maintainability and code quality. However, the redesign also introduces significant discrepancies between advertised security guarantees and their actual implementation, particularly regarding secret handling in memory and the re-authentication mechanism, which need to be addressed to prevent misleading users about the application's security posture. My review also includes a couple of suggestions for ensuring consistency across the newly introduced patterns.

Comment on lines +124 to +127
const { isRevealed, secondsLeft, reveal, hide } = useAutoHide({
timeoutSeconds: autoHideSeconds,
onHide: () => {},
});

Choose a reason for hiding this comment

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

security-medium medium

The component claims in the fetch confirmation dialog (lines 271-275) that the secret value will be cleared from memory after the auto-hide timeout. However, the onHide callback passed to useAutoHide is currently empty, meaning the secretValue state is retained in memory and only masked in the UI. This contradicts the security guarantee provided to the user. Implement the onHide callback to clear the secretValue state when the timeout expires.

Suggested change
const { isRevealed, secondsLeft, reveal, hide } = useAutoHide({
timeoutSeconds: autoHideSeconds,
onHide: () => {},
});
const { isRevealed, secondsLeft, reveal, hide } = useAutoHide({
timeoutSeconds: autoHideSeconds,
onHide: () => setSecretValue(null),
});

Comment on lines +143 to +150
if (requireReauthForReveal && !reauthConfirmed) {
setFetchError('Re-authentication confirmation required.');
return;
}
setShowFetchConfirm(false);
await handleFetchValue();
}, [handleFetchValue, requireReauthForReveal, reauthConfirmed]);

Choose a reason for hiding this comment

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

security-medium medium

The 'Require re-auth before fetching values' feature is implemented as a simple UI confirmation button rather than an actual authentication check. The description in the settings (src/components/settings/SettingsDialog.tsx:190) misleadingly suggests that it 'Re-verifies your Azure CLI session'. An attacker with access to the unlocked application can easily bypass this by clicking the confirmation button. Consider implementing a true re-authentication flow or updating the UI text to clarify that this is a confirmation prompt.

Comment on lines +189 to +191
<Text size={100} className={classes.descriptionText}>
Re-verify your Azure CLI session before any secret value is retrieved.
</Text>

Choose a reason for hiding this comment

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

security-medium medium

The description 'Re-verify your Azure CLI session before any secret value is retrieved' is misleading because the current implementation in RevealSecretValue.tsx only requires a button click in the UI and does not perform any actual session verification. Update the text to accurately describe the behavior (e.g., 'Require confirmation before fetching values') or implement actual session verification.

Suggested change
<Text size={100} className={classes.descriptionText}>
Re-verify your Azure CLI session before any secret value is retrieved.
</Text>
<Text size={100} className={classes.descriptionText}>
Require a confirmation prompt before any secret value is retrieved.
</Text>

Comment on lines +355 to +381
<Dialog open={showDeleteDialog} onOpenChange={(_, d) => setShowDeleteDialog(d.open)}>
<DialogSurface>
<DialogBody>
<DialogTitle>Delete Secret</DialogTitle>
<DialogContent>
<Text size={200} className={classes.dialogContent}>
Delete <strong className="azv-mono">{item.name}</strong>? If soft-delete is enabled
on this vault, you can recover it within the retention period. Otherwise, this
action is permanent.
</Text>
</DialogContent>
<DialogActions>
<Button appearance="secondary" onClick={() => setShowDeleteDialog(false)}>
Cancel
</Button>
<Button
appearance="primary"
onClick={handleDelete}
disabled={actionLoading}
className={classes.deleteConfirmButton}
>
{actionLoading ? <Spinner size="tiny" /> : 'Delete'}
</Button>
</DialogActions>
</DialogBody>
</DialogSurface>
</Dialog>

Choose a reason for hiding this comment

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

medium

The confirmation dialog for deleting a secret uses a standard Dialog. This pull request introduces a new DangerConfirmDialog component, which is already used for the "Purge" action. For better consistency and an improved user experience (requiring the user to type to confirm), I suggest replacing this Dialog with the DangerConfirmDialog as well.

      <DangerConfirmDialog
        open={showDeleteDialog}
        title="Delete Secret"
        description={
          <>
            Delete <strong className="azv-mono">{item.name}</strong>? If soft-delete is enabled
            on this vault, you can recover it within the retention period. Otherwise, this
            action is permanent.
          </>
        }
        confirmText="delete"
        confirmLabel="Delete"
        dangerLevel="warning"
        loading={actionLoading}
        onConfirm={handleDelete}
        onCancel={() => setShowDeleteDialog(false)}
      />

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.

1 participant