Skip to content

Commit

Permalink
fix: codes not found when only in ref
Browse files Browse the repository at this point in the history
  • Loading branch information
nelsondaza committed Dec 10, 2024
1 parent 07c433d commit 9750495
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 16 deletions.
21 changes: 12 additions & 9 deletions packages/linear/src/hooks/useCompareCodes.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { useEffect, useMemo, useState } from 'react'

import { getLinearCodes } from '@repo/linear'

import type { ChangeEventHandler } from 'react'

const useRefCodes = () => {
const title = document.querySelector('#head-ref-selector')?.textContent || ''
return title.toLocaleUpperCase().match(/([A-Z]{2,}-\d+)/gm) || []
}
const useRefCodes = () => getLinearCodes(document.querySelector('#head-ref-selector')?.textContent)

const useMetaCodes = () =>
getLinearCodes(document.querySelector('#partial-discussion-header > div[class*="gh-header-meta"]')?.textContent)

const useTitleCodes = () => {
const [codes, setCodes] = useState<string[]>([])
Expand All @@ -17,7 +19,7 @@ const useTitleCodes = () => {
const onInputChange: ChangeEventHandler<HTMLInputElement> = ({ target }) => {
const content = target?.value || ''
clearTimeout(timeout)
timeout = setTimeout(() => setCodes(content.match(/([A-Z]{2,}-\d+)/gm) || []), 1000)
timeout = setTimeout(() => setCodes(getLinearCodes(content)), 1000)
}

// @ts-ignore
Expand Down Expand Up @@ -46,7 +48,7 @@ const useDescriptionCodes = () => {
const onInputChange: ChangeEventHandler<HTMLTextAreaElement> = ({ target }) => {
const content = target?.value || ''
clearTimeout(timeout)
timeout = setTimeout(() => setCodes(content.match(/([A-Z]{2,}-\d+)/gm) || []), 1000)
timeout = setTimeout(() => setCodes(getLinearCodes(content)), 1000)
}

// @ts-ignore
Expand All @@ -67,19 +69,20 @@ const useDescriptionCodes = () => {

export const useCompareCodes = () => {
const refCodes = useRefCodes()
const titieCodes = useTitleCodes()
const titleCodes = useTitleCodes()
const descriptionCodes = useDescriptionCodes()
const metaCodes = useMetaCodes()

return useMemo(
() =>
[...refCodes, ...titieCodes, ...descriptionCodes]
[...refCodes, ...titleCodes, ...descriptionCodes, ...metaCodes]
.toSorted((a, b) => {
if (a.length === b.length) {
return a.localeCompare(b)
}
return a.length - b.length
})
.filter((code, index, array) => array.lastIndexOf(code) === index),
[refCodes.toString(), titieCodes.toString(), descriptionCodes.toString()],
[refCodes.toString(), titleCodes.toString(), descriptionCodes.toString(), metaCodes.toString()],
)
}
18 changes: 11 additions & 7 deletions packages/linear/src/hooks/usePullRequestCodes.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { useEffect, useMemo, useState } from 'react'

const useTitleCodes = () => {
const title = document.querySelector('#partial-discussion-header h1[class*="title"]')?.textContent || ''
return title.match(/([A-Z]{2,}-\d+)/gm) || []
}
import { getLinearCodes } from '@repo/linear'

const useTitleCodes = () =>
getLinearCodes(document.querySelector('#partial-discussion-header h1[class*="title"]')?.textContent)

const useMetaCodes = () =>
getLinearCodes(document.querySelector('#partial-discussion-header > div[class*="gh-header-meta"]')?.textContent)

const useCommentCodes = () => {
const [codes, setCodes] = useState<string[]>([])
Expand All @@ -14,7 +17,7 @@ const useCommentCodes = () => {
// Create an observer instance linked to the callback function
const observer = new MutationObserver(() => {
const content = contentNode?.textContent || ''
setCodes(content.match(/([A-Z]{2,}-\d+)/gm) || [])
setCodes(getLinearCodes(content))
})

// Start observing the target node for configured mutations
Expand All @@ -32,17 +35,18 @@ const useCommentCodes = () => {
export const usePullRequestCodes = () => {
const titleCodes = useTitleCodes()
const commentCodes = useCommentCodes()
const metaCodes = useMetaCodes()

return useMemo(
() =>
[...titleCodes, ...commentCodes]
[...titleCodes, ...commentCodes, ...metaCodes]
.toSorted((a, b) => {
if (a.length === b.length) {
return a.localeCompare(b)
}
return a.length - b.length
})
.filter((code, index, array) => array.lastIndexOf(code) === index),
[titleCodes.toString(), commentCodes.toString()],
[titleCodes.toString(), commentCodes.toString(), metaCodes.toString()],
)
}
7 changes: 7 additions & 0 deletions packages/linear/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ export const setCompareTitle = (title: string) => {
titleNode.value = title
}
}

export const getLinearCodes = (str?: null | string) => {
const codes = (str || '').match(/([A-Z0-9]{1,7}-\d+)/gim) || []
return codes
.map((code) => code.toUpperCase())
.filter((code, index, array) => array.lastIndexOf(code) === index && !code.startsWith('ISSUE-'))
}

0 comments on commit 9750495

Please sign in to comment.