( items: readonly TaskModalProjectItem[], candidate: TaskModalProjectItem )
| 84 | } |
| 85 | |
| 86 | export function hasTaskModalProjectItem( |
| 87 | items: readonly TaskModalProjectItem[], |
| 88 | candidate: TaskModalProjectItem |
| 89 | ): boolean { |
| 90 | const candidateKeys = getTaskModalProjectDedupKeys(candidate); |
| 91 | return items.some((existing) => { |
| 92 | const existingKeys = getTaskModalProjectDedupKeys(existing); |
| 93 | return candidateKeys.some((key) => existingKeys.includes(key)); |
| 94 | }); |
| 95 | } |
| 96 | |
| 97 | export function getTaskModalProjectDedupKeys(item: TaskModalProjectItem): string[] { |
| 98 | const keys = new Set<string>(); |
no test coverage detected