{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf600 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Oblique;} {\colortbl;\red255\green255\blue255;\red199\green146\blue234;\red214\green222\blue235;\red127\green219\blue202; \red173\green219\blue103;\red217\green245\blue221;\red236\green196\blue141;\red130\green170\blue255;\red255\green203\blue139; \red215\green219\blue224;\red247\green140\blue108;\red95\green126\blue151;\red255\green88\blue116;\red99\green119\blue119; \red250\green243\blue159;} {\*\expandedcolortbl;;\csgenericrgb\c78039\c57255\c91765;\csgenericrgb\c83922\c87059\c92157;\csgenericrgb\c49804\c85882\c79216; \csgenericrgb\c67843\c85882\c40392;\csgenericrgb\c85098\c96078\c86667;\csgenericrgb\c92549\c76863\c55294;\csgenericrgb\c50980\c66667\c100000;\csgenericrgb\c100000\c79608\c54510; \csgenericrgb\c84314\c85882\c87843;\csgenericrgb\c96863\c54902\c42353;\csgenericrgb\c37255\c49412\c59216;\csgenericrgb\c100000\c34510\c45490;\csgenericrgb\c38824\c46667\c46667; \csgenericrgb\c98039\c95294\c62353;} \paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 \deftab708 \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \f0\fs22 \cf0 \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i\fs21 \cf2 export \f0\i0 \cf3 \cf2 interface\cf3 Kamoulox \{\ canard\cf4 :\cf3 \cf5 string\cf3 ;\ beaujolais\cf4 :\cf3 \cf5 number\cf3 ;\ mitterrand\cf4 :\cf3 \cf5 string\cf3 ;\ pressing\cf4 :\cf3 \cf5 string\cf3 ;\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i\fs21 \cf2 import \f0\i0 \cf3 \{ Component, OnInit \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 @angular/core\cf6 "\cf3 ;\ \f1\i \cf2 import \f0\i0 \cf3 \{ FormGroup, FormControl \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 @angular/forms\cf6 "\cf3 ;\ \ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf8 @ \f1\i Component \f0\i0 \cf3 (\{\ selector: \cf6 "\cf7 kmx-form\cf6 "\cf3 ,\ template: \cf5 `\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf3 \cf4
\ \cf3 \cf5 `\ \cf3 \})\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i \cf2 export \f0\i0 \cf3 \cf2 class\cf3 \cf9 FormComponent\cf3 \{\ form \cf2 =\cf3 \cf4 new\cf3 \cf9 FormGroup\cf3 (\{\ canard: \cf4 new\cf3 \cf9 FormControl\cf3 (),\ beaujolais: \cf4 new\cf3 \cf9 FormControl\cf3 (),\ mitterrand: \cf4 new\cf3 \cf9 FormControl\cf3 (),\ pressing: \cf4 new\cf3 \cf9 FormControl\cf3 ()\ \});\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i\fs21 \cf2 export \f0\i0 \cf3 \cf2 type\cf3 FieldConfig \cf2 =\cf3 \{\ label\cf4 ?:\cf3 \cf5 string\cf3 ;\ visible\cf4 ?:\cf3 \cf5 boolean\cf3 ;\ \}; \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i\fs21 \cf2 export \f0\i0 \cf3 \cf2 function\cf3 \f1\i \cf8 mitterrandRule \f0\i0 \cf6 (\cf10 beaujolais\cf6 )\cf3 \{\ \cf2 const \f1\i \cf8 visible\cf2 \f0\i0 = \f1\i \cf3 beaujolais\cf2 \f0\i0 > \f1\i \f0\i0 \cf11 100\cf3 ;\ \f1\i \cf2 return \f0\i0 \cf3 \{ config: \{ visible \} \};\ \}\ \f1\i \cf2 export \f0\i0 \cf3 \cf2 function\cf3 \f1\i \cf8 pressingRule \f0\i0 \cf6 (\cf10 beaujolais\cf3 , \cf10 mitterrand\cf6 )\cf3 \{\ \cf8 const \f1\i \cf2 \cf8 label\cf2 \f0\i0 =\ \f1\i \cf3 beaujolais\cf2 \f0\i0 === \f1\i \f0\i0 \cf11 101 \f1\i \cf2 \f0\i0 && \f1\i \cf3 mitterrand\cf2 \f0\i0 === \f1\i \f0\i0 \cf6 "\cf7 homard\cf6 "\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf3 \cf2 ?\cf3 \cf6 "\cf7 youpi\cf6 "\ \cf3 \cf2 :\cf3 \cf6 "\cf7 pressing\cf6 "\cf3 ;\ \f1\i \cf2 return \f0\i0 \cf3 \{ config: \{ label \} \};\ \}\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i \cf2 export \f0\i0 \cf3 \cf2 function\cf3 \f1\i \cf8 beaujolaisRule \f0\i0 \cf6 (\cf10 canard\cf6 )\cf3 \{\ \cf2 if\cf3 (canard \cf2 ===\cf3 \cf6 "\cf7 lucca\cf6 "\cf3 ) \f1\i \cf2 return \f0\i0 \cf3 \{ beaujolais: \cf11 101\cf12 ,\cf3 config: \{ disabled: \cf13 true\cf3 \} \};\ \f1\i \cf2 return \f0\i0 \cf3 \{\};\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf3 \cf14 // \f1\i Kamoulox d\'e9fini plus t\'f4t\cf2 \ import \f0\i0 \cf3 \{ Kamoulox \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 ./kamoulox.service\cf6 "\cf3 ; \f1\i \cf14 \ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf2 import \f0\i0 \cf3 \{ BehaviorSubject, Observable \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 rxjs\cf6 "\cf3 ;\ \f1\i \cf2 import \f0\i0 \cf3 \{ map \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 rxjs/operators\cf6 "\cf3 ;\ \ \f1\i \cf2 export \f0\i0 \cf3 \cf2 type\cf3 FieldConfig \cf2 =\cf3 \{\ label\cf4 ?:\cf3 \cf5 string\cf3 ;\ visible\cf4 ?:\cf3 \cf5 boolean\cf3 ;\ \};\ \f1\i \cf2 export \f0\i0 \cf3 \cf2 type\cf3 FieldConfig$ \cf2 =\cf3 \{\ [\cf9 key\cf3 \cf4 in\cf3 \cf4 keyof\cf3 \cf9 FieldConfig\cf3 ]\cf4 :\cf3 \cf9 Observable\cf3 <\cf9 FieldConfig\cf3 [\cf9 key\cf3 ]>;\ \};\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf2 type\cf3 Config<\cf9 T\cf3 > \cf2 =\cf3 \{\ [\cf9 key\cf3 \cf4 in\cf3 \cf4 keyof\cf3 \cf9 T\cf3 ]\cf4 :\cf3 \cf9 FieldConfig\cf3 ;\ \};\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i \cf2 export \f0\i0 \cf3 \cf2 type\cf3 KamouloxConfig \cf2 =\cf3 \cf9 Config\cf3 <\cf9 Kamoulox\cf3 >;\ \f1\i \cf2 export \f0\i0 \cf3 \cf2 class\cf3 \cf9 KamouloxConfigSubject\cf3 \f1\i \cf2 extends \f0\i0 \cf3 \cf5 BehaviorSubject\cf3 <\cf9 KamouloxConfig\cf3 > \{\ \cf14 // \f1\i Helpers pour acc\'e9der aux configs sp\'e9cifiques d'un champ\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f0\i0 \cf3 canard\cf4 :\cf3 \cf9 FieldConfig$\cf3 \cf2 =\cf3 \{\ label: \cf4 this \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 ( \f1\i \cf8 map \f0\i0 \cf3 (\cf6 (\cf10 c\cf6 )\cf3 \cf2 =>\cf3 c \f1\i \cf2 .\cf15 canard\cf2 . \f0\i0 \cf4 label\cf3 )),\ visible: \cf4 this \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 ( \f1\i \cf8 map \f0\i0 \cf3 (\cf6 (\cf10 c\cf6 )\cf3 \cf2 =>\cf3 c \f1\i \cf2 .\cf15 canard\cf2 . \f0\i0 \cf4 visible\cf3 )),\ \};\ \cf14 // \f1\i ... (idem pour chaque champ)\ \f0\i0 \cf3 \cf14 // \f1\i Note : pourrait \'eatre g\'e9r\'e9 dans un proxy \f0\i0 \cf3 \ \cf8 constructor\cf6 (\cf10 config\cf4 :\cf3 \cf9 KamouloxConfig\cf6 )\cf3 \{\ \cf4 super\cf3 (config);\ \}\ \cf14 // \f1\i Mise \'e0 jour d'une partie de la configuration\ \f0\i0 \cf3 \f1\i \cf8 update \f0\i0 \cf3 <\cf9 K\cf3 \f1\i \cf2 extends \f0\i0 \cf3 \cf4 keyof\cf3 \cf9 Kamoulox\cf3 >\cf6 (\cf10 key\cf4 :\cf3 \cf9 K\cf3 , \cf10 value\cf4 :\cf3 \cf9 Partial\cf3 <\cf9 FieldConfig\cf3 >\cf6 )\cf3 \{\ \cf4 this \f1\i \cf2 .\cf8 next \f0\i0 \cf3 (\{ \cf4 ...this \f1\i \cf2 . \f0\i0 \cf4 value\cf3 , [key]: \{ \cf4 ...this \f1\i \cf2 . \f0\i0 \cf4 value\cf3 [key], \cf4 ...\cf3 value \} \});\ \}\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i\fs21 \cf2 import \f0\i0 \cf3 \{ BehaviorSubject \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 rxjs\cf6 "\cf3 ;\ \f1\i \cf2 import \f0\i0 \cf3 \{ Kamoulox \} \f1\i \cf2 from \f0\i0 \cf3 \cf6 "\cf7 ./kamoulox.service\cf6 "\cf3 ;\ \ \f1\i \cf2 export \f0\i0 \cf3 \cf2 class\cf3 \cf9 KamouloxSubject\cf3 \f1\i \cf2 extends \f0\i0 \cf3 \cf5 BehaviorSubject\cf3 <\cf9 Kamoulox\cf3 > \{\ \cf14 // \f1\i Mise \'e0 jour d'une propri\'e9t\'e9 de l\'92objet \f0\i0 \cf3 \ \f1\i \cf8 change \f0\i0 \cf3 <\cf9 K\cf3 \f1\i \cf2 extends \f0\i0 \cf3 \cf4 keyof\cf3 \cf9 Kamoulox\cf3 >\cf6 (\cf10 key\cf4 :\cf3 \cf9 K\cf3 , \cf10 value\cf4 :\cf3 \cf9 Kamoulox\cf3 [\cf9 K\cf3 ]\cf6 )\cf3 \{\ \cf4 this \f1\i \cf2 .\cf8 next \f0\i0 \cf3 (\{ \cf4 ...this \f1\i \cf2 . \f0\i0 \cf4 value\cf3 , [key]: value \});\ \}\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf14 // \f1\i les donn\'e9es sont \'e9cout\'e9es pour remplir le formulaire \ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f0\i0 \cf4 this \f1\i \cf2 .\cf15 kamoulox$\cf2 .\cf8 subscribe \f0\i0 \cf3 (\cf10 kamoulox\cf3 \cf2 =>\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf3 \cf4 this \f1\i \cf2 .\cf15 form\cf2 .\cf8 patchValue \f0\i0 \cf3 (kamoulox, \{ emitEvent: \cf13 false\cf3 \})\ );\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf14 // \f1\i le formulaire est \'e9cout\'e9 pour mettre \'e0 jour les donn\'e9es\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f0\i0 \cf4 this \f1\i \cf2 .\cf15 form\cf2 .\cf15 valueChanges\cf2 .\cf8 subscribe \f0\i0 \cf3 (\cf10 kamoulox\cf3 \cf2 =>\cf3 \cf4 this \f1\i \cf2 .\cf15 kamoulox$\cf2 .\cf8 next \f0\i0 \cf3 (kamoulox)); \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf3 \cf4 \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf8 @ \f1\i Injectable \f0\i0 \cf3 (\{ providedIn: \cf6 "\cf7 root\cf6 "\cf3 \})\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i \cf2 export \f0\i0 \cf3 \cf2 class\cf3 \cf9 KamouloxService\cf3 \{\ \cf14 // \f1\i initialisation de la config avec des valeurs par d\'e9faut \f0\i0 \cf3 \ config$ \cf2 =\cf3 \cf4 new\cf3 \cf9 KamouloxConfigSubject\cf3 (\{\ canard: \{ visible: \cf13 true\cf3 \},\ beaujolais: \{ visible: \cf13 true\cf3 \},\ mitterrand: \{ visible: \cf13 true\cf3 \},\ pressing: \{ visible: \cf13 true\cf3 , label: \cf6 "\cf7 pressing\cf6 "\cf3 \},\ \});\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \cf14 // \f1\i initialisation des donn\'e9es (pourrait \'eatre issu d\'92une api) \f0\i0 \cf3 \ kamoulox$ \cf2 =\cf3 \cf4 new\cf3 \cf9 KamouloxSubject\cf3 (\{\ canard: \cf6 ""\cf3 ,\ beaujolais: \cf11 0\cf3 ,\ mitterrand: \cf6 "\cf7 parapluie\cf6 "\cf3 ,\ pressing: \cf6 ""\cf3 ,\ \});\ \ \cf8 constructor\cf6 ()\cf3 \{\}\ // ...\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf3 \f1\i \cf2 private \f0\i0 \cf3 \f1\i \cf8 mergeRules \f0\i0 \cf6 ()\cf4 :\cf3 \cf9 Observable\cf3 <\cf5 never\cf3 > \{\ \cf8 const \f1\i \cf2 \cf8 mitterrand\cf2 \f0\i0 = \f1\i \cf4 this\cf2 .\cf8 feedRule \f0\i0 \cf3 (\cf2 \{\ \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \f1\i \cf2 keys \f0\i0 : \f1\i \cf3 \f0\i0 [\cf6 "\cf7 beaujolais\cf6 "\cf3 , \f1\i \f0\i0 \cf6 "\cf7 canard\cf6 "\cf3 ]\cf2 ,\ \f1\i rule \f0\i0 : \f1\i \cf3 mitterrandRule \f0\i0 \cf2 ,\ \f1\i \f0\i0 \}\cf3 ) \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 (\ \f1\i \cf2 \cf8 map \f0\i0 \cf3 (\cf6 (\cf2 \{ \f1\i \cf10 config\cf2 \f0\i0 \}\cf6 ) \f1\i \cf2 \f0\i0 => \f1\i \f0\i0 \{\ \f1\i \cf4 this\cf2 .\cf15 config$\cf2 .\cf8 update \f0\i0 \cf3 (\cf6 "\cf7 mitterrand\cf6 "\cf2 , \f1\i \cf3 config \f0\i0 )\cf2 ;\ \f1\i \f0\i0 \}\cf3 )\ \f1\i \cf2 \f0\i0 \cf3 );\ \ \cf8 const \f1\i \cf2 \cf8 pressing\cf2 \f0\i0 = \f1\i \cf4 this\cf2 .\cf8 feedRule \f0\i0 \cf3 (\cf2 \{\ \f1\i keys \f0\i0 : \f1\i \cf3 \f0\i0 [\cf6 "\cf7 beaujolais\cf6 "\cf3 , \f1\i \f0\i0 \cf6 "\cf7 mitterrand\cf6 "\cf3 ]\cf2 ,\ \f1\i rule \f0\i0 : \f1\i \cf3 pressingRule \f0\i0 \cf2 ,\ \f1\i \f0\i0 \}\cf3 ) \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 (\ \f1\i \cf2 \cf8 map \f0\i0 \cf3 (\cf6 (\cf2 \{ \f1\i \cf10 config \f0\i0 \cf2 , \f1\i \cf10 pressing\cf2 \f0\i0 \}\cf6 ) \f1\i \cf2 \f0\i0 => \f1\i \f0\i0 \{\ \f1\i \cf3 config\cf2 \f0\i0 && \f1\i \cf4 this\cf2 .\cf15 config$\cf2 .\cf8 update \f0\i0 \cf3 (\cf6 "\cf7 pressing\cf6 "\cf2 , \f1\i \cf3 config \f0\i0 )\cf2 ;\ \f1\i \cf3 pressing\cf2 \f0\i0 && \f1\i \cf4 this\cf2 .\cf15 kamoulox$\cf2 .\cf8 change \f0\i0 \cf3 (\cf6 "\cf7 pressing\cf6 "\cf2 , \f1\i \cf3 pressing \f0\i0 )\cf2 ;\ \f1\i \f0\i0 \}\cf3 )\ \f1\i \cf2 \f0\i0 \cf3 );\ \ \cf8 const \f1\i \cf2 \cf8 beaujolais\cf2 \f0\i0 = \f1\i \cf4 this\cf2 .\cf8 feedRule \f0\i0 \cf3 (\cf2 \{\ \f1\i keys \f0\i0 : \f1\i \cf3 \f0\i0 [\cf6 "\cf7 canard\cf6 "\cf3 ]\cf2 ,\ \f1\i rule \f0\i0 : \f1\i \cf3 beaujolaisRule \f0\i0 \cf2 ,\ \f1\i \f0\i0 \}\cf3 ) \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 (\ \f1\i \cf2 \cf8 map \f0\i0 \cf3 (\cf6 (\cf2 \{ \f1\i \cf10 beaujolais\cf2 \f0\i0 \}\cf6 ) \f1\i \cf2 \f0\i0 => \f1\i \f0\i0 \{\ \f1\i \cf3 beaujolais\cf2 \f0\i0 && \f1\i \cf4 this\cf2 .\cf15 kamoulox$\cf2 .\cf8 change \f0\i0 \cf3 (\cf6 "\cf7 beaujolais\cf6 "\cf2 , \f1\i \cf3 beaujolais \f0\i0 )\cf2 ;\ \f1\i \f0\i0 \}\cf3 )\ \f1\i \cf2 \f0\i0 \cf3 );\ \ \f1\i \cf2 return \f0\i0 \cf3 \f1\i \cf8 merge \f0\i0 \cf3 (mitterrand, pressing, beaujolais) \f1\i \cf2 .\cf8 pipe \f0\i0 \cf3 ( \f1\i \cf8 ignoreElements \f0\i0 \cf3 ());\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ \ \ \itap1\trowd \taflags1 \trgaph108\trleft-108 \trwWidth9029\trftsWidth3 \trbrdrt\brdrs\brdrw20\brdrcf0 \trbrdrl\brdrs\brdrw20\brdrcf0 \trbrdrb\brdrs\brdrw20\brdrcf0 \trbrdrr\brdrs\brdrw20\brdrcf0 \clvertalt \clcbpat0 \clwWidth9029\clftsWidth3 \clbrdrt\brdrs\brdrw20\brdrcf0 \clbrdrl\brdrs\brdrw20\brdrcf0 \clbrdrb\brdrs\brdrw20\brdrcf0 \clbrdrr\brdrs\brdrw20\brdrcf0 \clpadt100 \clpadl100 \clpadb100 \clpadr100 \gaph\cellx8640 \pard\intbl\itap1\pardeftab708\ri-9\sl325\slmult1\partightenfactor0 \fs21 \cf3 \f1\i \cf2 private \f0\i0 \cf3 \f1\i \cf8 feedRule \f0\i0 \cf3 <\cf9 K\cf3 \f1\i \cf2 extends \f0\i0 \cf3 \cf4 keyof\cf3 \cf9 Kamoulox\cf3 >\cf6 (\cf3 \{ \cf10 keys\cf3 , \cf10 rule\cf3 \}\cf4 :\cf3 \{\ keys\cf4 :\cf3 \cf9 Array\cf3 <\cf9 K\cf3 >;\ rule\cf4 :\cf3 \cf9 RuleFunction\cf3 ;\ \}\cf6 )\cf4 :\cf3 \cf9 Observable\cf3 <\ \{ config\cf4 ?:\cf3 \cf9 Partial\cf3 <\cf9 FieldConfig\cf3 >; \} \cf4 &\cf3 \cf9 Partial\cf3 <\cf9 Kamoulox\cf3 >\ > \{\ \f1\i \cf2 return \f0\i0 \cf3 \cf4 this \f1\i \cf2 .\cf15 kamoulox$\cf2 .\cf8 pipe \f0\i0 \cf3 (\ \f1\i \cf8 map \f0\i0 \cf3 (\cf6 (\cf10 kamoulox\cf6 )\cf3 \cf2 =>\cf3 keys \f1\i \cf2 .\cf8 map \f0\i0 \cf3 (\cf6 (\cf10 key\cf6 )\cf3 \cf2 =>\cf3 kamoulox[key])),\ \f1\i \cf8 distinctUntilChanged \f0\i0 \cf3 (\cf6 (\cf10 x\cf3 , \cf10 y\cf6 )\cf3 \cf2 =>\cf3 \cf5 JSON \f1\i \cf2 . \f0\i0 \cf5 stringify\cf3 (x) \cf2 ===\cf3 \cf5 JSON \f1\i \cf2 . \f0\i0 \cf5 stringify\cf3 (y)),\ \f1\i \cf8 map \f0\i0 \cf3 (\cf10 kamouloxValues\cf3 \cf2 =>\cf3 \f1\i \cf8 rule \f0\i0 \cf3 (\cf4 ...\cf3 kamouloxValues)),\ );\ \} \fs22 \cf0 \cell \lastrow\row \pard\pardeftab708\ri-9\sl276\slmult1\partightenfactor0 \cf0 \ }