app: Ajoute URL & facteur d’importance @ mock
This commit is contained in:
		
							parent
							
								
									268289f1f7
								
							
						
					
					
						commit
						c5a408251c
					
				|  | @ -15,7 +15,8 @@ export const terms = { | |||
|         name: 'Grippe', | ||||
|         alias: [], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000035, | ||||
|         weight: -10.68959934320834, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Grippe', | ||||
|     }, | ||||
|     Q154882: { | ||||
|         id: 'Q154882', | ||||
|  | @ -24,14 +25,16 @@ export const terms = { | |||
|             'Maladie des légionnaires', | ||||
|         ], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000015, | ||||
|         weight: -11.05394782419729, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Légionellose', | ||||
|     }, | ||||
|     Q155098: { | ||||
|         id: 'Q155098', | ||||
|         name: 'Leptospirose', | ||||
|         alias: [], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.00001, | ||||
|         weight: -11.3969031483456 , | ||||
|         url: 'https://fr.wikipedia.org/wiki/Leptospirose', | ||||
|     }, | ||||
|     Q326663: { | ||||
|         id: 'Q326663', | ||||
|  | @ -47,23 +50,28 @@ export const terms = { | |||
|             'Maladie de Kumlinge', | ||||
|         ], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000001, | ||||
|         weight: -13.862833353191204, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Encéphalite_à_tiques', | ||||
|     }, | ||||
|     Q133780: { | ||||
|         id: 'Q133780', | ||||
|         name: 'Peste', | ||||
|         alias: [], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000032, | ||||
|         weight: -10.356303313736584, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Peste', | ||||
|     }, | ||||
|     Q38933: { | ||||
|         id: 'Q38933', | ||||
|         name: 'Fièvre', | ||||
|         alias: [ | ||||
|             'Pyrexie', | ||||
|             'Hyperthermie', | ||||
|             'État fébrile', | ||||
|         ], | ||||
|         types: [termTypes.symptom], | ||||
|         weight: 0, | ||||
|         weight: -10.83729224261442, | ||||
|         url: 'https://wikimedi.ca/wiki/Fièvre', | ||||
|     }, | ||||
|     Q474959: { | ||||
|         id: 'Q474959', | ||||
|  | @ -72,7 +80,8 @@ export const terms = { | |||
|             'Douleur musculaire', | ||||
|         ], | ||||
|         types: [termTypes.symptom], | ||||
|         weight: 0, | ||||
|         weight: -12.475240614075794, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Myalgie', | ||||
|     }, | ||||
|     Q86: { | ||||
|         id: 'Q86', | ||||
|  | @ -81,7 +90,8 @@ export const terms = { | |||
|             'Mal de tête', | ||||
|         ], | ||||
|         types: [termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -11.042885864744003, | ||||
|         url: 'https://wikimedi.ca/wiki/C%C3%A9phal%C3%A9e', | ||||
|     }, | ||||
|     Q1115038: { | ||||
|         id: 'Q1115038', | ||||
|  | @ -91,14 +101,16 @@ export const terms = { | |||
|             'Écoulement nasal', | ||||
|         ], | ||||
|         types: [termTypes.symptom], | ||||
|         weight: 0, | ||||
|         weight: -13.291547222741679, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Rhinorrh%C3%A9e', | ||||
|     }, | ||||
|     Q9690: { | ||||
|         id: 'Q9690', | ||||
|         name: 'Fatigue', | ||||
|         alias: [], | ||||
|         types: [termTypes.symptom], | ||||
|         weight: 0, | ||||
|         weight: -12.8932707907014, | ||||
|         url: 'https://wikimedi.ca/wiki/Fatigue', | ||||
|     }, | ||||
|     Q127076: { | ||||
|         id: 'Q127076', | ||||
|  | @ -109,7 +121,8 @@ export const terms = { | |||
|             'Vomir', | ||||
|         ], | ||||
|         types: [termTypes.symptom, termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -11.76320423121043, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Vomissement', | ||||
|     }, | ||||
|     Q178061: { | ||||
|         id: 'Q178061', | ||||
|  | @ -118,7 +131,8 @@ export const terms = { | |||
|             'Insuffisance circulatoire aiguë', | ||||
|         ], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000038, | ||||
|         weight: -12.48541367835562, | ||||
|         url: 'https://fr.wikipedia.org/wiki/État_de_choc_circulatoire', | ||||
|     }, | ||||
|     Q35805: { | ||||
|         id: 'Q35805', | ||||
|  | @ -128,53 +142,64 @@ export const terms = { | |||
|             'Toussote', | ||||
|         ], | ||||
|         types: [termTypes.symptom, termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -12.62883965458582, | ||||
|         url: 'https://wikimedi.ca/wiki/Toux', | ||||
|     }, | ||||
|     Q647099: { | ||||
|         id: 'Q647099', | ||||
|         name: 'Hémoptysie', | ||||
|         alias: [ | ||||
|             'Expectoration sanglante', | ||||
|             'Crachat sanguin', | ||||
|         ], | ||||
|         types: [termTypes.symptom], | ||||
|         weight: 0, | ||||
|         weight: -11.816428715881282, | ||||
|         url: 'https://wikimedi.ca/wiki/Hémoptysies', | ||||
|     }, | ||||
|     Q653197: { | ||||
|         id: 'Q653197', | ||||
|         name: 'Rash', | ||||
|         alias: [], | ||||
|         alias: [ | ||||
|             'Éruption cutanée', | ||||
|         ], | ||||
|         types: [termTypes.symptom, termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -13.089336365426849, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Rash_(médecine)', | ||||
|     }, | ||||
|     Q160796: { | ||||
|         id: 'Q160796', | ||||
|         name: 'Syndrome confusionnel', | ||||
|         alias: [ | ||||
|             'Confusion mentale', | ||||
|             'Délirium', | ||||
|         ], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.000004, | ||||
|         weight: -12.406564919730442, | ||||
|         url: 'https://wikimedi.ca/wiki/Délirium', | ||||
|     }, | ||||
|     Q186235: { | ||||
|         id: 'Q186235', | ||||
|         name: 'Myocardite', | ||||
|         alias: [], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.0000075, | ||||
|         weight: -11.874480758774315, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Myocardite', | ||||
|     }, | ||||
|     Q476921: { | ||||
|         id: 'Q476921', | ||||
|         name: 'Insuffisance rénale', | ||||
|         alias: [], | ||||
|         types: [termTypes.disease], | ||||
|         weight: 0.0000046, | ||||
|         weight: -12.359763775778456, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Insuffisance_rénale', | ||||
|     }, | ||||
|     Q281289: { | ||||
|         id: 'Q281289', | ||||
|         name: 'Photophobie', | ||||
|         alias: [], | ||||
|         types: [termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -12.568109501931065, | ||||
|         url: 'https://fr.wikipedia.org/wiki/Photophobie', | ||||
|     }, | ||||
|     Q159557: { | ||||
|         id: 'Q159557', | ||||
|  | @ -185,7 +210,8 @@ export const terms = { | |||
|             'Perte de connaissance', | ||||
|         ], | ||||
|         types: [termTypes.sign], | ||||
|         weight: 0, | ||||
|         weight: -11.415040299689283, | ||||
|         url: 'https://wikimedi.ca/wiki/Coma', | ||||
|     }, | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,36 +14,102 @@ export const termTypes = { | |||
|     sign: 'Signe', | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Crée un valideur de type de propriété React supportant l’extension | ||||
|  * `.isRequired` pour marquer une propriété comme requise. | ||||
|  * | ||||
|  * @param basicValidator Fonction basique de validation. | ||||
|  * @return Fonction augmentée supportant l’extension `.isRequired`. | ||||
|  */ | ||||
| const makePropType = basicValidator => | ||||
| { | ||||
|     const validator = (props, propName, componentName) => | ||||
|     { | ||||
|         // Version optionnelle : on n’appelle le valideur que si la propriété a
 | ||||
|         // été passée
 | ||||
|         if (propName in props) | ||||
|         { | ||||
|             return basicValidator(props, propName, componentName); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     validator.isRequired = (props, propName, componentName) => | ||||
|     { | ||||
|         // Version obligatoire : on jette une erreur si la propriété n’a pas
 | ||||
|         // été passée puis on procède à la validation
 | ||||
|         if (!(propName in props)) | ||||
|         { | ||||
|             return new Error( | ||||
|                 `Missing prop “${propName}” in props supplied to ` | ||||
|                 + `${componentName}.` | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         return basicValidator(props, propName, componentName); | ||||
|     }; | ||||
| 
 | ||||
|     return validator; | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Type de terme. | ||||
|  */ | ||||
| export const TermType = PropTypes.oneOf(Object.values(termTypes)); | ||||
| 
 | ||||
| /** | ||||
|  * URL. | ||||
|  */ | ||||
| const URL = makePropType((props, propName, componentName) => | ||||
| { | ||||
|     const value = props[propName]; | ||||
| 
 | ||||
|     if (typeof value !== 'string') | ||||
|     { | ||||
|         return new Error( | ||||
|             `URL passed as ${componentName}’s ${propName} prop must be ` | ||||
|             + `a string, not a ${typeof value}.` | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     if (!value.startsWith('http://') && !value.startsWith('https://')) | ||||
|     { | ||||
|         return new Error( | ||||
|             `URL “${value}”, passed as ${componentName}’s ${propName} ` | ||||
|             + `prop, does not start with “http://” or “https://”.` | ||||
|         ); | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Terme. | ||||
|  * | ||||
|  * Peut être une maladie, un symptôme ou un signe. | ||||
|  */ | ||||
| export const Term = PropTypes.exact({ | ||||
|     // Identifiant unique
 | ||||
|     id: PropTypes.string.isRequired, | ||||
| 
 | ||||
|     // Nom canonique
 | ||||
|     name: PropTypes.string.isRequired, | ||||
| 
 | ||||
|     // Noms alternatifs
 | ||||
|     alias: PropTypes.arrayOf(PropTypes.string).isRequired, | ||||
| 
 | ||||
|     // Types (maladie, symptôme, signe)
 | ||||
|     types: PropTypes.arrayOf(TermType).isRequired, | ||||
| 
 | ||||
|     // Facteur d’importance
 | ||||
|     weight: PropTypes.number.isRequired, | ||||
| 
 | ||||
|     // Adresse de la ressource de référence
 | ||||
|     url: URL.isRequired, | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Relation entre deux termes. | ||||
|  */ | ||||
| export const Relation = (props, propName, componentName) => | ||||
| export const Relation = makePropType((props, propName, componentName) => | ||||
| { | ||||
|     if (!(propName in props)) | ||||
|     { | ||||
|         return new Error( | ||||
|             `Missing ${propName} in props supplied to ${componentName}.` | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     const value = props[propName]; | ||||
| 
 | ||||
|     if (!Array.isArray(value)) | ||||
|  | @ -59,14 +125,4 @@ export const Relation = (props, propName, componentName) => | |||
|             `Relation ${propName} must contain exactly two entries.` | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     if ( | ||||
|         typeof value[0] !== 'string' | ||||
|         || typeof value[1] !== 'string' | ||||
|     ) | ||||
|     { | ||||
|         return new Error( | ||||
|             `Entries of relation ${propName} must be string IDs.` | ||||
|         ); | ||||
|     } | ||||
| }; | ||||
| }); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue