Client-side/server-side filters (#204)

* Add client and server side categories

* Quick fix for mistyped facet

* Get rid of console.logs used for debugging

* Re-add eslint overrides

* Optimize SVG

* Simplify .includes() checks
This commit is contained in:
venashial
2021-05-16 12:35:46 -07:00
committed by GitHub
parent 63ed7a734b
commit c97cba69b9
3 changed files with 78 additions and 3 deletions

View File

@@ -244,6 +244,23 @@
>
<ForgeLoader />
</SearchFilter>
<h3>Environments</h3>
<SearchFilter
:active-filters="selectedEnvironments"
display-name="Client"
facet-name="client"
@toggle="toggleEnv"
>
<ClientSide />
</SearchFilter>
<SearchFilter
:active-filters="selectedEnvironments"
display-name="Server"
facet-name="server"
@toggle="toggleEnv"
>
<ServerSide />
</SearchFilter>
<h3>Minecraft Versions</h3>
<SearchFilter
:active-filters="showVersions"
@@ -314,6 +331,9 @@ import WorldGenCategory from '~/assets/images/categories/worldgen.svg?inline'
import ForgeLoader from '~/assets/images/categories/forge.svg?inline'
import FabricLoader from '~/assets/images/categories/fabric.svg?inline'
import ClientSide from '~/assets/images/categories/client.svg?inline'
import ServerSide from '~/assets/images/categories/server.svg?inline'
import SearchIcon from '~/assets/images/utils/search.svg?inline'
import ExitIcon from '~/assets/images/utils/exit.svg?inline'
@@ -342,6 +362,8 @@ export default {
WorldGenCategory,
ForgeLoader,
FabricLoader,
ClientSide,
ServerSide,
SearchIcon,
ExitIcon,
},
@@ -354,6 +376,8 @@ export default {
}
if (this.$route.query.v)
this.selectedVersions = this.$route.query.v.split(',')
if (this.$route.query.e)
this.selectedEnvironments = this.$route.query.e.split(',')
if (this.$route.query.s) {
this.sortType.name = this.$route.query.s
@@ -399,6 +423,8 @@ export default {
selectedVersions: [],
versions: [],
selectedEnvironments: [],
facets: [],
results: null,
pages: [],
@@ -476,11 +502,11 @@ export default {
this.displayLicense = null
this.selectedLicense = null
this.selectedVersions = []
this.selectedEnvironments = []
await this.onSearchChange(1)
},
async toggleFacet(elementName, sendRequest) {
const index = this.facets.indexOf(elementName)
if (index !== -1) {
this.facets.splice(index, 1)
} else {
@@ -489,6 +515,16 @@ export default {
if (!sendRequest) await this.onSearchChange(1)
},
async toggleEnv(environment, sendRequest) {
const index = this.selectedEnvironments.indexOf(environment)
if (index !== -1) {
this.selectedEnvironments.splice(index, 1)
} else {
this.selectedEnvironments.push(environment)
}
if (!sendRequest) await this.onSearchChange(1)
},
async onSearchChangeToTop(newPageNumber) {
if (process.client) window.scrollTo({ top: 0, behavior: 'smooth' })
@@ -507,8 +543,12 @@ export default {
params.push(`query=${this.query.replace(/ /g, '+')}`)
}
if (this.facets.length > 0 || this.selectedVersions.length > 0) {
const formattedFacets = []
if (
this.facets.length > 0 ||
this.selectedVersions.length > 0 ||
this.selectedEnvironments.length > 0
) {
let formattedFacets = []
for (const facet of this.facets) {
formattedFacets.push([facet])
}
@@ -521,6 +561,34 @@ export default {
formattedFacets.push(versionFacets)
}
if (this.selectedEnvironments.length > 0) {
let environmentFacets = []
const includesClient = this.selectedEnvironments.includes('client')
const includesServer = this.selectedEnvironments.includes('server')
if (includesClient && includesServer) {
environmentFacets = [
['client_side:required'],
['server_side:required'],
]
} else {
if (includesClient) {
environmentFacets = [
['client_side:optional', 'client_side:required'],
['server_side:optional', 'server_side:unsupported'],
]
}
if (includesServer) {
environmentFacets = [
['client_side:optional', 'client_side:unsupported'],
['server_side:optional', 'server_side:required'],
]
}
}
formattedFacets = [...formattedFacets, ...environmentFacets]
}
params.push(`facets=${JSON.stringify(formattedFacets)}`)
}
@@ -575,6 +643,8 @@ export default {
url += `&f=${encodeURIComponent(this.facets)}`
if (this.selectedVersions.length > 0)
url += `&v=${encodeURIComponent(this.selectedVersions)}`
if (this.selectedEnvironments.length > 0)
url += `&e=${encodeURIComponent(this.selectedEnvironments)}`
if (this.sortType.name !== 'relevance')
url += `&s=${encodeURIComponent(this.sortType.name)}`
if (this.maxResults > 20)