Files
dashboards/apps/business/src/services/productTechnicalInfoService.ts
T
Alireza HassaniandCursor f566387c61 Initial commit: Meshkee dashboards monorepo.
Includes business, customer, and super-admin apps with shared packages and production deploy scripts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 13:48:53 +03:30

71 lines
1.8 KiB
TypeScript

import { apiRequest } from '../lib/api'
import { getActiveBusinessId } from '../lib/businessContext'
import type {
CategoryTechnicalForm,
ProductTechnicalFormValues,
ProductTechnicalValue,
} from '../types/technicalForm'
function businessPath(productId: string) {
const businessId = getActiveBusinessId()
if (!businessId) {
throw new Error('No active business selected. Please sign in again.')
}
return `/businesses/${businessId}/products/${productId}/technical-info`
}
export interface ProductTechnicalInfoResponse {
form: CategoryTechnicalForm | null
values: ProductTechnicalValue[]
message?: string
}
export function valuesToFormState(
form: CategoryTechnicalForm | null,
values: ProductTechnicalValue[],
): ProductTechnicalFormValues {
const state: ProductTechnicalFormValues = {}
if (form) {
for (const field of form.fields) {
state[field.key] = field.type === 'multi_select' ? [] : ''
}
}
for (const item of values) {
if (item.value === null || item.value === undefined) continue
state[item.fieldKey] = item.value
}
return state
}
export function formStateToPayload(values: ProductTechnicalFormValues) {
return {
values: Object.entries(values)
.filter(([, value]) => {
if (Array.isArray(value)) return value.length > 0
return value !== ''
})
.map(([fieldKey, value]) => ({ fieldKey, value })),
}
}
export async function getProductTechnicalInfo(productId: string, signal?: AbortSignal) {
return apiRequest<ProductTechnicalInfoResponse>(businessPath(productId), {
auth: true,
signal,
})
}
export async function saveProductTechnicalInfo(
productId: string,
values: ProductTechnicalFormValues,
) {
return apiRequest<ProductTechnicalInfoResponse>(businessPath(productId), {
method: 'PUT',
auth: true,
body: formStateToPayload(values),
})
}