Tldraw/packages/editor/src/lib/utils/getIncrementedName.ts

23 wiersze
537 B
TypeScript

/**
* Get an incremented name (e.g. New page (2)) from a name (e.g. New page), based on an array of
* existing names.
*
* @param name - The name to increment.
* @param others - The array of existing names.
* @public
*/
export function getIncrementedName(name: string, others: string[]) {
let result = name
const set = new Set(others)
while (set.has(result)) {
result = /^.*(\d+)$/.exec(result)?.[1]
? result.replace(/(\d+)(?=\D?)$/, (m) => {
return (+m + 1).toString()
})
: `${result} 1`
}
return result
}