Clean CreateSession component and remove trace of previous create session button
authorymh <ymh.work@gmail.com>
Wed, 05 Sep 2018 12:27:52 +0200
changeset 155 e55ae84508bf
parent 154 a28361bda28c
child 156 384f4539b76a
Clean CreateSession component and remove trace of previous create session button
client/src/App.scss
client/src/actions/sessionsActions.js
client/src/components/CreateSession.js
client/src/components/Navbar.js
client/src/components/SessionList.js
client/src/index.js
--- a/client/src/App.scss	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/App.scss	Wed Sep 05 12:27:52 2018 +0200
@@ -193,6 +193,3 @@
     text-decoration-line: underline;
     text-decoration-style: dotted;
 }
-
-
-}
--- a/client/src/actions/sessionsActions.js	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/actions/sessionsActions.js	Wed Sep 05 12:27:52 2018 +0200
@@ -3,14 +3,14 @@
 import * as types from '../constants/actionTypes';
 
 
-export const createSession = (sessionId, groupName, protocol) => {
+export const createSession = (sessionId, groupName, protocol, title = '', description = '') => {
 
   const newSession = {
       _id: sessionId,
       ext_id: sessionId,
       date: now(),
-      title: '',
-      description: '',
+      title: title,
+      description: description,
       group: groupName,
       protocol: protocol,
       action: ActionEnum.CREATED
--- a/client/src/components/CreateSession.js	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/components/CreateSession.js	Wed Sep 05 12:27:52 2018 +0200
@@ -1,20 +1,25 @@
 import React, { Component } from 'react';
-import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
 import Modal from 'react-modal';
+import PropTypes from 'prop-types';
 import uuidV1 from 'uuid/v1';
 import '../App.css';
-import * as sessionsActions from '../actions/sessionsActions';
-import * as authActions from '../actions/authActions';
-// import _ from 'lodash';
 import './CreateSession.css';
 
-class CreateSession extends Component {
-    state = {
-      createGroup: false,
-      protocolOpen: false,
-      // protocol:null
-    }
+export default class CreateSession extends Component {
+
+  static propTypes = {
+    history: PropTypes.object.isRequired,
+    group: PropTypes.object.isRequired,
+    createSession: PropTypes.func.isRequired,
+  };
+
+  state = {
+    createGroup: false,
+    protocolOpen: false,
+    title: "",
+    description: ""
+    // protocol:null
+  }
 
   componentWillMount() {
     Modal.setAppElement('body');
@@ -23,99 +28,34 @@
 
   openSessionModal = () => {
     this.setState({modalIsOpen: true});
-    let groupName = null;
-    // let protocol = null;
-    if(this.props.currentGroup) {
-      groupName = this.props.currentGroup.get('name');
-      // protocol = this.props.currentGroup.get('protocol');
-    }
-    if(groupName === null) {
-      groupName = (this.props.currentUser)?this.props.currentUser.get('default_group'):null;
-      if(groupName != null) {
-        const group = this.props.groups.find((g) => g.name === groupName);
-        if(group) {
-          return(
-          this.setState({
-          protocol: group.get('protocol')
-          }))
-        }
-      }
-    }
-
   }
 
   createSession = () => {
     const sessionId = uuidV1();
-    let groupName = null;
-    let protocol = null;
-    if(this.props.currentGroup) {
-      groupName = this.props.currentGroup.get('name');
-      protocol = this.props.currentGroup.get('protocol');
-    }
-    if(groupName === null) {
-      groupName = (this.props.currentUser)?this.props.currentUser.get('default_group'):null;
-      if(groupName != null) {
-        const group = this.props.groups.find((g) => g.name === groupName);
-        if(group) {
-          protocol = group.get('protocol');
-        }
-      }
-    }
+    const groupName = this.props.group ? this.props.group.get('name') : null;
+    const protocol = this.props.group ? this.props.group.get('protocol') : null;
+    const {title, description} = this.state;
 
-    this.props.sessionsActions.createSession(sessionId, groupName, protocol);
+    this.props.createSession(sessionId, groupName, protocol, title, description);
     this.props.history.push('/sessions/' + sessionId);
   }
 
   getGroupProtocol = () => {
-    let groupName = null;
-    let protocol = null;
-    if(this.props.currentGroup) {
-      groupName = this.props.currentGroup.get('name');
-      protocol = this.props.currentGroup.get('protocol');
+    if (this.props.group) {
+      return this.props.group.protocol;
     }
-    if(groupName === null) {
-      groupName = (this.props.currentUser)?this.props.currentUser.get('default_group'):null;
-      if(groupName != null) {
-        const group = this.props.groups.find((g) => g.name === groupName);
-        if(group) {
-          protocol = group.get('protocol');
-          return(
-            protocol
-          );
-        }
-      }
-    }
+    return null;
   }
 
-  // onChange = (e) => {
-  //   const { name, value } = e.target;
-  //   const changes = { [name]: value }
-  //   this.onChangeThrottle(changes);
-  // }
-
-  // onChangeThrottle = _.debounce((changes) => {
-  //   this.props.sessionsActions.updateSession(this.props.currentSession, changes);
-  // }, 750)
-
-  onGroupChange = (e) => {
-    const groupName = e.target.value;
-
-    const group = this.props.groups.find((g) => g.get('name') === groupName);
-
-    this.props.sessionsActions.updateSession(this.props.currentSession, { group: groupName, protocol: group?group.get('protocol'):'' });
-  }
-
-  componentWillUpdate = (nextProps, nextState) => {
-    if (nextState.createGroup && nextProps.createGroup.get('success')) {
-      this.setState({ createGroup: false })
-    }
+  onChange = (e) => {
+    const { name, value } = e.target;
+    this.setState({[name]: value});
   }
 
   toggleProtocol = () => {
     this.setState({
       protocolOpen: !this.state.protocolOpen,
       show: false
-
     });
   }
 
@@ -124,36 +64,23 @@
   }
 
   handleModalCloseRequest = (e) => {
-    // opportunity to validate something and keep the modal open even if it
-    // requested to be closed
     e.preventDefault();
     this.setState({modalIsOpen: false});
   }
 
   render() {
 
-    // if (!this.props.currentSession) {
-    //   return (
-    //     <form></form>
-    //   )
-    // }
-
     return (
       <div>
       <a id="session-button" className="text-center" onClick={this.openSessionModal}>Créer une nouvelle session</a>
       <Modal
       className="Modal__Bootstrap modal-dialog"
-      // closeTimeoutMS={150}
       isOpen={this.state.modalIsOpen}
       onRequestClose={this.handleModalCloseRequest}
       >
         <div className="modal-content bg-primary w-75">
           <div className="modal-body">
             <form onSubmit={ e => { e.preventDefault() } }>
-            <div className="form-group ml-5 pl-5">
-                <label className="col-form-label text-secondary">Groupe</label>
-                {/* <p>{this.props.currentSession.group}</p> */}
-              </div>
               <div className="form-group">
                 <label className="col-form-label text-secondary font-weight-bold pt-3">Titre</label>
                 <input className="form-control text-primary w-100"
@@ -172,7 +99,7 @@
                   // defaultValue={ this.props.currentSession.description }
                   onChange={ this.onChange }
                   placeholder="Entrez une description"
-                  row="3"></textarea>
+                  ></textarea>
               </div>
               <div className="form-group">
                 <label className="col-form-label text-secondary font-weight-bold mt-5 ml-5" onClick={this.toggleProtocol}>Protocole de la prise de note {this.state.protocolOpen?<span className="material-icons protocol-toggle">&#xE313;</span>:<span className="material-icons protocol-toggle">&#xE315;</span>}</label>
@@ -192,27 +119,3 @@
     );
   }
 }
-
-function mapStateToProps(state, props) {
-
-  let group;
-  if (props.session && props.session.get('group')) {
-    group = state.get('groups').find(group => props.session.get('group') === group.get('name'))
-  }
-
-  return {
-    currentSession: props.session,
-    createGroup: state.get('createGroup'),
-    groups: state.get('groups'),
-    group
-  };
-}
-
-function mapDispatchToProps(dispatch) {
-  return {
-    sessionsActions: bindActionCreators(sessionsActions, dispatch),
-    authActions: bindActionCreators(authActions, dispatch),
-  }
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(CreateSession);
--- a/client/src/components/Navbar.js	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/components/Navbar.js	Wed Sep 05 12:27:52 2018 +0200
@@ -8,6 +8,7 @@
 // import logo from './logo.svg';
 import Modal from 'react-modal';
 import * as authActions from '../actions/authActions';
+import * as sessionsActions from '../actions/sessionsActions';
 import { forceSync } from '../actions/networkActions';
 import { groupSetCurrent } from '../actions/groupActions';
 import { isAuthenticated, getCurrentUser, getOnline, getCurrentGroup, getGroups } from '../selectors/authSelectors';
@@ -153,7 +154,11 @@
             </ul>
             <ul className="navbar-nav navbar-center">
                 <li className="nav-item text-secondary">
-                  <CreateSession history={this.props.history}/>
+                  <CreateSession
+                    history={this.props.history}
+                    group={this.props.currentGroup}
+                    createSession={this.props.sessionsActions.createSession}
+                  />
                 </li>
             </ul>
             <ul className="nav navbar-nav ml-auto">
@@ -208,7 +213,8 @@
   return {
     authActions: bindActionCreators(authActions, dispatch),
     networkActions: bindActionCreators({ forceSync }, dispatch),
-    groupActions: bindActionCreators({ groupSetCurrent }, dispatch)
+    groupActions: bindActionCreators({ groupSetCurrent }, dispatch),
+    sessionsActions: bindActionCreators(sessionsActions, dispatch),
   }
 }
 
--- a/client/src/components/SessionList.js	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/components/SessionList.js	Wed Sep 05 12:27:52 2018 +0200
@@ -42,28 +42,6 @@
     this.setState({modalIsOpen: false});
   }
 
-  createSession = () => {
-    const sessionId = uuidV1();
-    let groupName = null;
-    let protocol = null;
-    if(this.props.currentGroup) {
-      groupName = this.props.currentGroup.get('name');
-      protocol = this.props.currentGroup.get('protocol');
-    }
-    if(groupName === null) {
-      groupName = (this.props.currentUser)?this.props.currentUser.get('default_group'):null;
-      if(groupName != null) {
-        const group = this.props.groups.find((g) => g.name === groupName);
-        if(group) {
-          protocol = group.get('protocol');
-        }
-      }
-    }
-
-    this.props.sessionsActions.createSession(sessionId, groupName, protocol);
-    this.props.history.push('/sessions/' + sessionId);
-  }
-
   onClickDelete(session, e) {
     e.preventDefault();
     e.stopPropagation();
@@ -90,7 +68,6 @@
     return (
       <div>
         <Navbar history={this.props.history} />
-        {/* <button id="session-button" type="button" className="btn btn-primary btn-lg text-secondary" onClick={ this.createSession}>Créer une nouvelle session</button> */}
         <div className="container-fluid">
           <div className="row mt-5 pt-5">
                 {this.props.sessions.map((session) =>
--- a/client/src/index.js	Mon Sep 03 20:02:14 2018 +0200
+++ b/client/src/index.js	Wed Sep 05 12:27:52 2018 +0200
@@ -10,7 +10,6 @@
 import Session from './components/Session';
 import Login from './components/Login';
 import CreateGroup from './components/CreateGroup';
-import CreateSession from './components/CreateSession';
 import Register from './components/Register';
 import Settings from './components/Settings';
 import './index.css';
@@ -30,7 +29,6 @@
       <Switch>
         <Route exact path="/sessions/:id" component={Session} />
         <Route exact path="/sessions" component={SessionList} />
-        <Route exact path="/create-session" component={CreateSession} />
         <Route exact path="/register" component={Register} />
         <Route exact path="/login" component={Login} />
         <Route exact path="/create-group" component={CreateGroup} />
1VUe `ff|/dWX UUCUeWk38 P`Y$2aӥUs0`!vʖfUY *CC(C ]UWXVC_\>x%< <{yy5jc jiJ0a*Ħ$XQXCCUC,Et2ZWҫUCȫ 0 7|wÚACd0,0`d,C(d2C>vޫU2Ue d7n0`>`aU{~=!>J=/U&D1VU*b[v**WE^> {AʠUza8/CUn ?P=Gu\qU9Nt : ÁWJ*U8UWzCIMUjP !%Q d)0`C连퇘eW2 VCR:J{䧊UJ`(xíw0mCT`AZ !?l2EP ,#!wCp7Y&**W#v Z RkTeo&ƑifZ  L YCC AC- 2 %`X20` XeVWJM$! ``` 0`j*n* CCC(d5 j 0`P"C;C숺Ah~WWZ``C4UnEP'T DJJ.!2X2}>~7誰WD_({˵H$+ OUUWAWpwUr>e\U߭Pu"~}P{j ǀtD[CXjjnRV*ޮeY*z|ҝd/ܫd2!+JUU]&X2 O{*,b W**UX 2A*ʰV 4bET2bdT2E40 3 ͲY߱e]r^d:vƆCl/sE!㡝졺E67UC)Ҫq he(nE 糾j;]<p"lz Eu0j)64;C9qr:qWW5Zp89Re[1 6UV1-QJʩʧ2 $CuU]FC;CpCCz Ac P&Ƈa9r:qccju^U\eV0r=U<la+Cʡqw8}gߢVQ=U u0=z"{^0ԥ %`&TҘ``H[JM ʱPl*ʲ06 D6U]&**.j` 0` 0` 0` 0` 0` 0` 0`^ I}.FHCICԕ<ċ|E`g#Ch` %eCJʼGuZUUyv;CJ2w10660hh`{K0e UJ*}Cpr:n#u!tAd69C`Au0u싑ޫUn*UX; 88AxCu!tc< r0r:xd\]*uYUjUhu`Ya vC CPjCpȕ r-Ê`!W# 5 cc2x!dUh`Z 㤋x=:j1VxjRԋ+wXgCq"Jb,CQ>/2Uj !d2Hè^zéO5^jW= *WzCC!KUd02  CU`Uq@0;b,V= " 0`*ʹ NOg0XVvB-C84>GC)`lr9zõĮ6$J 2%sU CC0cy$\K""]!yC d1 ?Ze H"_$ihxC몿 B=@ X%7U>C*W*mX¯ y` ~P/:Czyu‡(}b2 "?W0`җ`ȕӘ?PxZED0`E? E X0`/RYK*RZMCz~~`h`mE!X1)` E#*b3^exUWj UhlsCXw  DJ0e*d2CP 0` 0` 0` 0`^˪ rCB(vU62U7 Uh!j!̆0%`V W W* 61 ,ǷxΝ5X |j0o,f Cr9GqwtpWJv*d9#649ÊUtpWJ®T!8pdC!eERH 8Hb T_lJU[JEtUbG): ¿*<@B0;PR$PJ @  ((P H "@(PJ*P%U P@P(P"" DDLMihM6F4A dCF1@ h4Ѧ@ @@4 hi@44i4&44a&ڊH MGPځJDdSz) OP/1f2c5 I%|,~o8hv<"|FDžïOs׭Q"JO:Y+eJ% F-",heJ C+45 42la`/Ƈ#!F تBVJ"L**"Y?ˇfӞ9Z!SR=p`'C2ӽ D *x{j|3CCW{/MaECw!T2|r>ccJVEmߍKUExEOQs s^bάy:{trri&Y+~^vx{yZzf/?<:n#``QUA-z<d_@}xQ `9hFQ[Q-,̲X?pW7xq:Ie$ 0 * CE]j*Eu-d.P+!0}Cvd1V@;4l22_x#PzQ8E## hwtGu櫚*`=<"9<Ǡw6:ctGW5\qU5bU V*U[UeT<Ǫ=Gt(`xPUv2..MCC# CZv!IޫUhh`zC4444GAʼǀcҫ# G#cUkZ_ /MS0Vd?l2fY}}>!_phlllllbU,q jU)ڭj0`*5CsArUb Eq JH CtaċjhnCt2j%vC‡ ,Ӧ ~l]oykXq׷|u~qtƇ<240b-{F~`4<Ƈw?<.CA6<ǀp8z=iCC: #!6=GAA|#: 1:x9!pä8cC69ncct`lh{a`a>{t#`;Ød0p4449>p8hi Cb,`tCix2#c 8: _;Q x !=FǐE8à0z p0yACxa|F"h`p<რp0hd: q x`t#6?9c苠x#:C5 #P; Cj;}#@ƇvA0yh|GxQlr: Cd:u;CuCr?P=9`=è1yAcyCc<ǀ691ja`qawC>Կb}]*x`h0:6 |08 r Ul< l;a;;`AC8;0#c=G#Ƿ~_o9흺޺tom8v?BTK%&5H!ԤR}#ԋʇePqIb,PSdT0bK"D9UfUVeY0f J@8E=ЫUB0#%Y@:UqW#hUzn P=呹dzE6+VJLz? &u:d;<iVk?Z>۷s7L1xcM]ǐzxuC%_yx^:?0\; ߶7>~[q5~K﮺bۢ.q8C}f-8ˋ\*huw99?CC72X4;FC|à`d; 4=Ap:lUh`?hzA=Á}Clh`=ph}cw80xCt1649A4<6lr8CCƪ90` 0`CC 0`2hr>c9p8G{;૰GAs 9r?hQx !cxGx2W0q (hly P8`: 60`p 0` 0`!0qw 0` <CCڇR.Fx`0t Ahh`ґhh` 0n%nhh` 0tjҭ ZUJ8 cZ UPZjMCUpYtn {nVU 0`U`dCCP!}0 0`|ltd;hhj%hhjalr668pCCCPp>PFƆƇCcCCffY?<1; 0`rJF 7 0`Uj G#Z440`  CcCCq?1 1!`Z ({aƆc CuG`_!,)2U= x 0n+{C440|އa*GqhhXd660`J@ÁYP?!#"69 G#CCC9440` 0` 0` 0`C 0` 0` 0` 0` 0` 0` fZUE>cG# 3>0`P8hw`:90` 0zp88# T>0c0`(~d C0` 0` 0`w7>;U!WAC뇭UC9`פ??~?1C/8~0`ҪC`GhjUV` 0` 0`j2"J5zZ /A0`0d:U?`0`K!c 0`{`VC*U?Ƈ` X0`pUUp?=Ǹ|jC!<}0`󆆆 0ouV%;]*#)VW"EDJ0h)YD E+uzCC*0`ʪU!z,Q*gTTuuziW8*bG󎣨q CC5 C=OtPE2_~H`0`t0d2{a 0`R7 0` 0`Uv] UAw0` 0` 0pE0``$3$_`5 YދW=* ] 0`x 0` 4%heI?T8*:~aZI%y H"OTx*rUƯzC!`֤]` \йu}2-H_1*"H^ h`*  7Ҫ2(xfZ  `e鶴Yrlh`!0`hp<*YVP–PWUkCơ`X2EX2*nd*d0`I`UkAZn18uq!q8.qp68˅\\[ ʵV`d08pd000X0` 0`Ȱ` 0` 0`:cc 0` 0` 0`48}+b-C* "02*d>7ϒD*)2 XJ00b, JUиOCCpHU}]i'X|d_}q CHx0` +U`AEvWz/ٜfY?W<ҷgV-o?"y]f_W9؞ L`2үWAp<0G#V\åU+php49E]-H%h`ZiUЪVeW%V>`8*r0S!U!UE`U[Acp0`Cw(iUxU®W#Wr %7QD C\d[Xd70`ᱱ|q`p8;!nyahtC8F:140` r668%p1hp;;Ghh~qlxl`Whh`HP苁d< Áp<Ǡa6:0zyaw"cJZ^al;aau у 0` 0`%^pM "]Uj{; R.o=B`E Uj2E܆n h{ 2 U}5VPǠxCq6;erUn :lwr6:! ÑlwÑlhyUjʫ* d8vH `)ЫW5Y!Z* >EkjV0f 0{jʇz ): PU+$Ed0* Ma.FvdW C!,@ SW:UR: 3 4 U``ʥʫ! HUf 467CCUZhjUZP2T5 PǥV{%jlljߺ Uj448/xJEzaÙq+;7ה?w|>0`ˬ0`!X&=c*V )NAY)GWH(dEbP Cd;PCC 1 0{I9~AC*"eUdy `\P C>9V!b,C!d:ĮV  v%~UWmY"V e Up7U+P>}_1 E!CCca Zo CCcc-ccPH%t*N%t|uV 0` U=K*FUSH?H21V EE,a+X2)d4>ZS +U$E/jE*t=_22~ȋ\l~ `Rp>CʬEʬD (/Jhn.!T>Zc(% nÚpCCvGCAy"U\w/;He^8cd9E`aC<ujucʇ䪾cd0`d,202   2E[U! ie xÁphp0p2_`긪ʪ}]5jqhp0p2]xnY]t_hwCp J|p꫑(|'?`} @`iVA/4{zC]CdpUVH}#jonhhianqBe#`*Ъ4+b,"̬X0|%1V UѸ~Q0b 2R@|jʰ0`^Wr/nt8WaXJ*X`CH`ÈvhGE8_T=j.*CPUld0`cCp GCu[r:ad0`647chnc+sh{"zH45UvR/:zHE0d!m뇍VCqWhj0`e B))䪿*S*¯ua%h`hh`hd44?|6dT0A67 15CJ; 0` -u Y`4V*)ʑYUd"h`!V E! 0hhh` P)48&hhh`Hd0d0` 0p5CUd&d244442C!dPhh` Ta`a](~~q!!1:Wh0eV  ](nE}Iĭ'>1+j 2hU`ld>_0` USBUsCD;Cx 0` -CCdU]xNWʫA Ӆ!UtQWhs"CHtnuUUZR/⋨}Pd2 U_{^a+!U\D[` 0`E}c X1IV VdJ645!la+)644J0`U(`R G/V0`vaR<]t>$.jER$T8u|!)y3409mUh,VU*:J|껇pZ Ab.j`Q견U`h4uTW8 Ah4 \ r|dRj%i)QnȻP E0hd42 CPCQKzC!>Pq0*y)қJsJh@Oal=]gW 00=tUU_}bmp>~U*Jll6666 "Cc Ĭ!j"dLbS|ҮhqDC$2Ei0xnGh`lvlp9 G60h|A`tF FCp6;"lw(l`p42CA9U]*; ÈvQr;0d6;cr0lr48:FGA0u싑tcAz)Sv0vhd2CP2DiV  U3RU*!x0hr9*Cc  F긪ʮ|U~0a*dUCuZp8 Ԝ jP2"z!CC Xv^A 460luCcC0`աh`ҬʵW2x``{eZ#ZJyyD;eWr/xwB^PA+")0x|`=㌯c zʦd%1LE/8iݒ/x?(:!Rr{%w .a"ʇ40hb- 2\Uhs C`X0y{U``h)````````````s_ҡ1I"PC6=)K#cxzõ*JCdK"W0`+ CJPIK"H?R H{x*CHU EBJO*`XeC2| .5CJ| 4``bWJ|##*eW0X1 %eV Q`IguU*Uh`242P!R/E!X1)`: 0tKn:PUUj!Z "]X2I0Q*S!z+:U 0`ʬ=%xX:wjU=FPE 톆hjEa5C(q q+d*nBR``«62 eW_-2EP<2WNGd?d:àr:w]:Ga649r;Fj]G0HC7%W|DY"·C!_!)> 0`8d+ E$_dJCccD/XWPVInIxY蓀/5T)m2 @HڞSCL 2 4 iPdh4@`&0"A4' =MOHh6L nKFUKL,æuZJ,]A!*HIV$BHb/yڼXFClBI)̃K*}-!#B&PF&9!tp&eLI  S>z=Nr"2eLA2=G>7p\ٍ{:F}25҂Hi!5}"i-5{r$q;:Em? &Hmv11i (Pe׋!)a1>U / ; PiaQ˜;nѶذR\Ȥ t׻1IߍNkè8#l; j=y& 03}`6b&g 5`ƪ?~v'@Q|;|4I3F6?*UAvY$XAZv{0[}PyOydH 8~б(YO3@9PVd_Nf"M6l)gV t Ҷ9 `YC6C%~3 6(aOČ96)~Zk8A)!&TfK }gUD,Iz9 L2-LadL 1qЯ2͍*Zɵ8.u،2{BŻ-$m@OꌛAB٭]1%X+?|X2 CaR~r }^g' w9]mq@t3QJ$&&68tشK0DH b >{+QM9Ctn0 RMq: 8 0ע5~&Rg 着¿ܑN$0ӭ@