@axelor/aos-mobile-helpdesk 7.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 (142) hide show
  1. package/README.md +44 -0
  2. package/lib/api/customer-api.d.ts +11 -0
  3. package/lib/api/customer-api.js +57 -0
  4. package/lib/api/customer-api.js.map +1 -0
  5. package/lib/api/helpdesk-config-api.d.ts +1 -0
  6. package/lib/api/helpdesk-config-api.js +23 -0
  7. package/lib/api/helpdesk-config-api.js.map +1 -0
  8. package/lib/api/project-api.d.ts +4 -0
  9. package/lib/api/project-api.js +31 -0
  10. package/lib/api/project-api.js.map +1 -0
  11. package/lib/api/ticket-api.d.ts +26 -0
  12. package/lib/api/ticket-api.js +99 -0
  13. package/lib/api/ticket-api.js.map +1 -0
  14. package/lib/api/timer-api.d.ts +6 -0
  15. package/lib/api/timer-api.js +44 -0
  16. package/lib/api/timer-api.js.map +1 -0
  17. package/lib/api/user-api.d.ts +4 -0
  18. package/lib/api/user-api.js +31 -0
  19. package/lib/api/user-api.js.map +1 -0
  20. package/lib/components/index.d.ts +2 -0
  21. package/lib/components/index.js +20 -0
  22. package/lib/components/index.js.map +1 -0
  23. package/lib/components/molecules/DurationFormInput/DurationFormInput.d.ts +8 -0
  24. package/lib/components/molecules/DurationFormInput/DurationFormInput.js +73 -0
  25. package/lib/components/molecules/DurationFormInput/DurationFormInput.js.map +1 -0
  26. package/lib/components/molecules/DurationFormInput/duration.helpers.d.ts +9 -0
  27. package/lib/components/molecules/DurationFormInput/duration.helpers.js +44 -0
  28. package/lib/components/molecules/DurationFormInput/duration.helpers.js.map +1 -0
  29. package/lib/components/molecules/ProgressFormInput/ProgressFormInput.d.ts +9 -0
  30. package/lib/components/molecules/ProgressFormInput/ProgressFormInput.js +31 -0
  31. package/lib/components/molecules/ProgressFormInput/ProgressFormInput.js.map +1 -0
  32. package/lib/components/molecules/TicketCard/TicketCard.d.ts +17 -0
  33. package/lib/components/molecules/TicketCard/TicketCard.js +87 -0
  34. package/lib/components/molecules/TicketCard/TicketCard.js.map +1 -0
  35. package/lib/components/molecules/index.d.ts +3 -0
  36. package/lib/components/molecules/index.js +21 -0
  37. package/lib/components/molecules/index.js.map +1 -0
  38. package/lib/components/templates/ContactPartnerSearchBar/ContactPartnerSearchBar.d.ts +15 -0
  39. package/lib/components/templates/ContactPartnerSearchBar/ContactPartnerSearchBar.js +56 -0
  40. package/lib/components/templates/ContactPartnerSearchBar/ContactPartnerSearchBar.js.map +1 -0
  41. package/lib/components/templates/CustomerSearchBar/CustomerSearchBar.d.ts +15 -0
  42. package/lib/components/templates/CustomerSearchBar/CustomerSearchBar.js +52 -0
  43. package/lib/components/templates/CustomerSearchBar/CustomerSearchBar.js.map +1 -0
  44. package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.d.ts +15 -0
  45. package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.js +52 -0
  46. package/lib/components/templates/ProjectSearchBar/ProjectSearchBar.js.map +1 -0
  47. package/lib/components/templates/TicketDropdownCards/DropdownGeneralView.d.ts +8 -0
  48. package/lib/components/templates/TicketDropdownCards/DropdownGeneralView.js +42 -0
  49. package/lib/components/templates/TicketDropdownCards/DropdownGeneralView.js.map +1 -0
  50. package/lib/components/templates/TicketDropdownCards/DropdownTimingView.d.ts +7 -0
  51. package/lib/components/templates/TicketDropdownCards/DropdownTimingView.js +46 -0
  52. package/lib/components/templates/TicketDropdownCards/DropdownTimingView.js.map +1 -0
  53. package/lib/components/templates/TicketDropdownCards/TicketDropdownCards.d.ts +2 -0
  54. package/lib/components/templates/TicketDropdownCards/TicketDropdownCards.js +51 -0
  55. package/lib/components/templates/TicketDropdownCards/TicketDropdownCards.js.map +1 -0
  56. package/lib/components/templates/TicketEditButton/TicketEditButton.d.ts +4 -0
  57. package/lib/components/templates/TicketEditButton/TicketEditButton.js +36 -0
  58. package/lib/components/templates/TicketEditButton/TicketEditButton.js.map +1 -0
  59. package/lib/components/templates/TicketHeader/TicketHeader.d.ts +2 -0
  60. package/lib/components/templates/TicketHeader/TicketHeader.js +75 -0
  61. package/lib/components/templates/TicketHeader/TicketHeader.js.map +1 -0
  62. package/lib/components/templates/TicketSearchBar/TicketSearchBar.d.ts +11 -0
  63. package/lib/components/templates/TicketSearchBar/TicketSearchBar.js +39 -0
  64. package/lib/components/templates/TicketSearchBar/TicketSearchBar.js.map +1 -0
  65. package/lib/components/templates/TicketTypeSearchBar/TicketTypeSearchBar.d.ts +15 -0
  66. package/lib/components/templates/TicketTypeSearchBar/TicketTypeSearchBar.js +52 -0
  67. package/lib/components/templates/TicketTypeSearchBar/TicketTypeSearchBar.js.map +1 -0
  68. package/lib/components/templates/TicketsStatusButton/TicketsStatusButton.d.ts +2 -0
  69. package/lib/components/templates/TicketsStatusButton/TicketsStatusButton.js +45 -0
  70. package/lib/components/templates/TicketsStatusButton/TicketsStatusButton.js.map +1 -0
  71. package/lib/components/templates/UserSearchBar/UserSearchBar.d.ts +15 -0
  72. package/lib/components/templates/UserSearchBar/UserSearchBar.js +53 -0
  73. package/lib/components/templates/UserSearchBar/UserSearchBar.js.map +1 -0
  74. package/lib/components/templates/index.d.ts +10 -0
  75. package/lib/components/templates/index.js +28 -0
  76. package/lib/components/templates/index.js.map +1 -0
  77. package/lib/features/customerSlice.d.ts +41 -0
  78. package/lib/features/customerSlice.js +85 -0
  79. package/lib/features/customerSlice.js.map +1 -0
  80. package/lib/features/helpdeskConfigSlice.d.ts +14 -0
  81. package/lib/features/helpdeskConfigSlice.js +49 -0
  82. package/lib/features/helpdeskConfigSlice.js.map +1 -0
  83. package/lib/features/index.d.ts +6 -0
  84. package/lib/features/index.js +24 -0
  85. package/lib/features/index.js.map +1 -0
  86. package/lib/features/projectSlice.d.ts +16 -0
  87. package/lib/features/projectSlice.js +49 -0
  88. package/lib/features/projectSlice.js.map +1 -0
  89. package/lib/features/ticketSlice.d.ts +81 -0
  90. package/lib/features/ticketSlice.js +175 -0
  91. package/lib/features/ticketSlice.js.map +1 -0
  92. package/lib/features/timerSlice.d.ts +26 -0
  93. package/lib/features/timerSlice.js +73 -0
  94. package/lib/features/timerSlice.js.map +1 -0
  95. package/lib/features/userSlice.d.ts +16 -0
  96. package/lib/features/userSlice.js +49 -0
  97. package/lib/features/userSlice.js.map +1 -0
  98. package/lib/hooks/use-helpdesk-header-actions.d.ts +1 -0
  99. package/lib/hooks/use-helpdesk-header-actions.js +35 -0
  100. package/lib/hooks/use-helpdesk-header-actions.js.map +1 -0
  101. package/lib/i18n/en.json +57 -0
  102. package/lib/i18n/fr.json +57 -0
  103. package/lib/index.d.ts +4 -0
  104. package/lib/index.js +67 -0
  105. package/lib/index.js.map +1 -0
  106. package/lib/models/index.d.ts +3 -0
  107. package/lib/models/index.js +21 -0
  108. package/lib/models/index.js.map +1 -0
  109. package/lib/models/objectFields.d.ts +2 -0
  110. package/lib/models/objectFields.js +72 -0
  111. package/lib/models/objectFields.js.map +1 -0
  112. package/lib/models/searchFields.d.ts +2 -0
  113. package/lib/models/searchFields.js +46 -0
  114. package/lib/models/searchFields.js.map +1 -0
  115. package/lib/models/sortFields.d.ts +2 -0
  116. package/lib/models/sortFields.js +26 -0
  117. package/lib/models/sortFields.js.map +1 -0
  118. package/lib/screens/MyTeamTicketListScreen.d.ts +4 -0
  119. package/lib/screens/MyTeamTicketListScreen.js +124 -0
  120. package/lib/screens/MyTeamTicketListScreen.js.map +1 -0
  121. package/lib/screens/MyTicketListScreen.d.ts +4 -0
  122. package/lib/screens/MyTicketListScreen.js +124 -0
  123. package/lib/screens/MyTicketListScreen.js.map +1 -0
  124. package/lib/screens/TicketDetailsScreen.d.ts +4 -0
  125. package/lib/screens/TicketDetailsScreen.js +95 -0
  126. package/lib/screens/TicketDetailsScreen.js.map +1 -0
  127. package/lib/screens/TicketFormScreen.d.ts +5 -0
  128. package/lib/screens/TicketFormScreen.js +127 -0
  129. package/lib/screens/TicketFormScreen.js.map +1 -0
  130. package/lib/screens/index.d.ts +40 -0
  131. package/lib/screens/index.js +50 -0
  132. package/lib/screens/index.js.map +1 -0
  133. package/lib/types/index.d.ts +1 -0
  134. package/lib/types/index.js +19 -0
  135. package/lib/types/index.js.map +1 -0
  136. package/lib/types/ticket.d.ts +53 -0
  137. package/lib/types/ticket.js +217 -0
  138. package/lib/types/ticket.js.map +1 -0
  139. package/lib/utils/displayers.d.ts +1 -0
  140. package/lib/utils/displayers.js +19 -0
  141. package/lib/utils/displayers.js.map +1 -0
  142. package/package.json +50 -0
@@ -0,0 +1,95 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 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, useCallback } from 'react';
19
+ import { ScrollView } from 'react-native';
20
+ import { Screen, HeaderContainer, NotesCard, useThemeColor, IconButton, } from '@axelor/aos-mobile-ui';
21
+ import { Stopwatch, useDispatch, useSelector, useTranslator, getNowDateZonesISOString, StopwatchType, } from '@axelor/aos-mobile-core';
22
+ import { fetchTicketById, updateTicketStatus } from '../features/ticketSlice';
23
+ import { TicketHeader, TicketDropdownCards, TicketEditButton, TicketsStatusButton, } from '../components';
24
+ import { clearTimer, fetchTimerById, searchTimerHistoryById, } from '../features/timerSlice';
25
+ import { Ticket } from '../types';
26
+ import { fetchHelpdeskConfig } from '../features/helpdeskConfigSlice';
27
+ const TicketDetailsScreen = ({ route }) => {
28
+ const { idTicket } = route.params;
29
+ const I18n = useTranslator();
30
+ const Colors = useThemeColor();
31
+ const dispatch = useDispatch();
32
+ const { ticket } = useSelector(state => state.ticket);
33
+ const { timer, timerHistory } = useSelector(state => state.timer);
34
+ const { helpdeskConfig } = useSelector(state => state.helpdeskConfig);
35
+ useEffect(() => {
36
+ dispatch(fetchHelpdeskConfig());
37
+ }, [dispatch]);
38
+ useEffect(() => {
39
+ dispatch(fetchTicketById({ ticketId: idTicket }));
40
+ }, [dispatch, idTicket]);
41
+ useEffect(() => {
42
+ if (ticket?.timerList?.length > 0) {
43
+ dispatch(fetchTimerById({ timerId: ticket?.timerList[0]?.id }));
44
+ }
45
+ else {
46
+ dispatch(clearTimer());
47
+ }
48
+ }, [dispatch, ticket?.timerList]);
49
+ useEffect(() => {
50
+ dispatch(searchTimerHistoryById({ idTimer: timer?.id }));
51
+ }, [dispatch, timer]);
52
+ const statustimer = useMemo(() => {
53
+ return Ticket.getTimerState(ticket?.statusSelect, timer?.statusSelect);
54
+ }, [ticket, timer]);
55
+ const disbaled = useMemo(() => {
56
+ if (ticket?.statusSelect === Ticket.status.Closed ||
57
+ ticket?.statusSelect === Ticket.status.Resolved) {
58
+ return true;
59
+ }
60
+ return false;
61
+ }, [ticket]);
62
+ const timerDuration = useMemo(() => {
63
+ if (!Array.isArray(ticket?.timerList) ||
64
+ ticket.timerList.length === 0 ||
65
+ ticket.timerList[0]?.id !== timer?.id) {
66
+ return 0;
67
+ }
68
+ return Ticket.getTotalDuration(timerHistory);
69
+ }, [ticket?.timerList, timer?.id, timerHistory]);
70
+ const updateStatus = useCallback(status => {
71
+ dispatch(updateTicketStatus({
72
+ version: ticket?.version,
73
+ dateTime: getNowDateZonesISOString(),
74
+ targetStatus: status,
75
+ ticketId: ticket?.id,
76
+ }));
77
+ }, [dispatch, ticket]);
78
+ if (ticket?.id !== idTicket) {
79
+ return null;
80
+ }
81
+ return (<Screen removeSpaceOnTop={true}>
82
+ <HeaderContainer expandableFilter={false} fixedItems={<TicketHeader />}/>
83
+ <ScrollView>
84
+ <NotesCard title={I18n.t('Base_Description')} data={ticket.description}/>
85
+ <TicketDropdownCards />
86
+ {helpdeskConfig?.manageTimer ? (<Stopwatch startTime={timerDuration} timerFormat={I18n.t('Stopwatch_TimerFormat')} status={statustimer} disableStop={statustimer === StopwatchType.status.Paused} onPlay={() => updateStatus(Ticket.stopWatchStatus.start)} onPause={() => updateStatus(Ticket.stopWatchStatus.pause)} onStop={() => updateStatus(Ticket.stopWatchStatus.stop)} onCancel={() => updateStatus(Ticket.stopWatchStatus.reset)} disable={disbaled}/>) : (<TicketsStatusButton />)}
87
+ {ticket?.statusSelect !== Ticket.status.Closed &&
88
+ ticket?.statusSelect !== Ticket.status.New && (<IconButton title={I18n.t('Helpdesk_Close')} iconName="power-off" onPress={() => updateStatus(Ticket.stopWatchStatus.validate)} color={Colors.primaryColor} disabled={ticket?.statusSelect === Ticket.status.Closed ||
89
+ ticket?.statusSelect === Ticket.status.New}/>)}
90
+ </ScrollView>
91
+ {ticket?.statusSelect !== Ticket.status.Closed && (<TicketEditButton idTicket={idTicket}/>)}
92
+ </Screen>);
93
+ };
94
+ export default TicketDetailsScreen;
95
+ //# sourceMappingURL=TicketDetailsScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketDetailsScreen.js","sourceRoot":"","sources":["../../src/screens/TicketDetailsScreen.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export default TicketFormScreen;
2
+ declare function TicketFormScreen({ navigation, route }: {
3
+ navigation: any;
4
+ route: any;
5
+ }): JSX.Element;
@@ -0,0 +1,127 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 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, { useState, useCallback } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { Button, FormInput, KeyboardAvoidingScrollView, Picker, Screen, useThemeColor, FormHtmlInput, checkNullString, } from '@axelor/aos-mobile-ui';
21
+ import { useSelector, useDispatch, useTranslator, DateInput, } from '@axelor/aos-mobile-core';
22
+ import { createTicket, updateTicket } from '../features/ticketSlice';
23
+ import { ContactPartnerSearchBar, CustomerSearchBar, DurationFormInput, ProgressFormInput, ProjectSearchBar, TicketTypeSearchBar, UserSearchBar, } from '../components';
24
+ import { Ticket } from '../types/';
25
+ const PROJECT_KEY = 'project';
26
+ const CUSTOMER_KEY = 'customerPartner';
27
+ const CONTACT_KEY = 'contactPartner';
28
+ const DEFAULT_TICKET_VALUE = { duration: 0 };
29
+ const isObjectMissingRequiredField = object => checkNullString(object?.subject);
30
+ const TicketFormScreen = ({ navigation, route }) => {
31
+ const idTicket = route?.params?.idTicket;
32
+ const dispatch = useDispatch();
33
+ const I18n = useTranslator();
34
+ const Colors = useThemeColor();
35
+ const { ticket } = useSelector(state => state.ticket);
36
+ const [_ticket, setTicket] = useState(idTicket != null ? ticket : DEFAULT_TICKET_VALUE);
37
+ const [disabledButton, setDisabledButton] = useState(isObjectMissingRequiredField(_ticket));
38
+ const handleTicketFieldChange = useCallback((newValue, fieldName) => {
39
+ setTicket(current => {
40
+ if (current?.[fieldName] === newValue) {
41
+ return current;
42
+ }
43
+ const updatedObject = current == null ? {} : { ...current };
44
+ updatedObject[fieldName] = newValue;
45
+ if (fieldName === PROJECT_KEY) {
46
+ updatedObject[CUSTOMER_KEY] = newValue?.clientPartner;
47
+ updatedObject[CONTACT_KEY] = newValue?.contactPartner;
48
+ }
49
+ setDisabledButton(isObjectMissingRequiredField(updatedObject));
50
+ return updatedObject;
51
+ });
52
+ }, []);
53
+ const updateTicketAPI = useCallback(() => {
54
+ dispatch(updateTicket({
55
+ ticket: _ticket,
56
+ }));
57
+ navigation.navigate('TicketDetailsScreen', {
58
+ idTicket: _ticket.id,
59
+ });
60
+ }, [dispatch, _ticket, navigation]);
61
+ const createTicketAPI = useCallback(() => {
62
+ dispatch(createTicket({
63
+ ticket: _ticket,
64
+ }));
65
+ setTicket(DEFAULT_TICKET_VALUE);
66
+ }, [_ticket, dispatch]);
67
+ return (<Screen>
68
+ <KeyboardAvoidingScrollView style={styles.scroll}>
69
+ <View style={styles.container}>
70
+ <FormInput style={styles.input} title={I18n.t('Hepdesk_Subject')} onChange={value => handleTicketFieldChange(value, 'subject')} defaultValue={_ticket?.subject} required={true}/>
71
+ <ProgressFormInput title={I18n.t('Helpdesk_Progress')} defaultValue={_ticket?.progressSelect} onChange={value => handleTicketFieldChange(value, 'progressSelect')}/>
72
+ <ProjectSearchBar titleKey="Helpdesk_Project" placeholderKey="Helpdesk_Project" defaultValue={_ticket?.[PROJECT_KEY]} onChange={value => handleTicketFieldChange(value, PROJECT_KEY)} style={styles.picker} styleTxt={styles.marginTitle}/>
73
+ <CustomerSearchBar titleKey="Helpdesk_CustomPartner" placeholderKey="Helpdesk_CustomPartner" defaultValue={_ticket?.[CUSTOMER_KEY]} onChange={value => handleTicketFieldChange(value, CUSTOMER_KEY)} style={styles.picker} styleTxt={styles.marginTitle}/>
74
+ <ContactPartnerSearchBar titleKey={I18n.t('Helpdesk_ContactPartner')} placeholderKey={I18n.t('Helpdesk_ContactPartner')} defaultValue={_ticket?.[CONTACT_KEY]} onChange={value => handleTicketFieldChange(value, CONTACT_KEY)} style={styles.picker} styleTxt={styles.marginTitle} client={_ticket?.[CUSTOMER_KEY]}/>
75
+ <TicketTypeSearchBar titleKey="Helpdesk_Type" placeholderKey="Helpdesk_Type" defaultValue={_ticket?.ticketType} onChange={value => handleTicketFieldChange(value, 'ticketType')} style={styles.picker} styleTxt={styles.marginTitle}/>
76
+ <Picker style={styles.picker} styleTxt={styles.pickerTitle} title={I18n.t('Helpdesk_Priority')} onValueChange={value => handleTicketFieldChange(value, 'prioritySelect')} listItems={Ticket.getPriorityList(Colors, I18n)} labelField="title" valueField="key" defaultValue={_ticket?.prioritySelect}/>
77
+ <DateInput onDateChange={value => handleTicketFieldChange(value, 'startDateT')} title={I18n.t('Helpdesk_StartDate')} defaultDate={_ticket?.startDateT != null ? new Date(_ticket?.startDateT) : null} style={styles.input}/>
78
+ <DateInput onDateChange={value => handleTicketFieldChange(value, 'endDateT')} title={I18n.t('Helpdesk_EndDate')} defaultDate={_ticket?.endDateT != null ? new Date(_ticket?.endDateT) : null} style={styles.input}/>
79
+ <DateInput onDateChange={value => handleTicketFieldChange(value, 'deadlineDateT')} title={I18n.t('Helpdesk_DeadlineDate')} defaultDate={_ticket?.deadlineDateT != null
80
+ ? new Date(_ticket?.deadlineDateT)
81
+ : null} style={styles.input}/>
82
+ <DurationFormInput duration={_ticket?.duration} onChange={value => handleTicketFieldChange(value, 'duration')}/>
83
+ <UserSearchBar titleKey="Helpdesk_AssignedToUser" placeholderKey="Helpdesk_AssignedToUser" defaultValue={_ticket?.assignedToUser} onChange={value => handleTicketFieldChange(value, 'assignedToUser')} style={styles.picker} styleTxt={styles.marginTitle}/>
84
+ <UserSearchBar titleKey="Helpdesk_ResponsibleUser" placeholderKey="Helpdesk_ResponsibleUser" defaultValue={_ticket?.responsibleUser} onChange={value => handleTicketFieldChange(value, 'responsibleUser')} style={styles.picker} styleTxt={styles.marginTitle}/>
85
+ <FormHtmlInput title={I18n.t('Base_Description')} onChange={value => handleTicketFieldChange(value, 'description')} defaultValue={_ticket?.description}/>
86
+ </View>
87
+ </KeyboardAvoidingScrollView>
88
+ <View style={styles.button_container}>
89
+ <Button title={I18n.t('Base_Save')} onPress={idTicket != null ? updateTicketAPI : createTicketAPI} disabled={disabledButton} color={disabledButton ? Colors.secondaryColor : Colors.primaryColor}/>
90
+ </View>
91
+ </Screen>);
92
+ };
93
+ const styles = StyleSheet.create({
94
+ container: {
95
+ alignItems: 'center',
96
+ zIndex: 30,
97
+ },
98
+ scroll: {
99
+ height: null,
100
+ },
101
+ picker: {
102
+ width: '100%',
103
+ marginLeft: 5,
104
+ },
105
+ pickerTitle: {
106
+ marginLeft: 5,
107
+ },
108
+ marginTitle: {
109
+ marginLeft: 28,
110
+ },
111
+ search: {
112
+ width: '100%',
113
+ marginLeft: 0,
114
+ },
115
+ input: {
116
+ width: '90%',
117
+ },
118
+ button_container: {
119
+ marginVertical: '1%',
120
+ flexDirection: 'column',
121
+ justifyContent: 'center',
122
+ alignItems: 'center',
123
+ alignContent: 'center',
124
+ },
125
+ });
126
+ export default TicketFormScreen;
127
+ //# sourceMappingURL=TicketFormScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketFormScreen.js","sourceRoot":"","sources":["../../src/screens/TicketFormScreen.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ declare namespace _default {
2
+ namespace MyTicketListScreen {
3
+ export const title: string;
4
+ export { MyTicketListScreen as component };
5
+ export namespace options {
6
+ const shadedHeader: boolean;
7
+ }
8
+ }
9
+ namespace MyTeamTicketListScreen {
10
+ const title_1: string;
11
+ export { title_1 as title };
12
+ export { MyTeamTicketListScreen as component };
13
+ export namespace options_1 {
14
+ const shadedHeader_1: boolean;
15
+ export { shadedHeader_1 as shadedHeader };
16
+ }
17
+ export { options_1 as options };
18
+ }
19
+ namespace TicketFormScreen {
20
+ const title_2: string;
21
+ export { title_2 as title };
22
+ export { TicketFormScreen as component };
23
+ }
24
+ namespace TicketDetailsScreen {
25
+ const title_3: string;
26
+ export { title_3 as title };
27
+ export { TicketDetailsScreen as component };
28
+ export const actionID: string;
29
+ export namespace options_2 {
30
+ const shadedHeader_2: boolean;
31
+ export { shadedHeader_2 as shadedHeader };
32
+ }
33
+ export { options_2 as options };
34
+ }
35
+ }
36
+ export default _default;
37
+ import MyTicketListScreen_1 from "./MyTicketListScreen";
38
+ import MyTeamTicketListScreen_1 from "./MyTeamTicketListScreen";
39
+ import TicketFormScreen_1 from "./TicketFormScreen";
40
+ import TicketDetailsScreen_1 from "./TicketDetailsScreen";
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 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 MyTicketListScreen from './MyTicketListScreen';
19
+ import MyTeamTicketListScreen from './MyTeamTicketListScreen';
20
+ import TicketDetailsScreen from './TicketDetailsScreen';
21
+ import TicketFormScreen from './TicketFormScreen';
22
+ export default {
23
+ MyTicketListScreen: {
24
+ title: 'Helpdesk_myTickets',
25
+ component: MyTicketListScreen,
26
+ options: {
27
+ shadedHeader: false,
28
+ },
29
+ },
30
+ MyTeamTicketListScreen: {
31
+ title: 'Helpdesk_myTeamTickets',
32
+ component: MyTeamTicketListScreen,
33
+ options: {
34
+ shadedHeader: false,
35
+ },
36
+ },
37
+ TicketFormScreen: {
38
+ title: 'Helpdesk_Ticket',
39
+ component: TicketFormScreen,
40
+ },
41
+ TicketDetailsScreen: {
42
+ title: 'Helpdesk_Ticket',
43
+ component: TicketDetailsScreen,
44
+ actionID: 'helpdesk_ticket_details',
45
+ options: {
46
+ shadedHeader: false,
47
+ },
48
+ },
49
+ };
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screens/index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,eAAe;IACb,kBAAkB,EAAE;QAClB,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE;YACP,YAAY,EAAE,KAAK;SACpB;KACF;IACD,sBAAsB,EAAE;QACtB,KAAK,EAAE,wBAAwB;QAC/B,SAAS,EAAE,sBAAsB;QACjC,OAAO,EAAE;YACP,YAAY,EAAE,KAAK;SACpB;KACF;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,gBAAgB;KAC5B;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,iBAAiB;QACxB,SAAS,EAAE,mBAAmB;QAC9B,QAAQ,EAAE,yBAAyB;QACnC,OAAO,EAAE;YACP,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as Ticket } from './ticket';
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 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 Ticket } from './ticket';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,UAAU,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Color, ThemeColors } from '@axelor/aos-mobile-ui';
2
+ declare class TicketType {
3
+ static status: {
4
+ New: number;
5
+ In_Progress: number;
6
+ Resolved: number;
7
+ Closed: number;
8
+ };
9
+ static priority: {
10
+ Low: number;
11
+ Normal: number;
12
+ High: number;
13
+ Urgent: number;
14
+ };
15
+ static stopWatchStatus: {
16
+ start: string;
17
+ pause: string;
18
+ stop: string;
19
+ reset: string;
20
+ validate: string;
21
+ };
22
+ static timerStatus: {
23
+ inProgress: number;
24
+ stop: number;
25
+ };
26
+ static getTotalDuration: (timerHystoryList: any) => number;
27
+ static getTimerState: (ticketState: number, timerState: number) => number;
28
+ static getStatus: (select: number, I18n: {
29
+ t: (key: string) => string;
30
+ }) => string;
31
+ static getStatusList: (Colors: ThemeColors, I18n: {
32
+ t: (key: string) => string;
33
+ }) => {
34
+ title: string;
35
+ color: Color;
36
+ key: number;
37
+ }[];
38
+ static getStatusColor: (status: number, Colors: ThemeColors) => Color;
39
+ static getPriority: (select: number, I18n: {
40
+ t: (key: string) => string;
41
+ }) => string;
42
+ static getPriorityColor: (status: number, Colors: ThemeColors) => Color;
43
+ static getPriorityList: (Colors: ThemeColors, I18n: {
44
+ t: (key: string) => string;
45
+ }) => {
46
+ title: string;
47
+ color: Color;
48
+ key: number;
49
+ isActive: boolean;
50
+ }[];
51
+ static getTypeColor: (index: number, Colors: ThemeColors) => Color;
52
+ }
53
+ export default TicketType;
@@ -0,0 +1,217 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 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 { calculateDiff, StopwatchType } from '@axelor/aos-mobile-core';
19
+ class TicketType {
20
+ static status = {
21
+ New: 0,
22
+ In_Progress: 1,
23
+ Resolved: 2,
24
+ Closed: 3,
25
+ };
26
+ static priority = {
27
+ Low: 1,
28
+ Normal: 2,
29
+ High: 3,
30
+ Urgent: 4,
31
+ };
32
+ static stopWatchStatus = {
33
+ start: 'start',
34
+ pause: 'pause',
35
+ stop: 'stop',
36
+ reset: 'reset',
37
+ validate: 'validate',
38
+ };
39
+ static timerStatus = {
40
+ inProgress: 1,
41
+ stop: 0,
42
+ };
43
+ static getTotalDuration = (timerHystoryList) => {
44
+ if (timerHystoryList == null) {
45
+ return 0;
46
+ }
47
+ let totalDuration = 0;
48
+ timerHystoryList.forEach(duration => {
49
+ let diff = calculateDiff(duration.startDateT, duration.endDateT);
50
+ totalDuration += diff;
51
+ });
52
+ return totalDuration;
53
+ };
54
+ static getTimerState = (ticketState, timerState) => {
55
+ if (ticketState === TicketType.status.New) {
56
+ return StopwatchType.status.Ready;
57
+ }
58
+ if (ticketState === TicketType.status.In_Progress &&
59
+ timerState === TicketType.timerStatus.stop) {
60
+ return StopwatchType.status.Paused;
61
+ }
62
+ if (ticketState === TicketType.status.In_Progress &&
63
+ timerState === TicketType.timerStatus.inProgress) {
64
+ return StopwatchType.status.InProgress;
65
+ }
66
+ if (ticketState === TicketType.status.Closed) {
67
+ return StopwatchType.status.Finished;
68
+ }
69
+ if (ticketState === TicketType.status.Resolved) {
70
+ return StopwatchType.status.Finished;
71
+ }
72
+ };
73
+ static getStatus = (select, I18n) => {
74
+ if (I18n) {
75
+ switch (select) {
76
+ case this.status.New:
77
+ return I18n.t('Helpdesk_Status_New');
78
+ case this.status.In_Progress:
79
+ return I18n.t('Helpdesk_Status_In_Progress');
80
+ case this.status.Resolved:
81
+ return I18n.t('Helpdesk_Status_Resolved');
82
+ case this.status.Closed:
83
+ return I18n.t('Helpdesk_Status_Closed');
84
+ default:
85
+ console.warn(`Status provided with value ${select} is not supported by Ticket`);
86
+ return null;
87
+ }
88
+ }
89
+ };
90
+ static getStatusList = (Colors, I18n) => {
91
+ return [
92
+ {
93
+ title: I18n.t('Helpdesk_Status_New'),
94
+ color: this.getStatusColor(this.status.New, Colors),
95
+ key: this.status.New,
96
+ },
97
+ {
98
+ title: I18n.t('Helpdesk_Status_In_Progress'),
99
+ color: this.getStatusColor(this.status.In_Progress, Colors),
100
+ key: this.status.In_Progress,
101
+ },
102
+ {
103
+ title: I18n.t('Helpdesk_Status_Resolved'),
104
+ color: this.getStatusColor(this.status.Resolved, Colors),
105
+ key: this.status.Resolved,
106
+ },
107
+ {
108
+ title: I18n.t('Helpdesk_Status_Closed'),
109
+ color: this.getStatusColor(this.status.Closed, Colors),
110
+ key: this.status.Closed,
111
+ },
112
+ ];
113
+ };
114
+ static getStatusColor = (status, Colors) => {
115
+ switch (status) {
116
+ case this.status.New:
117
+ return Colors.plannedColor;
118
+ case this.status.In_Progress:
119
+ return Colors.progressColor;
120
+ case this.status.Resolved:
121
+ return Colors.primaryColor;
122
+ case this.status.Closed:
123
+ return Colors.cautionColor;
124
+ default:
125
+ console.warn(`Status provided with value ${status} is not supported by Ticket`);
126
+ return null;
127
+ }
128
+ };
129
+ static getPriority = (select, I18n) => {
130
+ if (I18n) {
131
+ switch (select) {
132
+ case this.priority.Low:
133
+ return I18n.t('Helpdesk_Priority_Low');
134
+ case this.priority.Normal:
135
+ return I18n.t('Helpdesk_Priority_Normal');
136
+ case this.priority.High:
137
+ return I18n.t('Helpdesk_Priority_High');
138
+ case this.priority.Urgent:
139
+ return I18n.t('Helpdesk_Priority_Urgent');
140
+ default:
141
+ console.warn(`Priority provided with value ${select} is not supported by Ticket`);
142
+ return null;
143
+ }
144
+ }
145
+ };
146
+ static getPriorityColor = (status, Colors) => {
147
+ switch (status) {
148
+ case this.priority.Low:
149
+ return Colors.primaryColor;
150
+ case this.priority.Normal:
151
+ return Colors.priorityColor;
152
+ case this.priority.High:
153
+ return Colors.cautionColor;
154
+ case this.priority.Urgent:
155
+ return Colors.importantColor;
156
+ default:
157
+ console.warn(`Priority provided with value ${status} is not supported by Ticket`);
158
+ return null;
159
+ }
160
+ };
161
+ static getPriorityList = (Colors, I18n) => {
162
+ return [
163
+ {
164
+ title: I18n.t('Helpdesk_Priority_Low'),
165
+ color: this.getPriorityColor(this.priority.Low, Colors),
166
+ key: this.priority.Low,
167
+ isActive: true,
168
+ },
169
+ {
170
+ title: I18n.t('Helpdesk_Priority_Normal'),
171
+ color: this.getPriorityColor(this.priority.Normal, Colors),
172
+ key: this.priority.Normal,
173
+ isActive: true,
174
+ },
175
+ {
176
+ title: I18n.t('Helpdesk_Priority_High'),
177
+ color: this.getPriorityColor(this.priority.High, Colors),
178
+ key: this.priority.High,
179
+ isActive: false,
180
+ },
181
+ {
182
+ title: I18n.t('Helpdesk_Priority_Urgent'),
183
+ color: this.getPriorityColor(this.priority.Urgent, Colors),
184
+ key: this.priority.Urgent,
185
+ isActive: false,
186
+ },
187
+ ];
188
+ };
189
+ static getTypeColor = (index, Colors) => {
190
+ if (index === 0) {
191
+ return Colors.primaryColor;
192
+ }
193
+ else if (index === 1) {
194
+ return Colors.progressColor;
195
+ }
196
+ else if (index === 2) {
197
+ return Colors.priorityColor;
198
+ }
199
+ else if (index === 3) {
200
+ return Colors.errorColor;
201
+ }
202
+ else if (index === 4) {
203
+ return Colors.cautionColor;
204
+ }
205
+ else if (index === 5) {
206
+ return Colors.plannedColor;
207
+ }
208
+ else if (index === 6) {
209
+ return Colors.secondaryColor;
210
+ }
211
+ else {
212
+ Colors.primaryColor;
213
+ }
214
+ };
215
+ }
216
+ export default TicketType;
217
+ //# sourceMappingURL=ticket.js.map