import axios from 'axios' import { onMounted, shallowRef } from 'vue' import * as marked from 'marked' import SyAlert from '../../components/SyAlert/SyAlert.vue' type GitHubRelease = { id: number name?: string | null tag_name?: string | null published_at: string body?: string | null } type ReleaseAlert = { id: string releaseVersion: string message: string type: 'success' | 'info' | 'warning' | 'error' variant: 'tonal' | 'outlined' link?: { href: string, text: string } components?: string[] } const releaseAlerts: ReleaseAlert[] = [ { id: 'form-success-messages-hidden', releaseVersion: 'v1.1.0', message: 'Cette version modifie le comportement des composants de formulaire, les messages de succès sont désormais masqués par défaut. Cette modification répond à la fois à des besoins projets et à l\'harmonisation des différents thèmes (CNAM, PAG, Amelipro). Pour les projets souhaitant afficher les messages de succès vous pouvez simplement le faire via la prop `showSuccessMessages`. Les composants concernés sont :', type: 'warning', variant: 'tonal', components: [ 'SyTextField', 'SyTextArea', 'SyAutocomplete', 'SySelect', 'SyCheckbox', 'SyCheckBoxGroup', 'SyRadioGroup', 'DatePicker', 'PeriodField', 'MonthPicker', 'LunarCalendar', 'PeriodField', 'NirField', 'PasswordField', 'PhoneField', 'Captcha', ], }, { id: 'node-18-decommission', releaseVersion: 'v1.1.0', message: 'En lien avec le Starter Kit, fin de support de Node 18.', type: 'warning', variant: 'tonal', }, { id: 'tokens-simplification', releaseVersion: 'v1.0.27', message: 'Nous avons procédé à une simplification des tokens contraint par l\'ajout du thème Amelipro, merci de vous référer à la page des ', type: 'warning', variant: 'tonal', link: { href: '/?path=/docs/design-tokens-couleurs--docs', text: 'couleurs' }, }, { id: 'starter-kit-2-0-32', releaseVersion: 'v1.0.24', message: 'Il est conseillé de faire une montée de version du Starter Kit en 2.0.32', type: 'warning', variant: 'tonal', }, ] export default { title: 'Démarrer/Releases', component: SyAlert, } export const List = { render: () => { return { components: { SyAlert }, setup() { const releases = shallowRef([]) const errorMessage = shallowRef('') const fetchReleases = async () => { try { const { data } = await axios.get('https://api.github.com/repos/assurance-maladie-digital/design-system-v3/releases') releases.value = data } // eslint-disable-next-line @typescript-eslint/no-unused-vars catch (error) { errorMessage.value = 'Une erreur est survenue lors de la récupération des releases.' } } const formatDate = (date: string | number | Date) => { return new Date(date).toLocaleDateString() } const formatMarkdown = (markdown?: string | null) => { const html = marked.parse(markdown ?? '') as string return html.replace(/
[\s\S]*?<\/blockquote>/g, '') } const getReleaseAlerts = (release: GitHubRelease) => { return releaseAlerts.filter(alert => [release.name, release.tag_name].some(value => value?.includes(alert.releaseVersion)), ) } onMounted(() => { fetchReleases().then(r => r) }) return { releases, errorMessage, formatDate, formatMarkdown, getReleaseAlerts, } }, template: `

Releases

{{ errorMessage }}

{{ release.name }} ({{ formatDate(release.published_at) }})


`, } }, tags: ['!dev'], }