WIP - more progress with permissions
This commit is contained in:
@@ -45,7 +45,9 @@ export const useApi = () => {
|
||||
toast.error('Your session has expired. Please login again.')
|
||||
router.push('/login')
|
||||
}
|
||||
throw new Error('Unauthorized')
|
||||
const error = new Error('Unauthorized')
|
||||
;(error as any).status = 401
|
||||
throw error
|
||||
}
|
||||
|
||||
if (response.status === 403) {
|
||||
@@ -59,17 +61,24 @@ export const useApi = () => {
|
||||
router.push('/login')
|
||||
}
|
||||
}
|
||||
throw new Error('Forbidden')
|
||||
// Don't log 403 errors - create error with status flag
|
||||
const error = new Error('Forbidden')
|
||||
;(error as any).status = 403
|
||||
throw error
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
// Try to get error details from response
|
||||
const text = await response.text()
|
||||
console.error('API Error Response:', {
|
||||
status: response.status,
|
||||
statusText: response.statusText,
|
||||
body: text
|
||||
})
|
||||
|
||||
// Only log unexpected errors (not 401 or 403 which are handled above)
|
||||
if (response.status !== 401 && response.status !== 403) {
|
||||
console.error('API Error Response:', {
|
||||
status: response.status,
|
||||
statusText: response.statusText,
|
||||
body: text
|
||||
})
|
||||
}
|
||||
|
||||
let errorMessage = `HTTP error! status: ${response.status}`
|
||||
if (text) {
|
||||
|
||||
@@ -197,7 +197,10 @@ export const useViewState = <T extends { id?: string }>(
|
||||
records.value = response.data || response || []
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to fetch records:', e)
|
||||
// Only log unexpected errors (not authorization failures)
|
||||
if (e.status !== 401 && e.status !== 403) {
|
||||
console.error('Failed to fetch records:', e)
|
||||
}
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -210,9 +213,14 @@ export const useViewState = <T extends { id?: string }>(
|
||||
const response = await api.get(`${apiEndpoint}/${id}`)
|
||||
// Handle response - data might be directly in response or in response.data
|
||||
currentRecord.value = response.data || response
|
||||
console.log('[fetchRecord] Fetched record:', JSON.stringify(currentRecord.value, null, 2))
|
||||
console.log('[fetchRecord] Record has id?', currentRecord.value?.id)
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to fetch record:', e)
|
||||
// Only log unexpected errors (not authorization failures)
|
||||
if (e.status !== 401 && e.status !== 403) {
|
||||
console.error('Failed to fetch record:', e)
|
||||
}
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -231,7 +239,7 @@ export const useViewState = <T extends { id?: string }>(
|
||||
return recordData
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to create record:', e)
|
||||
// Don't log to console - errors are already handled by useApi and shown via toast
|
||||
throw e
|
||||
} finally {
|
||||
saving.value = false
|
||||
@@ -256,7 +264,10 @@ export const useViewState = <T extends { id?: string }>(
|
||||
return recordData
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to update record:', e)
|
||||
// Only log unexpected errors (not authorization failures)
|
||||
if (e.status !== 401 && e.status !== 403) {
|
||||
console.error('Failed to update record:', e)
|
||||
}
|
||||
throw e
|
||||
} finally {
|
||||
saving.value = false
|
||||
@@ -274,7 +285,10 @@ export const useViewState = <T extends { id?: string }>(
|
||||
}
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to delete record:', e)
|
||||
// Only log unexpected errors (not authorization failures)
|
||||
if (e.status !== 401 && e.status !== 403) {
|
||||
console.error('Failed to delete record:', e)
|
||||
}
|
||||
throw e
|
||||
} finally {
|
||||
loading.value = false
|
||||
@@ -289,7 +303,10 @@ export const useViewState = <T extends { id?: string }>(
|
||||
records.value = records.value.filter(r => !ids.includes(r.id!))
|
||||
} catch (e: any) {
|
||||
error.value = e.message
|
||||
console.error('Failed to delete records:', e)
|
||||
// Only log unexpected errors (not authorization failures)
|
||||
if (e.status !== 401 && e.status !== 403) {
|
||||
console.error('Failed to delete records:', e)
|
||||
}
|
||||
throw e
|
||||
} finally {
|
||||
loading.value = false
|
||||
@@ -312,10 +329,17 @@ export const useViewState = <T extends { id?: string }>(
|
||||
}
|
||||
|
||||
const handleSave = async (data: T) => {
|
||||
// DEBUG: Check if id is present
|
||||
console.log('[handleSave] Data received:', JSON.stringify(data, null, 2))
|
||||
console.log('[handleSave] data.id:', data.id)
|
||||
console.log('[handleSave] currentRecord.value:', currentRecord.value)
|
||||
|
||||
let savedRecord
|
||||
if (data.id) {
|
||||
console.log('[handleSave] Calling updateRecord (PUT)')
|
||||
savedRecord = await updateRecord(data.id, data)
|
||||
} else {
|
||||
console.log('[handleSave] Calling createRecord (POST) - ID IS MISSING!')
|
||||
savedRecord = await createRecord(data)
|
||||
}
|
||||
return savedRecord
|
||||
|
||||
Reference in New Issue
Block a user