mirror of
https://github.com/strapi/strapi.git
synced 2025-07-23 09:00:19 +00:00
Improve fetch main data
This commit is contained in:
parent
661a89642b
commit
d6a3184fd7
@ -7,10 +7,12 @@
|
||||
|
||||
/* eslint-disable */
|
||||
import 'babel-polyfill';
|
||||
import request from 'utils/request';
|
||||
import { findIndex } from 'lodash';
|
||||
import 'sanitize.css/sanitize.css';
|
||||
import 'whatwg-fetch';
|
||||
import {
|
||||
getAppDataSucceeded,
|
||||
getAppPluginsSucceeded,
|
||||
unsetHasUserPlugin,
|
||||
} from './containers/App/actions';
|
||||
@ -30,6 +32,28 @@ if (window.location.port !== '4000') {
|
||||
.then(plugins => {
|
||||
dispatch(getAppPluginsSucceeded(plugins));
|
||||
|
||||
const getAppData = async () => {
|
||||
const arrayOfPromises = [
|
||||
'gaConfig',
|
||||
'strapiVersion',
|
||||
'currentEnvironment',
|
||||
'layout',
|
||||
].map(endPoint => request(`/admin/${endPoint}`, { method: 'GET' }));
|
||||
|
||||
return Promise.all(arrayOfPromises);
|
||||
};
|
||||
const getData = async () => {
|
||||
try {
|
||||
const data = await getAppData();
|
||||
|
||||
dispatch(getAppDataSucceeded(data));
|
||||
} catch (err) {
|
||||
console.log({ err });
|
||||
}
|
||||
};
|
||||
|
||||
getData();
|
||||
|
||||
if (findIndex(plugins, ['id', 'users-permissions']) === -1) {
|
||||
dispatch(unsetHasUserPlugin());
|
||||
}
|
||||
@ -39,7 +63,7 @@ if (window.location.port !== '4000') {
|
||||
(plugins || []).forEach(plugin => {
|
||||
const script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.onerror = function (oError) {
|
||||
script.onerror = function(oError) {
|
||||
const source = new URL(oError.target.src);
|
||||
const url = new URL(`${strapi.remoteURL}`);
|
||||
|
||||
@ -57,9 +81,13 @@ if (window.location.port !== '4000') {
|
||||
$body.appendChild(newScript);
|
||||
};
|
||||
|
||||
script.src = plugin.source[process.env.NODE_ENV].indexOf('://') === -1 ?
|
||||
`${basename}${plugin.source[process.env.NODE_ENV]}`.replace('//', '/'): // relative
|
||||
plugin.source[process.env.NODE_ENV]; // absolute
|
||||
script.src =
|
||||
plugin.source[process.env.NODE_ENV].indexOf('://') === -1
|
||||
? `${basename}${plugin.source[process.env.NODE_ENV]}`.replace(
|
||||
'//',
|
||||
'/',
|
||||
) // relative
|
||||
: plugin.source[process.env.NODE_ENV]; // absolute
|
||||
|
||||
$body.appendChild(script);
|
||||
});
|
||||
@ -69,6 +97,4 @@ if (window.location.port !== '4000') {
|
||||
});
|
||||
}
|
||||
|
||||
export {
|
||||
dispatch,
|
||||
};
|
||||
export { dispatch };
|
||||
|
@ -1,16 +1,18 @@
|
||||
/**
|
||||
* appDev.js
|
||||
*
|
||||
*
|
||||
* This is then entry file for the application in development
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
import { findIndex } from 'lodash';
|
||||
import request from 'utils/request';
|
||||
import 'babel-polyfill';
|
||||
import 'sanitize.css/sanitize.css';
|
||||
import {
|
||||
getAppPluginsSucceeded,
|
||||
unsetHasUserPlugin,
|
||||
getAppDataSucceeded,
|
||||
} from './containers/App/actions';
|
||||
import { store } from './createStore';
|
||||
import render from './renderApp';
|
||||
@ -26,7 +28,29 @@ const plugins = (() => {
|
||||
}
|
||||
})();
|
||||
|
||||
dispatch(getAppPluginsSucceeded(plugins));
|
||||
const getAppData = async () => {
|
||||
const arrayOfPromises = [
|
||||
'gaConfig',
|
||||
'strapiVersion',
|
||||
'currentEnvironment',
|
||||
'layout',
|
||||
].map(endPoint => request(`/admin/${endPoint}`, { method: 'GET' }));
|
||||
|
||||
return Promise.all(arrayOfPromises);
|
||||
};
|
||||
|
||||
const getData = async () => {
|
||||
try {
|
||||
const data = await getAppData();
|
||||
|
||||
dispatch(getAppDataSucceeded(data));
|
||||
dispatch(getAppPluginsSucceeded(plugins));
|
||||
} catch (err) {
|
||||
console.log({ err });
|
||||
}
|
||||
};
|
||||
|
||||
getData();
|
||||
|
||||
// Hot reloadable translation json files
|
||||
if (module.hot) {
|
||||
@ -41,6 +65,4 @@ if (findIndex(plugins, ['id', 'users-permissions']) === -1) {
|
||||
dispatch(unsetHasUserPlugin());
|
||||
}
|
||||
|
||||
export {
|
||||
dispatch,
|
||||
};
|
||||
export { dispatch };
|
||||
|
@ -17,7 +17,7 @@ import saga from './saga';
|
||||
export class Admin extends React.Component {
|
||||
// eslint-disable-line react/prefer-stateless-function
|
||||
render() {
|
||||
return <div />;
|
||||
return <div>Admin</div>;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
describe('<Admin />', () => {
|
||||
it('should not crash', () => {
|
||||
expect(true).toBe(true);
|
||||
// shallow(<Admin />);
|
||||
// renderComponent({});
|
||||
});
|
||||
|
@ -10,6 +10,6 @@
|
||||
|
||||
describe('defaultSaga Saga', () => {
|
||||
it('Expect to have unit tests specified', () => {
|
||||
expect(true).toEqual(false);
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
});
|
||||
|
@ -5,6 +5,6 @@
|
||||
|
||||
describe('makeSelectAdminDomain', () => {
|
||||
it('Expect to have unit tests specified', () => {
|
||||
expect(true).toEqual(false);
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
});
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
import {
|
||||
FREEZE_APP,
|
||||
GET_APP_DATA_SUCCEEDED,
|
||||
GET_APP_PLUGINS_SUCCEEDED,
|
||||
LOAD_PLUGIN,
|
||||
PLUGIN_DELETED,
|
||||
@ -22,6 +23,13 @@ export function freezeApp(data) {
|
||||
};
|
||||
}
|
||||
|
||||
export function getAppDataSucceeded(data) {
|
||||
return {
|
||||
type: GET_APP_DATA_SUCCEEDED,
|
||||
data,
|
||||
};
|
||||
}
|
||||
|
||||
export function getAppPluginsSucceeded(plugins) {
|
||||
return {
|
||||
type: GET_APP_PLUGINS_SUCCEEDED,
|
||||
|
@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
export const FREEZE_APP = 'app/App/FREEZE_APP';
|
||||
export const GET_APP_DATA_SUCCEEDED = 'app/App/GET_APP_DATA_SUCCEEDED';
|
||||
export const GET_APP_PLUGINS_SUCCEEDED = 'app/App/GET_APP_PLUGINS_SUCCEEDED';
|
||||
export const LOAD_PLUGIN = 'app/App/LOAD_PLUGIN';
|
||||
export const PLUGIN_LOADED = 'app/App/PLUGIN_LOADED';
|
||||
|
@ -18,7 +18,8 @@ import LoadingIndicatorPage from 'components/LoadingIndicatorPage';
|
||||
|
||||
import '../../styles/main.scss';
|
||||
|
||||
import AdminPage from '../AdminPage';
|
||||
// import AdminPage from '../AdminPage';
|
||||
import Admin from '../AdminPage';
|
||||
import NotFoundPage from '../NotFoundPage';
|
||||
import NotificationProvider from '../NotificationProvider';
|
||||
import AppLoader from '../AppLoader';
|
||||
@ -37,7 +38,7 @@ function App() {
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
<Switch>
|
||||
<Route path='/' component={AdminPage} />
|
||||
<Route path='/' component={Admin} />
|
||||
<Route path='' component={NotFoundPage} />
|
||||
</Switch>
|
||||
</div>
|
||||
|
@ -8,6 +8,7 @@ import { fromJS, List } from 'immutable';
|
||||
|
||||
import {
|
||||
FREEZE_APP,
|
||||
GET_APP_DATA_SUCCEEDED,
|
||||
GET_APP_PLUGINS_SUCCEEDED,
|
||||
PLUGIN_DELETED,
|
||||
PLUGIN_LOADED,
|
||||
@ -17,6 +18,12 @@ import {
|
||||
} from './constants';
|
||||
|
||||
const initialState = fromJS({
|
||||
appData: {
|
||||
autoReload: false,
|
||||
currentEnvironment: 'development',
|
||||
strapiVersion: '3',
|
||||
uuid: false,
|
||||
},
|
||||
appPlugins: List([]),
|
||||
blockApp: false,
|
||||
overlayBlockerData: null,
|
||||
@ -33,15 +40,34 @@ function appReducer(state = initialState, action) {
|
||||
case ENABLE_GLOBAL_OVERLAY_BLOCKER:
|
||||
return state.set('showGlobalAppBlocker', true);
|
||||
case FREEZE_APP:
|
||||
return state
|
||||
.set('blockApp', true)
|
||||
.update('overlayBlockerData', () => {
|
||||
if (action.data) {
|
||||
return action.data;
|
||||
}
|
||||
return state.set('blockApp', true).update('overlayBlockerData', () => {
|
||||
if (action.data) {
|
||||
return action.data;
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
return null;
|
||||
});
|
||||
case GET_APP_DATA_SUCCEEDED: {
|
||||
const {
|
||||
data: [
|
||||
{ uuid },
|
||||
{ strapiVersion },
|
||||
{ autoReload, currentEnvironment },
|
||||
{ layout },
|
||||
],
|
||||
} = action;
|
||||
|
||||
return (
|
||||
state
|
||||
.updateIn(['appData', 'autoReload'], () => autoReload)
|
||||
.updateIn(['appData', 'currentEnvironment'], () => currentEnvironment)
|
||||
.updateIn(['appData', 'isLoading'], () => false)
|
||||
// TODO: should be removed
|
||||
.updateIn(['appData', 'layout'], () => layout)
|
||||
.updateIn(['appData', 'strapiVersion'], () => strapiVersion)
|
||||
.updateIn(['appData', 'uuid'], () => uuid)
|
||||
);
|
||||
}
|
||||
case GET_APP_PLUGINS_SUCCEEDED:
|
||||
return state
|
||||
.update('appPlugins', () => List(action.appPlugins))
|
||||
@ -49,13 +75,14 @@ function appReducer(state = initialState, action) {
|
||||
case PLUGIN_LOADED:
|
||||
return state.setIn(['plugins', action.plugin.id], fromJS(action.plugin));
|
||||
case UPDATE_PLUGIN:
|
||||
return state.setIn(['plugins', action.pluginId, action.updatedKey], fromJS(action.updatedValue));
|
||||
return state.setIn(
|
||||
['plugins', action.pluginId, action.updatedKey],
|
||||
fromJS(action.updatedValue),
|
||||
);
|
||||
case PLUGIN_DELETED:
|
||||
return state.deleteIn(['plugins', action.plugin]);
|
||||
case UNFREEZE_APP:
|
||||
return state
|
||||
.set('blockApp', false)
|
||||
.set('overlayBlockerData', null);
|
||||
return state.set('blockApp', false).set('overlayBlockerData', null);
|
||||
case UNSET_HAS_USERS_PLUGIN:
|
||||
return state.set('hasUserPlugin', false);
|
||||
default:
|
||||
|
@ -0,0 +1,156 @@
|
||||
import {
|
||||
FREEZE_APP,
|
||||
GET_APP_PLUGINS_SUCCEEDED,
|
||||
LOAD_PLUGIN,
|
||||
PLUGIN_DELETED,
|
||||
PLUGIN_LOADED,
|
||||
UNFREEZE_APP,
|
||||
UNSET_HAS_USERS_PLUGIN,
|
||||
UPDATE_PLUGIN,
|
||||
GET_APP_DATA_SUCCEEDED,
|
||||
} from '../constants';
|
||||
import {
|
||||
freezeApp,
|
||||
getAppDataSucceeded,
|
||||
getAppPluginsSucceeded,
|
||||
loadPlugin,
|
||||
pluginDeleted,
|
||||
pluginLoaded,
|
||||
unfreezeApp,
|
||||
unsetHasUserPlugin,
|
||||
updatePlugin,
|
||||
} from '../actions';
|
||||
|
||||
describe('<App /> actions', () => {
|
||||
describe('freezeApp', () => {
|
||||
it('should return the correct type and the passed data', () => {
|
||||
const data = { strapi: 'isCool' };
|
||||
const expected = {
|
||||
type: FREEZE_APP,
|
||||
data,
|
||||
};
|
||||
|
||||
expect(freezeApp(data)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('unfreezeApp', () => {
|
||||
it('should return the correct type', () => {
|
||||
const expected = {
|
||||
type: UNFREEZE_APP,
|
||||
};
|
||||
|
||||
expect(unfreezeApp()).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('GetAppDataSucceedeed', () => {
|
||||
it('should has a type GET_APP_DATA_SUCCEEDED and return the correct data', () => {
|
||||
const expected = {
|
||||
type: GET_APP_DATA_SUCCEEDED,
|
||||
data: 'test',
|
||||
};
|
||||
|
||||
expect(getAppDataSucceeded('test')).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getAppPluginsSucceeded', () => {
|
||||
it('should return the correct type and an array containing the id of the plugins', () => {
|
||||
const plugins = [
|
||||
{
|
||||
id: 'content-manager',
|
||||
source: {
|
||||
development: '/content-manager/main.js',
|
||||
production: '/content-manager/main.js',
|
||||
staging: '/content-manager/main.js',
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'content-type-builder',
|
||||
source: {
|
||||
development: '/content-type-builder/main.js',
|
||||
production: '/content-type-builder/main.js',
|
||||
staging: '/content-type-builder/main.js',
|
||||
},
|
||||
},
|
||||
];
|
||||
const expected = {
|
||||
type: GET_APP_PLUGINS_SUCCEEDED,
|
||||
appPlugins: ['content-manager', 'content-type-builder'],
|
||||
};
|
||||
|
||||
expect(getAppPluginsSucceeded(plugins)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('loadPlugin', () => {
|
||||
it('should return the correct type and the passed data', () => {
|
||||
const plugin = {
|
||||
id: 'content-manager',
|
||||
description: 'Manage your content',
|
||||
};
|
||||
const expected = {
|
||||
type: LOAD_PLUGIN,
|
||||
plugin,
|
||||
};
|
||||
|
||||
expect(loadPlugin(plugin)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('pluginLoaded', () => {
|
||||
it('should return the correct type and the passed data', () => {
|
||||
const plugin = {
|
||||
id: 'content-manager',
|
||||
description: 'Manage your content',
|
||||
};
|
||||
const expected = {
|
||||
type: PLUGIN_LOADED,
|
||||
plugin,
|
||||
};
|
||||
|
||||
expect(pluginLoaded(plugin)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('pluginDeleted', () => {
|
||||
it('should return the correct type and the passed data', () => {
|
||||
const plugin = 'content-manager';
|
||||
const expected = {
|
||||
type: PLUGIN_DELETED,
|
||||
plugin,
|
||||
};
|
||||
|
||||
expect(pluginDeleted(plugin)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('unsetHasUserPlugin', () => {
|
||||
it('should return the correct type', () => {
|
||||
const expected = {
|
||||
type: UNSET_HAS_USERS_PLUGIN,
|
||||
};
|
||||
|
||||
expect(unsetHasUserPlugin()).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('updatePlugin', () => {
|
||||
it('should return the correct type and the passed data', () => {
|
||||
const pluginId = 'content-manager';
|
||||
const updatedKey = 'isReady';
|
||||
const updatedValue = true;
|
||||
const expected = {
|
||||
type: UPDATE_PLUGIN,
|
||||
pluginId,
|
||||
updatedKey,
|
||||
updatedValue,
|
||||
};
|
||||
|
||||
expect(updatePlugin(pluginId, updatedKey, updatedValue)).toEqual(
|
||||
expected,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
@ -0,0 +1,157 @@
|
||||
import { fromJS, List } from 'immutable';
|
||||
import {
|
||||
disableGlobalOverlayBlocker,
|
||||
enableGlobalOverlayBlocker,
|
||||
} from 'actions/overlayBlocker';
|
||||
import {
|
||||
freezeApp,
|
||||
getAppDataSucceeded,
|
||||
getAppPluginsSucceeded,
|
||||
pluginDeleted,
|
||||
pluginLoaded,
|
||||
unfreezeApp,
|
||||
unsetHasUserPlugin,
|
||||
updatePlugin,
|
||||
} from '../actions';
|
||||
import appReducer from '../reducer';
|
||||
|
||||
describe('<App /> reducer', () => {
|
||||
let state;
|
||||
|
||||
beforeEach(() => {
|
||||
state = fromJS({
|
||||
appData: {
|
||||
autoReload: false,
|
||||
currentEnvironment: 'development',
|
||||
strapiVersion: '3',
|
||||
uuid: false,
|
||||
},
|
||||
appPlugins: List([]),
|
||||
blockApp: false,
|
||||
overlayBlockerData: null,
|
||||
hasUserPlugin: true,
|
||||
isAppLoading: true,
|
||||
plugins: {},
|
||||
showGlobalAppBlocker: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('should return the initial state', () => {
|
||||
const expectedResult = state;
|
||||
expect(appReducer(undefined, {})).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
it('should handle the disableGlobalOverlayBlocker action correctly', () => {
|
||||
const expectedResult = state.set('showGlobalAppBlocker', false);
|
||||
expect(appReducer(state, disableGlobalOverlayBlocker())).toEqual(
|
||||
expectedResult,
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle the enableGlobalOverlayBlocker action correctly', () => {
|
||||
state = state.set('showGlobalAppBlocker', false);
|
||||
const expectedResult = state.set('showGlobalAppBlocker', true);
|
||||
expect(appReducer(state, enableGlobalOverlayBlocker())).toEqual(
|
||||
expectedResult,
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle the freezeApp action correctly and set the overlayBlockerData key if passed data', () => {
|
||||
const expectedResult = state
|
||||
.set('blockApp', true)
|
||||
.set('overlayBlockerData', { title: 'A title' });
|
||||
expect(appReducer(state, freezeApp({ title: 'A title' }))).toEqual(
|
||||
expectedResult,
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle the freezeApp action correctly and NOT set the overlayBlockerData key if no passed data', () => {
|
||||
const expectedResult = state.set('blockApp', true);
|
||||
|
||||
expect(appReducer(state, freezeApp())).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
it('should handle the getAppDataSucceeded action correectly', () => {
|
||||
const data = [
|
||||
{ uuid: 'test' },
|
||||
{ strapiVersion: '3' },
|
||||
{ autoReload: true, currentEnvironment: 'test' },
|
||||
{ layout: {} },
|
||||
];
|
||||
|
||||
const expected = state
|
||||
.setIn(['appData', 'uuid'], 'test')
|
||||
.setIn(['appData', 'strapiVersion'], '3')
|
||||
.setIn(['appData', 'autoReload'], true)
|
||||
.setIn(['appData', 'isLoading'], false)
|
||||
.setIn(['appData', 'currentEnvironment'], 'test')
|
||||
.setIn(['appData', 'layout'], {});
|
||||
|
||||
expect(appReducer(state, getAppDataSucceeded(data))).toEqual(expected);
|
||||
});
|
||||
|
||||
it('should handle the getAppPluginsSucceeded action correclty', () => {
|
||||
const plugins = [{ id: 'content-manager' }];
|
||||
const expectedResult = state
|
||||
.set('appPlugins', List(['content-manager']))
|
||||
.set('isAppLoading', false);
|
||||
|
||||
expect(appReducer(state, getAppPluginsSucceeded(plugins))).toEqual(
|
||||
expectedResult,
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle the pluginLoaded action correclty', () => {
|
||||
const plugin = {
|
||||
id: 'content-manager',
|
||||
description: 'Manage your content',
|
||||
};
|
||||
const expectedResult = state.setIn(
|
||||
['plugins', 'content-manager'],
|
||||
fromJS(plugin),
|
||||
);
|
||||
|
||||
expect(appReducer(state, pluginLoaded(plugin))).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
it('should handle the updatePlugin action correclty', () => {
|
||||
const plugin = { id: 'content-manager', isReady: false };
|
||||
state = state.setIn(['plugins', 'content-manager'], fromJS(plugin));
|
||||
|
||||
const expectedResult = state.setIn(
|
||||
['plugins', 'content-manager', 'isReady'],
|
||||
true,
|
||||
);
|
||||
|
||||
expect(
|
||||
appReducer(state, updatePlugin('content-manager', 'isReady', true)),
|
||||
).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
it('should handle the pluginDeleted action correclty', () => {
|
||||
const plugin = { id: 'content-manager', isReady: false };
|
||||
state = state.setIn(['plugins', 'content-manager'], fromJS(plugin));
|
||||
const expectedResult = state.deleteIn(['plugins', 'content-manager']);
|
||||
|
||||
expect(appReducer(state, pluginDeleted('content-manager'))).toEqual(
|
||||
expectedResult,
|
||||
);
|
||||
});
|
||||
|
||||
it('should handle the unfreezeApp action correclty', () => {
|
||||
state = state
|
||||
.set('blockApp', true)
|
||||
.set('overlayBlockerData', { foo: 'bar' });
|
||||
const expectedResult = state
|
||||
.set('blockApp', false)
|
||||
.set('overlayBlockerData', null);
|
||||
|
||||
expect(appReducer(state, unfreezeApp())).toEqual(expectedResult);
|
||||
});
|
||||
|
||||
it('should handle the unsetHasUserPlugin action correclty', () => {
|
||||
const expectedResult = state.set('hasUserPlugin', false);
|
||||
|
||||
expect(appReducer(state, unsetHasUserPlugin())).toEqual(expectedResult);
|
||||
});
|
||||
});
|
@ -0,0 +1,126 @@
|
||||
import { fromJS } from 'immutable';
|
||||
|
||||
import makeSelectApp, {
|
||||
selectApp,
|
||||
selectHasUserPlugin,
|
||||
selectPlugins,
|
||||
makeSelectAppPlugins,
|
||||
makeSelectBlockApp,
|
||||
makeSelectOverlayBlockerProps,
|
||||
makeSelectIsAppLoading,
|
||||
makeSelectShowGlobalAppBlocker,
|
||||
} from '../selectors';
|
||||
|
||||
describe('<App /> selectors', () => {
|
||||
describe('selectApp', () => {
|
||||
it('should select the global state', () => {
|
||||
const appState = fromJS({});
|
||||
const mockedState = fromJS({
|
||||
app: appState,
|
||||
});
|
||||
|
||||
expect(selectApp()(mockedState)).toEqual(appState);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectApp', () => {
|
||||
it('should select the appState (.toJS())', () => {
|
||||
const appState = fromJS({});
|
||||
const mockedState = fromJS({
|
||||
app: appState,
|
||||
});
|
||||
|
||||
expect(makeSelectApp()(mockedState)).toEqual(appState.toJS());
|
||||
});
|
||||
});
|
||||
|
||||
describe('selectHasUserPlugin', () => {
|
||||
it('should select the hasUserPlugin', () => {
|
||||
const appState = fromJS({
|
||||
hasUserPlugin: true,
|
||||
});
|
||||
const mockedState = fromJS({
|
||||
app: appState,
|
||||
});
|
||||
|
||||
expect(selectHasUserPlugin()(mockedState)).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('selectPlugins', () => {
|
||||
it('should select the plugins', () => {
|
||||
const plugins = fromJS({ email: { isReady: true } });
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
plugins,
|
||||
},
|
||||
});
|
||||
|
||||
expect(selectPlugins()(mockedState)).toEqual(plugins);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectAppPlugins', () => {
|
||||
it('should select the appPlugins', () => {
|
||||
const plugins = ['email'];
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
appPlugins: plugins,
|
||||
},
|
||||
});
|
||||
|
||||
expect(makeSelectAppPlugins()(mockedState)).toEqual(plugins);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectBlockApp', () => {
|
||||
it('should select the blockApp', () => {
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
blockApp: true,
|
||||
},
|
||||
});
|
||||
|
||||
expect(makeSelectBlockApp()(mockedState)).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectOverlayBlockerProps', () => {
|
||||
it('should select the overlayBlockerData', () => {
|
||||
const overlayBlockerData = fromJS({ title: 'title' });
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
overlayBlockerData,
|
||||
},
|
||||
});
|
||||
|
||||
expect(makeSelectOverlayBlockerProps()(mockedState)).toEqual(
|
||||
overlayBlockerData,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectIsAppLoading', () => {
|
||||
it('should select the isAppLoading', () => {
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
isAppLoading: true,
|
||||
},
|
||||
});
|
||||
|
||||
expect(makeSelectIsAppLoading()(mockedState)).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeSelectShowGlobalAppBlocker', () => {
|
||||
it('should select the showGlobalAppBlocker', () => {
|
||||
const mockedState = fromJS({
|
||||
app: {
|
||||
showGlobalAppBlocker: true,
|
||||
},
|
||||
});
|
||||
|
||||
expect(makeSelectShowGlobalAppBlocker()(mockedState)).toEqual(true);
|
||||
});
|
||||
});
|
||||
});
|
@ -11,8 +11,14 @@ const _ = require('lodash');
|
||||
module.exports = {
|
||||
getCurrentEnvironment: async ctx => {
|
||||
try {
|
||||
ctx.send({ currentEnvironment: strapi.app.env });
|
||||
} catch(err) {
|
||||
const autoReload = _.get(
|
||||
strapi.config.currentEnvironment,
|
||||
'server.autoReload.enabled',
|
||||
false,
|
||||
);
|
||||
|
||||
return ctx.send({ autoReload, currentEnvironment: strapi.app.env });
|
||||
} catch (err) {
|
||||
ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
}
|
||||
},
|
||||
@ -21,15 +27,17 @@ module.exports = {
|
||||
try {
|
||||
const strapiVersion = _.get(strapi.config, 'info.strapi', null);
|
||||
return ctx.send({ strapiVersion });
|
||||
} catch(err) {
|
||||
return ctx.badRequest(null, [{ messages: [{ id: 'The version is not available' }] }]);
|
||||
} catch (err) {
|
||||
return ctx.badRequest(null, [
|
||||
{ messages: [{ id: 'The version is not available' }] },
|
||||
]);
|
||||
}
|
||||
},
|
||||
|
||||
getGaConfig: async ctx => {
|
||||
try {
|
||||
ctx.send({ uuid: _.get(strapi.config, 'uuid', false) });
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
}
|
||||
},
|
||||
@ -39,25 +47,36 @@ module.exports = {
|
||||
const layout = require('../config/layout.js');
|
||||
|
||||
return ctx.send({ layout });
|
||||
} catch(err) {
|
||||
return ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
} catch (err) {
|
||||
return ctx.badRequest(null, [
|
||||
{ messages: [{ id: 'An error occurred' }] },
|
||||
]);
|
||||
}
|
||||
},
|
||||
|
||||
installPlugin: async ctx => {
|
||||
try {
|
||||
const { plugin, port } = ctx.request.body;
|
||||
const strapiBin = path.join(process.cwd(), 'node_modules', 'strapi', 'bin', 'strapi');
|
||||
const strapiBin = path.join(
|
||||
process.cwd(),
|
||||
'node_modules',
|
||||
'strapi',
|
||||
'bin',
|
||||
'strapi',
|
||||
);
|
||||
|
||||
strapi.reload.isWatching = false;
|
||||
|
||||
strapi.log.info(`Installing ${plugin}...`);
|
||||
shell.exec(`node ${strapiBin} install ${plugin} ${(port === '4000') ? '--dev' : ''}`, {silent: true});
|
||||
shell.exec(
|
||||
`node ${strapiBin} install ${plugin} ${port === '4000' ? '--dev' : ''}`,
|
||||
{ silent: true },
|
||||
);
|
||||
|
||||
ctx.send({ ok: true });
|
||||
|
||||
strapi.reload();
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
strapi.reload.isWatching = true;
|
||||
ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
}
|
||||
@ -72,7 +91,7 @@ module.exports = {
|
||||
}, {});
|
||||
|
||||
ctx.send({ plugins });
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
}
|
||||
},
|
||||
@ -80,19 +99,25 @@ module.exports = {
|
||||
uninstallPlugin: async ctx => {
|
||||
try {
|
||||
const { plugin } = ctx.params;
|
||||
const strapiBin = path.join(process.cwd(), 'node_modules', 'strapi', 'bin', 'strapi');
|
||||
const strapiBin = path.join(
|
||||
process.cwd(),
|
||||
'node_modules',
|
||||
'strapi',
|
||||
'bin',
|
||||
'strapi',
|
||||
);
|
||||
|
||||
strapi.reload.isWatching = false;
|
||||
|
||||
strapi.log.info(`Uninstalling ${plugin}...`);
|
||||
shell.exec(`node ${strapiBin} uninstall ${plugin}`, {silent: true});
|
||||
shell.exec(`node ${strapiBin} uninstall ${plugin}`, { silent: true });
|
||||
|
||||
ctx.send({ ok: true });
|
||||
|
||||
strapi.reload();
|
||||
} catch(err) {
|
||||
} catch (err) {
|
||||
strapi.reload.isWatching = true;
|
||||
ctx.badRequest(null, [{ messages: [{ id: 'An error occurred' }] }]);
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -112,4 +112,4 @@
|
||||
"styled-components": "^3.2.6",
|
||||
"whatwg-fetch": "^2.0.3"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user