]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(webui): extract useExecuteAction composable to eliminate duplication
authorJérôme Benoit <jerome.benoit@sap.com>
Wed, 25 Mar 2026 20:55:02 +0000 (21:55 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Wed, 25 Mar 2026 20:55:02 +0000 (21:55 +0100)
ui/web/src/components/charging-stations/CSConnector.vue
ui/web/src/components/charging-stations/CSData.vue
ui/web/src/composables/Utils.ts
ui/web/src/composables/index.ts

index 661ba834d984771d3fe1bcd214ee80ccb5097edc..da93ee203a890d519736269712c1bb197732fbd6 100644 (file)
@@ -73,7 +73,7 @@ import type { ConnectorStatus, OCPPVersion, Status } from '@/types'
 import Button from '@/components/buttons/Button.vue'
 import StateButton from '@/components/buttons/StateButton.vue'
 import ToggleButton from '@/components/buttons/ToggleButton.vue'
-import { useUIClient } from '@/composables'
+import { useExecuteAction, useUIClient } from '@/composables'
 
 const props = defineProps<{
   atgStatus?: Status
@@ -91,17 +91,7 @@ const uiClient = useUIClient()
 
 const $toast = useToast()
 
-const executeAction = (action: Promise<unknown>, successMsg: string, errorMsg: string): void => {
-  action
-    .then(() => {
-      $emit('need-refresh')
-      return $toast.success(successMsg)
-    })
-    .catch((error: Error) => {
-      $toast.error(errorMsg)
-      console.error(`${errorMsg}:`, error)
-    })
-}
+const executeAction = useExecuteAction($emit)
 
 const stopTransaction = (): void => {
   if (props.connector.transactionId == null) {
index 417620da850c6a53dfb611c36ec07a3a726a1fdd..181f52acd0559163d7a8ed3e2b5338f24202d6ce 100644 (file)
@@ -143,7 +143,12 @@ import Button from '@/components/buttons/Button.vue'
 import StateButton from '@/components/buttons/StateButton.vue'
 import ToggleButton from '@/components/buttons/ToggleButton.vue'
 import CSConnector from '@/components/charging-stations/CSConnector.vue'
-import { deleteFromLocalStorage, getLocalStorage, useUIClient } from '@/composables'
+import {
+  deleteFromLocalStorage,
+  getLocalStorage,
+  useExecuteAction,
+  useUIClient,
+} from '@/composables'
 
 interface ConnectorTableEntry {
   connector: ConnectorStatus
@@ -212,17 +217,7 @@ const uiClient = useUIClient()
 
 const $toast = useToast()
 
-const executeAction = (action: Promise<unknown>, successMsg: string, errorMsg: string): void => {
-  action
-    .then(() => {
-      $emit('need-refresh')
-      return $toast.success(successMsg)
-    })
-    .catch((error: Error) => {
-      $toast.error(errorMsg)
-      console.error(`${errorMsg}:`, error)
-    })
-}
+const executeAction = useExecuteAction($emit)
 
 const startChargingStation = (): void => {
   executeAction(
index 1c1613dab4ebc886b8acd48223732c8870b3eeb3..f4117b4f1e6e5f3d196078cb4f275b06d31ac292 100644 (file)
@@ -1,6 +1,7 @@
 import type { Ref } from 'vue'
 
 import { getCurrentInstance } from 'vue'
+import { useToast } from 'vue-toast-notification'
 
 import type { ChargingStationData, UUIDv4 } from '@/types'
 
@@ -97,3 +98,18 @@ export const refreshChargingStations = async (): Promise<void> => {
   const response = await useUIClient().listChargingStations()
   ref.value = response.chargingStations as ChargingStationData[]
 }
+
+export const useExecuteAction = (emit: (event: 'need-refresh') => void) => {
+  const $toast = useToast()
+  return (action: Promise<unknown>, successMsg: string, errorMsg: string): void => {
+    action
+      .then(() => {
+        emit('need-refresh')
+        return $toast.success(successMsg)
+      })
+      .catch((error: unknown) => {
+        $toast.error(errorMsg)
+        console.error(`${errorMsg}:`, error)
+      })
+  }
+}
index 7095b842f2f5c9c8302c686b35f35b0207f4abd7..8b8fb6ef7db30010c04c212f1e8610ada02ba71d 100644 (file)
@@ -10,5 +10,6 @@ export {
   resetToggleButtonState,
   setToLocalStorage,
   useChargingStations,
+  useExecuteAction,
   useUIClient,
 } from './Utils'