@malloy-publisher/sdk 0.0.33 → 0.0.35

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 (336) hide show
  1. package/README.md +21 -0
  2. package/dist/RenderedResult-DphykkT6.cjs +1 -0
  3. package/dist/client/api.d.ts +18 -0
  4. package/dist/components/ApiErrorDisplay.d.ts +13 -0
  5. package/dist/components/Model/ModelCell.d.ts +1 -6
  6. package/dist/components/Package/Config.d.ts +1 -9
  7. package/dist/components/Package/Connections.d.ts +1 -8
  8. package/dist/components/Package/Databases.d.ts +1 -9
  9. package/dist/components/Package/Models.d.ts +1 -6
  10. package/dist/components/Package/Notebooks.d.ts +2 -7
  11. package/dist/components/Package/Package.d.ts +1 -6
  12. package/dist/components/Package/PackageProvider.d.ts +14 -0
  13. package/dist/components/Package/Schedules.d.ts +1 -9
  14. package/dist/components/Package/index.d.ts +2 -1
  15. package/dist/components/Project/About.d.ts +1 -7
  16. package/dist/components/Project/ConnectionExplorer.d.ts +1 -4
  17. package/dist/components/Project/Packages.d.ts +2 -5
  18. package/dist/components/Project/Project.d.ts +11 -3
  19. package/dist/components/Project/index.d.ts +1 -1
  20. package/dist/components/QueryResult/QueryResult.d.ts +1 -6
  21. package/dist/components/RenderedResult/RenderedResult.d.ts +4 -1
  22. package/dist/index-nKbldp0y.cjs +3000 -0
  23. package/dist/index.cjs.js +1 -2914
  24. package/dist/sdk.css +1 -1
  25. package/package.json +5 -5
  26. package/src/components/ApiErrorDisplay.tsx +40 -0
  27. package/src/components/Home/Home.tsx +8 -1
  28. package/src/components/Model/Model.tsx +59 -28
  29. package/src/components/Model/ModelCell.tsx +26 -63
  30. package/src/components/Model/NamedQueries.tsx +2 -2
  31. package/src/components/Model/SourcesExplorer.tsx +14 -15
  32. package/src/components/MutableNotebook/ModelPicker.tsx +13 -3
  33. package/src/components/MutableNotebook/MutableCell.tsx +6 -10
  34. package/src/components/MutableNotebook/MutableNotebook.tsx +2 -2
  35. package/src/components/Notebook/Notebook.tsx +48 -24
  36. package/src/components/Notebook/NotebookCell.tsx +7 -5
  37. package/src/components/Package/Config.tsx +10 -18
  38. package/src/components/Package/Connections.tsx +10 -12
  39. package/src/components/Package/Databases.tsx +93 -198
  40. package/src/components/Package/FileTreeView.tsx +21 -4
  41. package/src/components/Package/Models.tsx +21 -31
  42. package/src/components/Package/Notebooks.tsx +22 -32
  43. package/src/components/Package/Package.tsx +31 -89
  44. package/src/components/Package/PackageProvider.tsx +46 -0
  45. package/src/components/Package/Schedules.tsx +10 -19
  46. package/src/components/Package/index.ts +6 -1
  47. package/src/components/Project/About.tsx +7 -15
  48. package/src/components/Project/ConnectionExplorer.tsx +131 -52
  49. package/src/components/Project/Packages.tsx +12 -13
  50. package/src/components/Project/Project.tsx +35 -16
  51. package/src/components/Project/index.ts +1 -1
  52. package/src/components/QueryResult/QueryResult.tsx +12 -15
  53. package/src/components/RenderedResult/RenderedResult.tsx +50 -11
  54. package/src/components/RenderedResult/ResultContainer.tsx +24 -9
  55. package/dist/RenderedResult-B9Gth8IY.cjs +0 -1
  56. package/dist/RenderedResult-Drg_uJPZ.js +0 -30
  57. package/dist/abap-BmBUA35e.js +0 -6
  58. package/dist/actionscript-3-zFUbzQa9.js +0 -6
  59. package/dist/ada-CBvPkFpZ.js +0 -6
  60. package/dist/andromeeda-uXNdzNpk.js +0 -4
  61. package/dist/angular-html-0fTdLuKf.js +0 -32
  62. package/dist/angular-ts-wkniW60G.js +0 -21
  63. package/dist/apache-CVNlsSDc.js +0 -6
  64. package/dist/apex-DFk3KRB1.js +0 -6
  65. package/dist/apl-TLDHFJX6.js +0 -16
  66. package/dist/applescript-CYMR_y0g.js +0 -6
  67. package/dist/ara-4QmU5e04.js +0 -6
  68. package/dist/asciidoc-v_1bjgUg.js +0 -6
  69. package/dist/asm-RC0Yh-NZ.js +0 -6
  70. package/dist/astro-Uf8_VxKJ.js +0 -16
  71. package/dist/aurora-x-BwoVEUWZ.js +0 -4
  72. package/dist/awk-gPH8MVMW.js +0 -6
  73. package/dist/ayu-dark-CxPZkpb2.js +0 -4
  74. package/dist/ballerina-kvLnRU_e.js +0 -6
  75. package/dist/bat-BHYy44sT.js +0 -6
  76. package/dist/beancount-D-MADTs_.js +0 -6
  77. package/dist/berry-Ci9U0o4h.js +0 -6
  78. package/dist/bibtex-CX618D15.js +0 -6
  79. package/dist/bicep-iuYiPopT.js +0 -6
  80. package/dist/blade-BtR00Gx0.js +0 -18
  81. package/dist/bsl-BIXPNqL4.js +0 -8
  82. package/dist/c-DASdrs7p.js +0 -6
  83. package/dist/cadence-BDALQi26.js +0 -6
  84. package/dist/cairo-tXZKA2PT.js +0 -8
  85. package/dist/catppuccin-frappe-BrTOiad2.js +0 -4
  86. package/dist/catppuccin-latte-D-dc_R4m.js +0 -4
  87. package/dist/catppuccin-macchiato-DN4jOp0G.js +0 -4
  88. package/dist/catppuccin-mocha-B8yCE3-3.js +0 -4
  89. package/dist/clarity-CNgV2Ths.js +0 -6
  90. package/dist/clojure-CsKKFGwv.js +0 -6
  91. package/dist/cmake-Dr-A3iJx.js +0 -6
  92. package/dist/cobol-DMssKNmC.js +0 -10
  93. package/dist/codeowners-Bt9yU6NX.js +0 -6
  94. package/dist/codeql-DBNTqJi1.js +0 -6
  95. package/dist/coffee-D_GzM8k1.js +0 -8
  96. package/dist/common-lisp-r7ZEOG7T.js +0 -6
  97. package/dist/components/Package/PublisherPackageProvider.d.ts +0 -14
  98. package/dist/components/Project/TablesInSchema.d.ts +0 -10
  99. package/dist/coq-CB6Pv_W9.js +0 -6
  100. package/dist/cpp-CJF2i3ah.js +0 -18
  101. package/dist/crystal-BKWnaU3g.js +0 -18
  102. package/dist/csharp-CYWRhZ2R.js +0 -6
  103. package/dist/css-D1aVdRIU.js +0 -6
  104. package/dist/csv-DvCncUGQ.js +0 -6
  105. package/dist/cue-BXMrmvay.js +0 -6
  106. package/dist/cypher-DTm5zNR1.js +0 -6
  107. package/dist/d-D6ZXmn3l.js +0 -6
  108. package/dist/dark-plus-pUHDTVV0.js +0 -4
  109. package/dist/dart-Dz59Is3F.js +0 -6
  110. package/dist/dax-DTVGzydb.js +0 -6
  111. package/dist/desktop-Db9vb-dl.js +0 -6
  112. package/dist/diff-XmNrvgM1.js +0 -6
  113. package/dist/docker-DWH2onkn.js +0 -6
  114. package/dist/dotenv-4337wvzu.js +0 -6
  115. package/dist/dracula-BtZx2Kac.js +0 -4
  116. package/dist/dracula-soft-BKa-aqBv.js +0 -4
  117. package/dist/dream-maker-CvvfrJSx.js +0 -6
  118. package/dist/edge-CgxR-qhM.js +0 -12
  119. package/dist/elixir-DZkeSPwW.js +0 -8
  120. package/dist/elm-BKuV1HE1.js +0 -8
  121. package/dist/emacs-lisp-BAefI874.js +0 -6
  122. package/dist/erb-BLwkpXUJ.js +0 -10
  123. package/dist/erlang-CmIiwF3I.js +0 -6
  124. package/dist/everforest-dark-DMCBqXCK.js +0 -4
  125. package/dist/everforest-light-BbXl82Em.js +0 -4
  126. package/dist/fennel-DNqkz9pE.js +0 -6
  127. package/dist/fish-DIm72t2T.js +0 -6
  128. package/dist/fluent-BapTxJsC.js +0 -6
  129. package/dist/fortran-fixed-form-s9Hnb3av.js +0 -8
  130. package/dist/fortran-free-form-CNDsBFUj.js +0 -6
  131. package/dist/fsharp-Cv0x43wb.js +0 -8
  132. package/dist/gdresource-CMcKXvgJ.js +0 -10
  133. package/dist/gdscript-D7aheHm-.js +0 -6
  134. package/dist/gdshader-BGJEsM2Z.js +0 -6
  135. package/dist/genie-C9gPjc6J.js +0 -6
  136. package/dist/gherkin-bka1Exbx.js +0 -6
  137. package/dist/git-commit-BspYIY3P.js +0 -8
  138. package/dist/git-rebase--zLBTjUa.js +0 -8
  139. package/dist/github-dark-DenFmJkN.js +0 -4
  140. package/dist/github-dark-default-BJPUVz4H.js +0 -4
  141. package/dist/github-dark-dimmed-DUshB20C.js +0 -4
  142. package/dist/github-dark-high-contrast-D3aGCnF8.js +0 -4
  143. package/dist/github-light-JYsPkUQd.js +0 -4
  144. package/dist/github-light-default-D99KPAby.js +0 -4
  145. package/dist/github-light-high-contrast-BbmZE-Mp.js +0 -4
  146. package/dist/gleam-B4k9YFGD.js +0 -6
  147. package/dist/glimmer-js-DhY9umHJ.js +0 -14
  148. package/dist/glimmer-ts-CCrHcYH5.js +0 -14
  149. package/dist/glsl-XLGYNq5B.js +0 -8
  150. package/dist/gnuplot-DnWoRZt-.js +0 -6
  151. package/dist/go-BErP6iv1.js +0 -6
  152. package/dist/graphql-DWpQF4JI.js +0 -14
  153. package/dist/groovy-IWs5-NIO.js +0 -6
  154. package/dist/hack-CQrV-ytR.js +0 -10
  155. package/dist/haml-CMN0hQaL.js +0 -10
  156. package/dist/handlebars-Cc-7fXX5.js +0 -14
  157. package/dist/haskell-CtlGos0K.js +0 -6
  158. package/dist/haxe-CZZ33vZw.js +0 -6
  159. package/dist/hcl-6hOg9WP4.js +0 -6
  160. package/dist/hjson-CgwED-oz.js +0 -6
  161. package/dist/hlsl-3-lv4gi7.js +0 -6
  162. package/dist/houston-BDYrDoDW.js +0 -4
  163. package/dist/html-B0P_v3yU.js +0 -10
  164. package/dist/html-derivative-D59SHfh8.js +0 -8
  165. package/dist/http-Dcjm_K1m.js +0 -14
  166. package/dist/hxml-BNKImryz.js +0 -8
  167. package/dist/hy-C2xHhR6I.js +0 -6
  168. package/dist/imba-Drd0AMDo.js +0 -8
  169. package/dist/index.es.js +0 -140061
  170. package/dist/ini-BUcvsX-U.js +0 -6
  171. package/dist/java-B7odJ7Ap.js +0 -6
  172. package/dist/javascript-fa8UlHZE.js +0 -6
  173. package/dist/jinja-CCSYduCH.js +0 -11
  174. package/dist/jison-BygvlveW.js +0 -8
  175. package/dist/json-71t8ZF9g.js +0 -6
  176. package/dist/json5-Z7F6rA6a.js +0 -6
  177. package/dist/jsonc-Dphhs4m2.js +0 -6
  178. package/dist/jsonl-D9jj92Gg.js +0 -6
  179. package/dist/jsonnet-DEQ7IUoJ.js +0 -6
  180. package/dist/jssm-j74e88UX.js +0 -6
  181. package/dist/jsx-Bkesy5tT.js +0 -6
  182. package/dist/julia-CiahampL.js +0 -16
  183. package/dist/kanagawa-dragon-CiKur4Hl.js +0 -4
  184. package/dist/kanagawa-lotus-BKu-smKu.js +0 -4
  185. package/dist/kanagawa-wave-CQwozSzG.js +0 -4
  186. package/dist/kotlin-DCgZY7Ii.js +0 -6
  187. package/dist/kusto-Cw029H-v.js +0 -6
  188. package/dist/laserwave-6a00oqik.js +0 -4
  189. package/dist/latex-LfGCYGw5.js +0 -8
  190. package/dist/lean-CYSet4vs.js +0 -6
  191. package/dist/less-DQA4v-Nm.js +0 -6
  192. package/dist/light-plus-CZuVqSLX.js +0 -4
  193. package/dist/liquid-CvufO3kO.js +0 -14
  194. package/dist/log-D2eRfqDn.js +0 -6
  195. package/dist/logo-QEAtGWZ9.js +0 -6
  196. package/dist/lua-BVfhNLDr.js +0 -8
  197. package/dist/luau-BjYGiqID.js +0 -6
  198. package/dist/make-BjuHP00g.js +0 -6
  199. package/dist/malloy-explorer.css +0 -497
  200. package/dist/markdown-B6guhLWd.js +0 -6
  201. package/dist/marko-CHlMS8w5.js +0 -14
  202. package/dist/material-theme-D6KBX41T.js +0 -4
  203. package/dist/material-theme-darker-CkRroheE.js +0 -4
  204. package/dist/material-theme-lighter-BUBw43Yz.js +0 -4
  205. package/dist/material-theme-ocean-ClGX14Ja.js +0 -4
  206. package/dist/material-theme-palenight-C1RVm8K1.js +0 -4
  207. package/dist/matlab-BpQlIJiw.js +0 -6
  208. package/dist/mdc-4K6B6lHG.js +0 -12
  209. package/dist/mdx-DIoECIFU.js +0 -6
  210. package/dist/mermaid-BZ7WHNIe.js +0 -6
  211. package/dist/min-dark-C7ak0t6c.js +0 -4
  212. package/dist/min-light-CKFxVcPp.js +0 -4
  213. package/dist/mipsasm-DusDYkFc.js +0 -6
  214. package/dist/mojo-CY9jaezJ.js +0 -6
  215. package/dist/monokai-C1KBYcO0.js +0 -4
  216. package/dist/move-ChphFumd.js +0 -6
  217. package/dist/narrat-Dz4d7OmN.js +0 -6
  218. package/dist/nextflow-DW0Yq9a2.js +0 -6
  219. package/dist/nginx-Can2eAjw.js +0 -8
  220. package/dist/night-owl-Bm2rzalh.js +0 -4
  221. package/dist/nim-B3r2RtQZ.js +0 -20
  222. package/dist/nix-Cg5uV_xg.js +0 -6
  223. package/dist/nord-CC5OiUXg.js +0 -4
  224. package/dist/nushell-BfRnzRWn.js +0 -6
  225. package/dist/objective-c-BGg9R27G.js +0 -6
  226. package/dist/objective-cpp-CJ3y3V_5.js +0 -6
  227. package/dist/ocaml-BZLsfx_o.js +0 -6
  228. package/dist/one-dark-pro-D7-kP8fv.js +0 -4
  229. package/dist/one-light-D9sNaUtq.js +0 -4
  230. package/dist/pascal-l2bqd7Dz.js +0 -6
  231. package/dist/perl-DaMQyPwp.js +0 -16
  232. package/dist/php-BL3EfPBi.js +0 -18
  233. package/dist/plastic-CSTz3KZp.js +0 -4
  234. package/dist/plsql-oVq_K_wH.js +0 -6
  235. package/dist/po-5jaeIyVd.js +0 -6
  236. package/dist/poimandres-C-VADXHD.js +0 -4
  237. package/dist/polar-wcLp8ci7.js +0 -6
  238. package/dist/postcss-BZ3MNRIJ.js +0 -6
  239. package/dist/powerquery-CgRa2XRw.js +0 -6
  240. package/dist/powershell-Diwyv8Eh.js +0 -6
  241. package/dist/prisma-COL_v1x4.js +0 -6
  242. package/dist/prolog-CuvJOxqT.js +0 -6
  243. package/dist/proto-o9HLmF90.js +0 -6
  244. package/dist/pug-HKe4Luo3.js +0 -12
  245. package/dist/puppet-wpGOnQp5.js +0 -6
  246. package/dist/purescript-B_1NgE2N.js +0 -6
  247. package/dist/python-xYxLFJY-.js +0 -6
  248. package/dist/qml-FlMIyjU9.js +0 -8
  249. package/dist/qmldir-BInDYbpo.js +0 -6
  250. package/dist/qss-D-h4NdUG.js +0 -6
  251. package/dist/r-F-9I-ITZ.js +0 -6
  252. package/dist/racket-BoD1TBFT.js +0 -6
  253. package/dist/raku-IaYcw19m.js +0 -6
  254. package/dist/razor-CeqqNtyB.js +0 -10
  255. package/dist/red-7y8PH7HH.js +0 -4
  256. package/dist/reg-CMUdAgIP.js +0 -6
  257. package/dist/regexp-GiFkbxS-.js +0 -6
  258. package/dist/rel-BaRn3QX7.js +0 -6
  259. package/dist/riscv-B9V3SsvW.js +0 -6
  260. package/dist/rose-pine-DhT-HZE9.js +0 -4
  261. package/dist/rose-pine-dawn-DiCjL2i4.js +0 -4
  262. package/dist/rose-pine-moon-BNmGHlcn.js +0 -4
  263. package/dist/rst-C3D6-dqL.js +0 -22
  264. package/dist/ruby-DcPLUUK3.js +0 -30
  265. package/dist/rust-Pc7DCsZD.js +0 -6
  266. package/dist/sas-tDSYjXcL.js +0 -8
  267. package/dist/sass-iCyS6eP9.js +0 -6
  268. package/dist/scala-Cly-fENF.js +0 -6
  269. package/dist/scheme-Zi24oEYu.js +0 -6
  270. package/dist/scss-DhHc4lxB.js +0 -8
  271. package/dist/sdbl-BBamrXFL.js +0 -6
  272. package/dist/shaderlab-CvqEIoL0.js +0 -8
  273. package/dist/shellscript-Dn0-btNd.js +0 -6
  274. package/dist/shellsession-8OLo3sB6.js +0 -8
  275. package/dist/slack-dark-i7wN4OET.js +0 -4
  276. package/dist/slack-ochin-ndHf0LoP.js +0 -4
  277. package/dist/smalltalk-Cns31tKw.js +0 -6
  278. package/dist/snazzy-light-BlSJXAu4.js +0 -4
  279. package/dist/solarized-dark-UTmkh7lw.js +0 -4
  280. package/dist/solarized-light-BheCkDPT.js +0 -4
  281. package/dist/solidity-BG_k8fA_.js +0 -6
  282. package/dist/soy-EwHMOVPj.js +0 -8
  283. package/dist/sparql-DhuelBut.js +0 -8
  284. package/dist/splunk-CTqDjQdo.js +0 -6
  285. package/dist/sql-DCkt643-.js +0 -6
  286. package/dist/ssh-config-DHHGll-v.js +0 -6
  287. package/dist/stata-Dok6hMw0.js +0 -8
  288. package/dist/stylus-n_9f0QQ5.js +0 -6
  289. package/dist/svelte-01qw6Rxm.js +0 -14
  290. package/dist/swift-BAWqNR8A.js +0 -6
  291. package/dist/synthwave-84-NU3C_KFZ.js +0 -4
  292. package/dist/system-verilog-Cui-g-ut.js +0 -6
  293. package/dist/systemd-CsKYQIQK.js +0 -6
  294. package/dist/talonscript-D2dGh8FO.js +0 -6
  295. package/dist/tasl-D3W8HMV6.js +0 -6
  296. package/dist/tcl-2y0Fuc4S.js +0 -6
  297. package/dist/templ-Hmy8U0DD.js +0 -12
  298. package/dist/terraform-BGW6Oerf.js +0 -6
  299. package/dist/tex-mHs7a43s.js +0 -8
  300. package/dist/tokyo-night-LhP3hHhi.js +0 -4
  301. package/dist/toml-CQSfOn0e.js +0 -6
  302. package/dist/ts-tags-DYZ4SGcN.js +0 -41
  303. package/dist/tsv-BtvSkaG0.js +0 -6
  304. package/dist/tsx-DiGsgWT8.js +0 -6
  305. package/dist/turtle-BJ2wmjPc.js +0 -6
  306. package/dist/twig-BmytkGQV.js +0 -18
  307. package/dist/typescript-buWNZFwO.js +0 -6
  308. package/dist/typespec-bLbdsxJL.js +0 -6
  309. package/dist/typst-Y9_SmXTs.js +0 -6
  310. package/dist/v-wa8Orrdd.js +0 -6
  311. package/dist/vala-DRdriFr_.js +0 -6
  312. package/dist/vb-E2_-jk4M.js +0 -6
  313. package/dist/vendor-DfRellEl.js +0 -75318
  314. package/dist/verilog-B1iBoR5_.js +0 -6
  315. package/dist/vesper-CJsaOsSM.js +0 -4
  316. package/dist/vhdl-CRVaAhXk.js +0 -6
  317. package/dist/viml-B-zWOd7Z.js +0 -6
  318. package/dist/vitesse-black-BoGvW84i.js +0 -4
  319. package/dist/vitesse-dark-Cym-eLtO.js +0 -4
  320. package/dist/vitesse-light-CcmG315c.js +0 -4
  321. package/dist/vue-Bl1uVNsA.js +0 -31
  322. package/dist/vue-html-DHr5wjBG.js +0 -10
  323. package/dist/vyper-DWutKXpa.js +0 -6
  324. package/dist/wasm-Bv5f0gKv.js +0 -6
  325. package/dist/wasm-DQxwEHae.js +0 -7
  326. package/dist/wenyan-BMYnfus1.js +0 -6
  327. package/dist/wgsl-DnPoPGDU.js +0 -6
  328. package/dist/wikitext-CntM04PE.js +0 -6
  329. package/dist/wolfram-Ws5qPlX9.js +0 -6
  330. package/dist/xml-ChBsf5uy.js +0 -8
  331. package/dist/xsl-BefjlXrd.js +0 -8
  332. package/dist/yaml-Bbg74JKr.js +0 -6
  333. package/dist/zenscript-C0RKE4nU.js +0 -6
  334. package/dist/zig-D6SXBGNm.js +0 -6
  335. package/src/components/Package/PublisherPackageProvider.tsx +0 -48
  336. package/src/components/Project/TablesInSchema.tsx +0 -84
@@ -4,7 +4,6 @@ import {
4
4
  DialogContent,
5
5
  DialogTitle,
6
6
  Divider,
7
- IconButton,
8
7
  Table,
9
8
  TableBody,
10
9
  TableCell,
@@ -17,26 +16,31 @@ import { QueryClient, useQuery } from "@tanstack/react-query";
17
16
  import React from "react";
18
17
  import { Configuration, Database, DatabasesApi } from "../../client";
19
18
  import { StyledCard, StyledCardContent } from "../styles";
19
+ import { usePackage } from "./PackageProvider";
20
+ import { ApiErrorDisplay } from "../ApiErrorDisplay";
20
21
 
21
22
  const databasesApi = new DatabasesApi(new Configuration());
22
23
  const queryClient = new QueryClient();
23
24
 
24
- interface DatabaseProps {
25
- server?: string;
26
- projectName: string;
27
- packageName: string;
28
- versionId?: string;
29
- accessToken: string;
30
- }
25
+ export default function Databases() {
26
+ const { server, projectName, packageName, versionId, accessToken } =
27
+ usePackage();
28
+
29
+ const [open, setOpen] = React.useState(false);
30
+ const [selectedDatabase, setSelectedDatabase] =
31
+ React.useState<Database | null>(null);
32
+
33
+ const handleOpen = (database: Database) => {
34
+ setSelectedDatabase(database);
35
+ setOpen(true);
36
+ };
37
+
38
+ const handleClose = () => {
39
+ setOpen(false);
40
+ setSelectedDatabase(null);
41
+ };
31
42
 
32
- export default function DatabaseView({
33
- server,
34
- projectName,
35
- packageName,
36
- versionId,
37
- accessToken,
38
- }: DatabaseProps) {
39
- const { data, isSuccess, isError, error } = useQuery(
43
+ const { data, isError, error, isSuccess } = useQuery(
40
44
  {
41
45
  queryKey: ["databases", server, projectName, packageName, versionId],
42
46
  queryFn: () =>
@@ -48,6 +52,7 @@ export default function DatabaseView({
48
52
  },
49
53
  }),
50
54
  retry: false,
55
+ throwOnError: false,
51
56
  },
52
57
  queryClient,
53
58
  );
@@ -63,203 +68,93 @@ export default function DatabaseView({
63
68
  }
64
69
  };
65
70
  return (
66
- <StyledCard variant="outlined" sx={{ padding: "10px", width: "100%" }}>
67
- <StyledCardContent>
68
- <Typography variant="overline" fontWeight="bold">
69
- Embedded Databases
70
- </Typography>
71
- <Divider />
72
- <Box
73
- sx={{
74
- mt: "10px",
75
- maxHeight: "200px",
76
- overflowY: "auto",
77
- }}
78
- >
79
- {!isSuccess && !isError && (
80
- <Typography variant="body2" sx={{ p: "20px", m: "auto" }}>
81
- Fetching Databases...
82
- </Typography>
83
- )}
84
- {isSuccess && data.data.length > 0 && (
85
- <TableContainer>
71
+ <>
72
+ <StyledCard variant="outlined" sx={{ padding: "10px", width: "100%" }}>
73
+ <StyledCardContent>
74
+ <Typography variant="overline" fontWeight="bold">
75
+ Databases
76
+ </Typography>
77
+ <Divider />
78
+ <Box
79
+ sx={{
80
+ mt: "10px",
81
+ maxHeight: "200px",
82
+ overflowY: "auto",
83
+ }}
84
+ >
85
+ {!isSuccess && !isError && (
86
+ <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
87
+ Fetching Databases...
88
+ </Typography>
89
+ )}
90
+ {isError && (
91
+ <ApiErrorDisplay
92
+ error={error}
93
+ context={`${projectName} > ${packageName} > Databases`}
94
+ />
95
+ )}
96
+ {isSuccess && data.data.length > 0 && (
86
97
  <Table size="small">
87
98
  <TableHead>
88
99
  <TableRow>
89
- <TableCell>
90
- <Typography
91
- variant="subtitle2"
92
- fontWeight="bold"
93
- >
94
- Database Name
95
- </Typography>
96
- </TableCell>
97
- <TableCell align="right">
98
- <Typography
99
- variant="subtitle2"
100
- fontWeight="bold"
101
- >
102
- Table Rows
103
- </Typography>
104
- </TableCell>
100
+ <TableCell>Name</TableCell>
101
+ <TableCell align="right">Rows</TableCell>
105
102
  </TableRow>
106
103
  </TableHead>
107
104
  <TableBody>
108
105
  {data.data.map((database) => (
109
- <TableRow key={database.path}>
110
- <TableCell>
111
- <NameAndSchema database={database} />
106
+ <TableRow
107
+ key={database.path}
108
+ onClick={() => handleOpen(database)}
109
+ sx={{ cursor: "pointer" }}
110
+ >
111
+ <TableCell component="th" scope="row">
112
+ {database.path}
112
113
  </TableCell>
113
114
  <TableCell align="right">
114
- <Typography variant="body2">
115
- {formatRowSize(database.info.rowCount)}
116
- </Typography>
115
+ {formatRowSize(database.info.rowCount)}
117
116
  </TableCell>
118
117
  </TableRow>
119
118
  ))}
120
119
  </TableBody>
121
120
  </Table>
121
+ )}
122
+ {isSuccess && data.data.length === 0 && (
123
+ <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
124
+ No databases found
125
+ </Typography>
126
+ )}
127
+ </Box>
128
+ </StyledCardContent>
129
+ </StyledCard>
130
+
131
+ <Dialog open={open} onClose={handleClose} maxWidth="sm" fullWidth>
132
+ <DialogTitle>{selectedDatabase?.path}</DialogTitle>
133
+ <DialogContent>
134
+ {selectedDatabase?.info?.columns && (
135
+ <TableContainer>
136
+ <Table size="small">
137
+ <TableHead>
138
+ <TableRow>
139
+ <TableCell>Column</TableCell>
140
+ <TableCell>Type</TableCell>
141
+ </TableRow>
142
+ </TableHead>
143
+ <TableBody>
144
+ {selectedDatabase.info.columns.map((column) => (
145
+ <TableRow key={column.name}>
146
+ <TableCell component="th" scope="row">
147
+ {column.name}
148
+ </TableCell>
149
+ <TableCell>{column.type}</TableCell>
150
+ </TableRow>
151
+ ))}
152
+ </TableBody>
153
+ </Table>
122
154
  </TableContainer>
123
155
  )}
124
- {isSuccess && data.data.length === 0 && (
125
- <Typography variant="body2">No Embedded Databases</Typography>
126
- )}
127
- {isError && (
128
- <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
129
- {`${projectName} > ${packageName} > ${versionId} - ${error.message}`}
130
- </Typography>
131
- )}
132
- </Box>
133
- </StyledCardContent>
134
- </StyledCard>
135
- );
136
- }
137
-
138
- function NameAndSchema({ database }: { database: Database }) {
139
- const [open, setOpen] = React.useState(false);
140
- return (
141
- <Box
142
- sx={{ display: "flex", alignItems: "center" }}
143
- onClick={() => setOpen(!open)}
144
- style={{ cursor: "pointer" }}
145
- >
146
- <Typography
147
- variant="body2"
148
- color="primary"
149
- sx={{
150
- maxWidth: "200px",
151
- overflow: "hidden",
152
- textOverflow: "ellipsis",
153
- whiteSpace: "nowrap",
154
- }}
155
- >
156
- {database.path}
157
- </Typography>
158
- &nbsp;
159
- <Box sx={{ display: "flex", alignItems: "center" }}>
160
- <Box sx={{ mr: 1, display: "flex", alignItems: "center" }}>
161
- <svg
162
- width="16"
163
- height="16"
164
- viewBox="0 0 24 24"
165
- fill="none"
166
- xmlns="http://www.w3.org/2000/svg"
167
- >
168
- <path
169
- d="M11 7H6C5.46957 7 4.96086 7.21071 4.58579 7.58579C4.21071 7.96086 4 8.46957 4 9V18C4 18.5304 4.21071 19.0391 4.58579 19.4142C4.96086 19.7893 5.46957 20 6 20H15C15.5304 20 16.0391 19.7893 16.4142 19.4142C16.7893 19.0391 17 18.5304 17 18V13"
170
- stroke="currentColor"
171
- strokeWidth="2"
172
- strokeLinecap="round"
173
- strokeLinejoin="round"
174
- />
175
- <path
176
- d="M9 15L20 4"
177
- stroke="currentColor"
178
- strokeWidth="2"
179
- strokeLinecap="round"
180
- strokeLinejoin="round"
181
- />
182
- <path
183
- d="M15 4H20V9"
184
- stroke="currentColor"
185
- strokeWidth="2"
186
- strokeLinecap="round"
187
- strokeLinejoin="round"
188
- />
189
- </svg>
190
- </Box>
191
- </Box>
192
- <SchemaButton
193
- database={database}
194
- open={open}
195
- setClose={() => setOpen(false)}
196
- />
197
- </Box>
198
- );
199
- }
200
-
201
- function SchemaButton({
202
- database,
203
- open,
204
- setClose,
205
- }: {
206
- open: boolean;
207
- setClose: () => void;
208
- database: Database;
209
- }) {
210
- return (
211
- <Dialog open={open} onClose={setClose} maxWidth="sm" fullWidth>
212
- <DialogTitle>
213
- Schema:{" "}
214
- <Typography
215
- fontSize="large"
216
- variant="body2"
217
- fontFamily="monospace"
218
- component="span"
219
- >
220
- {database.path}
221
- </Typography>
222
- <IconButton
223
- aria-label="close"
224
- onClick={setClose}
225
- sx={{ position: "absolute", right: 8, top: 8 }}
226
- >
227
- <Box
228
- sx={{
229
- width: 24,
230
- height: 24,
231
- display: "flex",
232
- alignItems: "center",
233
- justifyContent: "center",
234
- }}
235
- >
236
- X
237
- </Box>
238
- </IconButton>
239
- </DialogTitle>
240
- <DialogContent>
241
- <TableContainer>
242
- <Table
243
- size="small"
244
- sx={{ "& .MuiTableCell-root": { padding: "10px" } }}
245
- >
246
- <TableHead>
247
- <TableRow>
248
- <TableCell>NAME</TableCell>
249
- <TableCell>TYPE</TableCell>
250
- </TableRow>
251
- </TableHead>
252
- <TableBody>
253
- {database.info.columns.map((row) => (
254
- <TableRow key={row.name}>
255
- <TableCell>{row.name}</TableCell>
256
- <TableCell>{row.type}</TableCell>
257
- </TableRow>
258
- ))}
259
- </TableBody>
260
- </Table>
261
- </TableContainer>
262
- </DialogContent>
263
- </Dialog>
156
+ </DialogContent>
157
+ </Dialog>
158
+ </>
264
159
  );
265
160
  }
@@ -22,7 +22,7 @@ import Collapse from "@mui/material/Collapse";
22
22
  import DnsIcon from "@mui/icons-material/DnsOutlined";
23
23
  import DataArrayIcon from "@mui/icons-material/DataArrayOutlined";
24
24
  import { Database, Model } from "../../client";
25
- import { Typography } from "@mui/material";
25
+ import { Typography, Tooltip } from "@mui/material";
26
26
 
27
27
  interface FiieTreeViewProps {
28
28
  items: Model[] | Database[];
@@ -65,6 +65,7 @@ type ExtendedTreeItemProps = {
65
65
  fileType: FileType;
66
66
  selectable: boolean;
67
67
  link: ((event?: React.MouseEvent) => void) | undefined;
68
+ error?: string;
68
69
  };
69
70
 
70
71
  interface CustomLabelProps {
@@ -72,13 +73,13 @@ interface CustomLabelProps {
72
73
  }
73
74
 
74
75
  function CustomTreeItem2Label({ item, ...other }: CustomLabelProps) {
75
- return (
76
+ const label = (
76
77
  <TreeItem2Label
77
78
  {...other}
78
79
  sx={{
79
80
  display: "flex",
80
81
  alignItems: "center",
81
- color: "grey.600",
82
+ color: item.error ? "error.main" : "grey.600",
82
83
  }}
83
84
  >
84
85
  {(item.fileType === "directory" && <FolderIcon />) ||
@@ -88,12 +89,26 @@ function CustomTreeItem2Label({ item, ...other }: CustomLabelProps) {
88
89
  <Typography
89
90
  variant="body2"
90
91
  sx={{ marginLeft: "5px" }}
91
- color={item.link ? "primary.main" : "grey.600"}
92
+ color={
93
+ item.error
94
+ ? "error.main"
95
+ : item.link
96
+ ? "primary.main"
97
+ : "grey.600"
98
+ }
92
99
  >
93
100
  {item.label}
94
101
  </Typography>
95
102
  </TreeItem2Label>
96
103
  );
104
+
105
+ return item.error ? (
106
+ <Tooltip title={item.error} placement="right">
107
+ {label}
108
+ </Tooltip>
109
+ ) : (
110
+ label
111
+ );
97
112
  }
98
113
 
99
114
  interface CustomTreeItemProps
@@ -193,6 +208,7 @@ function getTreeViewRecursive(
193
208
  "unknown";
194
209
  if (fileType !== "unknown") {
195
210
  // This is a model or database.
211
+ const entry = value as Model | Database;
196
212
  treeViewItems.push({
197
213
  id: path + key,
198
214
  label: key,
@@ -202,6 +218,7 @@ function getTreeViewRecursive(
202
218
  ? (event) => navigate(path + key, event)
203
219
  : undefined,
204
220
  selectable: fileType === "model" || fileType === "notebook",
221
+ error: "error" in entry ? entry.error : undefined,
205
222
  });
206
223
  } else {
207
224
  // This is a directory.
@@ -4,6 +4,8 @@ import axios from "axios";
4
4
  import { Configuration, ModelsApi } from "../../client";
5
5
  import { StyledCard, StyledCardContent } from "../styles";
6
6
  import { FileTreeView } from "./FileTreeView";
7
+ import { usePackage } from "./PackageProvider";
8
+ import { ApiErrorDisplay } from "../ApiErrorDisplay";
7
9
 
8
10
  axios.defaults.baseURL = "http://localhost:4000";
9
11
  const modelsApi = new ModelsApi(new Configuration());
@@ -12,22 +14,13 @@ const queryClient = new QueryClient();
12
14
  const DEFAULT_EXPANDED_FOLDERS = ["notebooks/", "models/"];
13
15
 
14
16
  interface ModelsProps {
15
- server?: string;
16
- projectName: string;
17
- packageName: string;
18
- versionId?: string;
19
17
  navigate: (to: string, event?: React.MouseEvent) => void;
20
- accessToken?: string;
21
18
  }
22
19
 
23
- export default function Models({
24
- server,
25
- projectName,
26
- packageName,
27
- versionId,
28
- navigate,
29
- accessToken,
30
- }: ModelsProps) {
20
+ export default function Models({ navigate }: ModelsProps) {
21
+ const { server, projectName, packageName, versionId, accessToken } =
22
+ usePackage();
23
+
31
24
  const { data, isError, error, isLoading, isSuccess } = useQuery(
32
25
  {
33
26
  queryKey: ["models", server, projectName, packageName, versionId],
@@ -39,6 +32,7 @@ export default function Models({
39
32
  Authorization: accessToken && `Bearer ${accessToken}`,
40
33
  },
41
34
  }),
35
+ throwOnError: false,
42
36
  retry: false,
43
37
  },
44
38
  queryClient,
@@ -58,29 +52,25 @@ export default function Models({
58
52
  overflowY: "auto",
59
53
  }}
60
54
  >
61
- {isLoading && (
55
+ {!isSuccess && !isError && (
62
56
  <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
63
57
  Fetching Models...
64
58
  </Typography>
65
59
  )}
66
- {isSuccess &&
67
- (data.data.length > 0 ? (
68
- <FileTreeView
69
- items={data.data.sort((a, b) => {
70
- return a.path.localeCompare(b.path);
71
- })}
72
- defaultExpandedItems={DEFAULT_EXPANDED_FOLDERS}
73
- navigate={navigate}
74
- />
75
- ) : (
76
- <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
77
- No models found
78
- </Typography>
79
- ))}
80
60
  {isError && (
81
- <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
82
- {`${projectName} > ${packageName} > ${versionId} - ${error.message}`}
83
- </Typography>
61
+ <ApiErrorDisplay
62
+ error={error}
63
+ context={`${projectName} > ${packageName} > Models`}
64
+ />
65
+ )}
66
+ {isSuccess && (
67
+ <FileTreeView
68
+ items={data.data.sort((a, b) => {
69
+ return a.path.localeCompare(b.path);
70
+ })}
71
+ navigate={navigate}
72
+ defaultExpandedItems={DEFAULT_EXPANDED_FOLDERS}
73
+ />
84
74
  )}
85
75
  </Box>
86
76
  </StyledCardContent>
@@ -3,29 +3,22 @@ import { QueryClient, useQuery } from "@tanstack/react-query";
3
3
  import { Configuration, NotebooksApi } from "../../client";
4
4
  import { StyledCard, StyledCardContent } from "../styles";
5
5
  import { FileTreeView } from "./FileTreeView";
6
+ import { usePackage } from "./PackageProvider";
7
+ import { ApiErrorDisplay } from "../ApiErrorDisplay";
6
8
 
7
9
  const notebooksApi = new NotebooksApi(new Configuration());
8
10
  const queryClient = new QueryClient();
9
11
 
10
12
  const DEFAULT_EXPANDED_FOLDERS = ["notebooks/"];
11
13
 
12
- interface ModelsProps {
13
- server?: string;
14
- projectName: string;
15
- packageName: string;
16
- versionId?: string;
14
+ interface NotebooksProps {
17
15
  navigate: (to: string, event?: React.MouseEvent) => void;
18
- accessToken?: string;
19
16
  }
20
17
 
21
- export default function Notebooks({
22
- server,
23
- projectName,
24
- packageName,
25
- versionId,
26
- navigate,
27
- accessToken,
28
- }: ModelsProps) {
18
+ export default function Notebooks({ navigate }: NotebooksProps) {
19
+ const { server, projectName, packageName, versionId, accessToken } =
20
+ usePackage();
21
+
29
22
  const { data, isLoading, isError, error, isSuccess } = useQuery(
30
23
  {
31
24
  queryKey: ["notebooks", server, projectName, packageName, versionId],
@@ -37,6 +30,7 @@ export default function Notebooks({
37
30
  Authorization: accessToken && `Bearer ${accessToken}`,
38
31
  },
39
32
  }),
33
+ throwOnError: false,
40
34
  retry: false,
41
35
  },
42
36
  queryClient,
@@ -56,29 +50,25 @@ export default function Notebooks({
56
50
  overflowY: "auto",
57
51
  }}
58
52
  >
59
- {isLoading && (
53
+ {!isSuccess && !isError && (
60
54
  <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
61
55
  Fetching Notebooks...
62
56
  </Typography>
63
57
  )}
64
- {isSuccess &&
65
- (data.data.length > 0 ? (
66
- <FileTreeView
67
- items={data.data.sort((a, b) => {
68
- return a.path.localeCompare(b.path);
69
- })}
70
- defaultExpandedItems={DEFAULT_EXPANDED_FOLDERS}
71
- navigate={navigate}
72
- />
73
- ) : (
74
- <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
75
- No notebooks found
76
- </Typography>
77
- ))}
78
58
  {isError && (
79
- <Typography variant="body2" sx={{ p: "10px", m: "auto" }}>
80
- {`${projectName} > ${packageName} > ${versionId} - ${error.message}`}
81
- </Typography>
59
+ <ApiErrorDisplay
60
+ error={error}
61
+ context={`${projectName} > ${packageName} > Notebooks`}
62
+ />
63
+ )}
64
+ {isSuccess && (
65
+ <FileTreeView
66
+ items={data.data.sort((a, b) => {
67
+ return a.path.localeCompare(b.path);
68
+ })}
69
+ defaultExpandedItems={DEFAULT_EXPANDED_FOLDERS}
70
+ navigate={navigate}
71
+ />
82
72
  )}
83
73
  </Box>
84
74
  </StyledCardContent>