Skip to content

Commit 795ff90

Browse files
author
Ninad Hatkar
authored
Merge pull request #83 from contentstack/fileField-bugFix
bugfix for file fields in groups and modular blocks
2 parents a0a4390 + e942cdc commit 795ff90

5 files changed

Lines changed: 93 additions & 166 deletions

File tree

gatsby-node.js

Lines changed: 32 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
44

55
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
66

7-
var _extends4 = require('babel-runtime/helpers/extends');
7+
var _extends5 = require('babel-runtime/helpers/extends');
88

9-
var _extends5 = _interopRequireDefault(_extends4);
9+
var _extends6 = _interopRequireDefault(_extends5);
1010

1111
var _set = require('babel-runtime/core-js/set');
1212

@@ -45,6 +45,7 @@ var downloadAssets = require('./download-assets');
4545

4646
var references = [];
4747
var groups = [];
48+
var fileFields = [];
4849

4950
exports.onPreBootstrap = function (_ref) {
5051
var reporter = _ref.reporter;
@@ -94,9 +95,10 @@ exports.createSchemaCustomization = function () {
9495
var contentTypeUid = contentType.uid.replace(/-/g, '_');
9596
var name = typePrefix + '_' + contentTypeUid;
9697
var extendedSchema = extendSchemaWithDefaultEntryFields(contentType.schema);
97-
var result = buildCustomSchema(extendedSchema, [], [], [], name, typePrefix);
98+
var result = buildCustomSchema(extendedSchema, [], [], [], [], name, typePrefix);
9899
references = references.concat(result.references);
99100
groups = groups.concat(result.groups);
101+
fileFields = fileFields.concat(result.fileFields);
100102
var typeDefs = ['type linktype{\n title: String\n href: String\n }', schema.buildObjectType({
101103
name: name,
102104
fields: result.fields,
@@ -305,7 +307,7 @@ exports.sourceNodes = function () {
305307
});
306308

307309
if (!configOptions.downloadImages) {
308-
_context2.next = 39;
310+
_context2.next = 38;
309311
break;
310312
}
311313

@@ -314,17 +316,16 @@ exports.sourceNodes = function () {
314316
return downloadAssets({ cache: cache, getCache: getCache, createNode: createNode, createNodeId: createNodeId, getNodesByType: getNodesByType, reporter: reporter }, typePrefix, configOptions);
315317

316318
case 33:
317-
_context2.next = 39;
319+
_context2.next = 38;
318320
break;
319321

320322
case 35:
321323
_context2.prev = 35;
322324
_context2.t1 = _context2['catch'](30);
323325

324-
console.log('error--->', _context2.t1);
325326
reporter.info('Something went wrong while downloading assets. Details: ' + _context2.t1);
326327

327-
case 39:
328+
case 38:
328329

329330
// deleting nodes
330331

@@ -366,7 +367,7 @@ exports.sourceNodes = function () {
366367
newState[typePrefix.toLowerCase() + '-sync-token-' + configOptions.api_key] = nextSyncToken;
367368
setPluginStatus(newState);
368369

369-
case 48:
370+
case 47:
370371
case 'end':
371372
return _context2.stop();
372373
}
@@ -379,56 +380,33 @@ exports.sourceNodes = function () {
379380
};
380381
}();
381382

382-
// exports.onCreateNode = async ({
383-
// cache,
384-
// actions: { createNode },
385-
// getCache,
386-
// createNodeId,
387-
// node,
388-
// }, configOptions) => {
389-
// // use a custom type prefix if specified
390-
// const typePrefix = configOptions.type_prefix || 'Contentstack';
391-
392-
// // filter the images from all the assets
393-
// // const regexp = new RegExp('https://(images).contentstack.io/v3/assets/')
394-
// // const matches = regexp.exec(node.url);
395-
396-
// if (configOptions.downloadImages && node.internal.owner === 'gatsby-source-contentstack' && node.internal.type === `${typePrefix}_assets`) {
397-
// const cachedNodeId = makeAssetNodeUid(node, createNodeId, typePrefix);
398-
399-
// const cachedFileNode = await cache.get(cachedNodeId);
400-
401-
// let fileNode;
402-
// // Checks for cached fileNode
403-
// if (cachedFileNode) {
404-
// fileNode = cachedFileNode;
405-
// } else {
406-
// // create a FileNode in Gatsby that gatsby-transformer-sharp will create optimized images for
407-
// fileNode = await createRemoteFileNode({
408-
// // the url of the remote image to generate a node for
409-
// url: encodeURI(node.url),
410-
// getCache,
411-
// createNode,
412-
// createNodeId,
413-
// parentNodeId: node.id,
414-
// });
415-
416-
// if (fileNode)
417-
// // Cache the fileNode, so it does not have to downloaded again
418-
// await cache.set(cachedNodeId, fileNode);
419-
// }
420-
421-
// if (fileNode)
422-
// node.localAsset___NODE = fileNode.id;
423-
// }
424-
// };
425-
426383
exports.createResolvers = function (_ref7) {
427384
var createResolvers = _ref7.createResolvers;
428385

429386
var resolvers = {};
387+
fileFields.forEach(function (fileField) {
388+
resolvers[fileField.parent] = (0, _extends6.default)({}, resolvers[fileField.parent], (0, _defineProperty3.default)({}, fileField.field.uid, {
389+
resolve: function resolve(source, args, context, info) {
390+
if (fileField.field.multiple && source[fileField.field.uid + '___NODE']) {
391+
var nodesData = [];
392+
source[fileField.field.uid + '___NODE'].forEach(function (id) {
393+
context.nodeModel.getAllNodes().find(function (node) {
394+
if (node.id === id) {
395+
nodesData.push(node);
396+
}
397+
});
398+
});
399+
return nodesData;
400+
} else {
401+
return context.nodeModel.getAllNodes().find(function (node) {
402+
return node.id === source[fileField.field.uid + '___NODE'];
403+
});
404+
}
405+
}
406+
}));
407+
});
430408
references.forEach(function (reference) {
431-
resolvers[reference.parent] = (0, _extends5.default)({}, resolvers[reference.parent], (0, _defineProperty3.default)({}, reference.uid, {
409+
resolvers[reference.parent] = (0, _extends6.default)({}, resolvers[reference.parent], (0, _defineProperty3.default)({}, reference.uid, {
432410
resolve: function resolve(source, args, context, info) {
433411
if (source[reference.uid + '___NODE']) {
434412
var nodesData = [];
@@ -446,7 +424,7 @@ exports.createResolvers = function (_ref7) {
446424
}));
447425
});
448426
groups.forEach(function (group) {
449-
resolvers[group.parent] = (0, _extends5.default)({}, resolvers[group.parent], (0, _defineProperty3.default)({}, group.field.uid, {
427+
resolvers[group.parent] = (0, _extends6.default)({}, resolvers[group.parent], (0, _defineProperty3.default)({}, group.field.uid, {
450428
resolve: function resolve(source) {
451429
if (group.field.multiple && !Array.isArray(source[group.field.uid])) {
452430
return [];

normalize.js

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,15 @@ var builtEntry = function builtEntry(schema, entry, locale, entriesNodeIds, asse
191191
return entryObj;
192192
};
193193

194-
var buildBlockCustomSchema = function buildBlockCustomSchema(blocks, types, references, groups, parent, prefix) {
194+
var buildBlockCustomSchema = function buildBlockCustomSchema(blocks, types, references, groups, fileFields, parent, prefix) {
195195
var blockFields = {};
196196
var blockType = 'type ' + parent + ' @infer {';
197197

198198
blocks.forEach(function (block) {
199199
var newparent = parent.concat(block.uid);
200200
blockType = blockType.concat(block.uid + ' : ' + newparent + ' ');
201201

202-
var _buildCustomSchema = buildCustomSchema(block.schema, types, references, groups, newparent, prefix),
202+
var _buildCustomSchema = buildCustomSchema(block.schema, types, references, groups, fileFields, newparent, prefix),
203203
fields = _buildCustomSchema.fields;
204204

205205
for (var key in fields) {
@@ -257,10 +257,11 @@ exports.extendSchemaWithDefaultEntryFields = function (schema) {
257257
return schema;
258258
};
259259

260-
var buildCustomSchema = exports.buildCustomSchema = function (schema, types, references, groups, parent, prefix) {
260+
var buildCustomSchema = exports.buildCustomSchema = function (schema, types, references, groups, fileFields, parent, prefix) {
261261
var fields = {};
262262
groups = groups || [];
263263
references = references || [];
264+
fileFields = fileFields || [];
264265
types = types || [];
265266
schema.forEach(function (field) {
266267
switch (field.data_type) {
@@ -361,49 +362,28 @@ var buildCustomSchema = exports.buildCustomSchema = function (schema, types, ref
361362
case 'file':
362363
var type = 'type ' + prefix + '_assets implements Node @infer { url: String }';
363364
types.push(type);
364-
fields[field.uid] = {
365-
resolve: function resolve(source, args, context) {
366-
if (field.multiple && source[field.uid + '___NODE']) {
367-
var nodesData = [];
368-
source[field.uid + '___NODE'].forEach(function (id) {
369-
context.nodeModel.getAllNodes({
370-
type: prefix + '_assets'
371-
}).find(function (node) {
372-
if (node.id === id) {
373-
nodesData.push(node);
374-
}
375-
});
376-
});
377-
return nodesData;
378-
}
365+
fileFields.push({
366+
parent: parent,
367+
field: field
368+
});
379369

380-
if (source[field.uid + '___NODE']) {
381-
return context.nodeModel.getAllNodes({
382-
type: prefix + '_assets'
383-
}).find(function (node) {
384-
return node.id === source[field.uid + '___NODE'];
385-
});
386-
}
387-
return null;
388-
}
389-
};
390370
if (field.mandatory) {
391371
if (field.multiple) {
392-
fields[field.uid].type = '[' + prefix + '_assets]!';
372+
fields[field.uid] = '[' + prefix + '_assets]!';
393373
} else {
394-
fields[field.uid].type = prefix + '_assets!';
374+
fields[field.uid] = prefix + '_assets!';
395375
}
396376
} else if (field.multiple) {
397-
fields[field.uid].type = '[' + prefix + '_assets]';
377+
fields[field.uid] = '[' + prefix + '_assets]';
398378
} else {
399-
fields[field.uid].type = prefix + '_assets';
379+
fields[field.uid] = prefix + '_assets';
400380
}
401381
break;
402382
case 'group':
403383
case 'global_field':
404384
var newparent = parent.concat('_', field.uid);
405385

406-
var result = buildCustomSchema(field.schema, types, references, groups, newparent, prefix);
386+
var result = buildCustomSchema(field.schema, types, references, groups, fileFields, newparent, prefix);
407387

408388
for (var key in result.fields) {
409389
if (Object.prototype.hasOwnProperty.call(result.fields[key], 'type')) {
@@ -439,7 +419,7 @@ var buildCustomSchema = exports.buildCustomSchema = function (schema, types, ref
439419
case 'blocks':
440420
var blockparent = parent.concat('_', field.uid);
441421

442-
var blockType = buildBlockCustomSchema(field.blocks, types, references, groups, blockparent, prefix);
422+
var blockType = buildBlockCustomSchema(field.blocks, types, references, groups, fileFields, blockparent, prefix);
443423

444424
types.push(blockType);
445425
if (field.mandatory) {
@@ -504,6 +484,7 @@ var buildCustomSchema = exports.buildCustomSchema = function (schema, types, ref
504484
fields: fields,
505485
types: types,
506486
references: references,
507-
groups: groups
487+
groups: groups,
488+
fileFields: fileFields
508489
};
509490
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gatsby-source-contentstack",
3-
"version": "2.3.1",
3+
"version": "2.3.2",
44
"description": "Gatsby source plugin for building websites using Contentstack as a data source",
55
"scripts": {
66
"prepublish": "npm run build",

src/gatsby-node.js

Lines changed: 28 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const downloadAssets = require('./download-assets');
1616

1717
let references = [];
1818
let groups = [];
19+
let fileFields = [];
1920

2021
exports.onPreBootstrap = ({ reporter }) => {
2122
const args = process.argv;
@@ -52,11 +53,13 @@ exports.createSchemaCustomization = async ({
5253
[],
5354
[],
5455
[],
56+
[],
5557
name,
5658
typePrefix
5759
);
5860
references = references.concat(result.references);
5961
groups = groups.concat(result.groups);
62+
fileFields = fileFields.concat(result.fileFields);
6063
const typeDefs = [
6164
`type linktype{
6265
title: String
@@ -261,7 +264,6 @@ exports.sourceNodes = async ({
261264
try {
262265
await downloadAssets({ cache, getCache, createNode, createNodeId, getNodesByType, reporter }, typePrefix, configOptions);
263266
} catch (error) {
264-
console.log('error--->', error);
265267
reporter.info('Something went wrong while downloading assets. Details: ' + error);
266268
}
267269
}
@@ -333,52 +335,34 @@ exports.sourceNodes = async ({
333335
setPluginStatus(newState);
334336
};
335337

336-
// exports.onCreateNode = async ({
337-
// cache,
338-
// actions: { createNode },
339-
// getCache,
340-
// createNodeId,
341-
// node,
342-
// }, configOptions) => {
343-
// // use a custom type prefix if specified
344-
// const typePrefix = configOptions.type_prefix || 'Contentstack';
345-
346-
// // filter the images from all the assets
347-
// // const regexp = new RegExp('https://(images).contentstack.io/v3/assets/')
348-
// // const matches = regexp.exec(node.url);
349-
350-
// if (configOptions.downloadImages && node.internal.owner === 'gatsby-source-contentstack' && node.internal.type === `${typePrefix}_assets`) {
351-
// const cachedNodeId = makeAssetNodeUid(node, createNodeId, typePrefix);
352-
353-
// const cachedFileNode = await cache.get(cachedNodeId);
354-
355-
// let fileNode;
356-
// // Checks for cached fileNode
357-
// if (cachedFileNode) {
358-
// fileNode = cachedFileNode;
359-
// } else {
360-
// // create a FileNode in Gatsby that gatsby-transformer-sharp will create optimized images for
361-
// fileNode = await createRemoteFileNode({
362-
// // the url of the remote image to generate a node for
363-
// url: encodeURI(node.url),
364-
// getCache,
365-
// createNode,
366-
// createNodeId,
367-
// parentNodeId: node.id,
368-
// });
369-
370-
// if (fileNode)
371-
// // Cache the fileNode, so it does not have to downloaded again
372-
// await cache.set(cachedNodeId, fileNode);
373-
// }
374-
375-
// if (fileNode)
376-
// node.localAsset___NODE = fileNode.id;
377-
// }
378-
// };
379338

380339
exports.createResolvers = ({ createResolvers }) => {
381340
const resolvers = {};
341+
fileFields.forEach(fileField => {
342+
resolvers[fileField.parent] = {
343+
...resolvers[fileField.parent],
344+
... {
345+
[fileField.field.uid]: {
346+
resolve(source, args, context, info) {
347+
if (fileField.field.multiple && source[`${fileField.field.uid}___NODE`]) {
348+
const nodesData = [];
349+
source[`${fileField.field.uid}___NODE`].forEach(id => {
350+
context.nodeModel.getAllNodes().find(node => {
351+
if (node.id === id) {
352+
nodesData.push(node);
353+
}
354+
});
355+
});
356+
return nodesData;
357+
} else {
358+
return context.nodeModel.getAllNodes().find(
359+
node => node.id === source[`${fileField.field.uid}___NODE`])
360+
}
361+
},
362+
},
363+
}
364+
};
365+
})
382366
references.forEach(reference => {
383367
resolvers[reference.parent] = {
384368
...resolvers[reference.parent],

0 commit comments

Comments
 (0)