Skip to content
Snippets Groups Projects
Commit 460399e4 authored by sandcha's avatar sandcha
Browse files

Détache sur le bouton Estimer la mise à jour du badge de la requête de calcul

parent 6d12827f
Branches
Tags 0.0.747
1 merge request!24Corrige l'affichage sur petit écran, corrige l'ordre d'affichage des impacts et permet la suppression de carte communale
Pipeline #21535 failed
......@@ -7,12 +7,22 @@ import {
publicApiConfigLexImpactBack,
} from "$lib/config"
import {
getBaseCasTypes,
getBaseStrates,
getBaseTotal,
getAmendementDotations,
updateAmendementCasTypes,
updateAmendementStrates,
updateAmendementTotal,
} from "$lib/state.svelte"
const DOTATIONS_BACK_API_URL_ENPOINT_CALCULATE =
publicApiConfigLexImpactBack.endpointUrlCalculate
export async function calculateDotations(
async function calculateDotations(
request: ApiCalculateRequest,
): Promise<ApiCalculateResponse> {
console.debug("calculateDotations...")
......@@ -50,3 +60,48 @@ export async function calculateDotations(
return result
}
export async function requestCalculateDotation() {
let request: ApiCalculateRequest = {
base: {
dotations: {},
casTypes: getBaseCasTypes(),
strates: [],
total: {},
},
}
request.base.dotations = {}
request.base.strates = getBaseStrates()
request.base.total = getBaseTotal()
request.base.casTypes = getBaseCasTypes()
request.amendement = {
dotations: getAmendementDotations(), // Record<string, number>
// on repart de la loi en vigueur 'base' pour tous les calculs d'impact
// TODO adapter pour le PLF
casTypes: getBaseCasTypes(), // Commune
strates: getBaseStrates(), // StrateImpact
total: getBaseTotal(), // DotationSummaryTotal
}
try {
const result: ApiCalculateResponse = await calculateDotations(request)
if (
"amendement" in result &&
result.amendement &&
Object.keys(result.amendement).length > 0
) {
updateAmendementStrates(result.amendement.strates)
updateAmendementTotal(result.amendement.total)
updateAmendementCasTypes(result.amendement.casTypes)
}
// TODO traiter l'attribut 'error'
} catch (error: unknown) {
console.error(
"Erreur lors de l'estimation : ",
error instanceof Error ? error.message : String(error)
)
}
}
......@@ -3,78 +3,32 @@
* BUTTON 'ESTIMER LES IMPACTS'
*/
import type { ApiCalculateRequest, ApiCalculateResponse } from "$lib/api"
import { calculateDotations } from "$lib/calculate"
import {
getBaseCasTypes,
getBaseStrates,
getBaseTotal,
getAmendementDotations,
updateAmendementCasTypes,
updateAmendementStrates,
updateAmendementTotal,
userState,
} from "$lib/state.svelte"
import { requestCalculateDotation } from "$lib/calculate"
import { userState } from "$lib/state.svelte"
import { trackEstimation } from "$lib/matomo"
let { title }: { title: string } = $props()
let badgeIsVisible = $state(false)
let runningEstimation = $state(false)
let request: ApiCalculateRequest = {
base: {
dotations: {},
casTypes: getBaseCasTypes(),
strates: [],
total: {},
},
}
async function requestCalculateDotation() {
async function onEstimationButtonClick() {
runningEstimation = true
if (
userState.amendement &&
Object.keys(userState.amendement.dotations).length > 0
) {
badgeIsVisible = false
request.base.dotations = {}
request.base.strates = getBaseStrates()
request.base.total = getBaseTotal()
request.base.casTypes = getBaseCasTypes()
request.amendement = {
dotations: getAmendementDotations(), // Record<string, number>
// on repart de la loi en vigueur 'base' pour tous les calculs d'impact
// TODO adapter pour le PLF
casTypes: getBaseCasTypes(), // Commune
strates: getBaseStrates(), // StrateImpact
total: getBaseTotal(), // DotationSummaryTotal
}
runningEstimation = true
await requestCalculateDotation()
try {
const result: ApiCalculateResponse = await calculateDotations(request)
if (
"amendement" in result &&
result.amendement &&
Object.keys(result.amendement).length > 0
) {
updateAmendementStrates(result.amendement.strates)
updateAmendementTotal(result.amendement.total)
updateAmendementCasTypes(result.amendement.casTypes)
}
//TODO traiter l'attribut 'error'
} catch (error) {
console.error("Erreur lors de l'estimation : ", error)
} finally {
runningEstimation = false
}
} else {
// pas d'amendement => rien à estimer
runningEstimation = false
badgeIsVisible = true
}
// track le clic sur le bouton même s'il n'y a pas de nouveau calcul à réaliser
trackEstimation()
hideBadgeAfterDelay()
}
......@@ -89,10 +43,7 @@
<div class="relative my-4 inline-block">
<button
class="ease-out-back flex flex-row items-center gap-2 rounded border border-white bg-le-bleu px-5 py-2 text-sm font-bold uppercase tracking-[0.085em] text-white shadow-lg transition-all duration-200 hover:border-le-bleu hover:bg-gray-100 hover:text-le-bleu active:bg-gray-200 disabled:scale-90 disabled:opacity-0 lg:right-5 xl:right-10"
onclick={() => {
requestCalculateDotation()
trackEstimation()
}}
onclick={() => onEstimationButtonClick()}
>
{#if runningEstimation}
<svg
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment