From 7c799b7206ffc687aab56a6c658b656d4ad4f677 Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Thu, 18 Dec 2025 10:36:07 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20am=C3=A9liorer=20la=20gestion=20des=20ac?= =?UTF-8?q?tivit=C3=A9s=20de=20codage=20et=20simplifier=20le=20formatage?= =?UTF-8?q?=20des=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/home/Activity.vue | 155 ++++++++++++++----------------- 1 file changed, 69 insertions(+), 86 deletions(-) diff --git a/app/components/home/Activity.vue b/app/components/home/Activity.vue index 12c5dff..46eddbe 100644 --- a/app/components/home/Activity.vue +++ b/app/components/home/Activity.vue @@ -3,58 +3,67 @@ import type { UseTimeAgoMessages } from '@vueuse/core' import type { Activity } from '~~/types' import { activityMessages, IDEs } from '~~/types' -const { locale, locales, t } = useI18n({ - useScope: 'local', -}) +const { locale, locales, t } = useI18n({ useScope: 'local' }) const { data: activity, refresh } = await useAsyncData('activity', () => $fetch('/api/activity')) -useIntervalFn(async () => await refresh(), 5000) -const codingActivity = computed(() => { - const activities = activity.value!.data.activities.filter(activity => IDEs.some(ide => ide.name === activity.name)).map(activity => ({ - ...activity, - name: activity.assets?.small_text === 'Cursor' ? 'Cursor' : activity.name, - })) +useIntervalFn(refresh, 5000) - return activities.length > 1 - ? activities[Math.floor(Math.random() * activities.length)] - : activities[0] +const codingActivities = computed(() => { + const list = activity.value?.data.activities ?? [] + return list + .filter(a => IDEs.some(ide => ide.name === a.name)) + .map(a => ({ ...a, name: a.assets?.small_text === 'Cursor' ? 'Cursor' : a.name })) }) -const currentLocale = computed(() => locales.value.find((l: { code: string }) => l.code === locale.value)) +const codingActivity = computed(() => { + if (!codingActivities.value.length) return null + return codingActivities.value.length > 1 + ? codingActivities.value[Math.floor(Math.random() * codingActivities.value.length)] + : codingActivities.value[0] +}) + +const currentLocale = computed(() => locales.value.find((l: { code: string }) => l.code === locale.value)?.code ?? 'en') const isActive = computed(() => { - if (!codingActivity.value) - return + const act = codingActivity.value + if (!act) return false - const { name, details, state } = codingActivity.value + const { name, details = '', state = '' } = act - return name === 'Visual Studio Code' || name === 'Cursor' - ? !details.includes('Idling') - : state.toLowerCase().includes('editing') + if (name === 'Visual Studio Code' || name === 'Cursor') + return !details.includes('Idling') + + return state.toLowerCase().includes('editing') }) -const getActivity = computed(() => { - if (!codingActivity.value) - return +type FormattedActivity = { + name: string + project: string + state: string + start: { + ago: string + formatted: { date: string; time: string } + } +} | null - const { name, details, state, timestamps } = codingActivity.value +const formattedActivity = computed(() => { + const act = codingActivity.value + if (!act) return null + + const { name, details = '', state = '', timestamps } = act const project = details - ? details - .charAt(0) - .toUpperCase() - + details - .slice(1) - .replace('Workspace:', '') - .trim() + ? (details.charAt(0).toUpperCase() + details.slice(1).replace('Workspace:', '').trim()) : '' - const stateWord = state && state.split(' ').length >= 2 ? state.split(' ')[1] : t('secret') + const stateWord = (state && state.split(' ').length >= 2 ? state.split(' ')[1] : t('secret')) as string const ago = useTimeAgo(timestamps.start, { messages: activityMessages[locale.value as keyof typeof activityMessages] as UseTimeAgoMessages, }).value - const formatDate = (date: number, format: string) => useDateFormat(date, format, { locales: currentLocale.value?.code ?? 'en' }).value + + const formatDate = (date: number, format: string) => + useDateFormat(date, format, { locales: currentLocale.value }).value return { name, @@ -62,96 +71,70 @@ const getActivity = computed(() => { state: stateWord, start: { ago, - formated: { + formatted: { date: formatDate(timestamps.start, 'DD MMM YYYY'), time: formatDate(timestamps.start, 'HH:mm'), }, }, } }) + +const editorIcon = computed(() => { + const name = formattedActivity.value?.name ?? codingActivity.value?.name + return IDEs.find(ide => ide.name === name)?.icon ?? 'file' +})