@blaze-cms/react-page-builder 0.120.0-alpha.0 → 0.120.0-alpha.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Banner/Banner.js"],"names":["React","useContext","MainContext","PropTypes","flatten","useQuery","useRouter","getSingleEntitySchema","Wrapper","BannerRender","buildPropsQuery","getClassModifiers","getEntityRenderProps","Banner","type","otherProps","router","isPreview","asPath","parent","entity","sizeId","propsToDisplay","itemEntity","data","error","loading","variables","id","message","modifiers","queryProps","length","map","propertiesToDisplay","actionKey","action","bannerKey","propTypes","string","defaultProps"],"mappings":";;;AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;AACA,SAASC,WAAT,QAA4B,8BAA5B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,OAAP,MAAoB,gBAApB;AACA,SAASC,QAAT,QAAyB,gBAAzB;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,qBAAT,QAAsC,yBAAtC;AACA,OAAOC,OAAP,MAAoB,YAApB;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,eAAP,MAA4B,iCAA5B;AACA,SAASC,iBAAT,QAAkC,aAAlC;AACA,OAAOC,oBAAP,MAAiC,uCAAjC;;AAEA,MAAMC,MAAM,GAAG,QAA6B;AAAA,MAA5B;AAAEC,IAAAA;AAAF,GAA4B;AAAA,MAAjBC,UAAiB;;AAC1C,QAAMC,MAAM,GAAGV,SAAS,EAAxB;AACA,QAAM;AAAEW,IAAAA;AAAF,MAAgBhB,UAAU,CAACC,WAAD,CAAhC;AACA,QAAM;AAAEgB,IAAAA;AAAF,MAAaF,MAAnB;AACA,QAAM;AAAEG,IAAAA,MAAF;AAAUC,IAAAA,MAAV;AAAkBC,IAAAA,MAAlB;AAA0BC,IAAAA,cAAc,GAAG;AAA3C,MAAkDP,UAAxD;AAEA,QAAM;AAAEQ,IAAAA;AAAF,MAAiBJ,MAAvB;AACA,QAAM;AAAEK,IAAAA,IAAF;AAAQC,IAAAA,KAAR;AAAeC,IAAAA;AAAf,MAA2BrB,QAAQ,CAACE,qBAAD,EAAwB;AAC/DoB,IAAAA,SAAS,EAAE;AAAEC,MAAAA,EAAE,EAAER,MAAM,IAAIG;AAAhB;AADoD,GAAxB,CAAzC;AAIA,MAAIG,OAAJ,EAAa,OAAO,EAAP;AACb,MAAID,KAAJ,EAAW,OAAOA,KAAK,CAACI,OAAb;AACX,MAAI,CAACL,IAAL,EAAW,OAAO,IAAP;AACX,MAAI,CAACH,MAAL,EAAa,OAAO,IAAP;AAEb,QAAMS,SAAS,GAAGnB,iBAAiB,CAAC,QAAD,EAAWI,UAAX,CAAnC;AACA,QAAMgB,UAAU,GAAGrB,eAAe,CAChCc,IADgC,EAEhCF,cAAc,CAACU,MAAf,GACI5B,OAAO,CAACkB,cAAc,CAACW,GAAf,CAAmB,CAAC;AAAEC,IAAAA;AAAF,GAAD,KAA6BA,mBAAhD,CAAD,CADX,GAEI,EAJ4B,CAAlC;AAOA,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA;AAAb,MAAwBxB,oBAAoB,CAACmB,UAAD,EAAaP,IAAb,EAAmBP,SAAnB,CAAlD;AACA,QAAMoB,SAAS,GAAI,GAAEhB,MAAO,GAAEH,MAAO,EAArC;AAEA,sBACE,oBAAC,OAAD;AAAS,IAAA,SAAS,EAAEJ,IAApB;AAA0B,IAAA,SAAS,EAAEgB;AAArC,kBACE,oBAAC,YAAD;AACE,IAAA,GAAG,EAAEO;AADP,KAEMtB,UAFN;AAGE,IAAA,MAAM,EAAEqB,MAHV;AAIE,IAAA,SAAS,EAAED,SAJb;AAKE,IAAA,MAAM,EAAEjB;AALV,KADF,CADF;AAWD,CAtCD;;AAwCAL,MAAM,CAACyB,SAAP,GAAmB;AACjBxB,EAAAA,IAAI,EAAEX,SAAS,CAACoC;AADC,CAAnB;AAIA1B,MAAM,CAAC2B,YAAP,GAAsB;AACpB1B,EAAAA,IAAI,EAAE;AADc,CAAtB;AAIA,eAAeD,MAAf","sourcesContent":["import React, { useContext } from 'react';\nimport { MainContext } from '@blaze-cms/nextjs-components';\nimport PropTypes from 'prop-types';\nimport flatten from 'lodash.flatten';\nimport { useQuery } from '@apollo/client';\nimport { useRouter } from 'next/router';\nimport { getSingleEntitySchema } from '../../application/query';\nimport Wrapper from '../Wrapper';\nimport BannerRender from './BannerRender';\nimport buildPropsQuery from '../../helpers/build-props-query';\nimport { getClassModifiers } from '../../utils';\nimport getEntityRenderProps from '../../helpers/get-entity-render-props';\n\nconst Banner = ({ type, ...otherProps }) => {\n const router = useRouter();\n const { isPreview } = useContext(MainContext);\n const { asPath } = router;\n const { parent, entity, sizeId, propsToDisplay = [] } = otherProps;\n\n const { itemEntity } = parent;\n const { data, error, loading } = useQuery(getSingleEntitySchema, {\n variables: { id: entity || itemEntity }\n });\n\n if (loading) return '';\n if (error) return error.message;\n if (!data) return null;\n if (!sizeId) return null;\n\n const modifiers = getClassModifiers('banner', otherProps);\n const queryProps = buildPropsQuery(\n data,\n propsToDisplay.length\n ? flatten(propsToDisplay.map(({ propertiesToDisplay }) => propertiesToDisplay))\n : []\n );\n\n const { actionKey, action } = getEntityRenderProps(queryProps, data, isPreview);\n const bannerKey = `${sizeId}${asPath}`;\n\n return (\n <Wrapper className={type} modifiers={modifiers}>\n <BannerRender\n key={bannerKey}\n {...otherProps}\n action={action}\n actionKey={actionKey}\n asPath={asPath}\n />\n </Wrapper>\n );\n};\n\nBanner.propTypes = {\n type: PropTypes.string\n};\n\nBanner.defaultProps = {\n type: 'banner'\n};\n\nexport default Banner;\n"],"file":"Banner.js"}
1
+ {"version":3,"sources":["../../../src/components/Banner/Banner.js"],"names":["React","useContext","MainContext","checkIfLoggedIn","PropTypes","flatten","useQuery","useRouter","buildUserQuery","buildPropsData","getSingleEntitySchema","getUser","Wrapper","BannerRender","buildPropsQuery","getClassModifiers","getEntityRenderProps","Banner","type","otherProps","router","isPreview","id","userId","asPath","parent","entity","sizeId","propsToDisplay","userPropsToDisplay","userQuery","itemEntity","data","error","loading","variables","userData","userLoading","skip","length","message","modifiers","queryProps","map","propertiesToDisplay","userPropsData","actionKey","action","bannerKey","propTypes","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { useContext } from 'react';\nimport { MainContext } from '@blaze-cms/nextjs-components';\nimport { checkIfLoggedIn } from '@blaze-cms/core-auth-ui';\nimport PropTypes from 'prop-types';\nimport flatten from 'lodash.flatten';\nimport { useQuery } from '@apollo/client';\nimport { useRouter } from 'next/router';\nimport { buildUserQuery, buildPropsData } from './helpers';\nimport { getSingleEntitySchema, getUser } from '../../application/query';\nimport Wrapper from '../Wrapper';\nimport BannerRender from './BannerRender';\nimport buildPropsQuery from '../../helpers/build-props-query';\nimport { getClassModifiers } from '../../utils';\nimport getEntityRenderProps from '../../helpers/get-entity-render-props';\n\nconst Banner = ({ type, ...otherProps }) => {\n const router = useRouter();\n const { isPreview } = useContext(MainContext);\n const { id: userId } = checkIfLoggedIn();\n const { asPath } = router;\n const { parent, entity, sizeId, propsToDisplay = [], userPropsToDisplay = [] } = otherProps;\n const userQuery = buildUserQuery(userPropsToDisplay);\n const { itemEntity } = parent;\n const { data, error, loading } = useQuery(getSingleEntitySchema, {\n variables: { id: entity || itemEntity }\n });\n const { data: { getUser: userData } = {}, loading: userLoading } = useQuery(getUser(userQuery), {\n variables: { id: userId },\n skip: !userPropsToDisplay.length || !userId\n });\n\n if (loading || userLoading) return '';\n if (error) return error.message;\n if (!data) return null;\n if (!sizeId) return null;\n\n const modifiers = getClassModifiers('banner', otherProps);\n const queryProps = buildPropsQuery(\n data,\n propsToDisplay.length\n ? flatten(propsToDisplay.map(({ propertiesToDisplay }) => propertiesToDisplay))\n : []\n );\n\n const userPropsData = buildPropsData(userData, userPropsToDisplay);\n const { actionKey, action } = getEntityRenderProps(queryProps, data, isPreview);\n const bannerKey = `${sizeId}${asPath}`;\n\n return (\n <Wrapper className={type} modifiers={modifiers}>\n <BannerRender\n key={bannerKey}\n {...otherProps}\n action={action}\n actionKey={actionKey}\n asPath={asPath}\n userPropsData={userPropsData}\n />\n </Wrapper>\n );\n};\n\nBanner.propTypes = {\n type: PropTypes.string\n};\n\nBanner.defaultProps = {\n type: 'banner'\n};\n\nexport default Banner;\n"],"file":"Banner.js"}
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- const _excluded = ["baseAdunit", "adunit", "sizeId", "sizes", "propsToDisplay", "entity", "targetings", "parent", "asPath", "action", "actionKey", "cardBannerIndex"];
3
+ const _excluded = ["baseAdunit", "adunit", "sizeId", "sizes", "propsToDisplay", "entity", "targetings", "parent", "asPath", "action", "actionKey", "cardBannerIndex", "userPropsData"];
4
4
 
5
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
6
 
@@ -28,7 +28,8 @@ const BannerRender = _ref => {
28
28
  asPath,
29
29
  action,
30
30
  actionKey,
31
- cardBannerIndex
31
+ cardBannerIndex,
32
+ userPropsData
32
33
  } = _ref,
33
34
  otherProps = _objectWithoutProperties(_ref, _excluded);
34
35
 
@@ -86,7 +87,7 @@ const BannerRender = _ref => {
86
87
  const shouldShowBanner = parsedAdunit && parsedSizes && !!parsedSizes.length && isContextualTargetingReady;
87
88
  const customTargetings = setCustomTargetings(targetings, cardBannerIndex);
88
89
 
89
- const targetingArguments = _objectSpread(_objectSpread({}, parsedTargetings), customTargetings);
90
+ const targetingArguments = _objectSpread(_objectSpread(_objectSpread({}, parsedTargetings), customTargetings), userPropsData);
90
91
 
91
92
  return /*#__PURE__*/React.createElement(AdSlotRender, {
92
93
  shouldShowBanner: !!shouldShowBanner,
@@ -110,7 +111,8 @@ BannerRender.propTypes = {
110
111
  entity: PropTypes.string,
111
112
  targetings: PropTypes.string,
112
113
  sizes: PropTypes.string,
113
- cardBannerIndex: PropTypes.number
114
+ cardBannerIndex: PropTypes.number,
115
+ userPropsData: PropTypes.object
114
116
  };
115
117
  BannerRender.defaultProps = {
116
118
  adunit: '',
@@ -120,7 +122,8 @@ BannerRender.defaultProps = {
120
122
  entity: '',
121
123
  targetings: '',
122
124
  sizes: '',
123
- cardBannerIndex: null
125
+ cardBannerIndex: null,
126
+ userPropsData: {}
124
127
  };
125
128
  export default withTitle(BannerRender);
126
129
  //# sourceMappingURL=BannerRender.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Banner/BannerRender.js"],"names":["React","PropTypes","useQuery","generateSingleItemQuery","getCount","buildBannerSizes","buildContextualTargeting","buildParsedAdunit","buildSizeMapping","setCustomTargetings","BANNER_QUERY_PROPS","COUNT_CONTENT_HIERARCHIES","GET_BANNER","PUBLISHED","withTitle","AdSlotRender","BannerRender","baseAdunit","adunit","sizeId","sizes","propsToDisplay","entity","targetings","parent","asPath","action","actionKey","cardBannerIndex","otherProps","id","itemId","data","entityRecordData","variables","where","skip","bannerData","parentId","childEntity","_ilike","parsedTargetings","entityData","bannerSizes","sizeMapping","parsedSizes","countContentHierarchies","parsedAdunit","isContextualTargetingSet","length","Object","keys","isContextualTargetingReady","shouldShowBanner","customTargetings","targetingArguments","propTypes","object","isRequired","string","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useQuery } from '@apollo/client';\n\nimport { generateSingleItemQuery, getCount } from '../../application/query';\nimport {\n buildBannerSizes,\n buildContextualTargeting,\n buildParsedAdunit,\n buildSizeMapping,\n setCustomTargetings\n} from './helpers';\nimport {\n BANNER_QUERY_PROPS,\n COUNT_CONTENT_HIERARCHIES,\n GET_BANNER,\n PUBLISHED\n} from '../../constants';\nimport { withTitle } from '../../HOC';\nimport AdSlotRender from './AdSlotRender';\n\nconst BannerRender = ({\n baseAdunit,\n adunit,\n sizeId,\n sizes,\n propsToDisplay,\n entity,\n targetings,\n parent,\n asPath,\n action,\n actionKey,\n cardBannerIndex,\n ...otherProps\n}) => {\n const { id } = otherProps;\n const { itemId } = parent;\n\n const { data: entityRecordData = {} } = useQuery(action, {\n variables: { where: { id: id || itemId } },\n skip: id && id !== itemId\n });\n\n const { data: bannerData = {} } = useQuery(\n generateSingleItemQuery(GET_BANNER, BANNER_QUERY_PROPS),\n {\n variables: { id: sizeId },\n skip: !sizeId\n }\n );\n\n const { data = {} } = useQuery(getCount(COUNT_CONTENT_HIERARCHIES), {\n variables: {\n where: {\n parentId: id || itemId,\n childEntity: {\n _ilike: `${PUBLISHED}_%`\n }\n }\n }\n });\n\n const parsedTargetings = buildContextualTargeting(actionKey, entityRecordData, propsToDisplay);\n\n const { entityData } = bannerData;\n const { sizes: bannerSizes } = entityData || {};\n\n const sizeMapping = buildSizeMapping(sizeId, bannerSizes);\n const parsedSizes = buildBannerSizes(sizeId, bannerSizes, sizes);\n\n const { countContentHierarchies } = data;\n\n const parsedAdunit = buildParsedAdunit(asPath, countContentHierarchies, baseAdunit, adunit);\n const isContextualTargetingSet =\n propsToDisplay.length && parsedTargetings && Object.keys(parsedTargetings).length;\n const isContextualTargetingReady = isContextualTargetingSet || !propsToDisplay.length;\n const shouldShowBanner =\n parsedAdunit && parsedSizes && !!parsedSizes.length && isContextualTargetingReady;\n\n const customTargetings = setCustomTargetings(targetings, cardBannerIndex);\n\n const targetingArguments = { ...parsedTargetings, ...customTargetings };\n\n return (\n <AdSlotRender\n shouldShowBanner={!!shouldShowBanner}\n sizeMapping={sizeMapping}\n sizeId={sizeId}\n parsedAdunit={parsedAdunit}\n parsedSizes={parsedSizes}\n targetingArguments={targetingArguments}\n />\n );\n};\n\nBannerRender.propTypes = {\n parent: PropTypes.object.isRequired,\n asPath: PropTypes.string.isRequired,\n action: PropTypes.object.isRequired,\n actionKey: PropTypes.string.isRequired,\n adunit: PropTypes.string,\n baseAdunit: PropTypes.string,\n sizeId: PropTypes.string,\n propsToDisplay: PropTypes.array,\n entity: PropTypes.string,\n targetings: PropTypes.string,\n sizes: PropTypes.string,\n cardBannerIndex: PropTypes.number\n};\n\nBannerRender.defaultProps = {\n adunit: '',\n baseAdunit: '',\n sizeId: '',\n propsToDisplay: [],\n entity: '',\n targetings: '',\n sizes: '',\n cardBannerIndex: null\n};\n\nexport default withTitle(BannerRender);\n"],"file":"BannerRender.js"}
1
+ {"version":3,"sources":["../../../src/components/Banner/BannerRender.js"],"names":["React","PropTypes","useQuery","generateSingleItemQuery","getCount","buildBannerSizes","buildContextualTargeting","buildParsedAdunit","buildSizeMapping","setCustomTargetings","BANNER_QUERY_PROPS","COUNT_CONTENT_HIERARCHIES","GET_BANNER","PUBLISHED","withTitle","AdSlotRender","BannerRender","baseAdunit","adunit","sizeId","sizes","propsToDisplay","entity","targetings","parent","asPath","action","actionKey","cardBannerIndex","userPropsData","otherProps","id","itemId","data","entityRecordData","variables","where","skip","bannerData","parentId","childEntity","_ilike","parsedTargetings","entityData","bannerSizes","sizeMapping","parsedSizes","countContentHierarchies","parsedAdunit","isContextualTargetingSet","length","Object","keys","isContextualTargetingReady","shouldShowBanner","customTargetings","targetingArguments","propTypes","object","isRequired","string","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useQuery } from '@apollo/client';\n\nimport { generateSingleItemQuery, getCount } from '../../application/query';\nimport {\n buildBannerSizes,\n buildContextualTargeting,\n buildParsedAdunit,\n buildSizeMapping,\n setCustomTargetings\n} from './helpers';\nimport {\n BANNER_QUERY_PROPS,\n COUNT_CONTENT_HIERARCHIES,\n GET_BANNER,\n PUBLISHED\n} from '../../constants';\nimport { withTitle } from '../../HOC';\nimport AdSlotRender from './AdSlotRender';\n\nconst BannerRender = ({\n baseAdunit,\n adunit,\n sizeId,\n sizes,\n propsToDisplay,\n entity,\n targetings,\n parent,\n asPath,\n action,\n actionKey,\n cardBannerIndex,\n userPropsData,\n ...otherProps\n}) => {\n const { id } = otherProps;\n const { itemId } = parent;\n\n const { data: entityRecordData = {} } = useQuery(action, {\n variables: { where: { id: id || itemId } },\n skip: id && id !== itemId\n });\n\n const { data: bannerData = {} } = useQuery(\n generateSingleItemQuery(GET_BANNER, BANNER_QUERY_PROPS),\n {\n variables: { id: sizeId },\n skip: !sizeId\n }\n );\n\n const { data = {} } = useQuery(getCount(COUNT_CONTENT_HIERARCHIES), {\n variables: {\n where: {\n parentId: id || itemId,\n childEntity: {\n _ilike: `${PUBLISHED}_%`\n }\n }\n }\n });\n\n const parsedTargetings = buildContextualTargeting(actionKey, entityRecordData, propsToDisplay);\n const { entityData } = bannerData;\n const { sizes: bannerSizes } = entityData || {};\n\n const sizeMapping = buildSizeMapping(sizeId, bannerSizes);\n const parsedSizes = buildBannerSizes(sizeId, bannerSizes, sizes);\n\n const { countContentHierarchies } = data;\n\n const parsedAdunit = buildParsedAdunit(asPath, countContentHierarchies, baseAdunit, adunit);\n const isContextualTargetingSet =\n propsToDisplay.length && parsedTargetings && Object.keys(parsedTargetings).length;\n const isContextualTargetingReady = isContextualTargetingSet || !propsToDisplay.length;\n const shouldShowBanner =\n parsedAdunit && parsedSizes && !!parsedSizes.length && isContextualTargetingReady;\n\n const customTargetings = setCustomTargetings(targetings, cardBannerIndex);\n\n const targetingArguments = { ...parsedTargetings, ...customTargetings, ...userPropsData };\n\n return (\n <AdSlotRender\n shouldShowBanner={!!shouldShowBanner}\n sizeMapping={sizeMapping}\n sizeId={sizeId}\n parsedAdunit={parsedAdunit}\n parsedSizes={parsedSizes}\n targetingArguments={targetingArguments}\n />\n );\n};\n\nBannerRender.propTypes = {\n parent: PropTypes.object.isRequired,\n asPath: PropTypes.string.isRequired,\n action: PropTypes.object.isRequired,\n actionKey: PropTypes.string.isRequired,\n adunit: PropTypes.string,\n baseAdunit: PropTypes.string,\n sizeId: PropTypes.string,\n propsToDisplay: PropTypes.array,\n entity: PropTypes.string,\n targetings: PropTypes.string,\n sizes: PropTypes.string,\n cardBannerIndex: PropTypes.number,\n userPropsData: PropTypes.object\n};\n\nBannerRender.defaultProps = {\n adunit: '',\n baseAdunit: '',\n sizeId: '',\n propsToDisplay: [],\n entity: '',\n targetings: '',\n sizes: '',\n cardBannerIndex: null,\n userPropsData: {}\n};\n\nexport default withTitle(BannerRender);\n"],"file":"BannerRender.js"}
@@ -5,8 +5,6 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
5
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
6
 
7
7
  import { parseUrl } from 'query-string';
8
- import flatten from 'lodash.flatten';
9
- import getPropValues from '../../helpers/get-prop-values';
10
8
  import { END_ADUNIT, MAX_BANNER_HEIGHT, MIN_BANNER_HEIGHT } from '../../constants';
11
9
 
12
10
  const getParsedSizes = (sizes = '') => {
@@ -72,15 +70,8 @@ const buildBannerSizes = (sizeId, bannerSizes, sizes) => {
72
70
 
73
71
  const buildContextualTargeting = (actionKey, props = {}, propsToDisplay = []) => {
74
72
  if (actionKey && props[actionKey] && props[actionKey][0]) {
75
- return propsToDisplay.reduce((acc, {
76
- label,
77
- propertiesToDisplay
78
- }) => {
79
- const propValue = getPropValues(propertiesToDisplay, props[actionKey][0]);
80
- const parsedValue = Array.isArray(propValue) ? flatten(propValue) : propValue;
81
- acc[label] = parsedValue;
82
- return acc;
83
- }, {});
73
+ const data = props[actionKey][0];
74
+ return buildPropsData(data, propsToDisplay);
84
75
  }
85
76
 
86
77
  return {};
@@ -138,5 +129,55 @@ const getMinBannerHeight = bannerSizes => {
138
129
  return MIN_BANNER_HEIGHT;
139
130
  };
140
131
 
141
- export { getParsedSizes, setCustomTargetings, buildParsedAdunit, buildBannerSizes, buildContextualTargeting, buildSizeMapping, getMaxBannerHeight, getMinBannerHeight };
132
+ const buildUserQuery = userProps => {
133
+ if (!userProps || !userProps.length) return '';
134
+ const basicProps = [];
135
+ const nestedProps = {};
136
+ userProps.forEach(({
137
+ propertiesToDisplay
138
+ }) => {
139
+ const [propKey] = propertiesToDisplay;
140
+ if (!propKey || propKey === 'id') return;
141
+
142
+ if (propKey.indexOf('.') !== -1) {
143
+ const [baseProp, nestedProp] = propKey.split('.');
144
+ if (nestedProps[baseProp]) nestedProps[baseProp].push(nestedProp);else nestedProps[baseProp] = [nestedProp];
145
+ } else basicProps.push(propKey);
146
+ });
147
+ Object.keys(nestedProps).forEach(nestedKey => {
148
+ const nested = nestedProps[nestedKey];
149
+ basicProps.push(nestedKey);
150
+ basicProps.push('{');
151
+ nested.forEach(prop => basicProps.push(prop));
152
+ basicProps.push('}');
153
+ });
154
+ return basicProps.join(' ');
155
+ };
156
+
157
+ const buildPropsData = (data, props) => {
158
+ if (!data || !props.length) return {};
159
+ const propsWithData = {};
160
+ props.forEach(({
161
+ propertiesToDisplay,
162
+ label
163
+ }) => {
164
+ const [key] = propertiesToDisplay;
165
+ const parsedKey = key.split('.');
166
+ const value = getNestedValue(parsedKey, data);
167
+ const labelToUse = label || key;
168
+ propsWithData[labelToUse] = value;
169
+ });
170
+ return propsWithData;
171
+ };
172
+
173
+ const parseArrayValues = (arr, key) => arr.map(obj => obj[key]).filter(Boolean).join(', ');
174
+
175
+ const getNestedValue = (keys, object) => {
176
+ const key = keys.shift();
177
+ const nestedValue = Array.isArray(object) ? parseArrayValues(object, key) : object[key];
178
+ if (!nestedValue) return null;
179
+ return keys.length ? getNestedValue(keys, nestedValue) : nestedValue;
180
+ };
181
+
182
+ export { getParsedSizes, setCustomTargetings, buildParsedAdunit, buildBannerSizes, buildContextualTargeting, buildSizeMapping, getMaxBannerHeight, getMinBannerHeight, buildPropsData, buildUserQuery };
142
183
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Banner/helpers.js"],"names":["parseUrl","flatten","getPropValues","END_ADUNIT","MAX_BANNER_HEIGHT","MIN_BANNER_HEIGHT","getParsedSizes","sizes","sanitizedSizes","replace","toLowerCase","sizeGroups","split","map","group","Number","addPosnToTargetings","targetings","index","posn","buildTargetingValue","valueTargeting","includes","char","setCustomTargetings","cardBannerIndex","bannerTargetings","updatedTargetings","isValidTargeting","customTargeting","splitTargeting","Object","keys","forEach","key","keyTargeting","buildParsedAdunit","path","countContentHierarchies","baseAdunit","adunit","isInteger","base","process","env","DFP_BASE_ADUNIT","hasChildren","url","urlParts","filter","Boolean","urlPart","slice","length","join","endAdunit","getBannerSizes","sizeId","bannerSizes","width","height","buildBannerSizes","parsedSizes","buildContextualTargeting","actionKey","props","propsToDisplay","reduce","acc","label","propertiesToDisplay","propValue","parsedValue","Array","isArray","buildSizeMapping","sizeMapping","groupedViewports","viewports","size","viewportWidth","viewportHeight","push","keyGroupedViewport","viewport","getMaxBannerHeight","Math","max","o","getMinBannerHeight","min"],"mappings":"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","sourcesContent":["import { parseUrl } from 'query-string';\nimport flatten from 'lodash.flatten';\nimport getPropValues from '../../helpers/get-prop-values';\nimport { END_ADUNIT, MAX_BANNER_HEIGHT, MIN_BANNER_HEIGHT } from '../../constants';\n\nconst getParsedSizes = (sizes = '') => {\n if (typeof sizes !== 'string') return [];\n\n const sanitizedSizes = sizes.replace(/\\s+/, '').toLowerCase();\n const sizeGroups = sanitizedSizes.split(',');\n\n return sizeGroups.map(group => group.split('x').map(Number));\n};\n\nconst addPosnToTargetings = (targetings, index) => {\n const posn = `posn=${index}`;\n return targetings ? `${targetings},${posn}` : posn;\n};\n\nconst buildTargetingValue = valueTargeting =>\n valueTargeting.includes('[') && valueTargeting.includes(']')\n ? valueTargeting.replace(/\\;|\\[|\\]/gm, char => (char === ';' ? ',' : '')).split(',')\n : valueTargeting;\n\nconst setCustomTargetings = (targetings, cardBannerIndex) => {\n let bannerTargetings = {};\n\n const updatedTargetings = cardBannerIndex\n ? addPosnToTargetings(targetings, cardBannerIndex)\n : targetings;\n\n const isValidTargeting = updatedTargetings && typeof updatedTargetings === 'string';\n\n if (isValidTargeting) {\n const customTargeting = {};\n\n let splitTargeting = updatedTargetings.split(',');\n splitTargeting = { ...splitTargeting };\n\n Object.keys(splitTargeting).forEach(key => {\n const [keyTargeting, valueTargeting] = splitTargeting[key].split('=');\n\n if (keyTargeting && valueTargeting) {\n customTargeting[keyTargeting] = buildTargetingValue(valueTargeting);\n }\n });\n bannerTargetings = { ...bannerTargetings, ...customTargeting };\n }\n\n return bannerTargetings;\n};\n\nconst buildParsedAdunit = (path, countContentHierarchies, baseAdunit, adunit) => {\n if (!Number.isInteger(countContentHierarchies)) return '';\n\n const base = baseAdunit || process.env.DFP_BASE_ADUNIT;\n const hasChildren = countContentHierarchies !== 0;\n const { url } = parseUrl(path);\n let urlParts = url\n .split('/')\n .filter(Boolean)\n .map(urlPart => urlPart.replace(/-/g, ''));\n urlParts = urlParts.slice(0, hasChildren ? urlParts.length : urlParts.length - 1).join('/');\n urlParts = urlParts ? `${urlParts}/` : urlParts;\n const endAdunit = adunit || END_ADUNIT;\n\n return `${base}/${urlParts}${endAdunit}`;\n};\n\nconst getBannerSizes = (sizeId, bannerSizes) =>\n sizeId && bannerSizes && bannerSizes.length\n ? bannerSizes.map(({ width, height }) => [width, height])\n : null;\n\nconst buildBannerSizes = (sizeId, bannerSizes, sizes) => {\n let parsedSizes = getBannerSizes(sizeId, bannerSizes);\n\n if (!parsedSizes && sizes) parsedSizes = getParsedSizes(sizes);\n\n return parsedSizes;\n};\n\nconst buildContextualTargeting = (actionKey, props = {}, propsToDisplay = []) => {\n if (actionKey && props[actionKey] && props[actionKey][0]) {\n return propsToDisplay.reduce((acc, { label, propertiesToDisplay }) => {\n const propValue = getPropValues(propertiesToDisplay, props[actionKey][0]);\n const parsedValue = Array.isArray(propValue) ? flatten(propValue) : propValue;\n acc[label] = parsedValue;\n return acc;\n }, {});\n }\n return {};\n};\n\nconst buildSizeMapping = (sizeId, bannerSizes) => {\n let sizeMapping = [];\n\n if (sizeId && bannerSizes && bannerSizes.length) {\n const groupedViewports = bannerSizes.reduce((acc, { width, height, viewports = [] }) => {\n const size = width && height ? [width, height] : null; // if one dimension is falsey then it shouldn't display\n\n if (viewports) {\n viewports.forEach(({ width: viewportWidth, height: viewportHeight }) => {\n const key = `${viewportWidth || 0}x${viewportHeight || 0}`;\n acc[key] = acc[key] || [];\n if (size) acc[key].push(size);\n });\n }\n return acc;\n }, {});\n\n sizeMapping = Object.keys(groupedViewports).map(keyGroupedViewport => {\n const [viewportWidth, viewportHeight] = keyGroupedViewport.split('x');\n return {\n viewport: [Number(viewportWidth), Number(viewportHeight)],\n sizes: groupedViewports[keyGroupedViewport]\n };\n });\n }\n\n return sizeMapping;\n};\n\nconst getMaxBannerHeight = bannerSizes => {\n if (Array.isArray(bannerSizes) && bannerSizes.length > 0) {\n return Math.max(...bannerSizes.map(o => o.height));\n }\n return MAX_BANNER_HEIGHT;\n};\n\nconst getMinBannerHeight = bannerSizes => {\n if (Array.isArray(bannerSizes) && bannerSizes.length > 0) {\n return Math.min(...bannerSizes.map(o => o.height));\n }\n return MIN_BANNER_HEIGHT;\n};\n\nexport {\n getParsedSizes,\n setCustomTargetings,\n buildParsedAdunit,\n buildBannerSizes,\n buildContextualTargeting,\n buildSizeMapping,\n getMaxBannerHeight,\n getMinBannerHeight\n};\n"],"file":"helpers.js"}
1
+ {"version":3,"sources":["../../../src/components/Banner/helpers.js"],"names":["parseUrl","END_ADUNIT","MAX_BANNER_HEIGHT","MIN_BANNER_HEIGHT","getParsedSizes","sizes","sanitizedSizes","replace","toLowerCase","sizeGroups","split","map","group","Number","addPosnToTargetings","targetings","index","posn","buildTargetingValue","valueTargeting","includes","char","setCustomTargetings","cardBannerIndex","bannerTargetings","updatedTargetings","isValidTargeting","customTargeting","splitTargeting","Object","keys","forEach","key","keyTargeting","buildParsedAdunit","path","countContentHierarchies","baseAdunit","adunit","isInteger","base","process","env","DFP_BASE_ADUNIT","hasChildren","url","urlParts","filter","Boolean","urlPart","slice","length","join","endAdunit","getBannerSizes","sizeId","bannerSizes","width","height","buildBannerSizes","parsedSizes","buildContextualTargeting","actionKey","props","propsToDisplay","data","buildPropsData","buildSizeMapping","sizeMapping","groupedViewports","reduce","acc","viewports","size","viewportWidth","viewportHeight","push","keyGroupedViewport","viewport","getMaxBannerHeight","Array","isArray","Math","max","o","getMinBannerHeight","min","buildUserQuery","userProps","basicProps","nestedProps","propertiesToDisplay","propKey","indexOf","baseProp","nestedProp","nestedKey","nested","prop","propsWithData","label","parsedKey","value","getNestedValue","labelToUse","parseArrayValues","arr","obj","object","shift","nestedValue"],"mappings":"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","sourcesContent":["import { parseUrl } from 'query-string';\nimport { END_ADUNIT, MAX_BANNER_HEIGHT, MIN_BANNER_HEIGHT } from '../../constants';\n\nconst getParsedSizes = (sizes = '') => {\n if (typeof sizes !== 'string') return [];\n\n const sanitizedSizes = sizes.replace(/\\s+/, '').toLowerCase();\n const sizeGroups = sanitizedSizes.split(',');\n\n return sizeGroups.map(group => group.split('x').map(Number));\n};\n\nconst addPosnToTargetings = (targetings, index) => {\n const posn = `posn=${index}`;\n return targetings ? `${targetings},${posn}` : posn;\n};\n\nconst buildTargetingValue = valueTargeting =>\n valueTargeting.includes('[') && valueTargeting.includes(']')\n ? valueTargeting.replace(/\\;|\\[|\\]/gm, char => (char === ';' ? ',' : '')).split(',')\n : valueTargeting;\n\nconst setCustomTargetings = (targetings, cardBannerIndex) => {\n let bannerTargetings = {};\n\n const updatedTargetings = cardBannerIndex\n ? addPosnToTargetings(targetings, cardBannerIndex)\n : targetings;\n\n const isValidTargeting = updatedTargetings && typeof updatedTargetings === 'string';\n\n if (isValidTargeting) {\n const customTargeting = {};\n\n let splitTargeting = updatedTargetings.split(',');\n splitTargeting = { ...splitTargeting };\n\n Object.keys(splitTargeting).forEach(key => {\n const [keyTargeting, valueTargeting] = splitTargeting[key].split('=');\n\n if (keyTargeting && valueTargeting) {\n customTargeting[keyTargeting] = buildTargetingValue(valueTargeting);\n }\n });\n bannerTargetings = { ...bannerTargetings, ...customTargeting };\n }\n\n return bannerTargetings;\n};\n\nconst buildParsedAdunit = (path, countContentHierarchies, baseAdunit, adunit) => {\n if (!Number.isInteger(countContentHierarchies)) return '';\n\n const base = baseAdunit || process.env.DFP_BASE_ADUNIT;\n const hasChildren = countContentHierarchies !== 0;\n const { url } = parseUrl(path);\n let urlParts = url\n .split('/')\n .filter(Boolean)\n .map(urlPart => urlPart.replace(/-/g, ''));\n urlParts = urlParts.slice(0, hasChildren ? urlParts.length : urlParts.length - 1).join('/');\n urlParts = urlParts ? `${urlParts}/` : urlParts;\n const endAdunit = adunit || END_ADUNIT;\n\n return `${base}/${urlParts}${endAdunit}`;\n};\n\nconst getBannerSizes = (sizeId, bannerSizes) =>\n sizeId && bannerSizes && bannerSizes.length\n ? bannerSizes.map(({ width, height }) => [width, height])\n : null;\n\nconst buildBannerSizes = (sizeId, bannerSizes, sizes) => {\n let parsedSizes = getBannerSizes(sizeId, bannerSizes);\n\n if (!parsedSizes && sizes) parsedSizes = getParsedSizes(sizes);\n\n return parsedSizes;\n};\n\nconst buildContextualTargeting = (actionKey, props = {}, propsToDisplay = []) => {\n if (actionKey && props[actionKey] && props[actionKey][0]) {\n const data = props[actionKey][0];\n return buildPropsData(data, propsToDisplay);\n }\n return {};\n};\n\nconst buildSizeMapping = (sizeId, bannerSizes) => {\n let sizeMapping = [];\n\n if (sizeId && bannerSizes && bannerSizes.length) {\n const groupedViewports = bannerSizes.reduce((acc, { width, height, viewports = [] }) => {\n const size = width && height ? [width, height] : null; // if one dimension is falsey then it shouldn't display\n\n if (viewports) {\n viewports.forEach(({ width: viewportWidth, height: viewportHeight }) => {\n const key = `${viewportWidth || 0}x${viewportHeight || 0}`;\n acc[key] = acc[key] || [];\n if (size) acc[key].push(size);\n });\n }\n return acc;\n }, {});\n\n sizeMapping = Object.keys(groupedViewports).map(keyGroupedViewport => {\n const [viewportWidth, viewportHeight] = keyGroupedViewport.split('x');\n return {\n viewport: [Number(viewportWidth), Number(viewportHeight)],\n sizes: groupedViewports[keyGroupedViewport]\n };\n });\n }\n\n return sizeMapping;\n};\n\nconst getMaxBannerHeight = bannerSizes => {\n if (Array.isArray(bannerSizes) && bannerSizes.length > 0) {\n return Math.max(...bannerSizes.map(o => o.height));\n }\n return MAX_BANNER_HEIGHT;\n};\n\nconst getMinBannerHeight = bannerSizes => {\n if (Array.isArray(bannerSizes) && bannerSizes.length > 0) {\n return Math.min(...bannerSizes.map(o => o.height));\n }\n return MIN_BANNER_HEIGHT;\n};\n\nconst buildUserQuery = userProps => {\n if (!userProps || !userProps.length) return '';\n const basicProps = [];\n const nestedProps = {};\n userProps.forEach(({ propertiesToDisplay }) => {\n const [propKey] = propertiesToDisplay;\n if (!propKey || propKey === 'id') return;\n if (propKey.indexOf('.') !== -1) {\n const [baseProp, nestedProp] = propKey.split('.');\n if (nestedProps[baseProp]) nestedProps[baseProp].push(nestedProp);\n else nestedProps[baseProp] = [nestedProp];\n } else basicProps.push(propKey);\n });\n\n Object.keys(nestedProps).forEach(nestedKey => {\n const nested = nestedProps[nestedKey];\n basicProps.push(nestedKey);\n basicProps.push('{');\n nested.forEach(prop => basicProps.push(prop));\n basicProps.push('}');\n });\n\n return basicProps.join(' ');\n};\n\nconst buildPropsData = (data, props) => {\n if (!data || !props.length) return {};\n const propsWithData = {};\n\n props.forEach(({ propertiesToDisplay, label }) => {\n const [key] = propertiesToDisplay;\n const parsedKey = key.split('.');\n const value = getNestedValue(parsedKey, data);\n const labelToUse = label || key;\n\n propsWithData[labelToUse] = value;\n });\n return propsWithData;\n};\n\nconst parseArrayValues = (arr, key) =>\n arr\n .map(obj => obj[key])\n .filter(Boolean)\n .join(', ');\n\nconst getNestedValue = (keys, object) => {\n const key = keys.shift();\n const nestedValue = Array.isArray(object) ? parseArrayValues(object, key) : object[key];\n if (!nestedValue) return null;\n return keys.length ? getNestedValue(keys, nestedValue) : nestedValue;\n};\n\nexport {\n getParsedSizes,\n setCustomTargetings,\n buildParsedAdunit,\n buildBannerSizes,\n buildContextualTargeting,\n buildSizeMapping,\n getMaxBannerHeight,\n getMinBannerHeight,\n buildPropsData,\n buildUserQuery\n};\n"],"file":"helpers.js"}
@@ -46,26 +46,29 @@ const getTypeBaseProps = (data, cardOptions, extraPropsHaveCategory) => {
46
46
  const {
47
47
  interfaces,
48
48
  properties,
49
- dynamicProperties
49
+ dynamicProperties,
50
+ relations
50
51
  } = getEntitySchema;
51
52
  const isContent = !!interfaces.includes('content/content');
52
53
  const hasCategory = checkProps(properties) || checkProps(dynamicProperties);
53
54
  const hasPreheader = properties[PREHEADER_PROP];
54
55
  const typeBasedProps = [...defaultProps];
55
56
  typeBasedProps.push(...getCategoyProps(shouldAddCategoryProps, hasCategory, hasPreheader));
56
- typeBasedProps.push(...getContentProps(isContent, displayThumbnail));
57
+ typeBasedProps.push(...getContentProps(isContent));
58
+
59
+ if (displayThumbnail && relations.find(({
60
+ localField
61
+ }) => localField === 'image')) {
62
+ typeBasedProps.push('image.id', 'image.url', 'image.data');
63
+ }
64
+
57
65
  return {
58
66
  typeBasedProps,
59
67
  shouldAddCategoryProps
60
68
  };
61
69
  };
62
70
 
63
- const getContentProps = (isContent, displayThumbnail) => {
64
- if (!isContent) return [];
65
- const props = ['url', 'sponsored', 'featured'];
66
- if (displayThumbnail) props.push('image.id', 'image.url', 'image.data');
67
- return props;
68
- };
71
+ const getContentProps = isContent => isContent ? ['url', 'sponsored', 'featured'] : [];
69
72
 
70
73
  const getCategoyProps = (shouldAddCategoryProps, hasCategory, hasPreheader) => {
71
74
  if (!shouldAddCategoryProps) return [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/helpers/build-props-query.js"],"names":["CATEGORY_ID","ID","PREHEADER_PROP","HEADLINE_PROP","defaultProps","categoryProps","checkProps","props","Object","keys","filter","prop","length","buildPropsQuery","data","extraProps","cardOptions","extraPropsHaveCategory","includes","typeBasedProps","shouldAddCategoryProps","getTypeBaseProps","allProps","uniqueProps","Set","basicProps","i","arr","indexOf","complexProps","buildComplexProps","join","map","nested","split","base","nestedProps","extraProp","startsWith","jointNestedProps","isCard","displayCategory","displayThumbnail","getEntitySchema","interfaces","properties","dynamicProperties","isContent","hasCategory","hasPreheader","push","getCategoyProps","getContentProps"],"mappings":"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","sourcesContent":["import { CATEGORY_ID, ID, PREHEADER_PROP, HEADLINE_PROP } from '../constants';\n\nconst defaultProps = [ID, 'name'];\nconst categoryProps = 'id publishedListingPage{id, url}';\n\nconst checkProps = props =>\n !!(props && Object.keys(props).filter(prop => prop === CATEGORY_ID).length);\n\nconst buildPropsQuery = (data, extraProps = [], cardOptions = null) => {\n const extraPropsHaveCategory = !!extraProps.filter(prop => prop.includes('category.')).length;\n\n const { typeBasedProps, shouldAddCategoryProps } = getTypeBaseProps(\n data,\n cardOptions,\n extraPropsHaveCategory\n );\n\n const allProps = [...typeBasedProps, ...extraProps];\n\n const uniqueProps = [...new Set([...allProps])];\n\n const basicProps = uniqueProps\n .filter(prop => prop && !prop.includes('.'))\n .filter((prop, i, arr) => arr.indexOf(prop) === i);\n const complexProps = buildComplexProps(shouldAddCategoryProps, uniqueProps);\n\n return [...basicProps, ...complexProps].join(',');\n};\n\nconst buildComplexProps = (shouldAddCategoryProps, props) =>\n props\n .filter(prop => prop && prop.includes('.'))\n .map(nested => nested.split('.')[0])\n .filter((prop, i, arr) => arr.indexOf(prop) === i)\n .map(base => {\n const nestedProps = props\n .filter(\n (extraProp, i, arr) =>\n extraProp && extraProp.startsWith(`${base}.`) && arr.indexOf(extraProp) === i\n )\n .map(nested => nested.split('.')[1]);\n\n const jointNestedProps = nestedProps.join(',');\n if (base === 'category' && shouldAddCategoryProps)\n return `${base}{${jointNestedProps}, ${categoryProps}}`;\n if (base.includes('published')) {\n return `${base}{${jointNestedProps},url}`;\n }\n return `${base}{${jointNestedProps}}`;\n });\n\nconst getTypeBaseProps = (data, cardOptions, extraPropsHaveCategory) => {\n const isCard = !!cardOptions;\n const { displayCategory = true, displayThumbnail = true } = cardOptions || {};\n\n const shouldAddCategoryProps =\n (isCard && displayCategory) || (!isCard && !extraPropsHaveCategory);\n\n if (!isCard) return { typeBasedProps: [ID], shouldAddCategoryProps };\n\n const { getEntitySchema } = data;\n const { interfaces, properties, dynamicProperties } = getEntitySchema;\n\n const isContent = !!interfaces.includes('content/content');\n const hasCategory = checkProps(properties) || checkProps(dynamicProperties);\n const hasPreheader = properties[PREHEADER_PROP];\n\n const typeBasedProps = [...defaultProps];\n\n typeBasedProps.push(...getCategoyProps(shouldAddCategoryProps, hasCategory, hasPreheader));\n typeBasedProps.push(...getContentProps(isContent, displayThumbnail));\n\n return { typeBasedProps, shouldAddCategoryProps };\n};\n\nconst getContentProps = (isContent, displayThumbnail) => {\n if (!isContent) return [];\n\n const props = ['url', 'sponsored', 'featured'];\n if (displayThumbnail) props.push('image.id', 'image.url', 'image.data');\n\n return props;\n};\n\nconst getCategoyProps = (shouldAddCategoryProps, hasCategory, hasPreheader) => {\n if (!shouldAddCategoryProps) return [];\n\n const props = [];\n\n if (hasCategory) {\n props.push('category.name', 'category.listingPageId', 'category.listingPageEntity');\n }\n\n if (hasPreheader) {\n props.push(`${PREHEADER_PROP}{name}`);\n props.push(HEADLINE_PROP);\n }\n\n return props;\n};\n\nexport default buildPropsQuery;\n"],"file":"build-props-query.js"}
1
+ {"version":3,"sources":["../../src/helpers/build-props-query.js"],"names":["CATEGORY_ID","ID","PREHEADER_PROP","HEADLINE_PROP","defaultProps","categoryProps","checkProps","props","Object","keys","filter","prop","length","buildPropsQuery","data","extraProps","cardOptions","extraPropsHaveCategory","includes","typeBasedProps","shouldAddCategoryProps","getTypeBaseProps","allProps","uniqueProps","Set","basicProps","i","arr","indexOf","complexProps","buildComplexProps","join","map","nested","split","base","nestedProps","extraProp","startsWith","jointNestedProps","isCard","displayCategory","displayThumbnail","getEntitySchema","interfaces","properties","dynamicProperties","relations","isContent","hasCategory","hasPreheader","push","getCategoyProps","getContentProps","find","localField"],"mappings":"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","sourcesContent":["import { CATEGORY_ID, ID, PREHEADER_PROP, HEADLINE_PROP } from '../constants';\n\nconst defaultProps = [ID, 'name'];\nconst categoryProps = 'id publishedListingPage{id, url}';\n\nconst checkProps = props =>\n !!(props && Object.keys(props).filter(prop => prop === CATEGORY_ID).length);\n\nconst buildPropsQuery = (data, extraProps = [], cardOptions = null) => {\n const extraPropsHaveCategory = !!extraProps.filter(prop => prop.includes('category.')).length;\n\n const { typeBasedProps, shouldAddCategoryProps } = getTypeBaseProps(\n data,\n cardOptions,\n extraPropsHaveCategory\n );\n\n const allProps = [...typeBasedProps, ...extraProps];\n\n const uniqueProps = [...new Set([...allProps])];\n\n const basicProps = uniqueProps\n .filter(prop => prop && !prop.includes('.'))\n .filter((prop, i, arr) => arr.indexOf(prop) === i);\n const complexProps = buildComplexProps(shouldAddCategoryProps, uniqueProps);\n\n return [...basicProps, ...complexProps].join(',');\n};\n\nconst buildComplexProps = (shouldAddCategoryProps, props) =>\n props\n .filter(prop => prop && prop.includes('.'))\n .map(nested => nested.split('.')[0])\n .filter((prop, i, arr) => arr.indexOf(prop) === i)\n .map(base => {\n const nestedProps = props\n .filter(\n (extraProp, i, arr) =>\n extraProp && extraProp.startsWith(`${base}.`) && arr.indexOf(extraProp) === i\n )\n .map(nested => nested.split('.')[1]);\n\n const jointNestedProps = nestedProps.join(',');\n if (base === 'category' && shouldAddCategoryProps)\n return `${base}{${jointNestedProps}, ${categoryProps}}`;\n if (base.includes('published')) {\n return `${base}{${jointNestedProps},url}`;\n }\n return `${base}{${jointNestedProps}}`;\n });\n\nconst getTypeBaseProps = (data, cardOptions, extraPropsHaveCategory) => {\n const isCard = !!cardOptions;\n const { displayCategory = true, displayThumbnail = true } = cardOptions || {};\n\n const shouldAddCategoryProps =\n (isCard && displayCategory) || (!isCard && !extraPropsHaveCategory);\n\n if (!isCard) return { typeBasedProps: [ID], shouldAddCategoryProps };\n\n const { getEntitySchema } = data;\n const { interfaces, properties, dynamicProperties, relations } = getEntitySchema;\n\n const isContent = !!interfaces.includes('content/content');\n const hasCategory = checkProps(properties) || checkProps(dynamicProperties);\n const hasPreheader = properties[PREHEADER_PROP];\n\n const typeBasedProps = [...defaultProps];\n\n typeBasedProps.push(...getCategoyProps(shouldAddCategoryProps, hasCategory, hasPreheader));\n typeBasedProps.push(...getContentProps(isContent));\n\n if (displayThumbnail && relations.find(({ localField }) => localField === 'image')) {\n typeBasedProps.push('image.id', 'image.url', 'image.data');\n }\n\n return { typeBasedProps, shouldAddCategoryProps };\n};\n\nconst getContentProps = isContent => (isContent ? ['url', 'sponsored', 'featured'] : []);\n\nconst getCategoyProps = (shouldAddCategoryProps, hasCategory, hasPreheader) => {\n if (!shouldAddCategoryProps) return [];\n\n const props = [];\n\n if (hasCategory) {\n props.push('category.name', 'category.listingPageId', 'category.listingPageEntity');\n }\n\n if (hasPreheader) {\n props.push(`${PREHEADER_PROP}{name}`);\n props.push(HEADLINE_PROP);\n }\n\n return props;\n};\n\nexport default buildPropsQuery;\n"],"file":"build-props-query.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/react-page-builder",
3
- "version": "0.120.0-alpha.0",
3
+ "version": "0.120.0-alpha.4",
4
4
  "description": "Blaze react page builder",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -83,5 +83,5 @@
83
83
  "lib/*",
84
84
  "lib-es/*"
85
85
  ],
86
- "gitHead": "6b9b463e7e962837dc30ebd6565a715aa3c5e8ab"
86
+ "gitHead": "f5d9c39f0972aa3a1626110fd9f2b12a9ed7df20"
87
87
  }
@@ -1,10 +1,12 @@
1
1
  import React, { useContext } from 'react';
2
2
  import { MainContext } from '@blaze-cms/nextjs-components';
3
+ import { checkIfLoggedIn } from '@blaze-cms/core-auth-ui';
3
4
  import PropTypes from 'prop-types';
4
5
  import flatten from 'lodash.flatten';
5
6
  import { useQuery } from '@apollo/client';
6
7
  import { useRouter } from 'next/router';
7
- import { getSingleEntitySchema } from '../../application/query';
8
+ import { buildUserQuery, buildPropsData } from './helpers';
9
+ import { getSingleEntitySchema, getUser } from '../../application/query';
8
10
  import Wrapper from '../Wrapper';
9
11
  import BannerRender from './BannerRender';
10
12
  import buildPropsQuery from '../../helpers/build-props-query';
@@ -14,15 +16,20 @@ import getEntityRenderProps from '../../helpers/get-entity-render-props';
14
16
  const Banner = ({ type, ...otherProps }) => {
15
17
  const router = useRouter();
16
18
  const { isPreview } = useContext(MainContext);
19
+ const { id: userId } = checkIfLoggedIn();
17
20
  const { asPath } = router;
18
- const { parent, entity, sizeId, propsToDisplay = [] } = otherProps;
19
-
21
+ const { parent, entity, sizeId, propsToDisplay = [], userPropsToDisplay = [] } = otherProps;
22
+ const userQuery = buildUserQuery(userPropsToDisplay);
20
23
  const { itemEntity } = parent;
21
24
  const { data, error, loading } = useQuery(getSingleEntitySchema, {
22
25
  variables: { id: entity || itemEntity }
23
26
  });
27
+ const { data: { getUser: userData } = {}, loading: userLoading } = useQuery(getUser(userQuery), {
28
+ variables: { id: userId },
29
+ skip: !userPropsToDisplay.length || !userId
30
+ });
24
31
 
25
- if (loading) return '';
32
+ if (loading || userLoading) return '';
26
33
  if (error) return error.message;
27
34
  if (!data) return null;
28
35
  if (!sizeId) return null;
@@ -35,6 +42,7 @@ const Banner = ({ type, ...otherProps }) => {
35
42
  : []
36
43
  );
37
44
 
45
+ const userPropsData = buildPropsData(userData, userPropsToDisplay);
38
46
  const { actionKey, action } = getEntityRenderProps(queryProps, data, isPreview);
39
47
  const bannerKey = `${sizeId}${asPath}`;
40
48
 
@@ -46,6 +54,7 @@ const Banner = ({ type, ...otherProps }) => {
46
54
  action={action}
47
55
  actionKey={actionKey}
48
56
  asPath={asPath}
57
+ userPropsData={userPropsData}
49
58
  />
50
59
  </Wrapper>
51
60
  );
@@ -33,6 +33,7 @@ const BannerRender = ({
33
33
  action,
34
34
  actionKey,
35
35
  cardBannerIndex,
36
+ userPropsData,
36
37
  ...otherProps
37
38
  }) => {
38
39
  const { id } = otherProps;
@@ -63,7 +64,6 @@ const BannerRender = ({
63
64
  });
64
65
 
65
66
  const parsedTargetings = buildContextualTargeting(actionKey, entityRecordData, propsToDisplay);
66
-
67
67
  const { entityData } = bannerData;
68
68
  const { sizes: bannerSizes } = entityData || {};
69
69
 
@@ -81,7 +81,7 @@ const BannerRender = ({
81
81
 
82
82
  const customTargetings = setCustomTargetings(targetings, cardBannerIndex);
83
83
 
84
- const targetingArguments = { ...parsedTargetings, ...customTargetings };
84
+ const targetingArguments = { ...parsedTargetings, ...customTargetings, ...userPropsData };
85
85
 
86
86
  return (
87
87
  <AdSlotRender
@@ -107,7 +107,8 @@ BannerRender.propTypes = {
107
107
  entity: PropTypes.string,
108
108
  targetings: PropTypes.string,
109
109
  sizes: PropTypes.string,
110
- cardBannerIndex: PropTypes.number
110
+ cardBannerIndex: PropTypes.number,
111
+ userPropsData: PropTypes.object
111
112
  };
112
113
 
113
114
  BannerRender.defaultProps = {
@@ -118,7 +119,8 @@ BannerRender.defaultProps = {
118
119
  entity: '',
119
120
  targetings: '',
120
121
  sizes: '',
121
- cardBannerIndex: null
122
+ cardBannerIndex: null,
123
+ userPropsData: {}
122
124
  };
123
125
 
124
126
  export default withTitle(BannerRender);
@@ -1,6 +1,4 @@
1
1
  import { parseUrl } from 'query-string';
2
- import flatten from 'lodash.flatten';
3
- import getPropValues from '../../helpers/get-prop-values';
4
2
  import { END_ADUNIT, MAX_BANNER_HEIGHT, MIN_BANNER_HEIGHT } from '../../constants';
5
3
 
6
4
  const getParsedSizes = (sizes = '') => {
@@ -82,12 +80,8 @@ const buildBannerSizes = (sizeId, bannerSizes, sizes) => {
82
80
 
83
81
  const buildContextualTargeting = (actionKey, props = {}, propsToDisplay = []) => {
84
82
  if (actionKey && props[actionKey] && props[actionKey][0]) {
85
- return propsToDisplay.reduce((acc, { label, propertiesToDisplay }) => {
86
- const propValue = getPropValues(propertiesToDisplay, props[actionKey][0]);
87
- const parsedValue = Array.isArray(propValue) ? flatten(propValue) : propValue;
88
- acc[label] = parsedValue;
89
- return acc;
90
- }, {});
83
+ const data = props[actionKey][0];
84
+ return buildPropsData(data, propsToDisplay);
91
85
  }
92
86
  return {};
93
87
  };
@@ -135,6 +129,59 @@ const getMinBannerHeight = bannerSizes => {
135
129
  return MIN_BANNER_HEIGHT;
136
130
  };
137
131
 
132
+ const buildUserQuery = userProps => {
133
+ if (!userProps || !userProps.length) return '';
134
+ const basicProps = [];
135
+ const nestedProps = {};
136
+ userProps.forEach(({ propertiesToDisplay }) => {
137
+ const [propKey] = propertiesToDisplay;
138
+ if (!propKey || propKey === 'id') return;
139
+ if (propKey.indexOf('.') !== -1) {
140
+ const [baseProp, nestedProp] = propKey.split('.');
141
+ if (nestedProps[baseProp]) nestedProps[baseProp].push(nestedProp);
142
+ else nestedProps[baseProp] = [nestedProp];
143
+ } else basicProps.push(propKey);
144
+ });
145
+
146
+ Object.keys(nestedProps).forEach(nestedKey => {
147
+ const nested = nestedProps[nestedKey];
148
+ basicProps.push(nestedKey);
149
+ basicProps.push('{');
150
+ nested.forEach(prop => basicProps.push(prop));
151
+ basicProps.push('}');
152
+ });
153
+
154
+ return basicProps.join(' ');
155
+ };
156
+
157
+ const buildPropsData = (data, props) => {
158
+ if (!data || !props.length) return {};
159
+ const propsWithData = {};
160
+
161
+ props.forEach(({ propertiesToDisplay, label }) => {
162
+ const [key] = propertiesToDisplay;
163
+ const parsedKey = key.split('.');
164
+ const value = getNestedValue(parsedKey, data);
165
+ const labelToUse = label || key;
166
+
167
+ propsWithData[labelToUse] = value;
168
+ });
169
+ return propsWithData;
170
+ };
171
+
172
+ const parseArrayValues = (arr, key) =>
173
+ arr
174
+ .map(obj => obj[key])
175
+ .filter(Boolean)
176
+ .join(', ');
177
+
178
+ const getNestedValue = (keys, object) => {
179
+ const key = keys.shift();
180
+ const nestedValue = Array.isArray(object) ? parseArrayValues(object, key) : object[key];
181
+ if (!nestedValue) return null;
182
+ return keys.length ? getNestedValue(keys, nestedValue) : nestedValue;
183
+ };
184
+
138
185
  export {
139
186
  getParsedSizes,
140
187
  setCustomTargetings,
@@ -143,5 +190,7 @@ export {
143
190
  buildContextualTargeting,
144
191
  buildSizeMapping,
145
192
  getMaxBannerHeight,
146
- getMinBannerHeight
193
+ getMinBannerHeight,
194
+ buildPropsData,
195
+ buildUserQuery
147
196
  };
@@ -59,7 +59,7 @@ const getTypeBaseProps = (data, cardOptions, extraPropsHaveCategory) => {
59
59
  if (!isCard) return { typeBasedProps: [ID], shouldAddCategoryProps };
60
60
 
61
61
  const { getEntitySchema } = data;
62
- const { interfaces, properties, dynamicProperties } = getEntitySchema;
62
+ const { interfaces, properties, dynamicProperties, relations } = getEntitySchema;
63
63
 
64
64
  const isContent = !!interfaces.includes('content/content');
65
65
  const hasCategory = checkProps(properties) || checkProps(dynamicProperties);
@@ -68,19 +68,16 @@ const getTypeBaseProps = (data, cardOptions, extraPropsHaveCategory) => {
68
68
  const typeBasedProps = [...defaultProps];
69
69
 
70
70
  typeBasedProps.push(...getCategoyProps(shouldAddCategoryProps, hasCategory, hasPreheader));
71
- typeBasedProps.push(...getContentProps(isContent, displayThumbnail));
71
+ typeBasedProps.push(...getContentProps(isContent));
72
+
73
+ if (displayThumbnail && relations.find(({ localField }) => localField === 'image')) {
74
+ typeBasedProps.push('image.id', 'image.url', 'image.data');
75
+ }
72
76
 
73
77
  return { typeBasedProps, shouldAddCategoryProps };
74
78
  };
75
79
 
76
- const getContentProps = (isContent, displayThumbnail) => {
77
- if (!isContent) return [];
78
-
79
- const props = ['url', 'sponsored', 'featured'];
80
- if (displayThumbnail) props.push('image.id', 'image.url', 'image.data');
81
-
82
- return props;
83
- };
80
+ const getContentProps = isContent => (isContent ? ['url', 'sponsored', 'featured'] : []);
84
81
 
85
82
  const getCategoyProps = (shouldAddCategoryProps, hasCategory, hasPreheader) => {
86
83
  if (!shouldAddCategoryProps) return [];