212 lines
7.0 KiB
JavaScript
212 lines
7.0 KiB
JavaScript
import {api} from "./api";
|
|
import {requests} from "../../requests";
|
|
import {sortList} from "../../components/cocktails/sortingList";
|
|
import {getComparator} from "../../components/core/getComparator";
|
|
|
|
class CocktailClient {
|
|
emptyCocktailForEditPage = {
|
|
id: null,
|
|
name: "",
|
|
alcoholic: "",
|
|
category: "",
|
|
components: "",
|
|
glass: "",
|
|
image: "",
|
|
instructions: "",
|
|
isAllowed: false,
|
|
rating: {
|
|
rating: 0,
|
|
favourite: false
|
|
},
|
|
receipt: [],
|
|
tags: "",
|
|
video: ""
|
|
}
|
|
|
|
getMenu(setRows, setIsNew, setPage, setLoad, setIsEnd, isNew, rows, page, size, filter, createError) {
|
|
setLoad(true);
|
|
|
|
const request = {
|
|
...filter,
|
|
sort: sortList.find((s) => s.name === filter.sorting).id,
|
|
page: page + 1,
|
|
size: size,
|
|
notHaveCount: Array.isArray(filter.iCount) ? null : filter.iCount
|
|
}
|
|
|
|
api().post(requests.cocktails.menu, request)
|
|
.then((r) => {
|
|
if (r.data.length === 0) {
|
|
if (isNew) {
|
|
setRows([]);
|
|
}
|
|
setIsEnd(true);
|
|
setLoad(false);
|
|
return;
|
|
}
|
|
const cocktails = isNew ? r.data : rows.concat(r.data);
|
|
setRows(cocktails);
|
|
setIsNew(false);
|
|
setPage(page + 1);
|
|
setLoad(false);
|
|
})
|
|
.catch((r) => {
|
|
setLoad(false);
|
|
createError("Ошибка загрузки данных от сервера Status:" + r.code)
|
|
})
|
|
}
|
|
|
|
async getCocktailByIngredient(ingredient, setCocktails) {
|
|
if(!ingredient) {
|
|
return
|
|
}
|
|
api().get(requests.cocktails.byIngredient + ingredient.id)
|
|
.then((r) => setCocktails(r.data))
|
|
}
|
|
|
|
getCocktailsForCalcPage(load,setLoad, setCocktails, setCocktailMap, createError) {
|
|
if (load) {
|
|
return;
|
|
}
|
|
api().get(requests.cocktails.calc)
|
|
.then((r) => {
|
|
const data = r.data;
|
|
if (data.length === 0) {
|
|
setLoad(false);
|
|
return;
|
|
}
|
|
setCocktails(data);
|
|
let map = {};
|
|
data.forEach((d) => {
|
|
map = {
|
|
...map,
|
|
[d.id]: 1
|
|
}
|
|
})
|
|
setCocktailMap(map);
|
|
setLoad(true);
|
|
})
|
|
.catch((r) => {
|
|
setLoad(true);
|
|
createError("Ошибка загрузки данных от сервера Status:" + r.code)
|
|
})
|
|
}
|
|
|
|
savePhoto(event, changeCocktailValue, getError) {
|
|
const file = event.target.files[0];
|
|
let formData = new FormData();
|
|
formData.append('file', file);
|
|
api().post(requests.cocktails.photo, formData)
|
|
.then((r) => changeCocktailValue("image", r.data))
|
|
.catch(() => getError())
|
|
}
|
|
|
|
deleteCocktailFromEdit(setCocktails, setCocktail, createError, cocktails, cocktail, emptyCocktail) {
|
|
api().delete(requests.cocktails.cocktail + cocktail.id)
|
|
.then(() => {
|
|
setCocktails(cocktails.filter((r) => r.id !== cocktail.id))
|
|
setCocktail(emptyCocktail);
|
|
})
|
|
.catch(() => createError("Ошибка удаления коктейля"))
|
|
}
|
|
|
|
deleteCocktail(id, rows, setRows, createSuccess, createError) {
|
|
api().delete(requests.cocktails.cocktail + id)
|
|
.then(() => {
|
|
setRows(rows.filter((r) => r.id !== id))
|
|
createSuccess("Коктейль удален")
|
|
})
|
|
.catch(() => createError("Ошибка удаления коктейля"))
|
|
}
|
|
|
|
saveChangeCocktail (cocktail, createError, createSuccess) {
|
|
api().patch(requests.cocktails.basic, cocktail)
|
|
.then((r) => {
|
|
if (!r.data.error) {
|
|
createSuccess("Сохранено")
|
|
return;
|
|
}
|
|
createError("Ошибка на сервере: " + r.data.error)
|
|
})
|
|
.catch(() => createError("Неизвестная ошибка"))
|
|
}
|
|
|
|
getOneCocktail (selected, setCocktail, getError, emptyCocktail) {
|
|
if (!selected) {
|
|
setCocktail(emptyCocktail);
|
|
return;
|
|
}
|
|
api().get(requests.cocktails.cocktail + selected)
|
|
.then((r) => {
|
|
setCocktail(r.data)
|
|
})
|
|
.catch(() => getError());
|
|
}
|
|
|
|
getSimpleList(setCocktails, setSelected, setLoading, createError, currentId) {
|
|
api().get(requests.cocktails.simple)
|
|
.then((r) => {
|
|
const arr = r.data.sort(getComparator("asc", "name"));
|
|
setCocktails(arr)
|
|
|
|
if (!currentId) {
|
|
setLoading(false);
|
|
return;
|
|
}
|
|
const currentCocktail = arr.find((r) => r.id === (currentId * 1));
|
|
if (!currentCocktail) {
|
|
setLoading(false);
|
|
return;
|
|
}
|
|
setSelected(currentCocktail.id);
|
|
setLoading(false);
|
|
})
|
|
.catch(() => createError("Ошибка получения данных"))
|
|
}
|
|
|
|
getCocktailForModal (row, setLoading, setCocktail, closeCocktail, getError) {
|
|
setLoading(true)
|
|
if (!row) {
|
|
setLoading(false)
|
|
return;
|
|
}
|
|
api().get(requests.cocktails.modal + row)
|
|
.then((r) => {
|
|
setCocktail(r.data)
|
|
setLoading(false)
|
|
})
|
|
.catch(() => {
|
|
getError();
|
|
setLoading(false)
|
|
closeCocktail();
|
|
})
|
|
}
|
|
|
|
changeFavourite(value, id, newState, setRows, createSuccess, createError) {
|
|
const url = `${requests.cocktails.favourite}${id}`;
|
|
const request = value ? api().put(url) : api().delete(url);
|
|
|
|
request
|
|
.then(() => {
|
|
setRows(newState);
|
|
createSuccess("Спасибо за оценку!")
|
|
}).catch(() => createError("Ошибка сохранения"))
|
|
}
|
|
|
|
changeRating(id, newState, value, setRows, createSuccess, createError) {
|
|
api().post(`${requests.cocktails.rating}${id}&rating=${value}`)
|
|
.then(() => {
|
|
setRows(newState);
|
|
createSuccess("Спасибо за оценку!")
|
|
}).catch(() => createError("Ошибка сохранения"))
|
|
}
|
|
|
|
drinkCocktail(id, createSuccess, createError) {
|
|
api().post(`${requests.cocktails.drink}/${id}`)
|
|
.then(() => createSuccess("Бон аппетит"))
|
|
.catch(() => createError("Ошибка отметки коктейля"))
|
|
}
|
|
|
|
}
|
|
|
|
export const cocktailClient = new CocktailClient(); |