-
Notifications
You must be signed in to change notification settings - Fork 739
/
Copy pathuseFacilities.js
82 lines (68 loc) · 2.14 KB
/
useFacilities.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { reactive, computed } from 'vue';
import FacilityResource from 'kolibri-common/apiResources/FacilityResource';
import useUser from 'kolibri/composables/useUser';
import redirectBrowser from 'kolibri/utils/redirectBrowser';
import FacilityDatasetResource from 'kolibri-common/apiResources/FacilityDatasetResource';
import Lockr from 'lockr';
const state = reactive({
facilityConfig: {},
facilities: [],
facilityId: Lockr.get('facilityId') || null,
});
export default function useFacilities() {
const { userFacilityId } = useUser();
const selectedFacility = computed(() => {
const facilityById = facilities.value.find(f => f.id === state.facilityId);
if (facilityById) {
return facilityById;
}
return facilities.value.find(f => f.id === userFacilityId.value) || null;
});
//getters
const facilities = computed(() => state.facilities);
const facilityConfig = computed(() => state.facilityConfig);
//actions
async function getFacilities() {
const facilities = await FacilityResource.fetchCollection({ force: true });
state.facilities = facilities;
}
async function getFacilityConfig(facilityId) {
const facId = facilityId || userFacilityId.value;
if (!facId) {
// No facility Id, so redirect and let Kolibri sort it out
return redirectBrowser();
}
let facilityConfig;
if (selectedFacility.value && typeof selectedFacility.value.dataset !== 'object') {
facilityConfig = [selectedFacility.value.dataset];
} else {
facilityConfig = await FacilityDatasetResource.fetchCollection({
getParams: {
facility_id: facId,
},
});
}
let config = {};
const facility = facilityConfig[0];
if (facility) {
config = { ...facility };
}
setFacilityConfig(config);
}
//mutations
function setFacilityConfig(state, facilityConfig) {
state.facilityConfig = facilityConfig;
}
function setFacilities(state, facilities) {
state.facilities = facilities;
}
return {
facilities,
facilityConfig,
getFacilities,
getFacilityConfig,
setFacilityConfig,
setFacilities,
selectedFacility,
};
}