@plusscommunities/pluss-maintenance-app 8.0.17-beta.1 → 8.0.17-beta.2
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/components/FilterPopupMenu.js +14 -6
- package/dist/module/components/FilterPopupMenu.js.map +1 -1
- package/dist/module/components/MaintenanceList.js +5 -57
- package/dist/module/components/MaintenanceList.js.map +1 -1
- package/dist/module/components/WidgetSmall.js +3 -3
- package/dist/module/components/WidgetSmall.js.map +1 -1
- package/dist/module/screens/RequestDetail.js +31 -7
- package/dist/module/screens/RequestDetail.js.map +1 -1
- package/dist/module/screens/ServiceRequest.js +4 -10
- package/dist/module/screens/ServiceRequest.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FilterPopupMenu.js +14 -11
- package/src/components/MaintenanceList.js +6 -77
- package/src/components/WidgetSmall.js +3 -3
- package/src/screens/RequestDetail.js +35 -14
- package/src/screens/ServiceRequest.js +2 -16
|
@@ -45,6 +45,9 @@ class FilterPopupMenu extends Component {
|
|
|
45
45
|
_defineProperty(this, "getAssignees", async () => {
|
|
46
46
|
try {
|
|
47
47
|
const res = await maintenanceActions.getAssignees(this.props.site);
|
|
48
|
+
const newState = {
|
|
49
|
+
loadingAssignees: false
|
|
50
|
+
};
|
|
48
51
|
let assignees = res.data.Users.map(t => {
|
|
49
52
|
return {
|
|
50
53
|
label: t.displayName,
|
|
@@ -56,16 +59,17 @@ class FilterPopupMenu extends Component {
|
|
|
56
59
|
label: "All",
|
|
57
60
|
value: ""
|
|
58
61
|
});
|
|
59
|
-
const newState = {
|
|
60
|
-
assignees
|
|
61
|
-
};
|
|
62
62
|
if (!assignees.some(a => a.value === this.state.selectedAssignee)) {
|
|
63
63
|
newState.selectedAssignee = "";
|
|
64
64
|
}
|
|
65
|
+
newState.assignees = assignees;
|
|
65
66
|
// console.log('refreshassignees', assignees);
|
|
66
67
|
this.setState(newState);
|
|
67
68
|
} catch (error) {
|
|
68
69
|
console.error("getAssignees", error);
|
|
70
|
+
this.setState({
|
|
71
|
+
loadingAssignees: false
|
|
72
|
+
});
|
|
69
73
|
}
|
|
70
74
|
});
|
|
71
75
|
_defineProperty(this, "refreshTypes", async () => {
|
|
@@ -119,7 +123,8 @@ class FilterPopupMenu extends Component {
|
|
|
119
123
|
selectedPriority: props.priority || "",
|
|
120
124
|
selectedType: props.type || "",
|
|
121
125
|
selectedAssignee: props.assignee || "",
|
|
122
|
-
assignees: []
|
|
126
|
+
assignees: [],
|
|
127
|
+
loadingAssignees: true
|
|
123
128
|
};
|
|
124
129
|
}
|
|
125
130
|
componentDidMount() {
|
|
@@ -188,7 +193,7 @@ class FilterPopupMenu extends Component {
|
|
|
188
193
|
render() {
|
|
189
194
|
// console.log('FilterPopupMenu', JSON.stringify({ category: this.props.user.category, permissions: this.props.user.permissions }, null, 2))
|
|
190
195
|
const isStaff = this.props.user.category === "staff";
|
|
191
|
-
const canFilterAssignee =
|
|
196
|
+
const canFilterAssignee = _.includes(this.props.user.permissions, values.permissionMaintenanceTracking) || _.includes(this.props.user.permissions, values.permissionMaintenanceAssignment);
|
|
192
197
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
193
198
|
visible: true,
|
|
194
199
|
transparent: true,
|
|
@@ -200,7 +205,10 @@ class FilterPopupMenu extends Component {
|
|
|
200
205
|
style: styles.menu
|
|
201
206
|
}, this.renderTitle(), /*#__PURE__*/React.createElement(ScrollView, {
|
|
202
207
|
style: styles.optionContent
|
|
203
|
-
}, this.renderOptions("Status", this.getStatusOptions(), "selectedStatus"), isStaff ? this.renderOptions("Priority", this.getPriorityOptions(), "selectedPriority") : null, this.renderOptions("Type", this.state.types, "selectedType"), canFilterAssignee ? this.renderOptions("Assigned To",
|
|
208
|
+
}, this.renderOptions("Status", this.getStatusOptions(), "selectedStatus"), isStaff ? this.renderOptions("Priority", this.getPriorityOptions(), "selectedPriority") : null, this.renderOptions("Type", this.state.types, "selectedType"), canFilterAssignee ? this.state.loadingAssignees ? this.renderOptions("Assigned To", [{
|
|
209
|
+
label: "Loading...",
|
|
210
|
+
value: ""
|
|
211
|
+
}], "selectedAssignee") : this.renderOptions("Assigned To", this.state.assignees, "selectedAssignee") : null), this.renderCancel())));
|
|
204
212
|
}
|
|
205
213
|
}
|
|
206
214
|
const styles = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Text","View","TouchableOpacity","Modal","ScrollView","Dimensions","connect","_","maintenanceActions","Colours","Helper","getJobStatusOptions","jobPriorityOptions","getDefaultJobPriority","values","SCREEN_HEIGHT","get","height","FilterPopupMenu","constructor","props","_defineProperty","statusOptions","options","label","value","map","s","text","priorityOptions","defaultPriority","p","res","getAssignees","site","assignees","data","Users","t","displayName","id","orderBy","splice","newState","some","a","state","selectedAssignee","setState","error","console","getJobTypes","getSite","types","typeName","key","_this$getStatusOption","_this$getPriorityOpti","_this$state$assignees","onClose","selectedStatus","selectedPriority","selectedType","status","statusText","getStatusOptions","find","o","priority","priorityText","getPriorityOptions","type","assignee","assigneeName","componentDidMount","isEmpty","refreshTypes","componentDidUpdate","prevProps","renderTitle","title","createElement","style","styles","titleContainer","titleText","renderCancel","colourBrandingMain","cancelText","onPress","onDone","cancelContainer","color","renderOptions","selectedKey","optionsContainer","optionsTitle","selected","backgroundColor","onSelectOption","optionContainer","borderColor","optionText","render","isStaff","user","category","canFilterAssignee","includes","permissions","permissionMaintenanceAssignment","visible","transparent","animationType","onRequestClose","container","menu","optionContent","position","bottom","left","right","top","zIndex","borderTopLeftRadius","borderTopRightRadius","maxHeight","paddingVertical","LINEGREY","borderTopWidth","paddingHorizontal","fontFamily","fontSize","textAlign","TEXT_DARK","padding","borderBottomWidth","marginHorizontal","marginBottom","flex","flexDirection","flexWrap","alignItems","justifyContent","minWidth","borderRadius","borderWidth","marginRight","mapStateToProps","getMainBrandingColourFromState","statusTypes","reducerKey","jobstatuses"],"sources":["FilterPopupMenu.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport {\n\tView,\n\tTouchableOpacity,\n\tModal,\n\tScrollView,\n\tDimensions,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { maintenanceActions } from \"../apis\";\nimport { Colours, Helper } from \"../core.config\";\nimport {\n\tgetJobStatusOptions,\n\tjobPriorityOptions,\n\tgetDefaultJobPriority,\n} from \"../helper\";\nimport { values } from \"../values.config\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\nclass FilterPopupMenu extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: props.types || [],\n\t\t\tselectedStatus: props.status || \"\",\n\t\t\tselectedPriority: props.priority || \"\",\n\t\t\tselectedType: props.type || \"\",\n\t\t\tselectedAssignee: props.assignee || \"\",\n\t\t\tassignees: [],\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAssignees();\n\t\tif (_.isEmpty(this.state.types)) this.refreshTypes();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (prevProps.site !== this.props.site) {\n\t\t\tthis.refreshTypes();\n\t\t}\n\t}\n\n\tgetStatusOptions = () => {\n\t\tconst statusOptions = getJobStatusOptions(this.props);\n\t\tconst options = [\n\t\t\t{\n\t\t\t\tlabel: \"All\",\n\t\t\t\tvalue: \"\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Incomplete\",\n\t\t\t\tvalue: \"Incomplete\",\n\t\t\t},\n\t\t\t...statusOptions.map((s) => ({\n\t\t\t\tlabel: s.text,\n\t\t\t\tvalue: s.text,\n\t\t\t})),\n\t\t];\n\t\t// console.log('getStatusOptions', JSON.stringify(options, null, 2));\n\t\treturn options;\n\t};\n\n\tgetPriorityOptions = () => {\n\t\tconst priorityOptions = jobPriorityOptions;\n\t\tconst defaultPriority = getDefaultJobPriority();\n\t\tconst options = [\n\t\t\t{\n\t\t\t\tlabel: \"All\",\n\t\t\t\tvalue: \"\",\n\t\t\t},\n\t\t\t...priorityOptions.map((p) => ({\n\t\t\t\tlabel: p.label,\n\t\t\t\tvalue:\n\t\t\t\t\tp.label === defaultPriority?.label ? `${p.label}|undefined` : p.label,\n\t\t\t})),\n\t\t];\n\t\t// console.log('getPriorityOptions', JSON.stringify(options, null, 2));\n\t\treturn options;\n\t};\n\n\tgetAssignees = async () => {\n\t\ttry {\n\t\t\tconst res = await maintenanceActions.getAssignees(this.props.site);\n\t\t\tlet assignees = res.data.Users.map((t) => {\n\t\t\t\treturn { label: t.displayName, value: t.id };\n\t\t\t});\n\t\t\tassignees = _.orderBy(assignees, \"label\");\n\n\t\t\tassignees.splice(0, 0, { label: \"All\", value: \"\" });\n\n\t\t\tconst newState = { assignees };\n\n\t\t\tif (!assignees.some((a) => a.value === this.state.selectedAssignee)) {\n\t\t\t\tnewState.selectedAssignee = \"\";\n\t\t\t}\n\t\t\t// console.log('refreshassignees', assignees);\n\t\t\tthis.setState(newState);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"getAssignees\", error);\n\t\t}\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tonSelectOption = (key, value) => {\n\t\tconst newState = {};\n\t\tnewState[key] = value;\n\t\tthis.setState(newState);\n\t};\n\n\tonDone = () => {\n\t\tconst { onClose } = this.props;\n\t\tconst { selectedStatus, selectedPriority, selectedType, selectedAssignee } =\n\t\t\tthis.state;\n\t\tif (onClose)\n\t\t\tonClose({\n\t\t\t\tstatus: selectedStatus,\n\t\t\t\tstatusText: this.getStatusOptions().find(\n\t\t\t\t\t(o) => o.value === selectedStatus,\n\t\t\t\t)?.label,\n\t\t\t\tpriority: selectedPriority,\n\t\t\t\tpriorityText: this.getPriorityOptions().find(\n\t\t\t\t\t(o) => o.value === selectedPriority,\n\t\t\t\t)?.label,\n\t\t\t\ttype: selectedType,\n\t\t\t\tassignee: selectedAssignee,\n\t\t\t\tassigneeName: this.state.assignees.find(\n\t\t\t\t\t(a) => a.value === selectedAssignee,\n\t\t\t\t)?.label,\n\t\t\t});\n\t};\n\n\trenderTitle() {\n\t\tconst { title } = this.props;\n\t\treturn (\n\t\t\t<View style={styles.titleContainer}>\n\t\t\t\t<Text style={styles.titleText}>{title || \"Filter By\"}</Text>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderCancel() {\n\t\tconst { colourBrandingMain, cancelText } = this.props;\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onDone}>\n\t\t\t\t<View style={styles.cancelContainer}>\n\t\t\t\t\t<Text style={[styles.cancelText, { color: colourBrandingMain }]}>\n\t\t\t\t\t\t{cancelText || \"Done\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderOptions(title, options, selectedKey) {\n\t\tconst { colourBrandingMain } = this.props;\n\t\treturn (\n\t\t\t<View style={styles.optionsContainer}>\n\t\t\t\t<Text style={styles.optionsTitle}>{title}</Text>\n\t\t\t\t<View style={styles.options}>\n\t\t\t\t\t{options.map((o) => {\n\t\t\t\t\t\tconst selected = this.state[selectedKey];\n\t\t\t\t\t\tconst backgroundColor =\n\t\t\t\t\t\t\to.value === selected ? colourBrandingMain : \"#fff\";\n\t\t\t\t\t\tconst color = o.value === selected ? \"#fff\" : colourBrandingMain;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\tkey={o.label}\n\t\t\t\t\t\t\t\tonPress={() => this.onSelectOption(selectedKey, o.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<View\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\tstyles.optionContainer,\n\t\t\t\t\t\t\t\t\t\t{ backgroundColor, borderColor: colourBrandingMain },\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Text style={[styles.optionText, { color }]}>{o.label}</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trender() {\n\t\t// console.log('FilterPopupMenu', JSON.stringify({ category: this.props.user.category, permissions: this.props.user.permissions }, null, 2))\n\t\tconst isStaff = this.props.user.category === \"staff\";\n\t\tconst canFilterAssignee = !_.includes(\n\t\t\tthis.props.user.permissions,\n\t\t\tvalues.permissionMaintenanceAssignment,\n\t\t);\n\n\t\treturn (\n\t\t\t<Modal\n\t\t\t\tvisible\n\t\t\t\ttransparent\n\t\t\t\tanimationType=\"slide\"\n\t\t\t\tonRequestClose={this.onDone}\n\t\t\t>\n\t\t\t\t<View style={styles.container}>\n\t\t\t\t\t<View style={styles.menu}>\n\t\t\t\t\t\t{this.renderTitle()}\n\t\t\t\t\t\t<ScrollView style={styles.optionContent}>\n\t\t\t\t\t\t\t{this.renderOptions(\n\t\t\t\t\t\t\t\t\"Status\",\n\t\t\t\t\t\t\t\tthis.getStatusOptions(),\n\t\t\t\t\t\t\t\t\"selectedStatus\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{isStaff\n\t\t\t\t\t\t\t\t? this.renderOptions(\n\t\t\t\t\t\t\t\t\t\t\"Priority\",\n\t\t\t\t\t\t\t\t\t\tthis.getPriorityOptions(),\n\t\t\t\t\t\t\t\t\t\t\"selectedPriority\",\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t{this.renderOptions(\"Type\", this.state.types, \"selectedType\")}\n\t\t\t\t\t\t\t{canFilterAssignee\n\t\t\t\t\t\t\t\t? this.renderOptions(\n\t\t\t\t\t\t\t\t\t\t\"Assigned To\",\n\t\t\t\t\t\t\t\t\t\tthis.state.assignees,\n\t\t\t\t\t\t\t\t\t\t\"selectedAssignee\",\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t</ScrollView>\n\t\t\t\t\t\t{this.renderCancel()}\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</Modal>\n\t\t);\n\t}\n}\n\nconst styles = {\n\tcontainer: {\n\t\tposition: \"absolute\",\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbackgroundColor: \"rgba(0,0,0,0.5)\",\n\t\tzIndex: 1000,\n\t},\n\tmenu: {\n\t\tposition: \"absolute\",\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\tbackgroundColor: \"#fff\",\n\t\tborderTopLeftRadius: 12,\n\t\tborderTopRightRadius: 12,\n\t\tmaxHeight: SCREEN_HEIGHT * 0.8,\n\t},\n\tcancelContainer: {\n\t\tpaddingVertical: 16,\n\t\tborderColor: Colours.LINEGREY,\n\t\tborderTopWidth: 1,\n\t\tpaddingHorizontal: 16,\n\t},\n\tcancelText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\ttextAlign: \"center\",\n\t\tcolor: Colours.TEXT_DARK,\n\t},\n\ttitleContainer: {\n\t\tpadding: 16,\n\t\tborderColor: Colours.LINEGREY,\n\t\tborderBottomWidth: 1,\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\ttextAlign: \"center\",\n\t\tcolor: Colours.TEXT_DARK,\n\t},\n\toptionContent: {\n\t\tpaddingVertical: 10,\n\t},\n\toptionsContainer: {\n\t\tmarginHorizontal: 14,\n\t},\n\toptionsTitle: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tmarginBottom: 4,\n\t},\n\toptions: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t},\n\toptionContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tminWidth: 50,\n\t\theight: 30,\n\t\tpaddingHorizontal: 8,\n\t\tborderRadius: 4,\n\t\tborderWidth: 1,\n\t\tmarginRight: 8,\n\t\tmarginBottom: 8,\n\t},\n\toptionText: {\n\t\tcolor: \"#fff\",\n\t\ttextAlign: \"center\",\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 13,\n\t},\n};\n\nconst mapStateToProps = (state) => {\n\tconst { user } = state;\n\n\treturn {\n\t\tuser,\n\t\tsite: user.site,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t};\n};\n\nexport default connect(mapStateToProps, {})(FilterPopupMenu);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","Text","View","TouchableOpacity","Modal","ScrollView","Dimensions","connect","_","maintenanceActions","Colours","Helper","getJobStatusOptions","jobPriorityOptions","getDefaultJobPriority","values","SCREEN_HEIGHT","get","height","FilterPopupMenu","constructor","props","_defineProperty","statusOptions","options","label","value","map","s","text","priorityOptions","defaultPriority","p","res","getAssignees","site","newState","loadingAssignees","assignees","data","Users","t","displayName","id","orderBy","splice","some","a","state","selectedAssignee","setState","error","console","getJobTypes","getSite","types","typeName","key","_this$getStatusOption","_this$getPriorityOpti","_this$state$assignees","onClose","selectedStatus","selectedPriority","selectedType","status","statusText","getStatusOptions","find","o","priority","priorityText","getPriorityOptions","type","assignee","assigneeName","componentDidMount","isEmpty","refreshTypes","componentDidUpdate","prevProps","renderTitle","title","createElement","style","styles","titleContainer","titleText","renderCancel","colourBrandingMain","cancelText","onPress","onDone","cancelContainer","color","renderOptions","selectedKey","optionsContainer","optionsTitle","selected","backgroundColor","onSelectOption","optionContainer","borderColor","optionText","render","isStaff","user","category","canFilterAssignee","includes","permissions","permissionMaintenanceTracking","permissionMaintenanceAssignment","visible","transparent","animationType","onRequestClose","container","menu","optionContent","position","bottom","left","right","top","zIndex","borderTopLeftRadius","borderTopRightRadius","maxHeight","paddingVertical","LINEGREY","borderTopWidth","paddingHorizontal","fontFamily","fontSize","textAlign","TEXT_DARK","padding","borderBottomWidth","marginHorizontal","marginBottom","flex","flexDirection","flexWrap","alignItems","justifyContent","minWidth","borderRadius","borderWidth","marginRight","mapStateToProps","getMainBrandingColourFromState","statusTypes","reducerKey","jobstatuses"],"sources":["FilterPopupMenu.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport {\n\tView,\n\tTouchableOpacity,\n\tModal,\n\tScrollView,\n\tDimensions,\n} from \"react-native\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { maintenanceActions } from \"../apis\";\nimport { Colours, Helper } from \"../core.config\";\nimport {\n\tgetJobStatusOptions,\n\tjobPriorityOptions,\n\tgetDefaultJobPriority,\n} from \"../helper\";\nimport { values } from \"../values.config\";\n\nconst SCREEN_HEIGHT = Dimensions.get(\"window\").height;\n\nclass FilterPopupMenu extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: props.types || [],\n\t\t\tselectedStatus: props.status || \"\",\n\t\t\tselectedPriority: props.priority || \"\",\n\t\t\tselectedType: props.type || \"\",\n\t\t\tselectedAssignee: props.assignee || \"\",\n\t\t\tassignees: [],\n\t\t\tloadingAssignees: true,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAssignees();\n\t\tif (_.isEmpty(this.state.types)) this.refreshTypes();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (prevProps.site !== this.props.site) {\n\t\t\tthis.refreshTypes();\n\t\t}\n\t}\n\n\tgetStatusOptions = () => {\n\t\tconst statusOptions = getJobStatusOptions(this.props);\n\t\tconst options = [\n\t\t\t{\n\t\t\t\tlabel: \"All\",\n\t\t\t\tvalue: \"\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Incomplete\",\n\t\t\t\tvalue: \"Incomplete\",\n\t\t\t},\n\t\t\t...statusOptions.map((s) => ({\n\t\t\t\tlabel: s.text,\n\t\t\t\tvalue: s.text,\n\t\t\t})),\n\t\t];\n\t\t// console.log('getStatusOptions', JSON.stringify(options, null, 2));\n\t\treturn options;\n\t};\n\n\tgetPriorityOptions = () => {\n\t\tconst priorityOptions = jobPriorityOptions;\n\t\tconst defaultPriority = getDefaultJobPriority();\n\t\tconst options = [\n\t\t\t{\n\t\t\t\tlabel: \"All\",\n\t\t\t\tvalue: \"\",\n\t\t\t},\n\t\t\t...priorityOptions.map((p) => ({\n\t\t\t\tlabel: p.label,\n\t\t\t\tvalue:\n\t\t\t\t\tp.label === defaultPriority?.label ? `${p.label}|undefined` : p.label,\n\t\t\t})),\n\t\t];\n\t\t// console.log('getPriorityOptions', JSON.stringify(options, null, 2));\n\t\treturn options;\n\t};\n\n\tgetAssignees = async () => {\n\t\ttry {\n\t\t\tconst res = await maintenanceActions.getAssignees(this.props.site);\n\t\t\tconst newState = { loadingAssignees: false };\n\t\t\tlet assignees = res.data.Users.map((t) => {\n\t\t\t\treturn { label: t.displayName, value: t.id };\n\t\t\t});\n\t\t\tassignees = _.orderBy(assignees, \"label\");\n\n\t\t\tassignees.splice(0, 0, { label: \"All\", value: \"\" });\n\n\t\t\tif (!assignees.some((a) => a.value === this.state.selectedAssignee)) {\n\t\t\t\tnewState.selectedAssignee = \"\";\n\t\t\t}\n\t\t\tnewState.assignees = assignees;\n\t\t\t// console.log('refreshassignees', assignees);\n\t\t\tthis.setState(newState);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"getAssignees\", error);\n\t\t\tthis.setState({ loadingAssignees: false });\n\t\t}\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tonSelectOption = (key, value) => {\n\t\tconst newState = {};\n\t\tnewState[key] = value;\n\t\tthis.setState(newState);\n\t};\n\n\tonDone = () => {\n\t\tconst { onClose } = this.props;\n\t\tconst { selectedStatus, selectedPriority, selectedType, selectedAssignee } =\n\t\t\tthis.state;\n\t\tif (onClose)\n\t\t\tonClose({\n\t\t\t\tstatus: selectedStatus,\n\t\t\t\tstatusText: this.getStatusOptions().find(\n\t\t\t\t\t(o) => o.value === selectedStatus,\n\t\t\t\t)?.label,\n\t\t\t\tpriority: selectedPriority,\n\t\t\t\tpriorityText: this.getPriorityOptions().find(\n\t\t\t\t\t(o) => o.value === selectedPriority,\n\t\t\t\t)?.label,\n\t\t\t\ttype: selectedType,\n\t\t\t\tassignee: selectedAssignee,\n\t\t\t\tassigneeName: this.state.assignees.find(\n\t\t\t\t\t(a) => a.value === selectedAssignee,\n\t\t\t\t)?.label,\n\t\t\t});\n\t};\n\n\trenderTitle() {\n\t\tconst { title } = this.props;\n\t\treturn (\n\t\t\t<View style={styles.titleContainer}>\n\t\t\t\t<Text style={styles.titleText}>{title || \"Filter By\"}</Text>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderCancel() {\n\t\tconst { colourBrandingMain, cancelText } = this.props;\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onDone}>\n\t\t\t\t<View style={styles.cancelContainer}>\n\t\t\t\t\t<Text style={[styles.cancelText, { color: colourBrandingMain }]}>\n\t\t\t\t\t\t{cancelText || \"Done\"}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderOptions(title, options, selectedKey) {\n\t\tconst { colourBrandingMain } = this.props;\n\t\treturn (\n\t\t\t<View style={styles.optionsContainer}>\n\t\t\t\t<Text style={styles.optionsTitle}>{title}</Text>\n\t\t\t\t<View style={styles.options}>\n\t\t\t\t\t{options.map((o) => {\n\t\t\t\t\t\tconst selected = this.state[selectedKey];\n\t\t\t\t\t\tconst backgroundColor =\n\t\t\t\t\t\t\to.value === selected ? colourBrandingMain : \"#fff\";\n\t\t\t\t\t\tconst color = o.value === selected ? \"#fff\" : colourBrandingMain;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\t\t\tkey={o.label}\n\t\t\t\t\t\t\t\tonPress={() => this.onSelectOption(selectedKey, o.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<View\n\t\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\t\tstyles.optionContainer,\n\t\t\t\t\t\t\t\t\t\t{ backgroundColor, borderColor: colourBrandingMain },\n\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Text style={[styles.optionText, { color }]}>{o.label}</Text>\n\t\t\t\t\t\t\t\t</View>\n\t\t\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</View>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trender() {\n\t\t// console.log('FilterPopupMenu', JSON.stringify({ category: this.props.user.category, permissions: this.props.user.permissions }, null, 2))\n\t\tconst isStaff = this.props.user.category === \"staff\";\n\t\tconst canFilterAssignee =\n\t\t\t_.includes(this.props.user.permissions, values.permissionMaintenanceTracking) ||\n\t\t\t_.includes(this.props.user.permissions, values.permissionMaintenanceAssignment);\n\n\t\treturn (\n\t\t\t<Modal\n\t\t\t\tvisible\n\t\t\t\ttransparent\n\t\t\t\tanimationType=\"slide\"\n\t\t\t\tonRequestClose={this.onDone}\n\t\t\t>\n\t\t\t\t<View style={styles.container}>\n\t\t\t\t\t<View style={styles.menu}>\n\t\t\t\t\t\t{this.renderTitle()}\n\t\t\t\t\t\t<ScrollView style={styles.optionContent}>\n\t\t\t\t\t\t\t{this.renderOptions(\n\t\t\t\t\t\t\t\t\"Status\",\n\t\t\t\t\t\t\t\tthis.getStatusOptions(),\n\t\t\t\t\t\t\t\t\"selectedStatus\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{isStaff\n\t\t\t\t\t\t\t\t? this.renderOptions(\n\t\t\t\t\t\t\t\t\t\t\"Priority\",\n\t\t\t\t\t\t\t\t\t\tthis.getPriorityOptions(),\n\t\t\t\t\t\t\t\t\t\t\"selectedPriority\",\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t{this.renderOptions(\"Type\", this.state.types, \"selectedType\")}\n\t\t\t\t\t\t\t{canFilterAssignee\n\t\t\t\t\t\t\t\t? this.state.loadingAssignees\n\t\t\t\t\t\t\t\t\t? this.renderOptions(\"Assigned To\", [{ label: \"Loading...\", value: \"\" }], \"selectedAssignee\")\n\t\t\t\t\t\t\t\t\t: this.renderOptions(\n\t\t\t\t\t\t\t\t\t\t\t\"Assigned To\",\n\t\t\t\t\t\t\t\t\t\t\tthis.state.assignees,\n\t\t\t\t\t\t\t\t\t\t\t\"selectedAssignee\",\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t</ScrollView>\n\t\t\t\t\t\t{this.renderCancel()}\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</Modal>\n\t\t);\n\t}\n}\n\nconst styles = {\n\tcontainer: {\n\t\tposition: \"absolute\",\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbackgroundColor: \"rgba(0,0,0,0.5)\",\n\t\tzIndex: 1000,\n\t},\n\tmenu: {\n\t\tposition: \"absolute\",\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\tbackgroundColor: \"#fff\",\n\t\tborderTopLeftRadius: 12,\n\t\tborderTopRightRadius: 12,\n\t\tmaxHeight: SCREEN_HEIGHT * 0.8,\n\t},\n\tcancelContainer: {\n\t\tpaddingVertical: 16,\n\t\tborderColor: Colours.LINEGREY,\n\t\tborderTopWidth: 1,\n\t\tpaddingHorizontal: 16,\n\t},\n\tcancelText: {\n\t\tfontFamily: \"sf-medium\",\n\t\tfontSize: 16,\n\t\ttextAlign: \"center\",\n\t\tcolor: Colours.TEXT_DARK,\n\t},\n\ttitleContainer: {\n\t\tpadding: 16,\n\t\tborderColor: Colours.LINEGREY,\n\t\tborderBottomWidth: 1,\n\t},\n\ttitleText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\ttextAlign: \"center\",\n\t\tcolor: Colours.TEXT_DARK,\n\t},\n\toptionContent: {\n\t\tpaddingVertical: 10,\n\t},\n\toptionsContainer: {\n\t\tmarginHorizontal: 14,\n\t},\n\toptionsTitle: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tmarginBottom: 4,\n\t},\n\toptions: {\n\t\tflex: 1,\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t},\n\toptionContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tminWidth: 50,\n\t\theight: 30,\n\t\tpaddingHorizontal: 8,\n\t\tborderRadius: 4,\n\t\tborderWidth: 1,\n\t\tmarginRight: 8,\n\t\tmarginBottom: 8,\n\t},\n\toptionText: {\n\t\tcolor: \"#fff\",\n\t\ttextAlign: \"center\",\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 13,\n\t},\n};\n\nconst mapStateToProps = (state) => {\n\tconst { user } = state;\n\n\treturn {\n\t\tuser,\n\t\tsite: user.site,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t};\n};\n\nexport default connect(mapStateToProps, {})(FilterPopupMenu);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,18 +15,13 @@ import { values } from "../values.config";
|
|
|
15
15
|
class MaintenanceList extends Component {
|
|
16
16
|
constructor(props) {
|
|
17
17
|
super(props);
|
|
18
|
-
_defineProperty(this, "_refreshCounter", 0);
|
|
19
18
|
_defineProperty(this, "refresh", overrideFilters => {
|
|
20
|
-
const currentCounter = ++this._refreshCounter;
|
|
21
19
|
this.onLoadingChanged(true, async () => {
|
|
22
20
|
try {
|
|
23
21
|
const jobfilters = overrideFilters || this.props.jobfilters;
|
|
24
22
|
const res = await maintenanceActions.getJobs2(this.props.site, jobfilters.status, jobfilters.priority, jobfilters.type, null,
|
|
25
23
|
// No lastKey = first page
|
|
26
24
|
jobfilters.assignee);
|
|
27
|
-
|
|
28
|
-
// Discard stale responses from earlier filter changes
|
|
29
|
-
if (currentCounter !== this._refreshCounter) return;
|
|
30
25
|
const jobs = res.data.Items;
|
|
31
26
|
const lastKey = res.data.LastKey;
|
|
32
27
|
|
|
@@ -37,12 +32,9 @@ class MaintenanceList extends Component {
|
|
|
37
32
|
hasMore: !!lastKey
|
|
38
33
|
});
|
|
39
34
|
} catch (error) {
|
|
40
|
-
if (currentCounter !== this._refreshCounter) return;
|
|
41
35
|
console.log("refresh error", error);
|
|
42
36
|
} finally {
|
|
43
|
-
|
|
44
|
-
this.onLoadingChanged(false);
|
|
45
|
-
}
|
|
37
|
+
this.onLoadingChanged(false);
|
|
46
38
|
}
|
|
47
39
|
});
|
|
48
40
|
});
|
|
@@ -148,8 +140,6 @@ class MaintenanceList extends Component {
|
|
|
148
140
|
}
|
|
149
141
|
filteredList.unshift(jobIdMatch);
|
|
150
142
|
}
|
|
151
|
-
// Only refresh on initial load, not on filter changes (pagination handles data)
|
|
152
|
-
if (source !== "search" && source !== "filter") this.refresh();
|
|
153
143
|
this.setState({
|
|
154
144
|
filteredList
|
|
155
145
|
});
|
|
@@ -211,18 +201,6 @@ class MaintenanceList extends Component {
|
|
|
211
201
|
}
|
|
212
202
|
return `Filtering by ${filterTexts.join(", ")}`;
|
|
213
203
|
});
|
|
214
|
-
_defineProperty(this, "clearFilters", () => {
|
|
215
|
-
const emptyFilters = {
|
|
216
|
-
status: "",
|
|
217
|
-
statusText: "",
|
|
218
|
-
priority: "",
|
|
219
|
-
priorityText: "",
|
|
220
|
-
type: "",
|
|
221
|
-
assignee: "",
|
|
222
|
-
assigneeName: ""
|
|
223
|
-
};
|
|
224
|
-
this.onSelectFilter(emptyFilters);
|
|
225
|
-
});
|
|
226
204
|
_defineProperty(this, "renderListFooter", () => {
|
|
227
205
|
if (!this.state.loadingMore) return null;
|
|
228
206
|
return /*#__PURE__*/React.createElement(View, {
|
|
@@ -259,30 +237,13 @@ class MaintenanceList extends Component {
|
|
|
259
237
|
}
|
|
260
238
|
return this.props.userCategory === "staff" ? values.emptyRequestsStaff : values.emptyRequestsUser;
|
|
261
239
|
}
|
|
262
|
-
hasFiltersActive() {
|
|
263
|
-
const {
|
|
264
|
-
jobfilters
|
|
265
|
-
} = this.props;
|
|
266
|
-
return !_.isEmpty(jobfilters.status) || !_.isEmpty(jobfilters.priority) || !_.isEmpty(jobfilters.type) || !_.isEmpty(jobfilters.assignee);
|
|
267
|
-
}
|
|
268
240
|
renderEmptyList() {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
return /*#__PURE__*/React.createElement(View, {
|
|
241
|
+
return this.state.loading ? null : /*#__PURE__*/React.createElement(Components.EmptyStateMain, {
|
|
242
|
+
title: this.getEmptyStateText(),
|
|
272
243
|
style: {
|
|
273
|
-
marginHorizontal: 16
|
|
274
|
-
alignItems: "center"
|
|
244
|
+
marginHorizontal: 16
|
|
275
245
|
}
|
|
276
|
-
}
|
|
277
|
-
title: hasFilters ? "No requests match your filters" : this.getEmptyStateText()
|
|
278
|
-
}), hasFilters && /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
279
|
-
onPress: this.clearFilters,
|
|
280
|
-
style: styles.clearFiltersButton
|
|
281
|
-
}, /*#__PURE__*/React.createElement(Text, {
|
|
282
|
-
style: [styles.clearFiltersText, {
|
|
283
|
-
color: this.props.colourBrandingMain
|
|
284
|
-
}]
|
|
285
|
-
}, "Clear filters")));
|
|
246
|
+
});
|
|
286
247
|
}
|
|
287
248
|
renderFilterButton() {
|
|
288
249
|
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
@@ -421,19 +382,6 @@ const styles = StyleSheet.create({
|
|
|
421
382
|
loadingMore: {
|
|
422
383
|
paddingVertical: 20,
|
|
423
384
|
alignItems: "center"
|
|
424
|
-
},
|
|
425
|
-
clearFiltersButton: {
|
|
426
|
-
marginTop: 12,
|
|
427
|
-
paddingVertical: 10,
|
|
428
|
-
paddingHorizontal: 24,
|
|
429
|
-
borderRadius: 8,
|
|
430
|
-
borderWidth: 1,
|
|
431
|
-
borderColor: "#ccc",
|
|
432
|
-
backgroundColor: "#f9f9f9"
|
|
433
|
-
},
|
|
434
|
-
clearFiltersText: {
|
|
435
|
-
fontFamily: "sf-semibold",
|
|
436
|
-
fontSize: 15
|
|
437
385
|
}
|
|
438
386
|
});
|
|
439
387
|
const mapStateToProps = state => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Text","View","StyleSheet","FlatList","TouchableOpacity","_","connect","maintenanceActions","jobsLoaded","jobAdded","jobsAdded","jobStatusesUpdate","jobHideSeenUpdate","jobsFilterLoaded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Helper","values","MaintenanceList","constructor","props","_defineProperty","overrideFilters","currentCounter","_refreshCounter","onLoadingChanged","jobfilters","res","getJobs2","site","status","priority","type","assignee","jobs","data","Items","lastKey","LastKey","setState","hasMore","error","console","log","loading","loadingMore","searchText","state","newJobs","newLastKey","getJobTypes","getSite","types","map","t","label","typeName","value","splice","jobId","job","getJobByJobId","source","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","jobIndex","unshift","refresh","callback","isEmpty","resetDataSource","showFilterPopup","selected","onToggleFilter","filterTexts","push","statusText","priorityText","assigneeName","join","emptyFilters","onSelectFilter","createElement","style","styles","LoadingIndicator","visible","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","emptyRequestsStaff","emptyRequestsUser","hasFiltersActive","renderEmptyList","hasFilters","marginHorizontal","alignItems","EmptyStateMain","title","onPress","clearFilters","clearFiltersButton","clearFiltersText","color","colourBrandingMain","renderFilterButton","filterButton","filterButtonText","getFilterButtonText","renderSearch","hasPermission","searchContainer","GenericInput","placeholder","textEntityName","onChangeText","onSearchText","onSubmitEditing","onSearchSubmit","squaredCorners","hasClear","returnKeyType","renderListHeader","ListHeaderComponent","height","renderList","keyboardShouldPersistTaps","flex","contentContainerStyle","paddingBottom","keyExtractor","item","id","renderItem","itemStyle","ListEmptyComponent","ListFooterComponent","renderListFooter","onEndReached","loadMore","onEndReachedThreshold","renderFilterPopup","onClose","render","container","create","backgroundColor","filterContainerOuter","flexDirection","justifyContent","paddingHorizontal","paddingVertical","filterTitle","fontFamily","fontSize","letterSpacing","filterContainer","filterText","marginRight","filterIcon","marginTop","borderRadius","borderWidth","borderColor","mapStateToProps","user","notifications","reducerKey","jobsOrdered","orderBy","includes","permissions","category","getMainBrandingColourFromState","updateKey","statusTypes","jobstatuses","forwardRef"],"sources":["MaintenanceList.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { View, StyleSheet, FlatList, TouchableOpacity } from \"react-native\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport { maintenanceActions } from \"../apis\";\nimport {\n\tjobsLoaded,\n\tjobAdded,\n\tjobsAdded,\n\tjobStatusesUpdate,\n\tjobHideSeenUpdate,\n\tjobsFilterLoaded,\n} from \"../actions\";\nimport MaintenanceListItem from \"../components/MaintenanceListItem\";\nimport FilterPopupMenu from \"./FilterPopupMenu\";\nimport { Components, Colours, Helper } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nclass MaintenanceList extends Component {\n\t_refreshCounter = 0;\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: [],\n\t\t\tfilteredList: props.jobs,\n\t\t\tloading: false,\n\t\t\tloadingMore: false,\n\t\t\thasMore: true,\n\t\t\tlastKey: null,\n\t\t\tsearchText: \"\",\n\t\t\tshowFilterPopup: false,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t\tthis.refreshTypes();\n\t\tthis.resetDataSource();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t\tif (\n\t\t\t!_.isEqual(prevProps.jobs, this.props.jobs) ||\n\t\t\t!_.isEqual(prevProps.jobfilters, this.props.jobfilters)\n\t\t)\n\t\t\tthis.resetDataSource();\n\t}\n\n\trefresh = (overrideFilters) => {\n\t\tconst currentCounter = ++this._refreshCounter;\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst jobfilters = overrideFilters || this.props.jobfilters;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tnull, // No lastKey = first page\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\t// Discard stale responses from earlier filter changes\n\t\t\t\tif (currentCounter !== this._refreshCounter) return;\n\n\t\t\t\tconst jobs = res.data.Items;\n\t\t\t\tconst lastKey = res.data.LastKey;\n\n\t\t\t\t// Always replace jobs on refresh (filters are server-side)\n\t\t\t\tthis.props.jobsLoaded(jobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey,\n\t\t\t\t\thasMore: !!lastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (currentCounter !== this._refreshCounter) return;\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tif (currentCounter === this._refreshCounter) {\n\t\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tloadMore = () => {\n\t\tconst { loading, loadingMore, hasMore, lastKey, searchText } = this.state;\n\n\t\t// Don't load if already loading, no more pages, or during search\n\t\tif (loading || loadingMore || !hasMore || !lastKey || searchText) return;\n\n\t\tthis.setState({ loadingMore: true }, async () => {\n\t\t\ttry {\n\t\t\t\tconst { jobfilters } = this.props;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tlastKey,\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\tconst newJobs = res.data.Items;\n\t\t\t\tconst newLastKey = res.data.LastKey;\n\n\t\t\t\t// Append to existing jobs\n\t\t\t\tthis.props.jobsAdded(newJobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey: newLastKey,\n\t\t\t\t\thasMore: !!newLastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"loadMore error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.setState({ loadingMore: false });\n\t\t\t}\n\t\t});\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tfetchJob = (jobId) => {\n\t\tif (this.state.loading) return;\n\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst job = await maintenanceActions.getJobByJobId(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobId,\n\t\t\t\t);\n\t\t\t\t// console.log('fetchJob', job?.data);\n\t\t\t\tthis.props.jobAdded(job.data);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"fetchJob error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tgetEmptyStateText() {\n\t\tif (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {\n\t\t\treturn this.props.options.EmptyText;\n\t\t}\n\t\treturn this.props.userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t}\n\n\tresetDataSource = (source = \"\") => {\n\t\tconst { searchText } = this.state;\n\t\tconst { jobs } = this.props;\n\n\t\tlet filteredList = jobs;\n\t\tlet jobIdMatch = null;\n\n\t\t// Client-side search filtering (search is not supported server-side)\n\t\tif (searchText) {\n\t\t\tjobIdMatch = _.find(jobs, (j) => j.jobId === searchText);\n\t\t\tfilteredList = jobs.filter((j) => {\n\t\t\t\tif (\n\t\t\t\t\tj.room &&\n\t\t\t\t\tj.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tif (!jobIdMatch) this.fetchJob(searchText);\n\t\t}\n\n\t\t// Note: status, priority, type, and assignee filters are applied server-side\n\t\t// via getJobs2, so no client-side filtering needed for those\n\n\t\tif (jobIdMatch) {\n\t\t\tconst jobIndex = filteredList.indexOf(jobIdMatch);\n\t\t\tif (jobIndex > -1) {\n\t\t\t\tfilteredList.splice(jobIndex, 1);\n\t\t\t}\n\t\t\tfilteredList.unshift(jobIdMatch);\n\t\t}\n\t\t// Only refresh on initial load, not on filter changes (pagination handles data)\n\t\tif (source !== \"search\" && source !== \"filter\") this.refresh();\n\n\t\tthis.setState({ filteredList });\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonSearchText = (value) => {\n\t\tthis.setState({ searchText: value }, () => {\n\t\t\tif (_.isEmpty(this.state.searchText)) this.resetDataSource(\"search\");\n\t\t});\n\t};\n\n\tonSearchSubmit = () => {\n\t\tthis.resetDataSource(\"search\");\n\t};\n\n\tonToggleFilter = () => {\n\t\tthis.setState({ showFilterPopup: !this.state.showFilterPopup });\n\t};\n\n\tonSelectFilter = (selected) => {\n\t\tthis.props.jobsFilterLoaded(selected);\n\t\tthis.onToggleFilter();\n\t\t// Reset pagination but keep old list visible while loading\n\t\t// Pass filters directly to avoid stale props from async Redux update\n\t\tthis.setState({ lastKey: null, hasMore: true }, () => {\n\t\t\tthis.refresh(selected);\n\t\t});\n\t};\n\n\tgetFilterButtonText = () => {\n\t\tconst { jobfilters } = this.props;\n\t\tconst filterTexts = [];\n\t\tif (!_.isEmpty(jobfilters.status)) {\n\t\t\tfilterTexts.push(jobfilters.statusText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.priority)) {\n\t\t\tfilterTexts.push(jobfilters.priorityText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.type)) {\n\t\t\tfilterTexts.push(jobfilters.type);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.assignee)) {\n\t\t\tfilterTexts.push(jobfilters.assigneeName);\n\t\t}\n\t\tif (_.isEmpty(filterTexts)) {\n\t\t\treturn \"Filter\";\n\t\t}\n\t\treturn `Filtering by ${filterTexts.join(\", \")}`;\n\t};\n\n\thasFiltersActive() {\n\t\tconst { jobfilters } = this.props;\n\t\treturn (\n\t\t\t!_.isEmpty(jobfilters.status) ||\n\t\t\t!_.isEmpty(jobfilters.priority) ||\n\t\t\t!_.isEmpty(jobfilters.type) ||\n\t\t\t!_.isEmpty(jobfilters.assignee)\n\t\t);\n\t}\n\n\tclearFilters = () => {\n\t\tconst emptyFilters = {\n\t\t\tstatus: \"\",\n\t\t\tstatusText: \"\",\n\t\t\tpriority: \"\",\n\t\t\tpriorityText: \"\",\n\t\t\ttype: \"\",\n\t\t\tassignee: \"\",\n\t\t\tassigneeName: \"\",\n\t\t};\n\t\tthis.onSelectFilter(emptyFilters);\n\t};\n\n\trenderEmptyList() {\n\t\tif (this.state.loading) return null;\n\n\t\tconst hasFilters = this.hasFiltersActive();\n\n\t\treturn (\n\t\t\t<View style={{ marginHorizontal: 16, alignItems: \"center\" }}>\n\t\t\t\t<Components.EmptyStateMain\n\t\t\t\t\ttitle={\n\t\t\t\t\t\thasFilters\n\t\t\t\t\t\t\t? \"No requests match your filters\"\n\t\t\t\t\t\t\t: this.getEmptyStateText()\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t{hasFilters && (\n\t\t\t\t\t<TouchableOpacity\n\t\t\t\t\t\tonPress={this.clearFilters}\n\t\t\t\t\t\tstyle={styles.clearFiltersButton}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\tstyles.clearFiltersText,\n\t\t\t\t\t\t\t\t{ color: this.props.colourBrandingMain },\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tClear filters\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</TouchableOpacity>\n\t\t\t\t)}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderFilterButton() {\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onToggleFilter}>\n\t\t\t\t<View style={styles.filterButton}>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\tstyles.filterButtonText,\n\t\t\t\t\t\t\t{ color: this.props.colourBrandingMain },\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{this.getFilterButtonText()}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderSearch() {\n\t\tif (!this.props.hasPermission) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.searchContainer}>\n\t\t\t\t<Components.GenericInput\n\t\t\t\t\tplaceholder={`Search by ${values.textEntityName} ID or Address`}\n\t\t\t\t\tvalue={this.state.searchText}\n\t\t\t\t\tonChangeText={this.onSearchText}\n\t\t\t\t\tonSubmitEditing={this.onSearchSubmit}\n\t\t\t\t\tsquaredCorners\n\t\t\t\t\thasClear\n\t\t\t\t\t// keyboardType={'numeric'}\n\t\t\t\t\treturnKeyType={\"done\"}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderListHeader() {\n\t\tconst { ListHeaderComponent } = this.props;\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t{ListHeaderComponent ? (\n\t\t\t\t\tListHeaderComponent\n\t\t\t\t) : (\n\t\t\t\t\t<View style={{ height: 8 }} />\n\t\t\t\t)}\n\t\t\t\t{this.renderFilterButton()}\n\t\t\t\t{this.renderSearch()}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderList() {\n\t\tconst { filteredList } = this.state;\n\n\t\treturn (\n\t\t\t<FlatList\n\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\tcontentContainerStyle={{ paddingBottom: 16 }}\n\t\t\t\tdata={filteredList}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={({ item }) => (\n\t\t\t\t\t<MaintenanceListItem style={this.props.itemStyle} job={item} />\n\t\t\t\t)}\n\t\t\t\tListEmptyComponent={this.renderEmptyList()}\n\t\t\t\tListHeaderComponent={this.renderListHeader()}\n\t\t\t\tListFooterComponent={this.renderListFooter()}\n\t\t\t\tonEndReached={this.loadMore}\n\t\t\t\tonEndReachedThreshold={0.5}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderListFooter = () => {\n\t\tif (!this.state.loadingMore) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.loadingMore}>\n\t\t\t\t<Components.LoadingIndicator visible={true} />\n\t\t\t</View>\n\t\t);\n\t};\n\n\trenderFilterPopup() {\n\t\tconst { jobfilters } = this.props;\n\t\tconst { showFilterPopup, types } = this.state;\n\t\tif (!showFilterPopup) return null;\n\n\t\treturn (\n\t\t\t<FilterPopupMenu\n\t\t\t\tsite={this.props.site}\n\t\t\t\ttypes={types}\n\t\t\t\tstatus={jobfilters.status}\n\t\t\t\tpriority={jobfilters.priority}\n\t\t\t\tassignee={jobfilters.assignee}\n\t\t\t\ttype={jobfilters.type}\n\t\t\t\tonClose={this.onSelectFilter}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={[styles.container, this.props.style]}>\n\t\t\t\t{this.renderList()}\n\t\t\t\t{this.renderFilterPopup()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tfilterContainerOuter: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 16,\n\t},\n\tfilterTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 11,\n\t\tletterSpacing: 0.8,\n\t\tcolor: \"#4d4d4d\",\n\t},\n\tfilterContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tfilterText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tmarginRight: 6,\n\t},\n\tfilterIcon: {\n\t\tfontSize: 20,\n\t},\n\tsearchContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t},\n\tfilterButton: {\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t\tflexDirection: \"row-reverse\",\n\t},\n\tfilterButtonText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t},\n\tloadingMore: {\n\t\tpaddingVertical: 20,\n\t\talignItems: \"center\",\n\t},\n\tclearFiltersButton: {\n\t\tmarginTop: 12,\n\t\tpaddingVertical: 10,\n\t\tpaddingHorizontal: 24,\n\t\tborderRadius: 8,\n\t\tborderWidth: 1,\n\t\tborderColor: \"#ccc\",\n\t\tbackgroundColor: \"#f9f9f9\",\n\t},\n\tclearFiltersText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 15,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\tconst jobsOrdered = _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]);\n\tconst hasPermission = _.includes(user.permissions, \"maintenanceTracking\");\n\n\treturn {\n\t\thasPermission,\n\t\tjobs: jobsOrdered,\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t\tjobfilters: state[values.reducerKey].jobfilters || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{\n\t\tjobsLoaded,\n\t\tjobAdded,\n\t\tjobsAdded,\n\t\tjobStatusesUpdate,\n\t\tjobHideSeenUpdate,\n\t\tjobsFilterLoaded,\n\t},\n\tnull,\n\t{\n\t\tforwardRef: true,\n\t},\n)(MaintenanceList);\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,IAAI,QAAQ,6CAA6C;AAClE,SAASC,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,gBAAgB,QAAQ,cAAc;AAC3E,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,OAAO,QAAQ,aAAa;AACrC,SAASC,kBAAkB,QAAQ,SAAS;AAC5C,SACCC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,iBAAiB,EACjBC,iBAAiB,EACjBC,gBAAgB,QACV,YAAY;AACnB,OAAOC,mBAAmB,MAAM,mCAAmC;AACnE,OAAOC,eAAe,MAAM,mBAAmB;AAC/C,SAASC,UAAU,EAAEC,OAAO,EAAEC,MAAM,QAAQ,gBAAgB;AAC5D,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,MAAMC,eAAe,SAASrB,SAAS,CAAC;EAGvCsB,WAAWA,CAACC,KAAK,EAAE;IAClB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,0BAHI,CAAC;IAAAA,eAAA,kBAkCRC,eAAe,IAAK;MAC9B,MAAMC,cAAc,GAAG,EAAE,IAAI,CAACC,eAAe;MAC7C,IAAI,CAACC,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACvC,IAAI;UACH,MAAMC,UAAU,GAAGJ,eAAe,IAAI,IAAI,CAACF,KAAK,CAACM,UAAU;UAC3D,MAAMC,GAAG,GAAG,MAAMtB,kBAAkB,CAACuB,QAAQ,CAC5C,IAAI,CAACR,KAAK,CAACS,IAAI,EACfH,UAAU,CAACI,MAAM,EACjBJ,UAAU,CAACK,QAAQ,EACnBL,UAAU,CAACM,IAAI,EACf,IAAI;UAAE;UACNN,UAAU,CAACO,QACZ,CAAC;;UAED;UACA,IAAIV,cAAc,KAAK,IAAI,CAACC,eAAe,EAAE;UAE7C,MAAMU,IAAI,GAAGP,GAAG,CAACQ,IAAI,CAACC,KAAK;UAC3B,MAAMC,OAAO,GAAGV,GAAG,CAACQ,IAAI,CAACG,OAAO;;UAEhC;UACA,IAAI,CAAClB,KAAK,CAACd,UAAU,CAAC4B,IAAI,CAAC;UAE3B,IAAI,CAACK,QAAQ,CAAC;YACbF,OAAO;YACPG,OAAO,EAAE,CAAC,CAACH;UACZ,CAAC,CAAC;QACH,CAAC,CAAC,OAAOI,KAAK,EAAE;UACf,IAAIlB,cAAc,KAAK,IAAI,CAACC,eAAe,EAAE;UAC7CkB,OAAO,CAACC,GAAG,CAAC,eAAe,EAAEF,KAAK,CAAC;QACpC,CAAC,SAAS;UACT,IAAIlB,cAAc,KAAK,IAAI,CAACC,eAAe,EAAE;YAC5C,IAAI,CAACC,gBAAgB,CAAC,KAAK,CAAC;UAC7B;QACD;MACD,CAAC,CAAC;IACH,CAAC;IAAAJ,eAAA,mBAEU,MAAM;MAChB,MAAM;QAAEuB,OAAO;QAAEC,WAAW;QAAEL,OAAO;QAAEH,OAAO;QAAES;MAAW,CAAC,GAAG,IAAI,CAACC,KAAK;;MAEzE;MACA,IAAIH,OAAO,IAAIC,WAAW,IAAI,CAACL,OAAO,IAAI,CAACH,OAAO,IAAIS,UAAU,EAAE;MAElE,IAAI,CAACP,QAAQ,CAAC;QAAEM,WAAW,EAAE;MAAK,CAAC,EAAE,YAAY;QAChD,IAAI;UACH,MAAM;YAAEnB;UAAW,CAAC,GAAG,IAAI,CAACN,KAAK;UACjC,MAAMO,GAAG,GAAG,MAAMtB,kBAAkB,CAACuB,QAAQ,CAC5C,IAAI,CAACR,KAAK,CAACS,IAAI,EACfH,UAAU,CAACI,MAAM,EACjBJ,UAAU,CAACK,QAAQ,EACnBL,UAAU,CAACM,IAAI,EACfK,OAAO,EACPX,UAAU,CAACO,QACZ,CAAC;UAED,MAAMe,OAAO,GAAGrB,GAAG,CAACQ,IAAI,CAACC,KAAK;UAC9B,MAAMa,UAAU,GAAGtB,GAAG,CAACQ,IAAI,CAACG,OAAO;;UAEnC;UACA,IAAI,CAAClB,KAAK,CAACZ,SAAS,CAACwC,OAAO,CAAC;UAE7B,IAAI,CAACT,QAAQ,CAAC;YACbF,OAAO,EAAEY,UAAU;YACnBT,OAAO,EAAE,CAAC,CAACS;UACZ,CAAC,CAAC;QACH,CAAC,CAAC,OAAOR,KAAK,EAAE;UACfC,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEF,KAAK,CAAC;QACrC,CAAC,SAAS;UACT,IAAI,CAACF,QAAQ,CAAC;YAAEM,WAAW,EAAE;UAAM,CAAC,CAAC;QACtC;MACD,CAAC,CAAC;IACH,CAAC;IAAAxB,eAAA,uBAEc,YAAY;MAC1B,MAAM;QAAEc;MAAK,CAAC,GAAG,MAAM9B,kBAAkB,CAAC6C,WAAW,CACpDlC,MAAM,CAACmC,OAAO,CAAC,IAAI,CAAC/B,KAAK,CAACS,IAAI,CAC/B,CAAC;MACD,MAAMuB,KAAK,GAAGjB,IAAI,CAACkB,GAAG,CAAEC,CAAC,IAAK;QAC7B,OAAO;UAAEC,KAAK,EAAED,CAAC,CAACE,QAAQ;UAAEC,KAAK,EAAEH,CAAC,CAACE;QAAS,CAAC;MAChD,CAAC,CAAC;MACFJ,KAAK,CAACM,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;QAAEH,KAAK,EAAE,KAAK;QAAEE,KAAK,EAAE;MAAG,CAAC,CAAC;MAC/C;MACA,IAAI,CAAClB,QAAQ,CAAC;QAAEa;MAAM,CAAC,CAAC;IACzB,CAAC;IAAA/B,eAAA,mBAEWsC,KAAK,IAAK;MACrB,IAAI,IAAI,CAACZ,KAAK,CAACH,OAAO,EAAE;MAExB,IAAI,CAACnB,gBAAgB,CAAC,IAAI,EAAE,YAAY;QACvC,IAAI;UACH,MAAMmC,GAAG,GAAG,MAAMvD,kBAAkB,CAACwD,aAAa,CACjD,IAAI,CAACzC,KAAK,CAACS,IAAI,EACf8B,KACD,CAAC;UACD;UACA,IAAI,CAACvC,KAAK,CAACb,QAAQ,CAACqD,GAAG,CAACzB,IAAI,CAAC;QAC9B,CAAC,CAAC,OAAOM,KAAK,EAAE;UACfC,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEF,KAAK,CAAC;QACrC,CAAC,SAAS;UACT,IAAI,CAAChB,gBAAgB,CAAC,KAAK,CAAC;QAC7B;MACD,CAAC,CAAC;IACH,CAAC;IAAAJ,eAAA,0BAWiB,CAACyC,MAAM,GAAG,EAAE,KAAK;MAClC,MAAM;QAAEhB;MAAW,CAAC,GAAG,IAAI,CAACC,KAAK;MACjC,MAAM;QAAEb;MAAK,CAAC,GAAG,IAAI,CAACd,KAAK;MAE3B,IAAI2C,YAAY,GAAG7B,IAAI;MACvB,IAAI8B,UAAU,GAAG,IAAI;;MAErB;MACA,IAAIlB,UAAU,EAAE;QACfkB,UAAU,GAAG7D,CAAC,CAAC8D,IAAI,CAAC/B,IAAI,EAAGgC,CAAC,IAAKA,CAAC,CAACP,KAAK,KAAKb,UAAU,CAAC;QACxDiB,YAAY,GAAG7B,IAAI,CAACiC,MAAM,CAAED,CAAC,IAAK;UACjC,IACCA,CAAC,CAACE,IAAI,IACNF,CAAC,CAACE,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,OAAO,CAACxB,UAAU,CAACuB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAC1D;YACD,OAAO,IAAI;UACZ;UACA,OAAO,KAAK;QACb,CAAC,CAAC;QACF,IAAI,CAACL,UAAU,EAAE,IAAI,CAACO,QAAQ,CAACzB,UAAU,CAAC;MAC3C;;MAEA;MACA;;MAEA,IAAIkB,UAAU,EAAE;QACf,MAAMQ,QAAQ,GAAGT,YAAY,CAACO,OAAO,CAACN,UAAU,CAAC;QACjD,IAAIQ,QAAQ,GAAG,CAAC,CAAC,EAAE;UAClBT,YAAY,CAACL,MAAM,CAACc,QAAQ,EAAE,CAAC,CAAC;QACjC;QACAT,YAAY,CAACU,OAAO,CAACT,UAAU,CAAC;MACjC;MACA;MACA,IAAIF,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,QAAQ,EAAE,IAAI,CAACY,OAAO,CAAC,CAAC;MAE9D,IAAI,CAACnC,QAAQ,CAAC;QAAEwB;MAAa,CAAC,CAAC;IAChC,CAAC;IAAA1C,eAAA,2BAEkB,CAACuB,OAAO,EAAE+B,QAAQ,KAAK;MACzC,IAAI,CAACpC,QAAQ,CAAC;QAAEK;MAAQ,CAAC,EAAE,MAAM;QAChC,IAAI,IAAI,CAACxB,KAAK,CAACK,gBAAgB,EAC9B,IAAI,CAACL,KAAK,CAACK,gBAAgB,CAAC,IAAI,CAACsB,KAAK,CAACH,OAAO,CAAC;QAChD,IAAI+B,QAAQ,EAAEA,QAAQ,CAAC,CAAC;MACzB,CAAC,CAAC;IACH,CAAC;IAAAtD,eAAA,uBAEeoC,KAAK,IAAK;MACzB,IAAI,CAAClB,QAAQ,CAAC;QAAEO,UAAU,EAAEW;MAAM,CAAC,EAAE,MAAM;QAC1C,IAAItD,CAAC,CAACyE,OAAO,CAAC,IAAI,CAAC7B,KAAK,CAACD,UAAU,CAAC,EAAE,IAAI,CAAC+B,eAAe,CAAC,QAAQ,CAAC;MACrE,CAAC,CAAC;IACH,CAAC;IAAAxD,eAAA,yBAEgB,MAAM;MACtB,IAAI,CAACwD,eAAe,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAAAxD,eAAA,yBAEgB,MAAM;MACtB,IAAI,CAACkB,QAAQ,CAAC;QAAEuC,eAAe,EAAE,CAAC,IAAI,CAAC/B,KAAK,CAAC+B;MAAgB,CAAC,CAAC;IAChE,CAAC;IAAAzD,eAAA,yBAEiB0D,QAAQ,IAAK;MAC9B,IAAI,CAAC3D,KAAK,CAACT,gBAAgB,CAACoE,QAAQ,CAAC;MACrC,IAAI,CAACC,cAAc,CAAC,CAAC;MACrB;MACA;MACA,IAAI,CAACzC,QAAQ,CAAC;QAAEF,OAAO,EAAE,IAAI;QAAEG,OAAO,EAAE;MAAK,CAAC,EAAE,MAAM;QACrD,IAAI,CAACkC,OAAO,CAACK,QAAQ,CAAC;MACvB,CAAC,CAAC;IACH,CAAC;IAAA1D,eAAA,8BAEqB,MAAM;MAC3B,MAAM;QAAEK;MAAW,CAAC,GAAG,IAAI,CAACN,KAAK;MACjC,MAAM6D,WAAW,GAAG,EAAE;MACtB,IAAI,CAAC9E,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACI,MAAM,CAAC,EAAE;QAClCmD,WAAW,CAACC,IAAI,CAACxD,UAAU,CAACyD,UAAU,CAAC;MACxC;MACA,IAAI,CAAChF,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACK,QAAQ,CAAC,EAAE;QACpCkD,WAAW,CAACC,IAAI,CAACxD,UAAU,CAAC0D,YAAY,CAAC;MAC1C;MACA,IAAI,CAACjF,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACM,IAAI,CAAC,EAAE;QAChCiD,WAAW,CAACC,IAAI,CAACxD,UAAU,CAACM,IAAI,CAAC;MAClC;MACA,IAAI,CAAC7B,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACO,QAAQ,CAAC,EAAE;QACpCgD,WAAW,CAACC,IAAI,CAACxD,UAAU,CAAC2D,YAAY,CAAC;MAC1C;MACA,IAAIlF,CAAC,CAACyE,OAAO,CAACK,WAAW,CAAC,EAAE;QAC3B,OAAO,QAAQ;MAChB;MACA,OAAO,gBAAgBA,WAAW,CAACK,IAAI,CAAC,IAAI,CAAC,EAAE;IAChD,CAAC;IAAAjE,eAAA,uBAYc,MAAM;MACpB,MAAMkE,YAAY,GAAG;QACpBzD,MAAM,EAAE,EAAE;QACVqD,UAAU,EAAE,EAAE;QACdpD,QAAQ,EAAE,EAAE;QACZqD,YAAY,EAAE,EAAE;QAChBpD,IAAI,EAAE,EAAE;QACRC,QAAQ,EAAE,EAAE;QACZoD,YAAY,EAAE;MACf,CAAC;MACD,IAAI,CAACG,cAAc,CAACD,YAAY,CAAC;IAClC,CAAC;IAAAlE,eAAA,2BA4GkB,MAAM;MACxB,IAAI,CAAC,IAAI,CAAC0B,KAAK,CAACF,WAAW,EAAE,OAAO,IAAI;MAExC,oBACCjD,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;QAAC2F,KAAK,EAAEC,MAAM,CAAC9C;MAAY,gBAC/BjD,KAAA,CAAA6F,aAAA,CAAC3E,UAAU,CAAC8E,gBAAgB;QAACC,OAAO,EAAE;MAAK,CAAE,CACxC,CAAC;IAET,CAAC;IAnXA,IAAI,CAAC9C,KAAK,GAAG;MACZK,KAAK,EAAE,EAAE;MACTW,YAAY,EAAE3C,KAAK,CAACc,IAAI;MACxBU,OAAO,EAAE,KAAK;MACdC,WAAW,EAAE,KAAK;MAClBL,OAAO,EAAE,IAAI;MACbH,OAAO,EAAE,IAAI;MACbS,UAAU,EAAE,EAAE;MACdgC,eAAe,EAAE;IAClB,CAAC;EACF;EAEAgB,iBAAiBA,CAAA,EAAG;IACnB,IAAI,CAAC1E,KAAK,CAACX,iBAAiB,CAAC,IAAI,CAACW,KAAK,CAACS,IAAI,CAAC;IAC7C,IAAI,CAACT,KAAK,CAACV,iBAAiB,CAAC,IAAI,CAACU,KAAK,CAACS,IAAI,CAAC;IAC7C,IAAI,CAAC6C,OAAO,CAAC,CAAC;IACd,IAAI,CAACqB,YAAY,CAAC,CAAC;IACnB,IAAI,CAAClB,eAAe,CAAC,CAAC;EACvB;EAEAmB,kBAAkBA,CAACC,SAAS,EAAE;IAC7B,IAAI,CAACA,SAAS,CAACC,WAAW,IAAI,IAAI,CAAC9E,KAAK,CAAC8E,WAAW,EAAE,IAAI,CAACxB,OAAO,CAAC,CAAC;IACpE,IACC,CAACvE,CAAC,CAACgG,OAAO,CAACF,SAAS,CAAC/D,IAAI,EAAE,IAAI,CAACd,KAAK,CAACc,IAAI,CAAC,IAC3C,CAAC/B,CAAC,CAACgG,OAAO,CAACF,SAAS,CAACvE,UAAU,EAAE,IAAI,CAACN,KAAK,CAACM,UAAU,CAAC,EAEvD,IAAI,CAACmD,eAAe,CAAC,CAAC;EACxB;EA2GAuB,iBAAiBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAAChF,KAAK,CAACiF,OAAO,IAAI,CAAClG,CAAC,CAACyE,OAAO,CAAC,IAAI,CAACxD,KAAK,CAACiF,OAAO,CAACC,SAAS,CAAC,EAAE;MACnE,OAAO,IAAI,CAAClF,KAAK,CAACiF,OAAO,CAACC,SAAS;IACpC;IACA,OAAO,IAAI,CAAClF,KAAK,CAACmF,YAAY,KAAK,OAAO,GACvCtF,MAAM,CAACuF,kBAAkB,GACzBvF,MAAM,CAACwF,iBAAiB;EAC5B;EA6FAC,gBAAgBA,CAAA,EAAG;IAClB,MAAM;MAAEhF;IAAW,CAAC,GAAG,IAAI,CAACN,KAAK;IACjC,OACC,CAACjB,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACI,MAAM,CAAC,IAC7B,CAAC3B,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACK,QAAQ,CAAC,IAC/B,CAAC5B,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACM,IAAI,CAAC,IAC3B,CAAC7B,CAAC,CAACyE,OAAO,CAAClD,UAAU,CAACO,QAAQ,CAAC;EAEjC;EAeA0E,eAAeA,CAAA,EAAG;IACjB,IAAI,IAAI,CAAC5D,KAAK,CAACH,OAAO,EAAE,OAAO,IAAI;IAEnC,MAAMgE,UAAU,GAAG,IAAI,CAACF,gBAAgB,CAAC,CAAC;IAE1C,oBACC9G,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;MAAC2F,KAAK,EAAE;QAAEmB,gBAAgB,EAAE,EAAE;QAAEC,UAAU,EAAE;MAAS;IAAE,gBAC3DlH,KAAA,CAAA6F,aAAA,CAAC3E,UAAU,CAACiG,cAAc;MACzBC,KAAK,EACJJ,UAAU,GACP,gCAAgC,GAChC,IAAI,CAACR,iBAAiB,CAAC;IAC1B,CACD,CAAC,EACDQ,UAAU,iBACVhH,KAAA,CAAA6F,aAAA,CAACvF,gBAAgB;MAChB+G,OAAO,EAAE,IAAI,CAACC,YAAa;MAC3BxB,KAAK,EAAEC,MAAM,CAACwB;IAAmB,gBAEjCvH,KAAA,CAAA6F,aAAA,CAAC3F,IAAI;MACJ4F,KAAK,EAAE,CACNC,MAAM,CAACyB,gBAAgB,EACvB;QAAEC,KAAK,EAAE,IAAI,CAACjG,KAAK,CAACkG;MAAmB,CAAC;IACvC,GACF,eAEK,CACW,CAEd,CAAC;EAET;EAEAC,kBAAkBA,CAAA,EAAG;IACpB,oBACC3H,KAAA,CAAA6F,aAAA,CAACvF,gBAAgB;MAAC+G,OAAO,EAAE,IAAI,CAACjC;IAAe,gBAC9CpF,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;MAAC2F,KAAK,EAAEC,MAAM,CAAC6B;IAAa,gBAChC5H,KAAA,CAAA6F,aAAA,CAAC3F,IAAI;MACJ4F,KAAK,EAAE,CACNC,MAAM,CAAC8B,gBAAgB,EACvB;QAAEJ,KAAK,EAAE,IAAI,CAACjG,KAAK,CAACkG;MAAmB,CAAC;IACvC,GAED,IAAI,CAACI,mBAAmB,CAAC,CACrB,CACD,CACW,CAAC;EAErB;EAEAC,YAAYA,CAAA,EAAG;IACd,IAAI,CAAC,IAAI,CAACvG,KAAK,CAACwG,aAAa,EAAE,OAAO,IAAI;IAE1C,oBACChI,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;MAAC2F,KAAK,EAAEC,MAAM,CAACkC;IAAgB,gBACnCjI,KAAA,CAAA6F,aAAA,CAAC3E,UAAU,CAACgH,YAAY;MACvBC,WAAW,EAAE,aAAa9G,MAAM,CAAC+G,cAAc,gBAAiB;MAChEvE,KAAK,EAAE,IAAI,CAACV,KAAK,CAACD,UAAW;MAC7BmF,YAAY,EAAE,IAAI,CAACC,YAAa;MAChCC,eAAe,EAAE,IAAI,CAACC,cAAe;MACrCC,cAAc;MACdC,QAAQ;MACR;MAAA;MACAC,aAAa,EAAE;IAAO,CACtB,CACI,CAAC;EAET;EAEAC,gBAAgBA,CAAA,EAAG;IAClB,MAAM;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAACrH,KAAK;IAC1C,oBACCxB,KAAA,CAAA6F,aAAA,CAAC1F,IAAI,QACH0I,mBAAmB,GACnBA,mBAAmB,gBAEnB7I,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;MAAC2F,KAAK,EAAE;QAAEgD,MAAM,EAAE;MAAE;IAAE,CAAE,CAC7B,EACA,IAAI,CAACnB,kBAAkB,CAAC,CAAC,EACzB,IAAI,CAACI,YAAY,CAAC,CACd,CAAC;EAET;EAEAgB,UAAUA,CAAA,EAAG;IACZ,MAAM;MAAE5E;IAAa,CAAC,GAAG,IAAI,CAAChB,KAAK;IAEnC,oBACCnD,KAAA,CAAA6F,aAAA,CAACxF,QAAQ;MACR2I,yBAAyB,EAAC,QAAQ;MAClClD,KAAK,EAAE;QAAEmD,IAAI,EAAE;MAAE,CAAE;MACnBC,qBAAqB,EAAE;QAAEC,aAAa,EAAE;MAAG,CAAE;MAC7C5G,IAAI,EAAE4B,YAAa;MACnBiF,YAAY,EAAGC,IAAI,IAAKA,IAAI,CAACC,EAAG;MAChCC,UAAU,EAAEA,CAAC;QAAEF;MAAK,CAAC,kBACpBrJ,KAAA,CAAA6F,aAAA,CAAC7E,mBAAmB;QAAC8E,KAAK,EAAE,IAAI,CAACtE,KAAK,CAACgI,SAAU;QAACxF,GAAG,EAAEqF;MAAK,CAAE,CAC7D;MACFI,kBAAkB,EAAE,IAAI,CAAC1C,eAAe,CAAC,CAAE;MAC3C8B,mBAAmB,EAAE,IAAI,CAACD,gBAAgB,CAAC,CAAE;MAC7Cc,mBAAmB,EAAE,IAAI,CAACC,gBAAgB,CAAC,CAAE;MAC7CC,YAAY,EAAE,IAAI,CAACC,QAAS;MAC5BC,qBAAqB,EAAE;IAAI,CAC3B,CAAC;EAEJ;EAYAC,iBAAiBA,CAAA,EAAG;IACnB,MAAM;MAAEjI;IAAW,CAAC,GAAG,IAAI,CAACN,KAAK;IACjC,MAAM;MAAE0D,eAAe;MAAE1B;IAAM,CAAC,GAAG,IAAI,CAACL,KAAK;IAC7C,IAAI,CAAC+B,eAAe,EAAE,OAAO,IAAI;IAEjC,oBACClF,KAAA,CAAA6F,aAAA,CAAC5E,eAAe;MACfgB,IAAI,EAAE,IAAI,CAACT,KAAK,CAACS,IAAK;MACtBuB,KAAK,EAAEA,KAAM;MACbtB,MAAM,EAAEJ,UAAU,CAACI,MAAO;MAC1BC,QAAQ,EAAEL,UAAU,CAACK,QAAS;MAC9BE,QAAQ,EAAEP,UAAU,CAACO,QAAS;MAC9BD,IAAI,EAAEN,UAAU,CAACM,IAAK;MACtB4H,OAAO,EAAE,IAAI,CAACpE;IAAe,CAC7B,CAAC;EAEJ;EAEAqE,MAAMA,CAAA,EAAG;IACR,oBACCjK,KAAA,CAAA6F,aAAA,CAAC1F,IAAI;MAAC2F,KAAK,EAAE,CAACC,MAAM,CAACmE,SAAS,EAAE,IAAI,CAAC1I,KAAK,CAACsE,KAAK;IAAE,GAChD,IAAI,CAACiD,UAAU,CAAC,CAAC,EACjB,IAAI,CAACgB,iBAAiB,CAAC,CACnB,CAAC;EAET;AACD;AAEA,MAAMhE,MAAM,GAAG3F,UAAU,CAAC+J,MAAM,CAAC;EAChCD,SAAS,EAAE;IACVjB,IAAI,EAAE,CAAC;IACPmB,eAAe,EAAE;EAClB,CAAC;EACDC,oBAAoB,EAAE;IACrBC,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,eAAe;IAC/BrD,UAAU,EAAE,QAAQ;IACpBsD,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EAClB,CAAC;EACDC,WAAW,EAAE;IACZC,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,GAAG;IAClBpD,KAAK,EAAE;EACR,CAAC;EACDqD,eAAe,EAAE;IAChBR,aAAa,EAAE,KAAK;IACpBpD,UAAU,EAAE;EACb,CAAC;EACD6D,UAAU,EAAE;IACXJ,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE,EAAE;IACZI,WAAW,EAAE;EACd,CAAC;EACDC,UAAU,EAAE;IACXL,QAAQ,EAAE;EACX,CAAC;EACD3C,eAAe,EAAE;IAChBqC,aAAa,EAAE,KAAK;IACpBpD,UAAU,EAAE,QAAQ;IACpBiC,aAAa,EAAE,CAAC;IAChBqB,iBAAiB,EAAE;EACpB,CAAC;EACD5C,YAAY,EAAE;IACbuB,aAAa,EAAE,CAAC;IAChBqB,iBAAiB,EAAE,EAAE;IACrBF,aAAa,EAAE;EAChB,CAAC;EACDzC,gBAAgB,EAAE;IACjB8C,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE;EACX,CAAC;EACD3H,WAAW,EAAE;IACZwH,eAAe,EAAE,EAAE;IACnBvD,UAAU,EAAE;EACb,CAAC;EACDK,kBAAkB,EAAE;IACnB2D,SAAS,EAAE,EAAE;IACbT,eAAe,EAAE,EAAE;IACnBD,iBAAiB,EAAE,EAAE;IACrBW,YAAY,EAAE,CAAC;IACfC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,MAAM;IACnBjB,eAAe,EAAE;EAClB,CAAC;EACD5C,gBAAgB,EAAE;IACjBmD,UAAU,EAAE,aAAa;IACzBC,QAAQ,EAAE;EACX;AACD,CAAC,CAAC;AAEF,MAAMU,eAAe,GAAInI,KAAK,IAAK;EAClC,MAAM;IAAEoI,IAAI;IAAEC;EAAc,CAAC,GAAGrI,KAAK;EACrC,MAAMb,IAAI,GAAGa,KAAK,CAAC9B,MAAM,CAACoK,UAAU,CAAC;EACrC,MAAMC,WAAW,GAAGnL,CAAC,CAACoL,OAAO,CAACrJ,IAAI,CAACA,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;EACnE,MAAM0F,aAAa,GAAGzH,CAAC,CAACqL,QAAQ,CAACL,IAAI,CAACM,WAAW,EAAE,qBAAqB,CAAC;EAEzE,OAAO;IACN7D,aAAa;IACb1F,IAAI,EAAEoJ,WAAW;IACjBzJ,IAAI,EAAEsJ,IAAI,CAACtJ,IAAI;IACf0E,YAAY,EAAE4E,IAAI,CAACO,QAAQ;IAC3BpE,kBAAkB,EAAEvG,OAAO,CAAC4K,8BAA8B,CAAC5I,KAAK,CAAC;IACjEmD,WAAW,EAAEkF,aAAa,CAAClF,WAAW,CAACjF,MAAM,CAAC2K,SAAS,CAAC;IACxDC,WAAW,EAAE9I,KAAK,CAAC9B,MAAM,CAACoK,UAAU,CAAC,CAACS,WAAW;IACjDpK,UAAU,EAAEqB,KAAK,CAAC9B,MAAM,CAACoK,UAAU,CAAC,CAAC3J,UAAU,IAAI,CAAC;EACrD,CAAC;AACF,CAAC;AAED,eAAetB,OAAO,CACrB8K,eAAe,EACf;EACC5K,UAAU;EACVC,QAAQ;EACRC,SAAS;EACTC,iBAAiB;EACjBC,iBAAiB;EACjBC;AACD,CAAC,EACD,IAAI,EACJ;EACCoL,UAAU,EAAE;AACb,CACD,CAAC,CAAC7K,eAAe,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","Text","View","StyleSheet","FlatList","TouchableOpacity","_","connect","maintenanceActions","jobsLoaded","jobAdded","jobsAdded","jobStatusesUpdate","jobHideSeenUpdate","jobsFilterLoaded","MaintenanceListItem","FilterPopupMenu","Components","Colours","Helper","values","MaintenanceList","constructor","props","_defineProperty","overrideFilters","onLoadingChanged","jobfilters","res","getJobs2","site","status","priority","type","assignee","jobs","data","Items","lastKey","LastKey","setState","hasMore","error","console","log","loading","loadingMore","searchText","state","newJobs","newLastKey","getJobTypes","getSite","types","map","t","label","typeName","value","splice","jobId","job","getJobByJobId","source","filteredList","jobIdMatch","find","j","filter","room","toLowerCase","indexOf","fetchJob","jobIndex","unshift","callback","isEmpty","resetDataSource","showFilterPopup","selected","onToggleFilter","refresh","filterTexts","push","statusText","priorityText","assigneeName","join","createElement","style","styles","LoadingIndicator","visible","componentDidMount","refreshTypes","componentDidUpdate","prevProps","dataUpdated","isEqual","getEmptyStateText","options","EmptyText","userCategory","emptyRequestsStaff","emptyRequestsUser","renderEmptyList","EmptyStateMain","title","marginHorizontal","renderFilterButton","onPress","filterButton","filterButtonText","color","colourBrandingMain","getFilterButtonText","renderSearch","hasPermission","searchContainer","GenericInput","placeholder","textEntityName","onChangeText","onSearchText","onSubmitEditing","onSearchSubmit","squaredCorners","hasClear","returnKeyType","renderListHeader","ListHeaderComponent","height","renderList","keyboardShouldPersistTaps","flex","contentContainerStyle","paddingBottom","keyExtractor","item","id","renderItem","itemStyle","ListEmptyComponent","ListFooterComponent","renderListFooter","onEndReached","loadMore","onEndReachedThreshold","renderFilterPopup","onClose","onSelectFilter","render","container","create","backgroundColor","filterContainerOuter","flexDirection","justifyContent","alignItems","paddingHorizontal","paddingVertical","filterTitle","fontFamily","fontSize","letterSpacing","filterContainer","filterText","marginRight","filterIcon","mapStateToProps","user","notifications","reducerKey","jobsOrdered","orderBy","includes","permissions","category","getMainBrandingColourFromState","updateKey","statusTypes","jobstatuses","forwardRef"],"sources":["MaintenanceList.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { View, StyleSheet, FlatList, TouchableOpacity } from \"react-native\";\nimport _ from \"lodash\";\nimport { connect } from \"react-redux\";\nimport { maintenanceActions } from \"../apis\";\nimport {\n\tjobsLoaded,\n\tjobAdded,\n\tjobsAdded,\n\tjobStatusesUpdate,\n\tjobHideSeenUpdate,\n\tjobsFilterLoaded,\n} from \"../actions\";\nimport MaintenanceListItem from \"../components/MaintenanceListItem\";\nimport FilterPopupMenu from \"./FilterPopupMenu\";\nimport { Components, Colours, Helper } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nclass MaintenanceList extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\ttypes: [],\n\t\t\tfilteredList: props.jobs,\n\t\t\tloading: false,\n\t\t\tloadingMore: false,\n\t\t\thasMore: true,\n\t\t\tlastKey: null,\n\t\t\tsearchText: \"\",\n\t\t\tshowFilterPopup: false,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t\tthis.refreshTypes();\n\t\tthis.resetDataSource();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t\tif (\n\t\t\t!_.isEqual(prevProps.jobs, this.props.jobs) ||\n\t\t\t!_.isEqual(prevProps.jobfilters, this.props.jobfilters)\n\t\t)\n\t\t\tthis.resetDataSource();\n\t}\n\n\trefresh = (overrideFilters) => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst jobfilters = overrideFilters || this.props.jobfilters;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tnull, // No lastKey = first page\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\tconst jobs = res.data.Items;\n\t\t\t\tconst lastKey = res.data.LastKey;\n\n\t\t\t\t// Always replace jobs on refresh (filters are server-side)\n\t\t\t\tthis.props.jobsLoaded(jobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey,\n\t\t\t\t\thasMore: !!lastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tloadMore = () => {\n\t\tconst { loading, loadingMore, hasMore, lastKey, searchText } = this.state;\n\n\t\t// Don't load if already loading, no more pages, or during search\n\t\tif (loading || loadingMore || !hasMore || !lastKey || searchText) return;\n\n\t\tthis.setState({ loadingMore: true }, async () => {\n\t\t\ttry {\n\t\t\t\tconst { jobfilters } = this.props;\n\t\t\t\tconst res = await maintenanceActions.getJobs2(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobfilters.status,\n\t\t\t\t\tjobfilters.priority,\n\t\t\t\t\tjobfilters.type,\n\t\t\t\t\tlastKey,\n\t\t\t\t\tjobfilters.assignee,\n\t\t\t\t);\n\n\t\t\t\tconst newJobs = res.data.Items;\n\t\t\t\tconst newLastKey = res.data.LastKey;\n\n\t\t\t\t// Append to existing jobs\n\t\t\t\tthis.props.jobsAdded(newJobs);\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tlastKey: newLastKey,\n\t\t\t\t\thasMore: !!newLastKey,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"loadMore error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.setState({ loadingMore: false });\n\t\t\t}\n\t\t});\n\t};\n\n\trefreshTypes = async () => {\n\t\tconst { data } = await maintenanceActions.getJobTypes(\n\t\t\tHelper.getSite(this.props.site),\n\t\t);\n\t\tconst types = data.map((t) => {\n\t\t\treturn { label: t.typeName, value: t.typeName };\n\t\t});\n\t\ttypes.splice(0, 0, { label: \"All\", value: \"\" });\n\t\t// console.log('refreshTypes', types);\n\t\tthis.setState({ types });\n\t};\n\n\tfetchJob = (jobId) => {\n\t\tif (this.state.loading) return;\n\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst job = await maintenanceActions.getJobByJobId(\n\t\t\t\t\tthis.props.site,\n\t\t\t\t\tjobId,\n\t\t\t\t);\n\t\t\t\t// console.log('fetchJob', job?.data);\n\t\t\t\tthis.props.jobAdded(job.data);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"fetchJob error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tgetEmptyStateText() {\n\t\tif (this.props.options && !_.isEmpty(this.props.options.EmptyText)) {\n\t\t\treturn this.props.options.EmptyText;\n\t\t}\n\t\treturn this.props.userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t}\n\n\tresetDataSource = (source = \"\") => {\n\t\tconst { searchText } = this.state;\n\t\tconst { jobs } = this.props;\n\n\t\tlet filteredList = jobs;\n\t\tlet jobIdMatch = null;\n\n\t\t// Client-side search filtering (search is not supported server-side)\n\t\tif (searchText) {\n\t\t\tjobIdMatch = _.find(jobs, (j) => j.jobId === searchText);\n\t\t\tfilteredList = jobs.filter((j) => {\n\t\t\t\tif (\n\t\t\t\t\tj.room &&\n\t\t\t\t\tj.room.toLowerCase().indexOf(searchText.toLowerCase()) > -1\n\t\t\t\t) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tif (!jobIdMatch) this.fetchJob(searchText);\n\t\t}\n\n\t\t// Note: status, priority, type, and assignee filters are applied server-side\n\t\t// via getJobs2, so no client-side filtering needed for those\n\n\t\tif (jobIdMatch) {\n\t\t\tconst jobIndex = filteredList.indexOf(jobIdMatch);\n\t\t\tif (jobIndex > -1) {\n\t\t\t\tfilteredList.splice(jobIndex, 1);\n\t\t\t}\n\t\t\tfilteredList.unshift(jobIdMatch);\n\t\t}\n\n\t\tthis.setState({ filteredList });\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonSearchText = (value) => {\n\t\tthis.setState({ searchText: value }, () => {\n\t\t\tif (_.isEmpty(this.state.searchText)) this.resetDataSource(\"search\");\n\t\t});\n\t};\n\n\tonSearchSubmit = () => {\n\t\tthis.resetDataSource(\"search\");\n\t};\n\n\tonToggleFilter = () => {\n\t\tthis.setState({ showFilterPopup: !this.state.showFilterPopup });\n\t};\n\n\tonSelectFilter = (selected) => {\n\t\tthis.props.jobsFilterLoaded(selected);\n\t\tthis.onToggleFilter();\n\t\t// Reset pagination but keep old list visible while loading\n\t\t// Pass filters directly to avoid stale props from async Redux update\n\t\tthis.setState({ lastKey: null, hasMore: true }, () => {\n\t\t\tthis.refresh(selected);\n\t\t});\n\t};\n\n\tgetFilterButtonText = () => {\n\t\tconst { jobfilters } = this.props;\n\t\tconst filterTexts = [];\n\t\tif (!_.isEmpty(jobfilters.status)) {\n\t\t\tfilterTexts.push(jobfilters.statusText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.priority)) {\n\t\t\tfilterTexts.push(jobfilters.priorityText);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.type)) {\n\t\t\tfilterTexts.push(jobfilters.type);\n\t\t}\n\t\tif (!_.isEmpty(jobfilters.assignee)) {\n\t\t\tfilterTexts.push(jobfilters.assigneeName);\n\t\t}\n\t\tif (_.isEmpty(filterTexts)) {\n\t\t\treturn \"Filter\";\n\t\t}\n\t\treturn `Filtering by ${filterTexts.join(\", \")}`;\n\t};\n\n\trenderEmptyList() {\n\t\treturn this.state.loading ? null : (\n\t\t\t<Components.EmptyStateMain\n\t\t\t\ttitle={this.getEmptyStateText()}\n\t\t\t\tstyle={{ marginHorizontal: 16 }}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderFilterButton() {\n\t\treturn (\n\t\t\t<TouchableOpacity onPress={this.onToggleFilter}>\n\t\t\t\t<View style={styles.filterButton}>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\tstyles.filterButtonText,\n\t\t\t\t\t\t\t{ color: this.props.colourBrandingMain },\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{this.getFilterButtonText()}\n\t\t\t\t\t</Text>\n\t\t\t\t</View>\n\t\t\t</TouchableOpacity>\n\t\t);\n\t}\n\n\trenderSearch() {\n\t\tif (!this.props.hasPermission) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.searchContainer}>\n\t\t\t\t<Components.GenericInput\n\t\t\t\t\tplaceholder={`Search by ${values.textEntityName} ID or Address`}\n\t\t\t\t\tvalue={this.state.searchText}\n\t\t\t\t\tonChangeText={this.onSearchText}\n\t\t\t\t\tonSubmitEditing={this.onSearchSubmit}\n\t\t\t\t\tsquaredCorners\n\t\t\t\t\thasClear\n\t\t\t\t\t// keyboardType={'numeric'}\n\t\t\t\t\treturnKeyType={\"done\"}\n\t\t\t\t/>\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderListHeader() {\n\t\tconst { ListHeaderComponent } = this.props;\n\t\treturn (\n\t\t\t<View>\n\t\t\t\t{ListHeaderComponent ? (\n\t\t\t\t\tListHeaderComponent\n\t\t\t\t) : (\n\t\t\t\t\t<View style={{ height: 8 }} />\n\t\t\t\t)}\n\t\t\t\t{this.renderFilterButton()}\n\t\t\t\t{this.renderSearch()}\n\t\t\t</View>\n\t\t);\n\t}\n\n\trenderList() {\n\t\tconst { filteredList } = this.state;\n\n\t\treturn (\n\t\t\t<FlatList\n\t\t\t\tkeyboardShouldPersistTaps=\"always\"\n\t\t\t\tstyle={{ flex: 1 }}\n\t\t\t\tcontentContainerStyle={{ paddingBottom: 16 }}\n\t\t\t\tdata={filteredList}\n\t\t\t\tkeyExtractor={(item) => item.id}\n\t\t\t\trenderItem={({ item }) => (\n\t\t\t\t\t<MaintenanceListItem style={this.props.itemStyle} job={item} />\n\t\t\t\t)}\n\t\t\t\tListEmptyComponent={this.renderEmptyList()}\n\t\t\t\tListHeaderComponent={this.renderListHeader()}\n\t\t\t\tListFooterComponent={this.renderListFooter()}\n\t\t\t\tonEndReached={this.loadMore}\n\t\t\t\tonEndReachedThreshold={0.5}\n\t\t\t/>\n\t\t);\n\t}\n\n\trenderListFooter = () => {\n\t\tif (!this.state.loadingMore) return null;\n\n\t\treturn (\n\t\t\t<View style={styles.loadingMore}>\n\t\t\t\t<Components.LoadingIndicator visible={true} />\n\t\t\t</View>\n\t\t);\n\t};\n\n\trenderFilterPopup() {\n\t\tconst { jobfilters } = this.props;\n\t\tconst { showFilterPopup, types } = this.state;\n\t\tif (!showFilterPopup) return null;\n\n\t\treturn (\n\t\t\t<FilterPopupMenu\n\t\t\t\tsite={this.props.site}\n\t\t\t\ttypes={types}\n\t\t\t\tstatus={jobfilters.status}\n\t\t\t\tpriority={jobfilters.priority}\n\t\t\t\tassignee={jobfilters.assignee}\n\t\t\t\ttype={jobfilters.type}\n\t\t\t\tonClose={this.onSelectFilter}\n\t\t\t/>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<View style={[styles.container, this.props.style]}>\n\t\t\t\t{this.renderList()}\n\t\t\t\t{this.renderFilterPopup()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tcontainer: {\n\t\tflex: 1,\n\t\tbackgroundColor: \"#fff\",\n\t},\n\tfilterContainerOuter: {\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpaddingHorizontal: 16,\n\t\tpaddingVertical: 16,\n\t},\n\tfilterTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 11,\n\t\tletterSpacing: 0.8,\n\t\tcolor: \"#4d4d4d\",\n\t},\n\tfilterContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t},\n\tfilterText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t\tmarginRight: 6,\n\t},\n\tfilterIcon: {\n\t\tfontSize: 20,\n\t},\n\tsearchContainer: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t},\n\tfilterButton: {\n\t\tpaddingBottom: 8,\n\t\tpaddingHorizontal: 16,\n\t\tflexDirection: \"row-reverse\",\n\t},\n\tfilterButtonText: {\n\t\tfontFamily: \"sf-semibold\",\n\t\tfontSize: 16,\n\t},\n\tloadingMore: {\n\t\tpaddingVertical: 20,\n\t\talignItems: \"center\",\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\tconst jobsOrdered = _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]);\n\tconst hasPermission = _.includes(user.permissions, \"maintenanceTracking\");\n\n\treturn {\n\t\thasPermission,\n\t\tjobs: jobsOrdered,\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstatusTypes: state[values.reducerKey].jobstatuses,\n\t\tjobfilters: state[values.reducerKey].jobfilters || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{\n\t\tjobsLoaded,\n\t\tjobAdded,\n\t\tjobsAdded,\n\t\tjobStatusesUpdate,\n\t\tjobHideSeenUpdate,\n\t\tjobsFilterLoaded,\n\t},\n\tnull,\n\t{\n\t\tforwardRef: true,\n\t},\n)(MaintenanceList);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -34,9 +34,9 @@ class WidgetSmall extends Component {
|
|
|
34
34
|
_defineProperty(this, "refresh", () => {
|
|
35
35
|
this.onLoadingChanged(true, async () => {
|
|
36
36
|
try {
|
|
37
|
-
const res = await maintenanceActions.
|
|
38
|
-
// console.log('WidgetSmall - refresh', res.data);
|
|
39
|
-
this.props.jobsLoaded(res);
|
|
37
|
+
const res = await maintenanceActions.getJobs2(this.props.site, '', '', '', null, '');
|
|
38
|
+
// console.log('WidgetSmall - refresh', res.data.Items);
|
|
39
|
+
this.props.jobsLoaded(res.data.Items);
|
|
40
40
|
} catch (error) {
|
|
41
41
|
console.log("refresh error", error);
|
|
42
42
|
} finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","View","ScrollView","StyleSheet","Text","connect","_","maintenanceActions","jobsLoaded","jobStatusesUpdate","jobHideSeenUpdate","MaintenanceWidgetItem","Services","Colours","Components","values","MAX_ITEMS","WidgetSmall","constructor","props","_defineProperty","options","isEmpty","Title","strings","featureKey","textFeatureTitle","userCategory","EmptyText","emptyRequestsStaff","emptyRequestsUser","onLoadingChanged","res","getJobsRecursive","site","error","console","log","loading","callback","setState","state","navigation","navigate","screenMaintenance","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","jobs","createElement","style","styles","loadingPadding","LoadingStateWidget","height","EmptyStateWidget","title","getEmptyStateText","horizontal","contentContainerStyle","paddingLeft","paddingRight","showsHorizontalScrollIndicator","slice","map","job","key","id","render","colourBrandingMain","sectionContainer","sectionPadding","sectionHeading","sectionTitle","getTitle","InlineButton","onPress","onPressAll","color","touchableStyle","paddingTop","textStyle","create","backgroundColor","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","TEXT_DARKEST","mapStateToProps","_state$strings","user","notifications","reducerKey","getMainBrandingColourFromState","orderBy","category","updateKey","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { View, ScrollView, StyleSheet } from \"react-native\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { maintenanceActions } from \"../apis\";\nimport { jobsLoaded, jobStatusesUpdate, jobHideSeenUpdate } from \"../actions\";\nimport MaintenanceWidgetItem from \"./MaintenanceWidgetItem\";\nimport { Services } from \"../feature.config\";\nimport { Colours, Components } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nconst MAX_ITEMS = 10;\n\nclass WidgetSmall extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t}\n\n\tgetTitle = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\treturn (\n\t\t\tthis.props.strings[`${values.featureKey}_textFeatureTitle`] ||\n\t\t\tvalues.textFeatureTitle\n\t\t);\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options, userCategory } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await maintenanceActions.getJobsRecursive(this.props.site);\n\t\t\t\t// console.log('WidgetSmall - refresh', res.data);\n\t\t\t\tthis.props.jobsLoaded(res);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonPressAll = () => {\n\t\tServices.navigation.navigate(values.screenMaintenance, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\trenderContent() {\n\t\tconst { jobs } = this.props;\n\t\tif (_.isEmpty(jobs)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t<Components.EmptyStateWidget\n\t\t\t\t\t\ttitle={this.getEmptyStateText()}\n\t\t\t\t\t\theight={180}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tcontentContainerStyle={{ paddingLeft: 6, paddingRight: 8 }}\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{jobs.slice(0, MAX_ITEMS).map((job) => {\n\t\t\t\t\treturn <MaintenanceWidgetItem key={job.id} job={job} />;\n\t\t\t\t})}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t\t<Components.InlineButton\n\t\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\ttouchableStyle={{ paddingTop: 6 }}\n\t\t\t\t\t\t\ttextStyle={{ color: \"#fff\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tView All\n\t\t\t\t\t\t</Components.InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{this.renderContent()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tpaddingTop: 16,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 6,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: 16,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: 4,\n\t\tflexDirection: \"row\",\n\t\talignContent: \"flex-start\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: Colours.TEXT_DARKEST,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\treturn {\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tjobs: _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]),\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{ jobsLoaded, jobStatusesUpdate, jobHideSeenUpdate },\n\tnull,\n\t{ forwardRef: true },\n)(WidgetSmall);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","View","ScrollView","StyleSheet","Text","connect","_","maintenanceActions","jobsLoaded","jobStatusesUpdate","jobHideSeenUpdate","MaintenanceWidgetItem","Services","Colours","Components","values","MAX_ITEMS","WidgetSmall","constructor","props","_defineProperty","options","isEmpty","Title","strings","featureKey","textFeatureTitle","userCategory","EmptyText","emptyRequestsStaff","emptyRequestsUser","onLoadingChanged","res","getJobs2","site","data","Items","error","console","log","loading","callback","setState","state","navigation","navigate","screenMaintenance","componentDidMount","refresh","componentDidUpdate","prevProps","dataUpdated","renderContent","jobs","createElement","style","styles","loadingPadding","LoadingStateWidget","height","EmptyStateWidget","title","getEmptyStateText","horizontal","contentContainerStyle","paddingLeft","paddingRight","showsHorizontalScrollIndicator","slice","map","job","key","id","render","colourBrandingMain","sectionContainer","sectionPadding","sectionHeading","sectionTitle","getTitle","InlineButton","onPress","onPressAll","color","touchableStyle","paddingTop","textStyle","create","backgroundColor","paddingHorizontal","paddingBottom","marginBottom","flexDirection","alignContent","justifyContent","fontFamily","fontSize","TEXT_DARKEST","mapStateToProps","_state$strings","user","notifications","reducerKey","getMainBrandingColourFromState","orderBy","category","updateKey","config","forwardRef"],"sources":["WidgetSmall.js"],"sourcesContent":["import React, { Component } from \"react\";\nimport { View, ScrollView, StyleSheet } from \"react-native\";\nimport { Text } from \"@plusscommunities/pluss-core-app/components\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\nimport { maintenanceActions } from \"../apis\";\nimport { jobsLoaded, jobStatusesUpdate, jobHideSeenUpdate } from \"../actions\";\nimport MaintenanceWidgetItem from \"./MaintenanceWidgetItem\";\nimport { Services } from \"../feature.config\";\nimport { Colours, Components } from \"../core.config\";\nimport { values } from \"../values.config\";\n\nconst MAX_ITEMS = 10;\n\nclass WidgetSmall extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = { loading: false };\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.jobStatusesUpdate(this.props.site);\n\t\tthis.props.jobHideSeenUpdate(this.props.site);\n\t\tthis.refresh();\n\t}\n\n\tcomponentDidUpdate(prevProps) {\n\t\tif (!prevProps.dataUpdated && this.props.dataUpdated) this.refresh();\n\t}\n\n\tgetTitle = () => {\n\t\tconst { options } = this.props;\n\t\tif (options && !_.isEmpty(options.Title)) return options.Title;\n\t\treturn (\n\t\t\tthis.props.strings[`${values.featureKey}_textFeatureTitle`] ||\n\t\t\tvalues.textFeatureTitle\n\t\t);\n\t};\n\n\tgetEmptyStateText = () => {\n\t\tconst { options, userCategory } = this.props;\n\t\tif (options && !_.isEmpty(options.EmptyText)) return options.EmptyText;\n\t\treturn userCategory === \"staff\"\n\t\t\t? values.emptyRequestsStaff\n\t\t\t: values.emptyRequestsUser;\n\t};\n\n\trefresh = () => {\n\t\tthis.onLoadingChanged(true, async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await maintenanceActions.getJobs2(this.props.site, '', '', '', null, '');\n\t\t\t\t// console.log('WidgetSmall - refresh', res.data.Items);\n\t\t\t\tthis.props.jobsLoaded(res.data.Items);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"refresh error\", error);\n\t\t\t} finally {\n\t\t\t\tthis.onLoadingChanged(false);\n\t\t\t}\n\t\t});\n\t};\n\n\tonLoadingChanged = (loading, callback) => {\n\t\tthis.setState({ loading }, () => {\n\t\t\tif (this.props.onLoadingChanged)\n\t\t\t\tthis.props.onLoadingChanged(this.state.loading);\n\t\t\tif (callback) callback();\n\t\t});\n\t};\n\n\tonPressAll = () => {\n\t\tServices.navigation.navigate(values.screenMaintenance, {\n\t\t\toptions: this.props.options,\n\t\t});\n\t};\n\n\trenderContent() {\n\t\tconst { jobs } = this.props;\n\t\tif (_.isEmpty(jobs)) {\n\t\t\tif (this.state.loading) {\n\t\t\t\treturn (\n\t\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t\t<Components.LoadingStateWidget height={180} />\n\t\t\t\t\t</View>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<View style={styles.loadingPadding}>\n\t\t\t\t\t<Components.EmptyStateWidget\n\t\t\t\t\t\ttitle={this.getEmptyStateText()}\n\t\t\t\t\t\theight={180}\n\t\t\t\t\t/>\n\t\t\t\t</View>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tcontentContainerStyle={{ paddingLeft: 6, paddingRight: 8 }}\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{jobs.slice(0, MAX_ITEMS).map((job) => {\n\t\t\t\t\treturn <MaintenanceWidgetItem key={job.id} job={job} />;\n\t\t\t\t})}\n\t\t\t</ScrollView>\n\t\t);\n\t}\n\n\trender() {\n\t\tconst { colourBrandingMain } = this.props;\n\n\t\treturn (\n\t\t\t<View style={styles.sectionContainer}>\n\t\t\t\t<View style={styles.sectionPadding}>\n\t\t\t\t\t<View style={styles.sectionHeading}>\n\t\t\t\t\t\t<Text style={styles.sectionTitle}>{this.getTitle()}</Text>\n\t\t\t\t\t\t<Components.InlineButton\n\t\t\t\t\t\t\tonPress={this.onPressAll}\n\t\t\t\t\t\t\tcolor={colourBrandingMain}\n\t\t\t\t\t\t\ttouchableStyle={{ paddingTop: 6 }}\n\t\t\t\t\t\t\ttextStyle={{ color: \"#fff\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tView All\n\t\t\t\t\t\t</Components.InlineButton>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t\t{this.renderContent()}\n\t\t\t</View>\n\t\t);\n\t}\n}\n\nconst styles = StyleSheet.create({\n\tsectionContainer: {\n\t\tbackgroundColor: \"#fff\",\n\t\tpaddingTop: 16,\n\t},\n\tsectionPadding: {\n\t\tpaddingHorizontal: 16,\n\t\tpaddingBottom: 6,\n\t},\n\tloadingPadding: {\n\t\tpaddingHorizontal: 16,\n\t},\n\tsectionHeading: {\n\t\tmarginBottom: 4,\n\t\tflexDirection: \"row\",\n\t\talignContent: \"flex-start\",\n\t\tjustifyContent: \"space-between\",\n\t},\n\tsectionTitle: {\n\t\tfontFamily: \"sf-bold\",\n\t\tfontSize: 24,\n\t\tcolor: Colours.TEXT_DARKEST,\n\t},\n});\n\nconst mapStateToProps = (state) => {\n\tconst { user, notifications } = state;\n\tconst jobs = state[values.reducerKey];\n\treturn {\n\t\tcolourBrandingMain: Colours.getMainBrandingColourFromState(state),\n\t\tjobs: _.orderBy(jobs.jobs, [\"createdUnix\"], [\"desc\"]),\n\t\tsite: user.site,\n\t\tuserCategory: user.category,\n\t\tdataUpdated: notifications.dataUpdated[values.updateKey],\n\t\tstrings: state.strings?.config || {},\n\t};\n};\n\nexport default connect(\n\tmapStateToProps,\n\t{ jobsLoaded, jobStatusesUpdate, jobHideSeenUpdate },\n\tnull,\n\t{ forwardRef: true },\n)(WidgetSmall);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,17 +22,31 @@ class RequestDetail extends Component {
|
|
|
22
22
|
super(props);
|
|
23
23
|
_defineProperty(this, "getJob", async () => {
|
|
24
24
|
this.setState({
|
|
25
|
-
loading: true
|
|
25
|
+
loading: true,
|
|
26
|
+
loadError: false
|
|
26
27
|
}, async () => {
|
|
28
|
+
// Timeout fallback: if API doesn't respond in 15s, show error
|
|
29
|
+
const timeoutId = setTimeout(() => {
|
|
30
|
+
if (this.state.loading) {
|
|
31
|
+
this.setState({
|
|
32
|
+
loading: false,
|
|
33
|
+
loadError: true
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}, 15000);
|
|
27
37
|
try {
|
|
28
38
|
const res = await maintenanceActions.getJob(this.props.job.site, this.props.job.id);
|
|
29
39
|
// console.log('getJob', JSON.stringify(res.data, null, 2));
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
40
|
+
clearTimeout(timeoutId);
|
|
41
|
+
if (!this.state.loadError) {
|
|
42
|
+
this.props.jobAdded(res.data);
|
|
43
|
+
this.updateJobState(res.data);
|
|
44
|
+
// Refresh external sync data when job is refreshed
|
|
45
|
+
this.getExternalSync();
|
|
46
|
+
}
|
|
34
47
|
} catch (error) {
|
|
35
48
|
var _error$response, _error$response2, _error$response3, _error$response4;
|
|
49
|
+
clearTimeout(timeoutId);
|
|
36
50
|
console.log("getJob error", error.toString());
|
|
37
51
|
// Log full error details for debugging
|
|
38
52
|
console.log("getJob error details:", {
|
|
@@ -46,6 +60,10 @@ class RequestDetail extends Component {
|
|
|
46
60
|
this.setState({
|
|
47
61
|
forbidden: true
|
|
48
62
|
});
|
|
63
|
+
} else {
|
|
64
|
+
this.setState({
|
|
65
|
+
loadError: true
|
|
66
|
+
});
|
|
49
67
|
}
|
|
50
68
|
} finally {
|
|
51
69
|
this.setState({
|
|
@@ -114,7 +132,6 @@ class RequestDetail extends Component {
|
|
|
114
132
|
const res = await maintenanceActions.editJob(updated, user.site);
|
|
115
133
|
// console.log('markSeen updated');
|
|
116
134
|
this.props.jobAdded(res.data.job);
|
|
117
|
-
this.getJob();
|
|
118
135
|
this.setState({
|
|
119
136
|
loading: false,
|
|
120
137
|
seen: true
|
|
@@ -362,6 +379,7 @@ class RequestDetail extends Component {
|
|
|
362
379
|
showStatusPopup: false,
|
|
363
380
|
showPriorityPopup: false,
|
|
364
381
|
loading: false,
|
|
382
|
+
loadError: false,
|
|
365
383
|
showFullscreenVideo: false,
|
|
366
384
|
currentVideoUrl: "",
|
|
367
385
|
galleryOpen: false,
|
|
@@ -409,7 +427,7 @@ class RequestDetail extends Component {
|
|
|
409
427
|
galleryOpen: true,
|
|
410
428
|
galleryImages
|
|
411
429
|
});
|
|
412
|
-
this.imagePopup.
|
|
430
|
+
this.refs.imagePopup.scrollTo(index);
|
|
413
431
|
}
|
|
414
432
|
closeGallery() {
|
|
415
433
|
this.setState({
|
|
@@ -850,6 +868,12 @@ class RequestDetail extends Component {
|
|
|
850
868
|
if (this.state.forbidden) {
|
|
851
869
|
return /*#__PURE__*/React.createElement(Components.Forbidden, null);
|
|
852
870
|
}
|
|
871
|
+
if (this.state.loadError) {
|
|
872
|
+
return /*#__PURE__*/React.createElement(Components.Forbidden, {
|
|
873
|
+
title: "Something went wrong",
|
|
874
|
+
description: "Failed to load this request. Please check your connection and try again."
|
|
875
|
+
});
|
|
876
|
+
}
|
|
853
877
|
return /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
|
|
854
878
|
behavior: "padding",
|
|
855
879
|
style: styles.container
|