Door locks to control the application
- README.md 파일 수정
- immutable 데이터를 react에서 직접 사용되도록 수정 (delete toJS())
- 고정 데이터와 정적데이터의 설계를 다시하자. ( action과의 의존성 줄이기 )
- init 과정에 휴대폰에 이미 유저정보가 있을시 서버에 정말 있는지 확인하는 절차도 추가하기.
- realm 적용해보기
- flow 적용해보기
- React Native
- Redux
- Typescript
- TsLinter
- Gulp
-
AuthStateType
"success" | "fail"
-
HistoryType
{ "datetime": "number": required, "state" : AuthStateType : required, "name" : "string": required }
-
UserInfoType
{ "registDate" : "date": required, "latestAuthDate" : "date": required, "name" : "string": required, "key" : "number": -1, /* 인증키 */ }
-
MenuType
{ "icon" : "string" | null : null, "name" : "string": required, "id" : "number" : required }
-
SectionType
{ "title": "string": required, "menus": ["number", ...]: [] }
-
PageType
{ "title": "string": required, "id": "number": required }
-
SearchFilterType
{ "startTime": "number" : -1, "endTime" : "number" : -1, "user": "string" | null : null, "state": AuthStateType }
-
ButtonType
{ "text" | "img" }
{
static: {
title: "Smart Doorlock",
pages: [PageType],
},
user: {
info : UserInfoType,
registered : boolean
},
histories : [HistoryType],
users : [UserInfoType],
search : {
filter : SearchFilterType,
result : [HistoryType]
}
currentPageID : number,
setting : {
successAlarm : boolean,
failAlarm : boolean,
alarmSound : ?
},
menu: {
items : [MenuType],
sections : [SectionType],
opened : boolean
currentItem : number
}
}
{
"static",
"user",
"histories",
"users",
"search",
"currentPageID"
"setting",
"menu"
}
-
CREATE
-
SELECT
-
UPDATE
-
DELETE
-
user
- REGISTER
- UNREGISTER
-
histories
-
users
-
search
- SEARCH
-
currentPageID
- SET_PAGE
-
setting
- SET_ALARM
- SET_ALARM_SOUND
- SET_NAME
-
menu
- OPEN_MENU
-
UNLOCK
- register()
- 우선 임시로 store.registered = true로 설정
- unregister()
- 우선 임시로 store.registered = false로 설정
- setPage(pageID:number)
- openMenu()
- setSearchOptions()
- search(filter:{})
- unlock()
- setAlarm({"success", "fail"})
- setAlarmSound()
- setName()
- loadHistories()
- 없음
- View
-
SideMenu
title = Store.static.title menus = Store.Store.menu.items sections = Store.store.menu.sections selectedMenu = Store.menu.currentItem opened = Store.menu.opened onPressMenu = Action.setPage()
-
Pages
currentPageID = Store.currentPageID
-
Page
id = getPage("InitPage").idgetPage("InitPage").id
-
InitPage
title = Store.static.title onRegister = Action.register()
-
-
Page
id = getPage("MainPage").id
-
MainPage
title = Store.static.title onOpenMenu = Action.openMenu() onUnlock = Action.unlock()
-
-
Page
id = getPage("HistoryPage").id
-
HistoryPage
title = getPage("HistoryPage").title histories = store.histories onLoadHistories = Acton.loadHistories() onOpenMenu = Action.openMenu() onGoSearchPage = Action.setPage(getPage("SearchPage").id)
-
-
Page
id = getPage("SearchPage").id
-
SearchPage
title = getPage("SearchPage").title users = store.users searchFilter = Store.search.filter onOpenMenu = Action.openMenu() onChangeSearchOption = Action.setSearchOptions() onSearch = Action.search()
-
-
Page
id = getPage("SearchResultPage").id
-
HistoryPage
title = getPage("SearchResultPage").title histories = Store.search.result onOpenMenu = Action.openMenu() onGoSearchPage = Action.setPage(getPage("SearchPage").id)
-
-
Page
id = getPage("SetupPage").id
-
SetupPage
title = getPage("SetupPage").title setting = Store.setting onOpenMenu = Action.openMenu() onChangeSetting = Action.setSetting()
-
-
Page
id = getPage("MyPage").id
-
MyPage
title = getPage("MyPage").title user = Store.user onOpenMenu = Action.openMenu() onChangeName = Action.setName() onUnregister = Action.unregister()
-
-
Page
id = getPage("UserListPag.id
-
UserListPage
title = getPage("UserListPage").title users = Store.users onOpenMenu = Action.openMenu()
-
-
-
- title:string:required
- 없음
- 없음
- DrawerLayoutAndroid
- View
- Text
- View
- Text
- sections.title
- View
-
TouchableHighlight
onPress = onPressMenu
- Image
- Text
-
...
-
- Text
- View
Property 들을 이용해서 구축
- title:string
- opened:boolean
- menus:[MenuType]
- sections:[SectionType]
- selectedMenu:number
- 없음
- onPressMenu:(menu.id)=>void
- 없음
- View
- currentPageID:number:required
- pageHisotry:[]
- onChangePage
- 없음
- View
- id:number:required
- 없음
- 없음
- View
-
Text
- this.props.title
-
TouchButton
value = '등록하기' onPress = this.props.onRegister
-
- title:string:required
- 없음
- onRegister
- View
- View
-
TouchButton
value = 'menu.png' type = 'img' onPress = this.props.onOpenMenu
-
- Text
- this.props.title
- View
-
TouchButton
value = 'unlock.png' type = 'img' onPress = this.props.onUnlock
-
- View
- title:string:required
- 없음
- onOpenMenu
- onUnlock
-
HeaderLayout
title = this.props.title leftIcon = 'menu.png' rightIcon = 'search.png' onPressLeftIcon = this.props.onOpenMenu onPressRightIcon = this.props.onGoSearchPage
-
HistoryList
histories = this.props.histories
-
- title:string:required
- histories:[HistoryType]:[]
- 없음
- onOpenMenu
- onGoSearchPage
-
HeaderLayout
title = this.props.title onPressLeftIcon = this.props.onOpenMenu leftIcon = 'back.png'
-
View
-
Text
- "기간"
-
PeriodPicker
onChangeTime = this.props.onChangeSearchOption startTime = this.props.searchFilter.startTime endTime = this.props.searchFilter.endTime
-
-
View
-
Text
- "이름"
-
Picker
selectedValue = this.props.searchFilter.user onValueChange = this.props.onChangeSearchOption
- Picker.item(users를 mapping)
-
-
View
-
Text
- "상태"
-
Picker
selectedValue = this.props.searchFilter.state onValueChange = this.props.onChangeSearchOption
- Picker.item
- "모든상태"
- Picker.item
- "인증성공"
- Picker.item
- "인증실패"
- Picker.item
-
-
TouchButton
value = '검색' onPress = this.props.onSearch
-
- title:string:required
- users:[UserInfoType]:required
- searchFilter:SearchFilterType:required
- 없음
- onOpenMenu
- onChangeSearchOption
- onSearch
- 검색 옵션을 매개변수로 보냄
-
HeaderLayout
title = this.props.title leftIcon = 'menu.png' onPressLeftIcon = this.props.onOpenMenu
- View
-
Text
- "인증 성공시 알림"
-
Switch
onValueChange = this.props.onChangeSetting value = this.props.setting.successAlarm
-
- View
-
Text
- "인증 실패시 알림"
-
Switch
onValueChange = this.props.onChangeSetting value = this.props.setting.failAlarm
-
- View
-
Text
- "알림음"
-
Picker
onValueChange = this.props.onChangeSetting selectedValue = this.props.setting.alarmSound
-
- View
- title:string:required
- setting
- 없음
- onOpenMenu
- onChangeSetting
-
HeaderLayout
title = this.props.title leftIcon = 'menu.png' onPressLeftIcon = this.props.onOpenMenu
- View
- Text
- "이름"
- Text
- this.props.user.name
- Text
- View
- Text
- "등록일"
- Text
- this.props.user.registDate
- Text
- View
- Text
- "최근 인증일"
- Text
- this.props.user.latestAuthDate
- Text
- View
-
TouchButton
value = "이름변경" onPress = this.props.onChangeName
-
TouchButton
value = "인증해제" onPress = this.props.onUnregister
-
- View
- title:string:required
- user:UserInfoType:required
- 없음
- onOpenMenu
- onChangeName
- onUnregister
-
HeaderLayout
title = this.props.title leftIcon = 'back.png' onPressLeftIcon = this.props.onOpenMenu
- ListView( this.props.users를 맵핑 )
- title:string:required
- users:[UserInfoType]:required
- 없음
- onOpenMenu
- ListView ( histories를 맵핑 )
- histories:[HistoryType]:[]
- 없음
- 없음
- View
- Text
- name
- Text
- printDatetime(datetime)
- View
- Image (상태에 따라 다른 이미지)
- Text
- name:string
- datetime:number
- state:AuthStateType
- 없음
- 없음
- View
-
Text
- this.props.title
-
TouchButton
value = (fold) ? "fold.png" : "unflod.png" type = "img" onPress = onFold | onUnfold
-
- title:string:required
- fold:boolean:true
- 없음
- onFold
- onUnfold
-
TouchableHighlight
onPress = this.props.onPress
- Text
- this.props.value
- Text
-
TouchableHighlight
onPress = this.props.onPress
-
Image
source = {require(this.props.value)}
-
- value:string:required
- type:ButtonType:"text"
- 없음
- onPress
- View
- View
- Image
- View
- Text
- View
- Image
- View
- this.props.children
- View
- title:string
- rightIcon:string(img URL)
- leftIcon:string(img URL)
- 없음
- onPressRightIcon
- onPressLeftIcon
- startTime:number
- endTime:number
- 없음
- onChangeTime