Files
message-pusher/web/src/components/PushSetting.js
2024-11-10 10:46:28 +08:00

113 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useEffect, useState } from 'react';
import { Button, Form, Grid, Header, Message } from 'semantic-ui-react';
import {
API,
generateToken,
showError,
showSuccess,
testChannel,
} from '../helpers';
import { loadUser, loadUserChannels } from '../helpers/loader';
const PushSetting = () => {
let [user, setUser] = useState({
id: '',
username: '',
channel: '',
token: '',
});
let [channels, setChannels] = useState([]);
let [loading, setLoading] = useState(true);
const handleInputChange = (e, { name, value }) => {
setUser((inputs) => ({ ...inputs, [name]: value }));
};
useEffect(() => {
const loader = async () => {
let user = await loadUser();
if (user) {
setUser(user);
}
let channels = await loadUserChannels();
if (channels) {
setChannels(channels);
}
setLoading(false);
};
loader().then();
}, []);
const submit = async (which) => {
let data = {};
switch (which) {
case 'general':
data.channel = user.channel;
data.token = user.token;
if (data.token === '') {
data.token = ' ';
}
break;
default:
showError(`无效的参数:${which}`);
return;
}
let res = await API.put(`/api/user/self`, data);
const { success, message } = res.data;
if (success) {
showSuccess('设置已更新!');
} else {
showError(message);
}
};
return (
<Grid columns={1}>
<Grid.Column>
<Form loading={loading}>
<Header as='h3'>通用设置</Header>
<Message>
注意敏感配置信息不会发送到前端显示另外浏览器可能会错误填充账户和密钥信息请留意
</Message>
<Form.Group>
<Form.Select
label='默认推送方式'
name='channel'
options={channels}
value={user.channel}
onChange={handleInputChange}
width={5}
/>
<Form.Input
label='全局鉴权令牌'
placeholder='优先级高于通道维度令牌,但为了安全期间建议使用通道维度的令牌'
value={user.token}
name='token'
onChange={handleInputChange}
width={9}
action={{
content: '随机生成',
onClick: () => {
console.log('generate token');
setUser((inputs) => ({
...inputs,
token: generateToken(16),
}));
},
}}
/>
</Form.Group>
<Button onClick={() => submit('general')} loading={loading}>
保存
</Button>
<Button onClick={() => testChannel(user.username, user.token, '')}>
测试
</Button>
</Form>
</Grid.Column>
</Grid>
);
};
export default PushSetting;