mirror of
https://github.com/directus/directus.git
synced 2026-02-08 11:05:02 -05:00
Modules store and bar (#112)
* Register views globally * Use global private view in debug route * Register login route * Add barebones login form * Add auth check on routing * Add tests and extract checkAuth function * Fix tests of router * Move stores into subfolders * Register modules from modules store * Register name / icon in modules store * Update module configs * Render v-button in module sidebar * Render correct paths in module sidebar * Add activated style to button * Use correct color for button in module bar * Use correct icons for system modules * Add tests for modules store * Remove readme in favor of inline comments
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
import { ModuleConfig } from '@/modules/types';
|
||||
import { ModuleConfig } from '@/types/modules';
|
||||
import Collections from './collections.vue';
|
||||
|
||||
const config: ModuleConfig = {
|
||||
id: 'collections',
|
||||
icon: 'box',
|
||||
name: i18n => i18n.tc('collection', 2),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { ModuleConfig } from '@/modules/types';
|
||||
import { ModuleConfig } from '@/types/modules';
|
||||
import Files from './files.vue';
|
||||
|
||||
const config: ModuleConfig = {
|
||||
id: 'files',
|
||||
icon: 'collections',
|
||||
name: i18n => i18n.t('collections.directus_files'),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
|
||||
6
src/modules/index.ts
Normal file
6
src/modules/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import CollectionsModule from './collections/';
|
||||
import FilesModule from './files/';
|
||||
import SettingsModule from './settings/';
|
||||
import UsersModule from './users/';
|
||||
|
||||
export default [CollectionsModule, FilesModule, SettingsModule, UsersModule];
|
||||
@@ -1,23 +0,0 @@
|
||||
import Vue from 'vue';
|
||||
import { registerModule } from './register';
|
||||
import { ModuleConfig } from './types';
|
||||
import router from '@/router';
|
||||
|
||||
jest.mock('@/router', () => ({
|
||||
addRoutes: jest.fn()
|
||||
}));
|
||||
|
||||
describe('Modules / Register', () => {
|
||||
beforeEach(() => {
|
||||
(router.addRoutes as jest.Mock).mockClear();
|
||||
});
|
||||
|
||||
it('Registers the routes in router', () => {
|
||||
const mockModule: ModuleConfig = {
|
||||
id: 'test-module',
|
||||
routes: []
|
||||
};
|
||||
registerModule(mockModule);
|
||||
expect(router.addRoutes).toBeCalledWith([]);
|
||||
});
|
||||
});
|
||||
@@ -1,26 +0,0 @@
|
||||
import router from '@/router';
|
||||
import { ModuleConfig } from '@/modules/types';
|
||||
|
||||
import CollectionsModule from './collections/';
|
||||
import FilesModule from './files/';
|
||||
import SettingsModule from './settings/';
|
||||
import UsersModule from './users/';
|
||||
|
||||
// The core modules are available regardless of project, so they can be registered immediately
|
||||
[CollectionsModule, FilesModule, SettingsModule, UsersModule].forEach(registerModule);
|
||||
|
||||
export function registerModule(config: ModuleConfig) {
|
||||
const routes = config.routes.map(route => ({
|
||||
...route,
|
||||
path: `/:project/${config.id}${route.path}`
|
||||
}));
|
||||
|
||||
router.addRoutes(routes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NOTE
|
||||
* The system modules that are registered here will most likely have to be re-registered on login
|
||||
* as reset the router on logout to prevent custom modules from persisting between project switches
|
||||
* wrongly
|
||||
*/
|
||||
@@ -1,8 +1,10 @@
|
||||
import { ModuleConfig } from '@/modules/types';
|
||||
import { ModuleConfig } from '@/types/modules';
|
||||
import Settings from './settings.vue';
|
||||
|
||||
const config: ModuleConfig = {
|
||||
id: 'settings',
|
||||
icon: 'settings',
|
||||
name: i18n => i18n.t('settings'),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
import { RouteConfig } from 'vue-router';
|
||||
|
||||
export type ModuleConfig = {
|
||||
id: string;
|
||||
routes: RouteConfig[];
|
||||
};
|
||||
@@ -1,8 +1,10 @@
|
||||
import { ModuleConfig } from '@/modules/types';
|
||||
import { ModuleConfig } from '@/types/modules';
|
||||
import Users from './users.vue';
|
||||
|
||||
const config: ModuleConfig = {
|
||||
id: 'users',
|
||||
icon: 'people',
|
||||
name: i18n => i18n.t('collections.directus_users'),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
|
||||
Reference in New Issue
Block a user