Выключен по умолчанию: пополнение под просмотром открывает учебный экран. Включён — платёж уходит в банк, и над кнопкой «Оплатить» появляется предупреждение, что деньги спишутся по-настоящему и зачислятся водителю. Режим гаснет вместе с выходом из учётки сотрудника: следующий раз он включается осознанно, а не достаётся по наследству. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
import { create } from "zustand";
|
|
import { persist } from "zustand/middleware";
|
|
|
|
/**
|
|
* Сеанс СОТРУДНИКА — учётка CRM, которой берут просмотр от лица водителя.
|
|
*
|
|
* Хранится отдельно от водительского: это два разных токена с разным смыслом.
|
|
* «Перестать смотреть за водителя» обязано оставлять сотрудника залогиненным,
|
|
* иначе смена водителя каждый раз означала бы новый ввод пароля; и наоборот —
|
|
* `clear()` водительского сеанса не должен трогать сотрудника.
|
|
*/
|
|
interface StaffState {
|
|
token: string | null;
|
|
username: string | null;
|
|
/** Боевая оплата под просмотром: платёж уходит в банк и зачисляется водителю.
|
|
* Выключено по умолчанию — под чужим лицом легко забыть, кого пополняешь. */
|
|
livePay: boolean;
|
|
setStaff: (token: string, username: string) => void;
|
|
setLivePay: (on: boolean) => void;
|
|
clear: () => void;
|
|
}
|
|
|
|
export const useStaff = create<StaffState>()(
|
|
persist(
|
|
(set) => ({
|
|
token: null,
|
|
username: null,
|
|
livePay: false,
|
|
setStaff: (token, username) => set({ token, username }),
|
|
setLivePay: (livePay) => set({ livePay }),
|
|
// Выход сотрудника гасит и боевой режим: следующий раз он включается осознанно.
|
|
clear: () => set({ token: null, username: null, livePay: false }),
|
|
}),
|
|
{ name: "pp-driver-staff" }
|
|
)
|
|
);
|