🚸 (editor) Enable groups clipboard accross tabs
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
import { createWithEqualityFn } from 'zustand/traditional'
|
import { createWithEqualityFn } from 'zustand/traditional'
|
||||||
import { Coordinates, CoordinatesMap } from '../types'
|
import { Coordinates, CoordinatesMap } from '../types'
|
||||||
import { Edge, Group, GroupV6 } from '@typebot.io/schemas'
|
import { Edge, Group, GroupV6 } from '@typebot.io/schemas'
|
||||||
|
import { persist } from 'zustand/middleware'
|
||||||
|
|
||||||
type Store = {
|
type Store = {
|
||||||
focusedGroups: string[]
|
focusedGroups: string[]
|
||||||
@ -19,69 +20,77 @@ type Store = {
|
|||||||
setIsDraggingGraph: (isDragging: boolean) => void
|
setIsDraggingGraph: (isDragging: boolean) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useGroupsStore = createWithEqualityFn<Store>((set, get) => ({
|
export const useGroupsStore = createWithEqualityFn<Store>()(
|
||||||
focusedGroups: [],
|
persist(
|
||||||
groupsCoordinates: undefined,
|
(set, get) => ({
|
||||||
groupsInClipboard: undefined,
|
focusedGroups: [],
|
||||||
isDraggingGraph: false,
|
groupsCoordinates: undefined,
|
||||||
getGroupsCoordinates: () => get().groupsCoordinates,
|
groupsInClipboard: undefined,
|
||||||
focusGroup: (groupId, isShiftKeyPressed) =>
|
isDraggingGraph: false,
|
||||||
set((state) => ({
|
getGroupsCoordinates: () => get().groupsCoordinates,
|
||||||
focusedGroups: isShiftKeyPressed
|
focusGroup: (groupId, isShiftKeyPressed) =>
|
||||||
? state.focusedGroups.includes(groupId)
|
set((state) => ({
|
||||||
? state.focusedGroups.filter((id) => id !== groupId)
|
focusedGroups: isShiftKeyPressed
|
||||||
: [...state.focusedGroups, groupId]
|
? state.focusedGroups.includes(groupId)
|
||||||
: [groupId],
|
? state.focusedGroups.filter((id) => id !== groupId)
|
||||||
})),
|
: [...state.focusedGroups, groupId]
|
||||||
blurGroups: () => set({ focusedGroups: [] }),
|
: [groupId],
|
||||||
moveFocusedGroups: (delta) =>
|
})),
|
||||||
set(({ focusedGroups, groupsCoordinates }) => ({
|
blurGroups: () => set({ focusedGroups: [] }),
|
||||||
groupsCoordinates: groupsCoordinates
|
moveFocusedGroups: (delta) =>
|
||||||
? {
|
set(({ focusedGroups, groupsCoordinates }) => ({
|
||||||
...groupsCoordinates,
|
groupsCoordinates: groupsCoordinates
|
||||||
...focusedGroups.reduce(
|
? {
|
||||||
(coords, groupId) => ({
|
...groupsCoordinates,
|
||||||
...coords,
|
...focusedGroups.reduce(
|
||||||
[groupId]: {
|
(coords, groupId) => ({
|
||||||
x: groupsCoordinates[groupId].x + delta.x,
|
...coords,
|
||||||
y: groupsCoordinates[groupId].y + delta.y,
|
[groupId]: {
|
||||||
},
|
x: groupsCoordinates[groupId].x + delta.x,
|
||||||
}),
|
y: groupsCoordinates[groupId].y + delta.y,
|
||||||
groupsCoordinates
|
},
|
||||||
),
|
}),
|
||||||
}
|
groupsCoordinates
|
||||||
: undefined,
|
),
|
||||||
})),
|
}
|
||||||
setFocusedGroups: (groupIds) => set({ focusedGroups: groupIds }),
|
: undefined,
|
||||||
setGroupsCoordinates: (groups) =>
|
})),
|
||||||
set({
|
setFocusedGroups: (groupIds) => set({ focusedGroups: groupIds }),
|
||||||
groupsCoordinates: groups
|
setGroupsCoordinates: (groups) =>
|
||||||
? groups.reduce(
|
set({
|
||||||
(coords, group) => ({
|
groupsCoordinates: groups
|
||||||
...coords,
|
? groups.reduce(
|
||||||
[group.id]: {
|
(coords, group) => ({
|
||||||
x: group.graphCoordinates.x,
|
...coords,
|
||||||
y: group.graphCoordinates.y,
|
[group.id]: {
|
||||||
},
|
x: group.graphCoordinates.x,
|
||||||
}),
|
y: group.graphCoordinates.y,
|
||||||
{}
|
},
|
||||||
)
|
}),
|
||||||
: undefined,
|
{}
|
||||||
}),
|
)
|
||||||
updateGroupCoordinates: (groupId, newCoord) => {
|
: undefined,
|
||||||
set((state) => ({
|
}),
|
||||||
groupsCoordinates: {
|
updateGroupCoordinates: (groupId, newCoord) => {
|
||||||
...state.groupsCoordinates,
|
set((state) => ({
|
||||||
[groupId]: newCoord,
|
groupsCoordinates: {
|
||||||
},
|
...state.groupsCoordinates,
|
||||||
}))
|
[groupId]: newCoord,
|
||||||
},
|
},
|
||||||
copyGroups: (groups, edges) =>
|
}))
|
||||||
set({
|
|
||||||
groupsInClipboard: {
|
|
||||||
groups,
|
|
||||||
edges,
|
|
||||||
},
|
},
|
||||||
|
copyGroups: (groups, edges) =>
|
||||||
|
set({
|
||||||
|
groupsInClipboard: {
|
||||||
|
groups,
|
||||||
|
edges,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
setIsDraggingGraph: (isDragging) => set({ isDraggingGraph: isDragging }),
|
||||||
}),
|
}),
|
||||||
setIsDraggingGraph: (isDragging) => set({ isDraggingGraph: isDragging }),
|
{
|
||||||
}))
|
name: 'store',
|
||||||
|
partialize: (state) => ({ groupsInClipboard: state.groupsInClipboard }),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user