diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d7782dcc211..e01aa0412e3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,6 +29,14 @@ repos: entry: yarn run lint-frontend:format language: system files: \.(js|vue|scss|css)$ +- repo: local + hooks: + - id: core-js-api + name: Rebuild kolibri package + description: Rebuilds kolibri package on changes to core js api + entry: yarn run build-kolibri-tools + language: system + files: ^packages/kolibri/.*\.(js|vue)$ - repo: local hooks: - id: no-auto-migrations @@ -75,6 +83,12 @@ repos: entry: settings\.AUTH_USER_MODEL language: pygrep files: migrations/.*\.py$ + - id: no-kolibri-common-imports + name: No imports from kolibri-common (which is unpublished) in any other packages + entry: kolibri-common + language: pygrep + exclude: (^packages/kolibri-common/|moduleMapping\.js|test/fixtures) + files: ^packages/.*\.(js|vue)$ - repo: https://github.com/isidentical/teyit rev: 0.4.3 hooks: diff --git a/kolibri/plugins/device/assets/src/views/DeviceInfoPage.vue b/kolibri/plugins/device/assets/src/views/DeviceInfoPage.vue index 7e058809359..0ca95550775 100644 --- a/kolibri/plugins/device/assets/src/views/DeviceInfoPage.vue +++ b/kolibri/plugins/device/assets/src/views/DeviceInfoPage.vue @@ -81,7 +81,7 @@ - - - diff --git a/packages/kolibri-common/components/CoreMenu/__tests__/CoreMenuDivider.spec.js b/packages/kolibri-common/components/CoreMenu/__tests__/CoreMenuDivider.spec.js deleted file mode 100644 index 650b1feb9b4..00000000000 --- a/packages/kolibri-common/components/CoreMenu/__tests__/CoreMenuDivider.spec.js +++ /dev/null @@ -1,10 +0,0 @@ -import { render, screen } from '@testing-library/vue'; -import CoreMenuDivider from '../CoreMenuDivider.vue'; - -describe('CoreMenuDivider', () => { - test('renders the component', () => { - render(CoreMenuDivider); - - expect(screen.getByRole('listitem')).toBeInTheDocument(); - }); -}); diff --git a/packages/kolibri-common/components/SidePanelModal/index.vue b/packages/kolibri-common/components/SidePanelModal/index.vue index 6dfd0da30cd..978faf87e51 100644 --- a/packages/kolibri-common/components/SidePanelModal/index.vue +++ b/packages/kolibri-common/components/SidePanelModal/index.vue @@ -67,7 +67,7 @@ - + diff --git a/packages/kolibri/components/pages/NotificationsRoot/index.vue b/packages/kolibri/components/pages/NotificationsRoot/index.vue index 19189f95ce6..e99d96d6297 100644 --- a/packages/kolibri/components/pages/NotificationsRoot/index.vue +++ b/packages/kolibri/components/pages/NotificationsRoot/index.vue @@ -44,15 +44,15 @@ import { mapState } from 'vuex'; import Lockr from 'lockr'; - import PingbackNotificationResource from 'kolibri-common/apiResources/PingbackNotificationResource'; - import PingbackNotificationDismissedResource from 'kolibri-common/apiResources/PingbackNotificationDismissedResource'; import { UPDATE_MODAL_DISMISSED } from 'kolibri/constants'; import { currentLanguage, defaultLanguage } from 'kolibri/utils/i18n'; import AuthMessage from 'kolibri/components/AuthMessage'; import AppBarPage from 'kolibri/components/pages/AppBarPage'; - import AppError from 'kolibri-common/components/AppError'; - import GlobalSnackbar from 'kolibri-common/components/GlobalSnackbar'; + import AppError from 'kolibri/components/error/AppError'; + import GlobalSnackbar from 'kolibri/components/GlobalSnackbar'; import useUser from 'kolibri/composables/useUser'; + import PingbackNotificationDismissedResource from './internal/PingbackNotificationDismissedResource'; + import PingbackNotificationResource from './internal/PingbackNotificationResource'; import UpdateNotification from './internal/UpdateNotification'; export default { diff --git a/packages/kolibri-common/apiResources/PingbackNotificationDismissedResource.js b/packages/kolibri/components/pages/NotificationsRoot/internal/PingbackNotificationDismissedResource.js similarity index 100% rename from packages/kolibri-common/apiResources/PingbackNotificationDismissedResource.js rename to packages/kolibri/components/pages/NotificationsRoot/internal/PingbackNotificationDismissedResource.js diff --git a/packages/kolibri-common/apiResources/PingbackNotificationResource.js b/packages/kolibri/components/pages/NotificationsRoot/internal/PingbackNotificationResource.js similarity index 100% rename from packages/kolibri-common/apiResources/PingbackNotificationResource.js rename to packages/kolibri/components/pages/NotificationsRoot/internal/PingbackNotificationResource.js diff --git a/packages/kolibri/components/pages/__tests__/NotificationsRoot.spec.js b/packages/kolibri/components/pages/__tests__/NotificationsRoot.spec.js index e56b26a2c56..080c6d2e292 100644 --- a/packages/kolibri/components/pages/__tests__/NotificationsRoot.spec.js +++ b/packages/kolibri/components/pages/__tests__/NotificationsRoot.spec.js @@ -6,8 +6,8 @@ import { coreStoreFactory as makeStore } from '../../../store'; import coreModule from '../../../../../kolibri/core/assets/src/state/modules/core'; jest.mock('kolibri/composables/useUser'); -jest.mock('kolibri-common/apiResources/PingbackNotificationResource'); -jest.mock('kolibri-common/apiResources/PingbackNotificationDismissedResource'); +jest.mock('../NotificationsRoot/internal/PingbackNotificationResource'); +jest.mock('../NotificationsRoot/internal/PingbackNotificationDismissedResource'); function makeWrapper(useUserMockObj = null) { const store = makeStore(); diff --git a/packages/kolibri-common/apiResources/UserProgressResource.js b/packages/kolibri/composables/internal/UserProgressResource.js similarity index 100% rename from packages/kolibri-common/apiResources/UserProgressResource.js rename to packages/kolibri/composables/internal/UserProgressResource.js diff --git a/packages/kolibri/composables/useTotalProgress.js b/packages/kolibri/composables/useTotalProgress.js index dd15944068b..3fd3131b75b 100644 --- a/packages/kolibri/composables/useTotalProgress.js +++ b/packages/kolibri/composables/useTotalProgress.js @@ -1,8 +1,8 @@ import { ref, computed } from '@vue/composition-api'; import { get, set } from '@vueuse/core'; import useUser from 'kolibri/composables/useUser'; -import UserProgressResource from 'kolibri-common/apiResources/UserProgressResource'; import { MaxPointsPerContent } from 'kolibri/constants'; +import UserProgressResource from './internal/UserProgressResource'; const totalProgress = ref(null); diff --git a/packages/kolibri-common/composables/useUserSyncStatus.js b/packages/kolibri/composables/useUserSyncStatus.js similarity index 95% rename from packages/kolibri-common/composables/useUserSyncStatus.js rename to packages/kolibri/composables/useUserSyncStatus.js index 91f24b5c93d..6e2ed1f9de2 100644 --- a/packages/kolibri-common/composables/useUserSyncStatus.js +++ b/packages/kolibri/composables/useUserSyncStatus.js @@ -1,10 +1,14 @@ import { ref, onMounted, onUnmounted, computed } from '@vue/composition-api'; -import UserSyncStatusResource from 'kolibri-common/apiResources/UserSyncStatusResource'; +import { Resource } from 'kolibri/apiResource'; import store from 'kolibri/store'; import { SyncStatus } from 'kolibri/constants'; import { get, useTimeoutPoll } from '@vueuse/core'; import useUser from 'kolibri/composables/useUser'; +const UserSyncStatusResource = new Resource({ + name: 'usersyncstatus', +}); + const { isLearnerOnlyImport, isUserLoggedIn, currentUserId } = useUser(); const status = ref(SyncStatus.NOT_CONNECTED); diff --git a/packages/kolibri/internal/apiSpec.js b/packages/kolibri/internal/apiSpec.js index 8afaeba9634..9bf80b57fe3 100644 --- a/packages/kolibri/internal/apiSpec.js +++ b/packages/kolibri/internal/apiSpec.js @@ -9,12 +9,21 @@ export default { 'kolibri/apiResources/TaskResource': require('kolibri/apiResources/TaskResource'), 'kolibri/client': require('kolibri/client'), 'kolibri/components/AuthMessage': require('kolibri/components/AuthMessage'), + 'kolibri/components/Backdrop': require('kolibri/components/Backdrop'), 'kolibri/components/BottomAppBar': require('kolibri/components/BottomAppBar'), 'kolibri/components/CoreLogo': require('kolibri/components/CoreLogo'), + 'kolibri/components/CoreMenu': require('kolibri/components/CoreMenu'), + 'kolibri/components/CoreMenu/CoreMenuOption': require('kolibri/components/CoreMenu/CoreMenuOption'), 'kolibri/components/CoreTable': require('kolibri/components/CoreTable'), + 'kolibri/components/DownloadButton': require('kolibri/components/DownloadButton'), 'kolibri/components/FilterTextbox': require('kolibri/components/FilterTextbox'), + 'kolibri/components/GlobalSnackbar': require('kolibri/components/GlobalSnackbar'), + 'kolibri/components/PrivacyInfoModal': require('kolibri/components/PrivacyInfoModal'), 'kolibri/components/SkipNavigationLink': require('kolibri/components/SkipNavigationLink'), 'kolibri/components/SyncStatusDisplay': require('kolibri/components/SyncStatusDisplay'), + 'kolibri/components/error/AppError': require('kolibri/components/error/AppError'), + 'kolibri/components/error/ReportErrorModal': require('kolibri/components/error/ReportErrorModal'), + 'kolibri/components/error/TechnicalTextBlock': require('kolibri/components/error/TechnicalTextBlock'), 'kolibri/components/language-switcher/LanguageSwitcherList': require('kolibri/components/language-switcher/LanguageSwitcherList'), 'kolibri/components/language-switcher/LanguageSwitcherModal': require('kolibri/components/language-switcher/LanguageSwitcherModal'), 'kolibri/components/pages/AppBarPage': require('kolibri/components/pages/AppBarPage'), @@ -27,6 +36,7 @@ export default { 'kolibri/composables/useSnackbar': require('kolibri/composables/useSnackbar'), 'kolibri/composables/useTotalProgress': require('kolibri/composables/useTotalProgress'), 'kolibri/composables/useUser': require('kolibri/composables/useUser'), + 'kolibri/composables/useUserSyncStatus': require('kolibri/composables/useUserSyncStatus'), 'kolibri/constants': require('kolibri/constants'), 'kolibri/heartbeat': require('kolibri/heartbeat'), 'kolibri/router': require('kolibri/router'), @@ -44,6 +54,7 @@ export default { 'kolibri/utils/i18n': require('kolibri/utils/i18n'), 'kolibri/utils/objectSpecs': require('kolibri/utils/objectSpecs'), 'kolibri/utils/redirectBrowser': require('kolibri/utils/redirectBrowser'), + 'kolibri/utils/scriptLoader': require('kolibri/utils/scriptLoader'), 'kolibri/utils/serverClock': require('kolibri/utils/serverClock'), 'kolibri/utils/validators': require('kolibri/utils/validators'), 'kolibri-logging': require('kolibri-logging'), diff --git a/packages/kolibri/internal/pluginMediator.js b/packages/kolibri/internal/pluginMediator.js index a5dd4b6dd96..c4303716515 100644 --- a/packages/kolibri/internal/pluginMediator.js +++ b/packages/kolibri/internal/pluginMediator.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import logging from 'kolibri-logging'; -import scriptLoader from 'kolibri-common/utils/scriptLoader'; +import scriptLoader from 'kolibri/utils/scriptLoader'; import { RENDERER_SUFFIX } from 'kolibri/constants'; import { languageDirection, languageDirections, currentLanguage } from 'kolibri/utils/i18n'; import contentRendererMixin from '../components/internal/ContentRenderer/mixin'; diff --git a/packages/kolibri/package.json b/packages/kolibri/package.json index 2140684a9b2..04b9f656051 100644 --- a/packages/kolibri/package.json +++ b/packages/kolibri/package.json @@ -12,12 +12,21 @@ "./apiResources/TaskResource": "./apiResources/TaskResource", "./client": "./client", "./components/AuthMessage": "./components/AuthMessage", + "./components/Backdrop": "./components/Backdrop", "./components/BottomAppBar": "./components/BottomAppBar", "./components/CoreLogo": "./components/CoreLogo", + "./components/CoreMenu": "./components/CoreMenu", + "./components/CoreMenu/CoreMenuOption": "./components/CoreMenu/CoreMenuOption", "./components/CoreTable": "./components/CoreTable", + "./components/DownloadButton": "./components/DownloadButton", "./components/FilterTextbox": "./components/FilterTextbox", + "./components/GlobalSnackbar": "./components/GlobalSnackbar", + "./components/PrivacyInfoModal": "./components/PrivacyInfoModal", "./components/SkipNavigationLink": "./components/SkipNavigationLink", "./components/SyncStatusDisplay": "./components/SyncStatusDisplay", + "./components/error/AppError": "./components/error/AppError", + "./components/error/ReportErrorModal": "./components/error/ReportErrorModal", + "./components/error/TechnicalTextBlock": "./components/error/TechnicalTextBlock", "./components/language-switcher/LanguageSwitcherList": "./components/language-switcher/LanguageSwitcherList", "./components/language-switcher/LanguageSwitcherModal": "./components/language-switcher/LanguageSwitcherModal", "./components/pages/AppBarPage": "./components/pages/AppBarPage", @@ -30,6 +39,7 @@ "./composables/useSnackbar": "./composables/useSnackbar", "./composables/useTotalProgress": "./composables/useTotalProgress", "./composables/useUser": "./composables/useUser", + "./composables/useUserSyncStatus": "./composables/useUserSyncStatus", "./constants": "./constants", "./heartbeat": "./heartbeat", "./router": "./router", @@ -47,6 +57,7 @@ "./utils/i18n": "./utils/i18n", "./utils/objectSpecs": "./utils/objectSpecs", "./utils/redirectBrowser": "./utils/redirectBrowser", + "./utils/scriptLoader": "./utils/scriptLoader", "./utils/serverClock": "./utils/serverClock", "./utils/validators": "./utils/validators" }, diff --git a/packages/kolibri-common/utils/scriptLoader.js b/packages/kolibri/utils/scriptLoader.js similarity index 100% rename from packages/kolibri-common/utils/scriptLoader.js rename to packages/kolibri/utils/scriptLoader.js