mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-09-05 08:12:25 +08:00
add group conf to redux
This commit is contained in:
parent
866e4cd2fb
commit
9a42df8da7
@ -2,9 +2,10 @@ import {CopyOutlined, DeleteOutlined, EditOutlined} from '@ant-design/icons';
|
|||||||
import {Card, Col, Form, message, Popconfirm, Select, Tag, Tooltip} from 'antd';
|
import {Card, Col, Form, message, Popconfirm, Select, Tag, Tooltip} from 'antd';
|
||||||
import Modal from 'antd/lib/modal/Modal';
|
import Modal from 'antd/lib/modal/Modal';
|
||||||
import React, {useState} from "react";
|
import React, {useState} from "react";
|
||||||
import {useSelector} from 'react-redux';
|
import {useDispatch, useSelector} from 'react-redux';
|
||||||
import {addSubscribe, delSubscribe} from 'src/api/config';
|
import {addSubscribe, delSubscribe} from 'src/api/config';
|
||||||
import {platformConfSelector} from 'src/store/globalConfSlice';
|
import {platformConfSelector} from 'src/store/globalConfSlice';
|
||||||
|
import {groupConfigSelector, updateGroupSubs} from 'src/store/groupConfigSlice';
|
||||||
import {PlatformConfig, SubscribeConfig, SubscribeResp} from 'src/utils/type';
|
import {PlatformConfig, SubscribeConfig, SubscribeResp} from 'src/utils/type';
|
||||||
import {AddModal} from './addSubsModal';
|
import {AddModal} from './addSubsModal';
|
||||||
|
|
||||||
@ -54,15 +55,15 @@ function CopyModal({setShowModal,config,
|
|||||||
interface SubscribeCardProp {
|
interface SubscribeCardProp {
|
||||||
groupNumber: string
|
groupNumber: string
|
||||||
config: SubscribeConfig
|
config: SubscribeConfig
|
||||||
groupSubscribes: SubscribeResp
|
|
||||||
reload: () => void
|
|
||||||
}
|
}
|
||||||
export function SubscribeCard({groupNumber, config, reload, groupSubscribes}: SubscribeCardProp) {
|
export function SubscribeCard({groupNumber, config}: SubscribeCardProp) {
|
||||||
// const globalConf = useSelector()
|
|
||||||
const platformConfs = useSelector(platformConfSelector)
|
const platformConfs = useSelector(platformConfSelector)
|
||||||
const [showModal, setShowModal] = useState(false)
|
const [showModal, setShowModal] = useState(false)
|
||||||
const [showEditModal, setShowEditModal] = useState(false)
|
const [showEditModal, setShowEditModal] = useState(false)
|
||||||
const platformConf = platformConfs[config.platformName] as PlatformConfig;
|
const platformConf = platformConfs[config.platformName] as PlatformConfig;
|
||||||
|
const dispatcher = useDispatch();
|
||||||
|
const groupSubscribes = useSelector(groupConfigSelector);
|
||||||
|
const reload = () => dispatcher(updateGroupSubs())
|
||||||
const handleDelete = (groupNumber: string, platformName: string, target: string) => () => {
|
const handleDelete = (groupNumber: string, platformName: string, target: string) => () => {
|
||||||
delSubscribe(groupNumber, platformName, target).then(() => {
|
delSubscribe(groupNumber, platformName, target).then(() => {
|
||||||
reload()
|
reload()
|
||||||
|
@ -1,26 +1,21 @@
|
|||||||
import {Button, Collapse, Empty, Row} from 'antd';
|
import {Button, Collapse, Empty, Row} from 'antd';
|
||||||
import React, {ReactElement, useEffect, useState} from "react";
|
import React, {ReactElement, useEffect, useState} from "react";
|
||||||
import {getSubscribe} from 'src/api/config';
|
import {useDispatch, useSelector} from 'react-redux';
|
||||||
import {SubscribeCard} from 'src/component/subscribeCard';
|
|
||||||
import {SubscribeResp} from 'src/utils/type';
|
|
||||||
import {AddModal} from 'src/component/addSubsModal';
|
import {AddModal} from 'src/component/addSubsModal';
|
||||||
|
import {SubscribeCard} from 'src/component/subscribeCard';
|
||||||
|
import {groupConfigSelector, updateGroupSubs} from 'src/store/groupConfigSlice';
|
||||||
|
|
||||||
interface ConfigPageProp {
|
interface ConfigPageProp {
|
||||||
tab: string
|
tab: string
|
||||||
}
|
}
|
||||||
export function ConfigPage(prop: ConfigPageProp) {
|
export function ConfigPage(prop: ConfigPageProp) {
|
||||||
const [ configData, setConfigData ] = useState<SubscribeResp>({});
|
|
||||||
const [ showModal, setShowModal ] = useState<boolean>(false);
|
const [ showModal, setShowModal ] = useState<boolean>(false);
|
||||||
const [ currentAddingGroupNumber, setCurrentAddingGroupNumber ] = useState('');
|
const [ currentAddingGroupNumber, setCurrentAddingGroupNumber ] = useState('');
|
||||||
const loadData = () => {
|
const configData = useSelector(groupConfigSelector);
|
||||||
getSubscribe()
|
const dispatcher = useDispatch();
|
||||||
.then(res => {
|
|
||||||
setConfigData(_ => res);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadData()
|
dispatcher(updateGroupSubs())
|
||||||
}, [prop.tab]);
|
}, [prop.tab, dispatcher]);
|
||||||
const clickNew = (groupNumber: string) => (e: React.MouseEvent<HTMLButtonElement>) => {
|
const clickNew = (groupNumber: string) => (e: React.MouseEvent<HTMLButtonElement>) => {
|
||||||
setShowModal(_ => true);
|
setShowModal(_ => true);
|
||||||
setCurrentAddingGroupNumber(groupNumber);
|
setCurrentAddingGroupNumber(groupNumber);
|
||||||
@ -40,8 +35,7 @@ export function ConfigPage(prop: ConfigPageProp) {
|
|||||||
<Row gutter={[{ xs: 8, sm: 16, md: 24, lg: 32},
|
<Row gutter={[{ xs: 8, sm: 16, md: 24, lg: 32},
|
||||||
{ xs: 8, sm: 16, md: 24, lg: 32}]} align="middle">
|
{ xs: 8, sm: 16, md: 24, lg: 32}]} align="middle">
|
||||||
{value.subscribes.map((subs, idx) => <SubscribeCard key={idx}
|
{value.subscribes.map((subs, idx) => <SubscribeCard key={idx}
|
||||||
groupNumber={key} config={subs} groupSubscribes={configData} reload={loadData}
|
groupNumber={key} config={subs} />)}
|
||||||
/>)}
|
|
||||||
</Row>
|
</Row>
|
||||||
</Collapse.Panel>
|
</Collapse.Panel>
|
||||||
)
|
)
|
||||||
@ -52,7 +46,8 @@ export function ConfigPage(prop: ConfigPageProp) {
|
|||||||
{groups}
|
{groups}
|
||||||
</Collapse>
|
</Collapse>
|
||||||
<AddModal groupNumber={currentAddingGroupNumber} showModal={showModal}
|
<AddModal groupNumber={currentAddingGroupNumber} showModal={showModal}
|
||||||
refresh={loadData} setShowModal={(s: boolean) => setShowModal(_ => s)} />
|
refresh={() => dispatcher(updateGroupSubs())}
|
||||||
|
setShowModal={(s: boolean) => setShowModal(_ => s)} />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
27
admin-frontend/src/store/groupConfigSlice.ts
Normal file
27
admin-frontend/src/store/groupConfigSlice.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import {CaseReducer, createAsyncThunk, createSlice, PayloadAction} from '@reduxjs/toolkit';
|
||||||
|
import {SubscribeResp} from 'src/utils/type';
|
||||||
|
import {getSubscribe} from 'src/api/config';
|
||||||
|
import {RootState} from '.';
|
||||||
|
const initialState: SubscribeResp = {}
|
||||||
|
|
||||||
|
const setSubs: CaseReducer<SubscribeResp, PayloadAction<SubscribeResp>> = (_, action) => {
|
||||||
|
return action.payload
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateGroupSubs = createAsyncThunk(
|
||||||
|
"groupConfig/update", getSubscribe
|
||||||
|
)
|
||||||
|
|
||||||
|
export const groupConfigSlice = createSlice({
|
||||||
|
name: "groupConfig",
|
||||||
|
initialState,
|
||||||
|
reducers: {
|
||||||
|
setSubs
|
||||||
|
},
|
||||||
|
extraReducers: (reducer) => {
|
||||||
|
reducer.addCase(updateGroupSubs.fulfilled, setSubs)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export const groupConfigSelector = (state: RootState) => state.groupConfig;
|
||||||
|
export default groupConfigSlice.reducer;
|
@ -1,11 +1,13 @@
|
|||||||
import {configureStore} from "@reduxjs/toolkit";
|
import {configureStore} from "@reduxjs/toolkit";
|
||||||
import loginSlice from "./loginSlice";
|
import loginSlice from "./loginSlice";
|
||||||
import globalConfSlice from "./globalConfSlice";
|
import globalConfSlice from "./globalConfSlice";
|
||||||
|
import groupConfigSlice from './groupConfigSlice';
|
||||||
|
|
||||||
const store = configureStore({
|
const store = configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
login: loginSlice,
|
login: loginSlice,
|
||||||
globalConf: globalConfSlice,
|
globalConf: globalConfSlice,
|
||||||
|
groupConfig: groupConfigSlice,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user