From 0e4cc37ecec8a2130705e98278dfa6de48ed46f1 Mon Sep 17 00:00:00 2001 From: Henrik Larsson Date: Mon, 28 Aug 2023 14:53:03 +0200 Subject: [PATCH] Test to remove suspense from dynamic content manager --- .../dynamic-content-manager.tsx | 159 +++++++++--------- 1 file changed, 75 insertions(+), 84 deletions(-) diff --git a/components/layout/dynamic-content-manager/dynamic-content-manager.tsx b/components/layout/dynamic-content-manager/dynamic-content-manager.tsx index eafa16706..9740b4223 100644 --- a/components/layout/dynamic-content-manager/dynamic-content-manager.tsx +++ b/components/layout/dynamic-content-manager/dynamic-content-manager.tsx @@ -7,7 +7,80 @@ import ReusableSection from '@/components/modules/reusable-section/reusable-sect import Slider from '@/components/modules/slider/slider'; import USPSection from '@/components/modules/usp-section/usp-section'; import { InformationCircleIcon } from '@heroicons/react/24/outline'; -import { Suspense } from 'react'; +interface getContentComponentProps { + _type: string; + _key: number; + disabled: boolean; +} + +const getContentComponent = ({ _type, _key, disabled, ...rest }: getContentComponentProps) => { + let Component: any; + + switch (_type) { + case 'hero': + if (disabled !== true) { + Component = Hero; + } else { + return; + } + break; + case 'slider': + if (disabled !== true) { + Component = Slider; + } else { + return; + } + break; + case 'filteredProductList': + if (disabled !== true) { + Component = FilteredProductList; + } else { + return; + } + break; + case 'blurbSection': + if (disabled !== true) { + Component = BlurbSection; + } else { + return; + } + break; + case 'uspSection': + if (disabled !== true) { + Component = USPSection; + } else { + return; + } + break; + case 'reusableSection': + if (disabled !== true) { + Component = ReusableSection; + } else { + return; + } + break; + default: + return ( +
+ + + {`No matching component (Type: ${_type})`} + +
+ ); + } + + return Component ? ( + + ) : ( +
Something else
+ ); +}; interface dynamicContentManagerProps { content: [] | any; @@ -15,89 +88,7 @@ interface dynamicContentManagerProps { const DynamicContentManager = ({ content }: dynamicContentManagerProps) => { return ( -
- {content?.map( - ( - component: { _type: string; _key: number; disabled: boolean; rest: any } | any, - index: number - ) => { - const { _type, _key, disabled, ...rest } = component; - - let Component: any; - - switch (_type) { - case 'hero': - if (disabled !== true) { - Component = Hero; - } else { - return; - } - break; - case 'slider': - if (disabled !== true) { - Component = Slider; - } else { - return; - } - break; - case 'filteredProductList': - if (disabled !== true) { - Component = FilteredProductList; - } else { - return; - } - break; - case 'blurbSection': - if (disabled !== true) { - Component = BlurbSection; - } else { - return; - } - break; - case 'uspSection': - if (disabled !== true) { - Component = USPSection; - } else { - return; - } - break; - case 'reusableSection': - if (disabled !== true) { - Component = ReusableSection; - } else { - return; - } - break; - default: - return ( -
- - - {`No matching component (Type: ${_type})`} - -
- ); - } - - if (Component && index === 0) { - return ; - } else if (Component) { - return ( - - - - ); - } else { -
Something else
; - } - } - )} -
+
{content?.map(getContentComponent)}
); };