UNPKG

@craftercms/studio-ui

Version:

Services, components, models & utils to build CrafterCMS authoring extensions.

79 lines (77 loc) 2.99 kB
/* * 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-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 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, { Fragment, Suspense } from 'react'; import { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary'; import LoadingState from '../LoadingState/LoadingState'; import EmptyState from '../EmptyState/EmptyState'; import { FormattedMessage } from 'react-intl'; export function WithEmptyState(props) { const { children, isEmpty = (value) => value.length === 0, resource, emptyStateProps } = props; const value = resource.read(); const finalEmptyStateProps = Object.assign( { title: React.createElement(FormattedMessage, { id: 'withEmptyState.defaultEmptyStateMessage', defaultMessage: 'No results found' }) }, emptyStateProps ); return React.createElement( Fragment, null, isEmpty(value) ? React.createElement(EmptyState, Object.assign({}, finalEmptyStateProps)) : children ); } export function Suspencified(props) { const { children, loadingStateProps, errorBoundaryProps, suspenseProps } = props; return React.createElement( ErrorBoundary, Object.assign({}, errorBoundaryProps), React.createElement( Suspense, Object.assign( { fallback: React.createElement(LoadingState, Object.assign({}, loadingStateProps)) }, suspenseProps, { children: children } ) ) ); } export function SuspenseWithEmptyState(props) { const { children, withEmptyStateProps, resource } = props; return React.createElement( Suspencified, Object.assign({}, props), React.createElement(WithEmptyState, Object.assign({ resource: resource }, withEmptyStateProps), children) ); } export default Suspencified;