@olea-bps/context-event 1.0.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.
- package/index.js +194 -0
- package/package.json +26 -0
package/index.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { useContext, createContext, useMemo, useCallback, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
import { useTheme } from 'react-native-paper';
|
|
4
|
+
|
|
5
|
+
import { useSecureStoredState } from '@olea-bps/stored-state';
|
|
6
|
+
|
|
7
|
+
import AsistServerClient from './AsistServerClient';
|
|
8
|
+
|
|
9
|
+
const EventCodeStoreKey = 'event.eventCode';
|
|
10
|
+
const EventsStoreKey = 'event.events';
|
|
11
|
+
const PersonalEventsStoreKey = 'event.personelEvents';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Context for event api
|
|
15
|
+
*/
|
|
16
|
+
export const EventContext = createContext(null);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Extendet context provider for EventAPIContext.
|
|
20
|
+
* Use settings in Settings.js to generate context values and event api client.
|
|
21
|
+
* currently only supports event api client for asist server rest api.
|
|
22
|
+
* But can be extendet to support more event services.
|
|
23
|
+
* @param {props} properties of provider
|
|
24
|
+
*/
|
|
25
|
+
export default function EventContextProvider({ children }) {
|
|
26
|
+
const { appSettings } = useTheme();
|
|
27
|
+
const eventAPIProvider = appSettings?.modules?.event?.api?.provider;
|
|
28
|
+
const eventAPIBaseUrl = appSettings?.modules?.event?.api?.baseUrl;
|
|
29
|
+
const university = appSettings?.api?.university ?? null;
|
|
30
|
+
|
|
31
|
+
const [events, setEvents] = useSecureStoredState(EventsStoreKey);
|
|
32
|
+
const [personalEventsCode, setPersonalEventsCode, deletePersonalEventsCode] = useSecureStoredState(EventCodeStoreKey, null, true);
|
|
33
|
+
const [personalEvents, setPersonalEvents, deletePersonalEvents] = useSecureStoredState(PersonalEventsStoreKey,)
|
|
34
|
+
|
|
35
|
+
const sortedEvents = useMemo(
|
|
36
|
+
() => {
|
|
37
|
+
if (Array.isArray(events)) {
|
|
38
|
+
const sortingEvents = [...events];
|
|
39
|
+
sortingEvents
|
|
40
|
+
// Berechnen der Sortierung
|
|
41
|
+
// Zuerst wird nach Startzeit sortier, ist diese gleich wird nach dem Enddatum sortiert
|
|
42
|
+
.sort(
|
|
43
|
+
(first, second) => {
|
|
44
|
+
const sortOrder = moment(first.begin) - moment(second.begin);
|
|
45
|
+
|
|
46
|
+
return sortOrder === 0
|
|
47
|
+
? moment(first.end) - moment(second.end)
|
|
48
|
+
: sortOrder
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
return sortingEvents;
|
|
53
|
+
} else {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
[events]
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
const eventAPIClient = useMemo(
|
|
61
|
+
|
|
62
|
+
() => {
|
|
63
|
+
switch (eventAPIProvider?.toLowerCase()) {
|
|
64
|
+
case 'asist-server':
|
|
65
|
+
return new AsistServerClient(eventAPIBaseUrl, university);
|
|
66
|
+
default:
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
[eventAPIProvider, eventAPIBaseUrl, university]
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const refreshEvents = useCallback(
|
|
74
|
+
() => eventAPIClient.getAll()
|
|
75
|
+
.then(setEvents),
|
|
76
|
+
[eventAPIClient]
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
const refreshPersonalEvents = useCallback(
|
|
80
|
+
() => eventAPIClient.getByPersonalCode(personalEventsCode)
|
|
81
|
+
.then(setPersonalEvents),
|
|
82
|
+
[eventAPIClient, personalEventsCode]
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
function deletePersonalEventsCodeAndPersonalEvents() {
|
|
86
|
+
deletePersonalEventsCode();
|
|
87
|
+
deletePersonalEvents();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
useEffect(
|
|
91
|
+
() => {
|
|
92
|
+
refreshEvents();
|
|
93
|
+
},
|
|
94
|
+
[refreshEvents]
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
useEffect(
|
|
98
|
+
() => {
|
|
99
|
+
if (personalEventsCode) {
|
|
100
|
+
refreshPersonalEvents();
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
[eventAPIClient, personalEventsCode, refreshPersonalEvents]
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<EventContext.Provider
|
|
108
|
+
value={
|
|
109
|
+
{
|
|
110
|
+
events: sortedEvents,
|
|
111
|
+
refreshEvents: refreshEvents,
|
|
112
|
+
|
|
113
|
+
personalEvents: personalEvents,
|
|
114
|
+
refreshPersonalEvents: refreshPersonalEvents,
|
|
115
|
+
|
|
116
|
+
personalEventsCode: personalEventsCode,
|
|
117
|
+
setPersonalEventsCode: setPersonalEventsCode,
|
|
118
|
+
deletePersonalEventsCode: deletePersonalEventsCodeAndPersonalEvents,
|
|
119
|
+
|
|
120
|
+
apiClient: eventAPIClient,
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
>
|
|
124
|
+
{children}
|
|
125
|
+
</EventContext.Provider>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Dieser Hook stellt den EventContext bereit.
|
|
131
|
+
*
|
|
132
|
+
* Dieser Hook sollte grundsätlich nur von anderen Hooks verwendet werden.
|
|
133
|
+
* @returns {object} Eventkontext
|
|
134
|
+
*/
|
|
135
|
+
export function useEventContext() {
|
|
136
|
+
return useContext(EventContext);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Über diesen Hook gelangt man an die persönlichen Veranstaltungen.
|
|
141
|
+
* Dafür wird der persönliche Veranstaltungscode (siehe {@link usePersonalEventsCode }) verwendet.
|
|
142
|
+
*
|
|
143
|
+
* @returns {[Array, () => Promise]} Liste der persönlichen Veranstalltungen entsprechnd des persönlichen Codes
|
|
144
|
+
* @example
|
|
145
|
+
* const [personalEvents, refreshPersonalEvents] = usePersonalEvents();
|
|
146
|
+
*/
|
|
147
|
+
export function usePersonalEvents() {
|
|
148
|
+
const eventContext = useEventContext();
|
|
149
|
+
|
|
150
|
+
return [eventContext.personalEvents, eventContext.refreshPersonalEvents];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
*
|
|
155
|
+
* @returns {[Array, () => void]}
|
|
156
|
+
* @example
|
|
157
|
+
* const [events, refreshEvents] = useEvents();
|
|
158
|
+
*
|
|
159
|
+
* useEffect(
|
|
160
|
+
* () => {
|
|
161
|
+
* refreshEvents();
|
|
162
|
+
* },
|
|
163
|
+
* []
|
|
164
|
+
* );
|
|
165
|
+
*
|
|
166
|
+
* return (
|
|
167
|
+
* events.map(
|
|
168
|
+
* event => JSON.stringify(event);
|
|
169
|
+
* )
|
|
170
|
+
* )
|
|
171
|
+
*/
|
|
172
|
+
export function useEvents() {
|
|
173
|
+
const eventContext = useEventContext();
|
|
174
|
+
return [eventContext.events, eventContext.refreshEvents];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Hook to get and set personal code.
|
|
179
|
+
* Please use hook like: const [personalCode, setPersonalCode] = usePersonalCode();
|
|
180
|
+
* currently not in use.
|
|
181
|
+
* @returns {[string, () => void, () => void]} First element is the value of the personal code and the second element a update function for the personal code.
|
|
182
|
+
*/
|
|
183
|
+
export function usePersonalEventsCode() {
|
|
184
|
+
const eventContext = useEventContext();
|
|
185
|
+
return [eventContext.personalEventsCode, eventContext.setPersonalEventsCode, eventContext.deletePersonalEventsCode];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Hook to get event api client from context.
|
|
190
|
+
* @returns {Object}
|
|
191
|
+
*/
|
|
192
|
+
export function useEventApiClient() {
|
|
193
|
+
return useEventContext().apiClient;
|
|
194
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@olea-bps/context-event",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Context for event",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/tuc-urz/olea.git",
|
|
13
|
+
"directory": "packages/context/context-event"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"context",
|
|
17
|
+
"event"
|
|
18
|
+
],
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
|
+
"files": [
|
|
21
|
+
"index.js",
|
|
22
|
+
"package.json",
|
|
23
|
+
"LICENSE",
|
|
24
|
+
"README.md"
|
|
25
|
+
]
|
|
26
|
+
}
|