108 lines
2.4 KiB
TypeScript
108 lines
2.4 KiB
TypeScript
import { Model, routerRedux } from "dva";
|
|
import _ from 'lodash';
|
|
import { TabItemModels } from '@/components/Tab';
|
|
import homeIcon from '@/assets/home.svg';
|
|
import homeIconS from '@/assets/home_s.svg';
|
|
import estateIcon from '@/assets/estate.svg';
|
|
import estateIconS from '@/assets/estate_s.svg';
|
|
import marketIcon from '@/assets/market.svg';
|
|
import marketIconS from '@/assets/market_s.svg';
|
|
import fundIcon from '@/assets/fund.svg';
|
|
import fundIconS from '@/assets/fund_s.svg';
|
|
import profileIcon from '@/assets/profile.svg';
|
|
import profileIconS from '@/assets/profile_s.svg';
|
|
|
|
export interface HomeModelState {
|
|
tabItems: TabItemModels;
|
|
selectedTab: string;
|
|
}
|
|
|
|
const tabItems: TabItemModels = [
|
|
// {
|
|
// key: '/home/home',
|
|
// name: 'home.tabHome',
|
|
// icon: homeIcon,
|
|
// iconSelected: homeIconS,
|
|
// },
|
|
{
|
|
key: '/home/estate',
|
|
name: 'home.tabEstate',
|
|
icon: estateIcon,
|
|
iconSelected: estateIconS,
|
|
},
|
|
{
|
|
key: '/home/fund',
|
|
name: 'home.tabFund',
|
|
icon: fundIcon,
|
|
iconSelected: fundIconS,
|
|
},
|
|
{
|
|
key: '/home/market',
|
|
name: 'home.tabMarket',
|
|
icon: marketIcon,
|
|
iconSelected: marketIconS,
|
|
},
|
|
{
|
|
key: '/home/profile',
|
|
name: 'home.tabProfile',
|
|
icon: profileIcon,
|
|
iconSelected: profileIconS,
|
|
},
|
|
];
|
|
|
|
const initState: HomeModelState = {
|
|
tabItems,
|
|
selectedTab: tabItems[0].key,
|
|
};
|
|
|
|
const model: Model = {
|
|
namespace: 'home',
|
|
|
|
state: initState,
|
|
|
|
effects: {
|
|
*changeTab({ payload: selectedTab }, { put, select, all }) {
|
|
const {
|
|
router: { location: { pathname } },
|
|
home: { selectedTab: oldSelectedTab },
|
|
} = yield select();
|
|
|
|
const tasks = [];
|
|
if (oldSelectedTab !== selectedTab) {
|
|
tasks.push(put({ type: 'onUpdateState', payload: { selectedTab } }));
|
|
}
|
|
if (pathname !== selectedTab) {
|
|
tasks.push(put(routerRedux.replace(selectedTab)));
|
|
}
|
|
|
|
if (tasks.length) {
|
|
yield all(tasks);
|
|
}
|
|
},
|
|
|
|
*clear(_, { put }) {
|
|
yield put({ type: 'onUpdateState', payload: initState })
|
|
},
|
|
},
|
|
|
|
reducers: {
|
|
onUpdateState(state, { payload }: any) {
|
|
return {
|
|
...state,
|
|
...payload,
|
|
};
|
|
},
|
|
},
|
|
|
|
subscriptions: {
|
|
onRouteChange({ dispatch, history }) {
|
|
const { pathname } = history.location;
|
|
if (_.some(tabItems, it => it.key === pathname)) {
|
|
dispatch({ type: 'changeTab', payload: pathname });
|
|
}
|
|
}
|
|
},
|
|
};
|
|
|
|
export default model;
|