{"version":3,"sources":["webpack:///./src/containers/HomePage/geobot.js","webpack:///./src/utils/checkStore.ts","webpack:///./src/utils/reducerInjectors.ts","webpack:///./src/utils/injectReducer.tsx","webpack:///./src/constants/app.ts","webpack:///./src/utils/sagaInjectors.ts","webpack:///./src/utils/injectSaga.tsx","webpack:///./src/containers/HomePage/store/constants/index.ts","webpack:///./src/containers/HomePage/store/reducers/index.ts","webpack:///./src/utils/httpStatus.ts","webpack:///./src/utils/axios.ts","webpack:///./src/containers/HomePage/store/services/index.ts","webpack:///./src/containers/HomePage/store/actions/index.ts","webpack:///./src/containers/HomePage/store/sagas/index.ts","webpack:///./src/containers/HomePage/store/selectors/index.ts","webpack:///./src/utils/helpers.ts","webpack:///./src/containers/HomePage/view.tsx","webpack:///./src/containers/HomePage/style.scss"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAuB;AACU;;AAEjC,gBAAgB,6BAAmB;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA,EAAE,gBAAC;AACH;AACA,IAAI,gBAAC;;AAEL;AACA,IAAI,gBAAC;;AAEL;AACA,IAAI,gBAAC;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,IAAI,gBAAC;AACL;AACA,IAAI,gBAAC;;AAEL;AACA;AACA;;AAEA,IAAI,gBAAC;AACL;AACA;AACA;AACA,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,GAAG,gBAAgB;AACvC,gCAAgC,GAAG,KAAK;;AAExC;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,GAAG,gBAAgB;AACvC,gCAAgC,GAAG,KAAK;;AAExC;AACA;AACA;AACA,gDAAgD;AAChD;AACA,iBAAiB,mBAAQ;AACzB,YAAY,mBAAQ;AACpB,YAAY;AACZ,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL;AACA;AACA;AACA,4BAA4B,qEAAqE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gBAAC;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,QAAQ,gBAAC;AACT,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,EAAE,gBAAC;AACH;;AAEA,eAAe,gBAAC;AAChB;AACA,wBAAwB,gBAAC;AACzB;AACA;AACA,OAAO;AACP;AACA,QAAQ,gBAAC;AACT;AACA;AACA;;AAEA,QAAQ,gBAAC;AACT;AACA;AACA;;AAEA,QAAQ,gBAAC;AACT,QAAQ,gBAAC;AACT,QAAQ,gBAAC;AACT,QAAQ,gBAAC;AACT;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,EAAE,gBAAC;AACH,eAAe,gBAAC;AAChB,sBAAsB,gBAAC;AACvB;AACA;AACA,KAAK;AACL;;AAEA,MAAM,gBAAC;AACP;AACA;AACA;;AAEA,MAAM,gBAAC;AACP,MAAM,gBAAC;AACP,MAAM,gBAAC;AACP,MAAM,gBAAC;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;;AAEL,IAAI,gBAAC;AACL;AACA;AACA,IAAI,gBAAC;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI,gBAAC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAC;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,gBAAC;AACT;AACA,OAAO;AACP;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAC;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAC;AACb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,gBAAC;AACnB;AACA;AACA,sCAAsC;AACtC,eAAe;AACf,aAAa;AACb;;AAEA;AACA;AACA;AACA,YAAY,gBAAC;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,gBAAC;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,KAAK;AACL;;AAEA;AACA,EAAE,gBAAC;AACH,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL;AACA;;;;;;AAMA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA,wCAAwC,sBAAsB,YAAY,uBAAuB,mBAAmB,kJAAkJ,gBAAgB,aAAa,aAAa;AAChT;AACA;AACA;AACA,8DAA8D,mBAAmB,kBAAkB,oBAAoB;AACvH;AACA;AACA,GAAG,gBAAC;AACJ;;;;;AAKA,GAAG,gBAAC;AACJ;AACA,KAAK,gBAAC;AACN,qBAAqB,gBAAC;AACtB,MAAM;;AAEN;;AAEA;AACA;AACA,KAAK,gBAAC;AACN,KAAK,gBAAC;AACN,IAAI;;AAEJ,sBAAsB,gBAAC;AACvB;;AAEA,GAAG,gBAAC;AACJ;AACA;AACA,KAAK,gBAAC;AACN,WAAW,gBAAC;AACZ;AACA;AACA,MAAM;AACN,IAAI;;AAEJ;;;AAGA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL;;AAEA;AACA,IAAI,gBAAC;AACL;AACA;AACA,MAAM,gBAAC;AACP,iBAAiB,gBAAC;AAClB,iBAAiB,gBAAC;AAClB,OAAO;;AAEP;AACA;AACA,MAAM,gBAAC;AACP,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM,gBAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC,QAAQ,gBAAC;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,EAAE,gBAAC;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,gBAAC;AACL,GAAG;;AAEH;;AAEA;AACA,EAAE,gBAAC;AACH;AACA,GAAG;;AAEH;AACA,EAAE,gBAAC;AACH,IAAI,gBAAC;AACL,MAAM,gBAAC;AACP,MAAM,gBAAC;AACP,KAAK;AACL,GAAG;;AAEH;AACA,EAAE,gBAAC;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA,IAAI,gBAAC;;AAEL;AACA,MAAM,gBAAC;AACP;AACA;AACA,KAAK;AACL,qBAAqB,uBAAuB;AAC5C,QAAQ,gBAAC;AACT;AACA;AACA;AACA,MAAM,gBAAC;AACP,MAAM,gBAAC;AACP;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,KAAK;AACL;;AAEA;AACA,EAAE,gBAAC;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,gBAAC;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,QAAQ;AACR,IAAI,gBAAC;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL;AACA;;AAEA;AACA,IAAI,gBAAC;AACL,IAAI,gBAAC;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC,EAAE,kCAAkC;AACvF;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;;AAEL;AACA,IAAI,gBAAC;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAC;;AAEL;AACA,cAAc,gBAAC;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,EAAE,gBAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAC;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEkB;;;;;;;;;;;;;;;ACxjCwC;AACxB;AAClC;AACA;AACA;AACe;AACf;AACA,kBAAkB,oBAAU;AAC5B,mBAAmB,oBAAU;AAC7B,kBAAkB,oBAAU;AAC5B,wBAAwB,oBAAU;AAClC,iBAAiB,oBAAU;AAC3B,0BAA0B,kBAAQ;AAClC,uBAAuB,kBAAQ;AAC/B;AACA,IAAI,iBAAS,CAAC,4BAAU;AACxB;;;;;;AChBkC;AACqB;AACjB;AACO;AACtC;AACP;AACA;AACA,YAAY,UAAU;AACtB,QAAQ,iBAAS,CAAC,0BAAQ,UAAU,yBAAO,SAAS,4BAAU;AAC9D;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,6BAA6B,wCAAa;AAC1C;AACA;AACe;AACf,IAAI,UAAU;AACd;AACA;AACA;AACA;;;ACtB0B;AACiC;AACX;AACF;AAC9C;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACe,0DAAE,eAAe;AAChC,kCAAkC,eAAK;AACvC;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA,mBAAmB,eAAK,iDAAiD;AACzE;AACA;AACA;AACA,kCAAkC,+BAAiB;AACnD,iDAAiD;AACjD;AACA,oBAAoB;AACpB,WAAW,qCAAoB;AAC/B,CAAC,EAAC;AACF,2BAA2B,eAAe;AAC1C,oBAAoB,eAAK,YAAY,+BAAiB;AACtD,IAAI,eAAK;AACT,QAAQ,YAAY;AACpB,KAAK;AACL;AAC4B;;;AClCrB;AACA;AACA;AACA,gBAAgB,YAAoB;AACpC,qBAAqB,yEAAW;;;ACJL;AACiC;AAC7B;AAC2C;AACjF,sBAAsB,kBAAkB,EAAE,MAAM,EAAE,iBAAiB;AACnE,0BAA0B,iBAAS,CAAC,0BAAQ,UAAU,yBAAO;AAC7D;AACA;AACA,cAAc,oBAAU;AACxB,wBAAwB,0BAAQ;AAChC;AACA,IAAI,iBAAS,CAAC,4BAAU;AACxB;AACO;AACP,mDAAmD;AACnD;AACA,YAAY,UAAU;AACtB,8CAA8C,eAAe,0BAA0B,MAAM,EAAE;AAC/F,eAAe,aAAa;AAC5B;AACA;AACA;AACA,YAAY,KAAqC,EAAE,EAO1C;AACT;AACA,iCAAiC,MAAM,aAAa,iBAAiB;AACrE;AACA,uDAAuD,kBAAkB,kCAAkC;AAC3G;AACA;AACA;AACA;AACO;AACP;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,uDAAuD,MAAM;AAC7D;AACA,0CAA0C;AAC1C,oBAAoB,IAAqC;AACzD;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACe,SAAS,0BAAY;AACpC,IAAI,UAAU;AACd;AACA;AACA;AACA;AACA;;;AC9D0B;AACiC;AACX;AACL;AAC3C;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACe,uDAAE,kBAAkB;AACnC,6BAA6B,eAAK;AAClC;AACA;AACA,6BAA6B,0BAAY;AACzC,4CAA4C,aAAa;AACzD;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAK,iDAAiD;AACzE;AACA;AACA;AACA,6BAA6B,+BAAiB;AAC9C,yCAAyC;AACzC;AACA,oBAAoB;AACpB,WAAW,qCAAoB;AAC/B,CAAC,EAAC;AACF,wBAAwB,kBAAkB;AAC1C,oBAAoB,eAAK,YAAY,+BAAiB;AACtD,IAAI,eAAK;AACT,0BAA0B,0BAAY;AACtC,mCAAmC,aAAa;AAChD;AACA;AACA;AACA,KAAK;AACL;AACyB;;;;;;AC/CzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;;;ACbP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4B;AAC2E;AACvG;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,uCAAO;AAC7D;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,CAAC;AACc,wDAAW,EAAC;;;;;;;;;;;;;AClC3B;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;;;ACpUmB;AACsB;AACH;AACD;AAC5C;AACA;AACA,MAAM,iBAAW;AACjB;AACA;AACA;AACA;AACA,2BAA2B,eAAK;AAChC,qBAAqB,6BAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,YAAY,yEAAW;AACvB,YAAY,yBAAqB,aAAa,yEAAW;AACzD,2BAA2B,yBAAqB,WAAW,yEAAW;AACtE;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB,IAAI;AACrB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D,oBAAoB,yBAAqB;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C,iBAAW;AACtD;AACA;AACA;AACA;AACA,4CAA4C,IAAI,yBAAyB,IAAI,4BAA4B,IAAI;AAC7G;AACA,+EAA+E,UAAU;AACzF;AACA;AACA,wCAAwC;AACxC,2BAA2B,yBAAO,YAAY,SAAS,OAAO,SAAS,GAAG,KAAK;AAC/E,+DAA+D,aAAa,EAAE,uBAAK,EAAE,6CAA6C;AAClI;AACA,oCAAoC;AACpC,wCAAwC,SAAS,SAAS,wBAAM;AAChE;AACA,sCAAsC;AACtC,uCAAuC,SAAS,SAAS,wBAAM;AAC/D;AACA,mCAAmC;AACnC,uCAAuC,SAAS,SAAS,wBAAM;AAC/D;AACA,qCAAqC;AACrC,yCAAyC,SAAS,SAAS,wBAAM;AACjE;AACA,sCAAsC;AACtC,0CAA0C,SAAS,kBAAkB,eAAe,EAAE,wBAAM;AAC5F;AACA;AACe,iEAAW,SAAS,EAAC;;;ACnFpC,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,iEAAiE,uBAAuB,EAAE,4BAA4B;AACrJ;AACA,KAAK;AACL;AACkD;AAC3C,yCAAyC,SAAI;AACpD,iBAAiB,WAAW;AAC5B,CAAC;;;ACXD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACsC;AACtC;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,YAAY,OAAO;AACnB;AACO;AACP;AACA,cAAc,eAAqB;AACnC;AACA;AACA;AACO;AACP;AACA,cAAc,0BAAgC;AAC9C;AACA;AACO;AACP;AACA,cAAc,0BAAgC;AAC9C;AACA;AACA;AACO;AACP;AACA,cAAc,yBAA+B;AAC7C;AACA;AACA;;;AC9CA;AACA;AACA;AAIwC;AACxC,WAAW,qBAAqB;AACU;AACJ;AACgB;AACuB;AAC7E;AACA;AACA;AACO;AACP;AACA,eAAe,QAAQ,OAAO,GAAG,SAAS,wDAAI,CAAC,gBAA2B;AAC1E;AACA,YAAY,yBAAc,YAAY,gEAAgE;AACtG;AACA,cAAc,uDAAG,CAAC,uBAAuB;AACzC;AACA;AACA,cAAc,uDAAG,CAAC,sBAAsB;AACxC;AACA;AACe;AACf,UAAU,8DAAU,CAAC,0BAAgC;AACrD;;;;;;AC7BA;AACA;AACA;AAC0C;AACC;AAC3C,4CAA4C,YAAY;AACxD,iCAAiC,6CAAc;AAC/C,kCAAkC,6CAAc;AAChD,8CAA8C,6CAAc;AACoC;;;;;;;;;;;ACThE;AACS;AAClB;AACvB;AACA;AACA;AACA;AACA,aAAa;AACb;AACO;AACP,WAAW,mBAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,IAAI,mBAAO,4BAA4B,eAAe;AACtD;AACA;AACA;AACA;AACO;AACP,IAAI,mBAAO;AACX;AACA;AACA;AACA,aAAa;AACb;AACO;AACP;AACA;AACO;AACP,uBAAuB,uBAAY;AACnC,YAAY,gBAAC;AACb;AACO;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yDAAyD;AACjG;AACO;AACP;AACA;AACO;AACP;AACA,cAAc,gBAAgB,EAAE,kBAAkB;AAClD;AACO;AACP;AACA,cAAc,gBAAgB;AAC9B;;;ACtE+C;AACT;AACA;AACN;AACoB;AAClB;AAC2B;AACN;AAChB;AACN;AACyB;AACV;AAChD;AACA;AACsB;AACmE;AACnC;AAC/C;AACP,IAAI,aAAa,EAAE,cAAc,eAAI,EAAE;AACvC,IAAI,gBAAgB,EAAE,cAAc,iBAAO,EAAE;AAC7C,WAAW,yCAAyC;AACpD;AACA;AACA;AACA;AACA,0EAA0E,+BAA+B;AACzG;AACA;AACA,IAAI,0BAAS;AACb,aAAa,yBAAc;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,0BAAS;AACb,sCAAsC,yBAAc;AACpD;AACA,YAAY,MAAM;AAClB;AACA,KAAK;AACL,YAAY,eAAK,eAAe,eAAK;AACrC,QAAQ,eAAK,eAAe,gBAAM;AAClC,YAAY,eAAK;AACjB,YAAY,eAAK,wBAAwB,gDAAgD;AACzF,QAAQ,eAAK,uBAAuB,iCAAiC,yBAAyB,eAAe,aAAa,EAAE;AAC5H,YAAY,eAAK,uBAAuB,mCAAmC;AAC3E,gBAAgB,eAAK,0BAA0B,oBAAoB;AACnE,YAAY,eAAK,uBAAuB,YAAY,eAAe,kCAAkC;AACrG,iBAAiB,eAAe;AAChC,qBAAqB,eAAK,uBAAuB,2BAA2B;AAC5E,wBAAwB,eAAK,wBAAwB,iCAAiC;AACtF,wBAAwB,eAAK,wBAAwB,4DAA4D;AACjH,4BAA4B,eAAK,qBAAqB,8BAA8B;AACpF,wBAAwB,eAAK,sBAAsB,iDAAiD;AACpG,4BAA4B,eAAK;AACjC,gCAAgC,eAAK,qBAAqB,cAAc;AACxE,4BAA4B,eAAK;AACjC,gCAAgC,eAAK,qBAAqB,gBAAgB;AAC1E,4BAA4B,eAAK;AACjC,gCAAgC,eAAK,qBAAqB,cAAc;AACxE,gBAAgB,eAAK,uBAAuB,kCAAkC;AAC9E,oBAAoB,eAAK,uBAAuB,wBAAwB;AACxE,gBAAgB,eAAK,uBAAuB,sBAAsB;AAClE,oBAAoB,eAAK,4BAA4B,2EAA2E;AAChI,oBAAoB,eAAK,uBAAuB,mBAAmB;AACnE,wBAAwB,eAAK,qBAAqB,wDAAwD;AAC1G;AACA,wBAAwB,uDAAwB;AAChD,eAAe,mBAAmB;AAClC,aAAa,+BAA+B;AAC5C,CAAC;AACD;AACA;AACA,2CAA2C,uBAAuB;AAClE;AACA;AACA,oBAAoB,6BAAO;AACZ,0GAAO,cAAc,aAAI,WAAW,EAAC;;;;;;;;AC/EpD,uC","file":"static/js/3.3d447d0505bded34f0c9.js","sourcesContent":["import $ from \"jquery\";\nimport CryptoJS from \"crypto-js\";\n\nconst API_URL = process.env.API_URL\n\nconsole.log(\"API URL is 1\",API_URL )\n// const API_URL = 'http://localhost:8080/'\n// const API_URL = 'https://api.geo.tracki.dev/'\nconst geobot = () => {\n document.addEventListener(\"DOMContentLoaded\", function () {\n var elemsTap = document.querySelector(\".tap-target\");\n var instancesTap = M.TapTarget.init(elemsTap, {});\n instancesTap.open();\n setTimeout(function () {\n instancesTap.close();\n }, 1000);\n });\n\n //initialization\n $(document).ready(function () {\n //Bot pop-up intro\n $(\"div\").removeClass(\"tap-target-origin\");\n\n //drop down menu for close, restart conversation & clear the chats.\n $(\".dropdown-trigger\").dropdown();\n\n //initiate the modal for displaying the charts, if you dont have charts, then you comment the below line\n $(\".modal\").modal();\n\n //enable this if u have configured the bot to start the conversation.\n // showBotTyping();\n // $(\"#userInput\").prop('disabled', true);\n\n //global variables\n let action_name = \"action_greet_user\";\n let user_id = \"jitesh97\";\n\n //if you want the bot to start the conversation\n\n action_trigger();\n getMessageFromTracki();\n });\n\n // ========================== restart conversation ========================\n function restartConversation() {\n $(\"#userInput\").prop(\"disabled\", true);\n //destroy the existing chart\n $(\".collapsible\").remove();\n\n if (typeof chatChart !== \"undefined\") {\n chatChart.destroy();\n }\n\n $(\".chart-container\").remove();\n if (typeof modalChart !== \"undefined\") {\n modalChart.destroy();\n }\n $(\".chats\").html(\"\");\n $(\".usrInput\").val(\"\");\n send(\"/restart\");\n }\n\n function checkCookieNotEncrypted(name) {\n const user = getCookieNotEncrypted(name);\n if (user !== '' && user !== null) {\n return true;\n }\n return false;\n }\n\n function checkCookie(name) {\n const user = getCookie(name);\n if (user !== '' && user !== null) {\n return true;\n }\n return false;\n }\n\n function getCookieNotEncrypted(name) {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n\n if (parts.length === 2) {\n const partsPop = parts.pop();\n if (partsPop) {\n const value = partsPop.split(';').shift();\n return value;\n }\n }\n return '';\n }\n\n function getCookie(name) {\n const secretKey = \"trackipro\"\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n\n if (parts.length === 2) {\n const partsPop = parts.pop();\n if (partsPop) {\n const encryptedValue = partsPop.split(';').shift();\n try {\n return CryptoJS.AES.decrypt(encryptedValue, secretKey).toString(\n CryptoJS.enc.Utf8\n ); // Decrypt for get original value\n } catch (error) {\n return '';\n }\n }\n }\n return '';\n }\n\n function callApiSetAuthenticate() {\n const token = checkCookie('token') ? getCookie(\"token\") : (\n checkCookieNotEncrypted('geo_token') ? getCookieNotEncrypted(\"geo_token\") : ''\n )\n $.ajax({\n url: `${API_URL}setusertoken`,\n type: \"POST\",\n contentType: \"application/json\",\n data: JSON.stringify({\n sessionid: getCookie(\"session\"),\n usertoken: token,\n }),\n success: function (botResponse, status) {\n console.log(\n \"Response from api: setusertoken \",\n botResponse,\n \"\\nStatus: \",\n status\n );\n botResponse = botResponse.data;\n },\n error: function (xhr, textStatus, errorThrown) {\n console.log(\"Error from bot end: \", textStatus);\n },\n });\n }\n\n function get(name){\n if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) {\n return decodeURIComponent(name[1]);\n } else {\n return '';\n }\n }\n\n // ========================== let the bot start the conversation ========================\n function action_trigger() {\n console.log(\"IN ACTION TRIGGER\", get('initquery'));\n const initquery = get('initquery') ? get('initquery') : 'Hi';\n // send an event to the bot, so that bot can start the conversation by greeting the user\n $.ajax({\n url: API_URL,\n type: \"POST\",\n contentType: \"application/json\",\n data: JSON.stringify({ platform: \"web\", query: initquery, sessionid: getCookie('session') }),\n success: function (botResponse, status) {\n console.log(\"Response from api: \", botResponse, \"\\nStatus: \", status);\n botResponse = botResponse.data;\n if (botResponse.hasOwnProperty(\"messages\")) {\n setBotResponse(botResponse.messages);\n }\n $(\"#userInput\").prop(\"disabled\", false);\n },\n error: function (xhr, textStatus, errorThrown) {\n // if there is no response from rasa server\n setBotResponse(\"\");\n console.log(\"Error from bot end: \", textStatus);\n $(\"#userInput\").prop(\"disabled\", false);\n },\n });\n }\n\n function getMessageFromTracki() {\n window.addEventListener(\n \"message\",\n function (e) {\n console.log(\"event data message\", e.data);\n if (e.data === \"AUTHENTICATE_TOKEN_CRM\") {\n if((checkCookie('token') || checkCookieNotEncrypted('geo_token')) && checkCookie('session')) {\n callApiSetAuthenticate();\n }\n }\n },\n false\n );\n if (!checkCookie('token') && !checkCookieNotEncrypted('geo_token')) {\n console.log('Create interval')\n const checkTokenInterval = setInterval(() => {\n console.count('Run interval')\n if((checkCookie('token') || checkCookieNotEncrypted('geo_token')) && checkCookie('session')) {\n console.log('Found cookie')\n callApiSetAuthenticate();\n clearInterval(checkTokenInterval);\n }\n }, 5000);\n } else if (checkCookieNotEncrypted('geo_token')) {\n callApiSetAuthenticate();\n }\n }\n //=====================================\tuser enter or sends the message =====================\n $(\".usrInput\").on(\"keyup keypress\", function (e) {\n var keyCode = e.keyCode || e.which;\n\n var text = $(\".usrInput\").val();\n if (keyCode === 13) {\n if (text == \"\" || $.trim(text) == \"\") {\n e.preventDefault();\n return false;\n } else {\n //destroy the existing chart, if yu are not using charts, then comment the below lines\n $(\".collapsible\").remove();\n if (typeof chatChart !== \"undefined\") {\n chatChart.destroy();\n }\n\n $(\".chart-container\").remove();\n if (typeof modalChart !== \"undefined\") {\n modalChart.destroy();\n }\n\n $(\"#paginated_cards\").remove();\n $(\".suggestions\").remove();\n $(\".quickReplies\").remove();\n $(\".usrInput\").blur();\n setUserResponse(text);\n send(text);\n e.preventDefault();\n return false;\n }\n }\n });\n\n $(\"#sendButton\").on(\"click\", function (e) {\n var text = $(\".usrInput\").val();\n if (text == \"\" || $.trim(text) == \"\") {\n e.preventDefault();\n return false;\n } else {\n //destroy the existing chart\n\n $(\".chart-container\").remove();\n if (typeof modalChart !== \"undefined\") {\n modalChart.destroy();\n }\n\n $(\".suggestions\").remove();\n $(\"#paginated_cards\").remove();\n $(\".quickReplies\").remove();\n $(\".usrInput\").blur();\n setUserResponse(text);\n send(text);\n e.preventDefault();\n return false;\n }\n });\n\n //==================================== Set user response =====================================\n function setUserResponse(message) {\n var UserResponse =\n '

' +\n message +\n '

';\n $(UserResponse).appendTo(\".chats\").show(\"slow\");\n\n $(\".usrInput\").val(\"\");\n scrollToBottomOfResults();\n showBotTyping();\n $(\".suggestions\").remove();\n }\n\n //=========== Scroll to the bottom of the chats after new message has been added to chat ======\n function scrollToBottomOfResults() {\n var terminalResultsDiv = document.getElementById(\"chats\");\n terminalResultsDiv.scrollTop = terminalResultsDiv.scrollHeight;\n }\n\n //============== send the user message to rasa server =============================================\n function send(message) {\n $.ajax({\n url: API_URL,\n type: \"POST\",\n contentType: \"application/json\",\n data: JSON.stringify({\n platform: \"web\",\n query: message,\n sessionid: getCookie('session'),\n }),\n success: function (botResponse, status) {\n console.log(\"Response from Rasa: \", botResponse, \"\\nStatus: \", status);\n botResponse = botResponse.data;\n // if user wants to restart the chat and clear the existing chat contents\n if (message.toLowerCase() == \"/restart\") {\n $(\"#userInput\").prop(\"disabled\", false);\n\n //if you want the bot to start the conversation after restart\n action_trigger();\n return;\n }\n if (botResponse.hasOwnProperty(\"messages\")) {\n console.log(\"Message received is : \", message);\n console.log(\"INtent is: \", botResponse.intent);\n\n if (\n botResponse.intent.includes(\"faq\") ||\n botResponse.intent.includes(\"howgpstrackerwork\") ||\n botResponse.intent.includes(\"setupvideo\") ||\n botResponse.intent.includes(\"usermanual\") ||\n botResponse.intent == \"chat\" ||\n botResponse.intent == \"human\" ||\n botResponse.intent == \"agentsupport\"\n ) {\n if (!message.includes(\"followup\")) {\n console.log(\n \"Sending to botresp with intent.. \",\n botResponse.intent\n );\n setBotResponse(botResponse.messages, botResponse.intent);\n } else {\n setBotResponse(botResponse.messages);\n }\n } else {\n setBotResponse(botResponse.messages);\n }\n }\n },\n error: function (xhr, textStatus, errorThrown) {\n if (message.toLowerCase() == \"/restart\") {\n // $(\"#userInput\").prop('disabled', false);\n\n //if you want the bot to start the conversation after the restart action.\n action_trigger();\n // return;\n }\n\n // if there is no response from rasa server\n setBotResponse(\"\");\n console.log(\"Error from bot end: \", textStatus);\n },\n });\n }\n\n //=================== set bot response in the chats ===========================================\n function setBotResponse(response, intent = false) {\n //display bot response after 500 milliseconds\n setTimeout(function () {\n hideBotTyping();\n if (response.length < 1) {\n //if there is no response from Rasa, send fallback message to the user\n var fallbackMsg = \"We have experienced an error, please call us at 323-785-2020 9 AM to 9 PM EST 7 days a week to resolve any concern you may be having.\";\n\n var BotResponse =\n '

' +\n fallbackMsg +\n '

';\n\n $(BotResponse).appendTo(\".chats\").hide().fadeIn(1000);\n scrollToBottomOfResults();\n } else {\n //if we get response from Rasa\n for (let i = 0; i < response.length; i++) {\n //check if the response contains \"text\"\n if (response[i].hasOwnProperty(\"text\")) {\n var BotResponse =\n '

' +\n response[i].text +\n '

';\n $(BotResponse).appendTo(\".chats\").hide().fadeIn(1000);\n }\n\n //check if the response contains \"images\"\n if (response[i].hasOwnProperty(\"image\")) {\n var BotResponse =\n '
' +\n '' +\n '
';\n $(BotResponse).appendTo(\".chats\").hide().fadeIn(1000);\n }\n\n //check if the response contains \"buttons\"\n if (response[i].hasOwnProperty(\"buttons\")) {\n addSuggestion(response[i].buttons);\n }\n\n //check if the response contains \"attachment\"\n if (response[i].hasOwnProperty(\"attachment\")) {\n console.log(\"RESP IN TIMEOUT IS \", i);\n\n let attachment = response[i].attachment.reverse();\n\n (function myLoop(x) {\n if (x == attachment.length) x = x - 1;\n setTimeout(function () {\n //check if the attachment type is \"video\"\n console.log(\"x IN TIME\", x);\n console.log(\"RESP IN TIMEOUT IS \", attachment);\n if (attachment[x].type == \"video\") {\n let video_url = attachment[x].payload.src;\n\n var BotResponse =\n '
';\n $(BotResponse).appendTo(\".chats\").hide().fadeIn(1000);\n }\n --x;\n if (x >= 0) myLoop(x); // decrement i and call myLoop again if i > 0\n }, 1500);\n })(attachment.length);\n }\n\n console.log(\"Responses\", response[i])\n if(response[i].hasOwnProperty(\"url\")){\n // console.log(\"SHOULD DO GET REQUEST: \",response[i].url )\n $.get(response[i].url, function(data, status){\n console.log(\"Data: \" + data + \"\\nStatus: \" + status);\n });\n }\n //check if the response contains \"custom\" message\n if (response[i].hasOwnProperty(\"custom\")) {\n //check if the custom payload type is \"quickReplies\"\n if (response[i].custom.payload == \"quickReplies\") {\n let quickRepliesData = response[i].custom.data;\n showQuickReplies(quickRepliesData);\n return;\n }\n\n if (response[i].custom[0] != undefined) {\n //check if the custom payload type is \"pdf_attachment\"\n if (response[i].custom[0].payload == \"pdf_attachment\") {\n console.log(\"SHOULD RENDER PDF\");\n\n renderPdfAttachment(response[i].custom[0].data[0]);\n }\n }\n\n if (response[i].custom[0] != undefined) {\n //check if the custom payload type is \"dropDown\"\n if (response[i].custom[0].payload == \"dropDown\") {\n let dropDownData = response[i].custom[0].data;\n renderDropDwon(dropDownData);\n return;\n }\n\n if(response[i].custom[0].payload == 'selectOptions') {\n let selectOptionsData = response[i].custom[0].data;\n renderSelectOpt(selectOptionsData)\n }\n }\n\n //check if the custom payload type is \"location\"\n if (response[i].custom.payload == \"location\") {\n $(\"#userInput\").prop(\"disabled\", true);\n getLocation();\n scrollToBottomOfResults();\n return;\n }\n\n //check if the custom payload type is \"cardsCarousel\"\n if (response[i].custom.payload == \"cardsCarousel\") {\n let restaurantsData = response[i].custom.data;\n showCardsCarousel(restaurantsData);\n return;\n }\n\n //check if the custom payload type is \"chart\"\n if (response[i].custom.payload == \"chart\") {\n // sample format of the charts data:\n // var chartData = { \"title\": \"Leaves\", \"labels\": [\"Sick Leave\", \"Casual Leave\", \"Earned Leave\", \"Flexi Leave\"], \"backgroundColor\": [\"#36a2eb\", \"#ffcd56\", \"#ff6384\", \"#009688\", \"#c45850\"], \"chartsData\": [5, 10, 22, 3], \"chartType\": \"pie\", \"displayLegend\": \"true\" }\n\n //store the below parameters as global variable,\n // so that it can be used while displaying the charts in modal.\n let chartData = response[i].custom.data;\n let title = chartData.title;\n let labels = chartData.labels;\n let backgroundColor = chartData.backgroundColor;\n let chartsData = chartData.chartsData;\n let chartType = chartData.chartType;\n let displayLegend = chartData.displayLegend;\n\n // pass the above variable to createChart function\n createChart(\n title,\n labels,\n backgroundColor,\n chartsData,\n chartType,\n displayLegend\n );\n return;\n }\n\n //check of the custom payload type is \"collapsible\"\n if (response[i].custom.payload == \"collapsible\") {\n let data = response[i].custom.data;\n //pass the data variable to createCollapsible function\n createCollapsible(data);\n }\n }\n }\n scrollToBottomOfResults();\n console.log(\"INTENT BEFORE IF\", intent)\n if (intent != false && !intent.includes(\"followup\")) {\n console.log(\"BEFORE SEND: \", intent)\n send(mapIntentToFollowUp(intent)); // sending message with intent and followup\n }\n }\n }, 600);\n }\n\n //====================================== Toggle chatbot =======================================\n $(\"#profile_div\").click(function () {\n $(\".profile_div\").toggle();\n $(\".widget\").toggle();\n });\n\n //====================================== Render Pdf attachment =======================================\n function renderPdfAttachment(data) {\n let pdf_url = data.url;\n let pdf_title = data.title;\n let pdf_attachment =\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n pdf_title +\n \" \" +\n \"
\" +\n \"
\" +\n \"
\";\n $(\".chats\").append(pdf_attachment);\n scrollToBottomOfResults();\n }\n\n\n\n\n\n //======================================= selectboxes ===============================================\n function renderSelectOpt(data){\n var options = \"\"\n\n for (let i = 0; i < data.length; i++){\n options +=\n '' +'
';\n }\n console.log(\"ALL OPTIONS \", options)\n var select =\n '
' +\n options +\n \"
\";\n $(\".chats\").append(select);\n scrollToBottomOfResults();\n\n\n\n\n $(\"#btnsub\").click(function () {\n var selected = [];\n $('.checkboxes input:checked').each(function() {\n selected.push($(this).attr('value'));\n });\n\n console.log(\"SELECTED, \", escape(selected.join()))\n\n // setUserResponse(selected);\n send(escape(selected.join()));\n $(\".dropDownMsg\").remove();\n $(\".checkboxes\").remove();\n });\n\n var submitButton = $('#btnsub');\n submitButton.attr('disabled','disabled');\n\n $(\".checkboxes input\").change(function () {\n submitButton.attr('disabled','disabled');\n console.log(\"Something was changed in the input of checkboxes!\")\n $('.checkboxes input:checked').each(function() {\n if ($(this).attr('value') !== \"\") {\n submitButton.removeAttr('disabled');\n }\n });\n })\n\n }\n\n\n //====================================== DropDown ==================================================\n //render the dropdown messageand handle user selection\n function renderDropDwon(data) {\n var options = \"\";\n for (let i = 0; i < data.length; i++) {\n options +=\n '\";\n }\n var select =\n '
\";\n $(\".chats\").append(select);\n scrollToBottomOfResults();\n\n //add event handler if user selects a option.\n $(\"select\").change(function () {\n var value = \"\";\n var label = \"\";\n $(\"select option:selected\").each(function () {\n label += $(this).text();\n value += $(this).val();\n });\n\n setUserResponse(label);\n send(value);\n $(\".dropDownMsg\").remove();\n });\n }\n\n //====================================== Suggestions ===========================================\n\n function addSuggestion(textToAdd) {\n setTimeout(function () {\n var suggestions = textToAdd;\n var suggLength = textToAdd.length;\n $(\n '
'\n )\n .appendTo(\".chats\")\n .hide()\n .fadeIn(500);\n // Loop through suggestions\n for (let i = 0; i < suggLength; i++) {\n $(\n '
\" +\n suggestions[i].title +\n \"
\"\n ).appendTo(\".menu\");\n }\n scrollToBottomOfResults();\n }, 600);\n }\n\n // on click of suggestions, get the value and send to rasa\n $(document).on(\"click\", \".menu .menuChips\", function () {\n var text = this.innerText;\n var payload = this.getAttribute(\"data-payload\");\n console.log(\"payload: \", this.getAttribute(\"data-payload\"));\n setUserResponse(text);\n console.log(\"SEND : \", payload);\n send(payload);\n\n //delete the suggestions once user click on it\n $(\".suggestions\").remove();\n });\n\n //====================================== functions for drop-down menu of the bot =========================================\n\n //restart function to restart the conversation.\n $(\"#restart\").click(function () {\n restartConversation();\n });\n\n //clear function to clear the chat contents of the widget.\n $(\"#clear\").click(function () {\n $(\".chats\").fadeOut(\"normal\", function () {\n $(\".chats\").html(\"\");\n $(\".chats\").fadeIn();\n });\n });\n\n //close function to close the widget.\n $(\"#close\").click(function () {\n window.addEventListener(\"closeChat\", () => {\n console.log(\"iframe closeChat\");\n });\n const event = document.createEvent(\"Event\");\n event.initEvent(\"closeChat\", true, true);\n sendButton.dispatchEvent(event);\n $(\".profile_div\").toggle();\n $(\".widget\").toggle();\n scrollToBottomOfResults();\n });\n\n //====================================== Cards Carousel =========================================\n\n function showCardsCarousel(cardsToAdd) {\n var cards = createCardsCarousel(cardsToAdd);\n\n $(cards).appendTo(\".chats\").show();\n\n if (cardsToAdd.length <= 2) {\n $(\".cards_scroller>div.carousel_cards:nth-of-type(\" + i + \")\").fadeIn(\n 3000\n );\n } else {\n for (var i = 0; i < cardsToAdd.length; i++) {\n $(\".cards_scroller>div.carousel_cards:nth-of-type(\" + i + \")\").fadeIn(\n 3000\n );\n }\n $(\".cards .arrow.prev\").fadeIn(\"3000\");\n $(\".cards .arrow.next\").fadeIn(\"3000\");\n }\n\n scrollToBottomOfResults();\n\n const card = document.querySelector(\"#paginated_cards\");\n const card_scroller = card.querySelector(\".cards_scroller\");\n var card_item_size = 225;\n\n card\n .querySelector(\".arrow.next\")\n .addEventListener(\"click\", scrollToNextPage);\n card\n .querySelector(\".arrow.prev\")\n .addEventListener(\"click\", scrollToPrevPage);\n\n // For paginated scrolling, simply scroll the card one item in the given\n // direction and let css scroll snaping handle the specific alignment.\n function scrollToNextPage() {\n card_scroller.scrollBy(card_item_size, 0);\n }\n\n function scrollToPrevPage() {\n card_scroller.scrollBy(-card_item_size, 0);\n }\n }\n\n function createCardsCarousel(cardsData) {\n var cards = \"\";\n\n for (let i = 0; i < cardsData.length; i++) {\n let title = cardsData[i].name;\n let ratings = Math.round((cardsData[i].ratings / 5) * 100) + \"%\";\n data = cardsData[i];\n let item =\n '
' +\n '
' +\n '' +\n title +\n \" \" +\n '
' +\n '
' +\n '
' +\n \"
\" +\n \"
\" +\n \"
\" +\n \"
\";\n\n cards += item;\n }\n\n var cardContents =\n '
' +\n cards +\n '
';\n\n return cardContents;\n }\n\n //====================================== Quick Replies ==================================================\n\n function showQuickReplies(quickRepliesData) {\n var chips = \"\";\n for (let i = 0; i < quickRepliesData.length; i++) {\n var chip =\n '
\" +\n quickRepliesData[i].title +\n \"
\";\n chips += chip;\n }\n\n var quickReplies =\n '
' +\n chips +\n '
';\n $(quickReplies).appendTo(\".chats\").fadeIn(1000);\n scrollToBottomOfResults();\n const slider = document.querySelector(\".quickReplies\");\n let isDown = false;\n let startX;\n let scrollLeft;\n\n slider.addEventListener(\"mousedown\", (e) => {\n isDown = true;\n slider.classList.add(\"active\");\n startX = e.pageX - slider.offsetLeft;\n scrollLeft = slider.scrollLeft;\n });\n slider.addEventListener(\"mouseleave\", () => {\n isDown = false;\n slider.classList.remove(\"active\");\n });\n slider.addEventListener(\"mouseup\", () => {\n isDown = false;\n slider.classList.remove(\"active\");\n });\n slider.addEventListener(\"mousemove\", (e) => {\n if (!isDown) return;\n e.preventDefault();\n const x = e.pageX - slider.offsetLeft;\n const walk = (x - startX) * 3; //scroll-fast\n slider.scrollLeft = scrollLeft - walk;\n });\n }\n\n // on click of quickreplies, get the value and send to rasa\n $(document).on(\"click\", \".quickReplies .chip\", function () {\n var text = this.innerText;\n var payload = this.getAttribute(\"data-payload\");\n console.log(\"chip payload: \", this.getAttribute(\"data-payload\"));\n setUserResponse(text);\n send(payload);\n\n //delete the quickreplies\n $(\".quickReplies\").remove();\n });\n\n //====================================== Get User Location ==================================================\n function getLocation() {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(\n getUserPosition,\n handleLocationAccessError\n );\n } else {\n response = \"Geolocation is not supported by this browser.\";\n }\n }\n\n function getUserPosition(position) {\n response =\n \"Latitude: \" +\n position.coords.latitude +\n \" Longitude: \" +\n position.coords.longitude;\n console.log(\"location: \", response);\n\n //here you add the intent which you want to trigger\n response =\n '/inform{\"latitude\":' +\n position.coords.latitude +\n ',\"longitude\":' +\n position.coords.longitude +\n \"}\";\n $(\"#userInput\").prop(\"disabled\", false);\n send(response);\n showBotTyping();\n }\n\n function handleLocationAccessError(error) {\n switch (error.code) {\n case error.PERMISSION_DENIED:\n console.log(\"User denied the request for Geolocation.\");\n break;\n case error.POSITION_UNAVAILABLE:\n console.log(\"Location information is unavailable.\");\n break;\n case error.TIMEOUT:\n console.log(\"The request to get user location timed out.\");\n break;\n case error.UNKNOWN_ERROR:\n console.log(\"An unknown error occurred.\");\n break;\n }\n\n response = '/inform{\"user_location\":\"deny\"}';\n send(response);\n showBotTyping();\n $(\".usrInput\").val(\"\");\n $(\"#userInput\").prop(\"disabled\", false);\n }\n\n //======================================bot typing animation ======================================\n function showBotTyping() {\n var botTyping =\n '
' +\n '
' +\n '
' +\n '
' +\n \"
\";\n $(botTyping).appendTo(\".chats\");\n $(\".botTyping\").show();\n scrollToBottomOfResults();\n }\n\n function hideBotTyping() {\n $(\"#botAvatar\").remove();\n $(\".botTyping\").remove();\n }\n\n //====================================== Collapsible =========================================\n\n // function to create collapsible,\n // for more info refer:https://materializecss.com/collapsible.html\n function createCollapsible(data) {\n //sample data format:\n //var data=[{\"title\":\"abc\",\"description\":\"xyz\"},{\"title\":\"pqr\",\"description\":\"jkl\"}]\n let list = \"\";\n for (let i = 0; i < data.length; i++) {\n let item =\n \"
  • \" +\n '
    ' +\n data[i].title +\n \"
    \" +\n '
    ' +\n data[i].description +\n \"
    \" +\n \"
  • \";\n list += item;\n }\n var contents = '\";\n $(contents).appendTo(\".chats\");\n\n // initialize the collapsible\n $(\".collapsible\").collapsible();\n scrollToBottomOfResults();\n }\n\n //====================================== creating Charts ======================================\n\n //function to create the charts & render it to the canvas\n function createChart(\n title,\n labels,\n backgroundColor,\n chartsData,\n chartType,\n displayLegend\n ) {\n //create the \".chart-container\" div that will render the charts in canvas as required by charts.js,\n // for more info. refer: https://www.chartjs.org/docs/latest/getting-started/usage.html\n var html =\n '
    ';\n $(html).appendTo(\".chats\");\n\n //create the context that will draw the charts over the canvas in the \".chart-container\" div\n var ctx = $(\"#chat-chart\");\n\n // Once you have the element or context, instantiate the chart-type by passing the configuration,\n //for more info. refer: https://www.chartjs.org/docs/latest/configuration/\n var data = {\n labels: labels,\n datasets: [\n {\n label: title,\n backgroundColor: backgroundColor,\n data: chartsData,\n fill: false,\n },\n ],\n };\n var options = {\n title: {\n display: true,\n text: title,\n },\n layout: {\n padding: {\n left: 5,\n right: 0,\n top: 0,\n bottom: 0,\n },\n },\n legend: {\n display: displayLegend,\n position: \"right\",\n labels: {\n boxWidth: 5,\n fontSize: 10,\n },\n },\n };\n\n //draw the chart by passing the configuration\n chatChart = new Chart(ctx, {\n type: chartType,\n data: data,\n options: options,\n });\n\n scrollToBottomOfResults();\n }\n\n // on click of expand button, get the chart data from gloabl variable & render it to modal\n $(document).on(\"click\", \"#expand\", function () {\n //the parameters are declared gloabally while we get the charts data from rasa.\n createChartinModal(\n title,\n labels,\n backgroundColor,\n chartsData,\n chartType,\n displayLegend\n );\n });\n\n //function to render the charts in the modal\n function createChartinModal(\n title,\n labels,\n backgroundColor,\n chartsData,\n chartType,\n displayLegend\n ) {\n //if you want to display the charts in modal, make sure you have configured the modal in index.html\n //create the context that will draw the charts over the canvas in the \"#modal-chart\" div of the modal\n var ctx = $(\"#modal-chart\");\n\n // Once you have the element or context, instantiate the chart-type by passing the configuration,\n //for more info. refer: https://www.chartjs.org/docs/latest/configuration/\n var data = {\n labels: labels,\n datasets: [\n {\n label: title,\n backgroundColor: backgroundColor,\n data: chartsData,\n fill: false,\n },\n ],\n };\n var options = {\n title: {\n display: true,\n text: title,\n },\n layout: {\n padding: {\n left: 5,\n right: 0,\n top: 0,\n bottom: 0,\n },\n },\n legend: {\n display: displayLegend,\n position: \"right\",\n },\n };\n\n modalChart = new Chart(ctx, {\n type: chartType,\n data: data,\n options: options,\n });\n }\n // MAP INTENT TO FOLLOWUP INTENT\n function mapIntentToFollowUp(intent) {\n if (intent.includes(\"faq\")) intent = \"devicesetup&support followup\";\n if (intent.includes(\"setupvideo\")) intent = \"devicesetup&support followup\";\n if (intent.includes(\"howgpstrackerwork\"))\n intent = \"devicesetup&support followup\";\n if (intent.includes(\"usermanual\")) intent = \"devicesetup&support followup\";\n if(intent == \"chat\" || intent == \"human\" || intent == \"agentsupport\") intent = `Default Welcome Intent followup`\n console.log(\"HMM followup? \", intent)\n return intent;\n }\n};\n\nexport { geobot };\n","import { conformsTo, isFunction, isObject } from 'lodash';\nimport invariant from 'invariant';\n/**\n * Validate the shape of redux store\n */\nexport default function checkStore(store) {\n const shape = {\n dispatch: isFunction,\n subscribe: isFunction,\n getState: isFunction,\n replaceReducer: isFunction,\n runSaga: isFunction,\n injectedReducers: isObject,\n injectedSagas: isObject,\n };\n invariant(conformsTo(store, shape), '(app/utils...) injectors: Expected a valid redux store');\n}\n","import invariant from 'invariant';\nimport { isEmpty, isFunction, isString } from 'lodash';\nimport checkStore from './checkStore';\nimport createReducer from '../store/reducer';\nexport function injectReducerFactory(store, isValid) {\n return function injectReducer(key, reducer) {\n if (!isValid)\n checkStore(store);\n invariant(isString(key) && !isEmpty(key) && isFunction(reducer), '(app/utils...) injectReducer: Expected `reducer` to be a reducer function');\n // Check `store.injectedReducers[key] === reducer` for hot reloading when a key is the same but a reducer is different\n if (Reflect.has(store.injectedReducers, key) &&\n store.injectedReducers[key] === reducer)\n return;\n store.injectedReducers[key] = reducer; // eslint-disable-line no-param-reassign\n store.replaceReducer(createReducer(store.injectedReducers));\n };\n}\nexport default function getInjectors(store) {\n checkStore(store);\n return {\n injectReducer: injectReducerFactory(store, true),\n };\n}\n","import React from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { ReactReduxContext } from 'react-redux';\nimport getInjectors from './reducerInjectors';\n/**\n * Dynamically injects a reducer\n *\n * @param {string} key A key of the reducer\n * @param {function} reducer A reducer that will be injected\n *\n */\nexport default ({ key, reducer }) => (WrappedComponent) => {\n class ReducerInjector extends React.Component {\n constructor(props, context) {\n super(props, context);\n getInjectors(context.store).injectReducer(key, reducer);\n }\n render() {\n return React.createElement(WrappedComponent, Object.assign({}, this.props));\n }\n }\n ReducerInjector.WrappedComponent = WrappedComponent;\n ReducerInjector.contextType = ReactReduxContext;\n ReducerInjector.displayName = `withReducer(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`;\n return hoistNonReactStatics(ReducerInjector, WrappedComponent);\n};\nconst useInjectReducer = ({ key, reducer }) => {\n const context = React.useContext(ReactReduxContext);\n React.useEffect(() => {\n getInjectors(context.store).injectReducer(key, reducer);\n }, [context.store, key, reducer]);\n};\nexport { useInjectReducer };\n","export const RESTART_ON_REMOUNT = '@@saga-injector/restart-on-remount';\nexport const DAEMON = '@@saga-injector/daemon';\nexport const ONCE_TILL_UNMOUNT = '@@saga-injector/once-till-unmount';\nexport const APP_ENV = process.env.NODE_ENV;\nexport const BASE_API_URL = process.env.REACT_APP_BASE_API_URL;\n","import invariant from 'invariant';\nimport { isEmpty, isFunction, isString, conformsTo } from 'lodash';\nimport checkStore from './checkStore';\nimport { DAEMON, ONCE_TILL_UNMOUNT, RESTART_ON_REMOUNT } from '../constants/app';\nconst allowedModes = [RESTART_ON_REMOUNT, DAEMON, ONCE_TILL_UNMOUNT];\nconst checkKey = (key) => invariant(isString(key) && !isEmpty(key), '(app/utils...) injectSaga: Expected `key` to be a non empty string');\nconst checkDescriptor = (descriptor) => {\n const shape = {\n saga: isFunction,\n mode: (mode) => isString(mode) && allowedModes.includes(mode),\n };\n invariant(conformsTo(descriptor, shape), '(app/utils...) injectSaga: Expected a valid saga descriptor');\n};\nexport function injectSagaFactory(store, isValid) {\n return function injectSaga(key, descriptor = {}, args) {\n if (!isValid)\n checkStore(store);\n const newDescriptor = Object.assign({}, descriptor, { mode: descriptor.mode || DAEMON });\n const { saga, mode } = newDescriptor;\n checkKey(key);\n checkDescriptor(newDescriptor);\n let hasSaga = Reflect.has(store.injectedSagas, key);\n if (process.env.NODE_ENV !== 'production') {\n const oldDescriptor = store.injectedSagas[key];\n // enable hot reloading of daemon and once-till-unmount sagas\n if (hasSaga && oldDescriptor.saga !== saga) {\n oldDescriptor.task.cancel();\n hasSaga = false;\n }\n }\n if (!hasSaga ||\n (hasSaga && mode !== DAEMON && mode !== ONCE_TILL_UNMOUNT)) {\n /* eslint-disable no-param-reassign */\n store.injectedSagas[key] = Object.assign({}, newDescriptor, { task: store.runSaga(saga, args) });\n /* eslint-enable no-param-reassign */\n }\n };\n}\nexport function ejectSagaFactory(store, isValid) {\n return function ejectSaga(key) {\n if (!isValid)\n checkStore(store);\n checkKey(key);\n if (Reflect.has(store.injectedSagas, key)) {\n const descriptor = store.injectedSagas[key];\n if (descriptor.mode && descriptor.mode !== DAEMON) {\n descriptor.task.cancel();\n // Clean up in production; in development we need `descriptor.saga` for hot reloading\n if (process.env.NODE_ENV === 'production') {\n // Need some value to be able to detect `ONCE_TILL_UNMOUNT` sagas in `injectSaga`\n store.injectedSagas[key] = 'done'; // eslint-disable-line no-param-reassign\n }\n }\n }\n };\n}\nexport default function getInjectors(store) {\n checkStore(store);\n return {\n injectSaga: injectSagaFactory(store, true),\n ejectSaga: ejectSagaFactory(store, true),\n };\n}\n","import React from 'react';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { ReactReduxContext } from 'react-redux';\nimport getInjectors from './sagaInjectors';\n/**\n * Dynamically injects a saga, passes component's props as saga arguments\n *\n * @param {string} key A key of the saga\n * @param {function} saga A root saga that will be injected\n * @param {string} [mode] By default (constants.DAEMON) the saga will be started\n * on component mount and never canceled or started again. Another two options:\n * - constants.RESTART_ON_REMOUNT — the saga will be started on component mount and\n * cancelled with `task.cancel()` on component unmount for improved performance,\n * - constants.ONCE_TILL_UNMOUNT — behaves like 'RESTART_ON_REMOUNT' but never runs it again.\n *\n */\nexport default ({ key, saga, mode }) => (WrappedComponent) => {\n class InjectSaga extends React.Component {\n constructor(props, context) {\n super(props, context);\n this.injectors = getInjectors(context.store);\n this.injectors.injectSaga(key, { saga, mode }, this.props);\n }\n componentWillUnmount() {\n this.injectors.ejectSaga(key);\n }\n render() {\n return React.createElement(WrappedComponent, Object.assign({}, this.props));\n }\n }\n InjectSaga.WrappedComponent = WrappedComponent;\n InjectSaga.contextType = ReactReduxContext;\n InjectSaga.displayName = `withSaga(${WrappedComponent.displayName ||\n WrappedComponent.name ||\n 'Component'})`;\n return hoistNonReactStatics(InjectSaga, WrappedComponent);\n};\nconst useInjectSaga = ({ key, saga, mode }) => {\n const context = React.useContext(ReactReduxContext);\n React.useEffect(() => {\n const injectors = getInjectors(context.store);\n injectors.injectSaga(key, { saga, mode }, '');\n return () => {\n injectors.ejectSaga(key);\n };\n }, [context.store, key, mode, saga]);\n};\nexport { useInjectSaga };\n","/*\n * HomeConstants\n * Each action has a corresponding type, which the reducer knows and picks up on.\n * To avoid weird typos between the reducer and the actions, we save them as\n * constants here. We prefix them with 'yourproject/YourComponent' so we avoid\n * reducers accidentally picking up actions they shouldn't.\n *\n * Follow this format:\n * export const YOUR_ACTION_CONSTANT = 'yourproject/YourContainer/YOUR_ACTION_CONSTANT';\n */\nexport const CHANGE_USERNAME = 'boilerplate/Home/CHANGE_USERNAME';\nexport const FETCH_DATA_SESSION_REQUEST = 'geobot/Home/FETCH_DATA_SESSION_REQUEST';\nexport const FETCH_DATA_SESSION_SUCCEED = 'geobot/Home/FETCH_DATA_SESSION_SUCCEED';\nexport const FETCH_DATA_SESSION_FAILED = 'geobot/Home/FETCH_DATA_SESSION_FAILED';\n","/*\n * HomeReducer\n *\n * The reducer takes care of our data. Using actions, we can\n * update our application state. To add a new action,\n * add it to the switch statement in the reducer function\n *\n */\nimport produce from \"immer\";\nimport { CHANGE_USERNAME, FETCH_DATA_SESSION_REQUEST, FETCH_DATA_SESSION_SUCCEED } from \"../constants\";\n// The initial state of the App\nexport const initialState = {\n username: \"\",\n sessionId: null,\n error: null,\n loading: false,\n};\n/* eslint-disable default-case, no-param-reassign */\nconst homeReducer = (state = initialState, action) => produce(state, (draft) => {\n switch (action.type) {\n case CHANGE_USERNAME:\n // Delete prefixed '@' from the github username\n draft.username = action.username.replace(/@/gi, \"\");\n break;\n case FETCH_DATA_SESSION_REQUEST:\n draft.loading = true;\n break;\n case FETCH_DATA_SESSION_SUCCEED:\n // Delete prefixed '@' from the github username\n draft.loading = false;\n draft.sessionId = action.data;\n break;\n }\n});\nexport default homeReducer;\n","/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.3\n *\n * The request has been received but not yet acted upon. It is non-committal, meaning that there is no way in HTTP to later send an asynchronous response indicating the outcome of processing the request. It is intended for cases where another process or server handles the request, or for batch processing.\n */\nexport const ACCEPTED = 202;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.3\n *\n * This error response means that the server, while working as a gateway to get a response needed to handle the request, got an invalid response.\n */\nexport const BAD_GATEWAY = 502;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.1\n *\n * This response means that server could not understand the request due to invalid syntax.\n */\nexport const BAD_REQUEST = 400;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.8\n *\n * This response is sent when a request conflicts with the current state of the server.\n */\nexport const CONFLICT = 409;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.1\n *\n * This interim response indicates that everything so far is OK and that the client should continue with the request or ignore it if it is already finished.\n */\nexport const CONTINUE = 100;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.2\n *\n * The request has succeeded and a new resource has been created as a result of it. This is typically the response sent after a PUT request.\n */\nexport const CREATED = 201;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.14\n *\n * This response code means the expectation indicated by the Expect request header field can't be met by the server.\n */\nexport const EXPECTATION_FAILED = 417;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.5\n *\n * The request failed due to failure of a previous request.\n */\nexport const FAILED_DEPENDENCY = 424;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.3\n *\n * The client does not have access rights to the content, i.e. they are unauthorized, so server is rejecting to give proper response. Unlike 401, the client's identity is known to the server.\n */\nexport const FORBIDDEN = 403;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.5\n *\n * This error response is given when the server is acting as a gateway and cannot get a response in time.\n */\nexport const GATEWAY_TIMEOUT = 504;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.9\n *\n * This response would be sent when the requested content has been permenantly deleted from server, with no forwarding address. Clients are expected to remove their caches and links to the resource. The HTTP specification intends this status code to be used for \"limited-time, promotional services\". APIs should not feel compelled to indicate resources that have been deleted with this status code.\n */\nexport const GONE = 410;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.6\n *\n * The HTTP version used in the request is not supported by the server.\n */\nexport const HTTP_VERSION_NOT_SUPPORTED = 505;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2324#section-2.3.2\n *\n * Any attempt to brew coffee with a teapot should result in the error code \"418 I'm a teapot\". The resulting entity body MAY be short and stout.\n */\nexport const IM_A_TEAPOT = 418;\n/**\n * UNOFFICIAL w/ NO DOCS\n */\nexport const INSUFFICIENT_SPACE_ON_RESOURCE = 419;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.6\n *\n * The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.\n */\nexport const INSUFFICIENT_STORAGE = 507;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.1\n *\n * The server has encountered a situation it doesn't know how to handle.\n */\nexport const INTERNAL_SERVER_ERROR = 500;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.10\n *\n * Server rejected the request because the Content-Length header field is not defined and the server requires it.\n */\nexport const LENGTH_REQUIRED = 411;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.4\n *\n * The resource that is being accessed is locked.\n */\nexport const LOCKED = 423;\n/**\n * @deprecated\n * A deprecated response used by the Spring Framework when a method has failed.\n */\nexport const METHOD_FAILURE = 420;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.5\n *\n * The request method is known by the server but has been disabled and cannot be used. For example, an API may forbid DELETE-ing a resource. The two mandatory methods, GET and HEAD, must never be disabled and should not return this error code.\n */\nexport const METHOD_NOT_ALLOWED = 405;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.2\n *\n * This response code means that URI of requested resource has been changed. Probably, new URI would be given in the response.\n */\nexport const MOVED_PERMANENTLY = 301;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.3\n *\n * This response code means that URI of requested resource has been changed temporarily. New changes in the URI might be made in the future. Therefore, this same URI should be used by the client in future requests.\n */\nexport const MOVED_TEMPORARILY = 302;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.2\n *\n * A Multi-Status response conveys information about multiple resources in situations where multiple status codes might be appropriate.\n */\nexport const MULTI_STATUS = 207;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.1\n *\n * The request has more than one possible responses. User-agent or user should choose one of them. There is no standardized way to choose one of the responses.\n */\nexport const MULTIPLE_CHOICES = 300;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-6\n *\n * The 511 status code indicates that the client needs to authenticate to gain network access.\n */\nexport const NETWORK_AUTHENTICATION_REQUIRED = 511;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.5\n *\n * There is no content to send for this request, but the headers may be useful. The user-agent may update its cached headers for this resource with the new ones.\n */\nexport const NO_CONTENT = 204;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.4\n * This response code means returned meta-information set is not exact set as available from the origin server, but collected from a local or a third party copy. Except this condition, 200 OK response should be preferred instead of this response.\n */\nexport const NON_AUTHORITATIVE_INFORMATION = 203;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.6\n *\n * This response is sent when the web server, after performing server-driven content negotiation, doesn't find any content following the criteria given by the user agent.\n */\nexport const NOT_ACCEPTABLE = 406;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.4\n *\n * The server can not find requested resource. In the browser, this means the URL is not recognized. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client. This response code is probably the most famous one due to its frequent occurence on the web.\n */\nexport const NOT_FOUND = 404;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.2\n *\n * The request method is not supported by the server and cannot be handled. The only methods that servers are required to support (and therefore that must not return this code) are GET and HEAD.\n */\nexport const NOT_IMPLEMENTED = 501;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.1\n *\n * This is used for caching purposes. It is telling to client that response has not been modified. So, client can continue to use same cached version of response.\n */\nexport const NOT_MODIFIED = 304;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.1\n *\n * The request has succeeded. The meaning of a success varies depending on the HTTP method:\n * GET: The resource has been fetched and is transmitted in the message body.\n * HEAD: The entity headers are in the message body.\n * POST: The resource describing the result of the action is transmitted in the message body.\n * TRACE: The message body contains the request message as received by the server\n */\nexport const OK = 200;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.1\n *\n * This response code is used because of range header sent by the client to separate download into multiple streams.\n */\nexport const PARTIAL_CONTENT = 206;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.2\n *\n * This response code is reserved for future use. Initial aim for creating this code was using it for digital payment systems however this is not used currently.\n */\nexport const PAYMENT_REQUIRED = 402;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7538#section-3\n *\n * This means that the resource is now permanently located at another URI, specified by the Location: HTTP Response header. This has the same semantics as the 301 Moved Permanently HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\nexport const PERMANENT_REDIRECT = 308;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.2\n *\n * The client has indicated preconditions in its headers which the server does not meet.\n */\nexport const PRECONDITION_FAILED = 412;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-3\n *\n * The origin server requires the request to be conditional. Intended to prevent the 'lost update' problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.\n */\nexport const PRECONDITION_REQUIRED = 428;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.1\n *\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n */\nexport const PROCESSING = 102;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.2\n *\n * This is similar to 401 but authentication is needed to be done by a proxy.\n */\nexport const PROXY_AUTHENTICATION_REQUIRED = 407;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-5\n *\n * The server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.\n */\nexport const REQUEST_HEADER_FIELDS_TOO_LARGE = 431;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.7\n *\n * This response is sent on an idle connection by some servers, even without any previous request by the client. It means that the server would like to shut down this unused connection. This response is used much more since some browsers, like Chrome, Firefox 27+, or IE9, use HTTP pre-connection mechanisms to speed up surfing. Also note that some servers merely shut down the connection without sending this message.\n */\nexport const REQUEST_TIMEOUT = 408;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.11\n *\n * Request entity is larger than limits defined by server the server might close the connection or return an Retry-After header field.\n */\nexport const REQUEST_TOO_LONG = 413;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.12\n *\n * The URI requested by the client is longer than the server is willing to interpret.\n */\nexport const REQUEST_URI_TOO_LONG = 414;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.4\n *\n * The range specified by the Range header field in the request can't be fulfilled it's possible that the range is outside the size of the target URI's data.\n */\nexport const REQUESTED_RANGE_NOT_SATISFIABLE = 416;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.6\n *\n * This response code is sent after accomplishing request to tell user agent reset document view which sent this request.\n */\nexport const RESET_CONTENT = 205;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.4\n *\n * Server sent this response to directing client to get requested resource to another URI with an GET request.\n */\nexport const SEE_OTHER = 303;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.4\n *\n * The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This responses should be used for temporary conditions and the Retry-After: HTTP header should, if possible, contain the estimated time before the recovery of the service. The webmaster must also take care about the caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.\n */\nexport const SERVICE_UNAVAILABLE = 503;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.2\n *\n * This code is sent in response to an Upgrade request header by the client, and indicates the protocol the server is switching too.\n */\nexport const SWITCHING_PROTOCOLS = 101;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.7\n *\n * Server sent this response to directing client to get requested resource to another URI with same method that used prior request. This has the same semantic than the 302 Found HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\nexport const TEMPORARY_REDIRECT = 307;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-4\n *\n * The user has sent too many requests in a given amount of time (\"rate limiting\").\n */\nexport const TOO_MANY_REQUESTS = 429;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.1\n *\n * Although the HTTP standard specifies \"unauthorized\", semantically this response means \"unauthenticated\". That is, the client must authenticate itself to get the requested response.\n */\nexport const UNAUTHORIZED = 401;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.3\n *\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\nexport const UNPROCESSABLE_ENTITY = 422;\n/**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.13\n *\n * The media format of the requested data is not supported by the server, so the server is rejecting the request.\n */\nexport const UNSUPPORTED_MEDIA_TYPE = 415;\n/**\n * @deprecated\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.6\n *\n * Was defined in a previous version of the HTTP specification to indicate that a requested response must be accessed by a proxy. It has been deprecated due to security concerns regarding in-band configuration of a proxy.\n */\nexport const USE_PROXY = 305;\n","import axios from 'axios';\nimport { isEmpty, assign, merge } from 'lodash';\nimport CookieHandlerInstance from './cookie';\nimport { UNAUTHORIZED } from './httpStatus';\n// import Notifications from './notifications'\nconst singletonEnforcer = Symbol();\nclass AxiosClient {\n constructor(enforcer) {\n if (enforcer !== singletonEnforcer) {\n throw new Error('Cannot initialize Axios client single instance');\n }\n this.axiosClient = axios.create({\n baseURL: process.env.API_URL,\n headers: {\n common: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n }\n }\n });\n if (process.env.COOKIE_NAME &&\n CookieHandlerInstance.checkCookie(process.env.COOKIE_NAME)) {\n this.setHeader(CookieHandlerInstance.getCookie(process.env.COOKIE_NAME));\n }\n this.axiosClient.interceptors.request.use((configure) => {\n return configure;\n }, (error) => {\n return Promise.reject(error);\n });\n this.axiosClient.interceptors.response.use((response) => {\n if (response.data.data && response.data.data.data && Array.isArray(response.data.data.data)) {\n response.data.data.dataObject = response.data.data.data.reduce((dataObject, item) => {\n dataObject[item.id] = item;\n return dataObject;\n }, {});\n }\n return response;\n }, (error) => {\n let dataErrors = error.response.data;\n error.response.errorsObject = {};\n dataErrors.errorsObject = {};\n if (dataErrors.errors &&\n Array.isArray(dataErrors.errors)) {\n if (error.response.status === UNAUTHORIZED && dataErrors.errors[0].message === 'UNAUTHENTICATED') {\n CookieHandlerInstance.removeCookie('token');\n window.location.replace('/');\n }\n }\n return Promise.reject(error.response);\n });\n }\n static get instance() {\n if (!this.axiosClientInstance) {\n this.axiosClientInstance = new AxiosClient(singletonEnforcer);\n }\n return this.axiosClientInstance;\n }\n setHeader(userToken = '') {\n const jwt = /^([A-Za-z0-9\\-_~+]+[=]{0,2})\\.([A-Za-z0-9\\-_~+]+[=]{0,2})(?:\\.([A-Za-z0-9\\-_~+]+[=]{0,2}))?$/;\n if (jwt.test(userToken)) {\n this.axiosClient.defaults.headers.common.Authorization = `Bearer ${userToken}`;\n }\n }\n get(resource, slug = '', config = {}) {\n const requestURL = isEmpty(slug) ? `${resource}` : `${resource}/${slug}`;\n return this.axiosClient.get(requestURL, Object.assign({ data: null }, merge({ headers: this.axiosClient.defaults.headers }, config)));\n }\n post(resource, data, config = {}) {\n return this.axiosClient.post(`${resource}`, data, assign(config, this.axiosClient.defaults.headers));\n }\n update(resource, data, config = {}) {\n return this.axiosClient.put(`${resource}`, data, assign(config, this.axiosClient.defaults.headers));\n }\n put(resource, data, config = {}) {\n return this.axiosClient.put(`${resource}`, data, assign(config, this.axiosClient.defaults.headers));\n }\n patch(resource, data, config = {}) {\n return this.axiosClient.patch(`${resource}`, data, assign(config, this.axiosClient.defaults.headers));\n }\n delete(resource, data, config = {}) {\n return this.axiosClient.delete(`${resource}`, Object.assign({ params: data }, assign(config, this.axiosClient.defaults.headers)));\n }\n}\nexport default AxiosClient.instance;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport axiosClient from \"../../../../utils/axios\";\nexport const fetchDataSession = () => __awaiter(this, void 0, void 0, function* () {\n return yield axiosClient.get(`/createbotsession`);\n});\n","/*\n * Home Actions\n *\n * Actions change things in your application\n * Since this boilerplate uses a uni-directional data flow, specifically redux,\n * we have these actions which are the only way your application interacts with\n * your application state. This guarantees that your state is up to date and nobody\n * messes it up weirdly somewhere.\n *\n * To add a new Action:\n * 1) Import your constant\n * 2) Add a function like this:\n * export function yourAction(var) {\n * return { type: YOUR_ACTION_CONSTANT, var: var }\n * }\n */\nimport * as types from \"../constants\";\n/**\n * Changes the input field of the form\n *\n * @param {string} username The new text of the input field\n *\n * @return {object} An action object with a type of CHANGE_USERNAME\n */\nexport function changeUsername(username) {\n return {\n type: types.CHANGE_USERNAME,\n username,\n };\n}\nexport function fetchDataSessionRequest() {\n return {\n type: types.FETCH_DATA_SESSION_REQUEST,\n };\n}\nexport function fetchDataSessionSucceed(data) {\n return {\n type: types.FETCH_DATA_SESSION_SUCCEED,\n data,\n };\n}\nexport function fetchDataSessionFailed(error) {\n return {\n type: types.FETCH_DATA_SESSION_FAILED,\n error,\n };\n}\n","/**\n * Gets the repositories of the user from Github\n */\nimport { call, put, \n// put,\n// select,\ntakeLatest, } from \"redux-saga/effects\";\n// import { makeSelectUsername } from '../../../containers/HomePage/selectors'\nimport * as apiService from \"../services\";\nimport * as types from \"../constants\";\nimport CookieInstance from \"../../../../utils/cookie\";\nimport { fetchDataSessionSucceed, fetchDataSessionFailed } from \"../actions\";\n/**\n * Github repos request/response handler\n */\nexport function* getSessionIdSaga() {\n try {\n const { data: { data }, } = yield call(apiService.fetchDataSession);\n if (data.sessionid) {\n CookieInstance.setCookie({ name: \"session\", value: data.sessionid, minutesExpired: 86400 });\n }\n yield put(fetchDataSessionSucceed(data));\n }\n catch (error) {\n yield put(fetchDataSessionFailed(error));\n }\n}\nexport default function* fetchData() {\n yield takeLatest(types.FETCH_DATA_SESSION_REQUEST, getSessionIdSaga);\n}\n","/**\n * Homepage selectors\n */\nimport { createSelector } from 'reselect';\nimport { initialState } from '../reducers';\nconst selectHome = (state) => state.home || initialState;\nconst makeSelectUsername = () => createSelector(selectHome, homeState => homeState.username);\nconst makeSelectSessionId = () => createSelector(selectHome, homeState => homeState.sessionId);\nconst makeSelectRequestSessionLoading = () => createSelector(selectHome, homeState => homeState.loading);\nexport { selectHome, makeSelectUsername, makeSelectSessionId, makeSelectRequestSessionLoading };\n","import Cookies from 'js-cookie';\nimport MobileDetect from 'mobile-detect';\nimport _ from 'lodash';\nconst JWT_TOKEN_KEY = 'jwtToken';\n/**\n * Get token on cookies.\n *\n * @returns {*}\n */\nexport const getToken = () => {\n return Cookies.get(JWT_TOKEN_KEY) || null;\n};\n/**\n * Set token on cookies.\n *\n * @param token\n * @param expires (Values is minutes)\n */\nexport const setToken = (token, expires) => {\n const day = Number(expires) / 60 / 24;\n Cookies.set(JWT_TOKEN_KEY, token, { expires: day });\n};\n/**\n * Remove Token on cookies.\n */\nexport const removeToken = () => {\n Cookies.remove(JWT_TOKEN_KEY);\n};\n/**\n * Check if has token.\n * @returns {boolean}\n */\nexport const hasToken = () => {\n return getToken() !== null;\n};\nexport const isMobile = () => {\n const device = new MobileDetect(window.navigator.userAgent);\n return !_.isEmpty(device.phone());\n};\nexport const isMobileWebview = () => {\n // return true;\n return navigator.userAgent.match(/(wv\\)|UIWebView)/) && navigator.userAgent.match(/AppleWebKit/);\n};\nexport const showLoadingSpinner = () => {\n let loading = document.getElementById('spinner-loading');\n if (loading) {\n loading.classList.remove(\"spinner-hide\");\n loading.classList.add(\"spinner-show\");\n }\n};\nexport const hideLoadingSpinner = () => {\n let loading = document.getElementById('spinner-loading');\n if (loading) {\n loading.classList.remove(\"spinner-show\");\n loading.classList.add(\"spinner-hide\");\n }\n};\n// export const formatMoneyJP = (money: number) => {\n// return formatMoney(Number(money), {symbol: \"円\", precision: 0, thousand: \",\", format: \"%v%s\"})\n// }\nexport const isMobileSafari = (navigator) => {\n return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/);\n};\nexport const getCurrentUrl = () => {\n const location = window.location;\n return `${location.origin}${location.pathname}`;\n};\nexport const getOriginUrl = () => {\n const location = window.location;\n return `${location.origin}`;\n};\n","import React, { memo, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { connect } from \"react-redux\";\nimport { compose } from \"redux\";\nimport { createStructuredSelector } from \"reselect\";\nimport { geobot } from \"./geobot\";\nimport { useInjectReducer } from \"../../utils/injectReducer\";\nimport { useInjectSaga } from \"../../utils/injectSaga\";\nimport reducer from \"./store/reducers\";\nimport saga from \"./store/sagas\";\nimport { fetchDataSessionRequest } from \"./store/actions\";\nimport CookieInstance from '../../utils/cookie';\n// import axios from 'axios';\n// import botAvt from '../../assets/img/botAvatar.png';\nimport \"./style.scss\";\nimport { makeSelectRequestSessionLoading, makeSelectSessionId } from \"./store/selectors\";\nimport { isMobileWebview } from \"../../utils/helpers\";\nexport function HomePage(props) {\n useInjectSaga({ key: \"home\", saga });\n useInjectReducer({ key: \"home\", reducer });\n const { fetchDataSessionId, sessionId, loading } = props;\n // const [showChat, setShowChat] = useState(false);\n // const toggleChat = () => setShowChat(!showChat);\n // const action_trigger = async () => {\n // console.log(\"IN ACTION TRIGGER\");\n // const response = await axios.post('https://geo.tracki.com/geo', { platform: \"web\", query: \"Hi\" });\n // console.log('___response', response);\n // };\n useEffect(() => {\n if (!CookieInstance.checkCookie('session')) {\n console.log('Request new session id');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n fetchDataSessionId();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }\n }, []);\n useEffect(() => {\n if (!loading && (sessionId || CookieInstance.checkCookie('session'))) {\n console.log('Initialize Geo script');\n geobot();\n }\n }, [sessionId, loading]);\n return (React.createElement(React.Fragment, null,\n React.createElement(Helmet, null,\n React.createElement(\"title\", null, \"GEO\"),\n React.createElement(\"meta\", { name: \"description\", content: \"GEO - Chatbot\" })),\n React.createElement(\"div\", { className: \"container\", style: { width: \"100%\", padding: isMobileWebview() ? 0 : 10 } },\n React.createElement(\"div\", { id: \"modal1\", className: \"modal\" },\n React.createElement(\"canvas\", { id: \"modal-chart\" })),\n React.createElement(\"div\", { className: isMobileWebview() ? 'widget_webview' : 'widget' },\n !isMobileWebview() &&\n (React.createElement(\"div\", { className: \"chat_header\" },\n React.createElement(\"span\", { className: \"chat_header_title\" }, \"Geo\"),\n React.createElement(\"span\", { className: \"dropdown-trigger\", \"data-target\": \"dropdown1\" },\n React.createElement(\"i\", { className: \"material-icons\" }, \"more_vert\")),\n React.createElement(\"ul\", { id: \"dropdown1\", className: \"dropdown-content\" },\n React.createElement(\"li\", null,\n React.createElement(\"a\", { id: \"clear\" }, \"Clear\")),\n React.createElement(\"li\", null,\n React.createElement(\"a\", { id: \"restart\" }, \"Restart\")),\n React.createElement(\"li\", null,\n React.createElement(\"a\", { id: \"close\" }, \"Close\"))))),\n React.createElement(\"div\", { className: \"chats\", id: \"chats\" },\n React.createElement(\"div\", { className: \"clearfix\" })),\n React.createElement(\"div\", { className: \"keypad\" },\n React.createElement(\"textarea\", { id: \"userInput\", placeholder: \"Type a message...\", className: \"usrInput\" }),\n React.createElement(\"div\", { id: \"sendButton\" },\n React.createElement(\"i\", { className: \"fa fa-paper-plane\", \"aria-hidden\": \"true\" })))))));\n}\nconst mapStateToProps = createStructuredSelector({\n sessionId: makeSelectSessionId(),\n loading: makeSelectRequestSessionLoading(),\n});\nconst mapDispatchToProps = (dispatch) => {\n return {\n fetchDataSessionId: () => dispatch(fetchDataSessionRequest()),\n };\n};\nconst withConnect = connect(mapStateToProps, mapDispatchToProps);\nexport default compose(withConnect, memo)(HomePage);\n","// extracted by mini-css-extract-plugin"],"sourceRoot":""}