This local working tree had accumulated a substantial amount of finished-but-never-committed frontend work: custom client fields (replacing the old static ClientFields with a dynamic ClientCustomFieldCard + useCustomFields), CSV import (useImport + settings/import page), history type management (useHistoryTypes + settings/history-types page), an admin-only route middleware, several new icon components, a shared useApiFetch composable, and a client detail page restructure ([id].vue -> [id]/index.vue). None of it had ever been pushed, so production was running a stale build that was already linking to routes/components that didn't exist server-side (missing IconSettings, 404s on /settings/import, etc). This commit brings the repo in line with local state.
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import type { CustomFieldDefinition, CustomFieldType } from '~/types'
|
|
|
|
export interface CustomFieldDefinitionPayload {
|
|
label: string
|
|
type: CustomFieldType
|
|
options?: string[]
|
|
is_required?: boolean
|
|
}
|
|
|
|
export const useCustomFields = () => {
|
|
const definitions = useState<CustomFieldDefinition[]>('customFields.definitions', () => [])
|
|
|
|
const fetchDefinitions = async (): Promise<void> => {
|
|
const response = await useApiFetch<{ data: CustomFieldDefinition[] }>('/api/custom-fields')
|
|
definitions.value = response.data
|
|
}
|
|
|
|
const createDefinition = async (payload: CustomFieldDefinitionPayload): Promise<void> => {
|
|
await useApiFetch('/api/custom-fields', { method: 'POST', body: payload })
|
|
await fetchDefinitions()
|
|
}
|
|
|
|
const updateDefinition = async (id: number, payload: CustomFieldDefinitionPayload): Promise<void> => {
|
|
await useApiFetch(`/api/custom-fields/${id}`, { method: 'PUT', body: payload })
|
|
await fetchDefinitions()
|
|
}
|
|
|
|
const deleteDefinition = async (id: number): Promise<void> => {
|
|
await useApiFetch(`/api/custom-fields/${id}`, { method: 'DELETE' })
|
|
definitions.value = definitions.value.filter(d => d.id !== id)
|
|
}
|
|
|
|
const reorderDefinitions = async (ids: number[]): Promise<void> => {
|
|
const response = await useApiFetch<{ data: CustomFieldDefinition[] }>('/api/custom-fields/reorder', {
|
|
method: 'POST',
|
|
body: { ids },
|
|
})
|
|
definitions.value = response.data
|
|
}
|
|
|
|
return { definitions, fetchDefinitions, createDefinition, updateDefinition, deleteDefinition, reorderDefinitions }
|
|
}
|