forked from polka_billy/porridger
Code styling changes
This commit is contained in:
@ -1,15 +1,15 @@
|
||||
import { useEffect, useRef, useState } from "react"
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
|
||||
import { API_URL } from "../../config"
|
||||
import { isLiteralUnion } from "../../utils/types"
|
||||
import { handleHTTPErrors } from "../../utils"
|
||||
import { API_URL } from '../../config'
|
||||
import { isLiteralUnion } from '../../utils/types'
|
||||
import { handleHTTPErrors } from '../../utils'
|
||||
|
||||
const addErrors = ["Не удалось опубликовать объявление", 'Неверный ответ от сервера', 'Неизвестная ошибка'] as const
|
||||
const addErrors = ['Не удалось опубликовать объявление', 'Неверный ответ от сервера', 'Неизвестная ошибка'] as const
|
||||
type AddError = typeof addErrors[number]
|
||||
|
||||
const isAddError = (obj: unknown): obj is AddError => isLiteralUnion(obj, addErrors)
|
||||
|
||||
const buttonStates = ["Опубликовать", "Загрузка...", "Опубликовано", "Отменено"] as const
|
||||
const buttonStates = ['Опубликовать', 'Загрузка...', 'Опубликовано', 'Отменено'] as const
|
||||
type ButtonState = typeof buttonStates[number] | AddError
|
||||
|
||||
type AddResponse = {
|
||||
@ -21,26 +21,26 @@ const isAddResponse = (obj: unknown): obj is AddResponse =>
|
||||
|
||||
|
||||
const useAddAnnouncement = () => {
|
||||
const [status, setStatus] = useState<ButtonState>("Опубликовать")
|
||||
const [status, setStatus] = useState<ButtonState>('Опубликовать')
|
||||
|
||||
const timerIdRef = useRef<number>()
|
||||
const abortControllerRef = useRef<AbortController>()
|
||||
|
||||
const doAdd = async (formData: FormData) => {
|
||||
if (status === "Загрузка...") {
|
||||
if (status === 'Загрузка...') {
|
||||
abortControllerRef.current?.abort()
|
||||
setStatus("Отменено")
|
||||
timerIdRef.current = setTimeout(() => setStatus("Опубликовать"), 3000)
|
||||
setStatus('Отменено')
|
||||
timerIdRef.current = setTimeout(() => setStatus('Опубликовать'), 3000)
|
||||
return
|
||||
}
|
||||
|
||||
setStatus("Загрузка...")
|
||||
setStatus('Загрузка...')
|
||||
|
||||
const abortController = new AbortController()
|
||||
abortControllerRef.current = abortController
|
||||
|
||||
try {
|
||||
const res = await fetch(API_URL + "/announcement", {
|
||||
const res = await fetch(API_URL + '/announcement', {
|
||||
method: 'PUT',
|
||||
body: formData,
|
||||
signal: abortController.signal
|
||||
@ -53,13 +53,13 @@ const useAddAnnouncement = () => {
|
||||
if (!isAddResponse(data)) throw new Error('Неверный ответ от сервера')
|
||||
|
||||
if (!data.Answer) {
|
||||
throw new Error("Не удалось опубликовать объявление")
|
||||
throw new Error('Не удалось опубликовать объявление')
|
||||
}
|
||||
setStatus("Опубликовано")
|
||||
setStatus('Опубликовано')
|
||||
|
||||
} catch (err) {
|
||||
setStatus(isAddError(err) ? err : "Неизвестная ошибка")
|
||||
timerIdRef.current = setTimeout(() => setStatus("Опубликовать"), 10000)
|
||||
setStatus(isAddError(err) ? err : 'Неизвестная ошибка')
|
||||
timerIdRef.current = setTimeout(() => setStatus('Опубликовать'), 10000)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
import { useState } from "react"
|
||||
import { API_URL } from "../../config"
|
||||
import { isConst, isObject } from "../../utils/types"
|
||||
import { handleHTTPErrors } from "../../utils"
|
||||
import { useState } from 'react'
|
||||
|
||||
import { API_URL } from '../../config'
|
||||
import { isConst, isObject } from '../../utils/types'
|
||||
import { handleHTTPErrors } from '../../utils'
|
||||
|
||||
interface AuthData {
|
||||
email: string,
|
||||
@ -24,11 +25,11 @@ type SignUpResponse = {
|
||||
|
||||
const isSignUpResponse = (obj: unknown): obj is SignUpResponse => (
|
||||
isObject(obj, {
|
||||
"Success": isConst(true)
|
||||
'Success': isConst(true)
|
||||
}) ||
|
||||
isObject(obj, {
|
||||
"Success": isConst(false),
|
||||
"Message": "string"
|
||||
'Success': isConst(false),
|
||||
'Message': 'string'
|
||||
})
|
||||
)
|
||||
|
||||
@ -38,8 +39,8 @@ interface LogInResponse {
|
||||
}
|
||||
|
||||
const isLogInResponse = (obj: unknown): obj is LogInResponse => isObject(obj, {
|
||||
"access_token": "string",
|
||||
"token_type": isConst("bearer")
|
||||
'access_token': 'string',
|
||||
'token_type': isConst('bearer')
|
||||
})
|
||||
|
||||
function useAuth() {
|
||||
@ -51,8 +52,8 @@ function useAuth() {
|
||||
|
||||
if (newAccount) {
|
||||
try {
|
||||
const res = await fetch(API_URL + "/signup", {
|
||||
method: "POST",
|
||||
const res = await fetch(API_URL + '/signup', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
@ -64,7 +65,7 @@ function useAuth() {
|
||||
const signupData: unknown = await res.json()
|
||||
|
||||
if (!isSignUpResponse(signupData)) {
|
||||
throw new Error("Malformed server response")
|
||||
throw new Error('Malformed server response')
|
||||
}
|
||||
|
||||
if (signupData.Success === false) {
|
||||
@ -83,7 +84,7 @@ function useAuth() {
|
||||
username: data.email,
|
||||
password: data.password
|
||||
}).toString(), {
|
||||
method: "POST",
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
@ -92,7 +93,7 @@ function useAuth() {
|
||||
const logInData: unknown = await res.json()
|
||||
|
||||
if (!isLogInResponse(logInData)) {
|
||||
throw new Error("Malformed server response")
|
||||
throw new Error('Malformed server response')
|
||||
}
|
||||
|
||||
const token = logInData.access_token
|
||||
@ -111,4 +112,4 @@ function useAuth() {
|
||||
return { doAuth, loading, error }
|
||||
}
|
||||
|
||||
export default useAuth
|
||||
export default useAuth
|
||||
|
@ -1,20 +1,20 @@
|
||||
import { useState } from "react"
|
||||
import { useNavigate } from "react-router-dom"
|
||||
import { useState } from 'react'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
|
||||
import { getToken } from "../../utils/auth"
|
||||
import { API_URL } from "../../config"
|
||||
import { isObject } from "../../utils/types"
|
||||
import { handleHTTPErrors } from "../../utils"
|
||||
import { getToken } from '../../utils/auth'
|
||||
import { API_URL } from '../../config'
|
||||
import { isObject } from '../../utils/types'
|
||||
import { handleHTTPErrors } from '../../utils'
|
||||
|
||||
type BookResponse = {
|
||||
Success: boolean
|
||||
}
|
||||
|
||||
const isBookResponse = (obj: unknown): obj is BookResponse => isObject(obj, {
|
||||
"Success": "boolean"
|
||||
'Success': 'boolean'
|
||||
})
|
||||
|
||||
type BookStatus = "" | "Загрузка..." | "Забронировано" | "Ошибка бронирования"
|
||||
type BookStatus = '' | 'Загрузка...' | 'Забронировано' | 'Ошибка бронирования'
|
||||
|
||||
function useBook(id: number) {
|
||||
const navigate = useNavigate()
|
||||
@ -25,7 +25,7 @@ function useBook(id: number) {
|
||||
const token = getToken()
|
||||
|
||||
if (token) {
|
||||
setStatus("Загрузка...")
|
||||
setStatus('Загрузка...')
|
||||
|
||||
try {
|
||||
|
||||
@ -45,24 +45,24 @@ function useBook(id: number) {
|
||||
const data: unknown = await res.json()
|
||||
|
||||
if (!isBookResponse(data)) {
|
||||
throw new Error("Malformed server response")
|
||||
throw new Error('Malformed server response')
|
||||
}
|
||||
|
||||
if (data.Success === true) {
|
||||
setStatus('Забронировано')
|
||||
} else {
|
||||
throw new Error("Server refused to book")
|
||||
throw new Error('Server refused to book')
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
setStatus("Ошибка бронирования")
|
||||
setStatus('Ошибка бронирования')
|
||||
|
||||
if (import.meta.env.DEV) {
|
||||
console.log(err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return navigate("/login")
|
||||
return navigate('/login')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { useEffect, useRef, useState } from "react"
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
|
||||
import { handleHTTPErrors, isAborted } from '../../utils'
|
||||
|
||||
const useFetch = <T>(url: string, params: RequestInit | undefined, initialData: T, dataGuard: (obj: unknown) => obj is T) => {
|
||||
const [data, setData] = useState(initialData)
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [error, setError] = useState("")
|
||||
const [error, setError] = useState('')
|
||||
|
||||
const abortControllerRef = useRef<AbortController>()
|
||||
|
||||
@ -25,7 +25,7 @@ const useFetch = <T>(url: string, params: RequestInit | undefined, initialData:
|
||||
})
|
||||
.then(data => {
|
||||
if (!dataGuard(data)) {
|
||||
throw new Error("Неверный ответ от сервера")
|
||||
throw new Error('Неверный ответ от сервера')
|
||||
}
|
||||
|
||||
setData(data)
|
||||
@ -33,7 +33,7 @@ const useFetch = <T>(url: string, params: RequestInit | undefined, initialData:
|
||||
})
|
||||
.catch(err => {
|
||||
if (err instanceof Error && !isAborted(err)) {
|
||||
setError("Ошибка сети")
|
||||
setError('Ошибка сети')
|
||||
}
|
||||
|
||||
setLoading(false)
|
||||
|
@ -1,7 +1,7 @@
|
||||
import useFetch from './useFetch'
|
||||
import { API_URL } from '../../config'
|
||||
import { FiltersType, filterNames } from '../../utils/filters'
|
||||
import { isArrayOf, isObject } from '../../utils/types'
|
||||
import { API_URL } from '../../config'
|
||||
import { Category, isCategory } from '../../assets/category'
|
||||
|
||||
const initialAnnouncements = { list_of_announcements: [], Success: true }
|
||||
@ -12,8 +12,8 @@ type AnnouncementsListResponse = {
|
||||
}
|
||||
|
||||
const isAnnouncementsListResponse = (obj: unknown): obj is AnnouncementsListResponse => isObject(obj, {
|
||||
"list_of_announcements": obj => isArrayOf<AnnouncementResponse>(obj, isAnnouncementResponse),
|
||||
"Success": "boolean"
|
||||
'list_of_announcements': obj => isArrayOf<AnnouncementResponse>(obj, isAnnouncementResponse),
|
||||
'Success': 'boolean'
|
||||
})
|
||||
|
||||
type AnnouncementResponse = {
|
||||
@ -33,19 +33,19 @@ type AnnouncementResponse = {
|
||||
}
|
||||
|
||||
const isAnnouncementResponse = (obj: unknown): obj is AnnouncementResponse => isObject(obj, {
|
||||
"id": "number",
|
||||
"user_id": "number",
|
||||
"name": "string",
|
||||
"category": isCategory,
|
||||
"best_by": "number",
|
||||
"address": "string",
|
||||
"longtitude": "number",
|
||||
"latitude": "number",
|
||||
"description": "string",
|
||||
"src": "string?",
|
||||
"metro": "string",
|
||||
"trashId": "number?",
|
||||
"booked_by": "number"
|
||||
'id': 'number',
|
||||
'user_id': 'number',
|
||||
'name': 'string',
|
||||
'category': isCategory,
|
||||
'best_by': 'number',
|
||||
'address': 'string',
|
||||
'longtitude': 'number',
|
||||
'latitude': 'number',
|
||||
'description': 'string',
|
||||
'src': 'string?',
|
||||
'metro': 'string',
|
||||
'trashId': 'number?',
|
||||
'booked_by': 'number'
|
||||
})
|
||||
|
||||
type Announcement = {
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { LatLng } from "leaflet"
|
||||
import { LatLng } from 'leaflet'
|
||||
|
||||
import { API_URL } from "../../config"
|
||||
import { isArrayOf, isObject } from "../../utils/types"
|
||||
import useFetch from "./useFetch"
|
||||
import { isString } from "../../utils/types"
|
||||
import { API_URL } from '../../config'
|
||||
import { isArrayOf, isObject } from '../../utils/types'
|
||||
import useFetch from './useFetch'
|
||||
import { isString } from '../../utils/types'
|
||||
|
||||
type Trashbox = {
|
||||
Lat: number,
|
||||
@ -13,15 +13,15 @@ type Trashbox = {
|
||||
}
|
||||
|
||||
const isTrashbox = (obj: unknown): obj is Trashbox => isObject(obj, {
|
||||
"Lat": "number",
|
||||
"Lng": "number",
|
||||
"Address": "string",
|
||||
"Categories": obj => isArrayOf<string>(obj, isString)
|
||||
'Lat': 'number',
|
||||
'Lng': 'number',
|
||||
'Address': 'string',
|
||||
'Categories': obj => isArrayOf<string>(obj, isString)
|
||||
})
|
||||
|
||||
const useTrashboxes = (position: LatLng) => {
|
||||
return useFetch(
|
||||
API_URL + "/trashbox?" + new URLSearchParams({
|
||||
API_URL + '/trashbox?' + new URLSearchParams({
|
||||
lat: position.lat.toString(),
|
||||
lng: position.lng.toString()
|
||||
}).toString(),
|
||||
@ -32,4 +32,4 @@ const useTrashboxes = (position: LatLng) => {
|
||||
}
|
||||
|
||||
export type { Trashbox }
|
||||
export default useTrashboxes
|
||||
export default useTrashboxes
|
||||
|
@ -1,5 +1 @@
|
||||
import useStoryDimensions from "./useStoryDimensions"
|
||||
|
||||
export {
|
||||
useStoryDimensions,
|
||||
}
|
||||
export { default as useStoryDimensions } from './useStoryDimensions'
|
||||
|
@ -17,8 +17,8 @@ function useStoryDimensions(maxRatio = 16/9) {
|
||||
setWindowDimensions(getWindowDimensions());
|
||||
}
|
||||
|
||||
window.addEventListener("resize", handleResize);
|
||||
return () => window.removeEventListener("resize", handleResize);
|
||||
window.addEventListener('resize', handleResize);
|
||||
return () => window.removeEventListener('resize', handleResize);
|
||||
}, []);
|
||||
|
||||
const height = windowDimensions.height - 56
|
||||
@ -31,4 +31,4 @@ function useStoryDimensions(maxRatio = 16/9) {
|
||||
}
|
||||
}
|
||||
|
||||
export default useStoryDimensions
|
||||
export default useStoryDimensions
|
||||
|
Reference in New Issue
Block a user