From e4e340d47e7e5013423a2e8118a05dd3103285ce Mon Sep 17 00:00:00 2001
From: Devon A Thomson <devon.thomson@hotmail.com>
Date: Thu, 10 Sep 2020 16:57:53 -0400
Subject: [PATCH] added lens to recently accessed on load and save in app.tsx

---
 x-pack/plugins/lens/common/constants.ts       |  4 +++
 .../lens/public/app_plugin/app.test.tsx       | 36 +++++++++++++++++++
 x-pack/plugins/lens/public/app_plugin/app.tsx |  3 ++
 3 files changed, 43 insertions(+)

diff --git a/x-pack/plugins/lens/common/constants.ts b/x-pack/plugins/lens/common/constants.ts
index 16397d340d95..80d433873d2a 100644
--- a/x-pack/plugins/lens/common/constants.ts
+++ b/x-pack/plugins/lens/common/constants.ts
@@ -16,3 +16,7 @@ export function getBasePath() {
 export function getEditPath(id: string) {
   return `#/edit/${encodeURIComponent(id)}`;
 }
+
+export function getFullPath(id: string) {
+  return `/app/${PLUGIN_ID}#/edit/${encodeURIComponent(id)}`;
+}
diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx
index 2b979f064b8e..b70e0a4fff02 100644
--- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx
+++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx
@@ -300,6 +300,29 @@ describe('Lens App', () => {
     ]);
   });
 
+  it('adds to the recently viewed list on load', async () => {
+    const defaultArgs = makeDefaultArgs();
+    instance = mount(<App {...defaultArgs} />);
+
+    (defaultArgs.docStorage.load as jest.Mock).mockResolvedValue({
+      id: '1234',
+      title: 'Daaaaaaadaumching!',
+      state: {
+        query: 'fake query',
+        filters: [],
+      },
+      references: [],
+    });
+    await act(async () => {
+      instance.setProps({ docId: '1234' });
+    });
+    expect(defaultArgs.core.chrome.recentlyAccessed.add).toHaveBeenCalledWith(
+      '/app/lens#/edit/1234',
+      'Daaaaaaadaumching!',
+      '1234'
+    );
+  });
+
   it('sets originatingApp breadcrumb when the document title changes', async () => {
     const defaultArgs = makeDefaultArgs();
     defaultArgs.originatingApp = 'ultraCoolDashboard';
@@ -591,6 +614,19 @@ describe('Lens App', () => {
         expect(args.docStorage.load).not.toHaveBeenCalled();
       });
 
+      it('adds to the recently viewed list on save', async () => {
+        const { args } = await save({
+          initialDocId: undefined,
+          newCopyOnSave: false,
+          newTitle: 'hello there',
+        });
+        expect(args.core.chrome.recentlyAccessed.add).toHaveBeenCalledWith(
+          '/app/lens#/edit/aaa',
+          'hello there',
+          'aaa'
+        );
+      });
+
       it('saves the latest doc as a copy', async () => {
         const { args, instance: inst } = await save({
           initialDocId: '1234',
diff --git a/x-pack/plugins/lens/public/app_plugin/app.tsx b/x-pack/plugins/lens/public/app_plugin/app.tsx
index 021ca8b182b2..3f1f6d0e5509 100644
--- a/x-pack/plugins/lens/public/app_plugin/app.tsx
+++ b/x-pack/plugins/lens/public/app_plugin/app.tsx
@@ -39,6 +39,7 @@ import {
   IndexPatternsContract,
   SavedQuery,
 } from '../../../../../src/plugins/data/public';
+import { getFullPath } from '../../common';
 
 interface State {
   indicateNoData: boolean;
@@ -271,6 +272,7 @@ export function App({
         docStorage
           .load(docId)
           .then((doc) => {
+            core.chrome.recentlyAccessed.add(getFullPath(docId), doc.title, docId);
             getAllIndexPatterns(
               _.uniq(
                 doc.references.filter(({ type }) => type === 'index-pattern').map(({ id }) => id)
@@ -365,6 +367,7 @@ export function App({
     docStorage
       .save(doc)
       .then(({ id }) => {
+        core.chrome.recentlyAccessed.add(getFullPath(id), doc.title, id);
         // Prevents unnecessary network request and disables save button
         const newDoc = { ...doc, id };
         const currentOriginatingApp = state.originatingApp;