mirror of
https://github.com/umami-software/umami.git
synced 2026-05-30 06:47:25 +00:00
Add dashboard filter controls and improve Redis reconnect handling
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user