Files
dashboards/apps/business/src/services/categoryTechnicalFormService.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

83 lines
2.1 KiB
TypeScript

import { apiRequest } from '../lib/api'
import { getActiveBusinessId } from '../lib/businessContext'
import type {
CategoryTechnicalForm,
TechnicalFormFieldDraft,
TechnicalFormField,
} from '../types/technicalForm'
function businessPath(categoryId: string) {
const businessId = getActiveBusinessId()
if (!businessId) {
throw new Error('No active business selected. Please sign in again.')
}
return `/businesses/${businessId}/categories/${categoryId}/technical-form`
}
export function mapApiFieldToDraft(field: TechnicalFormField): TechnicalFormFieldDraft {
return {
id: field.id,
label: field.label,
type: field.type,
isRequired: field.isRequired,
options: field.options.map((option) => option.label),
}
}
export function mapDraftToPayload(fields: TechnicalFormFieldDraft[]) {
return {
fields: fields.map((field) => ({
label: field.label.trim(),
type: field.type,
isRequired: field.isRequired,
...(field.type === 'select' || field.type === 'multi_select'
? { options: field.options.map((option) => option.trim()).filter(Boolean) }
: {}),
})),
}
}
export async function getCategoryTechnicalForm(categoryId: string, signal?: AbortSignal) {
const data = await apiRequest<{ form: CategoryTechnicalForm | null }>(
businessPath(categoryId),
{ auth: true, signal },
)
return data.form
}
export async function saveCategoryTechnicalForm(
categoryId: string,
fields: TechnicalFormFieldDraft[],
) {
const data = await apiRequest<{ form: CategoryTechnicalForm | null }>(
businessPath(categoryId),
{
method: 'PUT',
auth: true,
body: mapDraftToPayload(fields),
},
)
return data.form
}
export async function suggestCategoryTechnicalFormByAi(
categoryId: string,
hint?: string,
) {
const data = await apiRequest<{
message: string
fields: {
label: string
type: TechnicalFormFieldDraft['type']
isRequired: boolean
options?: string[]
}[]
}>(`${businessPath(categoryId)}/ai-suggest`, {
method: 'POST',
auth: true,
body: hint ? { hint } : {},
})
return data.fields
}