@@ -15,24 +15,26 @@ let dataForAround = { datasets: [], } -const statsColors = ['#8280FF', '#67D9A2', '#FF867E', '#7ED1FF', '#FFD700', '#FFA07A', '#87CEEB', '#98FB98', '#FFB6C1'] - -const getStatistic = async (type: string, interval: string, token?: string): Promise => { - try { - const { data } = await axios.get( - API_URL + `/payments/expenses?source_strategy=${type}&interval_strategy=${interval}`, - { - headers: { Authorization: `Bearer ${token}` }, - } - ) - return data - } catch (e) { - return { - details: '', - error: true, - message: 'Ошибка загрузки статистики', +const statsColors = [ + '#8280FF', + '#67D9A2', + '#FF867E', + '#7ED1FF', + '#FFD700', + '#FFA07A', + '#87CEEB', + '#98FB98', + '#FFB6C1', +] + +const getStatistic = async (type: string, interval: string, token?: string) => { + return await axios.get( + API_URL + `/payments/expenses?source_strategy=${type}&interval_strategy=${interval}`, + { + headers: { Authorization: `Bearer ${token}` }, + validateStatus: () => true, } - } + ) } export const useStats = () => { @@ -88,48 +90,47 @@ export const useStats = () => { const [statsByDays, setStatsByDays] = useState(dataLine) - function setStats(type: string) { - getStatistic(type, timeForStats, session?.access).then((res) => { - if ('error' in res) return - - const spends = res.map((el) => el.amount).filter((el) => +el) - - if (type === 'days') { - const sortedData = formatAndSortDates(res) - - dataLine = { - labels: sortedData.map((el: any) => el.formattedDate), - datasets: [ - { - ...dataLine.datasets[0], - fill: true, - //@ts-ignore - data: sortedData.map((el: any) => el.amount), - }, - ], - } - - setStatsByDays(dataLine) - return - } + async function setStats(type: string) { + const { data: res, status } = await getStatistic(type, timeForStats, session?.access) + if (status != 200) return + + const spends = res.map((el) => el.amount).filter((el) => +el) + + if (type === 'days') { + const sortedData = formatAndSortDates(res) - dataForAround = { - ...dataForAround, - labels: (res as never[]).filter((el: any) => +el.amount), + dataLine = { + labels: sortedData.map((el: any) => el.formattedDate), datasets: [ { - label: '', - data: spends, - backgroundColor: statsColors.slice(0, spends.length), - borderColor: 'transparent', - borderRadius: 8, - } as never, + ...dataLine.datasets[0], + fill: true, + //@ts-ignore + data: sortedData.map((el: any) => el.amount), + }, ], } - if (type === 'models') setStatsByModels(dataForAround) - if (type === 'categories') setStatsByType(dataForAround) - }) + setStatsByDays(dataLine) + return + } + + dataForAround = { + ...dataForAround, + labels: (res as never[]).filter((el: any) => +el.amount), + datasets: [ + { + label: '', + data: spends, + backgroundColor: statsColors.slice(0, spends.length), + borderColor: 'transparent', + borderRadius: 8, + } as never, + ], + } + + if (type === 'models') setStatsByModels(dataForAround) + if (type === 'categories') setStatsByType(dataForAround) } useEffect(() => { @@ -142,7 +143,20 @@ export const useStats = () => { } function formatAndSortDates(inputArray: any) { - const monthNames = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'] + const monthNames = [ + 'янв', + 'фев', + 'мар', + 'апр', + 'май', + 'июн', + 'июл', + 'авг', + 'сен', + 'окт', + 'ноя', + 'дек', + ] const formattedData = inputArray.map((item: any) => { const date = new Date(item.source)