Les administrateurs ont besoin d'un moyen simple pour inviter les parents à rejoindre la plateforme. Cette fonctionnalité permet de générer des codes d'invitation uniques (8 caractères alphanumériques) avec une validité de 48h, de les envoyer par email, et de les activer via une page publique dédiée qui crée automatiquement le compte parent. L'interface d'administration offre l'envoi unitaire et en masse, le renvoi, le filtrage par statut, ainsi que la visualisation de l'état de chaque invitation (en attente, activée, expirée).
119 lines
2.4 KiB
JavaScript
119 lines
2.4 KiB
JavaScript
import js from '@eslint/js';
|
|
import tseslint from 'typescript-eslint';
|
|
import sveltePlugin from 'eslint-plugin-svelte';
|
|
import svelteParser from 'svelte-eslint-parser';
|
|
import prettier from 'eslint-config-prettier';
|
|
|
|
export default tseslint.config(
|
|
// Base JavaScript recommended rules
|
|
js.configs.recommended,
|
|
|
|
// TypeScript recommended rules
|
|
...tseslint.configs.recommended,
|
|
|
|
// Global ignores
|
|
{
|
|
ignores: [
|
|
'.svelte-kit/**',
|
|
'build/**',
|
|
'dist/**',
|
|
'node_modules/**',
|
|
'playwright-report/**',
|
|
'test-results/**',
|
|
'test-results-debug/**',
|
|
'*.config.js',
|
|
'*.config.ts'
|
|
]
|
|
},
|
|
|
|
// TypeScript files
|
|
{
|
|
files: ['**/*.ts'],
|
|
languageOptions: {
|
|
parserOptions: {
|
|
sourceType: 'module',
|
|
ecmaVersion: 2020
|
|
},
|
|
globals: {
|
|
window: 'readonly',
|
|
document: 'readonly',
|
|
console: 'readonly',
|
|
process: 'readonly',
|
|
__dirname: 'readonly',
|
|
__filename: 'readonly',
|
|
Promise: 'readonly',
|
|
Set: 'readonly',
|
|
Map: 'readonly'
|
|
}
|
|
},
|
|
rules: {
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_'
|
|
}
|
|
],
|
|
'no-console': ['warn', { allow: ['warn', 'error'] }]
|
|
}
|
|
},
|
|
|
|
// Svelte files
|
|
{
|
|
files: ['**/*.svelte'],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
parser: tseslint.parser,
|
|
sourceType: 'module',
|
|
ecmaVersion: 2020,
|
|
extraFileExtensions: ['.svelte']
|
|
},
|
|
globals: {
|
|
window: 'readonly',
|
|
document: 'readonly',
|
|
console: 'readonly',
|
|
process: 'readonly',
|
|
Promise: 'readonly',
|
|
Set: 'readonly',
|
|
Map: 'readonly',
|
|
Event: 'readonly',
|
|
SubmitEvent: 'readonly',
|
|
fetch: 'readonly',
|
|
HTMLElement: 'readonly',
|
|
HTMLDivElement: 'readonly',
|
|
HTMLSelectElement: 'readonly',
|
|
setInterval: 'readonly',
|
|
clearInterval: 'readonly',
|
|
URL: 'readonly',
|
|
URLSearchParams: 'readonly',
|
|
HTMLInputElement: 'readonly',
|
|
KeyboardEvent: 'readonly',
|
|
AbortController: 'readonly',
|
|
DOMException: 'readonly',
|
|
setTimeout: 'readonly',
|
|
clearTimeout: 'readonly',
|
|
DragEvent: 'readonly',
|
|
File: 'readonly',
|
|
Blob: 'readonly'
|
|
}
|
|
},
|
|
plugins: {
|
|
svelte: sveltePlugin
|
|
},
|
|
rules: {
|
|
...sveltePlugin.configs.recommended.rules,
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_'
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
// Prettier (disable conflicting rules)
|
|
prettier
|
|
);
|