@plusscommunities/pluss-maintenance-app 1.1.13 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/actions/JobActions.js +14 -0
- package/dist/module/actions/JobActions.js.map +1 -0
- package/dist/module/actions/index.js +2 -0
- package/dist/module/actions/index.js.map +1 -0
- package/dist/module/actions/types.js +3 -0
- package/dist/module/actions/types.js.map +1 -0
- package/dist/module/apis/generalActions.js +145 -0
- package/dist/module/apis/generalActions.js.map +1 -0
- package/dist/module/apis/index.js +2 -0
- package/dist/module/apis/index.js.map +1 -0
- package/dist/module/components/MaintenanceList.js +240 -0
- package/dist/module/components/MaintenanceList.js.map +1 -0
- package/dist/module/components/MaintenanceListItem.js +282 -0
- package/dist/module/components/MaintenanceListItem.js.map +1 -0
- package/dist/module/components/MaintenanceWidgetItem.js +161 -0
- package/dist/module/components/MaintenanceWidgetItem.js.map +1 -0
- package/dist/module/components/StatusSelectorPopup.js +93 -0
- package/dist/module/components/StatusSelectorPopup.js.map +1 -0
- package/dist/module/components/WidgetLarge.js +12 -0
- package/dist/module/components/WidgetLarge.js.map +1 -0
- package/dist/module/components/WidgetSmall.js +185 -0
- package/dist/module/components/WidgetSmall.js.map +1 -0
- package/dist/module/core.config.js +17 -0
- package/dist/module/core.config.js.map +1 -0
- package/dist/module/feature.config.js +91 -0
- package/dist/module/feature.config.js.map +1 -0
- package/dist/module/helper.js +28 -0
- package/dist/module/helper.js.map +1 -0
- package/dist/module/images/speechbubble.png +0 -0
- package/dist/module/index.js +20 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/reducers/JobsReducer.js +59 -0
- package/dist/module/reducers/JobsReducer.js.map +1 -0
- package/dist/module/screens/JobTypePicker.js +139 -0
- package/dist/module/screens/JobTypePicker.js.map +1 -0
- package/dist/module/screens/MaintenancePage.js +99 -0
- package/dist/module/screens/MaintenancePage.js.map +1 -0
- package/dist/module/screens/RequestDetail.js +839 -0
- package/dist/module/screens/RequestDetail.js.map +1 -0
- package/dist/module/screens/RequestNotes.js +420 -0
- package/dist/module/screens/RequestNotes.js.map +1 -0
- package/dist/module/screens/ServiceRequest.js +803 -0
- package/dist/module/screens/ServiceRequest.js.map +1 -0
- package/package.json +27 -14
- package/src/screens/RequestDetail.js +1 -0
@@ -0,0 +1,185 @@
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
+
|
3
|
+
import React, { Component } from 'react';
|
4
|
+
import { Text, View, ScrollView, StyleSheet } from 'react-native';
|
5
|
+
import { connect } from 'react-redux';
|
6
|
+
import _ from 'lodash';
|
7
|
+
import { generalActions } from '../apis';
|
8
|
+
import { jobsLoaded } from '../actions';
|
9
|
+
import MaintenanceWidgetItem from './MaintenanceWidgetItem';
|
10
|
+
import { Services } from '../feature.config';
|
11
|
+
import { Colours, Components, Config } from '../core.config';
|
12
|
+
const MAX_ITEMS = 10;
|
13
|
+
|
14
|
+
class WidgetSmall extends Component {
|
15
|
+
constructor(props) {
|
16
|
+
super(props);
|
17
|
+
|
18
|
+
_defineProperty(this, "getTitle", () => {
|
19
|
+
const {
|
20
|
+
options
|
21
|
+
} = this.props;
|
22
|
+
if (options && !_.isEmpty(options.Title)) return options.Title;
|
23
|
+
return Config.env.strings.MAINTENANCE;
|
24
|
+
});
|
25
|
+
|
26
|
+
_defineProperty(this, "getEmptyStateText", () => {
|
27
|
+
const {
|
28
|
+
options,
|
29
|
+
userCategory
|
30
|
+
} = this.props;
|
31
|
+
if (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;
|
32
|
+
return userCategory === 'staff' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;
|
33
|
+
});
|
34
|
+
|
35
|
+
_defineProperty(this, "refresh", () => {
|
36
|
+
this.onLoadingChanged(true, async () => {
|
37
|
+
try {
|
38
|
+
const res = await generalActions.getJobs(this.props.site); // console.log('WidgetSmall - refresh', res.data);
|
39
|
+
|
40
|
+
this.props.jobsLoaded(res.data);
|
41
|
+
} catch (error) {
|
42
|
+
console.log('refresh error', error);
|
43
|
+
} finally {
|
44
|
+
this.onLoadingChanged(false);
|
45
|
+
}
|
46
|
+
});
|
47
|
+
});
|
48
|
+
|
49
|
+
_defineProperty(this, "onLoadingChanged", (loading, callback) => {
|
50
|
+
this.setState({
|
51
|
+
loading
|
52
|
+
}, () => {
|
53
|
+
if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);
|
54
|
+
if (callback) callback();
|
55
|
+
});
|
56
|
+
});
|
57
|
+
|
58
|
+
_defineProperty(this, "onPressAll", () => {
|
59
|
+
Services.navigation.navigate('maintenance', {
|
60
|
+
options: this.props.options
|
61
|
+
});
|
62
|
+
});
|
63
|
+
|
64
|
+
this.state = {
|
65
|
+
loading: false
|
66
|
+
};
|
67
|
+
}
|
68
|
+
|
69
|
+
componentDidMount() {
|
70
|
+
this.refresh();
|
71
|
+
}
|
72
|
+
|
73
|
+
componentDidUpdate(prevProps) {
|
74
|
+
if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();
|
75
|
+
}
|
76
|
+
|
77
|
+
renderContent() {
|
78
|
+
const {
|
79
|
+
jobs
|
80
|
+
} = this.props;
|
81
|
+
|
82
|
+
if (_.isEmpty(jobs)) {
|
83
|
+
if (this.state.loading) {
|
84
|
+
return /*#__PURE__*/React.createElement(View, {
|
85
|
+
style: styles.loadingPadding
|
86
|
+
}, /*#__PURE__*/React.createElement(Components.LoadingStateWidget, {
|
87
|
+
height: 180
|
88
|
+
}));
|
89
|
+
}
|
90
|
+
|
91
|
+
return /*#__PURE__*/React.createElement(View, {
|
92
|
+
style: styles.loadingPadding
|
93
|
+
}, /*#__PURE__*/React.createElement(Components.EmptyStateWidget, {
|
94
|
+
title: this.getEmptyStateText(),
|
95
|
+
height: 180
|
96
|
+
}));
|
97
|
+
}
|
98
|
+
|
99
|
+
return /*#__PURE__*/React.createElement(ScrollView, {
|
100
|
+
horizontal: true,
|
101
|
+
contentContainerStyle: {
|
102
|
+
paddingLeft: 6,
|
103
|
+
paddingRight: 8
|
104
|
+
},
|
105
|
+
showsHorizontalScrollIndicator: false
|
106
|
+
}, jobs.slice(0, MAX_ITEMS).map(job => {
|
107
|
+
return /*#__PURE__*/React.createElement(MaintenanceWidgetItem, {
|
108
|
+
key: job.id,
|
109
|
+
job: job
|
110
|
+
});
|
111
|
+
}));
|
112
|
+
}
|
113
|
+
|
114
|
+
render() {
|
115
|
+
const {
|
116
|
+
colourBrandingMain
|
117
|
+
} = this.props;
|
118
|
+
return /*#__PURE__*/React.createElement(View, {
|
119
|
+
style: styles.sectionContainer
|
120
|
+
}, /*#__PURE__*/React.createElement(View, {
|
121
|
+
style: styles.sectionPadding
|
122
|
+
}, /*#__PURE__*/React.createElement(View, {
|
123
|
+
style: styles.sectionHeading
|
124
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
125
|
+
style: styles.sectionTitle
|
126
|
+
}, this.getTitle()), /*#__PURE__*/React.createElement(Components.InlineButton, {
|
127
|
+
onPress: this.onPressAll,
|
128
|
+
color: colourBrandingMain,
|
129
|
+
touchableStyle: {
|
130
|
+
paddingTop: 6
|
131
|
+
},
|
132
|
+
textStyle: {
|
133
|
+
color: '#fff'
|
134
|
+
}
|
135
|
+
}, "View All"))), this.renderContent());
|
136
|
+
}
|
137
|
+
|
138
|
+
}
|
139
|
+
|
140
|
+
const styles = StyleSheet.create({
|
141
|
+
sectionContainer: {
|
142
|
+
backgroundColor: '#fff',
|
143
|
+
paddingTop: 16
|
144
|
+
},
|
145
|
+
sectionPadding: {
|
146
|
+
paddingHorizontal: 16,
|
147
|
+
paddingBottom: 6
|
148
|
+
},
|
149
|
+
loadingPadding: {
|
150
|
+
paddingHorizontal: 16
|
151
|
+
},
|
152
|
+
sectionHeading: {
|
153
|
+
marginBottom: 4,
|
154
|
+
flexDirection: 'row',
|
155
|
+
alignContent: 'flex-start',
|
156
|
+
justifyContent: 'space-between'
|
157
|
+
},
|
158
|
+
sectionTitle: {
|
159
|
+
fontFamily: 'sf-bold',
|
160
|
+
fontSize: 24,
|
161
|
+
color: Colours.TEXT_DARKEST
|
162
|
+
}
|
163
|
+
});
|
164
|
+
|
165
|
+
const mapStateToProps = state => {
|
166
|
+
const {
|
167
|
+
user,
|
168
|
+
jobs,
|
169
|
+
notifications
|
170
|
+
} = state;
|
171
|
+
return {
|
172
|
+
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
173
|
+
jobs: _.orderBy(jobs.jobs, ['createdUnix'], ['desc']),
|
174
|
+
site: user.site,
|
175
|
+
userCategory: user.category,
|
176
|
+
dataUpdated: notifications.dataUpdated.jobs
|
177
|
+
};
|
178
|
+
};
|
179
|
+
|
180
|
+
export default connect(mapStateToProps, {
|
181
|
+
jobsLoaded
|
182
|
+
}, null, {
|
183
|
+
forwardRef: true
|
184
|
+
})(WidgetSmall);
|
185
|
+
//# sourceMappingURL=WidgetSmall.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["WidgetSmall.js"],"names":["React","Component","Text","View","ScrollView","StyleSheet","connect","_","generalActions","jobsLoaded","MaintenanceWidgetItem","Services","Colours","Components","Config","MAX_ITEMS","WidgetSmall","constructor","props","options","isEmpty","Title","env","strings","MAINTENANCE","userCategory","EmptyText","EMPTY_REQUESTS_STAFF","EMPTY_REQUESTS_USER","onLoadingChanged","res","getJobs","site","data","error","console","log","loading","callback","setState","state","navigation","navigate","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","jobs","styles","loadingPadding","getEmptyStateText","paddingLeft","paddingRight","slice","map","job","id","render","colourBrandingMain","sectionContainer","sectionPadding","sectionHeading","sectionTitle","getTitle","onPressAll","paddingTop","color","create","backgroundColor","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","TEXT_DARKEST","mapStateToProps","user","notifications","getMainBrandingColourFromState","orderBy","category","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { Text, View, ScrollView, StyleSheet } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { generalActions } from '../apis';\nimport { jobsLoaded } from '../actions';\nimport MaintenanceWidgetItem from './MaintenanceWidgetItem';\nimport { Services } from '../feature.config';\nimport { Colours, Components, Config } from '../core.config';\n\nconst MAX_ITEMS = 10;\n\nclass WidgetSmall extends Component {\n constructor(props) {\n super(props);\n this.state = { loading: false };\n }\n\n componentDidMount() {\n this.refresh();\n }\n\n componentDidUpdate(prevProps) {\n if (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n }\n\n getTitle = () => {\n const { options } = this.props;\n if (options && !_.isEmpty(options.Title)) return options.Title;\n return Config.env.strings.MAINTENANCE;\n };\n\n getEmptyStateText = () => {\n const { options, userCategory } = this.props;\n if (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n return userCategory === 'staff' ? Config.env.strings.EMPTY_REQUESTS_STAFF : Config.env.strings.EMPTY_REQUESTS_USER;\n };\n\n refresh = () => {\n this.onLoadingChanged(true, async () => {\n try {\n const res = await generalActions.getJobs(this.props.site);\n // console.log('WidgetSmall - refresh', res.data);\n this.props.jobsLoaded(res.data);\n } catch (error) {\n console.log('refresh error', error);\n } finally {\n this.onLoadingChanged(false);\n }\n });\n };\n\n onLoadingChanged = (loading, callback) => {\n this.setState({ loading }, () => {\n if (this.props.onLoadingChanged) this.props.onLoadingChanged(this.state.loading);\n if (callback) callback();\n });\n };\n\n onPressAll = () => {\n Services.navigation.navigate('maintenance', { options: this.props.options });\n };\n\n renderContent() {\n const { jobs } = this.props;\n if (_.isEmpty(jobs)) {\n if (this.state.loading) {\n return (\n <View style={styles.loadingPadding}>\n <Components.LoadingStateWidget height={180} />\n </View>\n );\n }\n return (\n <View style={styles.loadingPadding}>\n <Components.EmptyStateWidget title={this.getEmptyStateText()} height={180} />\n </View>\n );\n }\n return (\n <ScrollView horizontal contentContainerStyle={{ paddingLeft: 6, paddingRight: 8 }} showsHorizontalScrollIndicator={false}>\n {jobs.slice(0, MAX_ITEMS).map(job => {\n return <MaintenanceWidgetItem key={job.id} job={job} />;\n })}\n </ScrollView>\n );\n }\n\n render() {\n const { colourBrandingMain } = this.props;\n\n return (\n <View style={styles.sectionContainer}>\n <View style={styles.sectionPadding}>\n <View style={styles.sectionHeading}>\n <Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n <Components.InlineButton\n onPress={this.onPressAll}\n color={colourBrandingMain}\n touchableStyle={{ paddingTop: 6 }}\n textStyle={{ color: '#fff' }}\n >\n View All\n </Components.InlineButton>\n </View>\n </View>\n {this.renderContent()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n sectionContainer: {\n backgroundColor: '#fff',\n paddingTop: 16,\n },\n sectionPadding: {\n paddingHorizontal: 16,\n paddingBottom: 6,\n },\n loadingPadding: {\n paddingHorizontal: 16,\n },\n sectionHeading: {\n marginBottom: 4,\n flexDirection: 'row',\n alignContent: 'flex-start',\n justifyContent: 'space-between',\n },\n sectionTitle: {\n fontFamily: 'sf-bold',\n fontSize: 24,\n color: Colours.TEXT_DARKEST,\n },\n});\n\nconst mapStateToProps = state => {\n const { user, jobs, notifications } = state;\n return {\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n jobs: _.orderBy(jobs.jobs, ['createdUnix'], ['desc']),\n site: user.site,\n userCategory: user.category,\n dataUpdated: notifications.dataUpdated.jobs,\n };\n};\n\nexport default connect(mapStateToProps, { jobsLoaded }, null, { forwardRef: true })(WidgetSmall);\n"]}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
// import * as PlussCore from '../../pluss-core/src';
|
2
|
+
import * as PlussCore from '@plusscommunities/pluss-core-app';
|
3
|
+
const {
|
4
|
+
Apis,
|
5
|
+
Fonts,
|
6
|
+
Actions,
|
7
|
+
ActionTypes,
|
8
|
+
Config,
|
9
|
+
Components,
|
10
|
+
Styles,
|
11
|
+
Session,
|
12
|
+
Helper,
|
13
|
+
Constants,
|
14
|
+
Colours
|
15
|
+
} = PlussCore;
|
16
|
+
export { Apis, Fonts, Actions, ActionTypes, Config, Components, Styles, Session, Helper, Constants, Colours };
|
17
|
+
//# sourceMappingURL=core.config.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["core.config.js"],"names":["PlussCore","Apis","Fonts","Actions","ActionTypes","Config","Components","Styles","Session","Helper","Constants","Colours"],"mappings":"AAAA;AACA,OAAO,KAAKA,SAAZ,MAA2B,kCAA3B;AAEA,MAAM;AAAEC,EAAAA,IAAF;AAAQC,EAAAA,KAAR;AAAeC,EAAAA,OAAf;AAAwBC,EAAAA,WAAxB;AAAqCC,EAAAA,MAArC;AAA6CC,EAAAA,UAA7C;AAAyDC,EAAAA,MAAzD;AAAiEC,EAAAA,OAAjE;AAA0EC,EAAAA,MAA1E;AAAkFC,EAAAA,SAAlF;AAA6FC,EAAAA;AAA7F,IAAyGX,SAA/G;AACA,SAASC,IAAT,EAAeC,KAAf,EAAsBC,OAAtB,EAA+BC,WAA/B,EAA4CC,MAA5C,EAAoDC,UAApD,EAAgEC,MAAhE,EAAwEC,OAAxE,EAAiFC,MAAjF,EAAyFC,SAAzF,EAAoGC,OAApG","sourcesContent":["// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from '@plusscommunities/pluss-core-app';\n\nconst { Apis, Fonts, Actions, ActionTypes, Config, Components, Styles, Session, Helper, Constants, Colours } = PlussCore;\nexport { Apis, Fonts, Actions, ActionTypes, Config, Components, Styles, Session, Helper, Constants, Colours };\n"]}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
// import * as PlussCore from '../../pluss-core/src';
|
2
|
+
import * as PlussCore from '@plusscommunities/pluss-core-app';
|
3
|
+
export const Services = {
|
4
|
+
navigation: null
|
5
|
+
};
|
6
|
+
export const BaseComponents = {
|
7
|
+
NotificationBell: null
|
8
|
+
};
|
9
|
+
const FeatureConfig = {
|
10
|
+
key: 'maintenance',
|
11
|
+
aliases: ['maintenanceRequest'],
|
12
|
+
title: 'Request',
|
13
|
+
gridMenu: {
|
14
|
+
icon: 'maintenance',
|
15
|
+
viewBox: '0 0 30 30',
|
16
|
+
navigate: 'maintenance'
|
17
|
+
},
|
18
|
+
addMenu: {
|
19
|
+
order: 5,
|
20
|
+
icon: 'request',
|
21
|
+
title: 'Request',
|
22
|
+
navigate: 'serviceRequest',
|
23
|
+
visibleExps: {
|
24
|
+
type: 'feature',
|
25
|
+
value: 'maintenance'
|
26
|
+
}
|
27
|
+
},
|
28
|
+
moreMenu: {
|
29
|
+
order: 4,
|
30
|
+
title: 'Request',
|
31
|
+
navigate: 'maintenance',
|
32
|
+
visibleExps: {
|
33
|
+
type: 'and',
|
34
|
+
exps: [{
|
35
|
+
type: 'notHidden',
|
36
|
+
value: 'maintenanceRequest'
|
37
|
+
}, {
|
38
|
+
type: 'notUserType',
|
39
|
+
value: 'KIOSK'
|
40
|
+
}]
|
41
|
+
}
|
42
|
+
},
|
43
|
+
kioskAction: {
|
44
|
+
order: 1,
|
45
|
+
icon: 'wrench',
|
46
|
+
title: 'Request',
|
47
|
+
navigate: 'serviceRequest'
|
48
|
+
},
|
49
|
+
hideTabBar: [],
|
50
|
+
env: {
|
51
|
+
baseStage: '',
|
52
|
+
baseAPIUrl: '',
|
53
|
+
hasGradientHeader: false,
|
54
|
+
defaultProfileImage: '',
|
55
|
+
tinyChatDefault: '',
|
56
|
+
baseUploadsUrl: '',
|
57
|
+
allowMediaDownload: false,
|
58
|
+
allowMediaSharing: false,
|
59
|
+
awsUploadsBucket: '',
|
60
|
+
awsStorageBucket: '',
|
61
|
+
preferredSite: '',
|
62
|
+
strings: {},
|
63
|
+
newEventDefaults: '',
|
64
|
+
defaultAllowComments: true
|
65
|
+
},
|
66
|
+
init: (environment, navigation, notificationBell) => {
|
67
|
+
FeatureConfig.env = environment;
|
68
|
+
Services.navigation = navigation;
|
69
|
+
BaseComponents.NotificationBell = notificationBell;
|
70
|
+
PlussCore.Config.init(environment, navigation); // Override strings
|
71
|
+
|
72
|
+
if (environment && environment.strings) {
|
73
|
+
const {
|
74
|
+
MAINTENANCE,
|
75
|
+
MAINTENANCE_REQUEST
|
76
|
+
} = environment.strings;
|
77
|
+
|
78
|
+
if (MAINTENANCE) {
|
79
|
+
FeatureConfig.addMenu.title = MAINTENANCE;
|
80
|
+
}
|
81
|
+
|
82
|
+
if (MAINTENANCE_REQUEST) {
|
83
|
+
FeatureConfig.title = MAINTENANCE_REQUEST;
|
84
|
+
FeatureConfig.moreMenu.title = MAINTENANCE_REQUEST;
|
85
|
+
FeatureConfig.kioskAction.title = MAINTENANCE_REQUEST;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
};
|
90
|
+
export default FeatureConfig;
|
91
|
+
//# sourceMappingURL=feature.config.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["feature.config.js"],"names":["PlussCore","Services","navigation","BaseComponents","NotificationBell","FeatureConfig","key","aliases","title","gridMenu","icon","viewBox","navigate","addMenu","order","visibleExps","type","value","moreMenu","exps","kioskAction","hideTabBar","env","baseStage","baseAPIUrl","hasGradientHeader","defaultProfileImage","tinyChatDefault","baseUploadsUrl","allowMediaDownload","allowMediaSharing","awsUploadsBucket","awsStorageBucket","preferredSite","strings","newEventDefaults","defaultAllowComments","init","environment","notificationBell","Config","MAINTENANCE","MAINTENANCE_REQUEST"],"mappings":"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","sourcesContent":["// import * as PlussCore from '../../pluss-core/src';\nimport * as PlussCore from '@plusscommunities/pluss-core-app';\n\nexport const Services = {\n navigation: null,\n};\n\nexport const BaseComponents = {\n NotificationBell: null,\n};\n\nconst FeatureConfig = {\n key: 'maintenance',\n aliases: ['maintenanceRequest'],\n title: 'Request',\n gridMenu: {\n icon: 'maintenance',\n viewBox: '0 0 30 30',\n navigate: 'maintenance',\n },\n addMenu: {\n order: 5,\n icon: 'request',\n title: 'Request',\n navigate: 'serviceRequest',\n visibleExps: { type: 'feature', value: 'maintenance' },\n },\n moreMenu: {\n order: 4,\n title: 'Request',\n navigate: 'maintenance',\n visibleExps: {\n type: 'and',\n exps: [\n { type: 'notHidden', value: 'maintenanceRequest' },\n { type: 'notUserType', value: 'KIOSK' },\n ],\n },\n },\n kioskAction: {\n order: 1,\n icon: 'wrench',\n title: 'Request',\n navigate: 'serviceRequest',\n },\n hideTabBar: [],\n env: {\n baseStage: '',\n baseAPIUrl: '',\n hasGradientHeader: false,\n defaultProfileImage: '',\n tinyChatDefault: '',\n baseUploadsUrl: '',\n allowMediaDownload: false,\n allowMediaSharing: false,\n awsUploadsBucket: '',\n awsStorageBucket: '',\n preferredSite: '',\n strings: {},\n newEventDefaults: '',\n defaultAllowComments: true,\n },\n init: (environment, navigation, notificationBell) => {\n FeatureConfig.env = environment;\n Services.navigation = navigation;\n BaseComponents.NotificationBell = notificationBell;\n PlussCore.Config.init(environment, navigation);\n\n // Override strings\n if (environment && environment.strings) {\n const { MAINTENANCE, MAINTENANCE_REQUEST } = environment.strings;\n if (MAINTENANCE) {\n FeatureConfig.addMenu.title = MAINTENANCE;\n }\n if (MAINTENANCE_REQUEST) {\n FeatureConfig.title = MAINTENANCE_REQUEST;\n FeatureConfig.moreMenu.title = MAINTENANCE_REQUEST;\n FeatureConfig.kioskAction.title = MAINTENANCE_REQUEST;\n }\n }\n },\n};\nexport default FeatureConfig;\n"]}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { Colours } from './core.config';
|
2
|
+
const jobStatusOptions = [{
|
3
|
+
name: 'Unassigned',
|
4
|
+
color: Colours.LINEGREY
|
5
|
+
}, {
|
6
|
+
name: 'In Progress',
|
7
|
+
color: Colours.COLOUR_TEAL
|
8
|
+
}, {
|
9
|
+
name: 'Completed',
|
10
|
+
color: Colours.COLOUR_GREEN_LIGHT
|
11
|
+
}];
|
12
|
+
|
13
|
+
const getJobStatusColour = status => {
|
14
|
+
const option = jobStatusOptions.find(item => item.name === status);
|
15
|
+
return option ? option.color : jobStatusOptions[0].color;
|
16
|
+
};
|
17
|
+
|
18
|
+
const getJobStatusProps = status => {
|
19
|
+
const statusText = status || jobStatusOptions[0].name;
|
20
|
+
const statusColor = getJobStatusColour(statusText);
|
21
|
+
return {
|
22
|
+
statusText,
|
23
|
+
statusColor
|
24
|
+
};
|
25
|
+
};
|
26
|
+
|
27
|
+
export { jobStatusOptions, getJobStatusColour, getJobStatusProps };
|
28
|
+
//# sourceMappingURL=helper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["helper.js"],"names":["Colours","jobStatusOptions","name","color","LINEGREY","COLOUR_TEAL","COLOUR_GREEN_LIGHT","getJobStatusColour","status","option","find","item","getJobStatusProps","statusText","statusColor"],"mappings":"AAAA,SAASA,OAAT,QAAwB,eAAxB;AAEA,MAAMC,gBAAgB,GAAG,CACvB;AACEC,EAAAA,IAAI,EAAE,YADR;AAEEC,EAAAA,KAAK,EAAEH,OAAO,CAACI;AAFjB,CADuB,EAKvB;AACEF,EAAAA,IAAI,EAAE,aADR;AAEEC,EAAAA,KAAK,EAAEH,OAAO,CAACK;AAFjB,CALuB,EASvB;AACEH,EAAAA,IAAI,EAAE,WADR;AAEEC,EAAAA,KAAK,EAAEH,OAAO,CAACM;AAFjB,CATuB,CAAzB;;AAeA,MAAMC,kBAAkB,GAAGC,MAAM,IAAI;AACnC,QAAMC,MAAM,GAAGR,gBAAgB,CAACS,IAAjB,CAAsBC,IAAI,IAAIA,IAAI,CAACT,IAAL,KAAcM,MAA5C,CAAf;AACA,SAAOC,MAAM,GAAGA,MAAM,CAACN,KAAV,GAAkBF,gBAAgB,CAAC,CAAD,CAAhB,CAAoBE,KAAnD;AACD,CAHD;;AAKA,MAAMS,iBAAiB,GAAGJ,MAAM,IAAI;AAClC,QAAMK,UAAU,GAAGL,MAAM,IAAIP,gBAAgB,CAAC,CAAD,CAAhB,CAAoBC,IAAjD;AACA,QAAMY,WAAW,GAAGP,kBAAkB,CAACM,UAAD,CAAtC;AAEA,SAAO;AAAEA,IAAAA,UAAF;AAAcC,IAAAA;AAAd,GAAP;AACD,CALD;;AAOA,SAASb,gBAAT,EAA2BM,kBAA3B,EAA+CK,iBAA/C","sourcesContent":["import { Colours } from './core.config';\n\nconst jobStatusOptions = [\n {\n name: 'Unassigned',\n color: Colours.LINEGREY,\n },\n {\n name: 'In Progress',\n color: Colours.COLOUR_TEAL,\n },\n {\n name: 'Completed',\n color: Colours.COLOUR_GREEN_LIGHT,\n },\n];\n\nconst getJobStatusColour = status => {\n const option = jobStatusOptions.find(item => item.name === status);\n return option ? option.color : jobStatusOptions[0].color;\n};\n\nconst getJobStatusProps = status => {\n const statusText = status || jobStatusOptions[0].name;\n const statusColor = getJobStatusColour(statusText);\n\n return { statusText, statusColor };\n};\n\nexport { jobStatusOptions, getJobStatusColour, getJobStatusProps };\n"]}
|
Binary file
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import MaintenancePage from './screens/MaintenancePage';
|
2
|
+
import RequestDetail from './screens/RequestDetail';
|
3
|
+
import ServiceRequest from './screens/ServiceRequest';
|
4
|
+
import JobTypePicker from './screens/JobTypePicker';
|
5
|
+
import RequestNotes from './screens/RequestNotes';
|
6
|
+
import JobsReducer from './reducers/JobsReducer';
|
7
|
+
export const Reducers = {
|
8
|
+
jobs: JobsReducer
|
9
|
+
};
|
10
|
+
export const Screens = {
|
11
|
+
maintenance: MaintenancePage,
|
12
|
+
requestDetail: RequestDetail,
|
13
|
+
serviceRequest: ServiceRequest,
|
14
|
+
jobTypePicker: JobTypePicker,
|
15
|
+
requestNotes: RequestNotes
|
16
|
+
};
|
17
|
+
export { default as Config } from './feature.config';
|
18
|
+
export { default as WidgetSmall } from './components/WidgetSmall';
|
19
|
+
export { default as WidgetLarge } from './components/WidgetLarge';
|
20
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.js"],"names":["MaintenancePage","RequestDetail","ServiceRequest","JobTypePicker","RequestNotes","JobsReducer","Reducers","jobs","Screens","maintenance","requestDetail","serviceRequest","jobTypePicker","requestNotes","default","Config","WidgetSmall","WidgetLarge"],"mappings":"AAAA,OAAOA,eAAP,MAA4B,2BAA5B;AACA,OAAOC,aAAP,MAA0B,yBAA1B;AACA,OAAOC,cAAP,MAA2B,0BAA3B;AACA,OAAOC,aAAP,MAA0B,yBAA1B;AACA,OAAOC,YAAP,MAAyB,wBAAzB;AACA,OAAOC,WAAP,MAAwB,wBAAxB;AAEA,OAAO,MAAMC,QAAQ,GAAG;AAAEC,EAAAA,IAAI,EAAEF;AAAR,CAAjB;AACP,OAAO,MAAMG,OAAO,GAAG;AACrBC,EAAAA,WAAW,EAAET,eADQ;AAErBU,EAAAA,aAAa,EAAET,aAFM;AAGrBU,EAAAA,cAAc,EAAET,cAHK;AAIrBU,EAAAA,aAAa,EAAET,aAJM;AAKrBU,EAAAA,YAAY,EAAET;AALO,CAAhB;AAOP,SAASU,OAAO,IAAIC,MAApB,QAAkC,kBAAlC;AACA,SAASD,OAAO,IAAIE,WAApB,QAAuC,0BAAvC;AACA,SAASF,OAAO,IAAIG,WAApB,QAAuC,0BAAvC","sourcesContent":["import MaintenancePage from './screens/MaintenancePage';\nimport RequestDetail from './screens/RequestDetail';\nimport ServiceRequest from './screens/ServiceRequest';\nimport JobTypePicker from './screens/JobTypePicker';\nimport RequestNotes from './screens/RequestNotes';\nimport JobsReducer from './reducers/JobsReducer';\n\nexport const Reducers = { jobs: JobsReducer };\nexport const Screens = {\n maintenance: MaintenancePage,\n requestDetail: RequestDetail,\n serviceRequest: ServiceRequest,\n jobTypePicker: JobTypePicker,\n requestNotes: RequestNotes,\n};\nexport { default as Config } from './feature.config';\nexport { default as WidgetSmall } from './components/WidgetSmall';\nexport { default as WidgetLarge } from './components/WidgetLarge';\n"]}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
/* eslint-disable no-param-reassign */
|
2
|
+
import { REHYDRATE } from 'redux-persist';
|
3
|
+
import { JOBS_LOADED, JOB_ADDED } from '../actions/types';
|
4
|
+
import { ActionTypes } from '../core.config';
|
5
|
+
const REDUCER_KEY = 'jobs';
|
6
|
+
const INITIAL_STATE = {
|
7
|
+
jobs: []
|
8
|
+
};
|
9
|
+
export default (function () {
|
10
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_STATE;
|
11
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
12
|
+
let updateJobs = [];
|
13
|
+
let index = 0;
|
14
|
+
|
15
|
+
switch (action.type) {
|
16
|
+
case ActionTypes.LOGOUT:
|
17
|
+
case ActionTypes.CHANGE_ROLE:
|
18
|
+
return INITIAL_STATE;
|
19
|
+
|
20
|
+
case JOBS_LOADED:
|
21
|
+
return { ...state,
|
22
|
+
jobs: action.payload.map(job => ({
|
23
|
+
title: job.title || job.description,
|
24
|
+
...job
|
25
|
+
}))
|
26
|
+
};
|
27
|
+
|
28
|
+
case JOB_ADDED:
|
29
|
+
updateJobs = [...state.jobs];
|
30
|
+
index = updateJobs.findIndex(item => item.id === action.payload.id);
|
31
|
+
|
32
|
+
if (index > -1) {
|
33
|
+
updateJobs[index] = action.payload;
|
34
|
+
} else {
|
35
|
+
updateJobs.push(action.payload);
|
36
|
+
}
|
37
|
+
|
38
|
+
return { ...state,
|
39
|
+
jobs: updateJobs
|
40
|
+
};
|
41
|
+
|
42
|
+
case REHYDRATE:
|
43
|
+
if (!action.payload) return state;
|
44
|
+
|
45
|
+
if (action.payload[REDUCER_KEY]) {
|
46
|
+
if (action.payload[REDUCER_KEY].jobs == null) {
|
47
|
+
action.payload[REDUCER_KEY].jobs = [];
|
48
|
+
}
|
49
|
+
|
50
|
+
return action.payload[REDUCER_KEY];
|
51
|
+
}
|
52
|
+
|
53
|
+
return state;
|
54
|
+
|
55
|
+
default:
|
56
|
+
return state;
|
57
|
+
}
|
58
|
+
});
|
59
|
+
//# sourceMappingURL=JobsReducer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["JobsReducer.js"],"names":["REHYDRATE","JOBS_LOADED","JOB_ADDED","ActionTypes","REDUCER_KEY","INITIAL_STATE","jobs","state","action","updateJobs","index","type","LOGOUT","CHANGE_ROLE","payload","map","job","title","description","findIndex","item","id","push"],"mappings":"AAAA;AACA,SAASA,SAAT,QAA0B,eAA1B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,kBAAvC;AACA,SAASC,WAAT,QAA4B,gBAA5B;AAEA,MAAMC,WAAW,GAAG,MAApB;AAEA,MAAMC,aAAa,GAAG;AACpBC,EAAAA,IAAI,EAAE;AADc,CAAtB;AAIA,gBAAe,YAAmC;AAAA,MAAlCC,KAAkC,uEAA1BF,aAA0B;AAAA,MAAXG,MAAW;AAChD,MAAIC,UAAU,GAAG,EAAjB;AACA,MAAIC,KAAK,GAAG,CAAZ;;AAEA,UAAQF,MAAM,CAACG,IAAf;AACE,SAAKR,WAAW,CAACS,MAAjB;AACA,SAAKT,WAAW,CAACU,WAAjB;AACE,aAAOR,aAAP;;AACF,SAAKJ,WAAL;AACE,aAAO,EAAE,GAAGM,KAAL;AAAYD,QAAAA,IAAI,EAAEE,MAAM,CAACM,OAAP,CAAeC,GAAf,CAAmBC,GAAG,KAAK;AAAEC,UAAAA,KAAK,EAAED,GAAG,CAACC,KAAJ,IAAaD,GAAG,CAACE,WAA1B;AAAuC,aAAGF;AAA1C,SAAL,CAAtB;AAAlB,OAAP;;AACF,SAAKd,SAAL;AACEO,MAAAA,UAAU,GAAG,CAAC,GAAGF,KAAK,CAACD,IAAV,CAAb;AACAI,MAAAA,KAAK,GAAGD,UAAU,CAACU,SAAX,CAAqBC,IAAI,IAAIA,IAAI,CAACC,EAAL,KAAYb,MAAM,CAACM,OAAP,CAAeO,EAAxD,CAAR;;AACA,UAAIX,KAAK,GAAG,CAAC,CAAb,EAAgB;AACdD,QAAAA,UAAU,CAACC,KAAD,CAAV,GAAoBF,MAAM,CAACM,OAA3B;AACD,OAFD,MAEO;AACLL,QAAAA,UAAU,CAACa,IAAX,CAAgBd,MAAM,CAACM,OAAvB;AACD;;AACD,aAAO,EAAE,GAAGP,KAAL;AAAYD,QAAAA,IAAI,EAAEG;AAAlB,OAAP;;AACF,SAAKT,SAAL;AACE,UAAI,CAACQ,MAAM,CAACM,OAAZ,EAAqB,OAAOP,KAAP;;AACrB,UAAIC,MAAM,CAACM,OAAP,CAAeV,WAAf,CAAJ,EAAiC;AAC/B,YAAII,MAAM,CAACM,OAAP,CAAeV,WAAf,EAA4BE,IAA5B,IAAoC,IAAxC,EAA8C;AAC5CE,UAAAA,MAAM,CAACM,OAAP,CAAeV,WAAf,EAA4BE,IAA5B,GAAmC,EAAnC;AACD;;AACD,eAAOE,MAAM,CAACM,OAAP,CAAeV,WAAf,CAAP;AACD;;AACD,aAAOG,KAAP;;AACF;AACE,aAAOA,KAAP;AAzBJ;AA2BD,CA/BD","sourcesContent":["/* eslint-disable no-param-reassign */\nimport { REHYDRATE } from 'redux-persist';\nimport { JOBS_LOADED, JOB_ADDED } from '../actions/types';\nimport { ActionTypes } from '../core.config';\n\nconst REDUCER_KEY = 'jobs';\n\nconst INITIAL_STATE = {\n jobs: [],\n};\n\nexport default (state = INITIAL_STATE, action) => {\n let updateJobs = [];\n let index = 0;\n\n switch (action.type) {\n case ActionTypes.LOGOUT:\n case ActionTypes.CHANGE_ROLE:\n return INITIAL_STATE;\n case JOBS_LOADED:\n return { ...state, jobs: action.payload.map(job => ({ title: job.title || job.description, ...job })) };\n case JOB_ADDED:\n updateJobs = [...state.jobs];\n index = updateJobs.findIndex(item => item.id === action.payload.id);\n if (index > -1) {\n updateJobs[index] = action.payload;\n } else {\n updateJobs.push(action.payload);\n }\n return { ...state, jobs: updateJobs };\n case REHYDRATE:\n if (!action.payload) return state;\n if (action.payload[REDUCER_KEY]) {\n if (action.payload[REDUCER_KEY].jobs == null) {\n action.payload[REDUCER_KEY].jobs = [];\n }\n return action.payload[REDUCER_KEY];\n }\n return state;\n default:\n return state;\n }\n};\n"]}
|
@@ -0,0 +1,139 @@
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
2
|
+
|
3
|
+
import React, { Component } from 'react';
|
4
|
+
import _ from 'lodash';
|
5
|
+
import { TouchableOpacity, View, ScrollView, Text } from 'react-native';
|
6
|
+
import { connect } from 'react-redux';
|
7
|
+
import { Icon } from 'react-native-elements';
|
8
|
+
import { Services } from '../feature.config';
|
9
|
+
import { Components, Colours } from '../core.config';
|
10
|
+
|
11
|
+
class JobTypePicker extends Component {
|
12
|
+
constructor() {
|
13
|
+
super(...arguments);
|
14
|
+
|
15
|
+
_defineProperty(this, "state", {
|
16
|
+
currentType: null
|
17
|
+
});
|
18
|
+
}
|
19
|
+
|
20
|
+
UNSAFE_componentWillMount() {
|
21
|
+
this.setState({
|
22
|
+
currentType: this.props.currentType
|
23
|
+
});
|
24
|
+
}
|
25
|
+
|
26
|
+
onPressBack() {
|
27
|
+
Services.navigation.goBack();
|
28
|
+
}
|
29
|
+
|
30
|
+
onTypePress(type) {
|
31
|
+
this.props.onSelectType(type);
|
32
|
+
this.setState({
|
33
|
+
currentType: type
|
34
|
+
});
|
35
|
+
setTimeout(() => {
|
36
|
+
this.onPressBack();
|
37
|
+
}, 200);
|
38
|
+
}
|
39
|
+
|
40
|
+
renderMain() {
|
41
|
+
if (_.isEmpty(this.props.types)) {
|
42
|
+
return /*#__PURE__*/React.createElement(View, {
|
43
|
+
style: {
|
44
|
+
marginTop: 16
|
45
|
+
}
|
46
|
+
}, /*#__PURE__*/React.createElement(Components.Spinner, null));
|
47
|
+
}
|
48
|
+
|
49
|
+
return /*#__PURE__*/React.createElement(Components.FormCard, {
|
50
|
+
style: {
|
51
|
+
marginTop: 16
|
52
|
+
}
|
53
|
+
}, this.renderOptions());
|
54
|
+
}
|
55
|
+
|
56
|
+
renderOptions() {
|
57
|
+
return this.props.types.map((rep, index) => {
|
58
|
+
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
59
|
+
key: index,
|
60
|
+
onPress: this.onTypePress.bind(this, rep.typeName)
|
61
|
+
}, /*#__PURE__*/React.createElement(Components.FormCardSection, {
|
62
|
+
label: rep.typeName,
|
63
|
+
labelStyle: {
|
64
|
+
height: 0,
|
65
|
+
margin: 0
|
66
|
+
},
|
67
|
+
hasUnderline: true,
|
68
|
+
hasContent: true
|
69
|
+
}, /*#__PURE__*/React.createElement(View, {
|
70
|
+
style: styles.labelContainer
|
71
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
72
|
+
style: styles.labelText
|
73
|
+
}, rep.typeName), /*#__PURE__*/React.createElement(Icon, {
|
74
|
+
name: "check-circle" //style={styles.uploadButtonInner}
|
75
|
+
,
|
76
|
+
type: "font-awesome",
|
77
|
+
iconStyle: [{
|
78
|
+
color: '#d5d9e0',
|
79
|
+
fontSize: 20
|
80
|
+
}, rep.typeName === this.state.currentType && {
|
81
|
+
color: Colours.COLOUR_GREEN
|
82
|
+
}]
|
83
|
+
})), !_.isEmpty(rep.description) && /*#__PURE__*/React.createElement(Text, {
|
84
|
+
style: styles.description
|
85
|
+
}, rep.description)));
|
86
|
+
});
|
87
|
+
}
|
88
|
+
|
89
|
+
render() {
|
90
|
+
return /*#__PURE__*/React.createElement(View, {
|
91
|
+
style: styles.container
|
92
|
+
}, /*#__PURE__*/React.createElement(Components.Header, {
|
93
|
+
leftIcon: "angle-left",
|
94
|
+
onPressLeft: this.onPressBack.bind(this),
|
95
|
+
text: "Select type"
|
96
|
+
}), /*#__PURE__*/React.createElement(ScrollView, {
|
97
|
+
style: {
|
98
|
+
flex: 1
|
99
|
+
}
|
100
|
+
}, this.renderMain()));
|
101
|
+
}
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
const styles = {
|
106
|
+
container: {
|
107
|
+
flex: 1,
|
108
|
+
position: 'relative',
|
109
|
+
backgroundColor: '#f0f0f5'
|
110
|
+
},
|
111
|
+
row: {
|
112
|
+
flexDirection: 'row',
|
113
|
+
alignItems: 'center',
|
114
|
+
minHeight: 22
|
115
|
+
},
|
116
|
+
text: {
|
117
|
+
flex: 1,
|
118
|
+
fontFamily: 'sf-regular',
|
119
|
+
fontSize: 14,
|
120
|
+
color: Colours.TEXT_DARK
|
121
|
+
},
|
122
|
+
labelContainer: {
|
123
|
+
flexDirection: 'row',
|
124
|
+
justifyContent: 'space-between'
|
125
|
+
},
|
126
|
+
labelText: {
|
127
|
+
fontFamily: 'sf-medium',
|
128
|
+
fontSize: 16,
|
129
|
+
color: Colours.TEXT_DARK
|
130
|
+
},
|
131
|
+
description: {
|
132
|
+
marginTop: 5,
|
133
|
+
fontSize: 14,
|
134
|
+
fontFamily: 'sf-regular',
|
135
|
+
color: Colours.TEXT_DARK
|
136
|
+
}
|
137
|
+
};
|
138
|
+
export default connect(null, {})(JobTypePicker);
|
139
|
+
//# sourceMappingURL=JobTypePicker.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["JobTypePicker.js"],"names":["React","Component","_","TouchableOpacity","View","ScrollView","Text","connect","Icon","Services","Components","Colours","JobTypePicker","currentType","UNSAFE_componentWillMount","setState","props","onPressBack","navigation","goBack","onTypePress","type","onSelectType","setTimeout","renderMain","isEmpty","types","marginTop","renderOptions","map","rep","index","bind","typeName","height","margin","styles","labelContainer","labelText","color","fontSize","state","COLOUR_GREEN","description","render","container","flex","position","backgroundColor","row","flexDirection","alignItems","minHeight","text","fontFamily","TEXT_DARK","justifyContent"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,CAAP,MAAc,QAAd;AACA,SAASC,gBAAT,EAA2BC,IAA3B,EAAiCC,UAAjC,EAA6CC,IAA7C,QAAyD,cAAzD;AACA,SAASC,OAAT,QAAwB,aAAxB;AACA,SAASC,IAAT,QAAqB,uBAArB;AACA,SAASC,QAAT,QAAyB,mBAAzB;AACA,SAASC,UAAT,EAAqBC,OAArB,QAAoC,gBAApC;;AAEA,MAAMC,aAAN,SAA4BX,SAA5B,CAAsC;AAAA;AAAA;;AAAA,mCAC5B;AACNY,MAAAA,WAAW,EAAE;AADP,KAD4B;AAAA;;AAKpCC,EAAAA,yBAAyB,GAAG;AAC1B,SAAKC,QAAL,CAAc;AAAEF,MAAAA,WAAW,EAAE,KAAKG,KAAL,CAAWH;AAA1B,KAAd;AACD;;AAEDI,EAAAA,WAAW,GAAG;AACZR,IAAAA,QAAQ,CAACS,UAAT,CAAoBC,MAApB;AACD;;AAEDC,EAAAA,WAAW,CAACC,IAAD,EAAO;AAChB,SAAKL,KAAL,CAAWM,YAAX,CAAwBD,IAAxB;AACA,SAAKN,QAAL,CAAc;AAAEF,MAAAA,WAAW,EAAEQ;AAAf,KAAd;AACAE,IAAAA,UAAU,CAAC,MAAM;AACf,WAAKN,WAAL;AACD,KAFS,EAEP,GAFO,CAAV;AAGD;;AAEDO,EAAAA,UAAU,GAAG;AACX,QAAItB,CAAC,CAACuB,OAAF,CAAU,KAAKT,KAAL,CAAWU,KAArB,CAAJ,EAAiC;AAC/B,0BACE,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAE;AAAEC,UAAAA,SAAS,EAAE;AAAb;AAAb,sBACE,oBAAC,UAAD,CAAY,OAAZ,OADF,CADF;AAKD;;AAED,wBAAO,oBAAC,UAAD,CAAY,QAAZ;AAAqB,MAAA,KAAK,EAAE;AAAEA,QAAAA,SAAS,EAAE;AAAb;AAA5B,OAAgD,KAAKC,aAAL,EAAhD,CAAP;AACD;;AAEDA,EAAAA,aAAa,GAAG;AACd,WAAO,KAAKZ,KAAL,CAAWU,KAAX,CAAiBG,GAAjB,CAAqB,CAACC,GAAD,EAAMC,KAAN,KAAgB;AAC1C,0BACE,oBAAC,gBAAD;AAAkB,QAAA,GAAG,EAAEA,KAAvB;AAA8B,QAAA,OAAO,EAAE,KAAKX,WAAL,CAAiBY,IAAjB,CAAsB,IAAtB,EAA4BF,GAAG,CAACG,QAAhC;AAAvC,sBACE,oBAAC,UAAD,CAAY,eAAZ;AAA4B,QAAA,KAAK,EAAEH,GAAG,CAACG,QAAvC;AAAiD,QAAA,UAAU,EAAE;AAAEC,UAAAA,MAAM,EAAE,CAAV;AAAaC,UAAAA,MAAM,EAAE;AAArB,SAA7D;AAAuF,QAAA,YAAY,MAAnG;AAAoG,QAAA,UAAU;AAA9G,sBACE,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAEC,MAAM,CAACC;AAApB,sBACE,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAED,MAAM,CAACE;AAApB,SAAgCR,GAAG,CAACG,QAApC,CADF,eAEE,oBAAC,IAAD;AACE,QAAA,IAAI,EAAC,cADP,CAEE;AAFF;AAGE,QAAA,IAAI,EAAC,cAHP;AAIE,QAAA,SAAS,EAAE,CAAC;AAAEM,UAAAA,KAAK,EAAE,SAAT;AAAoBC,UAAAA,QAAQ,EAAE;AAA9B,SAAD,EAAqCV,GAAG,CAACG,QAAJ,KAAiB,KAAKQ,KAAL,CAAW5B,WAA5B,IAA2C;AAAE0B,UAAAA,KAAK,EAAE5B,OAAO,CAAC+B;AAAjB,SAAhF;AAJb,QAFF,CADF,EAUG,CAACxC,CAAC,CAACuB,OAAF,CAAUK,GAAG,CAACa,WAAd,CAAD,iBAA+B,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAEP,MAAM,CAACO;AAApB,SAAkCb,GAAG,CAACa,WAAtC,CAVlC,CADF,CADF;AAgBD,KAjBM,CAAP;AAkBD;;AAEDC,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,IAAD;AAAM,MAAA,KAAK,EAAER,MAAM,CAACS;AAApB,oBACE,oBAAC,UAAD,CAAY,MAAZ;AAAmB,MAAA,QAAQ,EAAC,YAA5B;AAAyC,MAAA,WAAW,EAAE,KAAK5B,WAAL,CAAiBe,IAAjB,CAAsB,IAAtB,CAAtD;AAAmF,MAAA,IAAI,EAAC;AAAxF,MADF,eAEE,oBAAC,UAAD;AAAY,MAAA,KAAK,EAAE;AAAEc,QAAAA,IAAI,EAAE;AAAR;AAAnB,OAAiC,KAAKtB,UAAL,EAAjC,CAFF,CADF;AAMD;;AA7DmC;;AAgEtC,MAAMY,MAAM,GAAG;AACbS,EAAAA,SAAS,EAAE;AACTC,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,QAAQ,EAAE,UAFD;AAGTC,IAAAA,eAAe,EAAE;AAHR,GADE;AAMbC,EAAAA,GAAG,EAAE;AACHC,IAAAA,aAAa,EAAE,KADZ;AAEHC,IAAAA,UAAU,EAAE,QAFT;AAGHC,IAAAA,SAAS,EAAE;AAHR,GANQ;AAWbC,EAAAA,IAAI,EAAE;AACJP,IAAAA,IAAI,EAAE,CADF;AAEJQ,IAAAA,UAAU,EAAE,YAFR;AAGJd,IAAAA,QAAQ,EAAE,EAHN;AAIJD,IAAAA,KAAK,EAAE5B,OAAO,CAAC4C;AAJX,GAXO;AAiBblB,EAAAA,cAAc,EAAE;AACda,IAAAA,aAAa,EAAE,KADD;AAEdM,IAAAA,cAAc,EAAE;AAFF,GAjBH;AAqBblB,EAAAA,SAAS,EAAE;AACTgB,IAAAA,UAAU,EAAE,WADH;AAETd,IAAAA,QAAQ,EAAE,EAFD;AAGTD,IAAAA,KAAK,EAAE5B,OAAO,CAAC4C;AAHN,GArBE;AA0BbZ,EAAAA,WAAW,EAAE;AACXhB,IAAAA,SAAS,EAAE,CADA;AAEXa,IAAAA,QAAQ,EAAE,EAFC;AAGXc,IAAAA,UAAU,EAAE,YAHD;AAIXf,IAAAA,KAAK,EAAE5B,OAAO,CAAC4C;AAJJ;AA1BA,CAAf;AAkCA,eAAehD,OAAO,CAAC,IAAD,EAAO,EAAP,CAAP,CAAkBK,aAAlB,CAAf","sourcesContent":["import React, { Component } from 'react';\nimport _ from 'lodash';\nimport { TouchableOpacity, View, ScrollView, Text } from 'react-native';\nimport { connect } from 'react-redux';\nimport { Icon } from 'react-native-elements';\nimport { Services } from '../feature.config';\nimport { Components, Colours } from '../core.config';\n\nclass JobTypePicker extends Component {\n state = {\n currentType: null,\n };\n\n UNSAFE_componentWillMount() {\n this.setState({ currentType: this.props.currentType });\n }\n\n onPressBack() {\n Services.navigation.goBack();\n }\n\n onTypePress(type) {\n this.props.onSelectType(type);\n this.setState({ currentType: type });\n setTimeout(() => {\n this.onPressBack();\n }, 200);\n }\n\n renderMain() {\n if (_.isEmpty(this.props.types)) {\n return (\n <View style={{ marginTop: 16 }}>\n <Components.Spinner />\n </View>\n );\n }\n\n return <Components.FormCard style={{ marginTop: 16 }}>{this.renderOptions()}</Components.FormCard>;\n }\n\n renderOptions() {\n return this.props.types.map((rep, index) => {\n return (\n <TouchableOpacity key={index} onPress={this.onTypePress.bind(this, rep.typeName)}>\n <Components.FormCardSection label={rep.typeName} labelStyle={{ height: 0, margin: 0 }} hasUnderline hasContent>\n <View style={styles.labelContainer}>\n <Text style={styles.labelText}>{rep.typeName}</Text>\n <Icon\n name=\"check-circle\"\n //style={styles.uploadButtonInner}\n type=\"font-awesome\"\n iconStyle={[{ color: '#d5d9e0', fontSize: 20 }, rep.typeName === this.state.currentType && { color: Colours.COLOUR_GREEN }]}\n />\n </View>\n {!_.isEmpty(rep.description) && <Text style={styles.description}>{rep.description}</Text>}\n </Components.FormCardSection>\n </TouchableOpacity>\n );\n });\n }\n\n render() {\n return (\n <View style={styles.container}>\n <Components.Header leftIcon=\"angle-left\" onPressLeft={this.onPressBack.bind(this)} text=\"Select type\" />\n <ScrollView style={{ flex: 1 }}>{this.renderMain()}</ScrollView>\n </View>\n );\n }\n}\n\nconst styles = {\n container: {\n flex: 1,\n position: 'relative',\n backgroundColor: '#f0f0f5',\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 22,\n },\n text: {\n flex: 1,\n fontFamily: 'sf-regular',\n fontSize: 14,\n color: Colours.TEXT_DARK,\n },\n labelContainer: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n labelText: {\n fontFamily: 'sf-medium',\n fontSize: 16,\n color: Colours.TEXT_DARK,\n },\n description: {\n marginTop: 5,\n fontSize: 14,\n fontFamily: 'sf-regular',\n color: Colours.TEXT_DARK,\n },\n};\n\nexport default connect(null, {})(JobTypePicker);\n"]}
|