| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import type { Query as PiniaOrmQuery } from 'pinia-orm'
- import type { Ref } from 'vue'
- import type { ApiFilter } from '~/types/data'
- import type ApiResource from '~/models/ApiResource'
- import AbstractFilter from '~/services/data/Filters/AbstractFilter'
- import RefUtils from '~/services/utils/refUtils'
- export default class InArrayFilter extends AbstractFilter implements ApiFilter {
- field: string
- filterValue:
- | Array<string | number | null>
- | Ref<Array<string | number | null>>
- | null
- /**
- * @param field
- * @param value
- * @param reactiveFilter
- */
- constructor(
- field: string,
- value:
- | Array<string | number | null>
- | Ref<Array<string | number | null>>
- | null,
- reactiveFilter: boolean = false,
- ) {
- super(reactiveFilter)
- this.field = field
- this.filterValue = value
- }
- public applyToPiniaOrmQuery(
- query: PiniaOrmQuery<ApiResource>,
- ): PiniaOrmQuery<ApiResource> {
- const filterValue = RefUtils.castToRef(
- this.filterValue,
- this.reactiveFilter,
- )
- if (filterValue.value === null) {
- return query
- }
- return query.whereIn(this.field, filterValue.value)
- }
- public getApiQueryPart(): string {
- const filterValue = RefUtils.castToRef(
- this.filterValue,
- this.reactiveFilter,
- )
- if (filterValue.value === null) {
- return ''
- }
- if (!Array.isArray(filterValue.value)) {
- filterValue.value = [filterValue.value]
- }
- if (!filterValue.value.length > 0) {
- return ''
- }
- return `${this.field}[in]=${filterValue.value.join(',')}`
- }
- }
|