@craftercms/studio-ui
Version:
Services, components, models & utils to build CrafterCMS authoring extensions.
60 lines (58 loc) • 2.32 kB
JavaScript
/*
* Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import React from 'react';
import Widget from './Widget';
export function renderWidgets(widgets, options) {
if (!Array.isArray(widgets)) {
return [];
}
const { userRoles, overrideProps, defaultProps, createMapperFn = (fn) => fn } = options;
const mapperFn = createMapperFn((widget, index) =>
React.createElement(Widget, {
key: widget.uiKey ?? index,
...widget,
overrideProps: overrideProps,
defaultProps: defaultProps
})
);
return Array.isArray(userRoles)
? widgets
.filter(
(widget) =>
// Incorrect deserialization or content of permittedRoles may cause it to be something other than an array
!Array.isArray(widget.permittedRoles) ||
(widget.permittedRoles ?? []).length === 0 ||
(userRoles ?? []).some((role) => widget.permittedRoles.includes(role))
)
.map(mapperFn)
: widgets.map(mapperFn);
}
export default renderWidgets;