diff --git a/packages/connector-google-drive-v2/src/capabilities/index.js b/packages/connector-google-drive-v2/src/capabilities/index.js
index 92b3bdf4b..203056e16 100644
--- a/packages/connector-google-drive-v2/src/capabilities/index.js
+++ b/packages/connector-google-drive-v2/src/capabilities/index.js
@@ -5,8 +5,10 @@ import download from './download';
import upload from './upload';
import rename from './rename';
import sort from './sort';
+import open from './open';
const capabilities = [
+ open,
createFolder,
rename,
download,
diff --git a/packages/connector-google-drive-v2/src/capabilities/open.js b/packages/connector-google-drive-v2/src/capabilities/open.js
new file mode 100644
index 000000000..f7b518e54
--- /dev/null
+++ b/packages/connector-google-drive-v2/src/capabilities/open.js
@@ -0,0 +1,36 @@
+import api from '../api';
+import sanitizeFilename from 'sanitize-filename';
+import icons from '../icons-svg';
+import getMess from '../translations';
+
+let label = 'open';
+
+function handler(apiOptions, actions) {
+ const {
+ navigateToDir,
+ getSelectedResources
+ } = actions;
+
+ const selectedResources = getSelectedResources();
+ const selectedResourceId = selectedResources[0].id;
+ navigateToDir(selectedResourceId)
+}
+
+export default (apiOptions, actions) => {
+ const localeLabel = getMess(apiOptions.locale, label);
+ const { getSelectedResources } = actions;
+ return {
+ id: label,
+ icon: { svg: icons.open },
+ label: localeLabel,
+ shouldBeAvailable: (apiOptions) => {
+ let selectedResources = getSelectedResources();
+ return (
+ selectedResources.length === 1 &&
+ selectedResources[0].type === 'dir'
+ );
+ },
+ availableInContexts: ['row', 'toolbar'],
+ handler: () => handler(apiOptions, actions)
+ };
+}
diff --git a/packages/connector-node-v1/src/capabilities/index.js b/packages/connector-node-v1/src/capabilities/index.js
index 6bfe91fe7..1801a7309 100644
--- a/packages/connector-node-v1/src/capabilities/index.js
+++ b/packages/connector-node-v1/src/capabilities/index.js
@@ -4,8 +4,10 @@ import download from './download';
import upload from './upload';
import rename from './rename';
import sort from './sort';
+import open from './open';
const capabilities = [
+ open,
createFolder,
rename,
download,
diff --git a/packages/connector-node-v1/src/capabilities/open.js b/packages/connector-node-v1/src/capabilities/open.js
new file mode 100644
index 000000000..f7b518e54
--- /dev/null
+++ b/packages/connector-node-v1/src/capabilities/open.js
@@ -0,0 +1,36 @@
+import api from '../api';
+import sanitizeFilename from 'sanitize-filename';
+import icons from '../icons-svg';
+import getMess from '../translations';
+
+let label = 'open';
+
+function handler(apiOptions, actions) {
+ const {
+ navigateToDir,
+ getSelectedResources
+ } = actions;
+
+ const selectedResources = getSelectedResources();
+ const selectedResourceId = selectedResources[0].id;
+ navigateToDir(selectedResourceId)
+}
+
+export default (apiOptions, actions) => {
+ const localeLabel = getMess(apiOptions.locale, label);
+ const { getSelectedResources } = actions;
+ return {
+ id: label,
+ icon: { svg: icons.open },
+ label: localeLabel,
+ shouldBeAvailable: (apiOptions) => {
+ let selectedResources = getSelectedResources();
+ return (
+ selectedResources.length === 1 &&
+ selectedResources[0].type === 'dir'
+ );
+ },
+ availableInContexts: ['row', 'toolbar'],
+ handler: () => handler(apiOptions, actions)
+ };
+}
diff --git a/packages/connector-node-v1/src/icons-svg.js b/packages/connector-node-v1/src/icons-svg.js
index f50b5b18e..63b487582 100644
--- a/packages/connector-node-v1/src/icons-svg.js
+++ b/packages/connector-node-v1/src/icons-svg.js
@@ -9,6 +9,7 @@ export default {
createNewFolder: ``,
delete: ``,
rename: ``,
+ open: ``,
folder: ``,
volumeUp: ``,
image: ``,
diff --git a/packages/connector-node-v1/src/translations.js b/packages/connector-node-v1/src/translations.js
index 81b603208..88c7ed9c6 100644
--- a/packages/connector-node-v1/src/translations.js
+++ b/packages/connector-node-v1/src/translations.js
@@ -7,6 +7,7 @@ const translations = {
remove: 'Remove',
download: 'Download',
rename: 'Rename',
+ open: 'Open',
creating: 'Creating',
creatingName: 'Creating {name}...',
create: 'Create',
@@ -40,6 +41,7 @@ const translations = {
remove: 'Löschen',
download: 'Herunterladen',
rename: 'Umbenennen',
+ open: 'Öffnen',
creating: 'Wird erstellt',
creatingName: '{name} wird angelegt...',
create: 'Erstellen',
@@ -71,6 +73,7 @@ const translations = {
remove: 'Poista',
download: 'Lataa',
rename: 'Nimeä uudelleen',
+ open: 'Avata',
creating: 'Luodaan',
creatingName: 'Luodaan {name}...',
create: 'Luo',
@@ -104,6 +107,7 @@ const translations = {
remove: 'Fjern',
download: 'Last ned',
rename: 'Gi nytt navn',
+ open: 'Åpen',
creating: 'Opprette',
creatingName: 'Opprette {name}...',
create: 'Opprett',
@@ -137,6 +141,7 @@ const translations = {
remove: 'Remove',
download: 'Загрузить',
rename: 'Переименовать',
+ open: 'Открытый',
creating: 'Создание',
creatingName: 'Создание {name}...',
create: 'Создать',
@@ -170,6 +175,7 @@ const translations = {
remove: 'Ta bort',
download: 'Hämta',
rename: 'Ändra namn',
+ open: 'Öppen',
creating: 'Skapar',
creatingName: 'Skapar {name}...',
create: 'Skapa',