2
0

🐛 (editor) Fix duplicate group unique key parsing

Closes #1148
This commit is contained in:
Baptiste Arnaud
2024-01-12 14:59:28 +01:00
parent e95e31e22c
commit 1c4c058e01
2 changed files with 23 additions and 17 deletions

View File

@ -9,6 +9,7 @@ import {
} from './blocks'
import { isEmpty } from '@typebot.io/lib'
import { Coordinates } from '@/features/graph/types'
import { parseUniqueKey } from '@typebot.io/lib/parseUniqueKey'
export type GroupsActions = {
createGroup: (
@ -64,19 +65,16 @@ const groupsActions = (setTypebot: SetTypebot): GroupsActions => ({
const group = typebot.groups[groupIndex]
const id = createId()
const totalGroupsWithSameTitle = typebot.groups.filter(
(g) => g.title === group.title
).length
const groupTitle = isEmpty(group.title)
? ''
: parseUniqueKey(
group.title,
typebot.groups.map((g) => g.title)
)
const newGroup: GroupV6 = {
...group,
title: isEmpty(group.title)
? ''
: `${group.title}${
totalGroupsWithSameTitle > 0
? ` (${totalGroupsWithSameTitle})`
: ''
}`,
title: groupTitle,
id,
blocks: group.blocks.map((block) => duplicateBlockDraft(block)),
graphCoordinates: {

View File

@ -1,8 +1,16 @@
export const parseUniqueKey = (
key: string,
existingKeys: string[],
count = 0
): string => {
if (!existingKeys.includes(key)) return key
return parseUniqueKey(`${key} (${count + 1})`, existingKeys, count + 1)
export const parseUniqueKey = (key: string, existingKeys: string[]): string => {
const keyMatcher = /^(.*?)\s*\(\d+\)$/
const parsedKey = keyMatcher.test(key) ? key.match(keyMatcher)![1] : key
const sameKeyCount = existingKeys.reduce((acc, existingKey) => {
if (
(keyMatcher.test(existingKey) &&
existingKey.match(keyMatcher)![1] === parsedKey) ||
parsedKey === existingKey
) {
return acc + 1
}
return acc
}, 0)
if (sameKeyCount === 0) return parsedKey
return `${parsedKey} (${sameKeyCount})`
}