Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor facilityconfig facility actions into composables #13014

Open
wants to merge 13 commits into
base: develop
Choose a base branch
from
38 changes: 0 additions & 38 deletions kolibri/core/assets/src/state/modules/core/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ import pick from 'lodash/pick';
import client from 'kolibri/client';
import heartbeat from 'kolibri/heartbeat';
import logger from 'kolibri-logging';
import FacilityResource from 'kolibri-common/apiResources/FacilityResource';
import FacilityDatasetResource from 'kolibri-common/apiResources/FacilityDatasetResource';
import UserSyncStatusResource from 'kolibri-common/apiResources/UserSyncStatusResource';
import { setServerTime } from 'kolibri/utils/serverClock';
import urls from 'kolibri/urls';
Expand Down Expand Up @@ -163,42 +161,6 @@ export function setPageVisibility(store) {
_setPageVisibility(store, document.visibilityState === 'visible');
}

export function getFacilities(store) {
return FacilityResource.fetchCollection({ force: true }).then(facilities => {
store.commit('CORE_SET_FACILITIES', [...facilities]);
});
}

export function getFacilityConfig(store, facilityId) {
const { userFacilityId, selectedFacility } = store.getters;
const facId = facilityId || userFacilityId;
if (!facId) {
// No facility Id, so nothing good is going to happen here.
// Redirect and let Kolibri sort it out.
return Promise.resolve(redirectBrowser());
}
let datasetPromise;
if (selectedFacility && typeof selectedFacility.dataset !== 'object') {
datasetPromise = Promise.resolve([selectedFacility.dataset]);
} else {
datasetPromise = FacilityDatasetResource.fetchCollection({
getParams: {
// fetchCollection for currentSession's facilityId if none was passed
facility_id: facId,
},
});
}

return datasetPromise.then(facilityConfig => {
let config = {};
const facility = facilityConfig[0];
if (facility) {
config = { ...facility };
}
store.commit('CORE_SET_FACILITY_CONFIG', config);
});
}

export function loading(store) {
return new Promise(resolve => {
store.commit('CORE_SET_PAGE_LOADING', true);
Expand Down
8 changes: 0 additions & 8 deletions kolibri/core/assets/src/state/modules/core/getters.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
import useUser from 'kolibri/composables/useUser';
import { get } from '@vueuse/core';

export function facilityConfig(state) {
return state.facilityConfig;
}

export function facilities(state) {
return state.facilities;
}

export function pageSessionId(state) {
return state.pageSessionId;
}
Expand Down
2 changes: 0 additions & 2 deletions kolibri/core/assets/src/state/modules/core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ export default {
notifications: [],
allowRemoteAccess: plugin_data.allowRemoteAccess,
// facility
facilityConfig: {},
facilities: [],
pageVisible: true,
};
},
Expand Down
6 changes: 0 additions & 6 deletions kolibri/core/assets/src/state/modules/core/mutations.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
export default {
CORE_SET_FACILITY_CONFIG(state, facilityConfig) {
state.facilityConfig = facilityConfig;
},
CORE_SET_FACILITIES(state, facilities) {
state.facilities = facilities;
},
CORE_SET_PAGE_LOADING(state, value) {
const update = { loading: value };
if (value) {
Expand Down
4 changes: 0 additions & 4 deletions kolibri/core/assets/src/state/modules/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ export default {
isFacilityAdmin(state) {
return state.kind.includes(UserKinds.ADMIN);
},
// An "Multi-Facility Admin" is a superuser for a device with 2+ facilities
userIsMultiFacilityAdmin(state, getters, rootState) {
return getters.isSuperuser && rootState.core.facilities.length > 1;
},
getUserPermissions(state) {
const permissions = {};
permissions.can_manage_content = state.can_manage_content;
Expand Down
7 changes: 5 additions & 2 deletions kolibri/plugins/coach/assets/src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@ import router from 'kolibri/router';
import ChannelResource from 'kolibri-common/apiResources/ChannelResource';
import KolibriApp from 'kolibri-app';
import useSnackbar from 'kolibri/composables/useSnackbar';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from './constants';
import routes from './routes';
import pluginModule from './modules/pluginModule';
import HomeActivityPage from './views/home/HomeActivityPage';

const { getFacilities, facilities } = useFacilities();

function _channelListState(data) {
return data.map(channel => ({
id: channel.id,
Expand Down Expand Up @@ -137,8 +140,8 @@ class CoachToolsModule extends KolibriApp {
promises.push(this.store.dispatch('initClassInfo', to.params.classId));
}

if (get(isSuperuser) && this.store.state.core.facilities.length === 0) {
promises.push(this.store.dispatch('getFacilities').catch(() => {}));
if (get(isSuperuser) && facilities.value.length === 0) {
promises.push(getFacilities().catch(() => {}));
}

if (promises.length > 0) {
Expand Down
6 changes: 4 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useCoreCoach.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { get } from '@vueuse/core';
import { computed, getCurrentInstance } from 'vue';
import { currentLanguage, isRtl } from 'kolibri/utils/i18n';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { coachStrings } from '../views/common/commonCoachStrings';

const logging = logger.getLogger(__filename);
Expand All @@ -17,14 +18,15 @@ export default function useCoreCoach(store) {
const classId = computed(() => get(route).params.classId);
const groups = computed(() => store.getters['classSummary/groups']);
const { isSuperuser } = useUser();
const { facilities } = useFacilities();

function getAppBarTitle() {
let facilityName;
// Using coachStrings.$tr() here because mixins are not applied
// prior to props being processed.
const { facility_id, name } = store.state.classSummary;
if (facility_id && store.state.core.facilities.length > 1 && get(isSuperuser)) {
const match = find(store.state.core.facilities, { id: facility_id }) || {};
if (facility_id && get(facilities).length > 1 && get(isSuperuser)) {
const match = find(get(facilities), { id: facility_id }) || {};
facilityName = match.name;
}
if (facilityName && name) {
Expand Down
6 changes: 4 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useGroups.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ import samePageCheckGenerator from 'kolibri-common/utils/samePageCheckGenerator'
import LearnerGroupResource from 'kolibri-common/apiResources/LearnerGroupResource';
import FacilityUserResource from 'kolibri-common/apiResources/FacilityUserResource';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';

// Place outside the function to keep the state
const groupsAreLoading = ref(false);
const { getFacilities, facilities } = useFacilities();

export function useGroups() {
function setGroupsLoading(loading) {
Expand All @@ -15,8 +17,8 @@ export function useGroups() {
async function showGroupsPage(store, classId) {
const initClassInfoPromise = store.dispatch('initClassInfo', classId);
const getFacilitiesPromise =
useUser().isSuperuser.value && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
useUser().isSuperuser.value && facilities.value.length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down
6 changes: 4 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useLessons.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { ref } from 'vue';
import LearnerGroupResource from 'kolibri-common/apiResources/LearnerGroupResource';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../constants';

// Place outside the function to keep the state
const lessonsAreLoading = ref(false);
const { getFacilities, facilities } = useFacilities();

export function useLessons() {
function setLessonsLoading(loading) {
Expand All @@ -15,8 +17,8 @@ export function useLessons() {
async function showLessonsRootPage(store, classId) {
const initClassInfoPromise = store.dispatch('initClassInfo', classId);
const getFacilitiesPromise =
useUser().isSuperuser.value && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
useUser().isSuperuser.value && facilities.value.length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ import { ContentNodeKinds } from 'kolibri/constants';
import chunk from 'lodash/chunk';
import useUser from 'kolibri/composables/useUser';
import { get } from '@vueuse/core';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../../constants';

const { getFacilities, facilities } = useFacilities();

async function showResourceSelectionPage(store, params) {
const {
lessonId,
Expand All @@ -22,8 +25,8 @@ async function showResourceSelectionPage(store, params) {
const initClassInfoPromise = store.dispatch('initClassInfo', params.classId);
const { isSuperuser } = useUser();
const getFacilitiesPromise =
get(isSuperuser) && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down Expand Up @@ -186,8 +189,8 @@ export async function showLessonResourceContentPreview(store, params) {
const initClassInfoPromise = store.dispatch('initClassInfo', classId);
const { isSuperuser } = useUser();
const getFacilitiesPromise =
get(isSuperuser) && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand All @@ -203,8 +206,8 @@ export async function showLessonSelectionContentPreview(store, params, query = {
const initClassInfoPromise = store.dispatch('initClassInfo', classId);
const { isSuperuser } = useUser();
const getFacilitiesPromise =
get(isSuperuser) && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import LearnerGroupResource from 'kolibri-common/apiResources/LearnerGroupResource';
import useUser from 'kolibri/composables/useUser';
import { get } from '@vueuse/core';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../../constants';

export async function setLessonSummaryState(store, params) {
const { getFacilities, facilities } = useFacilities();
const { classId, lessonId } = params;
store.commit('lessonSummary/resources/RESET_STATE');
store.commit('lessonSummary/SET_STATE', {
Expand All @@ -16,8 +18,8 @@ export async function setLessonSummaryState(store, params) {
const initClassInfoPromise = store.dispatch('initClassInfo', classId);
const { isSuperuser } = useUser();
const getFacilitiesPromise =
get(isSuperuser) && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

await Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down
11 changes: 7 additions & 4 deletions kolibri/plugins/coach/assets/src/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import store from 'kolibri/store';
import router from 'kolibri/router';
import useUser from 'kolibri/composables/useUser';
import { get } from '@vueuse/core';
import useFacilities from 'kolibri-common/composables/useFacilities';
import AllFacilitiesPage from '../views/AllFacilitiesPage';
import CoachClassListPage from '../views/CoachClassListPage';
import ClassLearnersListPage from '../views/ClassLearnersListPage';
Expand All @@ -20,9 +21,11 @@ import groupsRoutes from './groupsRoutes';
function showHomePage(toRoute) {
const initClassInfoPromise = store.dispatch('initClassInfo', toRoute.params.classId);
const { isSuperuser } = useUser();
const { getFacilities, facilities } = useFacilities();

const getFacilitiesPromise =
get(isSuperuser) && store.state.core.facilities.length === 0
? store.dispatch('getFacilities').catch(() => {})
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

return Promise.all([initClassInfoPromise, getFacilitiesPromise]);
Expand Down Expand Up @@ -124,8 +127,8 @@ export default [
path: '/',
// Redirect to AllFacilitiesPage if a superuser and device has > 1 facility
beforeEnter(to, from, next) {
const { userIsMultiFacilityAdmin } = useUser();
if (get(userIsMultiFacilityAdmin)) {
const { userIsMultiFacilityAdmin } = useFacilities();
if (userIsMultiFacilityAdmin.value) {
next({ name: 'AllFacilitiesPage', replace: true });
} else {
next({ name: 'CoachClassListPage', replace: true });
Expand Down
9 changes: 5 additions & 4 deletions kolibri/plugins/coach/assets/src/routes/utils.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import store from 'kolibri/store';
import useUser from 'kolibri/composables/useUser';
import { get } from '@vueuse/core';
import useFacilities from 'kolibri-common/composables/useFacilities';

export function classIdParamRequiredGuard(toRoute, subtopicName, next) {
if (!toRoute.params.classId) {
const { userIsMultiFacilityAdmin } = useUser();
const redirectPage = get(userIsMultiFacilityAdmin) ? 'AllFacilitiesPage' : 'CoachClassListPage';
const { userIsMultiFacilityAdmin } = useFacilities();
const redirectPage = userIsMultiFacilityAdmin.value
? 'AllFacilitiesPage'
: 'CoachClassListPage';

next({
name: redirectPage,
Expand Down
11 changes: 4 additions & 7 deletions kolibri/plugins/coach/assets/src/views/AllFacilitiesPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import CoreTable from 'kolibri/components/CoreTable';
import commonCoreStrings from 'kolibri/uiText/commonCoreStrings';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';
import commonCoach from './common';
import CoachAppBarPage from './CoachAppBarPage';

Expand All @@ -53,8 +54,9 @@
},
mixins: [commonCoach, commonCoreStrings],
setup() {
const { facility_id, userIsMultiFacilityAdmin } = useUser();
return { facility_id, userIsMultiFacilityAdmin };
const { facility_id } = useUser();
const { facilities, userIsMultiFacilityAdmin } = useFacilities();
return { facility_id, userIsMultiFacilityAdmin, facilities };
},
props: {
subtopicName: {
Expand All @@ -63,11 +65,6 @@
default: null,
},
},
computed: {
facilities() {
return this.$store.state.core.facilities;
},
},
beforeMount() {
if (!this.userIsMultiFacilityAdmin) {
const singleFacility = { id: this.facility_id };
Expand Down
8 changes: 5 additions & 3 deletions kolibri/plugins/coach/assets/src/views/CoachClassListPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
import commonCoreStrings from 'kolibri/uiText/commonCoreStrings';
import urls from 'kolibri/urls';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../constants';
import CoachAppBarPage from './CoachAppBarPage';
import commonCoach from './common';
Expand All @@ -81,8 +82,9 @@
},
mixins: [commonCoach, commonCoreStrings],
setup() {
const { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin } = useUser();
return { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin };
const { isClassCoach, isFacilityCoach } = useUser();
const { facilities, userIsMultiFacilityAdmin } = useFacilities();
return { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin, facilities };
},
props: {
subtopicName: {
Expand Down Expand Up @@ -127,7 +129,7 @@
const { facility_id } = this.$route.params;

if (facility_id) {
const match = find(this.$store.state.core.facilities, { id: facility_id }) || {};
const match = find(this.facilities, { id: facility_id }) || {};
facilityName = match.name;
}
if (facilityName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
import { mapGetters } from 'vuex';
import pickBy from 'lodash/pickBy';
import commonCoreStrings from 'kolibri/uiText/commonCoreStrings';
import useUser from 'kolibri/composables/useUser';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { ClassesPageNames } from '../../../../../../learn/assets/src/constants';
import commonCoach from '../../common';
import { LastPages } from '../../../constants/lastPagesConstants';
Expand All @@ -71,7 +71,7 @@
name: 'OverviewBlock',
mixins: [commonCoach, commonCoreStrings],
setup() {
const { userIsMultiFacilityAdmin } = useUser();
const { userIsMultiFacilityAdmin } = useFacilities();
return { userIsMultiFacilityAdmin };
},
computed: {
Expand Down
Loading