2017-06-25 2 views
0

J'ai besoin de mettre à jour le statut de l'agent. Si le statut est vérifié, une API nécessite document_name (multiple) et reason. Si le statut est en attente et rejeté, une API a besoin de la seule raison.mettre à jour le statut de l'agent dans redux saga

Ceci est l'objet d'un agent.

{ 
    "active": true, 
    "agent_info": [], // an array of object where document_name and reason has to be updated with 
    "user_role": "enduser", 
    "last_name": "m", 
    "middle_name": null, 
    "username": "[email protected]", 
    "_id": "594f4665ae36b70029f80ba0", 
    "first_name": "pm", 
    "email": "[email protected]", 
} 

lors de la présentation de l'état, je déclenche l'action suivante pour une saga

this.props.updateAgentStatus(status, agent, accepted, reason); 

satus est l'état de l'agent de l'agent (vérifié, en attente ou rejeté) est le détail de l'agent accepté est le document dans le cas où le statut est raison Verified est la raison de l'état

function* updateAgent(action) { 
    const agentId = action.agent._id; 
    const status = action.status; 
    let agent = yield select(selectAgent(), action); 
    let updatedAgent; 
    let statusUpdatedAgent = agent.set("agent_status", fromJS(action.status)); 
    if (status === "verified") { 
    updatedAgent = statusUpdatedAgent 
     .setIn(["agent_info", 0, "approval_documents"], fromJS(action.accepted)) 
     .setIn(["agent_info", 0, "reason"], fromJS(action.reason)); 
    } else { 
    updatedAgent = statusUpdatedAgent.setIn(
     ["agent_info", 0, "reason"], 
     fromJS(action.reason) 
    ); 
    } 
    console.log("updateAgentStatus", updatedAgent.toJS()); 
    // above log gives me the whole object of agent by updating the agent_info object with 
    // document_name and reason which is inside of agent_info block and agent_status which is 
    // outside the agent_info block. 
    yield fork(
    XcelTrip.put(
     `api/agent/applicant/status/${agentId}/?status=${status}`, 
     agentStatusUpdated, 
     agentStatusUpdatingError, 
     updatedAgent.toJS(), 
     agentId, 
     status 
    ) 
); 
} 

Ai-je besoin de passer l'objet entier ou simplement le nom de document et la raison si c'est un statut vérifié ou juste la raison si il est en attente et le statut rejeté? Si c'est juste document_name et reason, comment puis-je l'envoyer en tenant compte de tous ces statuts, car dans le cas d'un document_name supplémentaire vérifié est nécessaire?

Répondre

0

La solution dépend si vous allez utiliser une mise à jour optimiste bien que dans ce cas, il est possible de prendre une décision universelle. Idéalement, vous ne devez pas changer d'état dans la saga, mais plutôt la saga doit attraper les actions sur lesquelles il est nécessaire d'organiser des requêtes asynchrones, et suivre les résultats pour générer de nouvelles actions qui vont déjà au réducteur. Par exemple, le composant de réaction génère l'action UPDATE_AGENT_REQUEST, la saga l'attrape et exécute l'appel de l'API async, qui génère les actions UPDATE_AGENT_SUCCESS ou UPDATE_AGENT_FAILURE en fonction du résultat. Si vous souhaitez une mise à jour optimiste, alors initiez tout de même l'action identique au présent, mais en cas d'information sur une panne future, il est nécessaire de générer les actions de compensation qui retournent l'état courant dans le précédent Etat.