@deephaven/console 0.5.2-matplotlib.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/Console.d.ts +3 -0
  2. package/dist/Console.d.ts.map +1 -1
  3. package/dist/Console.js +807 -871
  4. package/dist/Console.js.map +1 -1
  5. package/dist/ConsoleInput.d.ts +1 -38
  6. package/dist/ConsoleInput.d.ts.map +1 -1
  7. package/dist/ConsoleInput.js +331 -436
  8. package/dist/ConsoleInput.js.map +1 -1
  9. package/dist/ConsoleMenu.js +159 -215
  10. package/dist/ConsoleMenu.js.map +1 -1
  11. package/dist/ConsolePropTypes.js +1 -1
  12. package/dist/ConsolePropTypes.js.map +1 -1
  13. package/dist/ConsoleShortcuts.js +2 -2
  14. package/dist/ConsoleShortcuts.js.map +1 -1
  15. package/dist/ConsoleStatusBar.js +85 -125
  16. package/dist/ConsoleStatusBar.js.map +1 -1
  17. package/dist/StoragePropTypes.js +2 -2
  18. package/dist/StoragePropTypes.js.map +1 -1
  19. package/dist/command-history/CommandHistory.css +5 -2
  20. package/dist/command-history/CommandHistory.css.map +1 -1
  21. package/dist/command-history/CommandHistory.d.ts +5 -0
  22. package/dist/command-history/CommandHistory.d.ts.map +1 -1
  23. package/dist/command-history/CommandHistory.js +303 -391
  24. package/dist/command-history/CommandHistory.js.map +1 -1
  25. package/dist/command-history/CommandHistoryActions.css +4 -0
  26. package/dist/command-history/CommandHistoryActions.css.map +1 -1
  27. package/dist/command-history/CommandHistoryActions.d.ts.map +1 -1
  28. package/dist/command-history/CommandHistoryActions.js +40 -79
  29. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  30. package/dist/command-history/CommandHistoryItem.css +1 -1
  31. package/dist/command-history/CommandHistoryItem.d.ts +5 -0
  32. package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
  33. package/dist/command-history/CommandHistoryItem.js +15 -9
  34. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  35. package/dist/command-history/CommandHistoryItemTooltip.d.ts +1 -40
  36. package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
  37. package/dist/command-history/CommandHistoryItemTooltip.js +139 -189
  38. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  39. package/dist/command-history/CommandHistoryViewportUpdater.js +30 -35
  40. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
  41. package/dist/command-history/index.js +5 -5
  42. package/dist/command-history/index.js.map +1 -1
  43. package/dist/common/Code.js +34 -70
  44. package/dist/common/Code.js.map +1 -1
  45. package/dist/common/ConsoleConstants.js +3 -24
  46. package/dist/common/ConsoleConstants.js.map +1 -1
  47. package/dist/common/ConsoleUtils.d.ts +1 -3
  48. package/dist/common/ConsoleUtils.d.ts.map +1 -1
  49. package/dist/common/ConsoleUtils.js +60 -94
  50. package/dist/common/ConsoleUtils.js.map +1 -1
  51. package/dist/common/ObjectIcon.js +4 -2
  52. package/dist/common/ObjectIcon.js.map +1 -1
  53. package/dist/common/index.d.js +1 -34
  54. package/dist/common/index.d.js.map +1 -1
  55. package/dist/common/index.js +4 -4
  56. package/dist/common/index.js.map +1 -1
  57. package/dist/console-history/ConsoleHistory.js +27 -63
  58. package/dist/console-history/ConsoleHistory.js.map +1 -1
  59. package/dist/console-history/ConsoleHistoryItem.js +116 -154
  60. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  61. package/dist/console-history/ConsoleHistoryItemResult.js +4 -2
  62. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  63. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +94 -132
  64. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  65. package/dist/console-history/ConsoleHistoryResultInProgress.js +42 -76
  66. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  67. package/dist/console-history/index.js +5 -5
  68. package/dist/console-history/index.js.map +1 -1
  69. package/dist/csv/CsvFormats.js +14 -28
  70. package/dist/csv/CsvFormats.js.map +1 -1
  71. package/dist/csv/CsvInputBar.css +25 -23
  72. package/dist/csv/CsvInputBar.css.map +1 -1
  73. package/dist/csv/CsvInputBar.d.ts +2 -45
  74. package/dist/csv/CsvInputBar.d.ts.map +1 -1
  75. package/dist/csv/CsvInputBar.js +298 -372
  76. package/dist/csv/CsvInputBar.js.map +1 -1
  77. package/dist/csv/CsvOverlay.js +197 -243
  78. package/dist/csv/CsvOverlay.js.map +1 -1
  79. package/dist/csv/CsvParser.js +186 -209
  80. package/dist/csv/CsvParser.js.map +1 -1
  81. package/dist/csv/CsvTypeParser.js +185 -210
  82. package/dist/csv/CsvTypeParser.js.map +1 -1
  83. package/dist/csv/NewTableColumnTypes.js +1 -5
  84. package/dist/csv/NewTableColumnTypes.js.map +1 -1
  85. package/dist/index.js +14 -14
  86. package/dist/index.js.map +1 -1
  87. package/dist/log/LogLevelMenuItem.js +24 -58
  88. package/dist/log/LogLevelMenuItem.js.map +1 -1
  89. package/dist/log/LogView.js +429 -484
  90. package/dist/log/LogView.js.map +1 -1
  91. package/dist/monaco/MonacoCompletionProvider.js +92 -124
  92. package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
  93. package/dist/monaco/MonacoUtils.js +315 -331
  94. package/dist/monaco/MonacoUtils.js.map +1 -1
  95. package/dist/monaco/index.js +2 -2
  96. package/dist/monaco/index.js.map +1 -1
  97. package/dist/monaco/lang/db.js +3 -3
  98. package/dist/monaco/lang/db.js.map +1 -1
  99. package/dist/monaco/lang/groovy.js +3 -3
  100. package/dist/monaco/lang/groovy.js.map +1 -1
  101. package/dist/monaco/lang/log.js +3 -3
  102. package/dist/monaco/lang/log.js.map +1 -1
  103. package/dist/monaco/lang/python.js +3 -3
  104. package/dist/monaco/lang/python.js.map +1 -1
  105. package/dist/monaco/lang/scala.js +5 -5
  106. package/dist/monaco/lang/scala.js.map +1 -1
  107. package/dist/notebook/Editor.js +101 -141
  108. package/dist/notebook/Editor.js.map +1 -1
  109. package/dist/notebook/ScriptEditor.js +261 -301
  110. package/dist/notebook/ScriptEditor.js.map +1 -1
  111. package/dist/notebook/ScriptEditorUtils.js +26 -42
  112. package/dist/notebook/ScriptEditorUtils.js.map +1 -1
  113. package/dist/tsconfig.tsbuildinfo +1 -1
  114. package/package.json +17 -22
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/csv/CsvInputBar.jsx"],"names":["React","Component","PropTypes","connect","classNames","JSZip","Checkbox","Log","getTimeZone","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","key","value","name","CsvInputBar","props","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","prevProps","file","paste","dotIndex","lastIndexOf","fileTableName","legalizeTableName","substring","setState","current","focus","fromExtension","AUTO","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","onUpdate","endsWith","loadAsync","then","zip","files","csvFound","values","i","length","f","isValidExtension","handleFile","Error","Blob","isZip","info","size","session","timeZone","onInProgress","handleParseDone","tables","bindTableToVariable","openTable","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","onOpenTable","isNameInvalid","marginBottom","width","propTypes","shape","func","isRequired","instanceOf","File","string","defaultProps","mapStateToProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,OAAT,QAAwB,aAAxB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,WAAT,QAA4B,kBAA5B;AACA,SAASC,eAAT,QAAgC,kBAAhC;AACA,OAAOC,UAAP,MAAuB,cAAvB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AACA;AAEA,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAJ,CAAW,aAAX,CAAZ;AAEA,IAAMC,YAAY,GAAGC,MAAM,CAACC,OAAP,CAAeL,UAAU,CAACM,KAA1B,EAAiCC,GAAjC,CAAqC;AAAA;AAAA,MAAEC,GAAF;AAAA,MAAOC,KAAP;;AAAA,sBACxD;AAAQ,IAAA,GAAG,EAAED,GAAb;AAAkB,IAAA,KAAK,EAAEA;AAAzB,KACGC,KAAK,CAACC,IADT,CADwD;AAAA,CAArC,CAArB;AAMA;AACA;AACA;;IACMC,W;;;;;AACJ,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,KAAN;AAEA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,+BAApB;AACA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBD,IAAlB,+BAApB;AACA,UAAKE,WAAL,GAAmB,MAAKA,WAAL,CAAiBF,IAAjB,+BAAnB;AACA,UAAKG,eAAL,GAAuB,MAAKA,eAAL,CAAqBH,IAArB,+BAAvB;AACA,UAAKI,qBAAL,GAA6B,MAAKA,qBAAL,CAA2BJ,IAA3B,+BAA7B;AACA,UAAKK,cAAL,GAAsB,MAAKA,cAAL,CAAoBL,IAApB,+BAAtB;AACA,UAAKM,sBAAL,GAA8B,MAAKA,sBAAL,CAA4BN,IAA5B,+BAA9B;AACA,UAAKO,qBAAL,GAA6B,MAAKA,qBAAL,CAA2BP,IAA3B,+BAA7B;AAEA,UAAKQ,QAAL,gBAAgBlC,KAAK,CAACmC,SAAN,EAAhB;AAEA,UAAKC,KAAL,GAAa;AACXC,MAAAA,SAAS,EAAE,EADA;AAEXC,MAAAA,YAAY,EAAE,KAFH;AAGXC,MAAAA,iBAAiB,EAAE,IAHR;AAIXC,MAAAA,YAAY,EAAE,KAJH;AAKXC,MAAAA,aAAa,EAAE,CALJ;AAMXC,MAAAA,IAAI,EAAE9B,UAAU,CAAC+B,YANN;AAOXC,MAAAA,MAAM,EAAE;AAPG,KAAb;AAdiB;AAuBlB,G,CAED;;AACA;;;;;WACA,4BAAmBC,SAAnB,EAA8B;AAC5B,wBAAwB,KAAKrB,KAA7B;AAAA,UAAQsB,IAAR,eAAQA,IAAR;AAAA,UAAcC,KAAd,eAAcA,KAAd;AACA,wBAAoC,KAAKX,KAAzC;AAAA,UAAQC,SAAR,eAAQA,SAAR;AAAA,UAAmBC,YAAnB,eAAmBA,YAAnB,CAF4B,CAG5B;;AACA,UAAI,CAACA,YAAD,IAAiBQ,IAAjB,IAAyB,CAACT,SAA9B,EAAyC;AACvC,YAAMW,QAAQ,GAAGF,IAAI,CAACxB,IAAL,CAAU2B,WAAV,CAAsB,GAAtB,CAAjB;AACA,YAAMC,aAAa,GAAGzC,eAAe,CAAC0C,iBAAhB,CACpBL,IAAI,CAACxB,IAAL,CAAU8B,SAAV,CAAoB,CAApB,EAAuBJ,QAAvB,CADoB,CAAtB;AAGA,aAAKK,QAAL,CAAc;AACZhB,UAAAA,SAAS,EAAEa,aADC;AAEZZ,UAAAA,YAAY,EAAE;AAFF,SAAd;AAIA,aAAKJ,QAAL,CAAcoB,OAAd,CAAsBC,KAAtB;AACD,OAVD,MAUO,IAAK,CAACT,IAAD,IAASD,SAAS,CAACC,IAApB,IAA8B,CAACC,KAAD,IAAUF,SAAS,CAACE,KAAtD,EAA8D;AACnE;AACA,aAAKM,QAAL,CAAc;AACZhB,UAAAA,SAAS,EAAE,EADC;AAEZC,UAAAA,YAAY,EAAE;AAFF,SAAd;AAID,OApB2B,CAsB5B;;;AACA,UAAIS,KAAK,IAAI,CAACV,SAAV,IAAuB,KAAKH,QAAL,CAAcoB,OAAzC,EAAkD;AAChD,aAAKpB,QAAL,CAAcoB,OAAd,CAAsBC,KAAtB;AACD,OAzB2B,CA2B5B;;;AACA,UAAIT,IAAI,IAAIA,IAAI,KAAKD,SAAS,CAACC,IAA/B,EAAqC;AACnC,aAAKO,QAAL,CAAc;AACZX,UAAAA,IAAI,EAAE9B,UAAU,CAAC4C,aAAX,CAAyBV,IAAI,CAACxB,IAA9B;AADM,SAAd;AAGD,OAJD,MAIO,IAAIyB,KAAK,IAAI,CAACF,SAAS,CAACE,KAAxB,EAA+B;AACpC,aAAKM,QAAL,CAAc;AACZX,UAAAA,IAAI,EAAE9B,UAAU,CAAC6C;AADL,SAAd;AAGD;AACF;;;WAED,gCAAuB;AACrB,UAAQb,MAAR,GAAmB,KAAKR,KAAxB,CAAQQ,MAAR;;AACA,UAAIA,MAAJ,EAAY;AACVA,QAAAA,MAAM,CAACc,MAAP;AACD;AACF;;;WAED,wBAAe;AACb,UAAQC,OAAR,GAAoB,KAAKnC,KAAzB,CAAQmC,OAAR;AACAA,MAAAA,OAAO;AACR;;;WAED,qBAAYC,CAAZ,EAAe;AACb,yBAA6B,KAAKpC,KAAlC;AAAA,UAAQmC,OAAR,gBAAQA,OAAR;AAAA,UAAiBE,OAAjB,gBAAiBA,OAAjB;AACAhD,MAAAA,GAAG,CAACiD,KAAJ,CAAUF,CAAV;AACAC,MAAAA,OAAO,CAACD,CAAD,CAAP;AACAD,MAAAA,OAAO;AACR;;;WAED,yBAAgBI,KAAhB,EAAuB;AACrB,WAAKV,QAAL,CAAc;AAAEhB,QAAAA,SAAS,EAAE0B,KAAK,CAACC,MAAN,CAAa3C,KAA1B;AAAiCiB,QAAAA,YAAY,EAAE;AAA/C,OAAd;AACD;;;WAED,iCAAwB;AACtB,UAAQC,iBAAR,GAA8B,KAAKH,KAAnC,CAAQG,iBAAR;AACA,WAAKc,QAAL,CAAc;AAAEd,QAAAA,iBAAiB,EAAE,CAACA;AAAtB,OAAd;AACD;;;WAED,sBAAawB,KAAb,EAAoB;AAAA;;AAClBA,MAAAA,KAAK,CAACE,eAAN;AACAF,MAAAA,KAAK,CAACG,cAAN;AACA,yBAAkC,KAAK1C,KAAvC;AAAA,UAAQsB,IAAR,gBAAQA,IAAR;AAAA,UAAcC,KAAd,gBAAcA,KAAd;AAAA,UAAqBoB,QAArB,gBAAqBA,QAArB;;AACA,UAAIrB,IAAJ,EAAU;AACR,YAAIA,IAAI,CAACxB,IAAL,CAAU8C,QAAV,CAAmB,MAAnB,CAAJ,EAAgC;AAC9B/D,UAAAA,KAAK,CAACgE,SAAN,CAAgBvB,IAAhB,EACGwB,IADH,CACQ,UAAAC,GAAG,EAAI;AACX,gBAAQC,KAAR,GAAkBD,GAAlB,CAAQC,KAAR;AACA,gBAAIC,QAAQ,GAAG,KAAf,CAFW,CAGX;;AACA,gBAAMC,MAAM,GAAG1D,MAAM,CAAC0D,MAAP,CAAcF,KAAd,CAAf;;AACA,iBAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAACE,MAA3B,EAAmCD,CAAC,IAAI,CAAxC,EAA2C;AACzC,kBAAME,CAAC,GAAGH,MAAM,CAACC,CAAD,CAAhB;;AACA,kBAAIjE,UAAU,CAACoE,gBAAX,CAA4BD,CAAC,CAACvD,IAA9B,CAAJ,EAAyC;AACvC6C,gBAAAA,QAAQ,mBAAYU,CAAC,CAACvD,IAAd,0BAAkCwB,IAAI,CAACxB,IAAvC,EAAR;AACAmD,gBAAAA,QAAQ,GAAG,IAAX;;AACA,gBAAA,MAAI,CAACM,UAAL,CAAgBF,CAAhB,EAAmB,IAAnB;;AACA;AACD;AACF;;AACD,gBAAI,CAACJ,QAAL,EAAe;AACb,oBAAM,IAAIO,KAAJ,gCAAkClC,IAAI,CAACxB,IAAvC,EAAN;AACD;AACF,WAlBH,WAmBS,UAAAsC,CAAC;AAAA,mBAAI,MAAI,CAAChC,WAAL,CAAiBgC,CAAjB,CAAJ;AAAA,WAnBV;AAoBD,SArBD,MAqBO;AACL,eAAKmB,UAAL,CAAgBjC,IAAhB;AACD;AACF,OAzBD,MAyBO,IAAIC,KAAJ,EAAW;AAChB,aAAKgC,UAAL,CACE,IAAIE,IAAJ,CAAS,CAAClC,KAAD,CAAT,EAAkB;AAChBL,UAAAA,IAAI,EAAE;AADU,SAAlB,CADF;AAKD;AACF;;;WAED,oBAAWI,IAAX,EAAgC;AAAA;;AAAA,UAAfoC,KAAe,uEAAP,KAAO;AAC9BrE,MAAAA,GAAG,CAACsE,IAAJ,mCAC6BrC,IAAI,CAACxB,IADlC,cAEI4D,KAAK,GAAG,EAAH,aAAWpC,IAAI,CAACsC,IAAhB,WAFT;AAKA,yBAA4C,KAAK5D,KAAjD;AAAA,UAAQ6D,OAAR,gBAAQA,OAAR;AAAA,UAAiBC,QAAjB,gBAAiBA,QAAjB;AAAA,UAA2BC,YAA3B,gBAA2BA,YAA3B;AACA,yBAA+C,KAAKnD,KAApD;AAAA,UAAQC,SAAR,gBAAQA,SAAR;AAAA,UAAmBE,iBAAnB,gBAAmBA,iBAAnB;AAAA,UAAsCG,IAAtC,gBAAsCA,IAAtC;;AACA,UAAM8C,eAAe,GAAG,SAAlBA,eAAkB,CAAAC,MAAM,EAAI;AAChC;AACA,YAAIA,MAAM,CAACb,MAAP,KAAkB,CAAtB,EAAyB;AACvBS,UAAAA,OAAO,CACJK,mBADH,CACuBD,MAAM,CAAC,CAAD,CAD7B,EACkCpD,SADlC,EAEGiC,IAFH,CAEQ;AAAA,mBAAM,MAAI,CAACqB,SAAL,EAAN;AAAA,WAFR,WAGS,UAAA/B,CAAC;AAAA,mBAAI,MAAI,CAAChC,WAAL,CAAiBgC,CAAjB,CAAJ;AAAA,WAHV;AAID,SALD,MAKO;AACLyB,UAAAA,OAAO,CACJO,WADH,CACeH,MADf,EAEGnB,IAFH,CAEQ,UAAAuB,KAAK,EAAI;AACbR,YAAAA,OAAO,CACJK,mBADH,CACuBG,KADvB,EAC8BxD,SAD9B,EAEGiC,IAFH,CAEQ;AAAA,qBAAM,MAAI,CAACqB,SAAL,EAAN;AAAA,aAFR,WAGS,UAAA/B,CAAC;AAAA,qBAAI,MAAI,CAAChC,WAAL,CAAiBgC,CAAjB,CAAJ;AAAA,aAHV;AAIA6B,YAAAA,MAAM,CAACK,OAAP,CAAe,UAAAC,CAAC;AAAA,qBAAIA,CAAC,CAACC,KAAF,EAAJ;AAAA,aAAhB;AACD,WARH,WASS,UAAApC,CAAC;AAAA,mBAAI,MAAI,CAAChC,WAAL,CAAiBgC,CAAjB,CAAJ;AAAA,WATV;AAUD;AACF,OAnBD;;AAoBA,UAAMhB,MAAM,GAAG,IAAIjC,SAAJ,CAAc;AAC3BsF,QAAAA,eAAe,EAAET,eADU;AAE3BH,QAAAA,OAAO,EAAPA,OAF2B;AAG3BvC,QAAAA,IAAI,EAAJA,IAH2B;AAI3BJ,QAAAA,IAAI,EAAE9B,UAAU,CAACM,KAAX,CAAiBwB,IAAjB,CAJqB;AAK3BwD,QAAAA,WAAW,EAAE3D,iBALc;AAM3B4D,QAAAA,UAAU,EAAE,KAAKpE,cANU;AAO3B8B,QAAAA,OAAO,EAAE,KAAKjC,WAPa;AAQ3B0D,QAAAA,QAAQ,EAARA,QAR2B;AAS3BJ,QAAAA,KAAK,EAALA;AAT2B,OAAd,CAAf;AAWAtC,MAAAA,MAAM,CAACwD,KAAP;AACA,WAAK/C,QAAL,CAAc;AACZb,QAAAA,YAAY,EAAE,IADF;AAEZI,QAAAA,MAAM,EAANA;AAFY,OAAd,EAxC8B,CA4C9B;;AACA2C,MAAAA,YAAY,CAAC,IAAD,CAAZ;AACD;;;WAED,wBAAe9C,aAAf,EAA8B;AAC5B,UAAQD,YAAR,GAAyB,KAAKJ,KAA9B,CAAQI,YAAR;;AACA,UAAIA,YAAJ,EAAkB;AAChB,aAAKa,QAAL,CAAc;AACZZ,UAAAA,aAAa,EAAbA;AADY,SAAd;AAGD,OAN2B,CAO5B;;;AACA,aAAO,CAACD,YAAR;AACD,K,CAED;;;;WACA,kCAAyB;AACvB,UAAQ+C,YAAR,GAAyB,KAAK/D,KAA9B,CAAQ+D,YAAR;AACA,UAAQ3C,MAAR,GAAmB,KAAKR,KAAxB,CAAQQ,MAAR;;AACA,UAAIA,MAAJ,EAAY;AACVA,QAAAA,MAAM,CAACc,MAAP;AACD;;AACD,WAAKL,QAAL,CAAc;AACZb,QAAAA,YAAY,EAAE,KADF;AAEZC,QAAAA,aAAa,EAAE;AAFH,OAAd;AAIA8C,MAAAA,YAAY,CAAC,KAAD,CAAZ;AACD;;;WAED,qBAAY;AACV,yBAAiC,KAAK/D,KAAtC;AAAA,UAAQ6E,WAAR,gBAAQA,WAAR;AAAA,UAAqB1C,OAArB,gBAAqBA,OAArB;AACA,UAAQtB,SAAR,GAAsB,KAAKD,KAA3B,CAAQC,SAAR;AACAgE,MAAAA,WAAW,CAAChE,SAAD,CAAX;AACAsB,MAAAA,OAAO;AACR;;;WAED,+BAAsBI,KAAtB,EAA6B;AAC3B,WAAKV,QAAL,CAAc;AACZX,QAAAA,IAAI,EAAEqB,KAAK,CAACC,MAAN,CAAa3C;AADP,OAAd;AAGD;;;WAED,kBAAS;AACP,yBAAwB,KAAKG,KAA7B;AAAA,UAAQsB,IAAR,gBAAQA,IAAR;AAAA,UAAcC,KAAd,gBAAcA,KAAd;AACA,yBAMI,KAAKX,KANT;AAAA,UACEC,SADF,gBACEA,SADF;AAAA,UAEEE,iBAFF,gBAEEA,iBAFF;AAAA,UAGEC,YAHF,gBAGEA,YAHF;AAAA,UAIEC,aAJF,gBAIEA,aAJF;AAAA,UAKEC,IALF,gBAKEA,IALF,CAFO,CASP;;AACA,UAAM4D,aAAa,GAAGvD,KAAK,IAAI,CAACV,SAAhC;AACA,0BACE,iCACG,CAACG,YAAD,iBACC;AACE,QAAA,QAAQ,EAAE,KAAKf,YADjB;AAEE,QAAA,SAAS,EAAC;AAFZ,sBAIE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE;AAAO,QAAA,SAAS,EAAC,cAAjB;AAAgC,QAAA,OAAO,EAAC;AAAxC,sBADF,eAIE;AACE,QAAA,GAAG,EAAE,KAAKS,QADZ;AAEE,QAAA,EAAE,EAAC,gBAFL;AAGE,QAAA,IAAI,EAAC,MAHP;AAIE,QAAA,SAAS,EAAE9B,UAAU,CAAC,2BAAD,EAA8B;AACjD,wBAAckG;AADmC,SAA9B,CAJvB;AAOE,QAAA,KAAK,EAAEjE,SAPT;AAQE,QAAA,QAAQ,EAAE,KAAKR;AARjB,QAJF,CADF,eAgBE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE;AAAO,QAAA,SAAS,EAAC,cAAjB;AAAgC,QAAA,OAAO,EAAC;AAAxC,uBADF,eAIE;AACE,QAAA,EAAE,EAAC,cADL;AAEE,QAAA,SAAS,EAAC,4BAFZ;AAGE,QAAA,KAAK,EAAEa,IAHT;AAIE,QAAA,QAAQ,EAAE,KAAKT;AAJjB,SAMGlB,YANH,CAJF,CAhBF,eA6BE,oBAAC,QAAD;AACE,QAAA,SAAS,EAAC,iBADZ;AAEE,QAAA,OAAO,EAAEwB,iBAFX;AAGE,QAAA,QAAQ,EAAE,KAAKT;AAHjB,uCA7BF,eAoCE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE;AACE,QAAA,IAAI,EAAC,QADP;AAEE,QAAA,SAAS,EAAC,iBAFZ;AAGE,QAAA,QAAQ,EAAE,EAAEgB,IAAI,IAAIC,KAAV,KAAoB,CAACV;AAHjC,kBADF,eAQE;AACE,QAAA,IAAI,EAAC,QADP;AAEE,QAAA,SAAS,EAAC,yBAFZ;AAGE,QAAA,OAAO,EAAE,KAAKV;AAHhB,kBARF,CApCF,CAJF,CAFJ,EA6DGa,YAAY,iBACX;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE,qDADF,eAEE;AAAK,QAAA,SAAS,EAAC,UAAf;AAA0B,QAAA,KAAK,EAAE;AAAE+D,UAAAA,YAAY,EAAE;AAAhB;AAAjC,sBACE;AACE,QAAA,SAAS,EAAC,yBADZ;AAEE,QAAA,KAAK,EAAE;AAAEC,UAAAA,KAAK,YAAK/D,aAAL;AAAP,SAFT;AAGE,yBAAeA,aAHjB;AAIE,yBAAc,GAJhB;AAKE,yBAAc;AALhB,QADF,CAFF,eAWE,mCAAQA,aAAR,MAXF,eAYE;AACE,QAAA,IAAI,EAAC,QADP;AAEE,QAAA,SAAS,EAAC,iBAFZ;AAGE,QAAA,OAAO,EAAE,KAAKT;AAHhB,kBAZF,CA9DJ,CADF;AAsFD;;;;EA5TuB/B,S;;AA+T1BsB,WAAW,CAACkF,SAAZ,GAAwB;AACtBpB,EAAAA,OAAO,EAAEnF,SAAS,CAACwG,KAAV,CAAgB;AACvBhB,IAAAA,mBAAmB,EAAExF,SAAS,CAACyG,IAAV,CAAeC,UADb;AAEvBhB,IAAAA,WAAW,EAAE1F,SAAS,CAACyG,IAAV,CAAeC;AAFL,GAAhB,EAGNA,UAJmB;AAKtBP,EAAAA,WAAW,EAAEnG,SAAS,CAACyG,IAAV,CAAeC,UALN;AAMtBjD,EAAAA,OAAO,EAAEzD,SAAS,CAACyG,IAAV,CAAeC,UANF;AAOtBzC,EAAAA,QAAQ,EAAEjE,SAAS,CAACyG,IAAV,CAAeC,UAPH;AAQtB/C,EAAAA,OAAO,EAAE3D,SAAS,CAACyG,IAAV,CAAeC,UARF;AAStB9D,EAAAA,IAAI,EAAE5C,SAAS,CAAC2G,UAAV,CAAqBC,IAArB,CATgB;AAUtB/D,EAAAA,KAAK,EAAE7C,SAAS,CAAC6G,MAVK;AAWtBxB,EAAAA,YAAY,EAAErF,SAAS,CAACyG,IAAV,CAAeC,UAXP;AAYtBtB,EAAAA,QAAQ,EAAEpF,SAAS,CAAC6G,MAAV,CAAiBH;AAZL,CAAxB;AAeArF,WAAW,CAACyF,YAAZ,GAA2B;AACzBlE,EAAAA,IAAI,EAAE,IADmB;AAEzBC,EAAAA,KAAK,EAAE;AAFkB,CAA3B;;AAKA,IAAMkE,eAAe,GAAG,SAAlBA,eAAkB,CAAA7E,KAAK;AAAA,SAAK;AAChCkD,IAAAA,QAAQ,EAAE9E,WAAW,CAAC4B,KAAD;AADW,GAAL;AAAA,CAA7B;;AAIA,eAAejC,OAAO,CAAC8G,eAAD,CAAP,CAAyB1F,WAAzB,CAAf","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport classNames from 'classnames';\nimport JSZip from 'jszip';\nimport { Checkbox } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { getTimeZone } from '@deephaven/redux';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvOverlay from './CsvOverlay';\nimport CsvParser from './CsvParser';\nimport CsvFormats from './CsvFormats';\nimport './CsvInputBar.scss';\n\nconst log = Log.module('CsvInputBar');\n\nconst TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(([key, value]) => (\n <option key={key} value={key}>\n {value.name}\n </option>\n));\n\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component {\n constructor(props) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTableName = this.handleTableName.bind(this);\n this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n this.handleCancelInProgress = this.handleCancelInProgress.bind(this);\n this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);\n\n this.inputRef = React.createRef();\n\n this.state = {\n tableName: '',\n tableNameSet: false,\n isFirstRowHeaders: true,\n showProgress: false,\n progressValue: 0,\n type: CsvFormats.DEFAULT_TYPE,\n parser: null,\n };\n }\n\n // React documentation says it is fine to update state inside an if statment\n /* eslint-disable react/no-did-update-set-state */\n componentDidUpdate(prevProps) {\n const { file, paste } = this.props;\n const { tableName, tableNameSet } = this.state;\n // Set the table name from a file\n if (!tableNameSet && file && !tableName) {\n const dotIndex = file.name.lastIndexOf('.');\n const fileTableName = DbNameValidator.legalizeTableName(\n file.name.substring(0, dotIndex)\n );\n this.setState({\n tableName: fileTableName,\n tableNameSet: true,\n });\n this.inputRef.current.focus();\n } else if ((!file && prevProps.file) || (!paste && prevProps.paste)) {\n // The file or paste was unstaged\n this.setState({\n tableName: '',\n tableNameSet: false,\n });\n }\n\n // Focus the name input field on paste\n if (paste && !tableName && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n // Determine parser type by file extension\n if (file && file !== prevProps.file) {\n this.setState({\n type: CsvFormats.fromExtension(file.name),\n });\n } else if (paste && !prevProps.paste) {\n this.setState({\n type: CsvFormats.AUTO,\n });\n }\n }\n\n componentWillUnmount() {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n handleCancel() {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e) {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event) {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders() {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event) {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste, onUpdate } = this.props;\n if (file) {\n if (file.name.endsWith('.zip')) {\n JSZip.loadAsync(file)\n .then(zip => {\n const { files } = zip;\n let csvFound = false;\n // Using a for loop instead of forEach in order to break\n const values = Object.values(files);\n for (let i = 0; i < values.length; i += 1) {\n const f = values[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${file.name}`);\n csvFound = true;\n this.handleFile(f, true);\n break;\n }\n }\n if (!csvFound) {\n throw new Error(`No csv file found in ${file.name}`);\n }\n })\n .catch(e => this.handleError(e));\n } else {\n this.handleFile(file);\n }\n } else if (paste) {\n this.handleFile(\n new Blob([paste], {\n type: 'text/plain',\n })\n );\n }\n }\n\n handleFile(file, isZip = false) {\n log.info(\n `Starting CSV parser for ${file.name} ${\n isZip ? '' : `${file.size} bytes`\n }`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = tables => {\n // Do not bother merging just one table\n if (tables.length === 1) {\n session\n .bindTableToVariable(tables[0], tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n } else {\n session\n .mergeTables(tables)\n .then(table => {\n session\n .bindTableToVariable(table, tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n tables.forEach(t => t.close());\n })\n .catch(e => this.handleError(e));\n }\n };\n const parser = new CsvParser({\n onFileCompleted: handleParseDone,\n session,\n file,\n type: CsvFormats.TYPES[type],\n readHeaders: isFirstRowHeaders,\n onProgress: this.handleProgress,\n onError: this.handleError,\n timeZone,\n isZip,\n });\n parser.parse();\n this.setState({\n showProgress: true,\n parser,\n });\n // Note that calling onClose will set in progress to false\n onInProgress(true);\n }\n\n handleProgress(progressValue) {\n const { showProgress } = this.state;\n if (showProgress) {\n this.setState({\n progressValue,\n });\n }\n // Indicates to the caller that the upload has been cancelled\n return !showProgress;\n }\n\n // Cancels an in progress upload\n handleCancelInProgress() {\n const { onInProgress } = this.props;\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n this.setState({\n showProgress: false,\n progressValue: 0,\n });\n onInProgress(false);\n }\n\n openTable() {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event) {\n this.setState({\n type: event.target.value,\n });\n }\n\n render() {\n const { file, paste } = this.props;\n const {\n tableName,\n isFirstRowHeaders,\n showProgress,\n progressValue,\n type,\n } = this.state;\n // A blank table name is invalid for pasted values\n const isNameInvalid = paste && !tableName;\n return (\n <div>\n {!showProgress && (\n <form\n onSubmit={this.handleUpload}\n className=\"csv-input-bar-container\"\n >\n <div className=\"csv-input-form form-inline\">\n <div className=\"form-group\">\n <label className=\"mr-sm-2 mb-1\" htmlFor=\"tableNameInput\">\n Table name\n </label>\n <input\n ref={this.inputRef}\n id=\"tableNameInput\"\n type=\"text\"\n className={classNames('form-control mb-2 mr-sm-2', {\n 'is-invalid': isNameInvalid,\n })}\n value={tableName}\n onChange={this.handleTableName}\n />\n </div>\n <div className=\"form-group\">\n <label className=\"mr-sm-2 mb-1\" htmlFor=\"formatSelect\">\n File format\n </label>\n <select\n id=\"formatSelect\"\n className=\"custom-select mb-2 mr-sm-2\"\n value={type}\n onChange={this.handleQueryTypeChange}\n >\n {TYPE_OPTIONS}\n </select>\n </div>\n <Checkbox\n className=\"firstRowHeaders\"\n checked={isFirstRowHeaders}\n onChange={this.toggleFirstRowHeaders}\n >\n First row is column headers\n </Checkbox>\n <div className=\"csv-input-buttons form-group\">\n <button\n type=\"submit\"\n className=\"btn btn-primary\"\n disabled={!(file || paste) || !tableName}\n >\n Upload\n </button>\n <button\n type=\"button\"\n className=\"btn btn-outline-primary\"\n onClick={this.handleCancel}\n >\n Cancel\n </button>\n </div>\n </div>\n </form>\n )}\n {showProgress && (\n <div className=\"csv-progress-container\">\n <label>Uploading Table</label>\n <div className=\"progress\" style={{ marginBottom: '1rem' }}>\n <div\n className=\"progress-bar bg-primary\"\n style={{ width: `${progressValue}%` }}\n aria-valuenow={progressValue}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n />\n </div>\n <label>{progressValue}%</label>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleCancelInProgress}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nCsvInputBar.propTypes = {\n session: PropTypes.shape({\n bindTableToVariable: PropTypes.func.isRequired,\n mergeTables: PropTypes.func.isRequired,\n }).isRequired,\n onOpenTable: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n file: PropTypes.instanceOf(File),\n paste: PropTypes.string,\n onInProgress: PropTypes.func.isRequired,\n timeZone: PropTypes.string.isRequired,\n};\n\nCsvInputBar.defaultProps = {\n file: null,\n paste: null,\n};\n\nconst mapStateToProps = state => ({\n timeZone: getTimeZone(state),\n});\n\nexport default connect(mapStateToProps)(CsvInputBar);\n"],"file":"CsvInputBar.js"}
1
+ {"version":3,"sources":["../../src/csv/CsvInputBar.jsx"],"names":["React","Component","PropTypes","classNames","JSZip","Button","Checkbox","Log","DbNameValidator","CsvOverlay","CsvParser","CsvFormats","log","module","TYPE_OPTIONS","Object","entries","TYPES","map","key","value","name","CsvInputBar","constructor","props","handleUpload","bind","handleCancel","handleError","handleTableName","toggleFirstRowHeaders","handleProgress","handleCancelInProgress","handleQueryTypeChange","inputRef","createRef","state","tableName","tableNameSet","isFirstRowHeaders","showProgress","progressValue","type","DEFAULT_TYPE","parser","componentDidUpdate","prevProps","file","paste","dotIndex","lastIndexOf","fileTableName","legalizeTableName","substring","setState","current","focus","fromExtension","AUTO","componentWillUnmount","cancel","onClose","e","onError","error","event","target","stopPropagation","preventDefault","onUpdate","endsWith","loadAsync","then","zip","files","csvFound","values","i","length","f","isValidExtension","handleFile","Error","catch","Blob","isZip","info","size","session","timeZone","onInProgress","handleParseDone","tables","bindTableToVariable","openTable","mergeTables","table","forEach","t","close","onFileCompleted","readHeaders","onProgress","parse","onOpenTable","render","isNameInvalid","width","propTypes","shape","func","isRequired","instanceOf","File","string","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport JSZip from 'jszip';\nimport { Button, Checkbox } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CsvOverlay from './CsvOverlay';\nimport CsvParser from './CsvParser';\nimport CsvFormats from './CsvFormats';\nimport './CsvInputBar.scss';\n\nconst log = Log.module('CsvInputBar');\n\nconst TYPE_OPTIONS = Object.entries(CsvFormats.TYPES).map(([key, value]) => (\n <option key={key} value={key}>\n {value.name}\n </option>\n));\n\n/**\n * Input controls for CSV upload.\n */\nclass CsvInputBar extends Component {\n constructor(props) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleTableName = this.handleTableName.bind(this);\n this.toggleFirstRowHeaders = this.toggleFirstRowHeaders.bind(this);\n this.handleProgress = this.handleProgress.bind(this);\n this.handleCancelInProgress = this.handleCancelInProgress.bind(this);\n this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this);\n\n this.inputRef = React.createRef();\n\n this.state = {\n tableName: '',\n tableNameSet: false,\n isFirstRowHeaders: true,\n showProgress: false,\n progressValue: 0,\n type: CsvFormats.DEFAULT_TYPE,\n parser: null,\n };\n }\n\n // React documentation says it is fine to update state inside an if statment\n /* eslint-disable react/no-did-update-set-state */\n componentDidUpdate(prevProps) {\n const { file, paste } = this.props;\n const { tableName, tableNameSet } = this.state;\n // Set the table name from a file\n if (!tableNameSet && file && !tableName) {\n const dotIndex = file.name.lastIndexOf('.');\n const fileTableName = DbNameValidator.legalizeTableName(\n file.name.substring(0, dotIndex)\n );\n this.setState({\n tableName: fileTableName,\n tableNameSet: true,\n });\n this.inputRef.current.focus();\n } else if ((!file && prevProps.file) || (!paste && prevProps.paste)) {\n // The file or paste was unstaged\n this.setState({\n tableName: '',\n tableNameSet: false,\n });\n }\n\n // Focus the name input field on paste\n if (paste && !tableName && this.inputRef.current) {\n this.inputRef.current.focus();\n }\n\n // Determine parser type by file extension\n if (file && file !== prevProps.file) {\n this.setState({\n type: CsvFormats.fromExtension(file.name),\n });\n } else if (paste && !prevProps.paste) {\n this.setState({\n type: CsvFormats.AUTO,\n });\n }\n }\n\n componentWillUnmount() {\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n }\n\n handleCancel() {\n const { onClose } = this.props;\n onClose();\n }\n\n handleError(e) {\n const { onClose, onError } = this.props;\n log.error(e);\n onError(e);\n onClose();\n }\n\n handleTableName(event) {\n this.setState({ tableName: event.target.value, tableNameSet: true });\n }\n\n toggleFirstRowHeaders() {\n const { isFirstRowHeaders } = this.state;\n this.setState({ isFirstRowHeaders: !isFirstRowHeaders });\n }\n\n handleUpload(event) {\n event.stopPropagation();\n event.preventDefault();\n const { file, paste, onUpdate } = this.props;\n if (file) {\n if (file.name.endsWith('.zip')) {\n JSZip.loadAsync(file)\n .then(zip => {\n const { files } = zip;\n let csvFound = false;\n // Using a for loop instead of forEach in order to break\n const values = Object.values(files);\n for (let i = 0; i < values.length; i += 1) {\n const f = values[i];\n if (CsvOverlay.isValidExtension(f.name)) {\n onUpdate(`Loading ${f.name} as csv from ${file.name}`);\n csvFound = true;\n this.handleFile(f, true);\n break;\n }\n }\n if (!csvFound) {\n throw new Error(`No csv file found in ${file.name}`);\n }\n })\n .catch(e => this.handleError(e));\n } else {\n this.handleFile(file);\n }\n } else if (paste) {\n this.handleFile(\n new Blob([paste], {\n type: 'text/plain',\n })\n );\n }\n }\n\n handleFile(file, isZip = false) {\n log.info(\n `Starting CSV parser for ${file.name} ${\n isZip ? '' : `${file.size} bytes`\n }`\n );\n const { session, timeZone, onInProgress } = this.props;\n const { tableName, isFirstRowHeaders, type } = this.state;\n const handleParseDone = tables => {\n // Do not bother merging just one table\n if (tables.length === 1) {\n session\n .bindTableToVariable(tables[0], tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n } else {\n session\n .mergeTables(tables)\n .then(table => {\n session\n .bindTableToVariable(table, tableName)\n .then(() => this.openTable())\n .catch(e => this.handleError(e));\n tables.forEach(t => t.close());\n })\n .catch(e => this.handleError(e));\n }\n };\n const parser = new CsvParser({\n onFileCompleted: handleParseDone,\n session,\n file,\n type: CsvFormats.TYPES[type],\n readHeaders: isFirstRowHeaders,\n onProgress: this.handleProgress,\n onError: this.handleError,\n timeZone,\n isZip,\n });\n parser.parse();\n this.setState({\n showProgress: true,\n parser,\n });\n // Note that calling onClose will set in progress to false\n onInProgress(true);\n }\n\n handleProgress(progressValue) {\n const { showProgress } = this.state;\n if (showProgress) {\n this.setState({\n progressValue,\n });\n }\n // Indicates to the caller that the upload has been cancelled\n return !showProgress;\n }\n\n // Cancels an in progress upload\n handleCancelInProgress() {\n const { onInProgress } = this.props;\n const { parser } = this.state;\n if (parser) {\n parser.cancel();\n }\n this.setState({\n showProgress: false,\n progressValue: 0,\n });\n onInProgress(false);\n }\n\n openTable() {\n const { onOpenTable, onClose } = this.props;\n const { tableName } = this.state;\n onOpenTable(tableName);\n onClose();\n }\n\n handleQueryTypeChange(event) {\n this.setState({\n type: event.target.value,\n });\n }\n\n render() {\n const { file, paste } = this.props;\n const {\n tableName,\n isFirstRowHeaders,\n showProgress,\n progressValue,\n type,\n } = this.state;\n // A blank table name is invalid for pasted values\n const isNameInvalid = paste && !tableName;\n return (\n <div>\n {!showProgress && (\n <form\n onSubmit={this.handleUpload}\n className=\"csv-input-bar-container form-inline\"\n >\n <div className=\"form-group\">\n <label htmlFor=\"tableNameInput\">Table name</label>\n <input\n ref={this.inputRef}\n id=\"tableNameInput\"\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': isNameInvalid,\n })}\n value={tableName}\n onChange={this.handleTableName}\n />\n </div>\n <div className=\"form-group\">\n <label htmlFor=\"formatSelect\">File format</label>\n <select\n id=\"formatSelect\"\n className=\"custom-select\"\n value={type}\n onChange={this.handleQueryTypeChange}\n >\n {TYPE_OPTIONS}\n </select>\n </div>\n <Checkbox\n className=\"firstRowHeaders\"\n checked={isFirstRowHeaders}\n onChange={this.toggleFirstRowHeaders}\n >\n First row is column headers\n </Checkbox>\n <div className=\"csv-input-buttons form-group\">\n <Button kind=\"secondary\" onClick={this.handleCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"submit\"\n disabled={!(file || paste) || !tableName}\n >\n Upload\n </Button>\n </div>\n </form>\n )}\n {showProgress && (\n <div className=\"csv-progress-container\">\n <label>Uploading Table</label>\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-primary\"\n style={{ width: `${progressValue}%` }}\n aria-valuenow={progressValue}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n />\n </div>\n <label>{progressValue}%</label>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleCancelInProgress}\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nCsvInputBar.propTypes = {\n session: PropTypes.shape({\n bindTableToVariable: PropTypes.func.isRequired,\n mergeTables: PropTypes.func.isRequired,\n }).isRequired,\n onOpenTable: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onUpdate: PropTypes.func.isRequired,\n onError: PropTypes.func.isRequired,\n file: PropTypes.instanceOf(File),\n paste: PropTypes.string,\n onInProgress: PropTypes.func.isRequired,\n timeZone: PropTypes.string.isRequired,\n};\n\nCsvInputBar.defaultProps = {\n file: null,\n paste: null,\n};\n\nexport default CsvInputBar;\n"],"file":"CsvInputBar.js"}
@@ -1,25 +1,3 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
-
3
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4
-
5
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
6
-
7
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
8
-
9
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
10
-
11
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
-
13
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
14
-
15
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
16
-
17
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
18
-
19
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
20
-
21
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
22
-
23
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
2
 
25
3
  import React, { Component } from 'react';
@@ -34,255 +12,231 @@ var INVALID_MIME_TYPES = [/^audio.*/, /^font.*/, /^image.*/, /^video.*/];
34
12
  * Overlay that is displayed when uploading a CSV file.
35
13
  */
36
14
 
37
- var CsvOverlay = /*#__PURE__*/function (_Component) {
38
- _inherits(CsvOverlay, _Component);
15
+ class CsvOverlay extends Component {
16
+ static isValidDropItem(item) {
17
+ return item && item.kind === 'file' && !INVALID_MIME_TYPES.find(invalid => invalid.test(item.type));
18
+ }
39
19
 
40
- var _super = _createSuper(CsvOverlay);
20
+ static isValidExtension(name) {
21
+ return name.endsWith('.csv') || name.endsWith('.zip') || name.endsWith('.tsv') || name.endsWith('.tab') || name.endsWith('.psv') || name.endsWith('.dsv') || name.endsWith('.txt');
22
+ }
41
23
 
42
- function CsvOverlay(props) {
43
- var _this;
24
+ static handleDragOver(e) {
25
+ e.preventDefault();
26
+ e.stopPropagation();
27
+ }
44
28
 
45
- _classCallCheck(this, CsvOverlay);
29
+ static getIcon(fileName) {
30
+ if (fileName === PASTED_VALUES) {
31
+ return vsClippy;
32
+ }
46
33
 
47
- _this = _super.call(this, props);
48
- _this.handleSelectFile = _this.handleSelectFile.bind(_assertThisInitialized(_this));
49
- _this.handleFiles = _this.handleFiles.bind(_assertThisInitialized(_this));
50
- _this.handleDrop = _this.handleDrop.bind(_assertThisInitialized(_this));
51
- _this.unstageFile = _this.unstageFile.bind(_assertThisInitialized(_this));
52
- _this.handleMenuPaste = _this.handleMenuPaste.bind(_assertThisInitialized(_this));
53
- _this.handlePasteEvent = _this.handlePasteEvent.bind(_assertThisInitialized(_this));
54
- _this.fileElem = /*#__PURE__*/React.createRef();
55
- _this.divElem = /*#__PURE__*/React.createRef();
56
- _this.state = {
34
+ if (fileName.endsWith('.csv')) {
35
+ return dhFileCsv;
36
+ }
37
+
38
+ if (fileName.endsWith('.zip')) {
39
+ return vsFileZip;
40
+ }
41
+
42
+ return dhFileSpreadsheet;
43
+ }
44
+
45
+ constructor(props) {
46
+ super(props);
47
+ this.handleSelectFile = this.handleSelectFile.bind(this);
48
+ this.handleFiles = this.handleFiles.bind(this);
49
+ this.handleDrop = this.handleDrop.bind(this);
50
+ this.unstageFile = this.unstageFile.bind(this);
51
+ this.handleMenuPaste = this.handleMenuPaste.bind(this);
52
+ this.handlePasteEvent = this.handlePasteEvent.bind(this);
53
+ this.fileElem = /*#__PURE__*/React.createRef();
54
+ this.divElem = /*#__PURE__*/React.createRef();
55
+ this.state = {
57
56
  selectedFileName: '',
58
57
  dropError: null
59
58
  };
60
- return _this;
61
59
  }
62
60
 
63
- _createClass(CsvOverlay, [{
64
- key: "componentDidMount",
65
- value: function componentDidMount() {
66
- this.divElem.current.addEventListener('paste', this.handlePasteEvent);
67
- this.divElem.current.focus();
68
- }
69
- }, {
70
- key: "componentWillUnmount",
71
- value: function componentWillUnmount() {
72
- this.divElem.current.removeEventListener('paste', this.handlePasteEvent);
73
- }
74
- }, {
75
- key: "handleSelectFile",
76
- value: function handleSelectFile() {
77
- this.fileElem.current.value = null;
78
- this.fileElem.current.click();
79
- }
80
- }, {
81
- key: "handleFiles",
82
- value: function handleFiles(event) {
83
- event.stopPropagation();
84
- event.preventDefault();
85
- this.handleFile(event.target.files[0]);
86
- }
87
- }, {
88
- key: "handleDrop",
89
- value: function handleDrop(e) {
90
- var _this$props = this.props,
91
- clearDragError = _this$props.clearDragError,
92
- dragError = _this$props.dragError;
93
- e.preventDefault();
94
- e.stopPropagation();
61
+ componentDidMount() {
62
+ this.divElem.current.addEventListener('paste', this.handlePasteEvent);
63
+ this.divElem.current.focus();
64
+ }
95
65
 
96
- if (dragError) {
97
- clearDragError();
98
- return;
99
- }
66
+ componentWillUnmount() {
67
+ this.divElem.current.removeEventListener('paste', this.handlePasteEvent);
68
+ }
100
69
 
101
- if (!e.dataTransfer || !e.dataTransfer.items) {
102
- return;
103
- }
70
+ handleSelectFile() {
71
+ this.fileElem.current.value = null;
72
+ this.fileElem.current.click();
73
+ }
104
74
 
105
- var file = e.dataTransfer.items[0].getAsFile();
75
+ handleFiles(event) {
76
+ event.stopPropagation();
77
+ event.preventDefault();
78
+ this.handleFile(event.target.files[0]);
79
+ }
106
80
 
107
- if (CsvOverlay.isValidExtension(file.name)) {
108
- this.handleFile(file);
109
- } else {
110
- this.setState({
111
- dropError: CsvOverlay.FILE_TYPE_ERROR
112
- });
113
- }
81
+ handleDrop(e) {
82
+ var {
83
+ clearDragError,
84
+ dragError
85
+ } = this.props;
86
+ e.preventDefault();
87
+ e.stopPropagation();
88
+
89
+ if (dragError) {
90
+ clearDragError();
91
+ return;
114
92
  }
115
- }, {
116
- key: "unstageFile",
117
- value: function unstageFile(event) {
118
- var onFileOpened = this.props.onFileOpened;
119
- event.stopPropagation();
120
- event.preventDefault();
121
- onFileOpened(null);
122
- this.setState({
123
- selectedFileName: '',
124
- dropError: null
125
- });
93
+
94
+ if (!e.dataTransfer || !e.dataTransfer.items) {
95
+ return;
126
96
  }
127
- }, {
128
- key: "handleFile",
129
- value: function handleFile(file) {
130
- var onFileOpened = this.props.onFileOpened;
131
- onFileOpened(file);
97
+
98
+ var file = e.dataTransfer.items[0].getAsFile();
99
+
100
+ if (CsvOverlay.isValidExtension(file.name)) {
101
+ this.handleFile(file);
102
+ } else {
132
103
  this.setState({
133
- selectedFileName: file.name,
134
- dropError: null
104
+ dropError: CsvOverlay.FILE_TYPE_ERROR
135
105
  });
136
106
  }
137
- }, {
138
- key: "handleMenuPaste",
139
- value: function handleMenuPaste() {
140
- var _this2 = this;
107
+ }
141
108
 
142
- var _this$props2 = this.props,
143
- onPaste = _this$props2.onPaste,
144
- onError = _this$props2.onError,
145
- uploadInProgress = _this$props2.uploadInProgress;
109
+ unstageFile(event) {
110
+ var {
111
+ onFileOpened
112
+ } = this.props;
113
+ event.stopPropagation();
114
+ event.preventDefault();
115
+ onFileOpened(null);
116
+ this.setState({
117
+ selectedFileName: '',
118
+ dropError: null
119
+ });
120
+ }
146
121
 
147
- if (uploadInProgress) {
148
- return;
149
- }
122
+ handleFile(file) {
123
+ var {
124
+ onFileOpened
125
+ } = this.props;
126
+ onFileOpened(file);
127
+ this.setState({
128
+ selectedFileName: file.name,
129
+ dropError: null
130
+ });
131
+ }
150
132
 
151
- navigator.clipboard.readText().then(function (clipText) {
152
- onPaste(clipText);
133
+ handleMenuPaste() {
134
+ var {
135
+ onPaste,
136
+ onError,
137
+ uploadInProgress
138
+ } = this.props;
153
139
 
154
- _this2.setState({
155
- selectedFileName: PASTED_VALUES,
156
- dropError: null
157
- });
158
- })["catch"](function (e) {
159
- return onError(e);
160
- });
140
+ if (uploadInProgress) {
141
+ return;
161
142
  }
162
- }, {
163
- key: "handlePasteEvent",
164
- value: function handlePasteEvent(event) {
165
- event.stopPropagation();
166
- event.preventDefault();
167
- this.handleMenuPaste();
168
- }
169
- }, {
170
- key: "makeContextMenuItems",
171
- value: function makeContextMenuItems() {
172
- var uploadInProgress = this.props.uploadInProgress;
173
- return [{
174
- title: 'Paste',
175
- icon: vsClippy,
176
- action: this.handleMenuPaste,
177
- shortcut: GLOBAL_SHORTCUTS.PASTE,
178
- disabled: uploadInProgress
179
- }];
180
- }
181
- }, {
182
- key: "render",
183
- value: function render() {
184
- var _this$props3 = this.props,
185
- dragError = _this$props3.dragError,
186
- uploadInProgress = _this$props3.uploadInProgress;
187
- var _this$state = this.state,
188
- selectedFileName = _this$state.selectedFileName,
189
- dropError = _this$state.dropError;
190
- var error = dragError || dropError;
191
- var contextActions = this.makeContextMenuItems();
192
- return /*#__PURE__*/React.createElement("div", {
193
- ref: this.divElem,
194
- className: "csv-overlay fill-parent-absolute",
195
- onDragOver: CsvOverlay.handleDragOver,
196
- onDrop: this.handleDrop,
197
- tabIndex: "-1"
198
- }, /*#__PURE__*/React.createElement(ContextActions, {
199
- actions: contextActions
200
- }), /*#__PURE__*/React.createElement("input", {
201
- ref: this.fileElem,
202
- type: "file",
203
- id: "fileElem",
204
- accept: ".csv, .tsv, .tab, .zip, .psv, .dsv, .txt",
205
- style: {
206
- display: 'none'
207
- },
208
- onChange: this.handleFiles
209
- }), !selectedFileName && !error && /*#__PURE__*/React.createElement("div", {
210
- className: "message-content"
211
- }, /*#__PURE__*/React.createElement("div", {
212
- className: "message-icon"
213
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
214
- icon: dhFileDownload
215
- })), /*#__PURE__*/React.createElement("label", null, "Drop file (or paste values) here to import"), /*#__PURE__*/React.createElement("div", {
216
- className: "message-small"
217
- }, /*#__PURE__*/React.createElement("label", null, "or")), /*#__PURE__*/React.createElement("button", {
218
- type: "button",
219
- className: "btn btn-primary",
220
- onClick: this.handleSelectFile
221
- }, "Select File...")), selectedFileName && !error && /*#__PURE__*/React.createElement("div", {
222
- className: "selected-content"
223
- }, /*#__PURE__*/React.createElement("div", {
224
- className: "selected-icon"
225
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
226
- icon: CsvOverlay.getIcon(selectedFileName)
227
- })), /*#__PURE__*/React.createElement("div", {
228
- className: "selected-text"
229
- }, /*#__PURE__*/React.createElement("label", null, "Selected File"), /*#__PURE__*/React.createElement("label", {
230
- className: "selected-name"
231
- }, selectedFileName, !uploadInProgress && /*#__PURE__*/React.createElement("button", {
232
- type: "button",
233
- className: "btn btn-link btn-link-icon ml-2",
234
- onClick: this.unstageFile
235
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
236
- icon: vsTrash
237
- }))))), error && /*#__PURE__*/React.createElement("div", {
238
- className: "message-content"
239
- }, /*#__PURE__*/React.createElement("div", {
240
- className: "message-icon"
241
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
242
- icon: vsWarning
243
- })), /*#__PURE__*/React.createElement("label", null, error), error === CsvOverlay.FILE_TYPE_ERROR && /*#__PURE__*/React.createElement("div", {
244
- className: "message-small"
245
- }, /*#__PURE__*/React.createElement("label", null, "Please select a .csv, .tsv, .tab, .psv, .dsv, .txt or .zip"))));
246
- }
247
- }], [{
248
- key: "isValidDropItem",
249
- value: function isValidDropItem(item) {
250
- return item && item.kind === 'file' && !INVALID_MIME_TYPES.find(function (invalid) {
251
- return invalid.test(item.type);
143
+
144
+ navigator.clipboard.readText().then(clipText => {
145
+ onPaste(clipText);
146
+ this.setState({
147
+ selectedFileName: PASTED_VALUES,
148
+ dropError: null
252
149
  });
253
- }
254
- }, {
255
- key: "isValidExtension",
256
- value: function isValidExtension(name) {
257
- return name.endsWith('.csv') || name.endsWith('.zip') || name.endsWith('.tsv') || name.endsWith('.tab') || name.endsWith('.psv') || name.endsWith('.dsv') || name.endsWith('.txt');
258
- }
259
- }, {
260
- key: "handleDragOver",
261
- value: function handleDragOver(e) {
262
- e.preventDefault();
263
- e.stopPropagation();
264
- }
265
- }, {
266
- key: "getIcon",
267
- value: function getIcon(fileName) {
268
- if (fileName === PASTED_VALUES) {
269
- return vsClippy;
270
- }
150
+ }).catch(e => onError(e));
151
+ }
271
152
 
272
- if (fileName.endsWith('.csv')) {
273
- return dhFileCsv;
274
- }
153
+ handlePasteEvent(event) {
154
+ event.stopPropagation();
155
+ event.preventDefault();
156
+ this.handleMenuPaste();
157
+ }
275
158
 
276
- if (fileName.endsWith('.zip')) {
277
- return vsFileZip;
278
- }
159
+ makeContextMenuItems() {
160
+ var {
161
+ uploadInProgress
162
+ } = this.props;
163
+ return [{
164
+ title: 'Paste',
165
+ icon: vsClippy,
166
+ action: this.handleMenuPaste,
167
+ shortcut: GLOBAL_SHORTCUTS.PASTE,
168
+ disabled: uploadInProgress
169
+ }];
170
+ }
279
171
 
280
- return dhFileSpreadsheet;
281
- }
282
- }]);
172
+ render() {
173
+ var {
174
+ dragError,
175
+ uploadInProgress
176
+ } = this.props;
177
+ var {
178
+ selectedFileName,
179
+ dropError
180
+ } = this.state;
181
+ var error = dragError || dropError;
182
+ var contextActions = this.makeContextMenuItems();
183
+ return /*#__PURE__*/React.createElement("div", {
184
+ ref: this.divElem,
185
+ className: "csv-overlay fill-parent-absolute",
186
+ onDragOver: CsvOverlay.handleDragOver,
187
+ onDrop: this.handleDrop,
188
+ tabIndex: "-1"
189
+ }, /*#__PURE__*/React.createElement(ContextActions, {
190
+ actions: contextActions
191
+ }), /*#__PURE__*/React.createElement("input", {
192
+ ref: this.fileElem,
193
+ type: "file",
194
+ id: "fileElem",
195
+ accept: ".csv, .tsv, .tab, .zip, .psv, .dsv, .txt",
196
+ style: {
197
+ display: 'none'
198
+ },
199
+ onChange: this.handleFiles
200
+ }), !selectedFileName && !error && /*#__PURE__*/React.createElement("div", {
201
+ className: "message-content"
202
+ }, /*#__PURE__*/React.createElement("div", {
203
+ className: "message-icon"
204
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
205
+ icon: dhFileDownload
206
+ })), /*#__PURE__*/React.createElement("label", null, "Drop file (or paste values) here to import"), /*#__PURE__*/React.createElement("div", {
207
+ className: "message-small"
208
+ }, /*#__PURE__*/React.createElement("label", null, "or")), /*#__PURE__*/React.createElement("button", {
209
+ type: "button",
210
+ className: "btn btn-primary",
211
+ onClick: this.handleSelectFile
212
+ }, "Select File...")), selectedFileName && !error && /*#__PURE__*/React.createElement("div", {
213
+ className: "selected-content"
214
+ }, /*#__PURE__*/React.createElement("div", {
215
+ className: "selected-icon"
216
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
217
+ icon: CsvOverlay.getIcon(selectedFileName)
218
+ })), /*#__PURE__*/React.createElement("div", {
219
+ className: "selected-text"
220
+ }, /*#__PURE__*/React.createElement("label", null, "Selected File"), /*#__PURE__*/React.createElement("label", {
221
+ className: "selected-name"
222
+ }, selectedFileName, !uploadInProgress && /*#__PURE__*/React.createElement("button", {
223
+ type: "button",
224
+ className: "btn btn-link btn-link-icon ml-2",
225
+ onClick: this.unstageFile
226
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
227
+ icon: vsTrash
228
+ }))))), error && /*#__PURE__*/React.createElement("div", {
229
+ className: "message-content"
230
+ }, /*#__PURE__*/React.createElement("div", {
231
+ className: "message-icon"
232
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
233
+ icon: vsWarning
234
+ })), /*#__PURE__*/React.createElement("label", null, error), error === CsvOverlay.FILE_TYPE_ERROR && /*#__PURE__*/React.createElement("div", {
235
+ className: "message-small"
236
+ }, /*#__PURE__*/React.createElement("label", null, "Please select a .csv, .tsv, .tab, .psv, .dsv, .txt or .zip"))));
237
+ }
283
238
 
284
- return CsvOverlay;
285
- }(Component);
239
+ }
286
240
 
287
241
  _defineProperty(CsvOverlay, "MULTIPLE_FILE_ERROR", 'Please select one file');
288
242