2017-06-25 9 views
0

エージェントのステータスを更新する必要があります。ステータスが確認された場合、APIにはdocument_name(複数)とreasonが必要です。ステータスが保留中で拒否されている場合、APIには唯一の理由が必要です。redux sagaのエージェントのステータスを更新します

これはエージェントのオブジェクトです。

{ 
    "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]", 
} 

ステータスを送信するときに、私は

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

satusは(保留、確認または拒否)エージェントの状態でエージェントは、エージェントの詳細 ある佐賀は、次のアクションをトリガステータスが の場合の文書は承認されました。確認された理由がステータスの理由です

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 
    ) 
); 
} 

検証済みのステータスの場合はオブジェクト全体を渡すか、document_nameとreasonだけを渡す必要がありますか?それが保留と拒否ステータスの場合は理由がありますか?単なるdocument_nameとreasonの場合、検証済みの追加のdocument_nameが必要な場合は、どのようにそれらのステータスを考慮して送信できますか?

答えて

0

解決策は、楽観的な更新を使用するかどうかによって異なりますが、この場合でも1つの汎用的な決定を行うことは可能です。理想的には、サガの状態を変更しないでください。代わりに、サガは、非同期要求を整理し、結果に応じて、既に減速機に移行する新しいアクションを生成する必要があるアクションをキャッチします。 たとえば、UPDATE_AGENT_REQUESTアクションを生成するコンポーネントを生成すると、sagaはそれをキャッチして、UPDATE_AGENT_SUCCESSまたはUPDATE_AGENT_FAILUREアクションを結果として生成する非同期APIコールを実行します。

オプティミスティックアップデートを希望する場合は、現在と同じ動作をすべて開始しますが、将来の失敗の情報については、前回の現在の状態を有効にする補正アクションを生成する必要があります状態。