/** * Оборачивает API-метод в реактивные состояния loading, error, data. * @param apiMethod - асинхронная функция API * @param isGet - если true, результат сохраняется в data и опционально в useState по ключу key */ export function useApiAction( apiMethod: (...args: T) => Promise, isGet = false, ) { const loading = ref(false); const error = ref(null); const data = ref(null); const execute = async ( args: T, key?: string ) => { loading.value = true; error.value = null; try { const result = await apiMethod(...args); if (isGet) { data.value = result; if (key) { useState(`data-${key}`).value = result; } } return result; } catch (err: any) { error.value = createError({ statusCode: 500, statusMessage: 'Error in API action', message: err instanceof Error ? err.message : 'Unknown error' }); } finally { loading.value = false; } }; return { loading, error, data, execute }; }