refactor(store): adapt Zustand stores to backend-aligned types
- orders: remove name fields from creation, keep dispatchMode logic - chat: remove readonly/senderName/senderAvatar references - reviews: remove fromUserAvatar/toUserId, simplify participant check - disputes: remove initiatorId/initiatorName from creation - posts: remove authorRole/quotedPostId, keep linkedOrderId as number - comments: remove postId from creation - wallet: use string amounts
This commit is contained in:
+7
-39
@@ -14,10 +14,6 @@ function resolveAvatar(_userId: string) {
|
||||
return ""
|
||||
}
|
||||
|
||||
function shouldReadonly(status: Order["status"]) {
|
||||
return status === "pending_review" || status === "completed" || status === "cancelled"
|
||||
}
|
||||
|
||||
export const useChatStore = create<ChatState>((set, get) => ({
|
||||
sessions: [],
|
||||
messages: [],
|
||||
@@ -26,17 +22,8 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
(session) => session.type === "order" && session.orderId === order.id,
|
||||
)
|
||||
|
||||
const readonly = shouldReadonly(order.status)
|
||||
|
||||
if (existing) {
|
||||
if (existing.readonly !== readonly) {
|
||||
set((state) => ({
|
||||
sessions: state.sessions.map((session) =>
|
||||
session.id === existing.id ? { ...session, readonly } : session,
|
||||
),
|
||||
}))
|
||||
}
|
||||
return get().sessions.find((session) => session.id === existing.id) ?? existing
|
||||
return existing
|
||||
}
|
||||
|
||||
const session: ChatSession = {
|
||||
@@ -46,17 +33,16 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
participants: [
|
||||
{
|
||||
id: order.consumerId,
|
||||
name: order.consumerName,
|
||||
nickname: "",
|
||||
avatar: resolveAvatar(order.consumerId),
|
||||
},
|
||||
{
|
||||
id: order.playerId,
|
||||
name: order.playerName,
|
||||
nickname: "",
|
||||
avatar: resolveAvatar(order.playerId),
|
||||
},
|
||||
],
|
||||
unreadCount: 0,
|
||||
readonly,
|
||||
}
|
||||
|
||||
set((state) => ({
|
||||
@@ -69,7 +55,7 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
const text = content.trim()
|
||||
if (!text) return
|
||||
const session = get().sessions.find((item) => item.id === sessionId)
|
||||
if (!session || session.readonly) return
|
||||
if (!session) return
|
||||
|
||||
const sender = session.participants.find((participant) => participant.id === actorId)
|
||||
if (!sender) return
|
||||
@@ -79,8 +65,6 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
id: generateId("msg"),
|
||||
sessionId,
|
||||
senderId: actorId,
|
||||
senderName: sender.name,
|
||||
senderAvatar: sender.avatar,
|
||||
type: "text",
|
||||
content: text,
|
||||
createdAt: now,
|
||||
@@ -88,22 +72,14 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
|
||||
set((state) => ({
|
||||
messages: [...state.messages, message],
|
||||
sessions: state.sessions.map((session) =>
|
||||
session.id === sessionId
|
||||
? {
|
||||
...session,
|
||||
lastMessage: text,
|
||||
lastMessageAt: now,
|
||||
}
|
||||
: session,
|
||||
),
|
||||
sessions: state.sessions.map((s) => (s.id === sessionId ? { ...s, lastMessage: text } : s)),
|
||||
}))
|
||||
},
|
||||
sendImageMessage: (sessionId, actorId, imageUrl) => {
|
||||
const content = imageUrl.trim()
|
||||
if (!content) return
|
||||
const session = get().sessions.find((item) => item.id === sessionId)
|
||||
if (!session || session.readonly) return
|
||||
if (!session) return
|
||||
|
||||
const sender = session.participants.find((participant) => participant.id === actorId)
|
||||
if (!sender) return
|
||||
@@ -113,8 +89,6 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
id: generateId("msg"),
|
||||
sessionId,
|
||||
senderId: actorId,
|
||||
senderName: sender.name,
|
||||
senderAvatar: sender.avatar,
|
||||
type: "image",
|
||||
content,
|
||||
createdAt: now,
|
||||
@@ -123,13 +97,7 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
set((state) => ({
|
||||
messages: [...state.messages, message],
|
||||
sessions: state.sessions.map((item) =>
|
||||
item.id === sessionId
|
||||
? {
|
||||
...item,
|
||||
lastMessage: "[图片]",
|
||||
lastMessageAt: now,
|
||||
}
|
||||
: item,
|
||||
item.id === sessionId ? { ...item, lastMessage: "[图片]" } : item,
|
||||
),
|
||||
}))
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user