From f3bddb77c81e7807e9bfe285d701e3c12ae40c14 Mon Sep 17 00:00:00 2001 From: cyril lopez Date: Thu, 9 Nov 2017 11:25:01 +0100 Subject: [PATCH] Add handler to get the app installed plugins --- .../src/containers/ListPluginsPage/actions.js | 23 ++++++++++++--- .../containers/ListPluginsPage/constants.js | 3 +- .../src/containers/ListPluginsPage/index.js | 16 +++++++--- .../src/containers/ListPluginsPage/reducer.js | 29 +++++++++++++------ .../src/containers/ListPluginsPage/saga.js | 19 +++++++++--- .../containers/ListPluginsPage/selectors.js | 6 ++++ packages/strapi-admin/config/routes.json | 8 +++++ packages/strapi-admin/controllers/Admin.js | 8 +++++ packages/strapi/lib/core/apis.js | 3 +- 9 files changed, 92 insertions(+), 23 deletions(-) diff --git a/packages/strapi-admin/admin/src/containers/ListPluginsPage/actions.js b/packages/strapi-admin/admin/src/containers/ListPluginsPage/actions.js index 642d9404a9..b000788e63 100644 --- a/packages/strapi-admin/admin/src/containers/ListPluginsPage/actions.js +++ b/packages/strapi-admin/admin/src/containers/ListPluginsPage/actions.js @@ -5,15 +5,29 @@ */ import { - DEFAULT_ACTION, + GET_PLUGINS, + GET_PLUGINS_SUCCEEDED, ON_DELETE_PLUGIN_CLICK, ON_DELETE_PLUGIN_CONFIRM, DELETE_PLUGIN_SUCCEEDED, } from './constants'; -export function defaultAction() { +export function getPlugins() { return { - type: DEFAULT_ACTION, + type: GET_PLUGINS, + }; +} + +export function getPluginsSucceeded(data) { + const plugins = Object.keys(data.plugins).reduce((acc, key) => { + acc[key] = data.plugins[key].package.strapi; + + return acc; + }, {}); + + return { + type: GET_PLUGINS_SUCCEEDED, + plugins, }; } @@ -30,8 +44,9 @@ export function onDeletePluginConfirm() { }; } -export function deletePluginSucceeded() { +export function deletePluginSucceeded(plugin) { return { type: DELETE_PLUGIN_SUCCEEDED, + plugin, }; } diff --git a/packages/strapi-admin/admin/src/containers/ListPluginsPage/constants.js b/packages/strapi-admin/admin/src/containers/ListPluginsPage/constants.js index a99bd69a5a..1a4a4bad95 100644 --- a/packages/strapi-admin/admin/src/containers/ListPluginsPage/constants.js +++ b/packages/strapi-admin/admin/src/containers/ListPluginsPage/constants.js @@ -4,7 +4,8 @@ * */ -export const DEFAULT_ACTION = 'StrapiAdmin/ListPluginsPage/DEFAULT_ACTION'; +export const GET_PLUGINS = 'StrapiAdmin/ListPluginsPage/GET_PLUGINS'; +export const GET_PLUGINS_SUCCEEDED = 'StrapiAdmin/ListPluginsPage/GET_PLUGINS_SUCCEEDED'; export const ON_DELETE_PLUGIN_CLICK = 'StrapiAdmin/ListPluginsPage/ON_DELETE_PLUGIN_CLICK'; export const ON_DELETE_PLUGIN_CONFIRM = 'StrapiAdmin/ListPluginsPage/ON_DELETE_PLUGIN_CONFIRM'; export const DELETE_PLUGIN_SUCCEEDED = 'StrapiAdmin/ListPluginsPage/DELETE_PLUGIN_SUCCEEDED'; diff --git a/packages/strapi-admin/admin/src/containers/ListPluginsPage/index.js b/packages/strapi-admin/admin/src/containers/ListPluginsPage/index.js index 3c23e31cb9..8f6f6830a2 100644 --- a/packages/strapi-admin/admin/src/containers/ListPluginsPage/index.js +++ b/packages/strapi-admin/admin/src/containers/ListPluginsPage/index.js @@ -18,13 +18,17 @@ import ListPlugins from 'components/ListPlugins'; import injectSaga from 'utils/injectSaga'; import injectReducer from 'utils/injectReducer'; -import { makeSelectPluginDeleteAction } from './selectors'; -import { onDeletePluginClick, onDeletePluginConfirm } from './actions'; +import { makeSelectPluginDeleteAction, makeSelectPlugins } from './selectors'; +import { getPlugins, onDeletePluginClick, onDeletePluginConfirm } from './actions'; import reducer from './reducer'; import saga from './saga'; import styles from './styles.scss'; export class ListPluginsPage extends React.Component { // eslint-disable-line react/prefer-stateless-function + componentDidMount() { + this.props.getPlugins(); + } + render() { return (
@@ -48,7 +52,7 @@ export class ListPluginsPage extends React.Component { // eslint-disable-line re /> createSelector( (substate) => substate.get('deleteActionSucceeded'), ); +const makeSelectPlugins = () => createSelector( + selectListPluginsPageDomain(), + (substate) => substate.get('plugins').toJS(), +); + export default makeSelectListPluginsPage; export { selectListPluginsPageDomain, makeSelectPluginToDelete, makeSelectPluginDeleteAction, + makeSelectPlugins, }; diff --git a/packages/strapi-admin/config/routes.json b/packages/strapi-admin/config/routes.json index b2b45e1d35..137a58d8e6 100755 --- a/packages/strapi-admin/config/routes.json +++ b/packages/strapi-admin/config/routes.json @@ -8,6 +8,14 @@ "policies": [] } }, + { + "method": "GET", + "path": "/plugins", + "handler": "Admin.plugins", + "config": { + "policies": [] + } + }, { "method": "GET", "path": "/:plugin/:file", diff --git a/packages/strapi-admin/controllers/Admin.js b/packages/strapi-admin/controllers/Admin.js index 4bfdadde17..7f5952a72b 100755 --- a/packages/strapi-admin/controllers/Admin.js +++ b/packages/strapi-admin/controllers/Admin.js @@ -43,6 +43,14 @@ module.exports = { } }, + plugins: async ctx => { + try { + ctx.send({ plugins: strapi.plugins }); + } catch(err) { + ctx.badRequest(null, [{ messages: [{ id: 'An error occured' }] }]); + } + }, + uninstallPlugin: async ctx => { try { const { plugin } = ctx.params; diff --git a/packages/strapi/lib/core/apis.js b/packages/strapi/lib/core/apis.js index 4aea4ea640..a23fc47549 100755 --- a/packages/strapi/lib/core/apis.js +++ b/packages/strapi/lib/core/apis.js @@ -32,7 +32,8 @@ module.exports = function() { }), new Promise((resolve, reject) => { // Load configurations. - glob('./plugins/*/!(config|node_modules)/*.*(js|json)', {}, (err, files) => { + glob('{./plugins/*/!(config|node_modules)/*.*(js|json),./plugins/*/package.json}', {}, (err, files) => { + if (err) { return reject(err); }