diff --git a/addons/actions/src/util.js b/addons/actions/src/util.js
index b93c00ceea41..b3cac28e2506 100644
--- a/addons/actions/src/util.js
+++ b/addons/actions/src/util.js
@@ -70,9 +70,12 @@ export function decycle(object, depth = 15) {
} else {
obj = { [CLASS_NAME_KEY]: value.constructor ? value.constructor.name : 'Object' };
- Object.keys(value).forEach(name => {
+ // We want to iterate over all the enumerable properties, including the ones in prototype chain
+ // eslint-disable-next-line no-restricted-syntax, guard-for-in
+ for (const name in value) {
+ // noinspection JSUnfilteredForInLoop
obj[name] = derez(value[name], `${path}[${JSON.stringify(name)}]`, _depth + 1);
- });
+ }
}
if (_depth === 0 && isObject(value) && isCyclic) {
diff --git a/examples/cra-kitchen-sink/src/stories/__snapshots__/addon-actions.stories.storyshot b/examples/cra-kitchen-sink/src/stories/__snapshots__/addon-actions.stories.storyshot
new file mode 100644
index 000000000000..10772f38a115
--- /dev/null
+++ b/examples/cra-kitchen-sink/src/stories/__snapshots__/addon-actions.stories.storyshot
@@ -0,0 +1,56 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Storyshots Addon Actions Circular Payload 1`] = `
+
+`;
+
+exports[`Storyshots Addon Actions Decorated Action 1`] = `
+
+`;
+
+exports[`Storyshots Addon Actions File object as payload 1`] = `
+
+`;
+
+exports[`Storyshots Addon Actions Function Name 1`] = `
+
+`;
+
+exports[`Storyshots Addon Actions Hello World 1`] = `
+
+`;
+
+exports[`Storyshots Addon Actions Reserved keyword as name 1`] = `
+
+`;
diff --git a/examples/cra-kitchen-sink/src/stories/addon-actions.stories.js b/examples/cra-kitchen-sink/src/stories/addon-actions.stories.js
index 04feb6fafade..8059166df83b 100644
--- a/examples/cra-kitchen-sink/src/stories/addon-actions.stories.js
+++ b/examples/cra-kitchen-sink/src/stories/addon-actions.stories.js
@@ -2,6 +2,7 @@ import React from 'react';
import { storiesOf } from '@storybook/react';
import { action, decorateAction } from '@storybook/addon-actions';
import { Button } from '@storybook/react/demo';
+import { File } from 'global';
const pickFirst = decorateAction([args => args.slice(0, 1)]);
@@ -17,4 +18,8 @@ storiesOf('Addon Actions', module)
const fn = action('fnName');
return ;
})
- .add('Reserved keyword as name', () => );
+ .add('Reserved keyword as name', () => )
+ .add('File object as payload', () => {
+ const file = new File([''], 'filename.txt', { type: 'text/plain', lastModified: new Date() });
+ return ;
+ });