60 lines
1.2 KiB
TypeScript
60 lines
1.2 KiB
TypeScript
|
|
type Effect = (action: { payload: any }, effects: { call: any; put: any; select: any }) => Generator<any, void, unknown>;
|
|
type Reducer<S> = (state: S, action: { payload: any }) => S;
|
|
|
|
export interface BreadcrumbState {
|
|
breadcrumbName: string | null;
|
|
}
|
|
|
|
export interface BreadcrumbModelType {
|
|
namespace: 'breadcrumb';
|
|
state: BreadcrumbState;
|
|
effects: {
|
|
updateBreadcrumbName: Effect;
|
|
resetBreadcrumb: Effect;
|
|
};
|
|
reducers: {
|
|
setBreadcrumbName: Reducer<BreadcrumbState>;
|
|
resetState: Reducer<BreadcrumbState>;
|
|
};
|
|
}
|
|
|
|
const BreadcrumbModel: BreadcrumbModelType = {
|
|
namespace: 'breadcrumb',
|
|
|
|
state: {
|
|
breadcrumbName: null,
|
|
},
|
|
|
|
effects: {
|
|
*updateBreadcrumbName({ payload }, { put }) {
|
|
yield put({
|
|
type: 'setBreadcrumbName',
|
|
payload,
|
|
});
|
|
},
|
|
|
|
*resetBreadcrumb(_, { put }) {
|
|
yield put({
|
|
type: 'resetState',
|
|
});
|
|
},
|
|
},
|
|
|
|
reducers: {
|
|
setBreadcrumbName(state: BreadcrumbState, { payload }: { payload: string }) {
|
|
return {
|
|
...state,
|
|
breadcrumbName: payload,
|
|
};
|
|
},
|
|
|
|
resetState() {
|
|
return {
|
|
breadcrumbName: null,
|
|
};
|
|
},
|
|
},
|
|
};
|
|
|
|
export default BreadcrumbModel; |