Cleaned up code for SearchMarkers comp
And also cleaned a fair bit of its code
This commit is contained in:
@@ -14,16 +14,29 @@ const markers = props.markers
|
|||||||
const qInput = ref()
|
const qInput = ref()
|
||||||
const { focused: isFocused } = useFocus(qInput)
|
const { focused: isFocused } = useFocus(qInput)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available advanced search modes
|
||||||
|
* Currently only groups MapMarkerGroup and string "query"
|
||||||
|
*/
|
||||||
|
type SearchMode = "query" | MapMarkerGroup
|
||||||
|
|
||||||
|
const currentSearchMode = ref<SearchMode>('query')
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
isFocused.value = true
|
isFocused.value = true
|
||||||
})
|
})
|
||||||
|
|
||||||
const shouldBeActive = computed(() => q.value.length > 0 || currentSearchMode.value !== "query")
|
const hasQuery = computed(() => q.value.length > 0)
|
||||||
|
const shouldBeActive = computed(() => hasQuery.value || currentSearchMode.value !== "query")
|
||||||
|
|
||||||
const q = ref<string>("")
|
const q = ref<string>("")
|
||||||
|
|
||||||
const unifier = new RegExp(/[^a-zA-Z0-9\-\'']/g)
|
const unifier = new RegExp(/[^a-zA-Z0-9\-\'']/g)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dropdown's markers list
|
||||||
|
* If the search doesn't have a query set, defaults to marker grouping
|
||||||
|
*/
|
||||||
const filteredMarkers = computed(() => {
|
const filteredMarkers = computed(() => {
|
||||||
if (currentSearchMode.value === "query") {
|
if (currentSearchMode.value === "query") {
|
||||||
return markers?.filter(m => {
|
return markers?.filter(m => {
|
||||||
@@ -40,7 +53,16 @@ const filteredMarkers = computed(() => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// Key Combos
|
// Limit of menu list dropdown
|
||||||
|
const currentLimit = computed(() => {
|
||||||
|
if (currentSearchMode.value === "query") return 10
|
||||||
|
return 100
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ACCESSIBILITY
|
||||||
|
*/
|
||||||
|
// Registered key combos
|
||||||
const keys = useMagicKeys()
|
const keys = useMagicKeys()
|
||||||
const shortcutKeyCombo = keys['Shift+Period']
|
const shortcutKeyCombo = keys['Shift+Period']
|
||||||
const eraseKeyCombo = keys['Escape']
|
const eraseKeyCombo = keys['Escape']
|
||||||
@@ -49,13 +71,13 @@ whenever(shortcutKeyCombo, () => {
|
|||||||
isFocused.value = true
|
isFocused.value = true
|
||||||
})
|
})
|
||||||
whenever(eraseKeyCombo, () => {
|
whenever(eraseKeyCombo, () => {
|
||||||
resetQueryValue()
|
resetAllFields()
|
||||||
setSearchMode('query')
|
|
||||||
isFocused.value = true
|
isFocused.value = true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// If query changes and has new value...
|
||||||
watch(q, (n, o) => {
|
watch(q, (n, o) => {
|
||||||
if (n) setSearchMode('query');
|
if (n) setSearchMode('query')
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,32 +111,60 @@ onUpdated(() => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
type SearchMode = "query" | MapMarkerGroup;
|
/**
|
||||||
|
* Advanced Search Mode
|
||||||
|
* Uses filters to show specific kinds of markers in the search results
|
||||||
|
*/
|
||||||
|
|
||||||
const currentSearchMode = ref<SearchMode>('query');
|
// TODO: This should be refactored with better type checking
|
||||||
|
|
||||||
// This should be refactored with better type checking
|
|
||||||
// It does the job for now but will be a pain if I had another feature that uses group sorting
|
// It does the job for now but will be a pain if I had another feature that uses group sorting
|
||||||
const hasGroupFilter = computed(() => {
|
const hasGroupFilter = computed(() => {
|
||||||
return currentSearchMode.value !== 'query'
|
return currentSearchMode.value !== 'query'
|
||||||
})
|
})
|
||||||
|
|
||||||
const currentLimit = computed(() => {
|
|
||||||
if (currentSearchMode.value === "query") return 10
|
|
||||||
return 100;
|
|
||||||
})
|
|
||||||
|
|
||||||
function setSearchMode(m: SearchMode) {
|
|
||||||
currentSearchMode.value = m;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setActiveCategory(g: MapMarkerGroup) {
|
function setActiveCategory(g: MapMarkerGroup) {
|
||||||
resetQueryValue()
|
resetQueryValue()
|
||||||
currentSearchMode.value = g;
|
|
||||||
|
if (currentSearchMode.value !== g) {
|
||||||
|
currentSearchMode.value = g
|
||||||
|
} else {
|
||||||
|
currentSearchMode.value = "query"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EVENTS
|
||||||
|
*/
|
||||||
|
// Close Button event
|
||||||
|
function onCloseQuery() {
|
||||||
|
resetAllFields("focusAfter")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTILITIES
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Switches current search mode
|
||||||
|
*/
|
||||||
|
function setSearchMode(m: SearchMode) {
|
||||||
|
currentSearchMode.value = m
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets active query in field
|
||||||
|
*/
|
||||||
function resetQueryValue() {
|
function resetQueryValue() {
|
||||||
q.value = "";
|
q.value = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets category and query states, default state
|
||||||
|
*/
|
||||||
|
function resetAllFields(actionAfter?: "focusAfter") {
|
||||||
|
setSearchMode('query')
|
||||||
|
resetQueryValue()
|
||||||
|
|
||||||
|
if (actionAfter === "focusAfter") isFocused.value = true
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -125,7 +175,7 @@ function resetQueryValue() {
|
|||||||
<i class="search-icon ph-fill ph-magnifying-glass"></i>
|
<i class="search-icon ph-fill ph-magnifying-glass"></i>
|
||||||
<input ref="qInput" name="recherche" type="text" v-model="q" title="Rechercher le monde" placeholder="Ville, point d'intérêt…">
|
<input ref="qInput" name="recherche" type="text" v-model="q" title="Rechercher le monde" placeholder="Ville, point d'intérêt…">
|
||||||
|
|
||||||
<button v-if="hasGroupFilter" @click="setSearchMode('query')" class="close-btn" title="Enlever le filtre">
|
<button v-if="hasGroupFilter || hasQuery" @click="onCloseQuery" class="close-btn" title="Enlever le filtre">
|
||||||
<i class="ph-light ph-x"></i>
|
<i class="ph-light ph-x"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user