Files
webapp/app/stores/search.js
2026-01-07 09:10:35 +07:00

97 lines
1.9 KiB
JavaScript

import { defineStore } from 'pinia'
import { ref, computed, readonly } from 'vue'
export const useSearchStore = defineStore('search', () => {
// State for search form
const searchForm = ref({
product: '',
productUuid: '', // UUID for API
quantity: '',
unit: 'tons',
location: '',
locationUuid: '' // UUID for API
})
// State for created request
const currentRequest = ref(null)
// Getters
const isFormComplete = computed(() => {
return searchForm.value.product &&
searchForm.value.quantity &&
searchForm.value.location
})
const getSearchUrl = computed(() => {
if (!isFormComplete.value) return ''
const params = new URLSearchParams({
product: searchForm.value.product,
quantity: searchForm.value.quantity,
unit: searchForm.value.unit,
location: searchForm.value.location
})
return `/search?${params.toString()}`
})
// Actions
const setProduct = (product) => {
searchForm.value.product = product
}
const setProductUuid = (uuid) => {
searchForm.value.productUuid = uuid
}
const setLocation = (location) => {
searchForm.value.location = location
}
const setLocationUuid = (uuid) => {
searchForm.value.locationUuid = uuid
}
const setQuantity = (quantity) => {
searchForm.value.quantity = quantity
}
const setUnit = (unit) => {
searchForm.value.unit = unit
}
const setRequest = (request) => {
currentRequest.value = request
}
const resetForm = () => {
searchForm.value = {
product: '',
productUuid: '',
quantity: '',
unit: 'tons',
location: '',
locationUuid: ''
}
currentRequest.value = null
}
return {
// State
searchForm,
currentRequest,
// Getters
isFormComplete,
getSearchUrl,
// Actions
setProduct,
setProductUuid,
setLocation,
setLocationUuid,
setQuantity,
setUnit,
setRequest,
resetForm
}
})