mirror of
https://github.com/strapi/strapi.git
synced 2025-11-11 07:39:16 +00:00
Created InstallPluginPage container
This commit is contained in:
parent
86a5401680
commit
046574fb45
@ -24,7 +24,7 @@ class LeftMenuLink extends React.Component { // eslint-disable-line react/prefer
|
|||||||
className={`${styles.link} ${isLinkActive ? styles.linkActive : ''}`}
|
className={`${styles.link} ${isLinkActive ? styles.linkActive : ''}`}
|
||||||
to={{
|
to={{
|
||||||
pathname: this.props.destination,
|
pathname: this.props.destination,
|
||||||
search: `?source=${this.props.source}`,
|
search: `${this.props.source ? '?source=' : ''}${this.props.source}`,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<i className={`${styles.linkIcon} fa-${this.props.icon} fa`}></i>
|
<i className={`${styles.linkIcon} fa-${this.props.icon} fa`}></i>
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import ComingSoonPage from 'containers/ComingSoonPage';
|
|||||||
import Content from 'containers/Content';
|
import Content from 'containers/Content';
|
||||||
import Header from 'components/Header/index';
|
import Header from 'components/Header/index';
|
||||||
import HomePage from 'containers/HomePage';
|
import HomePage from 'containers/HomePage';
|
||||||
|
import InstallPluginPage from 'containers/InstallPluginPage';
|
||||||
import LeftMenu from 'containers/LeftMenu';
|
import LeftMenu from 'containers/LeftMenu';
|
||||||
import ListPluginsPage from 'containers/ListPluginsPage';
|
import ListPluginsPage from 'containers/ListPluginsPage';
|
||||||
import Logout from 'components/Logout';
|
import Logout from 'components/Logout';
|
||||||
@ -111,7 +112,7 @@ export class AdminPage extends React.Component { // eslint-disable-line react/pr
|
|||||||
<Route path="/plugins/:pluginId" component={PluginPage} />
|
<Route path="/plugins/:pluginId" component={PluginPage} />
|
||||||
<Route path="/plugins" component={ComingSoonPage} />
|
<Route path="/plugins" component={ComingSoonPage} />
|
||||||
<Route path="/list-plugins" component={ListPluginsPage} exact />
|
<Route path="/list-plugins" component={ListPluginsPage} exact />
|
||||||
<Route path="/install-plugin" component={ComingSoonPage} exact />
|
<Route path="/install-plugin" component={InstallPluginPage} exact />
|
||||||
<Route path="/configuration" component={ComingSoonPage} exact />
|
<Route path="/configuration" component={ComingSoonPage} exact />
|
||||||
<Route path="" component={NotFoundPage} />
|
<Route path="" component={NotFoundPage} />
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* InstallPluginPage actions
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
GET_PLUGINS,
|
||||||
|
GET_PLUGINS_SUCCEEDED,
|
||||||
|
ON_CHANGE,
|
||||||
|
} from './constants';
|
||||||
|
|
||||||
|
export function getPlugins() {
|
||||||
|
return {
|
||||||
|
type: GET_PLUGINS,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPluginsSucceeded(availablePlugins) {
|
||||||
|
return {
|
||||||
|
type: GET_PLUGINS_SUCCEEDED,
|
||||||
|
availablePlugins,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function onChange({ target }) {
|
||||||
|
return {
|
||||||
|
type: ON_CHANGE,
|
||||||
|
keys: target.name.split('.'),
|
||||||
|
value: target.value,
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* InstallPluginPage constants
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const GET_PLUGINS = 'StrapiAdmin/InstallPluginPage/GET_PLUGINS';
|
||||||
|
export const GET_PLUGINS_SUCCEEDED = 'StrapiAdmin/InstallPluginPage/GET_PLUGINS_SUCCEEDED';
|
||||||
|
export const ON_CHANGE = 'StrapiAdmin/InstallPluginPage/ON_CHANGE';
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"availablePlugins": [
|
||||||
|
{
|
||||||
|
"description": "content-manager.plugin.description",
|
||||||
|
"id": "content-manager",
|
||||||
|
"icon": "plug",
|
||||||
|
"name": "Content Manager",
|
||||||
|
"price": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "content-type-builder.plugin.description",
|
||||||
|
"id": "content-type-builder",
|
||||||
|
"icon": "brush",
|
||||||
|
"name": "content type builder",
|
||||||
|
"price": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "settings-manager.plugin.description",
|
||||||
|
"id": "settings-manager",
|
||||||
|
"icon": "wrench",
|
||||||
|
"name": "settings manager",
|
||||||
|
"price": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "users-permissions.plugin.description",
|
||||||
|
"id": "users-permissions",
|
||||||
|
"icon": "users",
|
||||||
|
"name": "Auth & Permissions",
|
||||||
|
"price": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,115 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* InstallPluginPage
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
import { Helmet } from 'react-helmet';
|
||||||
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
import { bindActionCreators, compose } from 'redux';
|
||||||
|
import cn from 'classnames';
|
||||||
|
|
||||||
|
// Design
|
||||||
|
import Input from 'components/Input';
|
||||||
|
import PluginHeader from 'components/PluginHeader';
|
||||||
|
|
||||||
|
import injectSaga from 'utils/injectSaga';
|
||||||
|
import injectReducer from 'utils/injectReducer';
|
||||||
|
|
||||||
|
import {
|
||||||
|
getPlugins,
|
||||||
|
onChange,
|
||||||
|
} from './actions';
|
||||||
|
|
||||||
|
import makeSelectInstallPluginPage from './selectors';
|
||||||
|
import reducer from './reducer';
|
||||||
|
import saga from './saga';
|
||||||
|
|
||||||
|
import styles from './styles.scss';
|
||||||
|
|
||||||
|
export class InstallPluginPage extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
||||||
|
componentDidMount() {
|
||||||
|
// Don't fetch the available plugins if it has already been done
|
||||||
|
if (!this.props.didFetchPlugins) {
|
||||||
|
this.props.getPlugins();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<FormattedMessage id="app.components.InstallPluginPage.helmet">
|
||||||
|
{message => (
|
||||||
|
<Helmet>
|
||||||
|
<title>{message}</title>
|
||||||
|
<meta name="description" content="Description of InstallPluginPage" />
|
||||||
|
</Helmet>
|
||||||
|
)}
|
||||||
|
</FormattedMessage>
|
||||||
|
<div className={cn('container-fluid', styles.containerFluid)}>
|
||||||
|
<PluginHeader
|
||||||
|
title={{ id: 'app.components.InstallPluginPage.title' }}
|
||||||
|
description={{ id: 'app.components.InstallPluginPage.description' }}
|
||||||
|
actions={[]}
|
||||||
|
/>
|
||||||
|
<div className="row">
|
||||||
|
<Input
|
||||||
|
customBootstrapClass="col-md-12"
|
||||||
|
label="app.components.InstallPluginPage.InputSearch.label"
|
||||||
|
name="search"
|
||||||
|
onChange={this.props.onChange}
|
||||||
|
placeholder="app.components.InstallPluginPage.InputSearch.placeholder"
|
||||||
|
type="search"
|
||||||
|
validations={{}}
|
||||||
|
value={this.props.search}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InstallPluginPage.contextTypes = {
|
||||||
|
plugins: PropTypes.object.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
InstallPluginPage.propTypes = {
|
||||||
|
didFetchPlugins: PropTypes.bool.isRequired,
|
||||||
|
getPlugins: PropTypes.func.isRequired,
|
||||||
|
onChange: PropTypes.func.isRequired,
|
||||||
|
search: PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapStateToProps = makeSelectInstallPluginPage();
|
||||||
|
|
||||||
|
function mapDispatchToProps(dispatch) {
|
||||||
|
return bindActionCreators(
|
||||||
|
{
|
||||||
|
getPlugins,
|
||||||
|
onChange,
|
||||||
|
},
|
||||||
|
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: 'installPluginPage', 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: 'installPluginPage', saga });
|
||||||
|
|
||||||
|
export default compose(
|
||||||
|
withReducer,
|
||||||
|
withSaga,
|
||||||
|
withConnect,
|
||||||
|
)(InstallPluginPage);
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* InstallPluginPage reducer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { fromJS, List } from 'immutable';
|
||||||
|
import {
|
||||||
|
GET_PLUGINS_SUCCEEDED,
|
||||||
|
ON_CHANGE,
|
||||||
|
} from './constants';
|
||||||
|
|
||||||
|
const initialState = fromJS({
|
||||||
|
availablePlugins: List([]),
|
||||||
|
didFetchPlugins: false,
|
||||||
|
search: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
function installPluginPageReducer(state = initialState, action) {
|
||||||
|
switch (action.type) {
|
||||||
|
case GET_PLUGINS_SUCCEEDED:
|
||||||
|
return state
|
||||||
|
.set('didFetchPlugins', true)
|
||||||
|
.set('plugins', List(action.availablePlugins));
|
||||||
|
case ON_CHANGE:
|
||||||
|
return state.updateIn(action.keys, () => action.value);
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default installPluginPageReducer;
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
import { LOCATION_CHANGE } from 'react-router-redux';
|
||||||
|
import {
|
||||||
|
// call,
|
||||||
|
cancel,
|
||||||
|
fork,
|
||||||
|
put,
|
||||||
|
// select,
|
||||||
|
take,
|
||||||
|
takeLatest,
|
||||||
|
} from 'redux-saga/effects';
|
||||||
|
|
||||||
|
// import request from 'utils/request';
|
||||||
|
import fakeData from './fakeData.json';
|
||||||
|
|
||||||
|
import { getPluginsSucceeded } from './actions';
|
||||||
|
import { GET_PLUGINS } from './constants';
|
||||||
|
|
||||||
|
export function* pluginsGet() {
|
||||||
|
try {
|
||||||
|
const availablePlugins = fakeData.availablePlugins;
|
||||||
|
const supportUs = {
|
||||||
|
description: 'app.components.InstallPluginPage.plugin.support-us.description',
|
||||||
|
id: 'support-us',
|
||||||
|
icon: '',
|
||||||
|
name: 'buy a t-shirt',
|
||||||
|
price: 30,
|
||||||
|
};
|
||||||
|
|
||||||
|
yield put(getPluginsSucceeded(availablePlugins.concat([supportUs])));
|
||||||
|
} catch(err) {
|
||||||
|
strapi.notification.error('notification.error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Individual exports for testing
|
||||||
|
export default function* defaultSaga() {
|
||||||
|
const loadPluginsWatcher = yield fork(takeLatest, GET_PLUGINS, pluginsGet);
|
||||||
|
|
||||||
|
yield take(LOCATION_CHANGE);
|
||||||
|
|
||||||
|
yield cancel(loadPluginsWatcher);
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { createSelector } from 'reselect';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Direct selector to the installPluginPage state domain
|
||||||
|
*/
|
||||||
|
const selectInstallPluginPageDomain = () => (state) => state.get('installPluginPage');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Other specific selectors
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default selector used by InstallPluginPage
|
||||||
|
*/
|
||||||
|
|
||||||
|
const makeSelectInstallPluginPage = () => createSelector(
|
||||||
|
selectInstallPluginPageDomain(),
|
||||||
|
(substate) => substate.toJS()
|
||||||
|
);
|
||||||
|
|
||||||
|
export default makeSelectInstallPluginPage;
|
||||||
|
export {
|
||||||
|
selectInstallPluginPageDomain,
|
||||||
|
};
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
.containerFluid {
|
||||||
|
padding: 18px 30px !important;
|
||||||
|
> div:first-child {
|
||||||
|
max-height: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,11 +1,20 @@
|
|||||||
{
|
{
|
||||||
"app.components.ComingSoonPage.comingSoon": "Coming soon",
|
"app.components.ComingSoonPage.comingSoon": "Coming soon",
|
||||||
"app.components.ComingSoonPage.featuresNotAvailable": "This feature is still under active development.",
|
"app.components.ComingSoonPage.featuresNotAvailable": "This feature is still under active development.",
|
||||||
|
|
||||||
"app.components.HomePage.welcome": "Welcome on board!",
|
"app.components.HomePage.welcome": "Welcome on board!",
|
||||||
"app.components.HomePage.description.part1": "We are happy to have you as one of our users!",
|
"app.components.HomePage.description.part1": "We are happy to have you as one of our users!",
|
||||||
"app.components.HomePage.description.part2": "You are now a member of our community which will help you building your dreamed app.",
|
"app.components.HomePage.description.part2": "You are now a member of our community which will help you building your dreamed app.",
|
||||||
"app.components.HomePage.button": "Create your first content type",
|
"app.components.HomePage.button": "Create your first content type",
|
||||||
"app.components.HomePage.feedback": "Feel free to ask questions or give us feedback by using one of the support channels below.",
|
"app.components.HomePage.feedback": "Feel free to ask questions or give us feedback by using one of the support channels below.",
|
||||||
|
|
||||||
|
"app.components.InstallPluginPage.helmet": "Install plugins",
|
||||||
|
"app.components.InstallPluginPage.title": "Install new plugins",
|
||||||
|
"app.components.InstallPluginPage.description": "Extend your app with no efforts",
|
||||||
|
"app.components.InstallPluginPage.plugin.support-us.description": "Support us by buying the Strapi t-shirt. It will allow us to keep working on the project and try giving the best possible experience!",
|
||||||
|
"app.components.InstallPluginPage.InputSearch.label": " ",
|
||||||
|
"app.components.InstallPluginPage.InputSearch.placeholder": "Search a plugin... (ex: authentication)",
|
||||||
|
|
||||||
"app.components.LeftMenuFooter.poweredBy": "Proudly powered by",
|
"app.components.LeftMenuFooter.poweredBy": "Proudly powered by",
|
||||||
"app.components.LeftMenuLinkContainer.configuration": "Configuration",
|
"app.components.LeftMenuLinkContainer.configuration": "Configuration",
|
||||||
"app.components.LeftMenuLinkContainer.general": "General",
|
"app.components.LeftMenuLinkContainer.general": "General",
|
||||||
@ -13,8 +22,10 @@
|
|||||||
"app.components.LeftMenuLinkContainer.listPlugins": "List plugins",
|
"app.components.LeftMenuLinkContainer.listPlugins": "List plugins",
|
||||||
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "No plugins installed yet",
|
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "No plugins installed yet",
|
||||||
"app.components.LeftMenuLinkContainer.plugins": "Plugins",
|
"app.components.LeftMenuLinkContainer.plugins": "Plugins",
|
||||||
|
|
||||||
"app.components.NotFoundPage.description": "Not Found",
|
"app.components.NotFoundPage.description": "Not Found",
|
||||||
"app.components.NotFoundPage.back": "Back to homepage",
|
"app.components.NotFoundPage.back": "Back to homepage",
|
||||||
|
|
||||||
"app.components.ListPluginsPage.helmet.title": "List plugins",
|
"app.components.ListPluginsPage.helmet.title": "List plugins",
|
||||||
"app.components.ListPluginsPage.title": "Plugins",
|
"app.components.ListPluginsPage.title": "Plugins",
|
||||||
"app.components.ListPluginsPage.description": "List of the installed plugins in the project.",
|
"app.components.ListPluginsPage.description": "List of the installed plugins in the project.",
|
||||||
@ -23,14 +34,20 @@
|
|||||||
"app.components.listPlugins.title.plural": "{number} plugins are installed",
|
"app.components.listPlugins.title.plural": "{number} plugins are installed",
|
||||||
"app.components.listPlugins.title.none": "No plugin is installed",
|
"app.components.listPlugins.title.none": "No plugin is installed",
|
||||||
"app.components.listPlugins.button": "Add New Plugin",
|
"app.components.listPlugins.button": "Add New Plugin",
|
||||||
|
|
||||||
"components.AutoReloadBlocker.header": "Reload feature is required for this plugin.",
|
"components.AutoReloadBlocker.header": "Reload feature is required for this plugin.",
|
||||||
"components.AutoReloadBlocker.description": "Open the following file and enable the feature.",
|
"components.AutoReloadBlocker.description": "Open the following file and enable the feature.",
|
||||||
|
|
||||||
|
"components.ErrorBoundary.title": "Something wen't wrong...",
|
||||||
|
|
||||||
"components.ProductionBlocker.header": "This plugin is only available in development.",
|
"components.ProductionBlocker.header": "This plugin is only available in development.",
|
||||||
"components.ProductionBlocker.description": "For safety we have to disable this plugin in other environments.",
|
"components.ProductionBlocker.description": "For safety we have to disable this plugin in other environments.",
|
||||||
|
|
||||||
"components.popUpWarning.button.cancel": "Cancel",
|
"components.popUpWarning.button.cancel": "Cancel",
|
||||||
"components.popUpWarning.button.confirm": "Confirm",
|
"components.popUpWarning.button.confirm": "Confirm",
|
||||||
"components.popUpWarning.title": "Please confirm",
|
"components.popUpWarning.title": "Please confirm",
|
||||||
"components.popUpWarning.message": "Are you sure you want to delete this?",
|
"components.popUpWarning.message": "Are you sure you want to delete this?",
|
||||||
|
|
||||||
"components.Input.error.validation.email": "This is not an email",
|
"components.Input.error.validation.email": "This is not an email",
|
||||||
"components.Input.error.validation.required": "This value input is required.",
|
"components.Input.error.validation.required": "This value input is required.",
|
||||||
"components.Input.error.validation.regex": "The value not match the regex.",
|
"components.Input.error.validation.regex": "The value not match the regex.",
|
||||||
@ -43,8 +60,11 @@
|
|||||||
"components.Input.error.attribute.key.taken": "This value already exists",
|
"components.Input.error.attribute.key.taken": "This value already exists",
|
||||||
"components.Input.error.attribute.sameKeyAndName": "Can't be equals",
|
"components.Input.error.attribute.sameKeyAndName": "Can't be equals",
|
||||||
"components.Input.error.validation.minSupMax": "Can't be superior",
|
"components.Input.error.validation.minSupMax": "Can't be superior",
|
||||||
"components.ErrorBoundary.title": "Something wen't wrong...",
|
|
||||||
"components.ListRow.empty": "There is no data to be shown.",
|
"components.ListRow.empty": "There is no data to be shown.",
|
||||||
|
|
||||||
|
"notification.error": "An error occurred",
|
||||||
|
|
||||||
"Auth & Permissions": "Auth & Permissions",
|
"Auth & Permissions": "Auth & Permissions",
|
||||||
"Content Manager": "Content Manager",
|
"Content Manager": "Content Manager",
|
||||||
"Content Type Builder": "Content Type Builder",
|
"Content Type Builder": "Content Type Builder",
|
||||||
|
|||||||
@ -1,11 +1,21 @@
|
|||||||
{
|
{
|
||||||
"app.components.ComingSoonPage.comingSoon": "Bientôt disponible",
|
"app.components.ComingSoonPage.comingSoon": "Bientôt disponible",
|
||||||
"app.components.ComingSoonPage.featuresNotAvailable": "Cette fonctionnalité est toujours en cours de développement.",
|
"app.components.ComingSoonPage.featuresNotAvailable": "Cette fonctionnalité est toujours en cours de développement.",
|
||||||
|
|
||||||
|
|
||||||
"app.components.HomePage.welcome": "Bienvenue à bord!",
|
"app.components.HomePage.welcome": "Bienvenue à bord!",
|
||||||
"app.components.HomePage.description.part1": "Nous somme heureux de vous compter parmi nos utilisateurs",
|
"app.components.HomePage.description.part1": "Nous somme heureux de vous compter parmi nos utilisateurs",
|
||||||
"app.components.HomePage.description.part2": "Vous faites désormais parti de notre communauté qui peut vous aider à développer votre application.",
|
"app.components.HomePage.description.part2": "Vous faites désormais parti de notre communauté qui peut vous aider à développer votre application.",
|
||||||
"app.components.HomePage.button": "Créez votre premier type de contenu",
|
"app.components.HomePage.button": "Créez votre premier type de contenu",
|
||||||
"app.components.HomePage.feedback": "N'hésitez pas à utiliser un des channels ci-dessous pour poser vos questions ou nous donner vos retours.",
|
"app.components.HomePage.feedback": "N'hésitez pas à utiliser un des channels ci-dessous pour poser vos questions ou nous donner vos retours.",
|
||||||
|
|
||||||
|
"app.components.InstallPluginPage.helmet": "Installez des plugins",
|
||||||
|
"app.components.InstallPluginPage.title": "Installez des nouveaux plugins",
|
||||||
|
"app.components.InstallPluginPage.description": "Améliorez votre app sans efforts",
|
||||||
|
"app.components.InstallPluginPage.plugin.support-us.description": "Soutenez-nous en achetant un Strapi tee shirt. Cela nous aidera a continuer de travailler sur le projet pour vous donner la meilleure expérience possible!",
|
||||||
|
"app.components.InstallPluginPage.InputSearch.label": " ",
|
||||||
|
"app.components.InstallPluginPage.InputSearch.placeholder": "Recherchez un plugin... (ex: authentification)",
|
||||||
|
|
||||||
"app.components.LeftMenuFooter.poweredBy": "Propulsé par",
|
"app.components.LeftMenuFooter.poweredBy": "Propulsé par",
|
||||||
"app.components.LeftMenuLinkContainer.configuration": "Configuration",
|
"app.components.LeftMenuLinkContainer.configuration": "Configuration",
|
||||||
"app.components.LeftMenuLinkContainer.general": "Général",
|
"app.components.LeftMenuLinkContainer.general": "Général",
|
||||||
@ -13,8 +23,10 @@
|
|||||||
"app.components.LeftMenuLinkContainer.listPlugins": "Liste des plugins",
|
"app.components.LeftMenuLinkContainer.listPlugins": "Liste des plugins",
|
||||||
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "Aucun plugin installé",
|
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "Aucun plugin installé",
|
||||||
"app.components.LeftMenuLinkContainer.plugins": "Plugins",
|
"app.components.LeftMenuLinkContainer.plugins": "Plugins",
|
||||||
|
|
||||||
"app.components.NotFoundPage.description": "Page introuvable",
|
"app.components.NotFoundPage.description": "Page introuvable",
|
||||||
"app.components.NotFoundPage.back": "Retourner à la page d'accueil",
|
"app.components.NotFoundPage.back": "Retourner à la page d'accueil",
|
||||||
|
|
||||||
"app.components.ListPluginsPage.helmet.title": "List plugins",
|
"app.components.ListPluginsPage.helmet.title": "List plugins",
|
||||||
"app.components.ListPluginsPage.title": "Plugins",
|
"app.components.ListPluginsPage.title": "Plugins",
|
||||||
"app.components.ListPluginsPage.description": "Liste des plugins installés dans le projet.",
|
"app.components.ListPluginsPage.description": "Liste des plugins installés dans le projet.",
|
||||||
@ -23,14 +35,20 @@
|
|||||||
"app.components.listPlugins.title.plural": "{number} sont disponibles",
|
"app.components.listPlugins.title.plural": "{number} sont disponibles",
|
||||||
"app.components.listPlugins.title.none": "Aucun plugin n'est installé",
|
"app.components.listPlugins.title.none": "Aucun plugin n'est installé",
|
||||||
"app.components.listPlugins.button": "Ajouter un Nouveau Plugin",
|
"app.components.listPlugins.button": "Ajouter un Nouveau Plugin",
|
||||||
|
|
||||||
"components.AutoReloadBlocker.header": "L'autoReload doit être activé pour ce plugin.",
|
"components.AutoReloadBlocker.header": "L'autoReload doit être activé pour ce plugin.",
|
||||||
"components.AutoReloadBlocker.description": "Ouvrez le fichier suivant pour activer cette fonctionnalité.",
|
"components.AutoReloadBlocker.description": "Ouvrez le fichier suivant pour activer cette fonctionnalité.",
|
||||||
|
|
||||||
|
"components.ErrorBoundary.title": "Une erreur est survenue...",
|
||||||
|
|
||||||
"components.ProductionBlocker.header": "Ce plugin est disponible uniquement en développement.",
|
"components.ProductionBlocker.header": "Ce plugin est disponible uniquement en développement.",
|
||||||
"components.ProductionBlocker.description": "Pour des raisons de sécurité il est désactivé dans les autres environnements.",
|
"components.ProductionBlocker.description": "Pour des raisons de sécurité il est désactivé dans les autres environnements.",
|
||||||
"comonents.popUpWarning.button.cancel": "Annuler",
|
|
||||||
"comonents.popUpWarning.button.confirm": "Confirmer",
|
"components.popUpWarning.button.cancel": "Annuler",
|
||||||
|
"components.popUpWarning.button.confirm": "Confirmer",
|
||||||
"components.popUpWarning.title": "Merci de confirmer",
|
"components.popUpWarning.title": "Merci de confirmer",
|
||||||
"components.popUpWarning.message": "Etes-vous sure de vouloir le supprimer?",
|
"components.popUpWarning.message": "Etes-vous sure de vouloir le supprimer?",
|
||||||
|
|
||||||
"components.Input.error.validation.email": "Le format n'est pas de type email",
|
"components.Input.error.validation.email": "Le format n'est pas de type email",
|
||||||
"components.Input.error.validation.required": "Ce champ est obligatoire.",
|
"components.Input.error.validation.required": "Ce champ est obligatoire.",
|
||||||
"components.Input.error.validation.regex": "La valeur ne correspond pas au format attendu.",
|
"components.Input.error.validation.regex": "La valeur ne correspond pas au format attendu.",
|
||||||
@ -43,8 +61,11 @@
|
|||||||
"components.Input.error.attribute.key.taken": "Cette valeur existe déjà",
|
"components.Input.error.attribute.key.taken": "Cette valeur existe déjà",
|
||||||
"components.Input.error.attribute.sameKeyAndName": "Ne peuvent pas être égaux",
|
"components.Input.error.attribute.sameKeyAndName": "Ne peuvent pas être égaux",
|
||||||
"components.Input.error.validation.minSupMax": "Ne peut pas être plus grand",
|
"components.Input.error.validation.minSupMax": "Ne peut pas être plus grand",
|
||||||
"components.ErrorBoundary.title": "Une erreur est survenue...",
|
|
||||||
"components.ListRow.empty": "Il n'y a pas de données à afficher.",
|
"components.ListRow.empty": "Il n'y a pas de données à afficher.",
|
||||||
|
|
||||||
|
"notification.error": "Une erreur est survenue",
|
||||||
|
|
||||||
"Auth & Permissions": "Auth & Permissions",
|
"Auth & Permissions": "Auth & Permissions",
|
||||||
"Content Manager": "Content Manager",
|
"Content Manager": "Content Manager",
|
||||||
"Content Type Builder": "Content Type Builder",
|
"Content Type Builder": "Content Type Builder",
|
||||||
|
|||||||
@ -483,6 +483,8 @@ class Input extends React.Component { // eslint-disable-line react/prefer-statel
|
|||||||
return this.renderInputToggle();
|
return this.renderInputToggle();
|
||||||
case 'email':
|
case 'email':
|
||||||
return this.renderInputEmail(requiredClass, inputDescription, handleBlur);
|
return this.renderInputEmail(requiredClass, inputDescription, handleBlur);
|
||||||
|
case 'search':
|
||||||
|
return this.renderInputSearch(requiredClass, inputDescription, handleBlur)
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -256,138 +256,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"application": {
|
"application": {
|
||||||
"controllers": {
|
"controllers": {}
|
||||||
"azeaz": {
|
|
||||||
"find": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bite": {
|
|
||||||
"find": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"erza": {
|
|
||||||
"find": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ez": {
|
|
||||||
"find": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"reaz": {
|
|
||||||
"find": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": true,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -648,138 +517,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"application": {
|
"application": {
|
||||||
"controllers": {
|
"controllers": {}
|
||||||
"azeaz": {
|
|
||||||
"find": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bite": {
|
|
||||||
"find": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"erza": {
|
|
||||||
"find": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ez": {
|
|
||||||
"find": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"reaz": {
|
|
||||||
"find": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"findOne": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
},
|
|
||||||
"identity": {
|
|
||||||
"enabled": false,
|
|
||||||
"policy": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cross-env": "^5.1.1",
|
"cross-env": "^5.1.1",
|
||||||
"eslint": "^4.12.0",
|
"eslint": "^4.12.1",
|
||||||
"eslint-config-airbnb": "^15.1.0",
|
"eslint-config-airbnb": "^15.1.0",
|
||||||
"eslint-config-airbnb-base": "^11.3.2",
|
"eslint-config-airbnb-base": "^11.3.2",
|
||||||
"eslint-config-prettier": "^2.9.0",
|
"eslint-config-prettier": "^2.9.0",
|
||||||
@ -59,6 +59,6 @@
|
|||||||
"plop": "^1.9.0",
|
"plop": "^1.9.0",
|
||||||
"prettier": "^1.8.2",
|
"prettier": "^1.8.2",
|
||||||
"rimraf": "^2.6.2",
|
"rimraf": "^2.6.2",
|
||||||
"webpack": "^3.8.1"
|
"webpack": "^3.9.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user