@axelor/aos-mobile-intervention 8.1.0

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.
Files changed (271) hide show
  1. package/README.md +46 -0
  2. package/lib/api/client-and-prospect-api.d.ts +4 -0
  3. package/lib/api/client-and-prospect-api.js +57 -0
  4. package/lib/api/client-and-prospect-api.js.map +1 -0
  5. package/lib/api/contract-api.d.ts +5 -0
  6. package/lib/api/contract-api.js +45 -0
  7. package/lib/api/contract-api.js.map +1 -0
  8. package/lib/api/equipment-api.d.ts +43 -0
  9. package/lib/api/equipment-api.js +212 -0
  10. package/lib/api/equipment-api.js.map +1 -0
  11. package/lib/api/equipment-family-api.d.ts +4 -0
  12. package/lib/api/equipment-family-api.js +28 -0
  13. package/lib/api/equipment-family-api.js.map +1 -0
  14. package/lib/api/equipment-line-api.d.ts +4 -0
  15. package/lib/api/equipment-line-api.js +38 -0
  16. package/lib/api/equipment-line-api.js.map +1 -0
  17. package/lib/api/equipment-picture-api.d.ts +14 -0
  18. package/lib/api/equipment-picture-api.js +56 -0
  19. package/lib/api/equipment-picture-api.js.map +1 -0
  20. package/lib/api/index.d.ts +9 -0
  21. package/lib/api/index.js +27 -0
  22. package/lib/api/index.js.map +1 -0
  23. package/lib/api/intervention-api.d.ts +34 -0
  24. package/lib/api/intervention-api.js +149 -0
  25. package/lib/api/intervention-api.js.map +1 -0
  26. package/lib/api/intervention-note-api.d.ts +19 -0
  27. package/lib/api/intervention-note-api.js +79 -0
  28. package/lib/api/intervention-note-api.js.map +1 -0
  29. package/lib/api/question-api.d.ts +14 -0
  30. package/lib/api/question-api.js +78 -0
  31. package/lib/api/question-api.js.map +1 -0
  32. package/lib/components/atoms/EquipmentCard/EquipmentCard.d.ts +11 -0
  33. package/lib/components/atoms/EquipmentCard/EquipmentCard.js +65 -0
  34. package/lib/components/atoms/EquipmentCard/EquipmentCard.js.map +1 -0
  35. package/lib/components/atoms/EquipmentLineCard/EquipmentLineCard.d.ts +12 -0
  36. package/lib/components/atoms/EquipmentLineCard/EquipmentLineCard.js +42 -0
  37. package/lib/components/atoms/EquipmentLineCard/EquipmentLineCard.js.map +1 -0
  38. package/lib/components/atoms/InterventionCard/InterventionCard.d.ts +15 -0
  39. package/lib/components/atoms/InterventionCard/InterventionCard.js +97 -0
  40. package/lib/components/atoms/InterventionCard/InterventionCard.js.map +1 -0
  41. package/lib/components/atoms/NoteCard/NoteCard.d.ts +12 -0
  42. package/lib/components/atoms/NoteCard/NoteCard.js +65 -0
  43. package/lib/components/atoms/NoteCard/NoteCard.js.map +1 -0
  44. package/lib/components/atoms/PictureCard/PictureCard.d.ts +10 -0
  45. package/lib/components/atoms/PictureCard/PictureCard.js +71 -0
  46. package/lib/components/atoms/PictureCard/PictureCard.js.map +1 -0
  47. package/lib/components/atoms/QuestionCard/QuestionCard.d.ts +10 -0
  48. package/lib/components/atoms/QuestionCard/QuestionCard.js +67 -0
  49. package/lib/components/atoms/QuestionCard/QuestionCard.js.map +1 -0
  50. package/lib/components/atoms/index.d.ts +6 -0
  51. package/lib/components/atoms/index.js +24 -0
  52. package/lib/components/atoms/index.js.map +1 -0
  53. package/lib/components/index.d.ts +5 -0
  54. package/lib/components/index.js +23 -0
  55. package/lib/components/index.js.map +1 -0
  56. package/lib/components/molecules/DropdownGeneralView/DropdownGeneralView.d.ts +9 -0
  57. package/lib/components/molecules/DropdownGeneralView/DropdownGeneralView.js +32 -0
  58. package/lib/components/molecules/DropdownGeneralView/DropdownGeneralView.js.map +1 -0
  59. package/lib/components/molecules/EquipmentActionCard/EquipmentActionCard.d.ts +19 -0
  60. package/lib/components/molecules/EquipmentActionCard/EquipmentActionCard.js +77 -0
  61. package/lib/components/molecules/EquipmentActionCard/EquipmentActionCard.js.map +1 -0
  62. package/lib/components/molecules/EquipmentDetailsHeader/EquipmentDetailsHeader.d.ts +3 -0
  63. package/lib/components/molecules/EquipmentDetailsHeader/EquipmentDetailsHeader.js +48 -0
  64. package/lib/components/molecules/EquipmentDetailsHeader/EquipmentDetailsHeader.js.map +1 -0
  65. package/lib/components/molecules/GtCard/GtCard.d.ts +11 -0
  66. package/lib/components/molecules/GtCard/GtCard.js +76 -0
  67. package/lib/components/molecules/GtCard/GtCard.js.map +1 -0
  68. package/lib/components/molecules/InterventionDetailCard/InterventionDetailCard.d.ts +19 -0
  69. package/lib/components/molecules/InterventionDetailCard/InterventionDetailCard.js +52 -0
  70. package/lib/components/molecules/InterventionDetailCard/InterventionDetailCard.js.map +1 -0
  71. package/lib/components/molecules/InterventionHeader/InterventionHeader.d.ts +6 -0
  72. package/lib/components/molecules/InterventionHeader/InterventionHeader.js +52 -0
  73. package/lib/components/molecules/InterventionHeader/InterventionHeader.js.map +1 -0
  74. package/lib/components/molecules/NoteDetailCard/NoteDetailCard.d.ts +19 -0
  75. package/lib/components/molecules/NoteDetailCard/NoteDetailCard.js +68 -0
  76. package/lib/components/molecules/NoteDetailCard/NoteDetailCard.js.map +1 -0
  77. package/lib/components/molecules/PicturesRow/PicturesRow.d.ts +10 -0
  78. package/lib/components/molecules/PicturesRow/PicturesRow.js +36 -0
  79. package/lib/components/molecules/PicturesRow/PicturesRow.js.map +1 -0
  80. package/lib/components/molecules/QuestionAdvancedMonitoring/QuestionAdvancedMonitoring.d.ts +9 -0
  81. package/lib/components/molecules/QuestionAdvancedMonitoring/QuestionAdvancedMonitoring.js +31 -0
  82. package/lib/components/molecules/QuestionAdvancedMonitoring/QuestionAdvancedMonitoring.js.map +1 -0
  83. package/lib/components/molecules/QuestionCheckbox/QuestionCheckbox.d.ts +7 -0
  84. package/lib/components/molecules/QuestionCheckbox/QuestionCheckbox.js +36 -0
  85. package/lib/components/molecules/QuestionCheckbox/QuestionCheckbox.js.map +1 -0
  86. package/lib/components/molecules/QuestionList/QuestionList.d.ts +9 -0
  87. package/lib/components/molecules/QuestionList/QuestionList.js +29 -0
  88. package/lib/components/molecules/QuestionList/QuestionList.js.map +1 -0
  89. package/lib/components/molecules/QuestionMeasure/QuestionMeasure.d.ts +9 -0
  90. package/lib/components/molecules/QuestionMeasure/QuestionMeasure.js +39 -0
  91. package/lib/components/molecules/QuestionMeasure/QuestionMeasure.js.map +1 -0
  92. package/lib/components/molecules/index.d.ts +12 -0
  93. package/lib/components/molecules/index.js +30 -0
  94. package/lib/components/molecules/index.js.map +1 -0
  95. package/lib/components/organisms/ClientProspectSearchBar/ClientProspectSearchBar.d.ts +4 -0
  96. package/lib/components/organisms/ClientProspectSearchBar/ClientProspectSearchBar.js +32 -0
  97. package/lib/components/organisms/ClientProspectSearchBar/ClientProspectSearchBar.js.map +1 -0
  98. package/lib/components/organisms/ContractSearchBar/ContractSearchBar.d.ts +4 -0
  99. package/lib/components/organisms/ContractSearchBar/ContractSearchBar.js +35 -0
  100. package/lib/components/organisms/ContractSearchBar/ContractSearchBar.js.map +1 -0
  101. package/lib/components/organisms/DropdownCards/DropdownCards.d.ts +6 -0
  102. package/lib/components/organisms/DropdownCards/DropdownCards.js +45 -0
  103. package/lib/components/organisms/DropdownCards/DropdownCards.js.map +1 -0
  104. package/lib/components/organisms/EquipmentFamilySearchBar/EquipmentFamilySearchBar.d.ts +4 -0
  105. package/lib/components/organisms/EquipmentFamilySearchBar/EquipmentFamilySearchBar.js +35 -0
  106. package/lib/components/organisms/EquipmentFamilySearchBar/EquipmentFamilySearchBar.js.map +1 -0
  107. package/lib/components/organisms/EquipmentModeSwitch/EquipmentModeSwitch.d.ts +5 -0
  108. package/lib/components/organisms/EquipmentModeSwitch/EquipmentModeSwitch.js +50 -0
  109. package/lib/components/organisms/EquipmentModeSwitch/EquipmentModeSwitch.js.map +1 -0
  110. package/lib/components/organisms/InterventionNoteTypePicker/InterventionNoteTypePicker.d.ts +8 -0
  111. package/lib/components/organisms/InterventionNoteTypePicker/InterventionNoteTypePicker.js +32 -0
  112. package/lib/components/organisms/InterventionNoteTypePicker/InterventionNoteTypePicker.js.map +1 -0
  113. package/lib/components/organisms/PlaceEquipmentSearchBar/PlaceEquipmentSearchBar.d.ts +4 -0
  114. package/lib/components/organisms/PlaceEquipmentSearchBar/PlaceEquipmentSearchBar.js +36 -0
  115. package/lib/components/organisms/PlaceEquipmentSearchBar/PlaceEquipmentSearchBar.js.map +1 -0
  116. package/lib/components/organisms/TypePicker/TypePicker.d.ts +4 -0
  117. package/lib/components/organisms/TypePicker/TypePicker.js +29 -0
  118. package/lib/components/organisms/TypePicker/TypePicker.js.map +1 -0
  119. package/lib/components/organisms/index.d.ts +8 -0
  120. package/lib/components/organisms/index.js +26 -0
  121. package/lib/components/organisms/index.js.map +1 -0
  122. package/lib/components/pages/EquipmentView/EquipmentView.d.ts +3 -0
  123. package/lib/components/pages/EquipmentView/EquipmentView.js +161 -0
  124. package/lib/components/pages/EquipmentView/EquipmentView.js.map +1 -0
  125. package/lib/components/pages/GeneralInformationView/GeneralInformationView.d.ts +3 -0
  126. package/lib/components/pages/GeneralInformationView/GeneralInformationView.js +94 -0
  127. package/lib/components/pages/GeneralInformationView/GeneralInformationView.js.map +1 -0
  128. package/lib/components/pages/HistoryView/HistoryView.d.ts +3 -0
  129. package/lib/components/pages/HistoryView/HistoryView.js +33 -0
  130. package/lib/components/pages/HistoryView/HistoryView.js.map +1 -0
  131. package/lib/components/pages/NoteView/NoteView.d.ts +3 -0
  132. package/lib/components/pages/NoteView/NoteView.js +47 -0
  133. package/lib/components/pages/NoteView/NoteView.js.map +1 -0
  134. package/lib/components/pages/SurveyView/SurveyView.d.ts +7 -0
  135. package/lib/components/pages/SurveyView/SurveyView.js +60 -0
  136. package/lib/components/pages/SurveyView/SurveyView.js.map +1 -0
  137. package/lib/components/pages/index.d.ts +5 -0
  138. package/lib/components/pages/index.js +23 -0
  139. package/lib/components/pages/index.js.map +1 -0
  140. package/lib/components/templates/InterventionsListView/InterventionsListView.d.ts +7 -0
  141. package/lib/components/templates/InterventionsListView/InterventionsListView.js +73 -0
  142. package/lib/components/templates/InterventionsListView/InterventionsListView.js.map +1 -0
  143. package/lib/components/templates/LinkEquipmentPopup/LinkEquipmentPopup.d.ts +7 -0
  144. package/lib/components/templates/LinkEquipmentPopup/LinkEquipmentPopup.js +70 -0
  145. package/lib/components/templates/LinkEquipmentPopup/LinkEquipmentPopup.js.map +1 -0
  146. package/lib/components/templates/SurveyRangeNavigation/SurveyRangeNavigation.d.ts +7 -0
  147. package/lib/components/templates/SurveyRangeNavigation/SurveyRangeNavigation.js +76 -0
  148. package/lib/components/templates/SurveyRangeNavigation/SurveyRangeNavigation.js.map +1 -0
  149. package/lib/components/templates/index.d.ts +3 -0
  150. package/lib/components/templates/index.js +21 -0
  151. package/lib/components/templates/index.js.map +1 -0
  152. package/lib/features/asyncFunctions-index.d.ts +9 -0
  153. package/lib/features/asyncFunctions-index.js +27 -0
  154. package/lib/features/asyncFunctions-index.js.map +1 -0
  155. package/lib/features/clientAndProspectSlice.d.ts +7 -0
  156. package/lib/features/clientAndProspectSlice.js +49 -0
  157. package/lib/features/clientAndProspectSlice.js.map +1 -0
  158. package/lib/features/contractSlice.d.ts +7 -0
  159. package/lib/features/contractSlice.js +49 -0
  160. package/lib/features/contractSlice.js.map +1 -0
  161. package/lib/features/equipmentFamilySlice.d.ts +7 -0
  162. package/lib/features/equipmentFamilySlice.js +49 -0
  163. package/lib/features/equipmentFamilySlice.js.map +1 -0
  164. package/lib/features/equipmentLineSlice.d.ts +7 -0
  165. package/lib/features/equipmentLineSlice.js +49 -0
  166. package/lib/features/equipmentLineSlice.js.map +1 -0
  167. package/lib/features/equipmentPictureSlice.d.ts +37 -0
  168. package/lib/features/equipmentPictureSlice.js +67 -0
  169. package/lib/features/equipmentPictureSlice.js.map +1 -0
  170. package/lib/features/equipmentSlice.d.ts +34 -0
  171. package/lib/features/equipmentSlice.js +205 -0
  172. package/lib/features/equipmentSlice.js.map +1 -0
  173. package/lib/features/index.d.ts +9 -0
  174. package/lib/features/index.js +27 -0
  175. package/lib/features/index.js.map +1 -0
  176. package/lib/features/interventionNoteSlice.d.ts +16 -0
  177. package/lib/features/interventionNoteSlice.js +114 -0
  178. package/lib/features/interventionNoteSlice.js.map +1 -0
  179. package/lib/features/interventionSlice.d.ts +21 -0
  180. package/lib/features/interventionSlice.js +140 -0
  181. package/lib/features/interventionSlice.js.map +1 -0
  182. package/lib/features/questionSlice.d.ts +14 -0
  183. package/lib/features/questionSlice.js +104 -0
  184. package/lib/features/questionSlice.js.map +1 -0
  185. package/lib/hooks/use-intervention-header-actions.d.ts +1 -0
  186. package/lib/hooks/use-intervention-header-actions.js +141 -0
  187. package/lib/hooks/use-intervention-header-actions.js.map +1 -0
  188. package/lib/i18n/en.json +106 -0
  189. package/lib/i18n/fr.json +106 -0
  190. package/lib/index.d.ts +7 -0
  191. package/lib/index.js +94 -0
  192. package/lib/index.js.map +1 -0
  193. package/lib/models/forms.d.ts +2 -0
  194. package/lib/models/forms.js +333 -0
  195. package/lib/models/forms.js.map +1 -0
  196. package/lib/models/index.d.ts +5 -0
  197. package/lib/models/index.js +23 -0
  198. package/lib/models/index.js.map +1 -0
  199. package/lib/models/objectFields.d.ts +2 -0
  200. package/lib/models/objectFields.js +143 -0
  201. package/lib/models/objectFields.js.map +1 -0
  202. package/lib/models/searchFields.d.ts +2 -0
  203. package/lib/models/searchFields.js +33 -0
  204. package/lib/models/searchFields.js.map +1 -0
  205. package/lib/models/sortFields.d.ts +2 -0
  206. package/lib/models/sortFields.js +28 -0
  207. package/lib/models/sortFields.js.map +1 -0
  208. package/lib/models/typeObjects.d.ts +2 -0
  209. package/lib/models/typeObjects.js +205 -0
  210. package/lib/models/typeObjects.js.map +1 -0
  211. package/lib/screens/equipment/CustomerParkScreen.d.ts +3 -0
  212. package/lib/screens/equipment/CustomerParkScreen.js +56 -0
  213. package/lib/screens/equipment/CustomerParkScreen.js.map +1 -0
  214. package/lib/screens/equipment/EquipmentFormView.d.ts +6 -0
  215. package/lib/screens/equipment/EquipmentFormView.js +104 -0
  216. package/lib/screens/equipment/EquipmentFormView.js.map +1 -0
  217. package/lib/screens/equipment/EquipmentInterventionListScreen.d.ts +3 -0
  218. package/lib/screens/equipment/EquipmentInterventionListScreen.js +43 -0
  219. package/lib/screens/equipment/EquipmentInterventionListScreen.js.map +1 -0
  220. package/lib/screens/equipment/EquipmentLineListScreen.d.ts +3 -0
  221. package/lib/screens/equipment/EquipmentLineListScreen.js +37 -0
  222. package/lib/screens/equipment/EquipmentLineListScreen.js.map +1 -0
  223. package/lib/screens/equipment/EquipmentPictureScreen.d.ts +3 -0
  224. package/lib/screens/equipment/EquipmentPictureScreen.js +113 -0
  225. package/lib/screens/equipment/EquipmentPictureScreen.js.map +1 -0
  226. package/lib/screens/equipment/index.d.ts +45 -0
  227. package/lib/screens/equipment/index.js +61 -0
  228. package/lib/screens/equipment/index.js.map +1 -0
  229. package/lib/screens/intervention/ActiveInterventionScreen.d.ts +3 -0
  230. package/lib/screens/intervention/ActiveInterventionScreen.js +72 -0
  231. package/lib/screens/intervention/ActiveInterventionScreen.js.map +1 -0
  232. package/lib/screens/intervention/DayInterventionsScreen.d.ts +3 -0
  233. package/lib/screens/intervention/DayInterventionsScreen.js +33 -0
  234. package/lib/screens/intervention/DayInterventionsScreen.js.map +1 -0
  235. package/lib/screens/intervention/InterventionDetailsScreen.d.ts +7 -0
  236. package/lib/screens/intervention/InterventionDetailsScreen.js +83 -0
  237. package/lib/screens/intervention/InterventionDetailsScreen.js.map +1 -0
  238. package/lib/screens/intervention/InterventionNoteFormScreen.d.ts +6 -0
  239. package/lib/screens/intervention/InterventionNoteFormScreen.js +81 -0
  240. package/lib/screens/intervention/InterventionNoteFormScreen.js.map +1 -0
  241. package/lib/screens/intervention/InterventionQuestionFormScreen.d.ts +6 -0
  242. package/lib/screens/intervention/InterventionQuestionFormScreen.js +114 -0
  243. package/lib/screens/intervention/InterventionQuestionFormScreen.js.map +1 -0
  244. package/lib/screens/intervention/InterventionsHistoryScreen.d.ts +3 -0
  245. package/lib/screens/intervention/InterventionsHistoryScreen.js +29 -0
  246. package/lib/screens/intervention/InterventionsHistoryScreen.js.map +1 -0
  247. package/lib/screens/intervention/PlannedInterventionsScreen.d.ts +3 -0
  248. package/lib/screens/intervention/PlannedInterventionsScreen.js +29 -0
  249. package/lib/screens/intervention/PlannedInterventionsScreen.js.map +1 -0
  250. package/lib/screens/intervention/index.d.ts +79 -0
  251. package/lib/screens/intervention/index.js +89 -0
  252. package/lib/screens/intervention/index.js.map +1 -0
  253. package/lib/types/equipment.d.ts +7 -0
  254. package/lib/types/equipment.js +25 -0
  255. package/lib/types/equipment.js.map +1 -0
  256. package/lib/types/index.d.ts +3 -0
  257. package/lib/types/index.js +21 -0
  258. package/lib/types/index.js.map +1 -0
  259. package/lib/types/intervention.d.ts +4 -0
  260. package/lib/types/intervention.js +38 -0
  261. package/lib/types/intervention.js.map +1 -0
  262. package/lib/types/question.d.ts +4 -0
  263. package/lib/types/question.js +44 -0
  264. package/lib/types/question.js.map +1 -0
  265. package/lib/utils/form-types.d.ts +9 -0
  266. package/lib/utils/form-types.js +19 -0
  267. package/lib/utils/form-types.js.map +1 -0
  268. package/lib/utils/index.d.ts +1 -0
  269. package/lib/utils/index.js +19 -0
  270. package/lib/utils/index.js.map +1 -0
  271. package/package.json +47 -0
@@ -0,0 +1,94 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useEffect, useState } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { calculateDiff, getNowDateZonesISOString, Stopwatch, useDispatch, usePermitted, useSelector, useTranslator, useTypes, } from '@axelor/aos-mobile-core';
21
+ import { HeaderContainer, ScrollView } from '@axelor/aos-mobile-ui';
22
+ import { GtCard, InterventionHeader } from '../../molecules';
23
+ import { DropdownCards } from '../../organisms';
24
+ import { Intervention as InterventionType } from '../../../types';
25
+ import { updateInterventionStatus } from '../../../features/interventionSlice';
26
+ const NUMBER_MILLISECONDS_IN_SECOND = 1000;
27
+ const GeneralInformationView = ({}) => {
28
+ const I18n = useTranslator();
29
+ const dispatch = useDispatch();
30
+ const { readonly } = usePermitted({
31
+ modelName: 'com.axelor.apps.intervention.db.Intervention',
32
+ });
33
+ const { Intervention } = useTypes();
34
+ const { intervention } = useSelector((state) => state.intervention_intervention);
35
+ const [duration, setDuration] = useState(intervention.totalDuration * NUMBER_MILLISECONDS_IN_SECOND);
36
+ const [lastStart, setLastStart] = useState(intervention.lastStartDateTime);
37
+ useEffect(() => {
38
+ setDuration(intervention.totalDuration * NUMBER_MILLISECONDS_IN_SECOND);
39
+ setLastStart(intervention.lastStartDateTime);
40
+ }, [intervention]);
41
+ const getDuration = useCallback(() => {
42
+ if (intervention.statusSelect === Intervention?.statusSelect.Started) {
43
+ return duration + calculateDiff(lastStart, new Date());
44
+ }
45
+ return duration;
46
+ }, [
47
+ Intervention?.statusSelect,
48
+ duration,
49
+ intervention.statusSelect,
50
+ lastStart,
51
+ ]);
52
+ const updateIntervention = useCallback((targetStatus) => {
53
+ dispatch(updateInterventionStatus({
54
+ interventionId: intervention.id,
55
+ version: intervention.version,
56
+ targetStatus,
57
+ }));
58
+ }, [dispatch, intervention.id, intervention.version]);
59
+ const handlePlay = useCallback(() => {
60
+ updateIntervention(Intervention?.statusSelect.Started);
61
+ setLastStart(getNowDateZonesISOString());
62
+ }, [Intervention?.statusSelect, updateIntervention]);
63
+ const handlePause = useCallback(() => {
64
+ updateIntervention(Intervention?.statusSelect.Suspended);
65
+ setDuration(current => current + calculateDiff(lastStart, new Date()));
66
+ }, [Intervention?.statusSelect, lastStart, updateIntervention]);
67
+ const handleStop = useCallback(() => {
68
+ updateIntervention(Intervention?.statusSelect.Finished);
69
+ }, [Intervention?.statusSelect, updateIntervention]);
70
+ return (<View>
71
+ <HeaderContainer expandableFilter={false} fixedItems={<InterventionHeader intervention={intervention}/>}/>
72
+ <ScrollView style={styles.scrollView}>
73
+ <GtCard titleKey={'Intervention_MaxGIT'} maxDate={intervention.customerRequest?.maxGitDateTime} realGt={intervention.customerRequest?.realGit} plannedGt={intervention.contract?.guaranteedInterventionTime} interventionStatus={intervention.statusSelect} gtStatus={Intervention?.statusSelect.Started}/>
74
+ <GtCard titleKey={'Intervention_MaxGRT'} maxDate={intervention.customerRequest?.maxGrtDateTime} realGt={intervention.customerRequest?.realGrt} plannedGt={intervention.contract?.guaranteedRecoveryTime} interventionStatus={intervention.statusSelect} gtStatus={Intervention?.statusSelect.Finished}/>
75
+ <DropdownCards intervention={intervention}/>
76
+ <Stopwatch style={styles.stopwatch} disable={readonly} startTime={getDuration()} status={InterventionType.getStopwatchStatus(intervention.statusSelect)} timerFormat={I18n.t('Intervention_TimerFormat')} onPlay={handlePlay} onPause={handlePause} onStop={handleStop} disableStop={intervention.statusSelect !== Intervention?.statusSelect.Started} useObjectStatus hideCancel/>
77
+ </ScrollView>
78
+ </View>);
79
+ };
80
+ const styles = StyleSheet.create({
81
+ scrollView: {
82
+ alignItems: 'center',
83
+ },
84
+ dropdownCardTitle: {
85
+ fontWeight: 'bold',
86
+ },
87
+ stopwatch: {
88
+ width: '90%',
89
+ marginTop: 30,
90
+ marginVertical: 0,
91
+ },
92
+ });
93
+ export default GeneralInformationView;
94
+ //# sourceMappingURL=GeneralInformationView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeneralInformationView.js","sourceRoot":"","sources":["../../../../src/components/pages/GeneralInformationView/GeneralInformationView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,GACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,eAAe,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAC,MAAM,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,IAAI,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAC,wBAAwB,EAAC,MAAM,qCAAqC,CAAC;AAE7E,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,sBAAsB,GAAG,CAAC,EAAE,EAAE,EAAE;IACpC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAC,QAAQ,EAAC,GAAG,YAAY,CAAC;QAC9B,SAAS,EAAE,8CAA8C;KAC1D,CAAC,CAAC;IACH,MAAM,EAAC,YAAY,EAAC,GAAG,QAAQ,EAAE,CAAC;IAElC,MAAM,EAAC,YAAY,EAAC,GAAG,WAAW,CAChC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAChD,CAAC;IAEF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CACtC,YAAY,CAAC,aAAa,GAAG,6BAA6B,CAC3D,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,YAAY,CAAC,aAAa,GAAG,6BAA6B,CAAC,CAAC;QACxE,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE;YACpE,OAAO,QAAQ,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;SACxD;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE;QACD,YAAY,EAAE,YAAY;QAC1B,QAAQ;QACR,YAAY,CAAC,YAAY;QACzB,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,YAAoB,EAAE,EAAE;QACvB,QAAQ,CACL,wBAAgC,CAAC;YAChC,cAAc,EAAE,YAAY,CAAC,EAAE;YAC/B,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,YAAY;SACb,CAAC,CACH,CAAC;IACJ,CAAC,EACD,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAClD,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACvD,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAErD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzD,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAErD,OAAO,CACL,CAAC,IAAI,CACH;MAAA,CAAC,eAAe,CACd,gBAAgB,CAAC,CAAC,KAAK,CAAC,CACxB,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EAAG,CAAC,EAEjE;MAAA,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACnC;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAChC,OAAO,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,cAAc,CAAC,CACtD,MAAM,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAC9C,SAAS,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAC7D,kBAAkB,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAC9C,QAAQ,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,EAE/C;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAChC,OAAO,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,cAAc,CAAC,CACtD,MAAM,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAC9C,SAAS,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CACzD,kBAAkB,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAC9C,QAAQ,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EAEhD;QAAA,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EAC1C;QAAA,CAAC,SAAS,CACR,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CACxB,OAAO,CAAC,CAAC,QAAQ,CAAC,CAClB,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CACzB,MAAM,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CACzC,YAAY,CAAC,YAAY,CAC1B,CAAC,CACF,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAChD,MAAM,CAAC,CAAC,UAAU,CAAC,CACnB,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,MAAM,CAAC,CAAC,UAAU,CAAC,CACnB,WAAW,CAAC,CACV,YAAY,CAAC,YAAY,KAAK,YAAY,EAAE,YAAY,CAAC,OAAO,CACjE,CACD,eAAe,CACf,UAAU,EAEd;MAAA,EAAE,UAAU,CACd;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE;QACV,UAAU,EAAE,QAAQ;KACrB;IACD,iBAAiB,EAAE;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,EAAE;QACb,cAAc,EAAE,CAAC;KAClB;CACF,CAAC,CAAC;AAEH,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const HistoryView: ({}: {}) => React.JSX.Element;
3
+ export default HistoryView;
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useMemo } from 'react';
19
+ import { clipboardProvider, SearchListView, useSelector, useTranslator, useTypes, } from '@axelor/aos-mobile-core';
20
+ import { InterventionDetailCard, InterventionHeader } from '../../molecules';
21
+ import { fetchIntervention } from '../../../features/interventionSlice';
22
+ const HistoryView = ({}) => {
23
+ const I18n = useTranslator();
24
+ const { Intervention } = useTypes();
25
+ const { loading, moreLoading, isListEnd, interventionList, intervention } = useSelector((state) => state.intervention_intervention);
26
+ const sliceFunctionData = useMemo(() => ({
27
+ deliveredPartnerId: intervention.deliveredPartner?.id,
28
+ statusList: [Intervention?.statusSelect.Finished],
29
+ }), [Intervention?.statusSelect, intervention.deliveredPartner?.id]);
30
+ return (<SearchListView list={interventionList} loading={loading} moreLoading={moreLoading} isListEnd={isListEnd} sliceFunction={fetchIntervention} sliceFunctionData={sliceFunctionData} searchPlaceholder={I18n.t('Base_Search')} headerTopChildren={<InterventionHeader intervention={intervention}/>} renderListItem={({ item }) => (<InterventionDetailCard intervention={item} isCopyCard={true} onPress={() => clipboardProvider.copyToClipboard(item.sequence)}/>)}/>);
31
+ };
32
+ export default HistoryView;
33
+ //# sourceMappingURL=HistoryView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HistoryView.js","sourceRoot":"","sources":["../../../../src/components/pages/HistoryView/HistoryView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,aAAa,EACb,QAAQ,GACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAC,iBAAiB,EAAC,MAAM,qCAAqC,CAAC;AAEtE,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE;IACzB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,EAAC,YAAY,EAAC,GAAG,QAAQ,EAAE,CAAC;IAElC,MAAM,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAC,GACrE,WAAW,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAE/D,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACL,kBAAkB,EAAE,YAAY,CAAC,gBAAgB,EAAE,EAAE;QACrD,UAAU,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;KAClD,CAAC,EACF,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAChE,CAAC;IAEF,OAAO,CACL,CAAC,cAAc,CACb,IAAI,CAAC,CAAC,gBAAgB,CAAC,CACvB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,aAAa,CAAC,CAAC,iBAAiB,CAAC,CACjC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CACrC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CACzC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EAAG,CAAC,CACtE,cAAc,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CAC1B,CAAC,sBAAsB,CACrB,YAAY,CAAC,CAAC,IAAI,CAAC,CACnB,UAAU,CAAC,CAAC,IAAI,CAAC,CACjB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAChE,CACH,CAAC,EACF,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const NoteView: ({}: {}) => React.JSX.Element;
3
+ export default NoteView;
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useMemo, useState } from 'react';
19
+ import { SearchListView, useNavigation, usePermitted, useSelector, useTranslator, } from '@axelor/aos-mobile-core';
20
+ import { InterventionHeader, NoteDetailCard } from '../../molecules';
21
+ import { InterventionNoteTypePicker } from '../../organisms';
22
+ import { fetchInterventionNote } from '../../../features/interventionNoteSlice';
23
+ const NoteView = ({}) => {
24
+ const I18n = useTranslator();
25
+ const navigation = useNavigation();
26
+ const { readonly, canCreate, canDelete } = usePermitted({
27
+ modelName: 'com.axelor.apps.intervention.db.InterventionNote',
28
+ });
29
+ const [selectedNoteTypeId, setSelectedNoteTypeId] = useState(null);
30
+ const { loading, moreLoading, isListEnd, interventionNoteList } = useSelector((state) => state.intervention_interventionNote);
31
+ const { intervention } = useSelector((state) => state.intervention_intervention);
32
+ const sliceFunctionData = useMemo(() => ({
33
+ deliveredPartnerId: intervention.deliveredPartner?.id,
34
+ noteTypeId: selectedNoteTypeId,
35
+ }), [intervention.deliveredPartner?.id, selectedNoteTypeId]);
36
+ return (<SearchListView list={interventionNoteList} loading={loading} moreLoading={moreLoading} isListEnd={isListEnd} sliceFunction={fetchInterventionNote} sliceFunctionData={sliceFunctionData} searchPlaceholder={I18n.t('Base_Search')} headerTopChildren={<InterventionHeader intervention={intervention}/>} headerChildren={<InterventionNoteTypePicker onChange={noteType => setSelectedNoteTypeId(noteType?.id)}/>} renderListItem={({ item }) => (<NoteDetailCard note={item} canDelete={canDelete} canEdit={!readonly}/>)} actionList={canCreate
37
+ ? [
38
+ {
39
+ iconName: 'plus',
40
+ title: I18n.t('Intervention_CreateNote'),
41
+ onPress: () => navigation.navigate('InterventionNoteFormScreen'),
42
+ },
43
+ ]
44
+ : []}/>);
45
+ };
46
+ export default NoteView;
47
+ //# sourceMappingURL=NoteView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoteView.js","sourceRoot":"","sources":["../../../../src/components/pages/NoteView/NoteView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,kBAAkB,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,0BAA0B,EAAC,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAC,qBAAqB,EAAC,MAAM,yCAAyC,CAAC;AAE9E,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE;IACtB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAC,GAAG,YAAY,CAAC;QACpD,SAAS,EAAE,kDAAkD;KAC9D,CAAC,CAAC;IAEH,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnE,MAAM,EAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAC,GAAG,WAAW,CACzE,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,6BAA6B,CACpD,CAAC;IACF,MAAM,EAAC,YAAY,EAAC,GAAG,WAAW,CAChC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAChD,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACL,kBAAkB,EAAE,YAAY,CAAC,gBAAgB,EAAE,EAAE;QACrD,UAAU,EAAE,kBAAkB;KAC/B,CAAC,EACF,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,EAAE,kBAAkB,CAAC,CACxD,CAAC;IAEF,OAAO,CACL,CAAC,cAAc,CACb,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,aAAa,CAAC,CAAC,qBAAqB,CAAC,CACrC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CACrC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CACzC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EAAG,CAAC,CACtE,cAAc,CAAC,CACb,CAAC,0BAA0B,CACzB,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAC1D,CACH,CACD,cAAc,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CAC1B,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAG,CACzE,CAAC,CACF,UAAU,CAAC,CACT,SAAS;YACP,CAAC,CAAC;gBACE;oBACE,QAAQ,EAAE,MAAM;oBAChB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;oBACxC,OAAO,EAAE,GAAG,EAAE,CACZ,UAAU,CAAC,QAAQ,CAAC,4BAA4B,CAAC;iBACpD;aACF;YACH,CAAC,CAAC,EAAE,CACP,EACD,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface SurveyViewProps {
3
+ selectedRangeId: number;
4
+ onChangeRangeId: (rangeId: number) => void;
5
+ }
6
+ declare const SurveyView: ({ selectedRangeId, onChangeRangeId }: SurveyViewProps) => React.JSX.Element;
7
+ export default SurveyView;
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { useDispatch, useNavigation, useSelector, useTranslator, } from '@axelor/aos-mobile-core';
21
+ import { HeaderContainer, ScrollList } from '@axelor/aos-mobile-ui';
22
+ import { QuestionCard } from '../../atoms';
23
+ import { InterventionHeader } from '../../molecules';
24
+ import { SurveyRangeNavigation } from '../../templates';
25
+ import { fetchQuestion } from '../../../features/questionSlice';
26
+ import { Question } from '../../../types';
27
+ const SurveyView = ({ selectedRangeId, onChangeRangeId }) => {
28
+ const I18n = useTranslator();
29
+ const dispatch = useDispatch();
30
+ const navigation = useNavigation();
31
+ const { intervention } = useSelector((state) => state.intervention_intervention);
32
+ const { loading, moreLoading, isListEnd, questionlist } = useSelector((state) => state.intervention_question);
33
+ const fetchQuestionAPI = useCallback((page = 0) => {
34
+ dispatch(fetchQuestion({
35
+ interventionId: intervention.id,
36
+ rangeId: selectedRangeId,
37
+ page: page,
38
+ }));
39
+ }, [dispatch, intervention, selectedRangeId]);
40
+ const getQuestionStatus = useCallback(question => {
41
+ return Question.getStatus(question, questionlist.find(q => q.id === question.conditionalInterventionQuestion?.id));
42
+ }, [questionlist]);
43
+ return (<View style={styles.flexOne}>
44
+ <HeaderContainer expandableFilter={false} fixedItems={<>
45
+ <InterventionHeader intervention={intervention}/>
46
+ <SurveyRangeNavigation selectedRangeId={selectedRangeId} onChangeRangeId={onChangeRangeId}/>
47
+ </>}/>
48
+ <ScrollList loadingList={loading} data={questionlist} renderItem={({ item }) => (<QuestionCard status={getQuestionStatus(item)} onPress={() => navigation.navigate('InterventionQuestionFormScreen', {
49
+ questionId: item.id,
50
+ rangeId: selectedRangeId,
51
+ })} {...item}/>)} fetchData={fetchQuestionAPI} moreLoading={moreLoading} isListEnd={isListEnd} translator={I18n.t}/>
52
+ </View>);
53
+ };
54
+ const styles = StyleSheet.create({
55
+ flexOne: {
56
+ flex: 1,
57
+ },
58
+ });
59
+ export default SurveyView;
60
+ //# sourceMappingURL=SurveyView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyView.js","sourceRoot":"","sources":["../../../../src/components/pages/SurveyView/SurveyView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { default as EquipmentView } from './EquipmentView/EquipmentView';
2
+ export { default as GeneralInformationView } from './GeneralInformationView/GeneralInformationView';
3
+ export { default as HistoryView } from './HistoryView/HistoryView';
4
+ export { default as NoteView } from './NoteView/NoteView';
5
+ export { default as SurveyView } from './SurveyView/SurveyView';
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ export { default as EquipmentView } from './EquipmentView/EquipmentView';
19
+ export { default as GeneralInformationView } from './GeneralInformationView/GeneralInformationView';
20
+ export { default as HistoryView } from './HistoryView/HistoryView';
21
+ export { default as NoteView } from './NoteView/NoteView';
22
+ export { default as SurveyView } from './SurveyView/SurveyView';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,OAAO,IAAI,sBAAsB,EAAC,MAAM,iDAAiD,CAAC;AAClG,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,OAAO,IAAI,UAAU,EAAC,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface InterventionsListViewProps {
3
+ statusList: number[];
4
+ defaultDate?: Date;
5
+ }
6
+ declare const InterventionsListView: ({ statusList, defaultDate, }: InterventionsListViewProps) => React.JSX.Element;
7
+ export default InterventionsListView;
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useEffect, useMemo, useState } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { DateInput, filterChip, SearchListView, useNavigation, useSelector, useTranslator, useTypes, useTypeHelpers, } from '@axelor/aos-mobile-core';
21
+ import { ChipSelect, ToggleButton } from '@axelor/aos-mobile-ui';
22
+ import { InterventionDetailCard } from '../../molecules';
23
+ import { fetchIntervention } from '../../../features/interventionSlice';
24
+ const InterventionsListView = ({ statusList, defaultDate, }) => {
25
+ const I18n = useTranslator();
26
+ const navigation = useNavigation();
27
+ const { Intervention } = useTypes();
28
+ const { getSelectionItems } = useTypeHelpers();
29
+ const { loading, moreLoading, isListEnd, interventionList } = useSelector((state) => state.intervention_intervention);
30
+ const { userId } = useSelector((state) => state.auth);
31
+ const [filteredList, setFilteredList] = useState(interventionList);
32
+ const [selectedStatus, setSelectedStatus] = useState([]);
33
+ const [selectedDate, setSelectedDate] = useState(defaultDate);
34
+ const [isAssignedToMe, setIsAssignedToMe] = useState(true);
35
+ useEffect(() => setFilteredList(filterChip(interventionList, selectedStatus, 'statusSelect')), [interventionList, selectedStatus]);
36
+ const sliceFunctionData = useMemo(() => ({
37
+ userId: isAssignedToMe ? userId : null,
38
+ date: selectedDate,
39
+ statusList: statusList,
40
+ }), [isAssignedToMe, selectedDate, statusList, userId]);
41
+ const interventionStatusList = useMemo(() => getSelectionItems(Intervention?.statusSelect, selectedStatus).filter(({ value }) => statusList.includes(value)), [Intervention?.statusSelect, getSelectionItems, selectedStatus, statusList]);
42
+ const handleItemPress = item => {
43
+ item &&
44
+ navigation.navigate('InterventionDetailsScreen', {
45
+ interventionId: item.id,
46
+ });
47
+ };
48
+ return (<SearchListView list={filteredList} loading={loading} moreLoading={moreLoading} isListEnd={isListEnd} sliceFunction={fetchIntervention} sliceFunctionData={sliceFunctionData} onChangeSearchValue={handleItemPress} searchPlaceholder={I18n.t('Base_Search')} headerChildren={<View style={styles.headerContainer}>
49
+ <ToggleButton isActive={isAssignedToMe} onPress={() => setIsAssignedToMe(current => !current)} buttonConfig={{
50
+ iconName: 'person-fill',
51
+ width: '10%',
52
+ style: styles.toggleButton,
53
+ }}/>
54
+ <DateInput style={styles.dateInput} mode="date" popup nullable={true} defaultDate={selectedDate} onDateChange={date => setSelectedDate(date)}/>
55
+ </View>} chipComponent={<ChipSelect mode="multi" onChangeValue={setSelectedStatus} selectionItems={interventionStatusList}/>} renderListItem={({ item }) => (<InterventionDetailCard intervention={item} onPress={() => handleItemPress(item)}/>)}/>);
56
+ };
57
+ const styles = StyleSheet.create({
58
+ headerContainer: {
59
+ width: '90%',
60
+ flexDirection: 'row',
61
+ justifyContent: 'space-between',
62
+ alignSelf: 'center',
63
+ alignItems: 'center',
64
+ },
65
+ toggleButton: {
66
+ height: 40,
67
+ },
68
+ dateInput: {
69
+ width: '85%',
70
+ },
71
+ });
72
+ export default InterventionsListView;
73
+ //# sourceMappingURL=InterventionsListView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterventionsListView.js","sourceRoot":"","sources":["../../../../src/components/templates/InterventionsListView/InterventionsListView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ declare const LinkEquipmentPopup: ({ style, visible, onClose, }: {
3
+ style?: any;
4
+ visible: boolean;
5
+ onClose: () => void;
6
+ }) => React.JSX.Element;
7
+ export default LinkEquipmentPopup;
@@ -0,0 +1,70 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useState } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { Alert, AutoCompleteSearch } from '@axelor/aos-mobile-ui';
21
+ import { displayItemName, useDispatch, useSelector, useTranslator, } from '@axelor/aos-mobile-core';
22
+ import { linkEquipment } from '../../../features/interventionSlice';
23
+ import { searchEquipmentToLink } from '../../../features/equipmentSlice';
24
+ const LinkEquipmentPopup = ({ style, visible, onClose, }) => {
25
+ const I18n = useTranslator();
26
+ const dispatch = useDispatch();
27
+ const { intervention } = useSelector((state) => state.intervention_intervention);
28
+ const { loadingListEquipToLink, moreLoadingEquipToLink, isListEndEquipToLink, equipmentToLinkList, } = useSelector((state) => state.intervention_equipment);
29
+ const [selectedEquipment, setSelectedEquipment] = useState(null);
30
+ const searchEquipmentAPI = useCallback(({ page = 0, searchValue }) => {
31
+ dispatch(searchEquipmentToLink({
32
+ page,
33
+ searchValue,
34
+ equipmentSet: intervention.equipmentSet.map(equipment => equipment.id),
35
+ partnerId: intervention.deliveredPartner?.id,
36
+ }));
37
+ }, [dispatch, intervention]);
38
+ const handleLinkEquipment = useCallback(() => {
39
+ dispatch(linkEquipment({
40
+ interventionId: intervention.id,
41
+ interventionVersion: intervention.version,
42
+ equipmentId: selectedEquipment?.id,
43
+ }));
44
+ setSelectedEquipment(null);
45
+ onClose();
46
+ }, [
47
+ dispatch,
48
+ intervention.id,
49
+ intervention.version,
50
+ onClose,
51
+ selectedEquipment?.id,
52
+ ]);
53
+ return (<Alert style={style} visible={visible} cancelButtonConfig={{ onPress: onClose }} confirmButtonConfig={{
54
+ title: I18n.t('Base_Add'),
55
+ onPress: handleLinkEquipment,
56
+ disabled: selectedEquipment == null,
57
+ }} translator={I18n.t}>
58
+ <View style={styles.container}>
59
+ <AutoCompleteSearch title={I18n.t('Intervention_Equipment')} objectList={equipmentToLinkList} value={selectedEquipment} onChangeValue={setSelectedEquipment} fetchData={searchEquipmentAPI} displayValue={displayItemName} placeholder={I18n.t('Intervention_Equipment')} showDetailsPopup={true} loadingList={loadingListEquipToLink} moreLoading={moreLoadingEquipToLink} isListEnd={isListEndEquipToLink}/>
60
+ </View>
61
+ </Alert>);
62
+ };
63
+ const styles = StyleSheet.create({
64
+ container: {
65
+ flexDirection: 'column',
66
+ width: '100%',
67
+ },
68
+ });
69
+ export default LinkEquipmentPopup;
70
+ //# sourceMappingURL=LinkEquipmentPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkEquipmentPopup.js","sourceRoot":"","sources":["../../../../src/components/templates/LinkEquipmentPopup/LinkEquipmentPopup.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface SurveyRangeNavigationProps {
3
+ selectedRangeId: number;
4
+ onChangeRangeId: (rangeId: number) => void;
5
+ }
6
+ declare const SurveyRangeNavigation: ({ selectedRangeId, onChangeRangeId, }: SurveyRangeNavigationProps) => React.JSX.Element;
7
+ export default SurveyRangeNavigation;
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback } from 'react';
19
+ import { Dimensions, StyleSheet, View } from 'react-native';
20
+ import { useSelector } from '@axelor/aos-mobile-core';
21
+ import { Button, Picker } from '@axelor/aos-mobile-ui';
22
+ const BUTTON_SIZE = 40;
23
+ const ARROW_TYPE = {
24
+ Previous: 0,
25
+ Next: 1,
26
+ };
27
+ const SurveyRangeNavigation = ({ selectedRangeId, onChangeRangeId, }) => {
28
+ const { rangeList } = useSelector((state) => state.intervention_question);
29
+ const isArrowDisabled = useCallback(arrowType => {
30
+ if (!Array.isArray(rangeList) || rangeList.length === 0) {
31
+ return true;
32
+ }
33
+ else if (selectedRangeId == null) {
34
+ return true;
35
+ }
36
+ const index = arrowType === ARROW_TYPE.Previous ? 0 : rangeList.length - 1;
37
+ return (rangeList.findIndex(range => range.id === selectedRangeId) === index);
38
+ }, [rangeList, selectedRangeId]);
39
+ const displayValue = item => item?.equipment
40
+ ? `${item?.equipment.name} - ${item.rangeVal?.title}`
41
+ : item.rangeVal?.title;
42
+ const handleChangeRange = (arrowType) => {
43
+ const selectedRangeIdx = rangeList.findIndex(range => range.id === selectedRangeId);
44
+ let newRange = rangeList[0];
45
+ if (arrowType === ARROW_TYPE.Previous) {
46
+ newRange = rangeList[selectedRangeIdx - 1];
47
+ }
48
+ else {
49
+ newRange = rangeList[selectedRangeIdx + 1];
50
+ }
51
+ onChangeRangeId(newRange.id);
52
+ };
53
+ return (<View style={styles.container}>
54
+ <Button style={styles.button} iconName="chevron-left" onPress={() => handleChangeRange(ARROW_TYPE.Previous)} disabled={isArrowDisabled(ARROW_TYPE.Previous)}/>
55
+ <Picker style={styles.picker} listItems={rangeList} displayValue={displayValue} valueField="id" defaultValue={selectedRangeId} onValueChange={onChangeRangeId}/>
56
+ <Button style={styles.button} iconName="chevron-right" onPress={() => handleChangeRange(ARROW_TYPE.Next)} disabled={isArrowDisabled(ARROW_TYPE.Next)}/>
57
+ </View>);
58
+ };
59
+ const styles = StyleSheet.create({
60
+ container: {
61
+ flexDirection: 'row',
62
+ justifyContent: 'space-between',
63
+ alignSelf: 'center',
64
+ width: '90%',
65
+ },
66
+ button: {
67
+ width: BUTTON_SIZE,
68
+ height: BUTTON_SIZE,
69
+ marginVertical: 0,
70
+ },
71
+ picker: {
72
+ width: Dimensions.get('window').width * 0.9 - (2 * BUTTON_SIZE + 10),
73
+ },
74
+ });
75
+ export default SurveyRangeNavigation;
76
+ //# sourceMappingURL=SurveyRangeNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SurveyRangeNavigation.js","sourceRoot":"","sources":["../../../../src/components/templates/SurveyRangeNavigation/SurveyRangeNavigation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { default as InterventionsListView } from './InterventionsListView/InterventionsListView';
2
+ export { default as LinkEquipmentPopup } from './LinkEquipmentPopup/LinkEquipmentPopup';
3
+ export { default as SurveyRangeNavigation } from './SurveyRangeNavigation/SurveyRangeNavigation';
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2024 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ export { default as InterventionsListView } from './InterventionsListView/InterventionsListView';
19
+ export { default as LinkEquipmentPopup } from './LinkEquipmentPopup/LinkEquipmentPopup';
20
+ export { default as SurveyRangeNavigation } from './SurveyRangeNavigation/SurveyRangeNavigation';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,OAAO,IAAI,qBAAqB,EAAC,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAC,OAAO,IAAI,qBAAqB,EAAC,MAAM,+CAA+C,CAAC"}