diff --git a/packages/components/src/components/LazyLoader.vue b/packages/components/src/components/LazyLoader.vue
new file mode 100644
index 0000000000..55740fdd76
--- /dev/null
+++ b/packages/components/src/components/LazyLoader.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/components/src/components/LoadingSpinner.vue b/packages/components/src/components/LoadingSpinner.vue
new file mode 100644
index 0000000000..064fff4275
--- /dev/null
+++ b/packages/components/src/components/LoadingSpinner.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
diff --git a/packages/components/src/pages/VsCodeExtension.vue b/packages/components/src/pages/VsCodeExtension.vue
index b40ce82cc1..b693cc327a 100644
--- a/packages/components/src/pages/VsCodeExtension.vue
+++ b/packages/components/src/pages/VsCodeExtension.vue
@@ -80,10 +80,12 @@
:tabName="VIEW_COMPONENT"
:ref="VIEW_COMPONENT"
>
-
+
+
+
-
+
+
+
-
+
+
+
@@ -125,13 +131,15 @@
:tabName="VIEW_FLAMEGRAPH"
:allow-scroll="false"
>
-
+
+
+
@@ -439,6 +447,8 @@ import isPrecomputedSequenceDiagram from '@/lib/isPrecomputedSequenceDiagram';
import { SAVED_FILTERS_STORAGE_ID } from '../components/FilterMenu.vue';
import { DEFAULT_SEQ_DIAGRAM_COLLAPSE_DEPTH } from '../components/DiagramSequence.vue';
import VCompassIcon from '@/assets/compass-simpler.svg';
+import VLoadingSpinner from '@/components/LoadingSpinner.vue';
+import VLazyLoader from '@/components/LazyLoader.vue';
const browserPrefixes = ['', 'webkit', 'moz'];
@@ -479,6 +489,8 @@ export default {
VUnlicensedNotice,
VConfigurationRequired,
VCompassIcon,
+ VLoadingSpinner,
+ VLazyLoader,
},
store,
data() {
@@ -893,8 +905,12 @@ export default {
},
},
methods: {
- applyFilters(filter, appMap) {
- this.filteredAppMap = filter.filter(appMap, this.findings);
+ async applyFilters(filter, appMap) {
+ this.isDiagramLoading = true;
+ this.$nextTick(async () => {
+ this.filteredAppMap = filter.filter(appMap, this.findings);
+ this.isDiagramLoading = false;
+ });
},
emptyFilteredAppMap() {
return new AppMapFilter().filter(new AppMap());
@@ -1467,9 +1483,11 @@ export default {
if (this.isGiantAppMap) {
this.showStatsPanel = true;
this.setView(null);
+ } else if (this.showStatsPanel && this.currentView === null) {
+ this.showStatsPanel = false;
+ this.setView(this.defaultView);
}
},
-
beforeDestroy() {
browserPrefixes.forEach((prefix) => {
document.removeEventListener(prefix + 'fullscreenchange', this.checkFullscreen);
diff --git a/packages/components/tsconfig.json b/packages/components/tsconfig.json
index 83d3278c7d..7a1b1cc736 100644
--- a/packages/components/tsconfig.json
+++ b/packages/components/tsconfig.json
@@ -13,7 +13,7 @@
"useDefineForClassFields": true,
"sourceMap": true,
"baseUrl": ".",
- "types": ["webpack-env", "jest"],
+ "types": ["webpack-env", "jest", "vue/types/vue"],
"paths": {
"@/*": ["src/*"]
},