diff --git a/app/w/components/control-bar/components/history-dropdown-item.tsx b/app/w/components/control-bar/components/history-dropdown-item.tsx
new file mode 100644
index 0000000000..fcf325d5c4
--- /dev/null
+++ b/app/w/components/control-bar/components/history-dropdown-item.tsx
@@ -0,0 +1,33 @@
+import { formatDistanceToNow } from 'date-fns'
+import { Clock } from 'lucide-react'
+import { DropdownMenuItem } from '@/components/ui/dropdown-menu'
+import { cn } from '@/lib/utils'
+
+interface HistoryDropdownItemProps {
+ action: string
+ timestamp: number
+ onClick?: () => void
+}
+
+export function HistoryDropdownItem({
+ action,
+ timestamp,
+ onClick,
+}: HistoryDropdownItemProps) {
+ const timeAgo = formatDistanceToNow(timestamp, { addSuffix: true })
+
+ return (
+
+
+
+
+ {timeAgo}
+
+
{action}
+
+
+ )
+}
diff --git a/app/w/components/control-bar/control-bar.tsx b/app/w/components/control-bar/control-bar.tsx
index 3429d8fbcf..c4805bab86 100644
--- a/app/w/components/control-bar/control-bar.tsx
+++ b/app/w/components/control-bar/control-bar.tsx
@@ -10,9 +10,12 @@ import {
import { History, Bell, Play } from 'lucide-react'
import { useNotificationStore } from '@/stores/notifications/notifications-store'
import { NotificationDropdownItem } from './components/notification-dropdown-item'
+import { useWorkflowStore } from '@/stores/workflow/workflow-store'
+import { HistoryDropdownItem } from './components/history-dropdown-item'
export function ControlBar() {
const { notifications } = useNotificationStore()
+ const { history, undo, redo } = useWorkflowStore()
return (
@@ -34,10 +37,25 @@ export function ControlBar() {
Version History
-
- View History
- Compare Versions
-
+
+ {history.past.length === 0 ? (
+
+
+ No history available
+
+
+ ) : (
+
+ {[...history.past].reverse().map((entry) => (
+
+ ))}
+
+ )}
diff --git a/stores/workflow/history-middleware.ts b/stores/workflow/history-middleware.ts
index 414dfb479e..8ecc91e631 100644
--- a/stores/workflow/history-middleware.ts
+++ b/stores/workflow/history-middleware.ts
@@ -19,6 +19,7 @@ export const withHistory = (
edges: initialState.edges,
},
timestamp: Date.now(),
+ action: 'Initial state',
}
return {
@@ -71,12 +72,16 @@ export const withHistory = (
}
}
-export const createHistoryEntry = (state: WorkflowState): HistoryEntry => ({
+export const createHistoryEntry = (
+ state: WorkflowState,
+ action: string
+): HistoryEntry => ({
state: {
blocks: { ...state.blocks },
- edges: [...state.edges],
+ edges: [...state.edges ],
},
timestamp: Date.now(),
+ action,
})
export const pushHistory = (
@@ -89,10 +94,11 @@ export const pushHistory = (
replace?: boolean
) => void,
get: () => WorkflowStoreWithHistory,
- newState: WorkflowState
+ newState: WorkflowState,
+ action: string
) => {
const { history } = get()
- const newEntry = createHistoryEntry(newState)
+ const newEntry = createHistoryEntry(newState, action)
set({
history: {
diff --git a/stores/workflow/history-types.ts b/stores/workflow/history-types.ts
index 5b951bbdc5..94d292d33f 100644
--- a/stores/workflow/history-types.ts
+++ b/stores/workflow/history-types.ts
@@ -3,6 +3,7 @@ import { WorkflowState } from './types'
export interface HistoryEntry {
state: WorkflowState
timestamp: number
+ action: string
}
export interface WorkflowHistory {
diff --git a/stores/workflow/workflow-store.ts b/stores/workflow/workflow-store.ts
index f89fb1682d..7b133abc79 100644
--- a/stores/workflow/workflow-store.ts
+++ b/stores/workflow/workflow-store.ts
@@ -13,6 +13,7 @@ const initialState = {
present: {
state: { blocks: {}, edges: [] },
timestamp: Date.now(),
+ action: 'Initial state',
},
future: [],
},
@@ -76,7 +77,7 @@ export const useWorkflowStore = create()(
}
set(newState)
- pushHistory(set, get, newState)
+ pushHistory(set, get, newState, `Add ${type} block`)
},
updateBlockPosition: (id: string, position: Position) => {
@@ -102,7 +103,7 @@ export const useWorkflowStore = create()(
delete newState.blocks[id]
set(newState)
- pushHistory(set, get, newState)
+ pushHistory(set, get, newState, 'Remove block')
},
addEdge: (edge: Edge) => {
@@ -119,7 +120,7 @@ export const useWorkflowStore = create()(
}
set(newState)
- pushHistory(set, get, newState)
+ pushHistory(set, get, newState, 'Add connection')
},
removeEdge: (edgeId: string) => {
@@ -129,13 +130,13 @@ export const useWorkflowStore = create()(
}
set(newState)
- pushHistory(set, get, newState)
+ pushHistory(set, get, newState, 'Remove connection')
},
clear: () => {
const newState = initialState
set(newState)
- pushHistory(set, get, newState)
+ pushHistory(set, get, newState, 'Clear workflow')
},
})),
{ name: 'workflow-store' }