From: Jérôme Benoit Date: Wed, 25 Mar 2026 20:55:02 +0000 (+0100) Subject: refactor(webui): extract useExecuteAction composable to eliminate duplication X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=94ca77c31986926a813a36dc2a2afc8ecd6e002c;p=e-mobility-charging-stations-simulator.git refactor(webui): extract useExecuteAction composable to eliminate duplication --- diff --git a/ui/web/src/components/charging-stations/CSConnector.vue b/ui/web/src/components/charging-stations/CSConnector.vue index 661ba834..da93ee20 100644 --- a/ui/web/src/components/charging-stations/CSConnector.vue +++ b/ui/web/src/components/charging-stations/CSConnector.vue @@ -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, 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) { diff --git a/ui/web/src/components/charging-stations/CSData.vue b/ui/web/src/components/charging-stations/CSData.vue index 417620da..181f52ac 100644 --- a/ui/web/src/components/charging-stations/CSData.vue +++ b/ui/web/src/components/charging-stations/CSData.vue @@ -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, 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( diff --git a/ui/web/src/composables/Utils.ts b/ui/web/src/composables/Utils.ts index 1c1613da..f4117b4f 100644 --- a/ui/web/src/composables/Utils.ts +++ b/ui/web/src/composables/Utils.ts @@ -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 => { 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, successMsg: string, errorMsg: string): void => { + action + .then(() => { + emit('need-refresh') + return $toast.success(successMsg) + }) + .catch((error: unknown) => { + $toast.error(errorMsg) + console.error(`${errorMsg}:`, error) + }) + } +} diff --git a/ui/web/src/composables/index.ts b/ui/web/src/composables/index.ts index 7095b842..8b8fb6ef 100644 --- a/ui/web/src/composables/index.ts +++ b/ui/web/src/composables/index.ts @@ -10,5 +10,6 @@ export { resetToggleButtonState, setToLocalStorage, useChargingStations, + useExecuteAction, useUIClient, } from './Utils'