Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Generator/WebsiteBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ internal void AddData()
var sb = new StringBuilder();
sb.AppendLine("import { GroupType } from \"@/lib/Types\";");
sb.AppendLine("");
sb.AppendLine($"export const LastSynched: Date = new Date('{DateTimeOffset.UtcNow:yyyy-MM-ddTHH:mm:ss.fffZ}')");
sb.AppendLine("export let Groups: GroupType[] = [");
var groups = records.GroupBy(x => x.Group).OrderBy(x => x.Key);
foreach (var group in groups)
Expand Down
41 changes: 40 additions & 1 deletion Website/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,46 @@

### Changed
- Manual minor release
- (No previous tag website-v1.1.5 found to compare commits)

### Features

* High-performance search system with Web Worker-based processing ([5b5837b](https://github.com/delegateas/DataModelViewer/commit/5b5837b))
* Portal-isolated search component for 60fps input responsiveness ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Next/previous navigation with keyboard shortcuts (Enter, Shift+Enter, Ctrl+↑↓) ([5b5837b](https://github.com/delegateas/DataModelViewer/commit/5b5837b))
* Auto-jump to first search result functionality ([5b5837b](https://github.com/delegateas/DataModelViewer/commit/5b5837b))
* Real-time search progress indication with loading bar ([3800fda](https://github.com/delegateas/DataModelViewer/commit/3800fda))
* Global search on attributes and entities ([3800fda](https://github.com/delegateas/DataModelViewer/commit/3800fda))
* Collapsible sidebar with minimize functionality - PBI 119531 ([0d0f57f](https://github.com/delegateas/DataModelViewer/commit/0d0f57f))
* Auto-collapse sidebar on off-content click for mobile - PBI 119536 ([39726df](https://github.com/delegateas/DataModelViewer/commit/39726df))
* Direct group navigation links to first section in group - PBI 119537 ([ac13fcb](https://github.com/delegateas/DataModelViewer/commit/ac13fcb))

### Performance Improvements

* Time-sliced input processing maintains 60fps during heavy operations ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Web Worker isolation prevents main thread blocking ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Context-based performance scheduling for priority updates ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Progressive result loading for large datasets ([3800fda](https://github.com/delegateas/DataModelViewer/commit/3800fda))
* Enhanced virtualization for better handling of large data sets ([5a2e8a5](https://github.com/delegateas/DataModelViewer/commit/5a2e8a5))

### Bug Fixes

* Prevented screen jumping during tab changes - PBI 119533 ([5a2e8a5](https://github.com/delegateas/DataModelViewer/commit/5a2e8a5))
* Fixed sidebar selection to follow scroll position more accurately - PBI 119535 ([6e4f3ba](https://github.com/delegateas/DataModelViewer/commit/6e4f3ba))
* Fixed item counts to show only visible items - PBI 119588 ([fa450b5](https://github.com/delegateas/DataModelViewer/commit/fa450b5))

### UI/UX Improvements

* Replaced "entity" terminology with "table" throughout UI - PBI 119532 ([f5c8719](https://github.com/delegateas/DataModelViewer/commit/f5c8719))
* Enhanced status attribute styling for better visual hierarchy ([543d453](https://github.com/delegateas/DataModelViewer/commit/543d453))
* Added search icon and modernized search interface ([59aaaa7](https://github.com/delegateas/DataModelViewer/commit/59aaaa7))
* Improved mobile responsiveness and touch interactions

### Code Refactoring

* Moved search functionality into dedicated data context ([6dfde36](https://github.com/delegateas/DataModelViewer/commit/6dfde36))
* Separated search bar and progress bar into independent DOM trees ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Added SearchPerformanceContext for coordinated update scheduling ([4385826](https://github.com/delegateas/DataModelViewer/commit/4385826))
* Enhanced data loading with dedicated worker processing

## [1.1.5] - 2025-07-11

Expand Down
6 changes: 2 additions & 4 deletions Website/components/AppSidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,20 @@ import { SidebarClose, SidebarOpen } from 'lucide-react'
import { useIsMobile } from '@/hooks/use-mobile'
import SidebarNavRail from './SidebarNavRail'
import clsx from 'clsx'
import { useState } from 'react';

interface IAppSidebarProps {}

export const AppSidebar = ({}: IAppSidebarProps) => {
const { element, isOpen } = useSidebar()
const { element, isOpen, showElement } = useSidebar()
const dispatch = useSidebarDispatch()
const isMobile = useIsMobile()
const [showElement, setShowElement] = useState(true)

const toggleSidebar = () => {
dispatch({ type: 'SET_OPEN', payload: !isOpen })
}

const toggleElement = () => {
setShowElement(v => !v)
dispatch({ type: 'SET_SHOW_ELEMENT', payload: !showElement })
}

return (
Expand Down
7 changes: 5 additions & 2 deletions Website/components/SidebarNavRail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import React from "react";
import { useRouter, usePathname } from "next/navigation";
import { LogOut, Info, Database, PencilRuler } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useSidebarDispatch } from "@/contexts/SidebarContext";

const navItems = [
{
Expand All @@ -24,6 +25,8 @@ export default function SidebarNavRail() {
const router = useRouter();
const pathname = usePathname();

const dispatch = useSidebarDispatch();

return (
<nav
className="flex flex-col items-center justify-between h-full min-w-14 bg-white border-r border-sidebar-border py-2"
Expand All @@ -40,7 +43,7 @@ export default function SidebarNavRail() {
disabled={item.disabled}
className={`mb-1 ${pathname === item.href ? "bg-blue-100 text-blue-900" : ""}`}
onClick={() => {
if (!item.disabled && item.href !== "#") router.push(item.href);
if (!item.disabled && item.href !== "#"){ dispatch({ type: 'SET_SHOW_ELEMENT', payload: true }); router.push(item.href); }
}}
>
{item.icon}
Expand All @@ -54,7 +57,7 @@ export default function SidebarNavRail() {
size="icon"
aria-label={"About"}
className={`mb-1 ${pathname === "/about" ? "bg-blue-100 text-blue-900" : ""}`}
onClick={() => { router.push("/about"); }}
onClick={() => { dispatch({ type: 'SET_SHOW_ELEMENT', payload: false }); router.push("/about"); }}
>
<Info />
</Button>
Expand Down
6 changes: 6 additions & 0 deletions Website/components/aboutview/AboutView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import React, { useEffect, useState } from 'react'
import { AppSidebar } from '../AppSidebar'
import { useSidebarDispatch } from '@/contexts/SidebarContext'
import { TooltipProvider } from '@radix-ui/react-tooltip'
import { LastSynched } from '@/generated/Data'

interface IAboutViewProps {}

Expand Down Expand Up @@ -87,6 +88,11 @@ export const AboutView = ({}: IAboutViewProps) => {
<div className="text-center text-sm text-gray-500 mt-8">
Version {version ?? '...'}
</div>

{/* Data Sync */}
<div className="text-center text-sm text-gray-500 mt-8">
Last Synched - {LastSynched ? LastSynched.toLocaleString(undefined, { timeZoneName: 'short' }) : '...'}
</div>
</div>
</TooltipProvider>
</div>
Expand Down
7 changes: 6 additions & 1 deletion Website/contexts/SidebarContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,19 @@ import { createContext, ReactNode, useContext, useEffect, useReducer } from "rea
export interface SidebarState {
element: React.ReactNode;
isOpen: boolean;
showElement: boolean;
}

const initialState: SidebarState = {
element: null,
isOpen: false
isOpen: false,
showElement: true
}

type SidebarAction =
| { type: 'SET_ELEMENT', payload: React.ReactNode }
| { type: 'SET_OPEN', payload: boolean }
| { type: 'SET_SHOW_ELEMENT', payload: boolean }


const sidebarReducer = (state: SidebarState, action: SidebarAction): SidebarState => {
Expand All @@ -23,6 +26,8 @@ const sidebarReducer = (state: SidebarState, action: SidebarAction): SidebarStat
return { ...state, element: action.payload }
case 'SET_OPEN':
return { ...state, isOpen: action.payload }
case 'SET_SHOW_ELEMENT':
return { ...state, showElement: action.payload }
default:
return state;
}
Expand Down
2 changes: 1 addition & 1 deletion Website/stubs/Data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/// This file is a stub and should not be modified directly.

import { GroupType } from "@/lib/Types";

export const LastSynched: Date = new Date()
export let Groups: GroupType[] = [
{
"Name":"Untitled",
Expand Down
Loading