|
@@ -397,20 +397,31 @@ export function useClients() {
|
|
|
|
|
|
|
|
const setEnable = useCallback(async (client: ClientRecord, enable: boolean) => {
|
|
const setEnable = useCallback(async (client: ClientRecord, enable: boolean) => {
|
|
|
if (!client?.email) return null;
|
|
if (!client?.email) return null;
|
|
|
- const payload = {
|
|
|
|
|
- email: client.email,
|
|
|
|
|
- subId: client.subId,
|
|
|
|
|
- id: client.uuid,
|
|
|
|
|
- password: client.password,
|
|
|
|
|
- auth: client.auth,
|
|
|
|
|
- totalGB: client.totalGB || 0,
|
|
|
|
|
- expiryTime: client.expiryTime || 0,
|
|
|
|
|
- limitIp: client.limitIp || 0,
|
|
|
|
|
- comment: client.comment || '',
|
|
|
|
|
|
|
+ const full = await hydrate(client.email);
|
|
|
|
|
+ const base = full?.client;
|
|
|
|
|
+ if (!base) return null;
|
|
|
|
|
+ const payload: Record<string, unknown> = {
|
|
|
|
|
+ email: base.email,
|
|
|
|
|
+ subId: base.subId,
|
|
|
|
|
+ id: base.uuid,
|
|
|
|
|
+ password: base.password,
|
|
|
|
|
+ auth: base.auth,
|
|
|
|
|
+ flow: base.flow || '',
|
|
|
|
|
+ security: base.security || 'auto',
|
|
|
|
|
+ totalGB: base.totalGB || 0,
|
|
|
|
|
+ expiryTime: base.expiryTime || 0,
|
|
|
|
|
+ limitIp: base.limitIp || 0,
|
|
|
|
|
+ tgId: Number(base.tgId) || 0,
|
|
|
|
|
+ reset: Number(base.reset) || 0,
|
|
|
|
|
+ group: base.group || '',
|
|
|
|
|
+ comment: base.comment || '',
|
|
|
enable: !!enable,
|
|
enable: !!enable,
|
|
|
};
|
|
};
|
|
|
|
|
+ if (base.reverse?.tag) {
|
|
|
|
|
+ payload.reverse = { tag: base.reverse.tag };
|
|
|
|
|
+ }
|
|
|
return update(client.email, payload);
|
|
return update(client.email, payload);
|
|
|
- }, [update]);
|
|
|
|
|
|
|
+ }, [hydrate, update]);
|
|
|
|
|
|
|
|
// WS-driven in-place merges. Page wires these via useWebSocket; the bridge
|
|
// WS-driven in-place merges. Page wires these via useWebSocket; the bridge
|
|
|
// covers coarse 'invalidate' and 'inbounds' events centrally.
|
|
// covers coarse 'invalidate' and 'inbounds' events centrally.
|