| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import type { Query as PiniaOrmQuery } from 'pinia-orm'
- import type { ApiFilter } from '~/types/data'
- import ApiResource from '~/models/ApiResource'
- export default class Equal implements ApiFilter {
- field: string
- filterValue: string | number | null | Ref<string | number | null>
- reactiveFilter: boolean
- /**
- * @param field
- * @param value
- * @param reactiveFilter Est-ce qu'on doit conserver la réactivité du filtre ? Concrètement, dans le cas d'une
- * recherche textuelle, si le filtre est réactif, le résultat de la query Pinia-ORM sera
- * filtré à chaque fois que le filtre est modifié (même sans refresh ou nouvel appel à
- * fetchCollection). Si reactiveFilter est false (comportement par défaut), le résultat
- * de la query ne sera mis à jour qu'en cas de nouvel appel à fetchCollection (ou à refresh()).
- */
- constructor(
- field: string,
- value: string | number | null | Ref<string | number | null>,
- reactiveFilter: boolean = false,
- ) {
- this.field = field
- this.filterValue = value
- this.reactiveFilter = reactiveFilter
- }
- public applyToPiniaOrmQuery(
- query: PiniaOrmQuery<ApiResource>,
- ): PiniaOrmQuery<ApiResource> {
- let filterValue = null
- if (isRef(this.filterValue)) {
- filterValue = this.reactiveFilter
- ? this.filterValue
- : ref(this.filterValue.value)
- } else {
- filterValue = ref(this.filterValue)
- }
- if (filterValue === null || filterValue.value === null) {
- return query
- }
- return query.where(this.field, filterValue.value)
- }
- public getApiQueryPart(): string {
- let filterValue = null
- if (isRef(this.filterValue)) {
- filterValue = this.reactiveFilter
- ? this.filterValue
- : ref(this.filterValue.value)
- } else {
- filterValue = ref(this.filterValue)
- }
- if (filterValue === null || filterValue.value === null) {
- return ''
- }
- return `${this.field}=${filterValue.value}`
- }
- }
|