escape quotes for label search on Web
This commit is contained in:
@ -510,7 +510,7 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
const checkboxRef = useRef<HTMLInputElement | null>(null)
|
||||
const state = useMemo(() => {
|
||||
const term = props.searchTerm ?? ''
|
||||
if (term.indexOf(`label:\"${props.label.name}\"`) >= 0) {
|
||||
if (term.indexOf(`label:\"${escapeQuotes(props.label.name)}\"`) >= 0) {
|
||||
return 'on'
|
||||
}
|
||||
return 'off'
|
||||
@ -560,7 +560,7 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
props.applySearchQuery(query.trim())
|
||||
} else {
|
||||
props.applySearchQuery(
|
||||
`${query.trim()} label:\"${props.label.name}\"`
|
||||
`${query.trim()} label:\"${escapeQuotes(props.label.name)}\"`
|
||||
)
|
||||
}
|
||||
}}
|
||||
@ -579,16 +579,14 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
type="checkbox"
|
||||
checked={state === 'on'}
|
||||
onChange={(e) => {
|
||||
const escapedName = escapeQuotes(props.label.name)
|
||||
if (e.target.checked) {
|
||||
props.applySearchQuery(
|
||||
`${props.searchTerm ?? ''} label:\"${props.label.name}\"`
|
||||
`${props.searchTerm ?? ''} label:\"${escapedName}\"`
|
||||
)
|
||||
} else {
|
||||
const query =
|
||||
props.searchTerm?.replace(
|
||||
`label:\"${props.label.name}\"`,
|
||||
''
|
||||
) ?? ''
|
||||
props.searchTerm?.replace(`label:\"${escapedName}\"`, '') ?? ''
|
||||
props.applySearchQuery(query)
|
||||
}
|
||||
}}
|
||||
|
||||
@ -935,7 +935,7 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
const checkboxRef = useRef<HTMLInputElement | null>(null)
|
||||
const state = useMemo(() => {
|
||||
const term = props.searchTerm ?? ''
|
||||
if (term.indexOf(`label:\"${props.label.name}\"`) >= 0) {
|
||||
if (term.indexOf(`label:\"${escapeQuotes(props.label.name)}\"`) >= 0) {
|
||||
return 'on'
|
||||
}
|
||||
return 'off'
|
||||
@ -985,7 +985,7 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
props.applySearchQuery(query.trim())
|
||||
} else {
|
||||
props.applySearchQuery(
|
||||
`${query.trim()} label:\"${props.label.name}\"`
|
||||
`${query.trim()} label:\"${escapeQuotes(props.label.name)}\"`
|
||||
)
|
||||
}
|
||||
}}
|
||||
@ -1004,14 +1004,15 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
type="checkbox"
|
||||
checked={state === 'on'}
|
||||
onChange={(e) => {
|
||||
const escapedLabelName = escapeQuotes(props.label.name)
|
||||
if (e.target.checked) {
|
||||
props.applySearchQuery(
|
||||
`${props.searchTerm ?? ''} label:\"${props.label.name}\"`
|
||||
`${props.searchTerm ?? ''} label:\"${escapedLabelName}\"`
|
||||
)
|
||||
} else {
|
||||
const query =
|
||||
props.searchTerm?.replace(
|
||||
`label:\"${props.label.name}\"`,
|
||||
`label:\"${escapedLabelName}\"`,
|
||||
''
|
||||
) ?? ''
|
||||
props.applySearchQuery(query)
|
||||
|
||||
@ -21,6 +21,7 @@ import { Label } from '../../lib/networking/fragments/labelFragment'
|
||||
import { CheckSquare, Circle, Square } from 'phosphor-react'
|
||||
import { SavedSearch } from '../../lib/networking/fragments/savedSearchFragment'
|
||||
import { usePersistedState } from '../../lib/hooks/usePersistedState'
|
||||
import { escapeQuotes } from '../../utils/helper'
|
||||
|
||||
export type PinnedSearch = {
|
||||
type: 'saved-search' | 'label'
|
||||
@ -282,7 +283,7 @@ function LabelButton(props: LabelButtonProps): JSX.Element {
|
||||
type: 'label',
|
||||
itemId: props.label.id,
|
||||
name: props.label.name,
|
||||
search: `label:\"${props.label.name}\"`,
|
||||
search: `label:\"${escapeQuotes(props.label.name)}\"`,
|
||||
}}
|
||||
listAction={props.listAction}
|
||||
>
|
||||
|
||||
@ -357,7 +357,7 @@ const AvailableItems = (props: ListProps): JSX.Element => {
|
||||
type: 'label',
|
||||
label: label,
|
||||
name: label.name,
|
||||
filter: `label:\"${label.name}\"`,
|
||||
filter: `label:\"${escapeQuotes(label.name)}\"`,
|
||||
}
|
||||
props.dispatchList({
|
||||
item,
|
||||
|
||||
Reference in New Issue
Block a user