mkozhukharenko / ums-frontend

ums-frontend
MIT License
1 stars 1 forks source link

Enrolment view (main tab) #3

Open mkozhukharenko opened 8 years ago

mkozhukharenko commented 8 years ago

Single enrolment view

fetch data

GET /enrolments/{id}

Response example:

{
  "id" : 1,
  "crtUser" : "admin",
  "crtUserGroup" : "developers",
  "createDate" : "2015-06-18",
  "updateDate" : "2015-06-18",
  "personId" : 4,
  "specOfferId" : 5,
  "departmentId" : 242,
  "personPaperId" : 4,
  "enrolmentTypeId" : 32,
  "mark" : 195.0,
  "docSeries" : "АА",
  "docNum" : "15",
  "isState" : 1,
  "isContract" : 0,
  "isPrivilege" : 0,
  "isHostel" : 1,
  "evDate" : "2015-06-16",
  "begDate" : "2015-06-19",
  "endDate" : "2015-06-20",
  "priority" : 1,
  "isEducationState" : 0,
  "isInterview" : 0,
  "isOriginal" : 1,
  "uri" : "/enrolments/1"
}

decode data

Some of filed need to be decoded with help of dictionaries. isState - 0 - false 1- true (Бюджет). isContract 1 true ((КонтракТ) isHostel 0 - 'не потреб. гуртож.', 1 - 'потреб. гуртож.' isPrivilege 0 - 'пільги відсутні', 1 - 'є пільги' departmentId - use /api/departments?departmentTypeId=1 for this enrolmentTypeId - user api/enrolments/types for this isEducationState

[
      {  value: 0, title: 'Не отримую освіти'  },
      { value: 1, title: 'Отримую освіту' },
      {  value: 11,title: 'Є вища освіта' }
]

isInterview

[
      { value: -1, title: 'Не пройшов співбесіду' },
      { value: 0, title: 'Не потрібно співбесіди' },
      { value: 1, title: 'Потрібна співбесіда'},
      { value: 11, title: 'Співпебісда пройдена' }
]

isOriginal - є оригінал чи немає

Pass to view

Create container and components for this. route for container - enrolments/{id}/mainInfo

<Route path="enrolment">
      <Route path='list' component={EnrolmentList}/>
      <Route path=":id" component={EnrolmentView}/>
            <Route path='mainInfo' component={MainInfoTab}/>
            <Route path='benefits' component={}/>
            <Route path='subjects' component={}/>
            <Route path='statuses' component={}/>
      </Route>
</Route>

EnrolmentView render method will be like this:

<div>
    <linkContainer> Main info <linkContainer/>
    <linkContainer> tab 2 <linkContainer/>
    this.props.children // <- child views (e.g. enrolment/id/mainInfo) goes here;
<div/>

Router will be like this:

More info:

For future development (LOW PRIORITY)

It will be a separate task. get and show:

mkozhukharenko commented 8 years ago

думаю что вот этот кусок кода из src/modules/enrolments/view/MainInfo.jsx

const select = (state)=> {
  return {
    mainInfo: state.enrolments.view.mainInfo,
    dictionaries: state.dictionaries
  };
};

можно было бы написать по другому

import { createSelector } from 'reselect'

export const getVisibleTodos = createSelector(
  [ (state) => state.enrolments.view.mainInfo, 
   (state) => state.dictionaries,
   (state, ownProps) => ownProps.params.id] ],
  (mainInfo, listOfDict, enrolId) => ({
       decodedEnrolmnets: decodeOneEnrolment(mainInfo.data[enrolId], listOfDict)
  })
)

как -то так Но это больше псевдокод чем работающий пример Чем лучше: 1) логику всю прописываем селекторе 2) не прокидываем ненужные пропсы в компонент