mirror of
https://github.com/strapi/strapi.git
synced 2025-09-25 16:29:34 +00:00
wip
This commit is contained in:
parent
cdcac62ee2
commit
a04322d585
@ -9,7 +9,7 @@ import ListView from './index';
|
||||
const ListViewLayout = ({ layout, ...props }) => {
|
||||
const dispatch = useDispatch();
|
||||
const initialParams = useSelector(state => state.get('content-manager_listView').initialParams);
|
||||
const [, setQuery] = useQueryParams(initialParams);
|
||||
const [{ query }, setQuery] = useQueryParams(initialParams);
|
||||
|
||||
useEffect(() => {
|
||||
dispatch(setLayout(layout.contentType));
|
||||
@ -22,12 +22,14 @@ const ListViewLayout = ({ layout, ...props }) => {
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [initialParams]);
|
||||
|
||||
|
||||
|
||||
if (!initialParams) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<RBACManager {...props}>
|
||||
<RBACManager {...props} query={query}>
|
||||
<ListView {...props} layout={layout} />
|
||||
</RBACManager>
|
||||
);
|
||||
|
@ -98,6 +98,7 @@ function ListView({
|
||||
allowedActions: { canCreate, canRead, canUpdate, canDelete },
|
||||
} = useUserPermissions(viewPermissions, permissions);
|
||||
|
||||
|
||||
const [{ query }, setQuery] = useQueryParams(initialParams);
|
||||
const params = buildQueryString(query);
|
||||
|
||||
|
@ -1,9 +1,13 @@
|
||||
import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';
|
||||
|
||||
export const setPermissions = permissions => {
|
||||
export const setPermissions = (permissions, pluginOptions, containerName) => {
|
||||
return {
|
||||
type: SET_PERMISSIONS,
|
||||
permissions,
|
||||
__meta__: {
|
||||
pluginOptions,
|
||||
containerName,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,28 +1,33 @@
|
||||
import React, { cloneElement, Children, useEffect } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import get from 'lodash/get';
|
||||
|
||||
import PropTypes from 'prop-types';
|
||||
import { LoadingIndicatorPage } from 'strapi-helper-plugin';
|
||||
import pluginId from '../../pluginId';
|
||||
import { resetPermissions, setPermissions } from './actions';
|
||||
|
||||
const RBACManager = props => {
|
||||
const { collectionTypesRelatedPermissions } = useSelector(state =>
|
||||
state.get('permissionsManager')
|
||||
);
|
||||
const { permissions } = useSelector(state => state.get(`${pluginId}_rbacManager`));
|
||||
const selectPermissions = state => state.get(`${pluginId}_rbacManager`).permissions;
|
||||
|
||||
const selectCollectionTypePermissions = state =>
|
||||
state.get('permissionsManager').collectionTypesRelatedPermissions;
|
||||
|
||||
const RBACManager = ({ query, ...props }) => {
|
||||
const collectionTypesRelatedPermissions = useSelector(selectCollectionTypePermissions);
|
||||
const permissions = useSelector(selectPermissions);
|
||||
const dispatch = useDispatch();
|
||||
const collectionTypeUID = props.slug;
|
||||
|
||||
useEffect(() => {
|
||||
const relatedPermissions = get(collectionTypesRelatedPermissions, [collectionTypeUID], {});
|
||||
const relatedPermissions = collectionTypesRelatedPermissions[collectionTypeUID];
|
||||
|
||||
dispatch(setPermissions(relatedPermissions));
|
||||
useEffect(() => {
|
||||
if (query.pluginOptions && relatedPermissions) {
|
||||
dispatch(setPermissions(relatedPermissions, query.pluginOptions, 'listView'));
|
||||
|
||||
return () => {
|
||||
dispatch(resetPermissions());
|
||||
};
|
||||
}, [collectionTypeUID, collectionTypesRelatedPermissions, dispatch]);
|
||||
}
|
||||
}, [relatedPermissions, dispatch, query]);
|
||||
|
||||
if (!permissions) {
|
||||
return <LoadingIndicatorPage />;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React, { useState } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import { Picker, Padded, Text, Flex } from '@buffetjs/core';
|
||||
import { Carret, useQueryParams } from 'strapi-helper-plugin';
|
||||
import styled from 'styled-components';
|
||||
@ -40,6 +40,7 @@ const selectContentManagerListViewPluginOptions = state =>
|
||||
const selectI18NLocales = state => state.get('i18n_locales').locales;
|
||||
|
||||
const LocalePicker = () => {
|
||||
const dispatch = useDispatch();
|
||||
const pluginOptions = useSelector(selectContentManagerListViewPluginOptions);
|
||||
const locales = useSelector(selectI18NLocales);
|
||||
const [selected, setSelected] = useState(locales && locales[0]);
|
||||
@ -68,6 +69,7 @@ const LocalePicker = () => {
|
||||
)}
|
||||
renderSectionContent={onToggle => {
|
||||
const handleClick = locale => {
|
||||
dispatch({ type: 'ContentManager/RBACManager/RESET_PERMISSIONS' });
|
||||
setSelected(locale);
|
||||
setQuery({ pluginOptions: { ...query.pluginOptions, locale: locale.code } });
|
||||
onToggle();
|
||||
|
@ -1,11 +1,13 @@
|
||||
import extendCTBInitialDataMiddleware from './extendCTBInitialDataMiddleware';
|
||||
import extendCTBAttributeInitialDataMiddleware from './extendCTBAttributeInitialDataMiddleware';
|
||||
import localeQueryParamsMiddleware from './localeQueryParamsMiddleware';
|
||||
import localePermissionMiddleware from './localePermissionMiddleware';
|
||||
|
||||
const middlewares = [
|
||||
extendCTBInitialDataMiddleware,
|
||||
extendCTBAttributeInitialDataMiddleware,
|
||||
localeQueryParamsMiddleware,
|
||||
localePermissionMiddleware,
|
||||
];
|
||||
|
||||
export default middlewares;
|
||||
|
@ -0,0 +1,38 @@
|
||||
import get from 'lodash/get';
|
||||
|
||||
const filterPermissionWithLocale = locale => permission =>
|
||||
permission.properties.locales.indexOf(locale) !== -1;
|
||||
|
||||
const localePermissionMiddleware = () => () => next => action => {
|
||||
if (action.type !== 'ContentManager/RBACManager/SET_PERMISSIONS') {
|
||||
return next(action);
|
||||
}
|
||||
|
||||
if (action.__meta__.containerName !== 'listView') {
|
||||
return next(action);
|
||||
}
|
||||
|
||||
if (!get(action, '__meta__.pluginOptions.locale', false)) {
|
||||
return next(action);
|
||||
}
|
||||
|
||||
const locale = action.__meta__.pluginOptions.locale;
|
||||
const permissions = action.permissions;
|
||||
|
||||
const nextPermissions = Object.keys(permissions).reduce((acc, key) => {
|
||||
const currentPermission = permissions[key];
|
||||
const filteredPermissions = currentPermission.filter(filterPermissionWithLocale(locale));
|
||||
|
||||
if (filteredPermissions.length) {
|
||||
acc[key] = filteredPermissions;
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
|
||||
|
||||
return next({ ...action, permissions: nextPermissions });
|
||||
};
|
||||
|
||||
export default localePermissionMiddleware;
|
Loading…
x
Reference in New Issue
Block a user