Skip to content

Commit

Permalink
Add schemaComposer
Browse files Browse the repository at this point in the history
  • Loading branch information
tiberiuichim committed Nov 1, 2022
1 parent 4564772 commit 2b7b3c7
Show file tree
Hide file tree
Showing 9 changed files with 69 additions and 97 deletions.
8 changes: 6 additions & 2 deletions src/blocks/Item/index.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import codeSVG from '@plone/volto/icons/code.svg';
import { compose } from 'redux';
import { addStyling } from '@plone/volto/helpers';

import ItemEdit from './Edit';
import ItemView from './View';
import { setItemStyling } from './schema';

import codeSVG from '@plone/volto/icons/code.svg';

export default (config) => {
config.blocks.blocksConfig.item = {
id: 'item',
Expand All @@ -19,7 +23,7 @@ export default (config) => {
addPermission: [],
view: [],
},
schemaEnhancer: setItemStyling,
schemaEnhancer: compose(addStyling, setItemStyling),
};

config.settings.blocksWithFootnotesSupport = {
Expand Down
45 changes: 34 additions & 11 deletions src/blocks/Listing/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { compose } from 'redux';
import { addStyling } from '@plone/volto/helpers';
import UniversalCard from '@eeacms/volto-listing-block/components/UniversalCard/UniversalCard';
import { composeSchema } from '@eeacms/volto-listing-block/schema-utils';

import Carousel from './layout-templates/Carousel';
import Gallery from './layout-templates/Gallery';
import Listing from './layout-templates/Listing';
Expand All @@ -19,8 +23,6 @@ import {
import { DefaultItemLayout } from './item-templates/ItemTemplates';
import { SearchItemLayout } from './item-templates/SearchItemTemplate';

// import universalCardSchemaEnhancer from '@eeacms/volto-listing-block/components/UniversalCard/schema';

const applyConfig = (config) => {
// moment date locale. See https://momentjs.com/ - Multiple Locale Support
config.settings.dateLocale = config.settings.dateLocale ?? 'en';
Expand All @@ -36,6 +38,13 @@ const applyConfig = (config) => {
// The variation takes care of how the individual item is displayed.
// With our own variations being based on the UniversalCard, we have another
// level of control on how each item is displayed.
// console.log(
// composeSchema(
// addStyling,
// setBasicStylingSchema,
// UniversalCard.schemaEnhancer,
// ),
// );

listing.variations = [
...listing.variations.filter(({ id }) => blacklist.indexOf(id) === -1),
Expand All @@ -44,21 +53,35 @@ const applyConfig = (config) => {
isDefault: false,
title: 'Listing',
template: Listing,
schemaEnhancer: compose(setBasicStylingSchema, Listing.schemaEnhancer),
schemaEnhancer: composeSchema(
addStyling,
setBasicStylingSchema,
UniversalCard.schemaEnhancer,
),
},
{
id: 'cardsCarousel',
isDefault: false,
title: 'Carousel',
template: Carousel,
schemaEnhancer: compose(setBasicStylingSchema, Carousel.schemaEnhancer),
// schemaEnhancer: compose(
// addStyling,
// setBasicStylingSchema,
// UniversalCard.schemaEnhancer,
// Carousel.schemaEnhancer,
// ),
},
{
id: 'cardsGallery', // 'customCardsGalleryVariationId'
isDefault: false,
title: 'Gallery',
template: Gallery,
schemaEnhancer: compose(setBasicStylingSchema, Gallery.schemaEnhancer),
// schemaEnhancer: compose(
// addStyling,
// setBasicStylingSchema,
// UniversalCard.schemaEnhancer,
// Gallery.schemaEnhancer,
// ),
},
];

Expand All @@ -70,32 +93,32 @@ const applyConfig = (config) => {
isDefault: true,
title: 'Card (default)',
template: DefaultCardLayout,
schemaEnhancer: compose(setCardModelSchema, setCardStylingSchema),
schemaEnhancer: composeSchema(setCardModelSchema, setCardStylingSchema),
},
{
id: 'imageCard',
title: 'Image Card',
template: ImageCardLayout,
schemaEnhancer: compose(setCardModelSchema, setCardStylingSchema),
schemaEnhancer: composeSchema(setCardModelSchema, setCardStylingSchema),
},
{
id: 'imageOnLeft',
title: 'Image on left',
template: LeftImageCardLayout,
schemaEnhancer: compose(setCardModelSchema, setCardStylingSchema),
schemaEnhancer: composeSchema(setCardModelSchema, setCardStylingSchema),
},
{
id: 'imageOnRight',
title: 'Image on right',
template: RightImageCardLayout,
schemaEnhancer: compose(setCardModelSchema, setCardStylingSchema),
schemaEnhancer: composeSchema(setCardModelSchema, setCardStylingSchema),
},
{
id: 'item',
isDefault: true,
title: 'Listing Item',
template: DefaultItemLayout,
schemaEnhancer: compose(
schemaEnhancer: composeSchema(
setItemModelSchema,
setCardStylingSchema,
DefaultItemLayout.schemaEnhancer,
Expand All @@ -106,7 +129,7 @@ const applyConfig = (config) => {
isDefault: false,
title: 'Search Item',
template: SearchItemLayout,
schemaEnhancer: compose(
schemaEnhancer: composeSchema(
setCardStylingSchema,
SearchItemLayout.schemaEnhancer,
),
Expand Down
3 changes: 2 additions & 1 deletion src/blocks/Listing/layout-templates/Carousel.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ const CardsCarousel = ({ block, items, ...rest }) => {
);
};

CardsCarousel.schemaEnhancer = ({ schema }) => {
CardsCarousel.schemaEnhancer = (args) => {
const { schema } = args;
// const schema = UniversalCard.schemaEnhancer(args);

schema.fieldsets.splice(1, 0, {
Expand Down
16 changes: 11 additions & 5 deletions src/blocks/Listing/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ const ALIGN_INFO_MAP = {
align_center: [alignCenterSVG, 'Center'],
};

export const setBasicStylingSchema = ({ schema, intl }) => {
export const setBasicStylingSchema = (args) => {
const { schema, intl } = args;
console.log('setBasicStylingSchema', args);
schema.properties.styles.schema = {
fieldsets: [
{
Expand Down Expand Up @@ -52,10 +54,10 @@ const CallToActionSchema = ({ formData }) => {
id: 'default',
fields: [
'enable',
...(formData.itemModel?.callToAction?.enable
...(formData?.itemModel?.callToAction?.enable
? [
'label',
formData['@type'] === 'listing' ? 'urlTemplate' : 'href',
formData?.['@type'] === 'listing' ? 'urlTemplate' : 'href',
]
: []),
], //
Expand Down Expand Up @@ -89,7 +91,9 @@ const CallToActionSchema = ({ formData }) => {
};
};

export const setCardModelSchema = ({ formData, schema }) => {
export const setCardModelSchema = (args) => {
const { formData, schema } = args;
console.log('setCardModelSchema', args);
const CardSchema = {
fieldsets: [
{
Expand Down Expand Up @@ -148,7 +152,9 @@ export const setCardModelSchema = ({ formData, schema }) => {
return schema;
};

export const setItemModelSchema = ({ formData, schema }) => {
export const setItemModelSchema = (args) => {
const { formData, schema } = args;
console.log('setItemModelSchema', args);
const ItemSchema = {
fieldsets: [
{
Expand Down
4 changes: 3 additions & 1 deletion src/blocks/Teaser/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { compose } from 'redux';
import { addStyling } from '@plone/volto/helpers';

import TeaserCardTemplate from './Card';
import { adjustTeaserSchema } from './schema';
Expand All @@ -13,9 +14,10 @@ export default (config) => {
title: 'Card (top image)',
template: TeaserCardTemplate,
schemaEnhancer: compose(
addStyling,
adjustTeaserSchema,
setCardModelSchema,
setCardStylingSchema,
setCardModelSchema,
),
},
// ...(config.blocks.blocksConfig.teaser.variations || []),
Expand Down
1 change: 1 addition & 0 deletions src/components/UniversalCard/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const messages = defineMessages({
});

export default function universalCardSchemaEnhancer(args) {
console.log('universalCardSchemaEnhancer', args);
const props = { ...args };
const { schema } = props;

Expand Down
21 changes: 0 additions & 21 deletions src/components/UniversalItem/UniversalItem.jsx

This file was deleted.

56 changes: 0 additions & 56 deletions src/components/UniversalItem/schema.js

This file was deleted.

12 changes: 12 additions & 0 deletions src/schema-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,15 @@ export const getVoltoStyles = (props) => {
}
return output;
};

export function composeSchema() {
const enhancers = Array.from(arguments);
const composer = (args) => {
const props = enhancers.reduce(
(acc, enhancer) => (enhancer ? { ...acc, schema: enhancer(acc) } : acc),
{ ...args },
);
return props.schema;
};
return composer;
}

0 comments on commit 2b7b3c7

Please sign in to comment.