diff --git a/app/src/lang/translations/en-US.yaml b/app/src/lang/translations/en-US.yaml
index 24305bec4e..a54f7d3568 100644
--- a/app/src/lang/translations/en-US.yaml
+++ b/app/src/lang/translations/en-US.yaml
@@ -380,6 +380,9 @@ select_a_collection: Select a Collection
select_a_field: Select a Field
active: Active
move_to: Move To...
+copy: Copy
+copy_to: Copy To...
+no_other_dashboards_copy: You don't have any other Dashboards yet.
users: Users
activity: Activity
webhooks: Webhooks
diff --git a/app/src/modules/insights/components/panel.vue b/app/src/modules/insights/components/panel.vue
index eba4d39260..11f6ba32a9 100644
--- a/app/src/modules/insights/components/panel.vue
+++ b/app/src/modules/insights/components/panel.vue
@@ -40,7 +40,7 @@
- {{ t('move_to') }}
+ {{ t('copy_to') }}
diff --git a/app/src/modules/insights/routes/dashboard.vue b/app/src/modules/insights/routes/dashboard.vue
index b1192af643..b5e493ea87 100644
--- a/app/src/modules/insights/routes/dashboard.vue
+++ b/app/src/modules/insights/routes/dashboard.vue
@@ -78,10 +78,13 @@
- {{ t('move_to') }}
+ {{ t('copy_to') }}
-
+
+ {{ t('no_other_dashboards_copy') }}
+
+
@@ -89,7 +92,7 @@
{{ t('cancel') }}
- {{ t('move') }}
+ {{ t('copy') }}
@@ -138,7 +141,7 @@ export default defineComponent({
const saving = ref(false);
const movePanelLoading = ref(false);
- const movePanelTo = ref(props.primaryKey);
+ const movePanelTo = ref(insightsStore.dashboards.find((dashboard) => dashboard.id !== props.primaryKey)?.id);
const movePanelID = ref();
@@ -149,7 +152,7 @@ export default defineComponent({
);
const movePanelChoices = computed(() => {
- return insightsStore.dashboards;
+ return insightsStore.dashboards.filter((dashboard) => dashboard.id !== props.primaryKey);
});
const stagedPanels = ref[]>([]);
@@ -278,7 +281,7 @@ export default defineComponent({
async function saveChanges() {
if (!currentDashboard.value) return;
- if (stagedPanels.value.length === 0) {
+ if (stagedPanels.value.length === 0 && panelsToBeDeleted.value.length === 0) {
editMode.value = false;
return;
}
@@ -295,11 +298,15 @@ export default defineComponent({
];
try {
- await api.patch(`/dashboards/${props.primaryKey}`, {
- panels: updatedPanels,
- });
+ if (stagedPanels.value.length > 0) {
+ await api.patch(`/dashboards/${props.primaryKey}`, {
+ panels: updatedPanels,
+ });
+ }
- await api.delete(`/panels`, { data: panelsToBeDeleted.value });
+ if (panelsToBeDeleted.value.length > 0) {
+ await api.delete(`/panels`, { data: panelsToBeDeleted.value });
+ }
await insightsStore.hydrate();
@@ -343,13 +350,14 @@ export default defineComponent({
async function movePanel() {
movePanelLoading.value = true;
+ const currentPanel = panels.value.find((panel) => panel.id === movePanelID.value);
+
try {
- await api.patch(`/panels/${movePanelID.value}`, {
+ await api.post(`/panels`, {
+ ...omit(currentPanel, ['id']),
dashboard: movePanelTo.value,
});
- stagedPanels.value = stagedPanels.value.filter((panel) => panel.id !== movePanelID.value);
-
await insightsStore.hydrate();
movePanelID.value = null;