base commit
This commit is contained in:
@@ -1,13 +1,26 @@
|
||||
const KEY = 'craftshop_admin_token'
|
||||
const TOKEN_EVENT = 'craftshop_admin_token_change'
|
||||
|
||||
export function getAdminToken(): string | null {
|
||||
return sessionStorage.getItem(KEY)
|
||||
}
|
||||
|
||||
function notifyTokenListeners(): void {
|
||||
window.dispatchEvent(new Event(TOKEN_EVENT))
|
||||
}
|
||||
|
||||
/** Подписаться на смену токена (в т. ч. после setAdminToken). */
|
||||
export function subscribeAdminTokenChange(cb: () => void): () => void {
|
||||
window.addEventListener(TOKEN_EVENT, cb)
|
||||
return () => window.removeEventListener(TOKEN_EVENT, cb)
|
||||
}
|
||||
|
||||
export function setAdminToken(token: string): void {
|
||||
sessionStorage.setItem(KEY, token)
|
||||
notifyTokenListeners()
|
||||
}
|
||||
|
||||
export function clearAdminToken(): void {
|
||||
sessionStorage.removeItem(KEY)
|
||||
notifyTokenListeners()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import { apiBaseURL } from '@/shared/config'
|
||||
|
||||
/** Абсолютный или корневой путь начала OAuth на бэкенде (редирект браузера). */
|
||||
export function oauthAuthorizeUrl(provider: 'vk' | 'yandex'): string {
|
||||
const base = apiBaseURL.replace(/\/$/, '')
|
||||
return `${base}/auth/oauth/${provider}`
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/** Человекочитаемые подписи к кодам статуса заказа */
|
||||
export function orderStatusLabelRu(code: string): string {
|
||||
const map: Record<string, string> = {
|
||||
DRAFT: 'Черновик',
|
||||
PENDING_PAYMENT: 'Ожидает оплаты',
|
||||
PAYMENT_VERIFICATION: 'Проверка оплаты',
|
||||
PAID: 'Оплачен',
|
||||
IN_PROGRESS: 'В работе',
|
||||
SHIPPED: 'Отправлен',
|
||||
READY_FOR_PICKUP: 'Готово к получению',
|
||||
DONE: 'Завершён',
|
||||
CANCELLED: 'Отменён',
|
||||
}
|
||||
return map[code] ?? code
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
/** Склонение «N отзыв(ов…)» для целых n ≥ 0. */
|
||||
export function reviewsCountRu(n: number): string {
|
||||
const x = Math.abs(Math.floor(n))
|
||||
const mod100 = x % 100
|
||||
const mod10 = x % 10
|
||||
let word = 'отзывов'
|
||||
if (mod100 < 11 || mod100 > 14) {
|
||||
if (mod10 === 1) word = 'отзыв'
|
||||
else if (mod10 >= 2 && mod10 <= 4) word = 'отзыва'
|
||||
}
|
||||
return `${x}\u00a0${word}`
|
||||
}
|
||||
Reference in New Issue
Block a user