@blaze-cms/react-page-builder 0.141.0 → 0.142.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/components/DateTime/DateTime.js +37 -0
  3. package/lib/components/DateTime/DateTime.js.map +1 -0
  4. package/lib/components/DateTime/index.js +11 -0
  5. package/lib/components/DateTime/index.js.map +1 -0
  6. package/lib/components/index.js +5 -0
  7. package/lib/components/index.js.map +1 -1
  8. package/lib/hooks/helpers/buildPBComponents.js +12 -12
  9. package/lib/hooks/helpers/buildPBComponents.js.map +1 -1
  10. package/lib/hooks/helpers/get-components-to-insert-by-type.js +35 -0
  11. package/lib/hooks/helpers/get-components-to-insert-by-type.js.map +1 -0
  12. package/lib/hooks/helpers/inject-element-components.js +70 -0
  13. package/lib/hooks/helpers/inject-element-components.js.map +1 -0
  14. package/lib/hooks/helpers/inject-textblock-banners.js +4 -2
  15. package/lib/hooks/helpers/inject-textblock-banners.js.map +1 -1
  16. package/lib-es/components/DateTime/DateTime.js +30 -0
  17. package/lib-es/components/DateTime/DateTime.js.map +1 -0
  18. package/lib-es/components/DateTime/index.js +3 -0
  19. package/lib-es/components/DateTime/index.js.map +1 -0
  20. package/lib-es/components/index.js +1 -0
  21. package/lib-es/components/index.js.map +1 -1
  22. package/lib-es/hooks/helpers/buildPBComponents.js +6 -6
  23. package/lib-es/hooks/helpers/buildPBComponents.js.map +1 -1
  24. package/lib-es/hooks/helpers/get-components-to-insert-by-type.js +27 -0
  25. package/lib-es/hooks/helpers/get-components-to-insert-by-type.js.map +1 -0
  26. package/lib-es/hooks/helpers/inject-element-components.js +59 -0
  27. package/lib-es/hooks/helpers/inject-element-components.js.map +1 -0
  28. package/lib-es/hooks/helpers/inject-textblock-banners.js +4 -2
  29. package/lib-es/hooks/helpers/inject-textblock-banners.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/components/DateTime/DateTime.js +34 -0
  32. package/src/components/DateTime/index.js +3 -0
  33. package/src/components/index.js +1 -0
  34. package/src/hooks/helpers/buildPBComponents.js +13 -6
  35. package/src/hooks/helpers/get-components-to-insert-by-type.js +34 -0
  36. package/src/hooks/helpers/inject-element-components.js +56 -0
  37. package/src/hooks/helpers/inject-textblock-banners.js +3 -2
  38. package/tests/unit/src/components/DateTime/DateTime.test.js +105 -0
  39. package/tests/unit/src/components/__snapshots__/index.test.js.snap +4 -0
  40. package/tests/unit/src/hooks/helpers/{get-banners-by-type.test.js → get-components-to-insert-by-type.test.js} +5 -5
  41. package/tests/unit/src/hooks/helpers/{inject-element-banners.test.js → inject-element-components.test.js} +34 -17
  42. package/tests/unit/src/hooks/helpers/inject-textblock-banners.test.js +2 -1
  43. package/lib/hooks/helpers/get-banners-by-type.js +0 -38
  44. package/lib/hooks/helpers/get-banners-by-type.js.map +0 -1
  45. package/lib/hooks/helpers/inject-element-banners.js +0 -65
  46. package/lib/hooks/helpers/inject-element-banners.js.map +0 -1
  47. package/lib-es/hooks/helpers/get-banners-by-type.js +0 -27
  48. package/lib-es/hooks/helpers/get-banners-by-type.js.map +0 -1
  49. package/lib-es/hooks/helpers/inject-element-banners.js +0 -55
  50. package/lib-es/hooks/helpers/inject-element-banners.js.map +0 -1
  51. package/src/hooks/helpers/get-banners-by-type.js +0 -27
  52. package/src/hooks/helpers/inject-element-banners.js +0 -47
@@ -1 +1 @@
1
- {"version":3,"file":"buildPBComponents.js","names":["React","cloneDeep","GlobalLightbox","RenderComponent","getBannersByType","injectElementBanners","StoreImages","getLightboxImages","insertBanners","checkBannerInsertionSet","getBannerIndex","ELEMENT","PB_TYPE_TEXTBLOCK","renderChildComponents","options","items","length","BuildPBComponents","components","rootLevel","isArray","Array","metaTitle","lightboxImages","toggleModal","open","selectedImage","setSelectedImage","parent","name","parentName","resetImages","addImages","concat","setHandlers","imageProps","handleSelectedImage","images","map","image","_objectSpread","createElement","Fragment","onClose","component","hasElementBanners","banners","hasTextBlockBanners","textBlockBanners","updatedChildren","filter","settings","insertionType","bannerToInject","bannerIndex","hasComponentItems","childComponents","siblings","key","id"],"sources":["../../../src/hooks/helpers/buildPBComponents.js"],"sourcesContent":["import React from 'react';\nimport cloneDeep from 'lodash.clonedeep';\nimport GlobalLightbox from '../../components/Image/GlobalLightbox';\nimport RenderComponent from './RenderComponent';\nimport getBannersByType from './get-banners-by-type';\nimport injectElementBanners from './inject-element-banners';\nimport StoreImages from './StoreImages';\nimport getLightboxImages from './get-lightbox-images';\nimport insertBanners from './insert-banners';\nimport checkBannerInsertionSet from './check-banner-insertion-set';\nimport getBannerIndex from './get-banner-index';\nimport { ELEMENT } from '../../constants';\nimport { PB_TYPE_TEXTBLOCK } from './constants';\n\nfunction renderChildComponents(options, items = []) {\n return items && items.length ? BuildPBComponents(items, options) : [];\n}\n\nfunction BuildPBComponents(components, options = {}, rootLevel = false) {\n const isArray = Array.isArray(components);\n if (!isArray) return [];\n\n const {\n metaTitle,\n lightboxImages = [],\n toggleModal,\n open,\n selectedImage,\n setSelectedImage,\n parent,\n name: parentName\n } = options;\n\n if (rootLevel && !open) StoreImages.resetImages();\n\n StoreImages.addImages(getLightboxImages(components).concat(lightboxImages), options);\n StoreImages.setHandlers({ toggleModal, setSelectedImage });\n\n const imageProps = {\n toggleModal: StoreImages.toggleModal,\n handleSelectedImage: StoreImages.handleSelectedImage\n };\n\n const images = StoreImages.images.map(image => ({ ...image, ...imageProps }));\n\n return (\n <>\n {open && (\n <GlobalLightbox\n images={images}\n onClose={StoreImages.toggleModal}\n selectedImage={selectedImage}\n metaTitle={metaTitle}\n parentName={parentName}\n parent={parent}\n />\n )}\n {components.map(component => {\n const { items = [] } = component;\n const [hasElementBanners, banners] = getBannersByType(items, ELEMENT);\n const [hasTextBlockBanners, textBlockBanners] = getBannersByType(items, PB_TYPE_TEXTBLOCK);\n let updatedChildren =\n items &&\n cloneDeep(items).filter(\n ({ settings: { insertionType } = {} }) => insertionType !== PB_TYPE_TEXTBLOCK\n );\n\n if (hasElementBanners) {\n updatedChildren = injectElementBanners(banners, updatedChildren);\n } else {\n // TODO: this block is for banner retrocompatibility, once completly migrated remove it as well as all related helpers\n const bannerToInject = checkBannerInsertionSet(updatedChildren);\n const bannerIndex = getBannerIndex(updatedChildren, bannerToInject);\n const hasComponentItems = !!(updatedChildren && updatedChildren.length);\n\n if (hasComponentItems && bannerIndex > -1) {\n updatedChildren = insertBanners(updatedChildren, bannerIndex, bannerToInject);\n }\n }\n\n const childComponents = renderChildComponents(options, updatedChildren);\n\n return (\n <RenderComponent\n component={component}\n siblings={updatedChildren}\n childComponents={childComponents}\n imageProps={imageProps}\n options={{ ...options }}\n images={images}\n key={`${component.id}`}\n hasTextBlockBanners={hasTextBlockBanners}\n textBlockBanners={textBlockBanners}\n />\n );\n })}\n </>\n );\n}\n\nexport default BuildPBComponents;\n"],"mappings":"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"}
1
+ {"version":3,"file":"buildPBComponents.js","names":["React","cloneDeep","GlobalLightbox","RenderComponent","getComponentsToInsertByType","injectElementComponents","StoreImages","getLightboxImages","insertBanners","checkBannerInsertionSet","getBannerIndex","ELEMENT","PB_TYPE_TEXTBLOCK","renderChildComponents","options","items","length","BuildPBComponents","components","rootLevel","isArray","Array","metaTitle","lightboxImages","toggleModal","open","selectedImage","setSelectedImage","parent","name","parentName","resetImages","addImages","concat","setHandlers","imageProps","handleSelectedImage","images","map","image","_objectSpread","createElement","Fragment","onClose","component","hasElementInsertionComponents","elementInsertionComponents","hasTextBlockBanners","textBlockBanners","updatedChildren","filter","settings","insertionType","bannerToInject","bannerIndex","hasComponentItems","childComponents","siblings","key","id"],"sources":["../../../src/hooks/helpers/buildPBComponents.js"],"sourcesContent":["import React from 'react';\nimport cloneDeep from 'lodash.clonedeep';\nimport GlobalLightbox from '../../components/Image/GlobalLightbox';\nimport RenderComponent from './RenderComponent';\nimport getComponentsToInsertByType from './get-components-to-insert-by-type';\nimport injectElementComponents from './inject-element-components';\nimport StoreImages from './StoreImages';\nimport getLightboxImages from './get-lightbox-images';\nimport insertBanners from './insert-banners';\nimport checkBannerInsertionSet from './check-banner-insertion-set';\nimport getBannerIndex from './get-banner-index';\nimport { ELEMENT } from '../../constants';\nimport { PB_TYPE_TEXTBLOCK } from './constants';\n\nfunction renderChildComponents(options, items = []) {\n return items && items.length ? BuildPBComponents(items, options) : [];\n}\n\nfunction BuildPBComponents(components, options = {}, rootLevel = false) {\n const isArray = Array.isArray(components);\n if (!isArray) return [];\n\n const {\n metaTitle,\n lightboxImages = [],\n toggleModal,\n open,\n selectedImage,\n setSelectedImage,\n parent,\n name: parentName\n } = options;\n\n if (rootLevel && !open) StoreImages.resetImages();\n\n StoreImages.addImages(getLightboxImages(components).concat(lightboxImages), options);\n StoreImages.setHandlers({ toggleModal, setSelectedImage });\n\n const imageProps = {\n toggleModal: StoreImages.toggleModal,\n handleSelectedImage: StoreImages.handleSelectedImage\n };\n\n const images = StoreImages.images.map(image => ({ ...image, ...imageProps }));\n\n return (\n <>\n {open && (\n <GlobalLightbox\n images={images}\n onClose={StoreImages.toggleModal}\n selectedImage={selectedImage}\n metaTitle={metaTitle}\n parentName={parentName}\n parent={parent}\n />\n )}\n {components.map(component => {\n const { items = [] } = component;\n const [\n hasElementInsertionComponents,\n elementInsertionComponents\n ] = getComponentsToInsertByType(items, ELEMENT);\n\n const [hasTextBlockBanners, textBlockBanners] = getComponentsToInsertByType(\n items,\n PB_TYPE_TEXTBLOCK\n );\n let updatedChildren =\n items &&\n cloneDeep(items).filter(\n ({ settings: { insertionType } = {} }) => insertionType !== PB_TYPE_TEXTBLOCK\n );\n\n if (hasElementInsertionComponents) {\n updatedChildren = injectElementComponents(elementInsertionComponents, updatedChildren);\n } else {\n // TODO: this block is for banner retrocompatibility, once completly migrated remove it as well as all related helpers\n const bannerToInject = checkBannerInsertionSet(updatedChildren);\n const bannerIndex = getBannerIndex(updatedChildren, bannerToInject);\n const hasComponentItems = !!(updatedChildren && updatedChildren.length);\n\n if (hasComponentItems && bannerIndex > -1) {\n updatedChildren = insertBanners(updatedChildren, bannerIndex, bannerToInject);\n }\n }\n\n const childComponents = renderChildComponents(options, updatedChildren);\n\n return (\n <RenderComponent\n component={component}\n siblings={updatedChildren}\n childComponents={childComponents}\n imageProps={imageProps}\n options={{ ...options }}\n images={images}\n key={`${component.id}`}\n hasTextBlockBanners={hasTextBlockBanners}\n textBlockBanners={textBlockBanners}\n />\n );\n })}\n </>\n );\n}\n\nexport default BuildPBComponents;\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { PB_TYPE_TEXTBLOCK } from './constants';
2
+ import { ELEMENT } from '../../constants';
3
+ const getComponentsToInsertByType = (items, insertionType) => {
4
+ if (!items || !items.length) return [false, []];
5
+ if (insertionType === ELEMENT) {
6
+ const componentsToInject = items.filter(({
7
+ settings: {
8
+ insertionType: insertionTypeSetting,
9
+ startingPoint,
10
+ repeatEvery,
11
+ maxRepetitions
12
+ }
13
+ }) => insertionTypeSetting === insertionType && startingPoint !== 0 && repeatEvery !== 0 && maxRepetitions !== 0);
14
+ return [!!componentsToInject.length, componentsToInject];
15
+ }
16
+ if (insertionType === PB_TYPE_TEXTBLOCK) {
17
+ const textBlockBanners = items.filter(({
18
+ settings: {
19
+ insertionType: insertionTypeSetting
20
+ }
21
+ }) => insertionTypeSetting === PB_TYPE_TEXTBLOCK);
22
+ return [!!textBlockBanners.length, textBlockBanners];
23
+ }
24
+ return [false, []];
25
+ };
26
+ export default getComponentsToInsertByType;
27
+ //# sourceMappingURL=get-components-to-insert-by-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-components-to-insert-by-type.js","names":["PB_TYPE_TEXTBLOCK","ELEMENT","getComponentsToInsertByType","items","insertionType","length","componentsToInject","filter","settings","insertionTypeSetting","startingPoint","repeatEvery","maxRepetitions","textBlockBanners"],"sources":["../../../src/hooks/helpers/get-components-to-insert-by-type.js"],"sourcesContent":["import { PB_TYPE_TEXTBLOCK } from './constants';\nimport { ELEMENT } from '../../constants';\n\nconst getComponentsToInsertByType = (items, insertionType) => {\n if (!items || !items.length) return [false, []];\n\n if (insertionType === ELEMENT) {\n const componentsToInject = items.filter(\n ({\n settings: {\n insertionType: insertionTypeSetting,\n startingPoint,\n repeatEvery,\n maxRepetitions\n }\n }) =>\n insertionTypeSetting === insertionType &&\n (startingPoint !== 0 && repeatEvery !== 0 && maxRepetitions !== 0)\n );\n return [!!componentsToInject.length, componentsToInject];\n }\n if (insertionType === PB_TYPE_TEXTBLOCK) {\n const textBlockBanners = items.filter(\n ({ settings: { insertionType: insertionTypeSetting } }) =>\n insertionTypeSetting === PB_TYPE_TEXTBLOCK\n );\n\n return [!!textBlockBanners.length, textBlockBanners];\n }\n\n return [false, []];\n};\n\nexport default getComponentsToInsertByType;\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,aAAa;AAC/C,SAASC,OAAO,QAAQ,iBAAiB;AAEzC,MAAMC,2BAA2B,GAAGA,CAACC,KAAK,EAAEC,aAAa,KAAK;EAC5D,IAAI,CAACD,KAAK,IAAI,CAACA,KAAK,CAACE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EAE/C,IAAID,aAAa,KAAKH,OAAO,EAAE;IAC7B,MAAMK,kBAAkB,GAAGH,KAAK,CAACI,MAAM,CACrC,CAAC;MACCC,QAAQ,EAAE;QACRJ,aAAa,EAAEK,oBAAoB;QACnCC,aAAa;QACbC,WAAW;QACXC;MACF;IACF,CAAC,KACCH,oBAAoB,KAAKL,aAAa,IACrCM,aAAa,KAAK,CAAC,IAAIC,WAAW,KAAK,CAAC,IAAIC,cAAc,KAAK,CACpE,CAAC;IACD,OAAO,CAAC,CAAC,CAACN,kBAAkB,CAACD,MAAM,EAAEC,kBAAkB,CAAC;EAC1D;EACA,IAAIF,aAAa,KAAKJ,iBAAiB,EAAE;IACvC,MAAMa,gBAAgB,GAAGV,KAAK,CAACI,MAAM,CACnC,CAAC;MAAEC,QAAQ,EAAE;QAAEJ,aAAa,EAAEK;MAAqB;IAAE,CAAC,KACpDA,oBAAoB,KAAKT,iBAC7B,CAAC;IAED,OAAO,CAAC,CAAC,CAACa,gBAAgB,CAACR,MAAM,EAAEQ,gBAAgB,CAAC;EACtD;EAEA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACpB,CAAC;AAED,eAAeX,2BAA2B"}
@@ -0,0 +1,59 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import updateTargetings from './update-targetings';
5
+ import { IMAGE } from '../../constants';
6
+ import { PB_TYPE_BANNER } from './constants';
7
+ const checkCollision = (typeToCheck, currentType) => {
8
+ if (currentType === IMAGE) return true;
9
+ return typeToCheck === IMAGE;
10
+ };
11
+ const injectElementComponents = (componentsToInject, children) => {
12
+ if (!componentsToInject.length) return children;
13
+ const updatedChildren = [];
14
+ componentsToInject.forEach(componentToInject => {
15
+ const {
16
+ type: componentsToInjectType,
17
+ settings: {
18
+ repeatEvery,
19
+ startingPoint,
20
+ maxRepetitions
21
+ }
22
+ } = componentToInject;
23
+ let repetitionTotal = 0;
24
+ let currentPosition = startingPoint;
25
+ children.forEach((child, i) => {
26
+ const isComponentMatch = componentToInject.name !== child.name;
27
+ const {
28
+ type
29
+ } = child;
30
+ const {
31
+ type: previousComponentType
32
+ } = children[i - 1] || {};
33
+ const {
34
+ type: nextComponentType
35
+ } = children[i + 1] || {};
36
+ const collidedBefore = checkCollision(previousComponentType, type);
37
+ const collidedAfter = checkCollision(nextComponentType, type);
38
+ if (collidedBefore || i === 0 && collidedAfter) {
39
+ if (currentPosition <= i) currentPosition += 1;
40
+ if (isComponentMatch) updatedChildren.push(child);
41
+ return;
42
+ }
43
+ const hasReachedMax = maxRepetitions && repetitionTotal >= maxRepetitions;
44
+ if (!hasReachedMax && i === currentPosition) {
45
+ const updatedComponentToInject = repeatEvery && componentsToInjectType === PB_TYPE_BANNER ? updateTargetings(componentToInject, repetitionTotal) : componentToInject;
46
+ const updatedSettings = _objectSpread({}, updatedComponentToInject.settings);
47
+ updatedChildren.push(_objectSpread(_objectSpread({}, updatedComponentToInject), {}, {
48
+ settings: updatedSettings
49
+ }));
50
+ repetitionTotal += 1;
51
+ currentPosition += repeatEvery;
52
+ }
53
+ if (isComponentMatch) updatedChildren.push(child);
54
+ });
55
+ });
56
+ return updatedChildren;
57
+ };
58
+ export default injectElementComponents;
59
+ //# sourceMappingURL=inject-element-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-element-components.js","names":["updateTargetings","IMAGE","PB_TYPE_BANNER","checkCollision","typeToCheck","currentType","injectElementComponents","componentsToInject","children","length","updatedChildren","forEach","componentToInject","type","componentsToInjectType","settings","repeatEvery","startingPoint","maxRepetitions","repetitionTotal","currentPosition","child","i","isComponentMatch","name","previousComponentType","nextComponentType","collidedBefore","collidedAfter","push","hasReachedMax","updatedComponentToInject","updatedSettings","_objectSpread"],"sources":["../../../src/hooks/helpers/inject-element-components.js"],"sourcesContent":["import updateTargetings from './update-targetings';\nimport { IMAGE } from '../../constants';\nimport { PB_TYPE_BANNER } from './constants';\n\nconst checkCollision = (typeToCheck, currentType) => {\n if (currentType === IMAGE) return true;\n return typeToCheck === IMAGE;\n};\n\nconst injectElementComponents = (componentsToInject, children) => {\n if (!componentsToInject.length) return children;\n const updatedChildren = [];\n\n componentsToInject.forEach(componentToInject => {\n const {\n type: componentsToInjectType,\n settings: { repeatEvery, startingPoint, maxRepetitions }\n } = componentToInject;\n\n let repetitionTotal = 0;\n let currentPosition = startingPoint;\n\n children.forEach((child, i) => {\n const isComponentMatch = componentToInject.name !== child.name;\n const { type } = child;\n const { type: previousComponentType } = children[i - 1] || {};\n const { type: nextComponentType } = children[i + 1] || {};\n const collidedBefore = checkCollision(previousComponentType, type);\n const collidedAfter = checkCollision(nextComponentType, type);\n\n if (collidedBefore || (i === 0 && collidedAfter)) {\n if (currentPosition <= i) currentPosition += 1;\n if (isComponentMatch) updatedChildren.push(child);\n return;\n }\n\n const hasReachedMax = maxRepetitions && repetitionTotal >= maxRepetitions;\n if (!hasReachedMax && i === currentPosition) {\n const updatedComponentToInject =\n repeatEvery && componentsToInjectType === PB_TYPE_BANNER\n ? updateTargetings(componentToInject, repetitionTotal)\n : componentToInject;\n const updatedSettings = { ...updatedComponentToInject.settings };\n updatedChildren.push({ ...updatedComponentToInject, settings: updatedSettings });\n repetitionTotal += 1;\n currentPosition += repeatEvery;\n }\n\n if (isComponentMatch) updatedChildren.push(child);\n });\n });\n\n return updatedChildren;\n};\n\nexport default injectElementComponents;\n"],"mappings":";;;AAAA,OAAOA,gBAAgB,MAAM,qBAAqB;AAClD,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,cAAc,QAAQ,aAAa;AAE5C,MAAMC,cAAc,GAAGA,CAACC,WAAW,EAAEC,WAAW,KAAK;EACnD,IAAIA,WAAW,KAAKJ,KAAK,EAAE,OAAO,IAAI;EACtC,OAAOG,WAAW,KAAKH,KAAK;AAC9B,CAAC;AAED,MAAMK,uBAAuB,GAAGA,CAACC,kBAAkB,EAAEC,QAAQ,KAAK;EAChE,IAAI,CAACD,kBAAkB,CAACE,MAAM,EAAE,OAAOD,QAAQ;EAC/C,MAAME,eAAe,GAAG,EAAE;EAE1BH,kBAAkB,CAACI,OAAO,CAACC,iBAAiB,IAAI;IAC9C,MAAM;MACJC,IAAI,EAAEC,sBAAsB;MAC5BC,QAAQ,EAAE;QAAEC,WAAW;QAAEC,aAAa;QAAEC;MAAe;IACzD,CAAC,GAAGN,iBAAiB;IAErB,IAAIO,eAAe,GAAG,CAAC;IACvB,IAAIC,eAAe,GAAGH,aAAa;IAEnCT,QAAQ,CAACG,OAAO,CAAC,CAACU,KAAK,EAAEC,CAAC,KAAK;MAC7B,MAAMC,gBAAgB,GAAGX,iBAAiB,CAACY,IAAI,KAAKH,KAAK,CAACG,IAAI;MAC9D,MAAM;QAAEX;MAAK,CAAC,GAAGQ,KAAK;MACtB,MAAM;QAAER,IAAI,EAAEY;MAAsB,CAAC,GAAGjB,QAAQ,CAACc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;MAC7D,MAAM;QAAET,IAAI,EAAEa;MAAkB,CAAC,GAAGlB,QAAQ,CAACc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;MACzD,MAAMK,cAAc,GAAGxB,cAAc,CAACsB,qBAAqB,EAAEZ,IAAI,CAAC;MAClE,MAAMe,aAAa,GAAGzB,cAAc,CAACuB,iBAAiB,EAAEb,IAAI,CAAC;MAE7D,IAAIc,cAAc,IAAKL,CAAC,KAAK,CAAC,IAAIM,aAAc,EAAE;QAChD,IAAIR,eAAe,IAAIE,CAAC,EAAEF,eAAe,IAAI,CAAC;QAC9C,IAAIG,gBAAgB,EAAEb,eAAe,CAACmB,IAAI,CAACR,KAAK,CAAC;QACjD;MACF;MAEA,MAAMS,aAAa,GAAGZ,cAAc,IAAIC,eAAe,IAAID,cAAc;MACzE,IAAI,CAACY,aAAa,IAAIR,CAAC,KAAKF,eAAe,EAAE;QAC3C,MAAMW,wBAAwB,GAC5Bf,WAAW,IAAIF,sBAAsB,KAAKZ,cAAc,GACpDF,gBAAgB,CAACY,iBAAiB,EAAEO,eAAe,CAAC,GACpDP,iBAAiB;QACvB,MAAMoB,eAAe,GAAAC,aAAA,KAAQF,wBAAwB,CAAChB,QAAQ,CAAE;QAChEL,eAAe,CAACmB,IAAI,CAAAI,aAAA,CAAAA,aAAA,KAAMF,wBAAwB;UAAEhB,QAAQ,EAAEiB;QAAe,EAAE,CAAC;QAChFb,eAAe,IAAI,CAAC;QACpBC,eAAe,IAAIJ,WAAW;MAChC;MAEA,IAAIO,gBAAgB,EAAEb,eAAe,CAACmB,IAAI,CAACR,KAAK,CAAC;IACnD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAOX,eAAe;AACxB,CAAC;AAED,eAAeJ,uBAAuB"}
@@ -7,6 +7,7 @@ import Banner from '../../components/Banner';
7
7
  import { getCollisions, checkIfHasCollided } from './check-collisions';
8
8
  import updateTargetings from './update-targetings';
9
9
  import { ALLOWED_BLOCK_TYPES } from '../../constants';
10
+ import { PB_TYPE_BANNER } from './constants';
10
11
  const checkCanInjectBanner = (maxRepetitions, total) => {
11
12
  if (!maxRepetitions) return true;
12
13
  return total < maxRepetitions;
@@ -44,7 +45,8 @@ const injectTextblockBanners = ({
44
45
  banners.forEach(banner => {
45
46
  const {
46
47
  name,
47
- settings
48
+ settings,
49
+ type: typeToCheck
48
50
  } = banner;
49
51
  const {
50
52
  repeatEvery,
@@ -75,7 +77,7 @@ const injectTextblockBanners = ({
75
77
  bannerCounters[name].insertionPoint += repeatEvery;
76
78
  bannerCounters[name].total += 1;
77
79
  hasBanner = true;
78
- if (repeatEvery) bannerPositionCounter.counter += 1;
80
+ if (repeatEvery && typeToCheck === PB_TYPE_BANNER) bannerPositionCounter.counter += 1;
79
81
  }
80
82
  bannerCounters[name].paragraphCounter += shouldCount ? 1 : 0;
81
83
  });
@@ -1 +1 @@
1
- {"version":3,"file":"inject-textblock-banners.js","names":["React","Banner","getCollisions","checkIfHasCollided","updateTargetings","ALLOWED_BLOCK_TYPES","checkCanInjectBanner","maxRepetitions","total","injectTextblockBanners","componentName","parsedTextBlock","bannerContext","bannerCounters","banners","siblings","pbOptions","bannerPositionCounter","blockTracker","collidedWithPrevious","collidedWithNext","updatedBlock","length","blocksLength","forEach","block","blockIndex","type","props","children","paragraphContent","hasBanner","shouldCount","includes","addBlock","banner","name","settings","repeatEvery","paragraphCounter","insertionPoint","canInsertAfterPreviousBlock","lastBlockType","hasCollided","canInjectBanner","bannerWithTargetings","counter","bannerKey","targetings","updatedBanner","_objectSpread","push","createElement","_extends","key"],"sources":["../../../src/hooks/helpers/inject-textblock-banners.js"],"sourcesContent":["import React from 'react';\nimport Banner from '../../components/Banner';\nimport { getCollisions, checkIfHasCollided } from './check-collisions';\nimport updateTargetings from './update-targetings';\nimport { ALLOWED_BLOCK_TYPES } from '../../constants';\n\nconst checkCanInjectBanner = (maxRepetitions, total) => {\n if (!maxRepetitions) return true;\n return total < maxRepetitions;\n};\n\nconst injectTextblockBanners = ({ componentName, parsedTextBlock, bannerContext }) => {\n const {\n bannerCounters,\n banners,\n siblings,\n pbOptions,\n bannerPositionCounter,\n blockTracker\n } = bannerContext;\n const [collidedWithPrevious, collidedWithNext] = getCollisions(componentName, siblings);\n const updatedBlock = [];\n const { length: blocksLength } = parsedTextBlock;\n\n parsedTextBlock.forEach((block, blockIndex) => {\n const { type, props: { children: paragraphContent } = {} } = block;\n let hasBanner = false;\n const shouldCount = ALLOWED_BLOCK_TYPES.includes(type);\n if (!paragraphContent || typeof type !== 'string') {\n return addBlock(block, blockTracker, updatedBlock);\n }\n\n banners.forEach(banner => {\n const { name, settings } = banner;\n const { repeatEvery, maxRepetitions } = settings;\n\n const { total, paragraphCounter, insertionPoint } = bannerCounters[name];\n const canInsertAfterPreviousBlock =\n !blockTracker.lastBlockType || ALLOWED_BLOCK_TYPES.includes(blockTracker.lastBlockType);\n\n const hasCollided =\n !canInsertAfterPreviousBlock ||\n checkIfHasCollided(blockIndex, blocksLength, collidedWithPrevious, collidedWithNext);\n const canInjectBanner = checkCanInjectBanner(maxRepetitions, total);\n\n if (canInjectBanner && paragraphCounter === insertionPoint) {\n if (hasBanner || hasCollided) {\n bannerCounters[name].insertionPoint += 1;\n bannerCounters[name].paragraphCounter += 1;\n return;\n }\n\n const bannerWithTargetings = repeatEvery\n ? updateTargetings(banner, bannerPositionCounter.counter)\n : banner;\n const bannerKey = `${bannerWithTargetings.settings.targetings}-${paragraphCounter}`;\n const updatedBanner = {\n ...pbOptions,\n ...bannerWithTargetings.settings,\n name\n };\n updatedBlock.push(<Banner key={bannerKey} {...updatedBanner} />);\n bannerCounters[name].insertionPoint += repeatEvery;\n bannerCounters[name].total += 1;\n hasBanner = true;\n if (repeatEvery) bannerPositionCounter.counter += 1;\n }\n\n bannerCounters[name].paragraphCounter += shouldCount ? 1 : 0;\n });\n\n return addBlock(block, blockTracker, updatedBlock);\n });\n\n return updatedBlock;\n};\n\nconst addBlock = (block, blockTracker, updatedBlock) => {\n // eslint-disable-next-line no-param-reassign\n if (block.type) blockTracker.lastBlockType = block.type;\n return updatedBlock.push(block);\n};\n\nexport default injectTextblockBanners;\n"],"mappings":"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"}
1
+ {"version":3,"file":"inject-textblock-banners.js","names":["React","Banner","getCollisions","checkIfHasCollided","updateTargetings","ALLOWED_BLOCK_TYPES","PB_TYPE_BANNER","checkCanInjectBanner","maxRepetitions","total","injectTextblockBanners","componentName","parsedTextBlock","bannerContext","bannerCounters","banners","siblings","pbOptions","bannerPositionCounter","blockTracker","collidedWithPrevious","collidedWithNext","updatedBlock","length","blocksLength","forEach","block","blockIndex","type","props","children","paragraphContent","hasBanner","shouldCount","includes","addBlock","banner","name","settings","typeToCheck","repeatEvery","paragraphCounter","insertionPoint","canInsertAfterPreviousBlock","lastBlockType","hasCollided","canInjectBanner","bannerWithTargetings","counter","bannerKey","targetings","updatedBanner","_objectSpread","push","createElement","_extends","key"],"sources":["../../../src/hooks/helpers/inject-textblock-banners.js"],"sourcesContent":["import React from 'react';\nimport Banner from '../../components/Banner';\nimport { getCollisions, checkIfHasCollided } from './check-collisions';\nimport updateTargetings from './update-targetings';\nimport { ALLOWED_BLOCK_TYPES } from '../../constants';\nimport { PB_TYPE_BANNER } from './constants';\n\nconst checkCanInjectBanner = (maxRepetitions, total) => {\n if (!maxRepetitions) return true;\n return total < maxRepetitions;\n};\n\nconst injectTextblockBanners = ({ componentName, parsedTextBlock, bannerContext }) => {\n const {\n bannerCounters,\n banners,\n siblings,\n pbOptions,\n bannerPositionCounter,\n blockTracker\n } = bannerContext;\n const [collidedWithPrevious, collidedWithNext] = getCollisions(componentName, siblings);\n const updatedBlock = [];\n const { length: blocksLength } = parsedTextBlock;\n\n parsedTextBlock.forEach((block, blockIndex) => {\n const { type, props: { children: paragraphContent } = {} } = block;\n let hasBanner = false;\n const shouldCount = ALLOWED_BLOCK_TYPES.includes(type);\n if (!paragraphContent || typeof type !== 'string') {\n return addBlock(block, blockTracker, updatedBlock);\n }\n\n banners.forEach(banner => {\n const { name, settings, type: typeToCheck } = banner;\n const { repeatEvery, maxRepetitions } = settings;\n\n const { total, paragraphCounter, insertionPoint } = bannerCounters[name];\n const canInsertAfterPreviousBlock =\n !blockTracker.lastBlockType || ALLOWED_BLOCK_TYPES.includes(blockTracker.lastBlockType);\n\n const hasCollided =\n !canInsertAfterPreviousBlock ||\n checkIfHasCollided(blockIndex, blocksLength, collidedWithPrevious, collidedWithNext);\n const canInjectBanner = checkCanInjectBanner(maxRepetitions, total);\n\n if (canInjectBanner && paragraphCounter === insertionPoint) {\n if (hasBanner || hasCollided) {\n bannerCounters[name].insertionPoint += 1;\n bannerCounters[name].paragraphCounter += 1;\n return;\n }\n\n const bannerWithTargetings = repeatEvery\n ? updateTargetings(banner, bannerPositionCounter.counter)\n : banner;\n const bannerKey = `${bannerWithTargetings.settings.targetings}-${paragraphCounter}`;\n const updatedBanner = {\n ...pbOptions,\n ...bannerWithTargetings.settings,\n name\n };\n updatedBlock.push(<Banner key={bannerKey} {...updatedBanner} />);\n bannerCounters[name].insertionPoint += repeatEvery;\n bannerCounters[name].total += 1;\n hasBanner = true;\n if (repeatEvery && typeToCheck === PB_TYPE_BANNER) bannerPositionCounter.counter += 1;\n }\n\n bannerCounters[name].paragraphCounter += shouldCount ? 1 : 0;\n });\n\n return addBlock(block, blockTracker, updatedBlock);\n });\n\n return updatedBlock;\n};\n\nconst addBlock = (block, blockTracker, updatedBlock) => {\n // eslint-disable-next-line no-param-reassign\n if (block.type) blockTracker.lastBlockType = block.type;\n return updatedBlock.push(block);\n};\n\nexport default injectTextblockBanners;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.141.0",
3
+ "version": "0.142.0-alpha.0",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -89,5 +89,5 @@
89
89
  "lib/*",
90
90
  "lib-es/*"
91
91
  ],
92
- "gitHead": "2a61d1506ef11a21af4d65d1eaf065b9fbdb9e23"
92
+ "gitHead": "a8c8a5250ea81ce37cbb8864089c2cc157586135"
93
93
  }
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import dayjs from 'dayjs';
4
+ import LocalizedFormat from 'dayjs/plugin/localizedFormat';
5
+ import Wrapper from '../Wrapper';
6
+
7
+ dayjs.extend(LocalizedFormat);
8
+
9
+ const DateTime = ({ format, customFormat, modifier }) => {
10
+ const dateFormat = customFormat ? customFormat.toUpperCase() : format;
11
+
12
+ if (!dateFormat) return null;
13
+
14
+ const formatedDate = dayjs().format(dateFormat);
15
+
16
+ return (
17
+ <Wrapper className="date" modifiers={modifier}>
18
+ {formatedDate}
19
+ </Wrapper>
20
+ );
21
+ };
22
+
23
+ DateTime.propTypes = {
24
+ format: PropTypes.string.isRequired,
25
+ customFormat: PropTypes.string,
26
+ modifier: PropTypes.string
27
+ };
28
+
29
+ DateTime.defaultProps = {
30
+ modifier: null,
31
+ customFormat: ''
32
+ };
33
+
34
+ export default DateTime;
@@ -0,0 +1,3 @@
1
+ import DateTime from './DateTime';
2
+
3
+ export default DateTime;
@@ -27,6 +27,7 @@ export default {
27
27
  import(/* webpackChunkName: "blazePbSearchFilteSort" */ './SearchFilterSort')
28
28
  ),
29
29
  modal: dynamic(() => import(/* webpackChunkName: "blazePbModal" */ './Modal')),
30
+ datetime: dynamic(() => import(/* webpackChunkName: "blazePbDateTime" */ './DateTime')),
30
31
  code: dynamic(() => import(/* webpackChunkName: "blazePbCode" */ './Code')),
31
32
  menu: dynamic(() => import(/* webpackChunkName: "blazePbMenu" */ './Menu')),
32
33
  menuitem: dynamic(() => import(/* webpackChunkName: "blazePbMenuItem" */ './MenuItem')),
@@ -2,8 +2,8 @@ import React from 'react';
2
2
  import cloneDeep from 'lodash.clonedeep';
3
3
  import GlobalLightbox from '../../components/Image/GlobalLightbox';
4
4
  import RenderComponent from './RenderComponent';
5
- import getBannersByType from './get-banners-by-type';
6
- import injectElementBanners from './inject-element-banners';
5
+ import getComponentsToInsertByType from './get-components-to-insert-by-type';
6
+ import injectElementComponents from './inject-element-components';
7
7
  import StoreImages from './StoreImages';
8
8
  import getLightboxImages from './get-lightbox-images';
9
9
  import insertBanners from './insert-banners';
@@ -57,16 +57,23 @@ function BuildPBComponents(components, options = {}, rootLevel = false) {
57
57
  )}
58
58
  {components.map(component => {
59
59
  const { items = [] } = component;
60
- const [hasElementBanners, banners] = getBannersByType(items, ELEMENT);
61
- const [hasTextBlockBanners, textBlockBanners] = getBannersByType(items, PB_TYPE_TEXTBLOCK);
60
+ const [
61
+ hasElementInsertionComponents,
62
+ elementInsertionComponents
63
+ ] = getComponentsToInsertByType(items, ELEMENT);
64
+
65
+ const [hasTextBlockBanners, textBlockBanners] = getComponentsToInsertByType(
66
+ items,
67
+ PB_TYPE_TEXTBLOCK
68
+ );
62
69
  let updatedChildren =
63
70
  items &&
64
71
  cloneDeep(items).filter(
65
72
  ({ settings: { insertionType } = {} }) => insertionType !== PB_TYPE_TEXTBLOCK
66
73
  );
67
74
 
68
- if (hasElementBanners) {
69
- updatedChildren = injectElementBanners(banners, updatedChildren);
75
+ if (hasElementInsertionComponents) {
76
+ updatedChildren = injectElementComponents(elementInsertionComponents, updatedChildren);
70
77
  } else {
71
78
  // TODO: this block is for banner retrocompatibility, once completly migrated remove it as well as all related helpers
72
79
  const bannerToInject = checkBannerInsertionSet(updatedChildren);
@@ -0,0 +1,34 @@
1
+ import { PB_TYPE_TEXTBLOCK } from './constants';
2
+ import { ELEMENT } from '../../constants';
3
+
4
+ const getComponentsToInsertByType = (items, insertionType) => {
5
+ if (!items || !items.length) return [false, []];
6
+
7
+ if (insertionType === ELEMENT) {
8
+ const componentsToInject = items.filter(
9
+ ({
10
+ settings: {
11
+ insertionType: insertionTypeSetting,
12
+ startingPoint,
13
+ repeatEvery,
14
+ maxRepetitions
15
+ }
16
+ }) =>
17
+ insertionTypeSetting === insertionType &&
18
+ (startingPoint !== 0 && repeatEvery !== 0 && maxRepetitions !== 0)
19
+ );
20
+ return [!!componentsToInject.length, componentsToInject];
21
+ }
22
+ if (insertionType === PB_TYPE_TEXTBLOCK) {
23
+ const textBlockBanners = items.filter(
24
+ ({ settings: { insertionType: insertionTypeSetting } }) =>
25
+ insertionTypeSetting === PB_TYPE_TEXTBLOCK
26
+ );
27
+
28
+ return [!!textBlockBanners.length, textBlockBanners];
29
+ }
30
+
31
+ return [false, []];
32
+ };
33
+
34
+ export default getComponentsToInsertByType;
@@ -0,0 +1,56 @@
1
+ import updateTargetings from './update-targetings';
2
+ import { IMAGE } from '../../constants';
3
+ import { PB_TYPE_BANNER } from './constants';
4
+
5
+ const checkCollision = (typeToCheck, currentType) => {
6
+ if (currentType === IMAGE) return true;
7
+ return typeToCheck === IMAGE;
8
+ };
9
+
10
+ const injectElementComponents = (componentsToInject, children) => {
11
+ if (!componentsToInject.length) return children;
12
+ const updatedChildren = [];
13
+
14
+ componentsToInject.forEach(componentToInject => {
15
+ const {
16
+ type: componentsToInjectType,
17
+ settings: { repeatEvery, startingPoint, maxRepetitions }
18
+ } = componentToInject;
19
+
20
+ let repetitionTotal = 0;
21
+ let currentPosition = startingPoint;
22
+
23
+ children.forEach((child, i) => {
24
+ const isComponentMatch = componentToInject.name !== child.name;
25
+ const { type } = child;
26
+ const { type: previousComponentType } = children[i - 1] || {};
27
+ const { type: nextComponentType } = children[i + 1] || {};
28
+ const collidedBefore = checkCollision(previousComponentType, type);
29
+ const collidedAfter = checkCollision(nextComponentType, type);
30
+
31
+ if (collidedBefore || (i === 0 && collidedAfter)) {
32
+ if (currentPosition <= i) currentPosition += 1;
33
+ if (isComponentMatch) updatedChildren.push(child);
34
+ return;
35
+ }
36
+
37
+ const hasReachedMax = maxRepetitions && repetitionTotal >= maxRepetitions;
38
+ if (!hasReachedMax && i === currentPosition) {
39
+ const updatedComponentToInject =
40
+ repeatEvery && componentsToInjectType === PB_TYPE_BANNER
41
+ ? updateTargetings(componentToInject, repetitionTotal)
42
+ : componentToInject;
43
+ const updatedSettings = { ...updatedComponentToInject.settings };
44
+ updatedChildren.push({ ...updatedComponentToInject, settings: updatedSettings });
45
+ repetitionTotal += 1;
46
+ currentPosition += repeatEvery;
47
+ }
48
+
49
+ if (isComponentMatch) updatedChildren.push(child);
50
+ });
51
+ });
52
+
53
+ return updatedChildren;
54
+ };
55
+
56
+ export default injectElementComponents;
@@ -3,6 +3,7 @@ import Banner from '../../components/Banner';
3
3
  import { getCollisions, checkIfHasCollided } from './check-collisions';
4
4
  import updateTargetings from './update-targetings';
5
5
  import { ALLOWED_BLOCK_TYPES } from '../../constants';
6
+ import { PB_TYPE_BANNER } from './constants';
6
7
 
7
8
  const checkCanInjectBanner = (maxRepetitions, total) => {
8
9
  if (!maxRepetitions) return true;
@@ -31,7 +32,7 @@ const injectTextblockBanners = ({ componentName, parsedTextBlock, bannerContext
31
32
  }
32
33
 
33
34
  banners.forEach(banner => {
34
- const { name, settings } = banner;
35
+ const { name, settings, type: typeToCheck } = banner;
35
36
  const { repeatEvery, maxRepetitions } = settings;
36
37
 
37
38
  const { total, paragraphCounter, insertionPoint } = bannerCounters[name];
@@ -63,7 +64,7 @@ const injectTextblockBanners = ({ componentName, parsedTextBlock, bannerContext
63
64
  bannerCounters[name].insertionPoint += repeatEvery;
64
65
  bannerCounters[name].total += 1;
65
66
  hasBanner = true;
66
- if (repeatEvery) bannerPositionCounter.counter += 1;
67
+ if (repeatEvery && typeToCheck === PB_TYPE_BANNER) bannerPositionCounter.counter += 1;
67
68
  }
68
69
 
69
70
  bannerCounters[name].paragraphCounter += shouldCount ? 1 : 0;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import React from 'react';
5
+ import { render } from '@testing-library/react';
6
+ import '@testing-library/jest-dom/extend-expect';
7
+ import DateTime from '../../../../../src/components/DateTime';
8
+
9
+ describe('DateTime component', () => {
10
+ it('renders null if both format and customFormat are not provided', () => {
11
+ const { container } = render(<DateTime />);
12
+ expect(container.firstChild).toBeNull();
13
+ });
14
+
15
+ it('renders correctly with LT format', () => {
16
+ const { getByText } = render(<DateTime format="LT" />);
17
+ expect(getByText(/\d{1,2}:\d{2} [AP]M/)).toBeInTheDocument();
18
+ });
19
+
20
+ it('renders correctly with LTS format', () => {
21
+ const { getByText } = render(<DateTime format="LTS" />);
22
+ expect(getByText(/\d{1,2}:\d{2}:\d{2} [AP]M/)).toBeInTheDocument();
23
+ });
24
+
25
+ it('renders correctly with L format', () => {
26
+ const { getByText } = render(<DateTime format="L" />);
27
+ expect(getByText(/\d{2}\/\d{2}\/\d{4}/)).toBeInTheDocument();
28
+ });
29
+
30
+ it('renders correctly with LL format', () => {
31
+ const { getByText } = render(<DateTime format="LL" />);
32
+ expect(
33
+ getByText(
34
+ /(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}/
35
+ )
36
+ ).toBeInTheDocument();
37
+ });
38
+
39
+ it('renders correctly with LLL format', () => {
40
+ const { getByText } = render(<DateTime format="LLL" />);
41
+ expect(
42
+ getByText(
43
+ /(?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4} \d{1,2}:\d{2} [AP]M/
44
+ )
45
+ ).toBeInTheDocument();
46
+ });
47
+
48
+ // sonarignore:start
49
+ it('renders correctly with LLLL format', () => {
50
+ const { getByText } = render(<DateTime format="LLLL" />);
51
+ expect(
52
+ getByText(
53
+ /(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (?:January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4} \d{1,2}:\d{2} [AP]M/
54
+ )
55
+ ).toBeInTheDocument();
56
+ });
57
+ // sonarignore:end
58
+
59
+ it('renders correctly with l format', () => {
60
+ const { getByText } = render(<DateTime format="l" />);
61
+ expect(getByText(/\d{1,2}\/\d{1,2}\/\d{4}/)).toBeInTheDocument();
62
+ });
63
+
64
+ it('renders correctly with ll format', () => {
65
+ const { getByText } = render(<DateTime format="ll" />);
66
+ expect(
67
+ getByText(/(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4}/)
68
+ ).toBeInTheDocument();
69
+ });
70
+
71
+ it('renders correctly with lll format', () => {
72
+ const { getByText } = render(<DateTime format="lll" />);
73
+ expect(
74
+ getByText(
75
+ /(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4} \d{1,2}:\d{2} [AP]M/
76
+ )
77
+ ).toBeInTheDocument();
78
+ });
79
+
80
+ it('renders correctly with llll format', () => {
81
+ const { getByText } = render(<DateTime format="llll" />);
82
+ expect(
83
+ getByText(
84
+ /(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat), (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4} \d{1,2}:\d{2} [AP]M/
85
+ )
86
+ ).toBeInTheDocument();
87
+ });
88
+
89
+ it('renders correctly with customFormat', () => {
90
+ const customFormat = 'YYYY-MM-DD';
91
+ const { getByText } = render(<DateTime format="L" customFormat={customFormat} />);
92
+ expect(getByText(/\d{4}-\d{2}-\d{2}/)).toBeInTheDocument();
93
+ });
94
+
95
+ it('renders correctly with customFormat and modifier', () => {
96
+ const customFormat = 'MM-DD-YYYY';
97
+ const modifier = 'bold';
98
+ const { getByText } = render(
99
+ <DateTime format="L" customFormat={customFormat} modifier={modifier} />
100
+ );
101
+ const dateElement = getByText(/\d{2}-\d{2}-\d{4}/);
102
+ expect(dateElement).toBeInTheDocument();
103
+ expect(dateElement).toHaveClass('bold');
104
+ });
105
+ });
@@ -46,6 +46,10 @@ Object {
46
46
  "$$typeof": Symbol(react.forward_ref),
47
47
  "render": [Function],
48
48
  },
49
+ "datetime": Object {
50
+ "$$typeof": Symbol(react.forward_ref),
51
+ "render": [Function],
52
+ },
49
53
  "emailconfirm": Object {
50
54
  "$$typeof": Symbol(react.forward_ref),
51
55
  "render": [Function],
@@ -1,5 +1,5 @@
1
1
  import '@testing-library/jest-dom/extend-expect';
2
- import getBannersByType from '../../../../../src/hooks/helpers/get-banners-by-type';
2
+ import getComponentsToInsertByType from '../../../../../src/hooks/helpers/get-components-to-insert-by-type';
3
3
 
4
4
  const id = 'ID';
5
5
  const mockBanner = {
@@ -17,21 +17,21 @@ const items = [
17
17
  { type: 'textblock', id, settings: {} }
18
18
  ];
19
19
 
20
- describe('getBannersByType function', () => {
20
+ describe('getComponentsToInsertByType function', () => {
21
21
  it('should return false and empty array when there are no items', () => {
22
- const [noChildren, banner] = getBannersByType();
22
+ const [noChildren, banner] = getComponentsToInsertByType();
23
23
  expect(noChildren).toEqual(false);
24
24
  expect(banner).toEqual([]);
25
25
  });
26
26
 
27
27
  it('should return false and empty array when there is no banner', () => {
28
- const [hasBanner, banner] = getBannersByType(items, 'element');
28
+ const [hasBanner, banner] = getComponentsToInsertByType(items, 'element');
29
29
  expect(hasBanner).toEqual(false);
30
30
  expect(banner).toEqual([]);
31
31
  });
32
32
 
33
33
  it('should return banner element when there is a banner of specified type', () => {
34
- const [hasBanner, banner] = getBannersByType([...items, mockBanner], 'element');
34
+ const [hasBanner, banner] = getComponentsToInsertByType([...items, mockBanner], 'element');
35
35
  expect(hasBanner).toEqual(true);
36
36
  expect(banner).toEqual(banner);
37
37
  });