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

Prev Previous commit
Next Next commit
migrate facilities state
  • Loading branch information
ozer550 committed Jan 21, 2025

Partially verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
We cannot verify signatures from co-authors, and some of the co-authors attributed to this commit require their commits to be signed.
commit ab006c27cec94af94c50118c4f99b6d6d95157ce
6 changes: 4 additions & 2 deletions kolibri/core/assets/src/state/modules/session.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import some from 'lodash/some';
import { UserKinds } from 'kolibri/constants';
import useFacilities from 'kolibri-common/composables/useFacilities';

export const baseSessionState = {
app_context: false,
@@ -46,8 +47,9 @@ export default {
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;
userIsMultiFacilityAdmin(state, getters) {
const { facilities } = useFacilities();
return getters.isSuperuser && facilities.value.length > 1;
},
getUserPermissions(state) {
const permissions = {};
4 changes: 2 additions & 2 deletions kolibri/plugins/coach/assets/src/app.js
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ import routes from './routes';
import pluginModule from './modules/pluginModule';
import HomeActivityPage from './views/home/HomeActivityPage';

const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();

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

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

6 changes: 4 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useCoreCoach.js
Original file line number Diff line number Diff line change
@@ -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);
@@ -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) {
4 changes: 2 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useGroups.js
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ import useFacilities from 'kolibri-common/composables/useFacilities';

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

export function useGroups() {
function setGroupsLoading(loading) {
@@ -17,7 +17,7 @@ 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
useUser().isSuperuser.value && facilities.value.length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

4 changes: 2 additions & 2 deletions kolibri/plugins/coach/assets/src/composables/useLessons.js
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ import { PageNames } from '../constants';

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

export function useLessons() {
function setLessonsLoading(loading) {
@@ -17,7 +17,7 @@ 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
useUser().isSuperuser.value && facilities.value.length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ import { get } from '@vueuse/core';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../../constants';

const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();

async function showResourceSelectionPage(store, params) {
const {
@@ -25,7 +25,7 @@ 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
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

@@ -189,7 +189,7 @@ 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
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

@@ -206,7 +206,7 @@ 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
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../../constants';

export async function setLessonSummaryState(store, params) {
const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();
const { classId, lessonId } = params;
store.commit('lessonSummary/resources/RESET_STATE');
store.commit('lessonSummary/SET_STATE', {
@@ -18,7 +18,7 @@ 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
get(isSuperuser) && get(facilities).length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

4 changes: 2 additions & 2 deletions kolibri/plugins/coach/assets/src/routes/index.js
Original file line number Diff line number Diff line change
@@ -21,10 +21,10 @@ import groupsRoutes from './groupsRoutes';
function showHomePage(toRoute) {
const initClassInfoPromise = store.dispatch('initClassInfo', toRoute.params.classId);
const { isSuperuser } = useUser();
const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();

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

9 changes: 3 additions & 6 deletions kolibri/plugins/coach/assets/src/views/AllFacilitiesPage.vue
Original file line number Diff line number Diff line change
@@ -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';

@@ -54,7 +55,8 @@
mixins: [commonCoach, commonCoreStrings],
setup() {
const { facility_id, userIsMultiFacilityAdmin } = useUser();
return { facility_id, userIsMultiFacilityAdmin };
const { facilities } = useFacilities();
return { facility_id, userIsMultiFacilityAdmin, facilities };
},
props: {
subtopicName: {
@@ -63,11 +65,6 @@
default: null,
},
},
computed: {
facilities() {
return this.$store.state.core.facilities;
},
},
beforeMount() {
if (!this.userIsMultiFacilityAdmin) {
const singleFacility = { id: this.facility_id };
6 changes: 4 additions & 2 deletions kolibri/plugins/coach/assets/src/views/CoachClassListPage.vue
Original file line number Diff line number Diff line change
@@ -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';
@@ -82,7 +83,8 @@
mixins: [commonCoach, commonCoreStrings],
setup() {
const { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin } = useUser();
return { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin };
const { facilities } = useFacilities();
return { isClassCoach, isFacilityCoach, userIsMultiFacilityAdmin, facilities };
},
props: {
subtopicName: {
@@ -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) {
Original file line number Diff line number Diff line change
@@ -48,10 +48,10 @@
},
},
created() {
const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();
const initClassInfoPromise = this.$store.dispatch('initClassInfo', this.classId);
const getFacilitiesPromise =
this.isSuperuser && this.$store.state.core.facilities.length === 0
this.isSuperuser && facilities.length === 0
? getFacilities().catch(() => {})
: Promise.resolve();

Original file line number Diff line number Diff line change
@@ -56,10 +56,12 @@
setup() {
const { createSnackbar } = useSnackbar();
const { isSuperuser } = useUser();

const { getFacilities, facilities } = useFacilities();
return {
createSnackbar,
isSuperuser,
getFacilities,
facilities,
};
},
props: {
@@ -97,14 +99,13 @@
},
},
created() {
const { getFacilities } = useFacilities();
const initClassInfoPromise = this.$store.dispatch(
'initClassInfo',
this.$route.params.classId,
);
const getFacilitiesPromise =
this.isSuperuser && this.$store.state.core.facilities.length === 0
? getFacilities().catch(() => {})
this.isSuperuser && this.facilities.length === 0
? this.getFacilities().catch(() => {})
: Promise.resolve();

Promise.all([initClassInfoPromise, getFacilitiesPromise])
4 changes: 2 additions & 2 deletions kolibri/plugins/device/assets/src/app.js
Original file line number Diff line number Diff line change
@@ -44,10 +44,10 @@ class DeviceManagementModule extends KolibriApp {
}
}
ready() {
const { getFacilities } = useFacilities();
const { getFacilities, facilities } = useFacilities();
// reset module states after leaving their respective page
router.beforeEach((to, from, next) => {
if (this.store.state.core.facilities.length === 0) {
if (facilities.value.length === 0) {
getFacilities().then(next, next);
}
next();
6 changes: 3 additions & 3 deletions kolibri/plugins/device/assets/src/views/DeviceIndex.vue
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@
import urls from 'kolibri/urls';
import useUser from 'kolibri/composables/useUser';
import plugin_data from 'kolibri-plugin-data';
import useFacilities from 'kolibri-common/composables/useFacilities';
import { PageNames } from '../constants';

import PinAuthenticationModal from './PinAuthenticationModal';
@@ -43,9 +44,11 @@
mixins: [commonCoreStrings],
setup() {
const { isUserLoggedIn, userFacilityId } = useUser();
const { facilities } = useFacilities();
return {
isUserLoggedIn,
userFacilityId,
facilities,
};
},
data() {
@@ -56,9 +59,6 @@
},
computed: {
...mapState(['authenticateWithPin', 'grantPluginAccess']),
facilities() {
return this.$store.state.core.facilities;
},
isPinSet() {
const dataset = this.currentFacility['dataset'] || {};
const extraFields = dataset['extra_fields'] || {};
Original file line number Diff line number Diff line change
@@ -386,6 +386,7 @@
import { checkCapability } from 'kolibri/utils/appCapabilities';
import useUser from 'kolibri/composables/useUser';
import useSnackbar from 'kolibri/composables/useSnackbar';
import useFacilities from 'kolibri-common/composables/useFacilities';
import commonDeviceStrings from '../commonDeviceStrings';
import DeviceAppBarPage from '../DeviceAppBarPage';
import { LandingPageChoices, MeteredConnectionDownloadOptions } from '../../constants';
@@ -430,6 +431,7 @@
const { windowIsSmall } = useKResponsiveWindow();
const dataPlugins = ref(null);
const { snackbarIsVisible, createSnackbar } = useSnackbar();
const { facilities } = useFacilities();

fetchPlugins.then(() => {
dataPlugins.value = plugins.value.map(plugin => ({ ...plugin }));
@@ -468,6 +470,7 @@
windowIsSmall,
snackbarIsVisible,
createSnackbar,
facilities,
};
},
data() {
@@ -517,9 +520,6 @@
pageTitle() {
return this.deviceString('deviceManagementTitle');
},
facilities() {
return this.$store.getters.facilities;
},
isMultiFacilitySuperuser() {
return this.isSuperuser && this.facilities.length > 1;
},
Original file line number Diff line number Diff line change
@@ -65,13 +65,13 @@

<script>

import { mapGetters } from 'vuex';
import PermissionsIcon from 'kolibri-common/components/labels/PermissionsIcon';
import memoize from 'lodash/memoize';
import { PermissionTypes } from 'kolibri/constants';
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';

export default {
name: 'UserGrid',
@@ -82,7 +82,8 @@
mixins: [commonCoreStrings],
setup() {
const { currentUserId } = useUser();
return { currentUserId };
const { facilities } = useFacilities();
return { currentUserId, facilities };
},
props: {
filterText: {
@@ -104,7 +105,6 @@
},
},
computed: {
...mapGetters(['facilities']),
emptyMessage() {
return this.$tr('noUsersMatching', { searchFilter: this.filterText });
},
Loading
Loading