diff --git a/web-frontend/modules/dashboard/store/dashboardApplication.js b/web-frontend/modules/dashboard/store/dashboardApplication.js
index 20ecb364d..af4294519 100644
--- a/web-frontend/modules/dashboard/store/dashboardApplication.js
+++ b/web-frontend/modules/dashboard/store/dashboardApplication.js
@@ -174,19 +174,32 @@ export const actions = {
       }
     })
   },
-  async createWidget({ dispatch }, { dashboard, widget }) {
-    const { data } = await WidgetService(this.$client).create(
-      dashboard.id,
-      widget
-    )
+  async createWidget({ commit, dispatch }, { dashboard, widget }) {
+    const tempId = Date.now()
+    commit('ADD_WIDGET', { id: tempId, ...widget })
+    let widgetData
+    try {
+      const { data } = await WidgetService(this.$client).create(
+        dashboard.id,
+        widget
+      )
+      widgetData = data
+    } catch (error) {
+      commit('DELETE_WIDGET', tempId)
+      throw error
+    }
     return await dispatch('handleNewWidgetCreated', {
-      ...data,
+      tempWidgetId: tempId,
+      createdWidget: widgetData,
     })
   },
-  async handleNewWidgetCreated({ commit, dispatch }, createdWidget) {
-    commit('ADD_WIDGET', createdWidget)
-    await dispatch('fetchNewDataSources', createdWidget.dashboard_id)
+  async handleNewWidgetCreated(
+    { commit, dispatch },
+    { tempWidgetId, createdWidget }
+  ) {
+    commit('UPDATE_WIDGET', { widgetId: tempWidgetId, values: createdWidget })
     dispatch('selectWidget', createdWidget.id)
+    await dispatch('fetchNewDataSources', createdWidget.dashboard_id)
   },
   async dispatchDataSource({ commit }, dataSourceId) {
     commit('UPDATE_DATA', { dataSourceId, values: null })