Add dashboard filter controls and improve Redis reconnect handling

This commit is contained in:
Mike Cao 2026-02-20 23:47:10 -08:00
parent 3d2f7f5a4b
commit 6a2692b521
3 changed files with 37 additions and 0 deletions

View file

@ -1,6 +1,7 @@
'use client';
import { Column } from '@umami/react-zen';
import { useEffect } from 'react';
import { BoardControls } from '@/app/(main)/boards/[boardId]/BoardControls';
import { BoardEditBody } from '@/app/(main)/boards/[boardId]/BoardEditBody';
import { PageBody } from '@/components/common/PageBody';
import { useNavigation } from '@/components/hooks';
@ -25,6 +26,7 @@ export function DashboardEditPage() {
<PageBody>
<Column>
<DashboardEditHeader />
<BoardControls />
<BoardEditBody requiresBoardWebsite={false} />
</Column>
</PageBody>

View file

@ -1,6 +1,7 @@
'use client';
import { Column } from '@umami/react-zen';
import { useEffect } from 'react';
import { BoardControls } from '@/app/(main)/boards/[boardId]/BoardControls';
import { BoardViewBody } from '@/app/(main)/boards/[boardId]/BoardViewBody';
import { Empty } from '@/components/common/Empty';
import { PageBody } from '@/components/common/PageBody';
@ -39,6 +40,7 @@ export function DashboardViewPage() {
<PageBody>
<Column>
<DashboardViewHeader />
<BoardControls />
<DashboardContent />
</Column>
</PageBody>

View file

@ -5,6 +5,39 @@ const enabled = !!process.env.REDIS_URL;
function getClient() {
const redis = new UmamiRedisClient({ url: process.env.REDIS_URL });
const originalConnect = redis.connect.bind(redis);
let connectPromise: Promise<void> | null = null;
const resetConnectionState = () => {
redis.isConnected = false;
};
redis.client.on('end', resetConnectionState);
redis.client.on('reconnecting', resetConnectionState);
redis.connect = async () => {
if (redis.client.isReady || redis.client.isOpen) {
redis.isConnected = true;
return;
}
if (connectPromise) {
return connectPromise;
}
connectPromise = (async () => {
try {
await originalConnect();
} catch (error) {
redis.isConnected = false;
throw error;
} finally {
connectPromise = null;
}
})();
return connectPromise;
};
if (process.env.NODE_ENV !== 'production') {
globalThis[REDIS] = redis;