Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEV-405, DEV-409 #141

Merged
merged 3 commits into from
Nov 4, 2024
Merged

DEV-405, DEV-409 #141

merged 3 commits into from
Nov 4, 2024

Conversation

Palabola
Copy link
Contributor

@Palabola Palabola commented Oct 29, 2024

Summary by CodeRabbit

Release Notes

  • New Features

    • Added a button for sharing benchmark results directly from the server comparison page.
    • Introduced dynamic colspan for benchmark category headers to improve layout flexibility.
  • Improvements

    • Enhanced tooltip functionality for better contextual information.
    • Improved loading state visuals for the benchmark table.
    • Adjusted z-index values for better visibility and stacking order of elements.
    • Implemented scroll adjustment for better navigation experience when using URL fragments.
  • Styling

    • Refined styles for table elements and scrolling behavior to enhance user experience.

Copy link
Contributor

coderabbitai bot commented Oct 29, 2024

Walkthrough

The pull request introduces modifications to the header component and the server comparison component of the Angular application. Changes include updating the z-index of specific elements, adding buttons for sharing benchmark results, and enhancing the layout and usability of the server comparison table. Additionally, styling adjustments are made to improve the visual presentation. The component's functionality is further enhanced with new methods for better event handling and navigation support.

Changes

File Path Change Summary
src/app/layout/header/header.component.html Updated z-index of prices_options div from z-10 to z-100.
src/app/pages/server-compare/server-compare.component.html Added share button for benchmark results, dynamic colspan for header, and improved dropdown menus.
src/app/pages/server-compare/server-compare.component.scss Adjusted styles for section headers and changed z-index of .fixed_thead from 99 to 40.
src/app/pages/server-compare/server-compare.component.ts Introduced adjustScrollForFragment method and modified clipboardURL method for enhanced functionality.
tailwind.config.js Added new z-index value '40': 40 in the theme configuration.

Assessment against linked issues

Objective Addressed Explanation
Improve section title width on mobile (DEV-405) No changes related to section title width on mobile.
Add share section anchor in server details/compare (DEV-409)

Possibly related PRs

  • dev-170 #31: Modifications to the name property in server-compare.component.html may relate to the overall structure of the server comparison interface.
  • Dev 178 #44: The addition of a currency selection feature aligns with the focus on enhancing server pricing functionality.
  • DEV-225, DEV-218 /compare  #51: Introduction of loading states in the ServerCompareComponent could relate to improving user interaction.
  • Item table sticky #54: Changes regarding sticky headers and layout adjustments are relevant to enhancing header visibility.
  • mark the best price/perf/value machines in compare #81: Enhancements to the server comparison table for best price and performance labels relate to improving header functionality.
  • handle dropdowns by dedicated service #93: Refactoring dropdown management in the ServerCompareComponent aligns with improving user interaction.
  • new charts #102: New chart configurations in related components may enhance the server comparison interface.
  • DEV-362 #123: Ensuring unique IDs for section titles could improve header usability and navigation.
  • DEV-378 #132: Updates for stress testing metrics enhance overall functionality of the server comparison feature.
  • guarantee description column width #140: Modifications for description column width directly relate to enhancing visual presentation.

Suggested reviewers

  • daroczig

🐇 In the header, a change was made,
To lift the prices, a new z-index displayed.
With buttons to share, oh what a delight,
Our benchmarks now shine, so clear and bright!
So hop along, let’s compare with glee,
For every server, a choice there shall be! 🐰✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 46f1f6f and 4eb7d5c.

📒 Files selected for processing (2)
  • src/app/pages/server-compare/server-compare.component.html (1 hunks)
  • src/app/pages/server-compare/server-compare.component.ts (4 hunks)
🔇 Additional comments (5)
src/app/pages/server-compare/server-compare.component.html (3)

262-262: LGTM: Dynamic colspan implementation

The dynamic colspan calculation using getSectionColSpan() improves the table's responsiveness, particularly on mobile devices.


307-309: LGTM: Share button implementation

The share button implementation successfully addresses the requirement to add sharing functionality for benchmark sections.


264-306: LGTM: Comprehensive tooltip implementation

The tooltip implementation provides valuable contextual information for different benchmark metrics, enhancing user understanding. The consistent pattern across different benchmark types (Geekbench, OpenSSL, stress-ng, etc.) makes the interface intuitive.

src/app/pages/server-compare/server-compare.component.ts (2)

538-541: LGTM: Appropriate lifecycle hook for scroll adjustment.

The addition of adjustScrollForFragment() in ngAfterViewInit is correctly placed, as this is the appropriate lifecycle hook for DOM manipulation after the view has been initialized.


1476-1478: LGTM: Responsive column span calculation.

The getSectionColSpan method ensures proper table layout by:

  1. Accommodating all servers (servers.length + 1)
  2. Maintaining a minimum of 3 columns for better mobile display

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

netlify bot commented Oct 29, 2024

Deploy Preview for creative-choux-a3c817 ready!

Name Link
🔨 Latest commit 4eb7d5c
🔍 Latest deploy log https://app.netlify.com/sites/creative-choux-a3c817/deploys/6720eccfe62fa80008e14187
😎 Deploy Preview https://deploy-preview-141--creative-choux-a3c817.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Outside diff range and nitpick comments (2)
tailwind.config.js (1)

47-51: Consider documenting z-index layers.

Since we're managing multiple z-index values (100 and 40), it would be helpful to document the intended stacking order in a comment.

Add a comment explaining the hierarchy:

      zIndex: {
+       // Stacking order:
+       // 100: Highest level overlays
+       // 40: Fixed table headers
        '100': 100,
        '40': 40,
      }
src/app/pages/server-compare/server-compare.component.html (1)

Line range hint 262-305: Improve mobile responsiveness of section headers.

The section header contains multiple elements that might overflow on mobile devices:

-<h3 class="text-xl font-semibold flex gap-2 items-center">
+<h3 class="text-xl font-semibold flex flex-wrap gap-2 items-center">

Additionally, consider consolidating tooltip event handlers for better performance and accessibility:

// In your component:
handleTooltip(event: MouseEvent, content: string, show: boolean): void {
  if (show) {
    this.showTooltip(event, content);
  } else {
    this.hideTooltip();
  }
}
-<lucide-icon
-  name="info"
-  class="h-4 w-4 text-gray-200"
-  (mouseenter)="showTooltip($event, column.description)"
-  (mouseleave)="hideTooltip()">
-</lucide-icon>
+<lucide-icon
+  name="info"
+  class="h-4 w-4 text-gray-200"
+  tabindex="0"
+  role="button"
+  (mouseenter)="handleTooltip($event, column.description, true)"
+  (mouseleave)="handleTooltip($event, column.description, false)"
+  (focus)="handleTooltip($event, column.description, true)"
+  (blur)="handleTooltip($event, column.description, false)"
+  (keydown.enter)="handleTooltip($event, column.description, true)"
+  (keydown.space)="handleTooltip($event, column.description, true)">
+</lucide-icon>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between ca9cde5 and d6c9ff9.

📒 Files selected for processing (5)
  • src/app/layout/header/header.component.html (1 hunks)
  • src/app/pages/server-compare/server-compare.component.html (2 hunks)
  • src/app/pages/server-compare/server-compare.component.scss (3 hunks)
  • src/app/pages/server-compare/server-compare.component.ts (4 hunks)
  • tailwind.config.js (1 hunks)
🧰 Additional context used
🪛 eslint
src/app/pages/server-compare/server-compare.component.ts

[error] 4-4: 'NavigationEnd' is defined but never used.

(@typescript-eslint/no-unused-vars)

🔇 Additional comments (6)
tailwind.config.js (1)

49-49: Verify z-index layering with new UI elements.

The z-index value looks reasonable, but let's ensure it works well with the new share button and mobile layout improvements.

Let's check for potential z-index conflicts:

✅ Verification successful

Based on the search results, I can now generate the final response since I have a clear picture of the z-index hierarchy in the codebase:

Z-index value of 40 is appropriate for the fixed table header

The z-index of 40 for the fixed table header is well-positioned within the existing z-index hierarchy:

  • Lower than header (z-50) and modal dialogs (z-50)
  • Higher than loading overlays and tooltips (z-10)
  • Properly layered between dropdown menus (z-100) and base content

The value ensures the fixed header stays above the table content while remaining below critical UI elements like the site header and modals.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for z-index usage in styles to verify stacking context
# Expected: No elements between z-index 40-100 that could conflict with fixed header

# Search for z-index declarations in style files
rg -g '*.{scss,css}' 'z-index:' -A 1 -B 1

# Search for Tailwind z-index classes
rg -g '*.{html,ts}' 'z-\[.*?\]|z-(0|10|20|30|40|50|auto)' -A 1 -B 1

Length of output: 36564

src/app/pages/server-compare/server-compare.component.scss (2)

31-31: 🛠️ Refactor suggestion

Verify scroll margin on mobile devices.

The scroll-margin-top: 10rem (160px) seems excessive and might create too much empty space when navigating to section anchors, especially on mobile devices where vertical space is limited.

Consider:

  1. Reducing the value
  2. Adding a media query for mobile devices:
tr.section_header {
  @apply bg-secondary text-white;
  td:nth-of-type(1) {
    @apply bg-secondary;
  }
-  scroll-margin-top: 10rem;
+  scroll-margin-top: 6rem;
+  @media screen and (max-width: 768px) {
+    scroll-margin-top: 4rem;
+  }
}

60-60: Verify z-index hierarchy.

The z-index change from 99 to 40 for .fixed_thead could affect the stacking context with other overlapping elements.

✅ Verification successful

Let me gather more specific information about the stacking context in the server-compare component.


Z-index hierarchy in server-compare component is properly structured

The z-index change from 99 to 40 for .fixed_thead maintains correct stacking context hierarchy within the component:

  • Sticky header (.fixed_thead) has z-index: 40
  • First column header has z-index: 21
  • First column cells have z-index: 20

This creates a logical layering where the fixed header stays above the sticky columns while maintaining proper overlay behavior.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other z-index values in the codebase to verify stacking context
echo "Searching for z-index declarations in SCSS/CSS files..."
rg -t scss -t css "z-index:\s*\d+" --no-filename | sort -u

echo -e "\nSearching for tailwind z-index classes..."
rg -t html "z-\d+" --no-filename | sort -u

Length of output: 3846


Script:

#!/bin/bash
# Search for z-index declarations specifically in server-compare component and related files
echo "Searching for z-index in server-compare component files..."
fd -e scss -e css -e html "server-compare" --exec rg -l "z-index|z-\d+"

echo -e "\nSearching for overlapping elements near .fixed_thead..."
fd -e scss -e css "server-compare" --exec rg -C 5 "fixed_thead|z-index"

Length of output: 948

src/app/layout/header/header.component.html (1)

120-120: Verify the necessity of z-index increase.

The z-index value has been significantly increased from 10 to 100 for the prices dropdown menu. While this change might fix a layering issue, it seems excessive and could potentially cause other stacking context problems.

Consider using a more moderate z-index value or documenting the reason for such a high value. Run this script to analyze z-index usage across the codebase:

✅ Verification successful

Z-index value of 100 is consistent with similar dropdown menus in the codebase

The z-index increase from 10 to 100 for the prices dropdown menu aligns with the z-index patterns used across the application:

  • Currency dropdowns consistently use z-100 (traffic-prices, storages, server-compare components)
  • Other similar dropdowns that need to overlay content use z-100
  • The change maintains consistency with the established layering hierarchy
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for z-index values in styles and templates
echo "Analyzing z-index usage in the codebase..."
rg -g '*.{scss,css,html}' 'z-(?:index|\d+)' --no-heading

Length of output: 12628

src/app/pages/server-compare/server-compare.component.html (1)

262-262: Verify mobile layout improvements.

Please ensure that the section header width adjustments resolve the mobile display issues mentioned in DEV-405. Consider testing with various mobile viewport sizes.

✅ Verification successful

Let me analyze the server-compare component's mobile responsiveness based on the search results.

Looking at src/app/pages/server-compare/server-compare.component.scss, I can see:

  1. The component has mobile-specific media queries: @media screen and (max-width: 1024px)
  2. Within mobile breakpoints, table cells are set to width: 100%
  3. The component uses width: calc(100%) for flexible layouts
  4. No fixed width constraints that could cause horizontal scrolling issues

The colSpan attribute in the HTML is used with getSectionColSpan() which dynamically calculates column spans, working in conjunction with the responsive CSS.

Mobile layout implementation verified successfully

The section header implementation uses proper responsive design patterns:

  • Fluid widths with calc(100%)
  • Mobile-specific media queries
  • Dynamic column spans
  • No fixed width constraints that could break mobile layouts
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any fixed width constraints that might affect mobile layout
rg -g '*.{css,scss}' 'width:|min-width:|max-width:' 

Length of output: 15910

src/app/pages/server-compare/server-compare.component.ts (1)

1474-1476: LGTM: Section column span implementation.

The implementation ensures section titles have appropriate width on mobile devices by using a minimum width of 3 columns, which addresses the mobile layout issue mentioned in DEV-405.

Comment on lines 305 to 307
<button class="btn-primary py-2 px-3 flex gap-1 items-center" (click)="clipboardURL($event, 'benchmark_line_' + category.id)">
<lucide-icon name="{{clipboardIcon}}" size="16"></lucide-icon>
</button>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Enhance accessibility and user experience of the share button.

The icon-only share button needs improvements for better accessibility and user feedback:

 <button class="btn-primary py-2 px-3 flex gap-1 items-center" (click)="clipboardURL($event, 'benchmark_line_' + category.id)">
+  <span class="sr-only">Share this section</span>
   <lucide-icon name="{{clipboardIcon}}" size="16"></lucide-icon>
+  <span class="tooltip">Share this section</span>
 </button>

Committable suggestion was skipped due to low confidence.

import { KeeperAPIService } from '../../services/keeper-api.service';
import { ActivatedRoute, RouterModule } from '@angular/router';
import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove unused import.

The NavigationEnd import is not used in the code.

Apply this diff to remove the unused import:

-import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';
+import { ActivatedRoute, Router, RouterModule } from '@angular/router';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
🧰 Tools
🪛 eslint

[error] 4-4: 'NavigationEnd' is defined but never used.

(@typescript-eslint/no-unused-vars)

Comment on lines 567 to 575
clipboardURL(event: any, frgament?: string) {

let url = window.location.href;

if(frgament) {
// replace url fragment
url = url.replace(/#.*$/, '') + '#' + frgament;
}

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Enhance clipboard URL handling.

The current implementation could be improved with better error handling and URL manipulation.

Consider applying this improved implementation:

-clipboardURL(event: any, frgament?: string) {
+async clipboardURL(event: any, fragment?: string) {
+  try {
     let url = window.location.href;
-    if(frgament) {
-      // replace url fragment
-      url = url.replace(/#.*$/, '') + '#' + frgament;
+    if (fragment) {
+      const urlObj = new URL(url);
+      urlObj.hash = fragment;
+      url = urlObj.toString();
     }

-    navigator.clipboard.writeText(url);
+    await navigator.clipboard.writeText(url);
     this.clipboardIcon = 'check';
     this.showTooltip(event, 'Link copied to clipboard!', true);
+  } catch (error) {
+    console.error('Failed to copy URL to clipboard:', error);
+    this.showTooltip(event, 'Failed to copy link!', true);
+  }

   setTimeout(() => {
     this.clipboardIcon = 'clipboard';
   }, 3000);
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
clipboardURL(event: any, frgament?: string) {
let url = window.location.href;
if(frgament) {
// replace url fragment
url = url.replace(/#.*$/, '') + '#' + frgament;
}
async clipboardURL(event: any, fragment?: string) {
try {
let url = window.location.href;
if (fragment) {
const urlObj = new URL(url);
urlObj.hash = fragment;
url = urlObj.toString();
}
await navigator.clipboard.writeText(url);
this.clipboardIcon = 'check';
this.showTooltip(event, 'Link copied to clipboard!', true);
} catch (error) {
console.error('Failed to copy URL to clipboard:', error);
this.showTooltip(event, 'Failed to copy link!', true);
}
setTimeout(() => {
this.clipboardIcon = 'clipboard';
}, 3000);
}

Comment on lines +543 to +559
private adjustScrollForFragment() {
const fragment = window.location.hash;
if (fragment) {
const interval = setInterval(() => {
const element = document.querySelector(fragment);
if (element) {
const headerOffset = 6.75 * 16;
const elementPosition = element.getBoundingClientRect().top + window.pageYOffset;
const offsetPosition = elementPosition - headerOffset;

window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
clearInterval(interval);
}
}, 50);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Improve scroll adjustment implementation.

The current implementation has several potential issues:

  1. The interval is not cleaned up if the element is never found, which could lead to memory leaks
  2. The header offset calculation uses magic numbers
  3. No error handling for invalid fragments

Consider applying this improved implementation:

 private adjustScrollForFragment() {
   const fragment = window.location.hash;
   if (fragment) {
+    const HEADER_HEIGHT = 108; // 6.75 * 16
+    const MAX_RETRIES = 50;
+    let retries = 0;
     const interval = setInterval(() => {
       const element = document.querySelector(fragment);
-      if (element) {
+      if (element || retries >= MAX_RETRIES) {
+        clearInterval(interval);
+        if (!element) {
+          console.warn(`Element with fragment ${fragment} not found after ${MAX_RETRIES} retries`);
+          return;
+        }
         const elementPosition = element.getBoundingClientRect().top + window.pageYOffset;
-        const headerOffset = 6.75 * 16;
-        const offsetPosition = elementPosition - headerOffset;
+        const offsetPosition = elementPosition - HEADER_HEIGHT;

         window.scrollTo({
           top: offsetPosition,
           behavior: 'smooth'
         });
-        clearInterval(interval);
       }
+      retries++;
     }, 50);
   }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private adjustScrollForFragment() {
const fragment = window.location.hash;
if (fragment) {
const interval = setInterval(() => {
const element = document.querySelector(fragment);
if (element) {
const headerOffset = 6.75 * 16;
const elementPosition = element.getBoundingClientRect().top + window.pageYOffset;
const offsetPosition = elementPosition - headerOffset;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
clearInterval(interval);
}
}, 50);
private adjustScrollForFragment() {
const fragment = window.location.hash;
if (fragment) {
const HEADER_HEIGHT = 108; // 6.75 * 16
const MAX_RETRIES = 50;
let retries = 0;
const interval = setInterval(() => {
const element = document.querySelector(fragment);
if (element || retries >= MAX_RETRIES) {
clearInterval(interval);
if (!element) {
console.warn(`Element with fragment ${fragment} not found after ${MAX_RETRIES} retries`);
return;
}
const elementPosition = element.getBoundingClientRect().top + window.pageYOffset;
const offsetPosition = elementPosition - HEADER_HEIGHT;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
}
retries++;
}, 50);
}
}

@daroczig daroczig merged commit 6aa4e04 into main Nov 4, 2024
7 checks passed
@daroczig daroczig deleted the dev-405 branch November 4, 2024 18:09
@coderabbitai coderabbitai bot mentioned this pull request Nov 8, 2024
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