|
|
@@ -1,48 +1,36 @@
|
|
|
import type { Query as PiniaOrmQuery } from 'pinia-orm'
|
|
|
+import type { Ref } from 'vue'
|
|
|
import type { ApiFilter } from '~/types/data'
|
|
|
import ApiResource from '~/models/ApiResource'
|
|
|
-import type { Ref } from "vue";
|
|
|
+import AbstractFilter from '~/services/data/Filters/AbstractFilter'
|
|
|
+import RefUtils from '~/services/utils/refUtils'
|
|
|
|
|
|
-export default class EqualFilter implements ApiFilter {
|
|
|
+export default class EqualFilter extends AbstractFilter 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()).
|
|
|
+ * @param reactiveFilter
|
|
|
*/
|
|
|
constructor(
|
|
|
field: string,
|
|
|
value: string | number | null | Ref<string | number | null>,
|
|
|
reactiveFilter: boolean = false,
|
|
|
) {
|
|
|
+ super(reactiveFilter)
|
|
|
this.field = field
|
|
|
this.filterValue = value
|
|
|
- this.reactiveFilter = reactiveFilter
|
|
|
- }
|
|
|
-
|
|
|
- protected filterValueToRef(): Ref<string | number | null> {
|
|
|
- if (isRef(this.filterValue)) {
|
|
|
- if (this.reactiveFilter) {
|
|
|
- return this.filterValue
|
|
|
- } else {
|
|
|
- return ref(this.filterValue.value)
|
|
|
- }
|
|
|
- } else {
|
|
|
- return ref(this.filterValue)
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
public applyToPiniaOrmQuery(
|
|
|
query: PiniaOrmQuery<ApiResource>,
|
|
|
): PiniaOrmQuery<ApiResource> {
|
|
|
- const filterValue = this.filterValueToRef()
|
|
|
+ const filterValue = RefUtils.castToRef(
|
|
|
+ this.filterValue,
|
|
|
+ this.reactiveFilter,
|
|
|
+ )
|
|
|
|
|
|
if (filterValue.value === null) {
|
|
|
return query
|
|
|
@@ -52,7 +40,10 @@ export default class EqualFilter implements ApiFilter {
|
|
|
}
|
|
|
|
|
|
public getApiQueryPart(): string {
|
|
|
- const filterValue = this.filterValueToRef()
|
|
|
+ const filterValue = RefUtils.castToRef(
|
|
|
+ this.filterValue,
|
|
|
+ this.reactiveFilter,
|
|
|
+ )
|
|
|
|
|
|
if (filterValue.value === null) {
|
|
|
return ''
|