{this.renderEdit()}
- {this.hasDisplayedRelations() && (
+ {this.shouldDisplayedRightSection() && (
-
- {this.hasDisplayedRelations() && (
+ {this.shouldDisplayedRelations() && (
+
- )}
-
+
+ )}
+
+ {this.isDevEnvironment() && (
+
+ )}
)}
@@ -542,6 +704,7 @@ export class EditPage extends React.Component {
}
EditPage.contextTypes = {
+ currentEnvironment: PropTypes.string,
plugins: PropTypes.object,
};
@@ -601,8 +764,8 @@ const withConnect = connect(
mapDispatchToProps,
);
-const withReducer = injectReducer({ key: 'editPage', reducer });
-const withSaga = injectSaga({ key: 'editPage', saga });
+const withReducer = strapi.injectReducer({ key: 'editPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'editPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js
index bee822f110..8255fedc6f 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/saga.js
@@ -1,20 +1,21 @@
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import { findIndex, get, isArray, isEmpty, includes, isNumber, isString, map } from 'lodash';
import {
all,
call,
- cancel,
+ // cancel,
fork,
put,
select,
- take,
+ // take,
takeLatest,
} from 'redux-saga/effects';
-import { makeSelectSchema } from 'containers/App/selectors';
// Utils.
import cleanData from 'utils/cleanData';
import request from 'utils/request';
import templateObject from 'utils/templateObject';
+
+import { makeSelectSchema } from '../App/selectors';
import {
getDataSucceeded,
setFormErrors,
@@ -95,7 +96,7 @@ export function* submit() {
cleanedData = record[current];
break;
case 'date':
- cleanedData = record[current]._isAMomentObject === true ? record[current].format('YYYY-MM-DD HH:mm:ss') : record[current];
+ cleanedData = record[current] && record[current]._isAMomentObject === true ? record[current].format('YYYY-MM-DD HH:mm:ss') : record[current];
break;
default:
cleanedData = cleanData(record[current], 'value', 'id');
@@ -154,7 +155,7 @@ export function* submit() {
yield put(submitSuccess());
} catch(err) {
- if (isArray(err.response.payload.message)) {
+ if (isArray(get(err, 'response.payload.message'))) {
const errors = err.response.payload.message.reduce((acc, current) => {
const error = current.messages.reduce((acc, current) => {
if (includes(current.id, 'Auth')) {
@@ -185,13 +186,15 @@ export function* submit() {
}
function* defaultSaga() {
- const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
+ yield fork(takeLatest, GET_DATA, dataGet);
+ // TODO fix router (Other PR)
+ // const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
yield fork(takeLatest, DELETE_DATA, deleteData);
yield fork(takeLatest, SUBMIT, submit);
- yield take(LOCATION_CHANGE);
+ // yield take(LOCATION_CHANGE);
- yield cancel(loadDataWatcher);
+ // yield cancel(loadDataWatcher);
}
export default defaultSaga;
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/selectors.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/selectors.js
index f046579eaa..5b1dd5c760 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/selectors.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/selectors.js
@@ -5,11 +5,12 @@
*/
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the listPage state domain
*/
-const selectEditPageDomain = () => state => state.get('editPage');
+const selectEditPageDomain = () => state => state.get(`${pluginId}_editPage`);
/**
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/styles.scss b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/styles.scss
index 74019ded0c..7d76ea6fd0 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/styles.scss
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/styles.scss
@@ -1,17 +1,37 @@
-.containerFluid { /* stylelint-disable */
+.containerFluid {
+ /* stylelint-disable */
padding: 18px 30px;
}
-.main_wrapper{
+.main_wrapper {
background: #ffffff;
padding: 22px 10px;
border-radius: 2px;
- box-shadow: 0 2px 4px #E3E9F3;
+ box-shadow: 0 2px 4px #e3e9f3;
}
-.sub_wrapper{
+.sub_wrapper,
+.links_wrapper {
background: #ffffff;
- padding: 0 20px 1px;
border-radius: 2px;
- box-shadow: 0 2px 4px #E3E9F3;
+ box-shadow: 0 2px 4px #e3e9f3;
+}
+
+.sub_wrapper {
+ padding: 0 20px 1px;
+ margin-bottom: 28px;
+}
+
+.links_wrapper {
+ ul {
+ list-style: none;
+ padding: 0;
+ }
+ li {
+ padding: 7px 20px;
+ border-top: 1px solid #f6f6f6;
+ &:first-of-type {
+ border-color: transparent;
+ }
+ }
}
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Home/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/Home/index.js
deleted file mode 100644
index bd2e801d0c..0000000000
--- a/packages/strapi-plugin-content-manager/admin/src/containers/Home/index.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Home
- */
-
-import React from 'react';
-import { connect } from 'react-redux';
-import { createStructuredSelector } from 'reselect';
-import { FormattedMessage } from 'react-intl';
-
-import PluginHeader from 'components/PluginHeader';
-
-import styles from './styles.scss';
-
-export class Home extends React.Component {
- render() {
- return (
-
- );
- }
-}
-
-Home.propTypes = {};
-
-export function mapDispatchToProps() {
- return {};
-}
-
-const mapStateToProps = createStructuredSelector({});
-
-// Wrap the component to inject dispatch and state into it
-export default connect(mapStateToProps, mapDispatchToProps)(Home);
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Home/messages.json b/packages/strapi-plugin-content-manager/admin/src/containers/Home/messages.json
deleted file mode 100644
index 409935166b..0000000000
--- a/packages/strapi-plugin-content-manager/admin/src/containers/Home/messages.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "pluginHeaderDescription": {
- "id": "contentManager.containers.Home.pluginHeaderDescription",
- "defaultMessage": "A powerful UI to easily manage your data."
- },
- "introduction": {
- "id": "contentManager.containers.Home.introduction",
- "defaultMessage": "To edit your content's entries go to the specific link in the left menu."
- }
-}
\ No newline at end of file
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/Home/styles.scss b/packages/strapi-plugin-content-manager/admin/src/containers/Home/styles.scss
deleted file mode 100644
index 689cab1129..0000000000
--- a/packages/strapi-plugin-content-manager/admin/src/containers/Home/styles.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * styles.scss
- *
- * Home container styles
- */
-
- .containerFluid { /* stylelint-disable */
- padding: 18px 30px;
-
- p {
- display: block;
- margin: 0;
- padding-bottom: 14px;
- line-height: 18px;
- text-align: left;
- }
-}
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js
index 356fd4f489..45853dcd3d 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js
@@ -9,12 +9,11 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { bindActionCreators, compose } from 'redux';
import { createStructuredSelector } from 'reselect';
-import { capitalize, findIndex, get, isUndefined, toInteger, upperFirst } from 'lodash';
+import { capitalize, findIndex, get, isEmpty, isUndefined, toInteger, upperFirst } from 'lodash';
import { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { FormattedMessage } from 'react-intl';
import cn from 'classnames';
-// App selectors
-import { makeSelectSchema } from 'containers/App/selectors';
+
// You can find these components in either
// ./node_modules/strapi-helper-plugin/lib/src
// or strapi/packages/strapi-helper-plugin/lib/src
@@ -22,17 +21,21 @@ import PageFooter from 'components/PageFooter';
import PluginHeader from 'components/PluginHeader';
import PopUpWarning from 'components/PopUpWarning';
import InputCheckbox from 'components/InputCheckbox';
-// Components from the plugin itself
-import AddFilterCTA from 'components/AddFilterCTA';
-import FiltersPickWrapper from 'components/FiltersPickWrapper/Loadable';
-import Filter from 'components/Filter/Loadable';
-import Search from 'components/Search';
-import Table from 'components/Table';
-// Utils located in `strapi/packages/strapi-helper-plugin/lib/src/utils`;
+
import getQueryParameters from 'utils/getQueryParameters';
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
import storeData from 'utils/storeData';
+
+import pluginId from '../../pluginId';
+// Components from the plugin itself
+import AddFilterCTA from '../../components/AddFilterCTA';
+import FiltersPickWrapper from '../../components/FiltersPickWrapper/Loadable';
+import Filter from '../../components/Filter/Loadable';
+import Search from '../../components/Search';
+import Table from '../../components/Table';
+
+// App selectors
+import { makeSelectSchema } from '../App/selectors';
+
import Div from './Div';
import {
addAttr,
@@ -366,7 +369,13 @@ export class ListPage extends React.Component {
showSearch = () => get(this.getCurrentModel(), ['search']);
- showFilters = () => get(this.getCurrentModel(), ['filters']);
+ showFilters = () => {
+ if (isEmpty(get(this.getCurrentModel(), ['editDisplay', 'availableFields']))) {
+ return false;
+ }
+
+ return get(this.getCurrentModel(), ['filters']);
+ }
showBulkActions = () => get(this.getCurrentModel(), ['bulkActions']);
@@ -681,7 +690,7 @@ const mapStateToProps = createStructuredSelector({
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'listPage', reducer });
-const withSaga = injectSaga({ key: 'listPage', saga });
+const withReducer = strapi.injectReducer({ key: 'listPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'listPage', saga, pluginId });
export default compose(withReducer, withSaga, withConnect)(ListPage);
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js
index ed49fe770d..f2947beb74 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/saga.js
@@ -1,13 +1,13 @@
// Dependencies.
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import {
all,
call,
- cancel,
+ // cancel,
fork,
put,
select,
- take,
+ // take,
takeLatest,
} from 'redux-saga/effects';
// Utils.
@@ -114,13 +114,16 @@ export function* dataDeleteAll({ entriesToDelete, model, source }) {
// All sagas to be loaded
function* defaultSaga() {
- const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
+ yield fork(takeLatest, GET_DATA, dataGet);
+
+ // TODO fix router (Other PR)
+ // const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
yield fork(takeLatest, DELETE_DATA, dataDelete);
yield fork(takeLatest, DELETE_SEVERAL_DATA, dataDeleteAll);
- yield take(LOCATION_CHANGE);
+ // yield take(LOCATION_CHANGE);
- yield cancel(loadDataWatcher);
+ // yield cancel(loadDataWatcher);
}
export default defaultSaga;
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/selectors.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/selectors.js
index 1a56324484..38cd096f66 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/selectors.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/selectors.js
@@ -5,11 +5,12 @@
*/
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the listPage state domain
*/
-const selectListPageDomain = () => state => state.get('listPage');
+const selectListPageDomain = () => state => state.get(`${pluginId}_listPage`);
/**
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/index.js
index 6d058947ef..460a36de25 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/index.js
@@ -14,6 +14,21 @@ import { DragDropContext } from 'react-dnd';
import { FormattedMessage } from 'react-intl';
import { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import PropTypes from 'prop-types';
+import BackHeader from 'components/BackHeader';
+import HeaderNav from 'components/HeaderNav';
+import Input from 'components/InputsIndex';
+import InputSelect from 'components/InputSelect';
+import PluginHeader from 'components/PluginHeader';
+import PopUpWarning from 'components/PopUpWarning';
+
+import pluginId from '../../pluginId';
+
+import Block from '../../components/Block';
+import CustomDragLayer from '../../components/CustomDragLayer';
+import DraggableAttr from '../../components/DraggableAttr';
+import FormTitle from '../../components/FormTitle';
+import VariableDraggableAttr from '../../components/VariableDraggableAttr';
+
import {
beginMove,
endMove,
@@ -30,7 +45,7 @@ import {
onReset,
onSubmit,
setLayout,
-} from 'containers/App/actions';
+} from '../App/actions';
import {
makeSelectAddedField,
makeSelectDraggedItemName,
@@ -40,22 +55,7 @@ import {
makeSelectModifiedSchema,
makeSelectShouldResetGrid,
makeSelectSubmitSuccess,
-} from 'containers/App/selectors';
-
-import BackHeader from 'components/BackHeader';
-import Block from 'components/Block';
-import CustomDragLayer from 'components/CustomDragLayer';
-import DraggableAttr from 'components/DraggableAttr';
-import FormTitle from 'components/FormTitle';
-import HeaderNav from 'components/HeaderNav';
-import Input from 'components/InputsIndex';
-import InputSelect from 'components/InputSelect';
-import PluginHeader from 'components/PluginHeader';
-import PopUpWarning from 'components/PopUpWarning';
-import VariableDraggableAttr from 'components/VariableDraggableAttr';
-
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+} from '../App/selectors';
import { onClickEditField, onClickEditListItem, onClickEditRelation } from './actions';
import reducer from './reducer';
@@ -1161,8 +1161,8 @@ const withConnect = connect(
mapStateToProps,
mapDispatchToProps,
);
-const withReducer = injectReducer({ key: 'settingPage', reducer });
-const withSaga = injectSaga({ key: 'settingPage', saga });
+const withReducer = strapi.injectReducer({ key: 'settingPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'settingPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/selectors.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/selectors.js
index bb2fe4ec1d..71197db9d7 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/selectors.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingPage/selectors.js
@@ -4,11 +4,12 @@
*/
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the settingPage state domain
*/
-const selectSettingPageDomain = () => state => state.get('settingPage');
+const selectSettingPageDomain = () => state => state.get(`${pluginId}_settingPage`);
/**
@@ -21,4 +22,4 @@ const makeSelectSettingPage = () => createSelector(
);
-export default makeSelectSettingPage;
\ No newline at end of file
+export default makeSelectSettingPage;
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js
index a5b5c23493..655210668f 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js
@@ -10,15 +10,19 @@ import { createStructuredSelector } from 'reselect';
import cn from 'classnames';
import { get, sortBy } from 'lodash';
import PropTypes from 'prop-types';
-import { onChange, onSubmit, onReset } from 'containers/App/actions';
-import { makeSelectModifiedSchema, makeSelectSubmitSuccess } from 'containers/App/selectors';
+
import Input from 'components/InputsIndex';
import PluginHeader from 'components/PluginHeader';
import PopUpWarning from 'components/PopUpWarning';
-import Block from 'components/Block';
-import SettingsRow from 'components/SettingsRow';
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+
+import Block from '../../components/Block';
+import SettingsRow from '../../components/SettingsRow';
+
+import pluginId from '../../pluginId';
+
+import { onChange, onSubmit, onReset } from '../App/actions';
+import { makeSelectModifiedSchema, makeSelectSubmitSuccess } from '../App/selectors';
+
import reducer from './reducer';
import saga from './saga';
import styles from './styles.scss';
@@ -211,8 +215,8 @@ const mapStateToProps = createStructuredSelector({
submitSuccess: makeSelectSubmitSuccess(),
});
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'settingsPage', reducer });
-const withSaga = injectSaga({ key: 'settingsPage', saga });
+const withReducer = strapi.injectReducer({ key: 'settingsPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'settingsPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/selectors.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/selectors.js
index 8153dd3770..e77bc84df6 100644
--- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/selectors.js
+++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/selectors.js
@@ -4,11 +4,12 @@
*/
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the settingsPage state domain
*/
-const selectSettingsPageDomain = () => state => state.get('settingsPage');
+const selectSettingsPageDomain = () => state => state.get(`${pluginId}_settingsPage`);
/**
@@ -21,4 +22,4 @@ const makeSelectSettingsPage = () => createSelector(
);
-export default makeSelectSettingsPage;
\ No newline at end of file
+export default makeSelectSettingsPage;
diff --git a/packages/strapi-plugin-content-manager/admin/src/pluginId.js b/packages/strapi-plugin-content-manager/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-content-manager/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-content-manager/admin/src/routes.json b/packages/strapi-plugin-content-manager/admin/src/routes.json
deleted file mode 100644
index 11bdd48929..0000000000
--- a/packages/strapi-plugin-content-manager/admin/src/routes.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "/": {
- "container": "Home"
- },
- "/:slug": {
- "container": "List"
- },
- "/:slug/:id": {
- "container": "Edit"
- }
-}
\ No newline at end of file
diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/en.json b/packages/strapi-plugin-content-manager/admin/src/translations/en.json
index 708d6d9427..146e577c60 100644
--- a/packages/strapi-plugin-content-manager/admin/src/translations/en.json
+++ b/packages/strapi-plugin-content-manager/admin/src/translations/en.json
@@ -37,6 +37,8 @@
"containers.Edit.returnList": "Return to list",
"containers.Edit.seeDetails": "Details",
"containers.Edit.submit": "Save",
+ "containers.Edit.Link.Layout": "Configure the layout",
+ "containers.Edit.Link.Fields": "Edit the fields",
"containers.Home.introduction": "To edit your entries go to the specific link in the left menu. This plugin doesn't have a proper way to edit settings and it's still under active development.",
"containers.Home.pluginHeaderDescription": "Manage your entries through a powerful and beautiful interface.",
"containers.Home.pluginHeaderTitle": "Content Manager",
@@ -121,4 +123,4 @@
"popUpWarning.warning.updateAllSettings": "This will modify all your settings",
"success.record.delete": "Deleted",
"success.record.save": "Saved"
-}
\ No newline at end of file
+}
diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json
index 7406974be9..daf6d3b046 100644
--- a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json
+++ b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json
@@ -35,6 +35,8 @@
"containers.Edit.returnList": "Retourner à la liste",
"containers.Edit.seeDetails": "Détails",
"containers.Edit.submit": "Valider",
+ "containers.Edit.Link.Layout": "Paramétrer la vue",
+ "containers.Edit.Link.Fields": "Éditer le modèle",
"containers.Home.introduction": "Pour éditer du contenu, choisissez un type de données dans le menu de gauche.",
"containers.Home.pluginHeaderDescription": "Créer et modifier votre type de contenu",
"containers.Home.pluginHeaderTitle": "Type de contenu",
@@ -120,4 +122,3 @@
"success.record.delete": "Supprimé",
"success.record.save": "Sauvegardé"
}
-
diff --git a/packages/strapi-plugin-content-manager/config/functions/bootstrap.js b/packages/strapi-plugin-content-manager/config/functions/bootstrap.js
index 7302fb4eb9..36b073800a 100644
--- a/packages/strapi-plugin-content-manager/config/functions/bootstrap.js
+++ b/packages/strapi-plugin-content-manager/config/functions/bootstrap.js
@@ -9,27 +9,32 @@ const {
getEditDisplayFieldsPath
} = require('./utils/getters');
const splitted = str => str.split('.');
-const pickData = (model) => _.pick(model, [
- 'info',
- 'connection',
- 'collectionName',
- 'attributes',
- 'identity',
- 'globalId',
- 'globalName',
- 'orm',
- 'options',
- 'loadedModel',
- 'primaryKey',
- 'associations'
-]);
+const pickData = model =>
+ _.pick(model, [
+ 'info',
+ 'connection',
+ 'collectionName',
+ 'attributes',
+ 'identity',
+ 'globalId',
+ 'globalName',
+ 'orm',
+ 'options',
+ 'loadedModel',
+ 'primaryKey',
+ 'associations',
+ ]);
module.exports = async cb => {
// Retrieve all layout files from the plugins config folder
const pluginsLayout = Object.keys(strapi.plugins).reduce((acc, current) => {
const models = _.get(strapi.plugins, [current, 'config', 'layout'], {});
Object.keys(models).forEach(model => {
- const layout = _.get(strapi.plugins, [current, 'config', 'layout', model], {});
+ const layout = _.get(
+ strapi.plugins,
+ [current, 'config', 'layout', model],
+ {}
+ );
acc[model] = layout;
});
@@ -70,48 +75,59 @@ module.exports = async cb => {
models: {
plugins: {},
},
- layout: {}
+ layout: {},
};
// Populate the schema object
const buildSchema = (model, name, plugin = false) => {
// Model data
- const schemaModel = Object.assign({
- label: _.upperFirst(name),
- labelPlural: _.upperFirst(pluralize(name)),
- orm: model.orm || 'mongoose',
- search: true,
- filters: true,
- bulkActions: true,
- pageEntries: 10,
- defaultSort: model.primaryKey,
- sort: 'ASC',
- options: model.options,
- editDisplay: {
- availableFields: {},
- displayedField: model.primaryKey,
- fields: [],
- relations: [],
+ const schemaModel = Object.assign(
+ {
+ label: _.upperFirst(name),
+ labelPlural: _.upperFirst(pluralize(name)),
+ orm: model.orm || 'mongoose',
+ search: true,
+ filters: true,
+ bulkActions: true,
+ pageEntries: 10,
+ defaultSort: model.primaryKey,
+ sort: 'ASC',
+ options: model.options,
+ editDisplay: {
+ availableFields: {},
+ displayedField: model.primaryKey,
+ fields: [],
+ relations: [],
+ },
},
- }, model);
+ model
+ );
const fieldsToRemove = [];
// Fields (non relation)
- const fields = _.mapValues(_.pickBy(model.attributes, attribute =>
- !attribute.model && !attribute.collection
- ), (value, attribute) => {
- const fieldClassName = _.get(tempLayout, [name, 'attributes', attribute, 'className'], '');
+ const fields = _.mapValues(
+ _.pickBy(
+ model.attributes,
+ attribute => !attribute.model && !attribute.collection
+ ),
+ (value, attribute) => {
+ const fieldClassName = _.get(
+ tempLayout,
+ [name, 'attributes', attribute, 'className'],
+ ''
+ );
- if (fieldClassName === 'd-none') {
- fieldsToRemove.push(attribute);
+ if (fieldClassName === 'd-none') {
+ fieldsToRemove.push(attribute);
+ }
+
+ return {
+ label: _.upperFirst(attribute),
+ description: '',
+ type: value.type || 'string',
+ disabled: false,
+ };
}
-
- return {
- label: _.upperFirst(attribute),
- description: '',
- type: value.type || 'string',
- disabled: false,
- };
- });
+ );
// Don't display fields that are hidden by default like the resetPasswordToken for the model user
fieldsToRemove.forEach(field => {
@@ -129,7 +145,11 @@ module.exports = async cb => {
const attrType = schemaModel.fields[attr].type;
const sortable = attrType !== 'json' && attrType !== 'array';
- return Object.assign(schemaModel.fields[attr], { name: attr, sortable, searchable: sortable });
+ return Object.assign(schemaModel.fields[attr], {
+ name: attr,
+ sortable,
+ searchable: sortable,
+ });
})
// Retrieve only the fourth first items
.slice(0, 4);
@@ -144,13 +164,24 @@ module.exports = async cb => {
// This object will be used to customise the label and description and so on of an input.
// TODO: maybe add the customBootstrapClass in it;
- schemaModel.editDisplay.availableFields = Object.keys(schemaModel.fields).reduce((acc, current) => {
+ schemaModel.editDisplay.availableFields = Object.keys(
+ schemaModel.fields
+ ).reduce((acc, current) => {
acc[current] = Object.assign(
- _.pick(_.get(schemaModel, ['fields', current], {}), ['label', 'type', 'description', 'name']),
+ _.pick(_.get(schemaModel, ['fields', current], {}), [
+ 'label',
+ 'type',
+ 'description',
+ 'name',
+ ]),
{
- editable: ['updatedAt', 'createdAt', 'updated_at', 'created_at'].indexOf(current) === -1,
+ editable:
+ ['updatedAt', 'createdAt', 'updated_at', 'created_at'].indexOf(
+ current
+ ) === -1,
placeholder: '',
- });
+ }
+ );
return acc;
}, {});
@@ -159,13 +190,37 @@ module.exports = async cb => {
// Model relations
schemaModel.relations = model.associations.reduce((acc, current) => {
const label = _.upperFirst(current.alias);
- const displayedAttribute = current.plugin ? // Value to modified to custom what's displayed in the react-select
- _.get(pluginsModel, [current.plugin, 'models', current.model || current.collection, 'info', 'mainField']) ||
- _.findKey(_.get(pluginsModel, [current.plugin, 'models', current.model || current.collection, 'attributes']), { type : 'string'}) ||
- 'id' :
- _.get(models, [current.model || current.collection, 'info', 'mainField']) ||
- _.findKey(_.get(models, [current.model || current.collection, 'attributes']), { type : 'string'}) ||
- 'id';
+ const displayedAttribute = current.plugin // Value to modified to custom what's displayed in the react-select
+ ? _.get(pluginsModel, [
+ current.plugin,
+ 'models',
+ current.model || current.collection,
+ 'info',
+ 'mainField',
+ ]) ||
+ _.findKey(
+ _.get(pluginsModel, [
+ current.plugin,
+ 'models',
+ current.model || current.collection,
+ 'attributes',
+ ]),
+ { type: 'string' }
+ ) ||
+ 'id'
+ : _.get(models, [
+ current.model || current.collection,
+ 'info',
+ 'mainField',
+ ]) ||
+ _.findKey(
+ _.get(models, [
+ current.model || current.collection,
+ 'attributes',
+ ]),
+ { type: 'string' }
+ ) ||
+ 'id';
acc[current.alias] = {
...current,
@@ -176,37 +231,55 @@ module.exports = async cb => {
return acc;
}, {});
- const relationsArray = Object.keys(schemaModel.relations).filter(relation => {
- const isUploadRelation = _.get(schemaModel, ['relations', relation, 'plugin'], '') === 'upload';
- const isMorphSide = _.get(schemaModel, ['relations', relation, 'nature'], '').toLowerCase().includes('morp') && _.get(schemaModel, ['relations', relation, relation]) !== undefined;
+ const relationsArray = Object.keys(schemaModel.relations).filter(
+ relation => {
+ const isUploadRelation =
+ _.get(schemaModel, ['relations', relation, 'plugin'], '') ===
+ 'upload';
+ const isMorphSide =
+ _.get(schemaModel, ['relations', relation, 'nature'], '')
+ .toLowerCase()
+ .includes('morp') &&
+ _.get(schemaModel, ['relations', relation, relation]) !== undefined;
- return !isUploadRelation && !isMorphSide;
- });
-
- const uploadRelations = Object.keys(schemaModel.relations).reduce((acc, current) => {
- if (_.get(schemaModel, ['relations', current, 'plugin']) === 'upload') {
- const model = _.get(schemaModel, ['relations', current]);
-
- acc[current] = {
- description: '',
- editable: true,
- label: _.upperFirst(current),
- multiple: _.has(model, 'collection'),
- name: current,
- placeholder: '',
- type: 'file',
- disabled: false,
- };
+ return !isUploadRelation && !isMorphSide;
}
+ );
- return acc;
- }, {});
+ const uploadRelations = Object.keys(schemaModel.relations).reduce(
+ (acc, current) => {
+ if (
+ _.get(schemaModel, ['relations', current, 'plugin']) === 'upload'
+ ) {
+ const model = _.get(schemaModel, ['relations', current]);
- schemaModel.editDisplay.availableFields = _.merge(schemaModel.editDisplay.availableFields, uploadRelations);
+ acc[current] = {
+ description: '',
+ editable: true,
+ label: _.upperFirst(current),
+ multiple: _.has(model, 'collection'),
+ name: current,
+ placeholder: '',
+ type: 'file',
+ disabled: false,
+ };
+ }
+
+ return acc;
+ },
+ {}
+ );
+
+ schemaModel.editDisplay.availableFields = _.merge(
+ schemaModel.editDisplay.availableFields,
+ uploadRelations
+ );
schemaModel.editDisplay.relations = relationsArray;
}
- schemaModel.editDisplay.fields = Object.keys(schemaModel.editDisplay.availableFields);
+ schemaModel.editDisplay.fields = Object.keys(
+ schemaModel.editDisplay.availableFields
+ );
if (plugin) {
return _.set(schema.models.plugins, `${plugin}.${name}`, schemaModel);
@@ -231,7 +304,7 @@ module.exports = async cb => {
const pluginStore = strapi.store({
environment: '',
type: 'plugin',
- name: 'content-manager'
+ name: 'content-manager',
});
try {
@@ -264,24 +337,42 @@ module.exports = async cb => {
const schemaApis = getApis(schema.models);
// Array of apis to add
- const apisToAdd = schemaApis.filter(api => prevSchemaApis.indexOf(api) === -1).map(splitted);
+ const apisToAdd = schemaApis
+ .filter(api => prevSchemaApis.indexOf(api) === -1)
+ .map(splitted);
// Array of apis to remove
- const apisToRemove = prevSchemaApis.filter(api => schemaApis.indexOf(api) === -1).map(splitted);
+ const apisToRemove = prevSchemaApis
+ .filter(api => schemaApis.indexOf(api) === -1)
+ .map(splitted);
// Retrieve the same apis by name
- const sameApis = schemaApis.filter(api => prevSchemaApis.indexOf(api) !== -1).map(splitted);
+ const sameApis = schemaApis
+ .filter(api => prevSchemaApis.indexOf(api) !== -1)
+ .map(splitted);
// Retrieve all the field's path of the current unchanged api name
const schemaSameApisKeys = _.flattenDeep(getApisKeys(schema, sameApis));
// Retrieve all the field's path of the previous unchanged api name
- const prevSchemaSameApisKeys = _.flattenDeep(getApisKeys(prevSchema, sameApis));
+ const prevSchemaSameApisKeys = _.flattenDeep(
+ getApisKeys(prevSchema, sameApis)
+ );
// Determine for the same api if we need to add some fields
- const sameApisAttrToAdd = schemaSameApisKeys.filter(attr => prevSchemaSameApisKeys.indexOf(attr) === -1).map(splitted);
+ const sameApisAttrToAdd = schemaSameApisKeys
+ .filter(attr => prevSchemaSameApisKeys.indexOf(attr) === -1)
+ .map(splitted);
// Special case for the relations
- const prevSchemaSameApisUploadRelations = _.flattenDeep(getApisUploadRelations(prevSchema, sameApis));
- const schemaSameApisUploadRelations = _.flattenDeep(getApisUploadRelations(schema, sameApis));
- const sameApisUploadRelationsToAdd = schemaSameApisUploadRelations.filter(attr => prevSchemaSameApisUploadRelations.indexOf(attr) === -1).map(splitted);
+ const prevSchemaSameApisUploadRelations = _.flattenDeep(
+ getApisUploadRelations(prevSchema, sameApis)
+ );
+ const schemaSameApisUploadRelations = _.flattenDeep(
+ getApisUploadRelations(schema, sameApis)
+ );
+ const sameApisUploadRelationsToAdd = schemaSameApisUploadRelations
+ .filter(attr => prevSchemaSameApisUploadRelations.indexOf(attr) === -1)
+ .map(splitted);
// Determine the fields to remove for the unchanged api name
- const sameApisAttrToRemove = prevSchemaSameApisKeys.filter(attr => schemaSameApisKeys.indexOf(attr) === -1).map(splitted);
+ const sameApisAttrToRemove = prevSchemaSameApisKeys
+ .filter(attr => schemaSameApisKeys.indexOf(attr) === -1)
+ .map(splitted);
// Remove api
apisToRemove.map(apiPath => {
@@ -296,7 +387,8 @@ module.exports = async cb => {
// Check default sort and change it if needed
_.unset(prevSchema.models, attrPath);
// Retrieve the api path in the schema Object
- const apiPath = attrPath.length > 3 ? _.take(attrPath, 3) : _.take(attrPath, 1);
+ const apiPath =
+ attrPath.length > 3 ? _.take(attrPath, 3) : _.take(attrPath, 1);
// Retrieve the listDisplay path in the schema Object
const listDisplayPath = apiPath.concat('listDisplay');
const prevListDisplay = _.get(prevSchema.models, listDisplayPath);
@@ -310,7 +402,11 @@ module.exports = async cb => {
// If the user has deleted the default sort attribute in the content type builder
// Replace it by new generated one from the current schema
if (_.includes(currentAttr, defaultSort)) {
- _.set(prevSchema.models, defaultSortPath, _.get(schema.models, defaultSortPath));
+ _.set(
+ prevSchema.models,
+ defaultSortPath,
+ _.get(schema.models, defaultSortPath)
+ );
}
// If the user has deleted the edit view displayed field (name in the header)
@@ -320,20 +416,28 @@ module.exports = async cb => {
}
// Update the displayed fields
- const updatedListDisplay = prevListDisplay.filter(obj => obj.name !== currentAttr.join());
+ const updatedListDisplay = prevListDisplay.filter(
+ obj => obj.name !== currentAttr.join()
+ );
// Retrieve the model's displayed fields for the `EditPage`
const fieldsPath = getEditDisplayFieldsPath(attrPath);
// Retrieve the previous settings
const prevEditDisplayFields = _.get(prevSchema.models, fieldsPath);
// Update the fields
- const updatedEditDisplayFields = prevEditDisplayFields.filter(field => field !== currentAttr.join());
+ const updatedEditDisplayFields = prevEditDisplayFields.filter(
+ field => field !== currentAttr.join()
+ );
// Set the new layout
_.set(prevSchema.models, fieldsPath, updatedEditDisplayFields);
if (updatedListDisplay.length === 0) {
// Update it with the one from the generated schema
- _.set(prevSchema.models, listDisplayPath, _.get(schema.models, listDisplayPath, []));
+ _.set(
+ prevSchema.models,
+ listDisplayPath,
+ _.get(schema.models, listDisplayPath, [])
+ );
} else {
_.set(prevSchema.models, listDisplayPath, updatedListDisplay);
}
@@ -343,7 +447,10 @@ module.exports = async cb => {
// Here we just need to add the data from the current schema Object
apisToAdd.map(apiPath => {
const api = _.get(schema.models, apiPath);
- const { search, filters, bulkActions, pageEntries, options } = _.get(prevSchema, 'generalSettings');
+ const { search, filters, bulkActions, pageEntries, options } = _.get(
+ prevSchema,
+ 'generalSettings'
+ );
_.set(api, 'options', options);
_.set(api, 'filters', filters);
@@ -374,7 +481,13 @@ module.exports = async cb => {
sameApis.forEach(apiPath => {
// This doesn't keep the prevSettings for the relations, the user will have to reset it.
// We might have to improve this if we want the order of the relations to be kept
- ['relations', 'loadedModel', 'associations', 'attributes', ['editDisplay', 'relations']]
+ [
+ 'relations',
+ 'loadedModel',
+ 'associations',
+ 'attributes',
+ ['editDisplay', 'relations'],
+ ]
.map(key => apiPath.concat(key))
.forEach(keyPath => {
const newValue = _.get(schema.models, keyPath);
@@ -388,22 +501,29 @@ module.exports = async cb => {
const attr = _.get(schema.models, attrPath);
_.set(prevSchema.models, attrPath, attr);
- const fieldsPath = [..._.take(attrPath, attrPath.length -2), 'fields'];
+ const fieldsPath = [..._.take(attrPath, attrPath.length - 2), 'fields'];
const currentFields = _.get(prevSchema.models, fieldsPath, []);
currentFields.push(attr.name);
_.set(prevSchema.models, fieldsPath, currentFields);
});
- schemaApis.map((model) => {
+ schemaApis.map(model => {
const isPlugin = model.includes('plugins.');
- _.set(prevSchema.models[model], 'info', _.get(!isPlugin ? strapi.models[model] : strapi[model], 'info'));
- _.set(prevSchema.models[model], 'options', _.get(!isPlugin ? strapi.models[model] : strapi[model], 'options'));
+ _.set(
+ prevSchema.models[model],
+ 'info',
+ _.get(!isPlugin ? strapi.models[model] : strapi[model], 'info')
+ );
+ _.set(
+ prevSchema.models[model],
+ 'options',
+ _.get(!isPlugin ? strapi.models[model] : strapi[model], 'options')
+ );
});
await pluginStore.set({ key: 'schema', value: prevSchema });
-
- } catch(err) {
- console.log('error', err);
+ } catch (err) {
+ console.log('error', err); // eslint-disable-line no-console
}
cb();
diff --git a/packages/strapi-plugin-content-manager/config/queries/bookshelf.js b/packages/strapi-plugin-content-manager/config/queries/bookshelf.js
index 39dae2ad91..c8fb0d1b01 100644
--- a/packages/strapi-plugin-content-manager/config/queries/bookshelf.js
+++ b/packages/strapi-plugin-content-manager/config/queries/bookshelf.js
@@ -58,7 +58,7 @@ module.exports = {
const searchInt = Object.keys(this._attributes)
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
- .filter(attribute => ['integer', 'decimal', 'float'].includes(this._attributes[attribute].type));
+ .filter(attribute => ['integer','biginteger', 'decimal', 'float'].includes(this._attributes[attribute].type));
const searchBool = Object.keys(this._attributes)
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
@@ -129,11 +129,11 @@ module.exports = {
const searchNoText = Object.keys(this._attributes)
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
- .filter(attribute => !['string', 'text', 'boolean', 'integer', 'decimal', 'float'].includes(this._attributes[attribute].type));
+ .filter(attribute => !['string', 'text', 'boolean', 'integer', 'biginteger', 'decimal', 'float'].includes(this._attributes[attribute].type));
const searchInt = Object.keys(this._attributes)
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
- .filter(attribute => ['integer', 'decimal', 'float'].includes(this._attributes[attribute].type));
+ .filter(attribute => ['integer', 'biginteger', 'decimal', 'float'].includes(this._attributes[attribute].type));
const searchBool = Object.keys(this._attributes)
.filter(attribute => attribute !== this.primaryKey && !associations.includes(attribute))
diff --git a/packages/strapi-plugin-content-manager/config/queries/mongoose.js b/packages/strapi-plugin-content-manager/config/queries/mongoose.js
index a3dabbdb35..f8099f6cef 100644
--- a/packages/strapi-plugin-content-manager/config/queries/mongoose.js
+++ b/packages/strapi-plugin-content-manager/config/queries/mongoose.js
@@ -22,6 +22,7 @@ module.exports = {
const $or = Object.keys(this.attributes).reduce((acc, curr) => {
switch (this.attributes[curr].type) {
case 'integer':
+ case 'biginteger':
case 'float':
case 'decimal':
if (!_.isNaN(_.toNumber(params.search))) {
@@ -57,6 +58,7 @@ module.exports = {
const $or = Object.keys(this.attributes).reduce((acc, curr) => {
switch (this.attributes[curr].type) {
case 'integer':
+ case 'biginteger':
case 'float':
case 'decimal':
if (!_.isNaN(_.toNumber(params.search))) {
diff --git a/packages/strapi-plugin-content-manager/package.json b/packages/strapi-plugin-content-manager/package.json
index 227edb829f..87205bf477 100644
--- a/packages/strapi-plugin-content-manager/package.json
+++ b/packages/strapi-plugin-content-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-manager",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "A powerful UI to easily manage your data.",
"strapi": {
"name": "Content Manager",
@@ -12,9 +12,9 @@
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "cross-env ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
"start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development PLUGIN=true node ./node_modules/strapi-helper-plugin/lib/server",
"generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
@@ -26,7 +26,7 @@
"draft-js": "^0.10.5",
"react-select": "^1.2.1",
"showdown": "^1.8.6",
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"dependencies": {
"pluralize": "^7.0.0"
diff --git a/packages/strapi-plugin-content-manager/test/front/integration/createPage_specs.js b/packages/strapi-plugin-content-manager/test/front/integration/createPage_specs.js
index 0a757df1ef..b44685fa9d 100644
--- a/packages/strapi-plugin-content-manager/test/front/integration/createPage_specs.js
+++ b/packages/strapi-plugin-content-manager/test/front/integration/createPage_specs.js
@@ -67,7 +67,7 @@ describe('Testing Content Manager createPages', function() {
.wait(1000)
.window()
.its('__store__')
- .its('content-manager')
+ .its('store');
});
});
@@ -196,11 +196,11 @@ describe('Testing Content Manager createPages', function() {
.wait(2000)
.window()
.its('__store__')
- .its('content-manager')
+ .its('store')
.then(pluginStore => {
const records = pluginStore
.getState()
- .getIn(['listPage', 'records', 'tag'])
+ .getIn(['content-manager_listPage', 'records', 'tag'])
.toJS();
expect(records).to.have.length(0);
@@ -411,7 +411,7 @@ describe('Testing Content Manager createPages', function() {
.then(pluginStore => {
const category = pluginStore
.getState()
- .getIn(['editPage', 'record', 'category'])
+ .getIn(['content-manager_editPage', 'record', 'category'])
expect(category).to.equal(null);
});
@@ -420,7 +420,7 @@ describe('Testing Content Manager createPages', function() {
.then(pluginStore => {
const category = pluginStore
.getState()
- .getIn(['editPage', 'record', 'category', 'name'])
+ .getIn(['content-manager_editPage', 'record', 'category', 'name'])
expect(category).to.equal('french food');
})
@@ -428,7 +428,7 @@ describe('Testing Content Manager createPages', function() {
.then(pluginStore => {
const category = pluginStore
.getState()
- .getIn(['editPage', 'record', 'category', 'name'])
+ .getIn(['content-manager_editPage', 'record', 'category', 'name'])
expect(category).to.equal('french food');
});
@@ -440,4 +440,4 @@ describe('Testing Content Manager createPages', function() {
.deleteAllModelData('product', jwt);
});
});
-});
\ No newline at end of file
+});
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/InjectedComponents/ContentManager/EditViewLink.js b/packages/strapi-plugin-content-type-builder/admin/src/InjectedComponents/ContentManager/EditViewLink.js
new file mode 100644
index 0000000000..b1aea77fba
--- /dev/null
+++ b/packages/strapi-plugin-content-type-builder/admin/src/InjectedComponents/ContentManager/EditViewLink.js
@@ -0,0 +1,26 @@
+/**
+ *
+ * EditViewLink
+ *
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import NavLink from 'components/NavLink';
+
+// Create link from content-type-builder to content-manager
+function EditViewLink(props) {
+ // Retrieve URL from props
+ const base = `${props.getContentTypeBuilderBaseUrl()}${props.getModelName()}`;
+ const url = props.getSource() === 'users-permissions' ? `${base}&source=${props.getSource()}` : base;
+
+ return
;
+}
+
+EditViewLink.propTypes = {
+ getContentTypeBuilderBaseUrl: PropTypes.func.isRequired,
+ getModelName: PropTypes.func.isRequired,
+ getSource: PropTypes.func.isRequired,
+};
+
+export default EditViewLink;
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js
index ac8030a6fd..e7849d8748 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/AttributeRow/index.js
@@ -42,6 +42,7 @@ class AttributeRow extends React.Component {
string: IcoString,
text: IcoText,
integer: IcoNumber,
+ biginteger: IcoNumber,
float: IcoNumber,
decimal: IcoNumber,
email: IcoEmail,
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenu/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenu/index.js
index e960430a13..7eadacc0f5 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenu/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenu/index.js
@@ -14,7 +14,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
-import PluginLeftMenuSection from 'components/PluginLeftMenuSection';
+import PluginLeftMenuSection from '../PluginLeftMenuSection';
import styles from './styles.scss';
class PluginLeftMenu extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenuSection/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenuSection/index.js
index 7f80b6012f..85f8e7210b 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenuSection/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/PluginLeftMenuSection/index.js
@@ -12,7 +12,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import PluginLeftMenuLink from 'components/PluginLeftMenuLink';
+import PluginLeftMenuLink from '../PluginLeftMenuLink';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js
index 824193d82d..5b110054ed 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpForm/index.js
@@ -10,7 +10,7 @@ import { FormattedMessage } from 'react-intl';
import { get, map, includes, split, isEmpty, findIndex } from 'lodash';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import Input from 'components/InputsIndex';
-import PopUpHeaderNavLink from 'components/PopUpHeaderNavLink';
+import PopUpHeaderNavLink from '../PopUpHeaderNavLink';
import styles from './styles.scss';
/* eslint-disable react/jsx-wrap-multilines */
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpRelations/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpRelations/index.js
index 48b13a7491..9c79570f15 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpRelations/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/PopUpRelations/index.js
@@ -12,9 +12,9 @@ import pluralize from 'pluralize';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import Input from 'components/InputsIndex';
-import PopUpHeaderNavLink from 'components/PopUpHeaderNavLink';
-import RelationBox from 'components/RelationBox';
-import RelationNaturePicker from 'components/RelationNaturePicker';
+import PopUpHeaderNavLink from '../PopUpHeaderNavLink';
+import RelationBox from '../RelationBox';
+import RelationNaturePicker from '../RelationNaturePicker';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/tabindex-no-positive */
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/RelationNaturePicker/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/RelationNaturePicker/index.js
index ff5b2442ee..0c2f56be58 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/RelationNaturePicker/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/RelationNaturePicker/index.js
@@ -10,8 +10,6 @@ import { map, startCase } from 'lodash';
import pluralize from 'pluralize';
import { FormattedMessage } from 'react-intl';
-import RelationIco from 'components/RelationIco';
-
import OneWay from '../../assets/images/one_way.svg';
import OneWaySelected from '../../assets/images/one_way_selected.svg';
import ManyToMany from '../../assets/images/many_to_many.svg';
@@ -23,6 +21,8 @@ import OneToManySelected from '../../assets/images/one_to_many_selected.svg';
import OneToOne from '../../assets/images/one_to_one.svg';
import OneToOneSelected from '../../assets/images/one_to_one_selected.svg';
+import RelationIco from '../RelationIco';
+
import styles from './styles.scss';
class RelationNaturePicker extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/TableList/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/TableList/index.js
index 959d642bec..442aabcde7 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/TableList/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/TableList/index.js
@@ -10,7 +10,7 @@ import { map } from 'lodash';
import { FormattedMessage } from 'react-intl';
import Button from 'components/Button';
-import TableListRow from 'components/TableListRow';
+import TableListRow from '../TableListRow';
import styles from './styles.scss';
class TableList extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/components/TableListRow/index.js b/packages/strapi-plugin-content-type-builder/admin/src/components/TableListRow/index.js
index 370944d703..1d1f7fd13e 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/components/TableListRow/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/components/TableListRow/index.js
@@ -11,8 +11,8 @@ import { FormattedMessage } from 'react-intl';
import IcoContainer from 'components/IcoContainer';
import ListRow from 'components/ListRow';
import PopUpWarning from 'components/PopUpWarning';
-import styles from 'components/TableList/styles.scss';
import { router } from 'app';
+import styles from '../TableList/styles.scss';
/* eslint-disable jsx-a11y/no-static-element-interactions */
/* eslint-disable react/jsx-curly-brace-presence */
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/App/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/App/index.js
index af53dc9825..b44151a33d 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/App/index.js
@@ -12,24 +12,24 @@ import { bindActionCreators, compose } from 'redux';
import { createStructuredSelector } from 'reselect';
import { Switch, Route, withRouter } from 'react-router-dom';
import PropTypes from 'prop-types';
-import { pluginId } from 'app';
-import HomePage from 'containers/HomePage';
-import ModelPage from 'containers/ModelPage';
-import NotFoundPage from 'containers/NotFoundPage';
-import formSaga from 'containers/Form/sagas';
-import formReducer from 'containers/Form/reducer';
+import pluginId from '../../pluginId';
+
+import HomePage from '../HomePage';
+import ModelPage from '../ModelPage';
+import NotFoundPage from '../NotFoundPage';
+import formSaga from '../Form/sagas';
+import formReducer from '../Form/reducer';
// Other containers actions
-import { makeSelectShouldRefetchContentType } from 'containers/Form/selectors';
+import { makeSelectShouldRefetchContentType } from '../Form/selectors';
// Utils
-import injectSaga from 'utils/injectSaga';
-import injectReducer from 'utils/injectReducer';
import { storeData } from '../../utils/storeData';
import styles from './styles.scss';
import { modelsFetch } from './actions';
+import reducer from './reducer';
import saga from './sagas';
/* eslint-disable consistent-return */
@@ -92,10 +92,13 @@ const mapStateToProps = createStructuredSelector({
});
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withSaga = injectSaga({ key: 'global', saga });
-const withFormReducer = injectReducer({ key: 'form', reducer: formReducer });
-const withFormSaga = injectSaga({ key: 'form', saga: formSaga });
+const withReducer = strapi.injectReducer({ key: 'global', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'global', saga, pluginId });
+const withFormReducer = strapi.injectReducer({ key: 'form', reducer: formReducer, pluginId });
+const withFormSaga = strapi.injectSaga({ key: 'form', saga: formSaga, pluginId });
+
export default compose(
+ withReducer,
withFormReducer,
withFormSaga,
withSaga,
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/App/selectors.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/App/selectors.js
index f9b6cb77a8..91e1622b16 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/App/selectors.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/App/selectors.js
@@ -1,10 +1,11 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the list state domain
*/
-const selectGlobalDomain = () => state => state.get('global');
+const selectGlobalDomain = () => state => state.get(`${pluginId}_global`);
const makeSelectLoading = () => createSelector(
selectGlobalDomain(),
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json
index 38d1808991..e526d2b283 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json
@@ -259,6 +259,7 @@
"value": "integer",
"items": [
{ "name": "content-type-builder.form.attribute.item.number.type.integer", "value": "integer" },
+ { "name": "content-type-builder.form.attribute.item.number.type.biginteger", "value": "biginteger" },
{ "name": "content-type-builder.form.attribute.item.number.type.float", "value": "float" },
{ "name": "content-type-builder.form.attribute.item.number.type.decimal", "value": "decimal" }
],
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js
index 4d61e66ddd..7dbfd6e0ef 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js
@@ -32,13 +32,13 @@ import PropTypes from 'prop-types';
import moment from 'moment';
import { router } from 'app';
-import { temporaryContentTypeFieldsUpdated, storeTemporaryMenu } from 'containers/App/actions';
-import { addAttributeToContentType, addAttributeRelationToContentType, editContentTypeAttribute, editContentTypeAttributeRelation, updateContentType } from 'containers/ModelPage/actions';
+import { temporaryContentTypeFieldsUpdated, storeTemporaryMenu } from '../App/actions';
+import { addAttributeToContentType, addAttributeRelationToContentType, editContentTypeAttribute, editContentTypeAttributeRelation, updateContentType } from '../ModelPage/actions';
-import AttributeCard from 'components/AttributeCard';
-import InputCheckboxWithNestedInputs from 'components/InputCheckboxWithNestedInputs';
-import PopUpForm from 'components/PopUpForm';
-import PopUpRelations from 'components/PopUpRelations';
+import AttributeCard from '../../components/AttributeCard';
+import InputCheckboxWithNestedInputs from '../../components/InputCheckboxWithNestedInputs';
+import PopUpForm from '../../components/PopUpForm';
+import PopUpRelations from '../../components/PopUpRelations';
// Utils
import { checkFormValidity } from '../../utils/formValidations';
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/selectors.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/selectors.js
index 716acc94f3..5aa0f66979 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/selectors.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the form state domain
*/
-const selectFormDomain = () => state => state.get('form');
+const selectFormDomain = () => state => state.get(`${pluginId}_form`);
/**
* Other specific selectors
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/index.js
index 2cf75dc960..2d11bceac3 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/index.js
@@ -12,19 +12,19 @@ import { size } from 'lodash';
import Helmet from 'react-helmet';
import PropTypes from 'prop-types';
import { router } from 'app';
+import pluginId from '../../pluginId';
-import { makeSelectLoading, makeSelectMenu, makeSelectModels } from 'containers/App/selectors';
-import { deleteContentType } from 'containers/App/actions';
+import { makeSelectLoading, makeSelectMenu, makeSelectModels } from '../App/selectors';
+import { deleteContentType } from '../App/actions';
-import Form from 'containers/Form';
+import Form from '../Form';
// Design
-import ContentHeader from 'components/ContentHeader';
-import EmptyContentTypeView from 'components/EmptyContentTypeView';
-import TableList from 'components/TableList';
+import ContentHeader from '../../components/ContentHeader';
+import EmptyContentTypeView from '../../components/EmptyContentTypeView';
+import TableList from '../../components/TableList';
-import injectSaga from 'utils/injectSaga';
-import injectReducer from 'utils/injectReducer';
+// Utils
import { storeData } from '../../utils/storeData';
import selectHomePage from './selectors';
@@ -140,8 +140,8 @@ function mapDispatchToProps(dispatch) {
}
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'homePage', reducer });
-const withSaga = injectSaga({ key: 'homePage', saga });
+const withReducer = strapi.injectReducer({ key: 'homePage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/selectors.js
index 2e0aa89903..04830b5b25 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/selectors.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/HomePage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the homePage state domain
*/
-const selectHomePageDomain = () => state => state.get('homePage');
+const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Other specific selectors
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/index.js
index e2486a91d6..be749f3993 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/index.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/index.js
@@ -13,18 +13,23 @@ import { FormattedMessage } from 'react-intl';
import { NavLink } from 'react-router-dom';
import PropTypes from 'prop-types';
import { router } from 'app';
-// Global selectors
-import { makeSelectMenu } from 'containers/App/selectors';
-import { makeSelectContentTypeUpdated } from 'containers/Form/selectors';
-import AttributeRow from 'components/AttributeRow';
-import ContentHeader from 'components/ContentHeader';
+
import EmptyAttributesBlock from 'components/EmptyAttributesBlock';
-import Form from 'containers/Form';
-import List from 'components/List';
-import PluginLeftMenu from 'components/PluginLeftMenu';
-import forms from 'containers/Form/forms.json';
-import injectSaga from 'utils/injectSaga';
-import injectReducer from 'utils/injectReducer';
+
+import pluginId from '../../pluginId';
+
+import AttributeRow from '../../components/AttributeRow';
+import ContentHeader from '../../components/ContentHeader';
+import List from '../../components/List';
+import PluginLeftMenu from '../../components/PluginLeftMenu';
+import Form from '../Form';
+
+import forms from '../Form/forms.json';
+
+// Global selectors
+import { makeSelectMenu } from '../App/selectors';
+import { makeSelectContentTypeUpdated } from '../Form/selectors';
+
import { storeData } from '../../utils/storeData';
import {
cancelChanges,
@@ -41,7 +46,7 @@ import styles from './styles.scss';
// Array of attributes that the ctb can handle at the moment
const availableAttributes = Object.keys(forms.attribute);
-availableAttributes.push('integer', 'decimal', 'float');
+availableAttributes.push('integer', 'biginteger', 'decimal', 'float');
/* eslint-disable jsx-a11y/no-static-element-interactions */
/* eslint-disable react/jsx-wrap-multilines */
@@ -164,6 +169,7 @@ export class ModelPage extends React.Component { // eslint-disable-line react/pr
switch (attribute.params.type) {
case 'integer':
+ case 'biginteger':
case 'float':
case 'decimal':
attributeType = 'number';
@@ -355,8 +361,8 @@ function mapDispatchToProps(dispatch) {
}
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withSaga = injectSaga({ key: 'modelPage', saga });
-const withReducer = injectReducer({ key: 'modelPage', reducer });
+const withSaga = strapi.injectSaga({ key: 'modelPage', saga, pluginId });
+const withReducer = strapi.injectReducer({ key: 'modelPage', reducer, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js
index 0c5dbb00db..cee2a0c40a 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js
@@ -1,4 +1,4 @@
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import {
capitalize,
cloneDeep,
@@ -13,14 +13,22 @@ import {
unset,
} from 'lodash';
import pluralize from 'pluralize';
-import { takeLatest, call, take, put, fork, cancel, select } from 'redux-saga/effects';
+import {
+ takeLatest,
+ call,
+ // take,
+ put,
+ fork,
+ // cancel,
+ select,
+} from 'redux-saga/effects';
import request from 'utils/request';
-import { temporaryContentTypePosted } from 'containers/App/actions';
-
import { storeData } from '../../utils/storeData';
+import { temporaryContentTypePosted } from '../App/actions';
+
import { MODEL_FETCH, SUBMIT } from './constants';
import {
modelFetchSucceeded,
@@ -139,13 +147,18 @@ export function* submitChanges(action) {
}
function* defaultSaga() {
- const loadModelWatcher = yield fork(takeLatest, MODEL_FETCH, fetchModel);
- const loadSubmitChanges = yield fork(takeLatest, SUBMIT, submitChanges);
+ yield fork(takeLatest, MODEL_FETCH, fetchModel);
+ yield fork(takeLatest, SUBMIT, submitChanges);
- yield take(LOCATION_CHANGE);
+ // TODO fix Router (Other PR);
+
+ // const loadModelWatcher = yield fork(takeLatest, MODEL_FETCH, fetchModel);
+ // const loadSubmitChanges = yield fork(takeLatest, SUBMIT, submitChanges);
- yield cancel(loadModelWatcher);
- yield cancel(loadSubmitChanges);
+ // yield take(LOCATION_CHANGE);
+
+ // yield cancel(loadModelWatcher);
+ // yield cancel(loadSubmitChanges);
}
export default defaultSaga;
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/selectors.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/selectors.js
index 908ebfecb6..0980be8207 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/selectors.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the modelPage state domain
*/
-const selectModelPageDomain = () => state => state.get('modelPage');
+const selectModelPageDomain = () => state => state.get(`${pluginId}_modelPage`);
/**
* Other specific selectors
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/injectedComponents.js b/packages/strapi-plugin-content-type-builder/admin/src/injectedComponents.js
index 109fa8b38c..38447d36dc 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/injectedComponents.js
+++ b/packages/strapi-plugin-content-type-builder/admin/src/injectedComponents.js
@@ -1 +1,16 @@
-export default [];
\ No newline at end of file
+import Link from './InjectedComponents/ContentManager/EditViewLink';
+
+export default [
+ {
+ plugin: 'content-manager.editPage',
+ area: 'right.links',
+ component: Link,
+ key: 'content-type-builder.link',
+ props: {
+ message: {
+ id: 'content-manager.containers.Edit.Link.Fields',
+ },
+ icon: 'fa-cog',
+ },
+ },
+];
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/pluginId.js b/packages/strapi-plugin-content-type-builder/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-content-type-builder/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/routes.json b/packages/strapi-plugin-content-type-builder/admin/src/routes.json
deleted file mode 100644
index dea2205e9a..0000000000
--- a/packages/strapi-plugin-content-type-builder/admin/src/routes.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "/": {
- "name": "homePage",
- "container": "HomePage"
- },
- "/models/:modelName": {
- "name": "modelPage",
- "container": "ModelPage"
- }
-}
diff --git a/packages/strapi-plugin-content-type-builder/admin/src/translations/en.json b/packages/strapi-plugin-content-type-builder/admin/src/translations/en.json
index 9f18df4e65..2239d410f4 100644
--- a/packages/strapi-plugin-content-type-builder/admin/src/translations/en.json
+++ b/packages/strapi-plugin-content-type-builder/admin/src/translations/en.json
@@ -7,6 +7,7 @@
"attribute.enumeration": "Enumeration",
"attribute.float": "Float",
"attribute.integer": "integer",
+ "attribute.biginteger": "big integer",
"attribute.json": "JSON",
"attribute.media": "Media",
"attribute.password": "Password",
@@ -54,6 +55,7 @@
"form.attribute.item.number.type.decimal": "decimal (ex: 2.22)",
"form.attribute.item.number.type.float": "float (ex: 3.33333333)",
"form.attribute.item.number.type.integer": "integer (ex: 10)",
+ "form.attribute.item.number.type.biginteger": "big integer (ex: 123456789)",
"form.attribute.item.requiredField": "Required field",
"form.attribute.item.requiredField.description": "You won't be able to create an entry if this field is empty",
"form.attribute.item.settings.name": "Settings",
diff --git a/packages/strapi-plugin-content-type-builder/package.json b/packages/strapi-plugin-content-type-builder/package.json
index 2ea35ec0b5..3606d22118 100644
--- a/packages/strapi-plugin-content-type-builder/package.json
+++ b/packages/strapi-plugin-content-type-builder/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-type-builder",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Strapi plugin to create content type (API).",
"strapi": {
"name": "Content Type Builder",
@@ -8,15 +8,15 @@
"description": "content-type-builder.plugin.description"
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "cross-env rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "cross-env rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "echo \"Error: no test specified\"",
"prepublishOnly": "IS_MONOREPO=true npm run build"
@@ -24,11 +24,11 @@
"dependencies": {
"immutable": "^3.8.2",
"pluralize": "^7.0.0",
- "strapi-generate": "3.0.0-alpha.23.1",
- "strapi-generate-api": "3.0.0-alpha.23.1"
+ "strapi-generate": "3.0.0-alpha.24.1",
+ "strapi-generate-api": "3.0.0-alpha.24.1"
},
"devDependencies": {
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"author": {
"name": "Strapi team",
diff --git a/packages/strapi-plugin-content-type-builder/test/front/integration/createApi_specs.js b/packages/strapi-plugin-content-type-builder/test/front/integration/createApi_specs.js
index 5611fc04be..412eca6ce7 100644
--- a/packages/strapi-plugin-content-type-builder/test/front/integration/createApi_specs.js
+++ b/packages/strapi-plugin-content-type-builder/test/front/integration/createApi_specs.js
@@ -167,11 +167,11 @@ describe('Test CTB', () => {
cy.window()
.its('__store__')
- .its('content-manager')
+ .its('store')
.then(pluginStore => {
const displayedFields = pluginStore
.getState()
- .getIn(['global', 'schema', 'models', 'product', 'editDisplay', 'fields'])
+ .getIn(['content-manager_global', 'schema', 'models', 'product', 'editDisplay', 'fields'])
.toJS();
expect(displayedFields).to.include.members([
diff --git a/packages/strapi-plugin-content-type-builder/utils/Manager.js b/packages/strapi-plugin-content-type-builder/utils/Manager.js
index 662d0e1d85..99e85579d0 100644
--- a/packages/strapi-plugin-content-type-builder/utils/Manager.js
+++ b/packages/strapi-plugin-content-type-builder/utils/Manager.js
@@ -88,10 +88,10 @@ class Manager {
case 'checkbox':
case 'boolean':
case 'date':
- case 'bigint':
case 'decimal':
case 'float':
case 'integer':
+ case 'biginteger':
case 'number':
return 4;
case 'json':
@@ -250,4 +250,4 @@ class Manager {
}
}
-module.exports = Manager;
\ No newline at end of file
+module.exports = Manager;
diff --git a/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js b/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js
index 0bdb656d78..1a5c98c67c 100755
--- a/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js
+++ b/packages/strapi-plugin-documentation/admin/src/components/Row/ButtonContainer.js
@@ -2,8 +2,9 @@ import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import cn from 'classnames';
+
import Button from 'components/Button';
-import openWithNewTab from 'utils/openWithNewTab';
+import openWithNewTab from '../../utils/openWithNewTab';
import styles from './styles.scss';
const ButtonContainer = ({ currentDocVersion, isHeader, onClick, onClickDelete, version }) => {
@@ -42,4 +43,4 @@ ButtonContainer.propTypes = {
version: PropTypes.string,
};
-export default ButtonContainer;
\ No newline at end of file
+export default ButtonContainer;
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/actions.js b/packages/strapi-plugin-documentation/admin/src/containers/App/actions.js
deleted file mode 100755
index a5002ad023..0000000000
--- a/packages/strapi-plugin-documentation/admin/src/containers/App/actions.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- *
- * App actions
- *
- */
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/constants.js b/packages/strapi-plugin-documentation/admin/src/containers/App/constants.js
deleted file mode 100755
index f62c609507..0000000000
--- a/packages/strapi-plugin-documentation/admin/src/containers/App/constants.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- *
- * App constants
- *
- */
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/index.js b/packages/strapi-plugin-documentation/admin/src/containers/App/index.js
index 724b9fd864..15f97bd26c 100755
--- a/packages/strapi-plugin-documentation/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-documentation/admin/src/containers/App/index.js
@@ -6,41 +6,22 @@
*/
import React from 'react';
-import { connect } from 'react-redux';
-import { createStructuredSelector } from 'reselect';
import { Switch, Route } from 'react-router-dom';
-import { bindActionCreators, compose } from 'redux';
// Utils
-import { pluginId } from 'app';
+import pluginId from '../../pluginId';
// Containers
-import HomePage from 'containers/HomePage';
-import NotFoundPage from 'containers/NotFoundPage';
+import HomePage from '../HomePage';
+import NotFoundPage from '../NotFoundPage';
-class App extends React.Component {
- render() {
- return (
-
-
-
-
-
-
- );
- }
+function App() {
+ return (
+
+
+
+
+
+
+ );
}
-App.propTypes = {};
-
-export function mapDispatchToProps(dispatch) {
- return bindActionCreators({}, dispatch);
-}
-
-const mapStateToProps = createStructuredSelector({});
-
-// Wrap the component to inject dispatch and state into it
-const withConnect = connect(
- mapStateToProps,
- mapDispatchToProps,
-);
-
-export default compose(withConnect)(App);
+export default App;
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/reducer.js b/packages/strapi-plugin-documentation/admin/src/containers/App/reducer.js
deleted file mode 100755
index 38026c39cd..0000000000
--- a/packages/strapi-plugin-documentation/admin/src/containers/App/reducer.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *
- * App reducer
- *
- */
-
-import { fromJS } from 'immutable';
-
-const initialState = fromJS({});
-
-function appReducer(state = initialState, action) {
- switch (action.type) {
- default:
- return state;
- }
-}
-
-export default appReducer;
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/App/selectors.js b/packages/strapi-plugin-documentation/admin/src/containers/App/selectors.js
deleted file mode 100755
index 2393a073cd..0000000000
--- a/packages/strapi-plugin-documentation/admin/src/containers/App/selectors.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// import { createSelector } from 'reselect';
-
-/**
- * Direct selector to the list state domain
- */
-
-// const selectGlobalDomain = () => state => state.get('global');
-
-export {};
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js
index f32711a7d3..5015a2044e 100755
--- a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js
+++ b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/index.js
@@ -12,19 +12,23 @@ import { CopyToClipboard } from 'react-copy-to-clipboard';
import { bindActionCreators, compose } from 'redux';
import { get, isEmpty } from 'lodash';
import cn from 'classnames';
+
// Components
import PluginHeader from 'components/PluginHeader';
import PopUpWarning from 'components/PopUpWarning';
-import Block from 'components/Block';
-import Row from 'components/Row';
import LoadingIndicatorPage from 'components/LoadingIndicatorPage';
import Input from 'components/InputsIndex';
-import { pluginId } from 'app';
+
// Utils
import auth from 'utils/auth';
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
-import openWithNewTab from 'utils/openWithNewTab';
+
+import pluginId from '../../pluginId';
+
+import Block from '../../components/Block';
+import Row from '../../components/Row';
+
+import openWithNewTab from '../../utils/openWithNewTab';
+
// Actions
import {
getDocInfos,
@@ -245,8 +249,8 @@ const withConnect = connect(
mapStateToProps,
mapDispatchToProps,
);
-const withReducer = injectReducer({ key: 'homePage', reducer });
-const withSaga = injectSaga({ key: 'homePage', saga });
+const withReducer = strapi.injectReducer({ key: 'homePage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/saga.js
index 7f76f2129b..bcb8eabeef 100755
--- a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/saga.js
+++ b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/saga.js
@@ -47,7 +47,7 @@ function* submit() {
}, init);
};
const body = createBody(cloneDeep(form));
- console.log({ form, body });
+
if (body.restrictedAccess && body.password === '') {
return yield put(
setFormErrors({ password: [{ id: 'components.Input.error.validation.required' }] }),
diff --git a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/selectors.js
index 9230835001..08b848bb45 100755
--- a/packages/strapi-plugin-documentation/admin/src/containers/HomePage/selectors.js
+++ b/packages/strapi-plugin-documentation/admin/src/containers/HomePage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the homePage state domain
*/
-const selectHomePageDomain = () => state => state.get('homePage');
+const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Default selector used by HomePage
@@ -30,4 +31,4 @@ const makeSelectVersionToDelete = () => createSelector(
);
export default selectHomePage;
-export { makeSelectForm, makeSelectVersionToDelete, makeSelectPrefix };
\ No newline at end of file
+export { makeSelectForm, makeSelectVersionToDelete, makeSelectPrefix };
diff --git a/packages/strapi-plugin-documentation/admin/src/pluginId.js b/packages/strapi-plugin-documentation/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-documentation/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-documentation/package.json b/packages/strapi-plugin-documentation/package.json
index f2bc48d4b3..a35b59a298 100755
--- a/packages/strapi-plugin-documentation/package.json
+++ b/packages/strapi-plugin-documentation/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-documentation",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Documentation",
@@ -8,15 +8,15 @@
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI."
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"lint": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/eslint --ignore-path .gitignore --ignore-pattern '/admin/build/' --config ./node_modules/strapi-helper-plugin/lib/internals/eslint/.eslintrc.json admin",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "npm run lint",
@@ -29,7 +29,9 @@
"swagger-ui-dist": "^3.18.3-republish2"
},
"devDependencies": {
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "cross-env": "^5.2.0",
+ "rimraf": "^2.6.3",
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"author": {
"name": "soupette",
diff --git a/packages/strapi-plugin-documentation/services/Documentation.js b/packages/strapi-plugin-documentation/services/Documentation.js
index 2291b70533..189aef6baa 100755
--- a/packages/strapi-plugin-documentation/services/Documentation.js
+++ b/packages/strapi-plugin-documentation/services/Documentation.js
@@ -514,7 +514,7 @@ module.exports = {
const getter =
currentAssociation.plugin !== undefined
? ['plugins', currentAssociation.plugin, 'models', name, 'attributes']
- : ['models', name, 'attributes'];
+ : ['models', name.toLowerCase(), 'attributes'];
const associationAttributes = _.get(strapi, getter);
const associationSchema = this.generateAssociationSchema(associationAttributes, getter);
@@ -1313,6 +1313,7 @@ module.exports = {
case 'double':
return 'number';
case 'integer':
+ case 'biginteger':
case 'long':
return 'integer';
default:
diff --git a/packages/strapi-plugin-email/admin/src/containers/App/index.js b/packages/strapi-plugin-email/admin/src/containers/App/index.js
index 2c1fcd23b4..5f3cadd4e9 100644
--- a/packages/strapi-plugin-email/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-email/admin/src/containers/App/index.js
@@ -8,11 +8,10 @@
import React from 'react';
import { Switch, Route } from 'react-router-dom';
-// Utils
-import { pluginId } from 'app';
+import pluginId from '../../pluginId';
// Containers
-import ConfigPage from 'containers/ConfigPage';
+import ConfigPage from '../ConfigPage';
function App() {
return (
diff --git a/packages/strapi-plugin-email/admin/src/containers/App/reducer.js b/packages/strapi-plugin-email/admin/src/containers/App/reducer.js
deleted file mode 100644
index 38026c39cd..0000000000
--- a/packages/strapi-plugin-email/admin/src/containers/App/reducer.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *
- * App reducer
- *
- */
-
-import { fromJS } from 'immutable';
-
-const initialState = fromJS({});
-
-function appReducer(state = initialState, action) {
- switch (action.type) {
- default:
- return state;
- }
-}
-
-export default appReducer;
diff --git a/packages/strapi-plugin-email/admin/src/containers/App/selectors.js b/packages/strapi-plugin-email/admin/src/containers/App/selectors.js
deleted file mode 100644
index 2393a073cd..0000000000
--- a/packages/strapi-plugin-email/admin/src/containers/App/selectors.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// import { createSelector } from 'reselect';
-
-/**
- * Direct selector to the list state domain
- */
-
-// const selectGlobalDomain = () => state => state.get('global');
-
-export {};
diff --git a/packages/strapi-plugin-email/admin/src/containers/ConfigPage/index.js b/packages/strapi-plugin-email/admin/src/containers/ConfigPage/index.js
index 1c6e4f2e1a..c7ca5dbf5d 100644
--- a/packages/strapi-plugin-email/admin/src/containers/ConfigPage/index.js
+++ b/packages/strapi-plugin-email/admin/src/containers/ConfigPage/index.js
@@ -17,14 +17,10 @@ import ContainerFluid from 'components/ContainerFluid';
import HeaderNav from 'components/HeaderNav';
import PluginHeader from 'components/PluginHeader';
-// Plugin's components
-import EditForm from 'components/EditForm';
+import pluginId from '../../pluginId';
-// You can find these utils in either
-// ./node_modules/strapi-helper-plugin/lib/src
-// or strapi/packages/strapi-helper-plugin/lib/src
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+// Plugin's components
+import EditForm from '../../components/EditForm';
import {
getSettings,
@@ -180,8 +176,8 @@ const mapStateToProps = selectConfigPage();
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'configPage', reducer });
-const withSaga = injectSaga({ key: 'configPage', saga });
+const withReducer = strapi.injectReducer({ key: 'configPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'configPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-email/admin/src/containers/ConfigPage/selectors.js b/packages/strapi-plugin-email/admin/src/containers/ConfigPage/selectors.js
index 57fc3910e6..2659d39aa5 100644
--- a/packages/strapi-plugin-email/admin/src/containers/ConfigPage/selectors.js
+++ b/packages/strapi-plugin-email/admin/src/containers/ConfigPage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the configPage state domain
*/
-const selectConfigPageDomain = () => state => state.get('configPage');
+const selectConfigPageDomain = () => state => state.get(`${pluginId}_configPage`);
/**
* Default selector used by ConfigPage
diff --git a/packages/strapi-plugin-email/admin/src/pluginId.js b/packages/strapi-plugin-email/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-email/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-email/config/functions/bootstrap.js b/packages/strapi-plugin-email/config/functions/bootstrap.js
index fa2b34617b..7fb453ac7d 100644
--- a/packages/strapi-plugin-email/config/functions/bootstrap.js
+++ b/packages/strapi-plugin-email/config/functions/bootstrap.js
@@ -30,6 +30,20 @@ module.exports = async cb => {
return _.startsWith(node_module, 'strapi-provider-email') || _.startsWith(node_module, 'strapi-email');
});
+ node_modules.filter((node_module) => {
+ return node_module.startsWith('@');
+ })
+ .forEach((orga) => {
+ const node_modules = fs.readdirSync(path.join(basePath, 'node_modules', orga));
+
+ node_modules.forEach((node_module) => {
+ // DEPRECATED strapi-email-* will be remove in next version
+ if (_.startsWith(node_module, 'strapi-provider-email') || _.startsWith(node_module, 'strapi-email')) {
+ emails.push(`${orga}/${node_module}`);
+ }
+ });
+ });
+
// mount all providers to get configs
_.forEach(emails, (node_module) => {
strapi.plugins.email.config.providers.push(
diff --git a/packages/strapi-plugin-email/package.json b/packages/strapi-plugin-email/package.json
index e78a046bff..fd1f722587 100644
--- a/packages/strapi-plugin-email/package.json
+++ b/packages/strapi-plugin-email/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-email",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Email",
@@ -8,25 +8,26 @@
"description": "email.plugin.description"
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "echo \"Error: no test specified\"",
"prepublishOnly": "IS_MONOREPO=true npm run build"
},
"dependencies": {
- "strapi-provider-email-sendmail": "3.0.0-alpha.23.1"
+ "strapi-provider-email-sendmail": "3.0.0-alpha.24.1"
},
"devDependencies": {
"react-copy-to-clipboard": "5.0.1",
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "rimraf": "^2.6.3",
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"author": {
"name": "Strapi team",
diff --git a/packages/strapi-plugin-graphql/package.json b/packages/strapi-plugin-graphql/package.json
index 4c62ecaacc..5729cb670f 100644
--- a/packages/strapi-plugin-graphql/package.json
+++ b/packages/strapi-plugin-graphql/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-graphql",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "This is the description of the plugin.",
"strapi": {
"name": "graphql",
@@ -8,15 +8,15 @@
"description": "Description of graphql plugin."
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean && npm run test",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "echo \"Error: no test specified\""
},
@@ -24,14 +24,18 @@
"apollo-server-koa": "^2.0.7",
"dataloader": "^1.4.0",
"glob": "^7.1.3",
- "graphql": "^14.0.2",
+ "graphql": "^14.1.0",
"graphql-depth-limit": "^1.1.0",
"graphql-playground-middleware-koa": "^1.6.4",
"graphql-tools": "^3.1.1",
"graphql-type-datetime": "^0.2.2",
"graphql-type-json": "^0.2.1",
"pluralize": "^7.0.0",
- "strapi-utils": "3.0.0-alpha.23.1"
+ "strapi-utils": "3.0.0-alpha.24.1"
+ },
+ "devDependencies": {
+ "cross-env": "^5.2.0",
+ "rimraf": "^2.6.3"
},
"author": {
"name": "A Strapi developer",
@@ -50,4 +54,4 @@
"npm": ">= 6.0.0"
},
"license": "MIT"
-}
\ No newline at end of file
+}
diff --git a/packages/strapi-plugin-graphql/services/Query.js b/packages/strapi-plugin-graphql/services/Query.js
index e4804b7784..48332cbbe9 100644
--- a/packages/strapi-plugin-graphql/services/Query.js
+++ b/packages/strapi-plugin-graphql/services/Query.js
@@ -19,10 +19,12 @@ module.exports = {
* @return Object
*/
- convertToParams: params => {
+ convertToParams: (params, primaryKey) => {
return Object.keys(params).reduce((acc, current) => {
return Object.assign(acc, {
- [`_${current}`]: params[current],
+ [`${
+ primaryKey === current || "id" === current ? "" : "_"
+ }${current}`]: params[current]
});
}, {});
},
@@ -260,7 +262,7 @@ module.exports = {
Object.defineProperties(ctx, {
query: {
value: {
- ...this.convertToParams(_.omit(_options, 'where')),
+ ...this.convertToParams(_.omit(_options, 'where'), model.primaryKey),
..._options.where,
// Avoid population.
_populate: model.associations.filter(a => !a.dominant && _.isEmpty(a.model)).map(a => a.alias),
@@ -269,7 +271,7 @@ module.exports = {
configurable: true
},
params: {
- value: this.convertToParams(this.amountLimiting(_options)),
+ value: this.convertToParams(this.amountLimiting(_options), model.primaryKey),
writable: true,
configurable: true
}
diff --git a/packages/strapi-plugin-graphql/services/Types.js b/packages/strapi-plugin-graphql/services/Types.js
index 2e1e5f9834..7ccfdc2abf 100644
--- a/packages/strapi-plugin-graphql/services/Types.js
+++ b/packages/strapi-plugin-graphql/services/Types.js
@@ -41,6 +41,7 @@ module.exports = {
type = 'Boolean';
break;
case 'integer':
+ case 'biginteger':
type = 'Int';
break;
case 'decimal':
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/EditForm/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/EditForm/index.js
index 4da4ec28dd..8c050f85e2 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/EditForm/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/EditForm/index.js
@@ -8,8 +8,8 @@ import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import Button from 'components/Button';
-import EditFormSection from 'components/EditFormSection';
+import Button from '../Button';
+import EditFormSection from '../EditFormSection';
import styles from './styles.scss';
/* eslint-disable react/require-default-props */
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSection/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSection/index.js
index e23a14cde4..cbbffa216f 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSection/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSection/index.js
@@ -9,9 +9,9 @@ import PropTypes from 'prop-types';
import { map, isEmpty } from 'lodash';
import { FormattedMessage } from 'react-intl';
// HOC Form
-import WithFormSection from 'components/WithFormSection';
+import WithFormSection from '../WithFormSection';
// nested form
-import EditFormSectionNested from 'components/EditFormSectionNested';
+import EditFormSectionNested from '../EditFormSectionNested';
/* eslint-disable react/require-default-props */
class EditFormSection extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionNested/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionNested/index.js
index 3454b3da21..c9f8bf6c24 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionNested/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionNested/index.js
@@ -9,8 +9,8 @@ import PropTypes from 'prop-types';
import { has, map, forEach } from 'lodash';
// HOC
-import EditFormSectionSubNested from 'components/EditFormSectionSubNested';
-import WithFormSection from 'components/WithFormSection';
+import EditFormSectionSubNested from '../EditFormSectionSubNested';
+import WithFormSection from '../WithFormSection';
/* eslint-disable react/require-default-props */
class EditFormSectionNested extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionSubNested/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionSubNested/index.js
index 5693f58a1f..d1d47846d4 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionSubNested/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/EditFormSectionSubNested/index.js
@@ -7,7 +7,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
-import WithFormSection from 'components/WithFormSection';
+import WithFormSection from '../WithFormSection';
/* eslint-disable react/require-default-props */
class EditFormSectionSubNested extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/HeaderNav/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/HeaderNav/index.js
index 7c7912ca6d..e2065e7f76 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/HeaderNav/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/HeaderNav/index.js
@@ -8,9 +8,11 @@ import React from 'react';
import PropTypes from 'prop-types';
import { NavLink } from 'react-router-dom';
import { join, map, take } from 'lodash';
-import EditForm from 'components/EditForm';
-import List from 'components/List';
+
import { darken } from '../../utils/colors';
+
+import EditForm from '../EditForm';
+import List from '../List';
import styles from './styles.scss';
/* eslint-disable react/require-default-props */
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/InputNumber/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/InputNumber/index.js
index ecc2e7cd47..a263c53f83 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/InputNumber/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/InputNumber/index.js
@@ -31,7 +31,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { isEmpty, includes, map, mapKeys, isObject, reject, union, uniqBy } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import WithInput from 'components/WithInput';
+import WithInput from '../WithInput';
/* eslint-disable react/require-default-props */
class InputNumber extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/InputPassword/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/InputPassword/index.js
index 44b930c844..cfaa6689a4 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/InputPassword/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/InputPassword/index.js
@@ -8,7 +8,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { isEmpty, includes, mapKeys, reject, map, isObject, size } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import WithInput from 'components/WithInput';
+import WithInput from '../WithInput';
/* eslint-disable react/require-default-props */
class InputPassword extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/InputText/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/InputText/index.js
index 84a18a2f46..a4109884bb 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/InputText/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/InputText/index.js
@@ -31,7 +31,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { isEmpty, includes, mapKeys, reject, map, isObject, union, findIndex, uniqBy, size } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import WithInput from 'components/WithInput';
+import WithInput from '../WithInput';
/* eslint-disable react/require-default-props */
class InputText extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/List/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/List/index.js
index d1e3ac1b87..098ebc311d 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/List/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/List/index.js
@@ -21,8 +21,8 @@ import { map } from 'lodash';
import { FormattedMessage } from 'react-intl';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
-import ButtonPrimaryHotline from 'components/Button';
-import PopUpForm from 'components/PopUpForm';
+import ButtonPrimaryHotline from '../Button';
+import PopUpForm from '../PopUpForm';
import styles from './styles.scss';
/* eslint-disable react/require-default-props */
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenu/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenu/index.js
index 6067240221..b6cdade1be 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenu/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenu/index.js
@@ -7,7 +7,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
-import PluginLeftMenuSection from 'components/PluginLeftMenuSection';
+import PluginLeftMenuSection from '../PluginLeftMenuSection';
import styles from './styles.scss';
class PluginLeftMenu extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenuSection/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenuSection/index.js
index 32df106f89..8b9a665270 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenuSection/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/PluginLeftMenuSection/index.js
@@ -8,7 +8,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import PluginLeftMenuLink from 'components/PluginLeftMenuLink';
+import PluginLeftMenuLink from '../PluginLeftMenuLink';
import styles from './styles.scss';
/* eslint-disable react/require-default-props */
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/PopUpForm/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/PopUpForm/index.js
index e97874cd39..64119720fc 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/PopUpForm/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/PopUpForm/index.js
@@ -7,7 +7,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { map } from 'lodash';
-import WithFormSection from 'components/WithFormSection';
+import WithFormSection from '../WithFormSection';
import styles from './styles.scss';
/* eslint-disable react/require-default-props */
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/RowDatabase/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/RowDatabase/index.js
index 6fc724193f..36363783b1 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/RowDatabase/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/RowDatabase/index.js
@@ -10,9 +10,10 @@ import { FormattedMessage } from 'react-intl';
// modal
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
-import PopUpForm from 'components/PopUpForm';
import PopUpWarning from 'components/PopUpWarning';
-import styles from 'components/List/styles.scss';
+
+import PopUpForm from '../PopUpForm';
+import styles from '../List/styles.scss';
/* eslint-disable react/require-default-props */
class RowDatabase extends React.Component { // eslint-disable-line react/prefer-stateless-function
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/RowLanguage/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/RowLanguage/index.js
index 1103df5559..e5400484db 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/RowLanguage/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/RowLanguage/index.js
@@ -8,10 +8,12 @@ import React from 'react';
import PropTypes from 'prop-types';
import { find, get, join, isObject } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import PopUpWarning from 'components/PopUpWarning';
+
// utils
import getFlag, { formatLanguageLocale } from '../../utils/getFlag';
+import PopUpWarning from 'components/PopUpWarning';
+
/* eslint-disable react/require-default-props */
class RowLanguage extends React.Component { // eslint-disable-line react/prefer-stateless-function
constructor(props) {
diff --git a/packages/strapi-plugin-settings-manager/admin/src/components/WithFormSection/index.js b/packages/strapi-plugin-settings-manager/admin/src/components/WithFormSection/index.js
index ba76b82c07..f90e955026 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/components/WithFormSection/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/components/WithFormSection/index.js
@@ -8,12 +8,12 @@ import React from 'react';
import PropTypes from 'prop-types';
import { findIndex, forEach, has, isObject , join, pullAt, split, includes} from 'lodash';
-import InputNumber from 'components/InputNumber';
-import InputText from 'components/InputText';
-import InputToggle from 'components/InputToggle';
-import InputPassword from 'components/InputPassword';
-import InputSelect from 'components/InputSelect';
-import InputEnum from 'components/InputEnum';
+import InputNumber from '../InputNumber';
+import InputText from '../InputText';
+import InputToggle from '../InputToggle';
+import InputPassword from '../InputPassword';
+import InputSelect from '../InputSelect';
+import InputEnum from '../InputEnum';
import config from './config.json';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js
index 4df01e3935..86538147a1 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/index.js
@@ -14,16 +14,16 @@ import 'flag-icon-css/css/flag-icon.css';
import 'react-select/dist/react-select.css';
import { Switch, Route } from 'react-router-dom';
import { isEmpty } from 'lodash';
-import { pluginId } from 'app';
-import injectSaga from 'utils/injectSaga';
+import pluginId from '../../pluginId';
-import HomePage from 'containers/HomePage';
+import HomePage from '../HomePage';
import { menuFetch, environmentsFetch } from './actions';
import { makeSelectLoading, makeSelectSections } from './selectors';
import styles from './styles.scss';
+import reducer from './reducer';
import saga from './sagas';
/* eslint-disable react/require-default-props */
@@ -95,9 +95,11 @@ const mapStateToProps = createStructuredSelector({
// Wrap the component to inject dispatch and state into it
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withSaga = injectSaga({ key: 'global', saga });
+const withReducer = strapi.injectReducer({ key: 'global', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'global', saga, pluginId });
export default compose(
+ withReducer,
withSaga,
withConnect,
)(App);
diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js b/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js
index d254d456c6..943115ca07 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/containers/App/selectors.js
@@ -1,10 +1,11 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the list state domain
*/
-const selectGlobalDomain = () => state => state.get('global');
+const selectGlobalDomain = () => state => state.get(`${pluginId}_global`);
const selectLocationState = () => {
let prevRoutingState;
diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/index.js
index 25073ec930..801dc6f58b 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/index.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/index.js
@@ -9,7 +9,6 @@ import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { bindActionCreators, compose } from 'redux';
import { createStructuredSelector } from 'reselect';
-
import {
endsWith,
find,
@@ -30,27 +29,25 @@ import Helmet from 'react-helmet';
import Select from 'react-select';
import { router } from 'app';
+import pluginId from '../../pluginId';
// design
-import ContentHeader from 'components/ContentHeader';
-import EditForm from 'components/EditForm';
-import HeaderNav from 'components/HeaderNav';
-import List from 'components/List';
-import RowDatabase from 'components/RowDatabase';
-import SelectOptionLanguage from 'components/SelectOptionLanguage';
-import RowLanguage from 'components/RowLanguage';
-import PluginLeftMenu from 'components/PluginLeftMenu';
-
-// App selectors
-import { makeSelectSections, makeSelectEnvironments } from 'containers/App/selectors';
+import ContentHeader from '../../components/ContentHeader';
+import EditForm from '../../components/EditForm';
+import HeaderNav from '../../components/HeaderNav';
+import List from '../../components/List';
+import RowDatabase from '../../components/RowDatabase';
+import SelectOptionLanguage from '../../components/SelectOptionLanguage';
+import RowLanguage from '../../components/RowLanguage';
+import PluginLeftMenu from '../../components/PluginLeftMenu';
// utils
import unknowFlag from 'assets/images/unknow_flag.png';
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
import supportedFlags from 'utils/supportedFlags.json';
import { checkFormValidity, getRequiredInputsDb } from '../../utils/inputValidations';
import getFlag, { formatLanguageLocale } from '../../utils/getFlag';
import sendUpdatedParams from '../../utils/sendUpdatedParams';
+// App selectors
+import { makeSelectSections, makeSelectEnvironments } from '../App/selectors';
import selectHomePage from './selectors';
import {
cancelChanges,
@@ -564,8 +561,8 @@ HomePage.propTypes = {
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'homePage', reducer });
-const withSaga = injectSaga({ key: 'homePage', saga });
+const withReducer = strapi.injectReducer({ key: 'homePage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js
index a325f8cc3d..ee1d6b7d66 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/sagas.js
@@ -1,6 +1,15 @@
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import { forEach, set, map, replace } from 'lodash';
-import { all, call, take, put, fork, cancel, select, takeLatest } from 'redux-saga/effects';
+import {
+ all,
+ call,
+ // take,
+ put,
+ fork,
+ // cancel,
+ select,
+ takeLatest,
+} from 'redux-saga/effects';
import request from 'utils/request';
// selectors
import { makeSelectModifiedData } from './selectors';
@@ -240,28 +249,40 @@ export function* fetchSpecificDatabase(action) {
// Individual exports for testing
export function* defaultSaga() {
- const loadConfigWatcher = yield fork(takeLatest, CONFIG_FETCH, fetchConfig);
- const loadLanguagesWatcher = yield fork(takeLatest, LANGUAGES_FETCH, fetchLanguages);
- const editConfigWatcher = yield fork(takeLatest, EDIT_SETTINGS, settingsEdit);
- const postLanguageWatcher = yield fork(takeLatest, NEW_LANGUAGE_POST, postLanguage);
- const deleteLanguageWatcher = yield fork(takeLatest, LANGUAGE_DELETE, deleteLanguage);
- const loadDatabasesWatcher = yield fork(takeLatest, DATABASES_FETCH, fetchDatabases);
- const postDatabaseWatcher = yield fork(takeLatest, NEW_DATABASE_POST, postDatabase);
- const deleteDatabaseWatcher = yield fork(takeLatest, DATABASE_DELETE, deleteDatabase);
- const fetchSpecificDatabaseWatcher = yield fork(takeLatest, SPECIFIC_DATABASE_FETCH, fetchSpecificDatabase);
- const editDatabaseWatcher = yield fork(takeLatest, DATABASE_EDIT, editDatabase);
+ yield fork(takeLatest, CONFIG_FETCH, fetchConfig);
+ yield fork(takeLatest, LANGUAGES_FETCH, fetchLanguages);
+ yield fork(takeLatest, EDIT_SETTINGS, settingsEdit);
+ yield fork(takeLatest, NEW_LANGUAGE_POST, postLanguage);
+ yield fork(takeLatest, LANGUAGE_DELETE, deleteLanguage);
+ yield fork(takeLatest, DATABASES_FETCH, fetchDatabases);
+ yield fork(takeLatest, NEW_DATABASE_POST, postDatabase);
+ yield fork(takeLatest, DATABASE_DELETE, deleteDatabase);
+ yield fork(takeLatest, SPECIFIC_DATABASE_FETCH, fetchSpecificDatabase);
+ yield fork(takeLatest, DATABASE_EDIT, editDatabase);
- yield take(LOCATION_CHANGE);
- yield cancel(loadConfigWatcher);
- yield cancel(loadLanguagesWatcher);
- yield cancel(editConfigWatcher);
- yield cancel(postLanguageWatcher);
- yield cancel(deleteLanguageWatcher);
- yield cancel(loadDatabasesWatcher);
- yield cancel(postDatabaseWatcher);
- yield cancel(deleteDatabaseWatcher);
- yield cancel(fetchSpecificDatabaseWatcher);
- yield cancel(editDatabaseWatcher);
+ // TODO Fix router (Other PR)
+ // const loadConfigWatcher = yield fork(takeLatest, CONFIG_FETCH, fetchConfig);
+ // const loadLanguagesWatcher = yield fork(takeLatest, LANGUAGES_FETCH, fetchLanguages);
+ // const editConfigWatcher = yield fork(takeLatest, EDIT_SETTINGS, settingsEdit);
+ // const postLanguageWatcher = yield fork(takeLatest, NEW_LANGUAGE_POST, postLanguage);
+ // const deleteLanguageWatcher = yield fork(takeLatest, LANGUAGE_DELETE, deleteLanguage);
+ // const loadDatabasesWatcher = yield fork(takeLatest, DATABASES_FETCH, fetchDatabases);
+ // const postDatabaseWatcher = yield fork(takeLatest, NEW_DATABASE_POST, postDatabase);
+ // const deleteDatabaseWatcher = yield fork(takeLatest, DATABASE_DELETE, deleteDatabase);
+ // const fetchSpecificDatabaseWatcher = yield fork(takeLatest, SPECIFIC_DATABASE_FETCH, fetchSpecificDatabase);
+ // const editDatabaseWatcher = yield fork(takeLatest, DATABASE_EDIT, editDatabase);
+
+ // yield take(LOCATION_CHANGE);
+ // yield cancel(loadConfigWatcher);
+ // yield cancel(loadLanguagesWatcher);
+ // yield cancel(editConfigWatcher);
+ // yield cancel(postLanguageWatcher);
+ // yield cancel(deleteLanguageWatcher);
+ // yield cancel(loadDatabasesWatcher);
+ // yield cancel(postDatabaseWatcher);
+ // yield cancel(deleteDatabaseWatcher);
+ // yield cancel(fetchSpecificDatabaseWatcher);
+ // yield cancel(editDatabaseWatcher);
}
// All sagas to be loaded
diff --git a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/selectors.js
index 83359a5007..2a0c25ea98 100644
--- a/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/selectors.js
+++ b/packages/strapi-plugin-settings-manager/admin/src/containers/HomePage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the home state domain
*/
-const selectHomePageDomain = () => state => state.get('homePage');
+const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Other specific selectors
diff --git a/packages/strapi-plugin-settings-manager/admin/src/pluginId.js b/packages/strapi-plugin-settings-manager/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-settings-manager/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-settings-manager/admin/src/routes.json b/packages/strapi-plugin-settings-manager/admin/src/routes.json
deleted file mode 100644
index 7c3d038f8c..0000000000
--- a/packages/strapi-plugin-settings-manager/admin/src/routes.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "(/:slug(/:env))": {
- "name": "homePage",
- "container": "HomePage"
- }
-}
diff --git a/packages/strapi-plugin-settings-manager/package.json b/packages/strapi-plugin-settings-manager/package.json
index bf994342d9..7894dc912b 100644
--- a/packages/strapi-plugin-settings-manager/package.json
+++ b/packages/strapi-plugin-settings-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-settings-manager",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Strapi plugin to manage settings.",
"strapi": {
"name": "Settings Manager",
@@ -8,24 +8,29 @@
"description": "settings-manager.plugin.description"
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"lint": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/eslint --ignore-path .gitignore --ignore-pattern '/admin/build/' --config ./node_modules/strapi-helper-plugin/lib/internals/eslint/.eslintrc.json admin",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "npm run lint",
"prepublishOnly": "IS_MONOREPO=true npm run build"
},
"devDependencies": {
+ "cross-env": "^5.2.0",
"flag-icon-css": "^2.8.0",
"react-select": "^1.0.0-rc.5",
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "rimraf": "^2.6.3",
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
+ },
+ "dependencies": {
+ "shelljs": "^0.7.8"
},
"author": {
"name": "Strapi team",
diff --git a/packages/strapi-plugin-settings-manager/services/SettingsManager.js b/packages/strapi-plugin-settings-manager/services/SettingsManager.js
index 091708d60e..be1640e6a3 100644
--- a/packages/strapi-plugin-settings-manager/services/SettingsManager.js
+++ b/packages/strapi-plugin-settings-manager/services/SettingsManager.js
@@ -3,7 +3,8 @@
const fs = require('fs');
const path = require('path');
const _ = require('lodash');
-const exec = require('child_process').spawnSync;
+
+const shell = require('shelljs');
module.exports = {
menu: {
@@ -963,12 +964,12 @@ module.exports = {
if (connector && !installedConnector) {
strapi.log.info(`Installing ${connector} dependency ...`);
- exec('npm', ['install', `${connector}@${strapi.config.info.strapi}`]);
+ shell.exec(`npm install ${connector}@${strapi.config.info.strapi}`, {silent: true});
}
if (client && !installedClient) {
strapi.log.info(`Installing ${client} dependency ...`);
- exec('npm', ['install', client]);
+ shell.exec(`npm install ${client}`, {silent: true});
}
},
diff --git a/packages/strapi-plugin-upload/admin/src/components/EditForm/index.js b/packages/strapi-plugin-upload/admin/src/components/EditForm/index.js
index 36277ff464..e996694374 100644
--- a/packages/strapi-plugin-upload/admin/src/components/EditForm/index.js
+++ b/packages/strapi-plugin-upload/admin/src/components/EditForm/index.js
@@ -72,6 +72,7 @@ class EditForm extends React.Component {
name="sizeLimit"
onChange={this.props.onChange}
type="number"
+ step={0.01}
value={get(this.props.modifiedData, 'sizeLimit', 1) / 1000}
/>
diff --git a/packages/strapi-plugin-upload/admin/src/components/Li/index.js b/packages/strapi-plugin-upload/admin/src/components/Li/index.js
index 3a0f90bc9a..48858f9425 100644
--- a/packages/strapi-plugin-upload/admin/src/components/Li/index.js
+++ b/packages/strapi-plugin-upload/admin/src/components/Li/index.js
@@ -11,10 +11,11 @@ import { CopyToClipboard } from 'react-copy-to-clipboard';
import cn from 'classnames';
import moment from 'moment';
-import FileIcon from 'components/FileIcon';
import IcoContainer from 'components/IcoContainer';
import PopUpWarning from 'components/PopUpWarning';
+import FileIcon from '../FileIcon';
+
import styles from './styles.scss';
/* eslint-disable react/no-string-refs */
diff --git a/packages/strapi-plugin-upload/admin/src/components/List/index.js b/packages/strapi-plugin-upload/admin/src/components/List/index.js
index 24cc674fa6..55ae206378 100644
--- a/packages/strapi-plugin-upload/admin/src/components/List/index.js
+++ b/packages/strapi-plugin-upload/admin/src/components/List/index.js
@@ -9,8 +9,8 @@ import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import cn from 'classnames';
-import Li from 'components/Li';
-import ListHeader from 'components/ListHeader';
+import Li from '../Li';
+import ListHeader from '../ListHeader';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-upload/admin/src/containers/App/index.js b/packages/strapi-plugin-upload/admin/src/containers/App/index.js
index 0c90f21f39..8618e70da1 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/App/index.js
@@ -8,13 +8,12 @@
import React from 'react';
import { Switch, Route } from 'react-router-dom';
-// Utils
-import { pluginId } from 'app';
+import pluginId from '../../pluginId';
// Containers
-import ConfigPage from 'containers/ConfigPage';
-import HomePage from 'containers/HomePage';
-import NotFoundPage from 'containers/NotFoundPage';
+import ConfigPage from '../ConfigPage';
+import HomePage from '../HomePage';
+import NotFoundPage from '../NotFoundPage';
function App() {
return (
diff --git a/packages/strapi-plugin-upload/admin/src/containers/App/reducer.js b/packages/strapi-plugin-upload/admin/src/containers/App/reducer.js
deleted file mode 100644
index 38026c39cd..0000000000
--- a/packages/strapi-plugin-upload/admin/src/containers/App/reducer.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *
- * App reducer
- *
- */
-
-import { fromJS } from 'immutable';
-
-const initialState = fromJS({});
-
-function appReducer(state = initialState, action) {
- switch (action.type) {
- default:
- return state;
- }
-}
-
-export default appReducer;
diff --git a/packages/strapi-plugin-upload/admin/src/containers/App/selectors.js b/packages/strapi-plugin-upload/admin/src/containers/App/selectors.js
deleted file mode 100644
index 2393a073cd..0000000000
--- a/packages/strapi-plugin-upload/admin/src/containers/App/selectors.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// import { createSelector } from 'reselect';
-
-/**
- * Direct selector to the list state domain
- */
-
-// const selectGlobalDomain = () => state => state.get('global');
-
-export {};
diff --git a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/actions.js b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/actions.js
index ae3839a3da..e13fef19b2 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/actions.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/actions.js
@@ -40,7 +40,7 @@ export function onCancel() {
export function onChange({ target }) {
const keys = ['modifiedData'].concat(target.name.split('.'));
- const value = target.name === 'sizeLimit' ? parseInt(target.value, 10) * 1000 : target.value;
+ const value = target.name === 'sizeLimit' ? Number(target.value) * 1000 : target.value;
return {
type: ON_CHANGE,
diff --git a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/index.js b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/index.js
index 5c9b61b0ad..74c84dece9 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/index.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/index.js
@@ -17,14 +17,10 @@ import ContainerFluid from 'components/ContainerFluid';
import HeaderNav from 'components/HeaderNav';
import PluginHeader from 'components/PluginHeader';
-// Plugin's components
-import EditForm from 'components/EditForm';
+import pluginId from '../../pluginId';
-// You can find these utils in either
-// ./node_modules/strapi-helper-plugin/lib/src
-// or strapi/packages/strapi-helper-plugin/lib/src
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+// Plugin's components
+import EditForm from '../../components/EditForm';
import {
getSettings,
@@ -180,8 +176,8 @@ const mapStateToProps = selectConfigPage();
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'configPage', reducer });
-const withSaga = injectSaga({ key: 'configPage', saga });
+const withReducer = strapi.injectReducer({ key: 'configPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'configPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/selectors.js b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/selectors.js
index 57fc3910e6..2659d39aa5 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/selectors.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/ConfigPage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the configPage state domain
*/
-const selectConfigPageDomain = () => state => state.get('configPage');
+const selectConfigPageDomain = () => state => state.get(`${pluginId}_configPage`);
/**
* Default selector used by ConfigPage
diff --git a/packages/strapi-plugin-upload/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-upload/admin/src/containers/HomePage/index.js
index 979b80dc67..74d2caea9c 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/HomePage/index.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/HomePage/index.js
@@ -21,15 +21,15 @@ import InputSearch from 'components/InputSearch';
import PageFooter from 'components/PageFooter';
import PluginHeader from 'components/PluginHeader';
-// Plugin's component
-import EntriesNumber from 'components/EntriesNumber';
-import List from 'components/List';
-import PluginInputFile from 'components/PluginInputFile';
-
// Utils
import getQueryParameters from 'utils/getQueryParameters';
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+
+import pluginId from '../../pluginId';
+
+// Plugin's component
+import EntriesNumber from '../../components/EntriesNumber';
+import List from '../../components/List';
+import PluginInputFile from '../../components/PluginInputFile';
// Actions
import {
@@ -221,8 +221,8 @@ const mapStateToProps = selectHomePage();
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-const withReducer = injectReducer({ key: 'homePage', reducer });
-const withSaga = injectSaga({ key: 'homePage', saga });
+const withReducer = strapi.injectReducer({ key: 'homePage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-upload/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-upload/admin/src/containers/HomePage/saga.js
index cf3e24469f..76b4e67d88 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/HomePage/saga.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/HomePage/saga.js
@@ -1,7 +1,16 @@
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import { Map } from 'immutable';
import { isEmpty } from 'lodash';
-import { all, call, fork, put, select, take, takeLatest } from 'redux-saga/effects';
+import {
+ all,
+ call,
+ // cancel,
+ fork,
+ put,
+ select,
+ // take,
+ takeLatest,
+} from 'redux-saga/effects';
import request from 'utils/request';
import {
@@ -106,11 +115,13 @@ export function* defaultSaga() {
yield fork(takeLatest, ON_DROP, uploadFiles);
yield fork(takeLatest, ON_SEARCH, search);
- const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
+ yield fork(takeLatest, GET_DATA, dataGet);
+ // TODO: Fix router (Other PR)
+ // const loadDataWatcher = yield fork(takeLatest, GET_DATA, dataGet);
- yield take(LOCATION_CHANGE);
+ // yield take(LOCATION_CHANGE);
- yield cancel(loadDataWatcher);
+ // yield cancel(loadDataWatcher);
}
// All sagas to be loaded
diff --git a/packages/strapi-plugin-upload/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-upload/admin/src/containers/HomePage/selectors.js
index 1d6af0726a..56d7b4d6b0 100644
--- a/packages/strapi-plugin-upload/admin/src/containers/HomePage/selectors.js
+++ b/packages/strapi-plugin-upload/admin/src/containers/HomePage/selectors.js
@@ -1,9 +1,11 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
+
/**
* Direct selector to the homePage state domain
*/
-const selectHomePageDomain = () => state => state.get('homePage');
+const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Default selector used by HomePage
diff --git a/packages/strapi-plugin-upload/admin/src/pluginId.js b/packages/strapi-plugin-upload/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-upload/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-upload/config/functions/bootstrap.js b/packages/strapi-plugin-upload/config/functions/bootstrap.js
index d437af25e2..fc8451c011 100644
--- a/packages/strapi-plugin-upload/config/functions/bootstrap.js
+++ b/packages/strapi-plugin-upload/config/functions/bootstrap.js
@@ -30,6 +30,20 @@ module.exports = async cb => {
return _.startsWith(node_module, 'strapi-provider-upload') || _.startsWith(node_module, 'strapi-upload');
});
+ node_modules.filter((node_module) => {
+ return node_module.startsWith('@');
+ })
+ .forEach((orga) => {
+ const node_modules = fs.readdirSync(path.join(basePath, 'node_modules', orga));
+
+ node_modules.forEach((node_module) => {
+ // DEPRECATED strapi-email-* will be remove in next version
+ if (_.startsWith(node_module, 'strapi-provider-upload') || _.startsWith(node_module, 'strapi-upload')) {
+ uploads.push(`${orga}/${node_module}`);
+ }
+ });
+ });
+
// mount all providers to get configs
_.forEach(uploads, (node_module) => {
strapi.plugins.upload.config.providers.push(
diff --git a/packages/strapi-plugin-upload/package.json b/packages/strapi-plugin-upload/package.json
index 74bb062789..f256d568f3 100644
--- a/packages/strapi-plugin-upload/package.json
+++ b/packages/strapi-plugin-upload/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-upload",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Files Upload",
@@ -8,26 +8,26 @@
"description": "Description of upload plugin."
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "echo \"Error: no test specified\"",
"prepublishOnly": "IS_MONOREPO=true npm run build"
},
"dependencies": {
- "strapi-provider-upload-local": "3.0.0-alpha.23.1",
+ "strapi-provider-upload-local": "3.0.0-alpha.24.1",
"stream-to-array": "^2.3.0",
"uuid": "^3.2.1"
},
"devDependencies": {
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"author": {
"name": "A Strapi developer",
diff --git a/packages/strapi-plugin-upload/services/Upload.js b/packages/strapi-plugin-upload/services/Upload.js
index d164830de7..c8ab83ae5f 100644
--- a/packages/strapi-plugin-upload/services/Upload.js
+++ b/packages/strapi-plugin-upload/services/Upload.js
@@ -125,9 +125,10 @@ module.exports = {
},
fetch: params => {
+ params.id = params._id || params.id;
return strapi
.query('file', 'upload')
- .findOne(_.pick(params, ['_id', 'id']));
+ .findOne(_.pick(params, ['id']));
},
fetchAll: params => {
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Controller/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Controller/index.js
index 8d8dc7cb64..e8e118b8f3 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/Controller/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Controller/index.js
@@ -10,7 +10,7 @@ import { get, map, some } from 'lodash';
import cn from 'classnames';
import { FormattedMessage } from 'react-intl';
-import InputCheckbox from 'components/InputCheckboxPlugin';
+import InputCheckbox from '../InputCheckboxPlugin';
import styles from './styles.scss';
class Controller extends React.Component {
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/InputSearchContainer/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/InputSearchContainer/index.js
index 32ead2d40e..147e01f76f 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/InputSearchContainer/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/InputSearchContainer/index.js
@@ -11,7 +11,7 @@ import cn from 'classnames';
import PropTypes from 'prop-types';
import Label from 'components/Label';
-import InputSearchLi from 'components/InputSearchLi';
+import InputSearchLi from '../InputSearchLi';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js
index a404d56e7f..88e40084df 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/List/index.js
@@ -16,7 +16,7 @@ import LoadingIndicator from 'components/LoadingIndicator';
// Design
import Button from 'components/Button';
-import ListRow from 'components/ListRow';
+import ListRow from '../ListRow';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Plugin/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Plugin/index.js
index 5d2f8fc8f0..f6940a339a 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/Plugin/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Plugin/index.js
@@ -10,7 +10,7 @@ import { Collapse } from 'reactstrap';
import { capitalize, get, isEmpty, map } from 'lodash';
import { FormattedMessage } from 'react-intl';
-import Controller from 'components/Controller';
+import Controller from '../Controller';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Plugins/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Plugins/index.js
index 1fd809986b..b7a524923f 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/Plugins/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Plugins/index.js
@@ -9,7 +9,8 @@ import { FormattedMessage } from 'react-intl';
import { has, map } from 'lodash';
import PropTypes from 'prop-types';
import cn from 'classnames';
-import Plugin from 'components/Plugin';
+
+import Plugin from '../Plugin';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Policies/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Policies/index.js
index bb60ed2953..357140ab31 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/components/Policies/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Policies/index.js
@@ -10,8 +10,8 @@ import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { get, isEmpty, map, takeRight, toLower, without } from 'lodash';
-import BoundRoute from 'components/BoundRoute';
import Input from 'components/InputsIndex';
+import BoundRoute from '../BoundRoute';
import styles from './styles.scss';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js
deleted file mode 100644
index a5002ad023..0000000000
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- *
- * App actions
- *
- */
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js
deleted file mode 100644
index f62c609507..0000000000
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
- *
- * App constants
- *
- */
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js
index 16efbef769..766f36fd31 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js
@@ -7,19 +7,14 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import { createStructuredSelector } from 'reselect';
import { Switch, Route } from 'react-router-dom';
-import { bindActionCreators, compose } from 'redux';
-
-// Utils
-import { pluginId } from 'app';
+import pluginId from '../../pluginId';
// Containers
-import AuthPage from 'containers/AuthPage';
-import EditPage from 'containers/EditPage';
-import HomePage from 'containers/HomePage';
-import NotFoundPage from 'containers/NotFoundPage';
+import AuthPage from '../AuthPage';
+import EditPage from '../EditPage';
+import HomePage from '../HomePage';
+import NotFoundPage from '../NotFoundPage';
class App extends React.Component {
componentDidMount() {
@@ -59,18 +54,4 @@ App.propTypes = {
location: PropTypes.object.isRequired,
};
-export function mapDispatchToProps(dispatch) {
- return bindActionCreators(
- {},
- dispatch,
- );
-}
-
-const mapStateToProps = createStructuredSelector({});
-
-// Wrap the component to inject dispatch and state into it
-const withConnect = connect(mapStateToProps, mapDispatchToProps);
-
-export default compose(
- withConnect,
-)(App);
+export default App;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js
deleted file mode 100644
index 38026c39cd..0000000000
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *
- * App reducer
- *
- */
-
-import { fromJS } from 'immutable';
-
-const initialState = fromJS({});
-
-function appReducer(state = initialState, action) {
- switch (action.type) {
- default:
- return state;
- }
-}
-
-export default appReducer;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js
deleted file mode 100644
index 59c3cfbba0..0000000000
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// import { createSelector } from 'reselect';
-
-/**
- * Direct selector to the list state domain
- */
-
-// const selectGlobalDomain = () => state => state.get('global');
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js
index 757283664a..4eef86c52a 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/index.js
@@ -13,17 +13,17 @@ import { FormattedMessage } from 'react-intl';
import { findIndex, get, isBoolean, isEmpty, map, replace } from 'lodash';
import cn from 'classnames';
-// Logo
-import LogoStrapi from 'assets/images/logo_strapi.png';
-
// Design
import Button from 'components/Button';
import Input from 'components/InputsIndex';
// Utils
import auth from 'utils/auth';
-import injectSaga from 'utils/injectSaga';
-import injectReducer from 'utils/injectReducer';
+
+import pluginId from '../../pluginId';
+
+// Logo
+import LogoStrapi from '../../assets/images/logo_strapi.png';
import {
hideLoginErrorsInput,
@@ -328,16 +328,8 @@ function mapDispatchToProps(dispatch) {
}
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-
-/* Remove this line if the container doesn't have a route and
-* check the documentation to see how to create the container's store
-*/
-const withReducer = injectReducer({ key: 'authPage', reducer });
-
-/* Remove the line below the container doesn't have a route and
-* check the documentation to see how to create the container's store
-*/
-const withSaga = injectSaga({ key: 'authPage', saga });
+const withReducer = strapi.injectReducer({ key: 'authPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'authPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/selectors.js
index 4029f19277..570ceefc3d 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/selectors.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/AuthPage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the authPage state domain
*/
-const selectAuthPageDomain = () => (state) => state.get('authPage');
+const selectAuthPageDomain = () => (state) => state.get(`${pluginId}_authPage`);
/**
* Default selector used by AuthPage
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/index.js
index 894027dc90..024a44ec0b 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/index.js
@@ -16,15 +16,14 @@ import cn from 'classnames';
// Design
import BackHeader from 'components/BackHeader';
import Input from 'components/InputsIndex';
-import InputSearch from 'components/InputSearchContainer';
import LoadingIndicator from 'components/LoadingIndicator';
import LoadingIndicatorPage from 'components/LoadingIndicatorPage';
import PluginHeader from 'components/PluginHeader';
-import Plugins from 'components/Plugins';
-import Policies from 'components/Policies';
-import injectSaga from 'utils/injectSaga';
-import injectReducer from 'utils/injectReducer';
+import InputSearch from '../../components/InputSearchContainer';
+import Plugins from '../../components/Plugins';
+import Policies from '../../components/Policies';
+import pluginId from '../../pluginId';
// Actions
import {
@@ -326,16 +325,8 @@ function mapDispatchToProps(dispatch) {
}
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-
-/* Remove this line if the container doesn't have a route and
-* check the documentation to see how to create the container's store
-*/
-const withReducer = injectReducer({ key: 'editPage', reducer });
-
-/* Remove the line below the container doesn't have a route and
-* check the documentation to see how to create the container's store
-*/
-const withSaga = injectSaga({ key: 'editPage', saga });
+const withReducer = strapi.injectReducer({ key: 'editPage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'editPage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/selectors.js
index ae0bb87c3a..5a6b175669 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/selectors.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/EditPage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the editPage state domain
*/
-const selectEditPageDomain = () => (state) => state.get('editPage');
+const selectEditPageDomain = () => (state) => state.get(`${pluginId}_editPage`);
/**
* Default selector used by EditPage
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js
index 8778e163b5..b965c52062 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js
@@ -12,16 +12,15 @@ import { bindActionCreators, compose } from 'redux';
import cn from 'classnames';
import { clone, get, includes, isEqual, isEmpty } from 'lodash';
-// Design
-import EditForm from 'components/EditForm';
import HeaderNav from 'components/HeaderNav';
-import List from 'components/List';
import PluginHeader from 'components/PluginHeader';
-import PopUpForm from 'components/PopUpForm';
-// Utils
-import injectReducer from 'utils/injectReducer';
-import injectSaga from 'utils/injectSaga';
+import pluginId from '../../pluginId';
+
+// Design
+import EditForm from '../../components/EditForm';
+import List from '../../components/List';
+import PopUpForm from '../../components/PopUpForm';
// Selectors
import selectHomePage from './selectors';
@@ -279,9 +278,8 @@ function mapDispatchToProps(dispatch) {
const mapStateToProps = selectHomePage();
const withConnect = connect(mapStateToProps, mapDispatchToProps);
-
-const withReducer = injectReducer({ key: 'homePage', reducer });
-const withSaga = injectSaga({ key: 'homePage', saga });
+const withReducer = strapi.injectReducer({ key: 'homePage', reducer, pluginId });
+const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(
withReducer,
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js
index c5ff308f0e..35656cd206 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js
@@ -1,6 +1,14 @@
-import { LOCATION_CHANGE } from 'react-router-redux';
+// import { LOCATION_CHANGE } from 'react-router-redux';
import { findIndex, get } from 'lodash';
-import { takeLatest, put, fork, take, cancel, select, call } from 'redux-saga/effects';
+import {
+ takeLatest,
+ put,
+ fork,
+ // take,
+ // cancel,
+ select,
+ call,
+} from 'redux-saga/effects';
import request from 'utils/request';
@@ -75,13 +83,15 @@ export function* submitData(action) {
}
// Individual exports for testing
export function* defaultSaga() {
- const loadDataWatcher = yield fork(takeLatest, FETCH_DATA, dataFetch);
+ // const loadDataWatcher = yield fork(takeLatest, FETCH_DATA, dataFetch);
+ yield fork(takeLatest, FETCH_DATA, dataFetch);
yield fork(takeLatest, DELETE_DATA, dataDelete);
yield fork(takeLatest, SUBMIT, submitData);
- yield take(LOCATION_CHANGE);
- yield cancel(loadDataWatcher);
+ // TODO: Fix router (Other PR)
+ // yield take(LOCATION_CHANGE);
+ // yield cancel(loadDataWatcher);
}
// All sagas to be loaded
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js
index 34abcc4fcf..69379663a6 100644
--- a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js
@@ -1,9 +1,10 @@
import { createSelector } from 'reselect';
+import pluginId from '../../pluginId';
/**
* Direct selector to the homePage state domain
*/
-const selectHomePageDomain = () => state => state.get('homePage');
+const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Default selector used by HomePage
diff --git a/packages/strapi-plugin-users-permissions/admin/src/pluginId.js b/packages/strapi-plugin-users-permissions/admin/src/pluginId.js
new file mode 100644
index 0000000000..1b059ddba7
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/pluginId.js
@@ -0,0 +1,7 @@
+const pluginPkg = require('../../package.json');
+const pluginId = pluginPkg.name.replace(
+ /^strapi-plugin-/i,
+ ''
+);
+
+module.exports = pluginId;
diff --git a/packages/strapi-plugin-users-permissions/config/policies/permissions.js b/packages/strapi-plugin-users-permissions/config/policies/permissions.js
index a0af4f8b69..2f81c03fa1 100644
--- a/packages/strapi-plugin-users-permissions/config/policies/permissions.js
+++ b/packages/strapi-plugin-users-permissions/config/policies/permissions.js
@@ -32,11 +32,11 @@ module.exports = async (ctx, next) => {
name: 'users-permissions'
});
- if (_.get(await store.get({key: 'advanced'}), 'email_confirmation') && ctx.state.user.confirmed !== true) {
+ if (_.get(await store.get({key: 'advanced'}), 'email_confirmation') && !ctx.state.user.confirmed) {
return handleErrors(ctx, 'Your account email is not confirmed.', 'unauthorized');
}
- if (ctx.state.user.blocked === true) {
+ if (ctx.state.user.blocked) {
return handleErrors(ctx, 'Your account has been blocked by the administrator.', 'unauthorized');
}
}
@@ -74,4 +74,4 @@ const handleErrors = (ctx, err = undefined, type) => {
}
return ctx[type](err);
-};
\ No newline at end of file
+};
diff --git a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js
index 8c74435b9b..2d28c570fe 100644
--- a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js
+++ b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js
@@ -11,9 +11,10 @@ module.exports = {
.lean();
},
- count: async function (params = {}) {
+ count: async function (params = {where: {}}) {
return Number(await this
- .countDocuments(params));
+ .countDocuments()
+ .where(params.where));
},
findOne: async function (params, populate) {
diff --git a/packages/strapi-plugin-users-permissions/controllers/Auth.js b/packages/strapi-plugin-users-permissions/controllers/Auth.js
index 64cb49459f..c5c61134a3 100644
--- a/packages/strapi-plugin-users-permissions/controllers/Auth.js
+++ b/packages/strapi-plugin-users-permissions/controllers/Auth.js
@@ -56,12 +56,12 @@ module.exports = {
if (!user) {
return ctx.badRequest(null, ctx.request.admin ? [{ messages: [{ id: 'Auth.form.error.invalid' }] }] : 'Identifier or password invalid.');
}
-
- if (_.get(await store.get({key: 'advanced'}), 'email_confirmation') && user.confirmed !== true) {
+
+ if (_.get(await store.get({key: 'advanced'}), 'email_confirmation') && !user.confirmed) {
return ctx.badRequest(null, ctx.request.admin ? [{ messages: [{ id: 'Auth.form.error.confirmed' }] }] : 'Your account email is not confirmed.');
}
- if (user.blocked === true) {
+ if (user.blocked) {
return ctx.badRequest(null, ctx.request.admin ? [{ messages: [{ id: 'Auth.form.error.blocked' }] }] : 'Your account has been blocked by the administrator.');
}
@@ -196,7 +196,7 @@ module.exports = {
settings.object = await strapi.plugins['users-permissions'].services.userspermissions.template(settings.object, {
USER: _.omit(user.toJSON ? user.toJSON() : user, ['password', 'resetPasswordToken', 'role', 'provider'])
});
-
+
try {
// Send an email to the user.
await strapi.plugins['email'].services.email.send({
@@ -332,7 +332,7 @@ module.exports = {
}
ctx.send({
- jwt,
+ jwt: !settings.email_confirmation ? jwt : undefined,
user: _.omit(user.toJSON ? user.toJSON() : user, ['password', 'resetPasswordToken'])
});
} catch(err) {
@@ -345,7 +345,12 @@ module.exports = {
emailConfirmation: async (ctx) => {
const params = ctx.query;
- const user = await strapi.plugins['users-permissions'].services.jwt.verify(params.confirmation);
+ let user;
+ try {
+ user = await strapi.plugins['users-permissions'].services.jwt.verify(params.confirmation);
+ } catch (err) {
+ return ctx.badRequest(null, 'This confirmation token is invalid.');
+ }
await strapi.plugins['users-permissions'].services.user.edit(_.pick(user, ['_id', 'id']), {confirmed: true});
diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json
index 69b7aafe1c..a5a3baa206 100644
--- a/packages/strapi-plugin-users-permissions/models/User.settings.json
+++ b/packages/strapi-plugin-users-permissions/models/User.settings.json
@@ -51,4 +51,4 @@
}
},
"collectionName": "users-permissions_user"
-}
\ No newline at end of file
+}
diff --git a/packages/strapi-plugin-users-permissions/package.json b/packages/strapi-plugin-users-permissions/package.json
index 8977fcdd68..0101ada403 100644
--- a/packages/strapi-plugin-users-permissions/package.json
+++ b/packages/strapi-plugin-users-permissions/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-plugin-users-permissions",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Protect your API with a full-authentication process based on JWT",
"strapi": {
"name": "Roles & Permissions",
@@ -8,15 +8,15 @@
"description": "users-permissions.plugin.description"
},
"scripts": {
- "analyze:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf stats.json",
+ "analyze:clean": "rimraf stats.json",
"preanalyze": "npm run analyze:clean",
"analyze": "node ./node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
"prebuild": "npm run build:clean",
- "build:dev": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=production node node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
- "build:clean": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/rimraf admin/build",
- "start": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/cross-env NODE_ENV=development node ./node_modules/strapi-helper-plugin/lib/server",
- "generate": "node ./node_modules/strapi-helper-plugin/node_modules/plop --plopfile ./node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "build:dev": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build": "cross-env NODE_ENV=production node_modules/strapi-helper-plugin/node_modules/.bin/webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development ./node_modules/strapi-helper-plugin/lib/server",
+ "generate": "node ./node_modules/plop/plop.js --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
"prettier": "node ./node_modules/strapi-helper-plugin/node_modules/.bin/prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
"test": "echo \"Error: no test specified\"",
"prepublishOnly": "IS_MONOREPO=true npm run build"
@@ -29,11 +29,11 @@
"koa2-ratelimit": "^0.6.1",
"purest": "^2.0.1",
"request": "^2.83.0",
- "strapi-utils": "3.0.0-alpha.23.1",
+ "strapi-utils": "3.0.0-alpha.24.1",
"uuid": "^3.1.0"
},
"devDependencies": {
- "strapi-helper-plugin": "3.0.0-alpha.23.1"
+ "strapi-helper-plugin": "3.0.0-alpha.24.1"
},
"author": {
"name": "Strapi team",
diff --git a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js
index d3b4d6ec1d..3762db7cd7 100644
--- a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js
+++ b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js
@@ -182,7 +182,8 @@ module.exports = {
for (let i = 0; i < roles.length; ++i) {
roles[i].id = roles[i].id || roles[i]._id;
- roles[i].nb_users = await strapi.query('user', 'users-permissions').count({ role: roles[i].id });
+
+ roles[i].nb_users = await strapi.query('user', 'users-permissions').count(strapi.utils.models.convertParams('user', { role: roles[i].id }));
}
return roles;
diff --git a/packages/strapi-provider-email-amazon-ses/package.json b/packages/strapi-provider-email-amazon-ses/package.json
index 741a05f3ee..ef44310860 100644
--- a/packages/strapi-provider-email-amazon-ses/package.json
+++ b/packages/strapi-provider-email-amazon-ses/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-amazon-ses",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Amazon SES provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-email-mailgun/lib/index.js b/packages/strapi-provider-email-mailgun/lib/index.js
index 51cce55d9b..c76dc64b96 100644
--- a/packages/strapi-provider-email-mailgun/lib/index.js
+++ b/packages/strapi-provider-email-mailgun/lib/index.js
@@ -55,7 +55,8 @@ module.exports = {
to: options.to,
subject: options.subject,
text: options.text,
- html: options.html
+ html: options.html,
+ ...(options.attachment && { attachment: options.attachment })
};
msg['h:Reply-To'] = options.replyTo;
diff --git a/packages/strapi-provider-email-mailgun/package.json b/packages/strapi-provider-email-mailgun/package.json
index d3b4cdcf11..43608877a5 100644
--- a/packages/strapi-provider-email-mailgun/package.json
+++ b/packages/strapi-provider-email-mailgun/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-mailgun",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Mailgun provider for strapi email plugin",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-email-sendgrid/package.json b/packages/strapi-provider-email-sendgrid/package.json
index 971a4289e7..2538f7df9e 100644
--- a/packages/strapi-provider-email-sendgrid/package.json
+++ b/packages/strapi-provider-email-sendgrid/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendgrid",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Sendgrid provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-email-sendmail/package.json b/packages/strapi-provider-email-sendmail/package.json
index 36690d0812..7cb8f0a38b 100644
--- a/packages/strapi-provider-email-sendmail/package.json
+++ b/packages/strapi-provider-email-sendmail/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendmail",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Sendmail provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-upload-aws-s3/package.json b/packages/strapi-provider-upload-aws-s3/package.json
index 749f548689..800a60fd64 100644
--- a/packages/strapi-provider-upload-aws-s3/package.json
+++ b/packages/strapi-provider-upload-aws-s3/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-aws-s3",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "AWS S3 provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-upload-cloudinary/package.json b/packages/strapi-provider-upload-cloudinary/package.json
index f1e105e714..36f28a8cda 100644
--- a/packages/strapi-provider-upload-cloudinary/package.json
+++ b/packages/strapi-provider-upload-cloudinary/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-cloudinary",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Cloudinary provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-upload-local/package.json b/packages/strapi-provider-upload-local/package.json
index 248fe80794..738a0dfbb2 100644
--- a/packages/strapi-provider-upload-local/package.json
+++ b/packages/strapi-provider-upload-local/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-local",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Local provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi-provider-upload-rackspace/package.json b/packages/strapi-provider-upload-rackspace/package.json
index 5179abf6e5..5438292f5f 100644
--- a/packages/strapi-provider-upload-rackspace/package.json
+++ b/packages/strapi-provider-upload-rackspace/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-rackspace",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Rackspace provider for strapi upload",
"main": "./lib",
"scripts": {
diff --git a/packages/strapi-utils/package.json b/packages/strapi-utils/package.json
index eb0f7ae5b5..41d0eb7519 100644
--- a/packages/strapi-utils/package.json
+++ b/packages/strapi-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi-utils",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "Shared utilities for the Strapi packages",
"homepage": "http://strapi.io",
"keywords": [
diff --git a/packages/strapi/bin/strapi-install.js b/packages/strapi/bin/strapi-install.js
index 9720d6e2c0..3b0e55b0d1 100644
--- a/packages/strapi/bin/strapi-install.js
+++ b/packages/strapi/bin/strapi-install.js
@@ -7,14 +7,13 @@
*/
// Node.js core.
-const { exec } = require('child_process');
const path = require('path');
const fs = require('fs-extra');
-const shell = require('shelljs');
// Public
const {cyan} = require('chalk');
const ora = require('ora');
+const shell = require('shelljs');
// Logger.
const { cli, packageManager } = require('strapi-utils');
@@ -49,7 +48,7 @@ module.exports = function (plugin, cliArguments) {
if (cliArguments.dev) {
try {
- fs.symlinkSync(path.resolve(__dirname, '..', '..', pluginID), path.resolve(process.cwd(), pluginPath), 'dir');
+ fs.symlinkSync(path.resolve(__dirname, '..', '..', pluginID), path.resolve(process.cwd(), pluginPath), 'junction');
loader.succeed(`The ${cyan(plugin)} plugin has been successfully installed.`);
process.exit(0);
@@ -71,8 +70,8 @@ module.exports = function (plugin, cliArguments) {
}
const cmd = isStrapiInstalledWithNPM ? `npm install ${pluginID}@${packageJSON.version} --ignore-scripts --no-save --prefix ${pluginPath}` : `yarn --cwd ${pluginPath} add ${pluginID}@${packageJSON.version} --ignore-scripts --no-save`;
- exec(cmd, (err) => {
- if (err) {
+ shell.exec(cmd, {silent: true}, (code) => {
+ if (code) {
loader.fail(`An error occurred during plugin installation. \nPlease make sure this plugin is available on npm: https://www.npmjs.com/package/${pluginID}`);
process.exit(1);
}
diff --git a/packages/strapi/bin/strapi-new.js b/packages/strapi/bin/strapi-new.js
index 16a281f9fc..f335ef51b1 100644
--- a/packages/strapi/bin/strapi-new.js
+++ b/packages/strapi/bin/strapi-new.js
@@ -7,6 +7,7 @@
*/
// Node.js core.
+const child_process = require('child_process');
const os = require('os');
const path = require('path');
@@ -30,7 +31,7 @@ const packageJSON = require('../package.json');
*/
module.exports = function (name, cliArguments) {
- console.log('🚀 Start creating your Strapi application. It might take a minute, please take a coffee ☕️');
+ console.log('🚀 Starting to create your Strapi application.');
const developerMode = cliArguments.dev !== undefined;
@@ -84,9 +85,9 @@ module.exports = function (name, cliArguments) {
const error = (error) => {
fetch('https://analytics.strapi.io/track', {
method: 'POST',
- body: JSON.stringify({
- event: 'didNotStartAutomatically',
- deviceId: machineIdSync(),
+ body: JSON.stringify({
+ event: 'didNotStartAutomatically',
+ deviceId: machineIdSync(),
properties: {
error,
os: os.type()
@@ -113,11 +114,32 @@ module.exports = function (name, cliArguments) {
try {
// Enter inside the project folder.
shell.cd(scope.rootPath);
- // Launch the server.
- shell.exec('strapi start', {
- stdio: 'inherit'
+ // Empty log.
+ console.log();
+ // Create interface for windows user to let them quit the program.
+ if (process.platform === "win32") {
+ const rl = require("readline").createInterface({
+ input: process.stdin,
+ output: process.stdout
+ });
+
+ rl.on("SIGINT", function () {
+ process.emit("SIGINT");
+ });
+ }
+ // Listen Ctrl+C / SIGINT event to close the process.
+ process.on("SIGINT", function () {
+ process.exit();
});
+ // Launch the server.
+ const child = child_process.exec('strapi start', { stdio: 'inherit' });
+ // Display child process logs in the parent process.
+ child.stdout.pipe(process.stdout);
+ child.stderr.pipe(process.stderr);
+
+ // shell.exec('strapi start');
} catch (e) {
+ console.log(e);
error(e);
}
}
diff --git a/packages/strapi/bin/strapi-update.js b/packages/strapi/bin/strapi-update.js
index deceb7ef94..fba77047d5 100644
--- a/packages/strapi/bin/strapi-update.js
+++ b/packages/strapi/bin/strapi-update.js
@@ -9,10 +9,10 @@
// Node.js core.
const fs = require('fs');
const path = require('path');
-const exec = require('child_process').exec;
// Public node modules.
const _ = require('lodash');
+const shell = require('shelljs');
// Logger.
const logger = require('strapi-utils').logger;
@@ -45,8 +45,8 @@ module.exports = function () {
try {
process.chdir(path.resolve(__dirname, '..', 'node_modules', 'strapi-generate-' + name));
logger.debug('Pulling the latest updates of `strapi-generate-' + name + '`.');
- exec('git pull ' + info.remote + ' ' + info.branch, err => {
- if (err) {
+ shell.exec(`git pull ${info.remote} ${info.branch}`, (code) => {
+ if (code) {
logger.error('Impossible to update `strapi-generate-' + name + '`.');
} else {
logger.info('Successfully updated `strapi-generate-' + name + '`.');
@@ -55,18 +55,18 @@ module.exports = function () {
} catch (err) {
process.chdir(path.resolve(__dirname, '..', 'node_modules'));
logger.debug('Cloning the `strapi-generate-' + name + '` repository for the first time...');
- exec('git clone ' + info.repository + ' strapi-generate-' + name, err => {
- if (err) {
+ shell.exec(`git clone ${info.repository} strapi-generate-${name}`, (code, stdout, stderr) => {
+ if (code) {
logger.error('Impossible to clone the `strapi-generate-' + name + '` repository.');
- console.log(err);
+ console.log(stderr);
} else {
logger.info('Successfully cloned the `strapi-generate-' + name + '` repository.');
process.chdir(path.resolve(__dirname, '..', 'node_modules', 'strapi-generate-' + name));
logger.debug('Installing dependencies for `strapi-generate-' + name + '`...');
- exec('npm install', err => {
- if (err) {
+ shell.exec('npm install', (code, stdout, stderr) => {
+ if (code) {
logger.error('Impossible to install dependencies for `strapi-generate-' + name + '`.');
- console.log(err);
+ console.log(stderr);
} else {
logger.info('Successfully installed dependencies for `strapi-generate-' + name + '`.');
}
diff --git a/packages/strapi/lib/utils/openBrowser.js b/packages/strapi/lib/utils/openBrowser.js
index 212cb6acf4..d0dd4faec5 100644
--- a/packages/strapi/lib/utils/openBrowser.js
+++ b/packages/strapi/lib/utils/openBrowser.js
@@ -82,8 +82,7 @@ function startBrowserProcess(browser, url) {
});
return true;
} catch (err) {
- console.log(err);
- // Ignore errors.
+ strapi.log.error('Failed to open Google Chrome with AppleScript');
}
}
@@ -154,4 +153,4 @@ async function openBrowser() {
}
}
-module.exports = openBrowser;
\ No newline at end of file
+module.exports = openBrowser;
diff --git a/packages/strapi/lib/utils/post-install.js b/packages/strapi/lib/utils/post-install.js
index a5b8b9c6ae..5b650ef056 100644
--- a/packages/strapi/lib/utils/post-install.js
+++ b/packages/strapi/lib/utils/post-install.js
@@ -5,12 +5,12 @@
*/
// Node.js core
-const exec = require('child_process').execSync;
const path = require('path');
const fs = require('fs');
// Public node modules.
const _ = require('lodash');
+const shell = require('shelljs');
// Define files/dir paths
const pluginsDirPath = path.join(process.cwd(), 'plugins');
@@ -35,9 +35,8 @@ try {
// Check if path is existing.
fs.accessSync(adminDirPath, fs.constants.R_OK | fs.constants.W_OK);
- const install = exec(`cd "${adminDirPath}" && ${installCmd}`, {
- silent: true
- });
+ shell.cd(adminDirPath);
+ const install = shell.exec(installCmd, {silent: true});
if (install.stderr && install.code !== 0) {
console.error(install.stderr);
@@ -71,9 +70,8 @@ try {
console.log('📦 Installing packages...');
try {
- const install = exec(`cd "${pluginPath}" && ${installCmd}`, {
- silent: true
- });
+ shell.cd(pluginPath);
+ const install = shell.exec(installCmd, {silent: true});
if (install.stderr && install.code !== 0) {
console.error(install.stderr);
diff --git a/packages/strapi/package.json b/packages/strapi/package.json
index d4d83c2d0e..6fb1f1da9a 100644
--- a/packages/strapi/package.json
+++ b/packages/strapi/package.json
@@ -1,6 +1,6 @@
{
"name": "strapi",
- "version": "3.0.0-alpha.23.1",
+ "version": "3.0.0-alpha.24.1",
"description": "An open source solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier.",
"homepage": "http://strapi.io",
"keywords": [
@@ -62,16 +62,16 @@
"semver": "^5.4.1",
"shelljs": "^0.8.3",
"stack-trace": "0.0.10",
- "strapi-generate": "3.0.0-alpha.23.1",
- "strapi-generate-admin": "3.0.0-alpha.23.1",
- "strapi-generate-api": "3.0.0-alpha.23.1",
- "strapi-generate-controller": "3.0.0-alpha.23.1",
- "strapi-generate-model": "3.0.0-alpha.23.1",
- "strapi-generate-new": "3.0.0-alpha.23.1",
- "strapi-generate-plugin": "3.0.0-alpha.23.1",
- "strapi-generate-policy": "3.0.0-alpha.23.1",
- "strapi-generate-service": "3.0.0-alpha.23.1",
- "strapi-utils": "3.0.0-alpha.23.1"
+ "strapi-generate": "3.0.0-alpha.24.1",
+ "strapi-generate-admin": "3.0.0-alpha.24.1",
+ "strapi-generate-api": "3.0.0-alpha.24.1",
+ "strapi-generate-controller": "3.0.0-alpha.24.1",
+ "strapi-generate-model": "3.0.0-alpha.24.1",
+ "strapi-generate-new": "3.0.0-alpha.24.1",
+ "strapi-generate-plugin": "3.0.0-alpha.24.1",
+ "strapi-generate-policy": "3.0.0-alpha.24.1",
+ "strapi-generate-service": "3.0.0-alpha.24.1",
+ "strapi-utils": "3.0.0-alpha.24.1"
},
"scripts": {
"postinstall": "node lib/utils/success.js"
diff --git a/scripts/setup.js b/scripts/setup.js
index cb0617d2a0..a35e1923ad 100644
--- a/scripts/setup.js
+++ b/scripts/setup.js
@@ -189,7 +189,7 @@ const buildPlugins = async () => {
const name = pckgName === 'admin' ? pckgName : `plugin-${pckgName}`;
asyncWatcher(
`🏗 Building ${name}...`,
- `cd ../strapi-${name} && IS_MONOREPO=true npm run build`,
+ `cd ../strapi-${name} && cross-env IS_MONOREPO=true npm run build`,
false,
resolve,
);
@@ -209,7 +209,7 @@ const setup = async () => {
const pluginName = name === 'admin' ? name : `plugin-${name}`;
shell.cd(`../strapi-${pluginName}`);
- return watcher(`🏗 Building ${pluginName}...`, 'IS_MONOREPO=true npm run build');
+ return watcher(`🏗 Building ${pluginName}...`, 'cross-env IS_MONOREPO=true npm run build');
});
}
}
@@ -225,4 +225,4 @@ const setup = async () => {
);
};
-setup();
+setup();
\ No newline at end of file
diff --git a/test/start.js b/test/start.js
index fbcea91e7e..3cd8dab484 100644
--- a/test/start.js
+++ b/test/start.js
@@ -114,7 +114,7 @@ const main = async () => {
await clean();
await generate(database);
await start();
- // await cypressTest();
+ await cypressTest();
// await test();
process.kill(appStart.pid);
} catch (e) {
@@ -123,7 +123,7 @@ const main = async () => {
}
};
- // await testProcess(databases.mongo);
+ await testProcess(databases.mongo);
// await testProcess(databases.postgres);
// await testProcess(databases.mysql);
// await testProcess(databases.sqlite);