openvsx-webui-test 0.17.1 → 0.18.0-dev.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 (337) hide show
  1. package/lib/components/button-with-progress.d.ts +1 -0
  2. package/lib/components/button-with-progress.d.ts.map +1 -1
  3. package/lib/components/button-with-progress.js +1 -1
  4. package/lib/components/button-with-progress.js.map +1 -1
  5. package/lib/components/sanitized-markdown.d.ts.map +1 -1
  6. package/lib/components/sanitized-markdown.js +79 -1
  7. package/lib/components/sanitized-markdown.js.map +1 -1
  8. package/lib/components/scan-admin/common/auto-refresh.d.ts +21 -0
  9. package/lib/components/scan-admin/common/auto-refresh.d.ts.map +1 -0
  10. package/lib/components/scan-admin/common/auto-refresh.js +45 -0
  11. package/lib/components/scan-admin/common/auto-refresh.js.map +1 -0
  12. package/lib/components/scan-admin/common/conditional-tooltip.d.ts +24 -0
  13. package/lib/components/scan-admin/common/conditional-tooltip.d.ts.map +1 -0
  14. package/lib/components/scan-admin/common/conditional-tooltip.js +63 -0
  15. package/lib/components/scan-admin/common/conditional-tooltip.js.map +1 -0
  16. package/lib/components/scan-admin/common/file-table.d.ts +23 -0
  17. package/lib/components/scan-admin/common/file-table.d.ts.map +1 -0
  18. package/lib/components/scan-admin/common/file-table.js +350 -0
  19. package/lib/components/scan-admin/common/file-table.js.map +1 -0
  20. package/lib/components/scan-admin/common/index.d.ts +18 -0
  21. package/lib/components/scan-admin/common/index.d.ts.map +1 -0
  22. package/lib/components/scan-admin/common/index.js +18 -0
  23. package/lib/components/scan-admin/common/index.js.map +1 -0
  24. package/lib/components/scan-admin/common/tab-panel.d.ts +25 -0
  25. package/lib/components/scan-admin/common/tab-panel.d.ts.map +1 -0
  26. package/lib/components/scan-admin/common/tab-panel.js +22 -0
  27. package/lib/components/scan-admin/common/tab-panel.js.map +1 -0
  28. package/lib/components/scan-admin/common/utils.d.ts +15 -0
  29. package/lib/components/scan-admin/common/utils.d.ts.map +1 -0
  30. package/lib/components/scan-admin/common/utils.js +46 -0
  31. package/lib/components/scan-admin/common/utils.js.map +1 -0
  32. package/lib/components/scan-admin/dialogs/file-dialog.d.ts +19 -0
  33. package/lib/components/scan-admin/dialogs/file-dialog.d.ts.map +1 -0
  34. package/lib/components/scan-admin/dialogs/file-dialog.js +85 -0
  35. package/lib/components/scan-admin/dialogs/file-dialog.js.map +1 -0
  36. package/lib/components/scan-admin/dialogs/index.d.ts +15 -0
  37. package/lib/components/scan-admin/dialogs/index.d.ts.map +1 -0
  38. package/lib/components/scan-admin/dialogs/index.js +15 -0
  39. package/lib/components/scan-admin/dialogs/index.js.map +1 -0
  40. package/lib/components/scan-admin/dialogs/quarantine-dialog.d.ts +23 -0
  41. package/lib/components/scan-admin/dialogs/quarantine-dialog.d.ts.map +1 -0
  42. package/lib/components/scan-admin/dialogs/quarantine-dialog.js +192 -0
  43. package/lib/components/scan-admin/dialogs/quarantine-dialog.js.map +1 -0
  44. package/lib/components/scan-admin/index.d.ts +20 -0
  45. package/lib/components/scan-admin/index.d.ts.map +1 -0
  46. package/lib/components/scan-admin/index.js +25 -0
  47. package/lib/components/scan-admin/index.js.map +1 -0
  48. package/lib/components/scan-admin/scan-card/index.d.ts +20 -0
  49. package/lib/components/scan-admin/scan-card/index.d.ts.map +1 -0
  50. package/lib/components/scan-admin/scan-card/index.js +20 -0
  51. package/lib/components/scan-admin/scan-card/index.js.map +1 -0
  52. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts +30 -0
  53. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts.map +1 -0
  54. package/lib/components/scan-admin/scan-card/scan-card-content.js +232 -0
  55. package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -0
  56. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts +26 -0
  57. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts.map +1 -0
  58. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js +121 -0
  59. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js.map +1 -0
  60. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts +27 -0
  61. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts.map +1 -0
  62. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js +66 -0
  63. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js.map +1 -0
  64. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts +26 -0
  65. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts.map +1 -0
  66. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js +151 -0
  67. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js.map +1 -0
  68. package/lib/components/scan-admin/scan-card/scan-card-header.d.ts +26 -0
  69. package/lib/components/scan-admin/scan-card/scan-card-header.d.ts.map +1 -0
  70. package/lib/components/scan-admin/scan-card/scan-card-header.js +101 -0
  71. package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -0
  72. package/lib/components/scan-admin/scan-card/scan-card.d.ts +34 -0
  73. package/lib/components/scan-admin/scan-card/scan-card.d.ts.map +1 -0
  74. package/lib/components/scan-admin/scan-card/scan-card.js +90 -0
  75. package/lib/components/scan-admin/scan-card/scan-card.js.map +1 -0
  76. package/lib/components/scan-admin/scan-card/scan-detail-card.d.ts +38 -0
  77. package/lib/components/scan-admin/scan-card/scan-detail-card.d.ts.map +1 -0
  78. package/lib/components/scan-admin/scan-card/scan-detail-card.js +72 -0
  79. package/lib/components/scan-admin/scan-card/scan-detail-card.js.map +1 -0
  80. package/lib/components/scan-admin/scan-card/utils.d.ts +48 -0
  81. package/lib/components/scan-admin/scan-card/utils.d.ts.map +1 -0
  82. package/lib/components/scan-admin/scan-card/utils.js +166 -0
  83. package/lib/components/scan-admin/scan-card/utils.js.map +1 -0
  84. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.d.ts +19 -0
  85. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.d.ts.map +1 -0
  86. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js +55 -0
  87. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js.map +1 -0
  88. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.d.ts +19 -0
  89. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.d.ts.map +1 -0
  90. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js +43 -0
  91. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js.map +1 -0
  92. package/lib/components/scan-admin/tab-contents/block-list-tab-content.d.ts +19 -0
  93. package/lib/components/scan-admin/tab-contents/block-list-tab-content.d.ts.map +1 -0
  94. package/lib/components/scan-admin/tab-contents/block-list-tab-content.js +55 -0
  95. package/lib/components/scan-admin/tab-contents/block-list-tab-content.js.map +1 -0
  96. package/lib/components/scan-admin/tab-contents/index.d.ts +18 -0
  97. package/lib/components/scan-admin/tab-contents/index.d.ts.map +1 -0
  98. package/lib/components/scan-admin/tab-contents/index.js +18 -0
  99. package/lib/components/scan-admin/tab-contents/index.js.map +1 -0
  100. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.d.ts +19 -0
  101. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.d.ts.map +1 -0
  102. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js +78 -0
  103. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js.map +1 -0
  104. package/lib/components/scan-admin/tab-contents/scans-tab-content.d.ts +19 -0
  105. package/lib/components/scan-admin/tab-contents/scans-tab-content.d.ts.map +1 -0
  106. package/lib/components/scan-admin/tab-contents/scans-tab-content.js +52 -0
  107. package/lib/components/scan-admin/tab-contents/scans-tab-content.js.map +1 -0
  108. package/lib/components/scan-admin/toolbars/counts-toolbar.d.ts +35 -0
  109. package/lib/components/scan-admin/toolbars/counts-toolbar.d.ts.map +1 -0
  110. package/lib/components/scan-admin/toolbars/counts-toolbar.js +132 -0
  111. package/lib/components/scan-admin/toolbars/counts-toolbar.js.map +1 -0
  112. package/lib/components/scan-admin/toolbars/index.d.ts +16 -0
  113. package/lib/components/scan-admin/toolbars/index.d.ts.map +1 -0
  114. package/lib/components/scan-admin/toolbars/index.js +16 -0
  115. package/lib/components/scan-admin/toolbars/index.js.map +1 -0
  116. package/lib/components/scan-admin/toolbars/search-toolbar.d.ts +43 -0
  117. package/lib/components/scan-admin/toolbars/search-toolbar.d.ts.map +1 -0
  118. package/lib/components/scan-admin/toolbars/search-toolbar.js +106 -0
  119. package/lib/components/scan-admin/toolbars/search-toolbar.js.map +1 -0
  120. package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts +25 -0
  121. package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts.map +1 -0
  122. package/lib/components/scan-admin/toolbars/tab-toolbar.js +33 -0
  123. package/lib/components/scan-admin/toolbars/tab-toolbar.js.map +1 -0
  124. package/lib/context/scan-admin/index.d.ts +21 -0
  125. package/lib/context/scan-admin/index.d.ts.map +1 -0
  126. package/lib/context/scan-admin/index.js +27 -0
  127. package/lib/context/scan-admin/index.js.map +1 -0
  128. package/lib/context/scan-admin/scan-actions.d.ts +19 -0
  129. package/lib/context/scan-admin/scan-actions.d.ts.map +1 -0
  130. package/lib/context/scan-admin/scan-actions.js +64 -0
  131. package/lib/context/scan-admin/scan-actions.js.map +1 -0
  132. package/lib/context/scan-admin/scan-api-actions.d.ts +26 -0
  133. package/lib/context/scan-admin/scan-api-actions.d.ts.map +1 -0
  134. package/lib/context/scan-admin/scan-api-actions.js +118 -0
  135. package/lib/context/scan-admin/scan-api-actions.js.map +1 -0
  136. package/lib/context/scan-admin/scan-api-effects.d.ts +40 -0
  137. package/lib/context/scan-admin/scan-api-effects.d.ts.map +1 -0
  138. package/lib/context/scan-admin/scan-api-effects.js +446 -0
  139. package/lib/context/scan-admin/scan-api-effects.js.map +1 -0
  140. package/lib/context/scan-admin/scan-context-types.d.ts +69 -0
  141. package/lib/context/scan-admin/scan-context-types.d.ts.map +1 -0
  142. package/lib/context/scan-admin/scan-context-types.js +14 -0
  143. package/lib/context/scan-admin/scan-context-types.js.map +1 -0
  144. package/lib/context/scan-admin/scan-context.d.ts +17 -0
  145. package/lib/context/scan-admin/scan-context.d.ts.map +1 -0
  146. package/lib/context/scan-admin/scan-context.js +90 -0
  147. package/lib/context/scan-admin/scan-context.js.map +1 -0
  148. package/lib/context/scan-admin/scan-helpers.d.ts +28 -0
  149. package/lib/context/scan-admin/scan-helpers.d.ts.map +1 -0
  150. package/lib/context/scan-admin/scan-helpers.js +56 -0
  151. package/lib/context/scan-admin/scan-helpers.js.map +1 -0
  152. package/lib/context/scan-admin/scan-reducer.d.ts +18 -0
  153. package/lib/context/scan-admin/scan-reducer.d.ts.map +1 -0
  154. package/lib/context/scan-admin/scan-reducer.js +194 -0
  155. package/lib/context/scan-admin/scan-reducer.js.map +1 -0
  156. package/lib/context/scan-admin/scan-types.d.ts +292 -0
  157. package/lib/context/scan-admin/scan-types.d.ts.map +1 -0
  158. package/lib/context/scan-admin/scan-types.js +67 -0
  159. package/lib/context/scan-admin/scan-types.js.map +1 -0
  160. package/lib/default/page-settings.d.ts.map +1 -1
  161. package/lib/default/page-settings.js +3 -0
  162. package/lib/default/page-settings.js.map +1 -1
  163. package/lib/default/theme.d.ts +50 -12
  164. package/lib/default/theme.d.ts.map +1 -1
  165. package/lib/default/theme.js +42 -0
  166. package/lib/default/theme.js.map +1 -1
  167. package/lib/extension-registry-service.d.ts +85 -1
  168. package/lib/extension-registry-service.d.ts.map +1 -1
  169. package/lib/extension-registry-service.js +197 -0
  170. package/lib/extension-registry-service.js.map +1 -1
  171. package/lib/extension-registry-types.d.ts +140 -0
  172. package/lib/extension-registry-types.d.ts.map +1 -1
  173. package/lib/extension-registry-types.js.map +1 -1
  174. package/lib/hooks/scan-admin/index.d.ts +34 -0
  175. package/lib/hooks/scan-admin/index.d.ts.map +1 -0
  176. package/lib/hooks/scan-admin/index.js +28 -0
  177. package/lib/hooks/scan-admin/index.js.map +1 -0
  178. package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts +76 -0
  179. package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts.map +1 -0
  180. package/lib/hooks/scan-admin/use-auto-rejected-tab.js +79 -0
  181. package/lib/hooks/scan-admin/use-auto-rejected-tab.js.map +1 -0
  182. package/lib/hooks/scan-admin/use-dialogs.d.ts +43 -0
  183. package/lib/hooks/scan-admin/use-dialogs.d.ts.map +1 -0
  184. package/lib/hooks/scan-admin/use-dialogs.js +55 -0
  185. package/lib/hooks/scan-admin/use-dialogs.js.map +1 -0
  186. package/lib/hooks/scan-admin/use-file-list-tab.d.ts +208 -0
  187. package/lib/hooks/scan-admin/use-file-list-tab.d.ts.map +1 -0
  188. package/lib/hooks/scan-admin/use-file-list-tab.js +125 -0
  189. package/lib/hooks/scan-admin/use-file-list-tab.js.map +1 -0
  190. package/lib/hooks/scan-admin/use-pagination.d.ts +36 -0
  191. package/lib/hooks/scan-admin/use-pagination.d.ts.map +1 -0
  192. package/lib/hooks/scan-admin/use-pagination.js +79 -0
  193. package/lib/hooks/scan-admin/use-pagination.js.map +1 -0
  194. package/lib/hooks/scan-admin/use-quarantined-tab.d.ts +92 -0
  195. package/lib/hooks/scan-admin/use-quarantined-tab.d.ts.map +1 -0
  196. package/lib/hooks/scan-admin/use-quarantined-tab.js +125 -0
  197. package/lib/hooks/scan-admin/use-quarantined-tab.js.map +1 -0
  198. package/lib/hooks/scan-admin/use-scan-card-state.d.ts +29 -0
  199. package/lib/hooks/scan-admin/use-scan-card-state.d.ts.map +1 -0
  200. package/lib/hooks/scan-admin/use-scan-card-state.js +50 -0
  201. package/lib/hooks/scan-admin/use-scan-card-state.js.map +1 -0
  202. package/lib/hooks/scan-admin/use-scan-filters.d.ts +53 -0
  203. package/lib/hooks/scan-admin/use-scan-filters.d.ts.map +1 -0
  204. package/lib/hooks/scan-admin/use-scan-filters.js +75 -0
  205. package/lib/hooks/scan-admin/use-scan-filters.js.map +1 -0
  206. package/lib/hooks/scan-admin/use-scans-tab.d.ts +85 -0
  207. package/lib/hooks/scan-admin/use-scans-tab.d.ts.map +1 -0
  208. package/lib/hooks/scan-admin/use-scans-tab.js +87 -0
  209. package/lib/hooks/scan-admin/use-scans-tab.js.map +1 -0
  210. package/lib/hooks/scan-admin/use-search.d.ts +32 -0
  211. package/lib/hooks/scan-admin/use-search.d.ts.map +1 -0
  212. package/lib/hooks/scan-admin/use-search.js +48 -0
  213. package/lib/hooks/scan-admin/use-search.js.map +1 -0
  214. package/lib/hooks/scan-admin/use-tab-navigation.d.ts +96 -0
  215. package/lib/hooks/scan-admin/use-tab-navigation.d.ts.map +1 -0
  216. package/lib/hooks/scan-admin/use-tab-navigation.js +70 -0
  217. package/lib/hooks/scan-admin/use-tab-navigation.js.map +1 -0
  218. package/lib/hooks/scan-admin/use-url-sync.d.ts +22 -0
  219. package/lib/hooks/scan-admin/use-url-sync.d.ts.map +1 -0
  220. package/lib/hooks/scan-admin/use-url-sync.js +252 -0
  221. package/lib/hooks/scan-admin/use-url-sync.js.map +1 -0
  222. package/lib/page-settings.d.ts +4 -0
  223. package/lib/page-settings.d.ts.map +1 -1
  224. package/lib/pages/admin-dashboard/admin-dashboard.d.ts +1 -0
  225. package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
  226. package/lib/pages/admin-dashboard/admin-dashboard.js +23 -3
  227. package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
  228. package/lib/pages/admin-dashboard/publisher-admin.js +1 -1
  229. package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -1
  230. package/lib/pages/admin-dashboard/publisher-revoke-dialog.d.ts.map +1 -1
  231. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js +1 -1
  232. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js.map +1 -1
  233. package/lib/pages/admin-dashboard/scan-admin.d.ts +20 -0
  234. package/lib/pages/admin-dashboard/scan-admin.d.ts.map +1 -0
  235. package/lib/pages/admin-dashboard/scan-admin.js +66 -0
  236. package/lib/pages/admin-dashboard/scan-admin.js.map +1 -0
  237. package/lib/pages/admin-dashboard/welcome.d.ts.map +1 -1
  238. package/lib/pages/admin-dashboard/welcome.js +2 -1
  239. package/lib/pages/admin-dashboard/welcome.js.map +1 -1
  240. package/lib/pages/extension-detail/extension-detail-overview.d.ts.map +1 -1
  241. package/lib/pages/extension-detail/extension-detail-overview.js +9 -1
  242. package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
  243. package/lib/pages/extension-detail/extension-detail-reviews.d.ts.map +1 -1
  244. package/lib/pages/extension-detail/extension-detail-reviews.js +67 -18
  245. package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -1
  246. package/lib/pages/extension-detail/extension-detail.js +2 -2
  247. package/lib/pages/extension-detail/extension-detail.js.map +1 -1
  248. package/lib/pages/extension-detail/extension-rating-stars.d.ts +2 -2
  249. package/lib/pages/extension-detail/extension-rating-stars.d.ts.map +1 -1
  250. package/lib/pages/extension-detail/extension-rating-stars.js +1 -1
  251. package/lib/pages/extension-detail/extension-rating-stars.js.map +1 -1
  252. package/lib/pages/extension-list/extension-list-item.js +2 -2
  253. package/lib/pages/extension-list/extension-list-item.js.map +1 -1
  254. package/lib/pages/user/user-namespace-extension-list-item.d.ts.map +1 -1
  255. package/lib/pages/user/user-namespace-extension-list-item.js +23 -9
  256. package/lib/pages/user/user-namespace-extension-list-item.js.map +1 -1
  257. package/lib/pages/user/user-publisher-agreement.d.ts.map +1 -1
  258. package/lib/pages/user/user-publisher-agreement.js +34 -13
  259. package/lib/pages/user/user-publisher-agreement.js.map +1 -1
  260. package/lib/pages/user/user-settings-profile.d.ts.map +1 -1
  261. package/lib/pages/user/user-settings-profile.js +10 -5
  262. package/lib/pages/user/user-settings-profile.js.map +1 -1
  263. package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
  264. package/lib/pages/user/user-settings-tokens.js +13 -5
  265. package/lib/pages/user/user-settings-tokens.js.map +1 -1
  266. package/package.json +10 -9
  267. package/src/components/button-with-progress.tsx +2 -1
  268. package/src/components/sanitized-markdown.tsx +81 -1
  269. package/src/components/scan-admin/common/auto-refresh.tsx +79 -0
  270. package/src/components/scan-admin/common/conditional-tooltip.tsx +74 -0
  271. package/src/components/scan-admin/common/file-table.tsx +508 -0
  272. package/src/components/scan-admin/common/index.ts +18 -0
  273. package/src/components/scan-admin/common/tab-panel.tsx +42 -0
  274. package/src/components/scan-admin/common/utils.ts +48 -0
  275. package/src/components/scan-admin/dialogs/file-dialog.tsx +137 -0
  276. package/src/components/scan-admin/dialogs/index.ts +15 -0
  277. package/src/components/scan-admin/dialogs/quarantine-dialog.tsx +270 -0
  278. package/src/components/scan-admin/index.ts +52 -0
  279. package/src/components/scan-admin/scan-card/index.ts +20 -0
  280. package/src/components/scan-admin/scan-card/scan-card-content.tsx +457 -0
  281. package/src/components/scan-admin/scan-card/scan-card-expand-strip-badges.tsx +186 -0
  282. package/src/components/scan-admin/scan-card/scan-card-expand-strip.tsx +104 -0
  283. package/src/components/scan-admin/scan-card/scan-card-expanded-content.tsx +262 -0
  284. package/src/components/scan-admin/scan-card/scan-card-header.tsx +176 -0
  285. package/src/components/scan-admin/scan-card/scan-card.tsx +152 -0
  286. package/src/components/scan-admin/scan-card/scan-detail-card.tsx +144 -0
  287. package/src/components/scan-admin/scan-card/utils.ts +199 -0
  288. package/src/components/scan-admin/tab-contents/allow-list-tab-content.tsx +119 -0
  289. package/src/components/scan-admin/tab-contents/auto-rejected-tab-content.tsx +106 -0
  290. package/src/components/scan-admin/tab-contents/block-list-tab-content.tsx +119 -0
  291. package/src/components/scan-admin/tab-contents/index.ts +18 -0
  292. package/src/components/scan-admin/tab-contents/quarantined-tab-content.tsx +158 -0
  293. package/src/components/scan-admin/tab-contents/scans-tab-content.tsx +113 -0
  294. package/src/components/scan-admin/toolbars/counts-toolbar.tsx +262 -0
  295. package/src/components/scan-admin/toolbars/index.ts +16 -0
  296. package/src/components/scan-admin/toolbars/search-toolbar.tsx +255 -0
  297. package/src/components/scan-admin/toolbars/tab-toolbar.tsx +56 -0
  298. package/src/context/scan-admin/index.ts +43 -0
  299. package/src/context/scan-admin/scan-actions.ts +87 -0
  300. package/src/context/scan-admin/scan-api-actions.ts +137 -0
  301. package/src/context/scan-admin/scan-api-effects.ts +491 -0
  302. package/src/context/scan-admin/scan-context-types.ts +102 -0
  303. package/src/context/scan-admin/scan-context.tsx +123 -0
  304. package/src/context/scan-admin/scan-helpers.ts +63 -0
  305. package/src/context/scan-admin/scan-reducer.ts +321 -0
  306. package/src/context/scan-admin/scan-types.ts +337 -0
  307. package/src/default/page-settings.tsx +3 -0
  308. package/src/default/theme.tsx +102 -13
  309. package/src/extension-registry-service.ts +216 -1
  310. package/src/extension-registry-types.ts +157 -0
  311. package/src/hooks/scan-admin/index.ts +48 -0
  312. package/src/hooks/scan-admin/use-auto-rejected-tab.ts +85 -0
  313. package/src/hooks/scan-admin/use-dialogs.ts +83 -0
  314. package/src/hooks/scan-admin/use-file-list-tab.ts +149 -0
  315. package/src/hooks/scan-admin/use-pagination.ts +90 -0
  316. package/src/hooks/scan-admin/use-quarantined-tab.ts +138 -0
  317. package/src/hooks/scan-admin/use-scan-card-state.ts +73 -0
  318. package/src/hooks/scan-admin/use-scan-filters.ts +83 -0
  319. package/src/hooks/scan-admin/use-scans-tab.ts +92 -0
  320. package/src/hooks/scan-admin/use-search.ts +54 -0
  321. package/src/hooks/scan-admin/use-tab-navigation.ts +82 -0
  322. package/src/hooks/scan-admin/use-url-sync.ts +293 -0
  323. package/src/page-settings.ts +4 -0
  324. package/src/pages/admin-dashboard/admin-dashboard.tsx +26 -2
  325. package/src/pages/admin-dashboard/publisher-admin.tsx +1 -1
  326. package/src/pages/admin-dashboard/publisher-revoke-dialog.tsx +2 -1
  327. package/src/pages/admin-dashboard/scan-admin.tsx +109 -0
  328. package/src/pages/admin-dashboard/welcome.tsx +1 -0
  329. package/src/pages/extension-detail/extension-detail-overview.tsx +16 -2
  330. package/src/pages/extension-detail/extension-detail-reviews.tsx +116 -30
  331. package/src/pages/extension-detail/extension-detail.tsx +2 -2
  332. package/src/pages/extension-detail/extension-rating-stars.tsx +2 -2
  333. package/src/pages/extension-list/extension-list-item.tsx +2 -2
  334. package/src/pages/user/user-namespace-extension-list-item.tsx +38 -13
  335. package/src/pages/user/user-publisher-agreement.tsx +30 -11
  336. package/src/pages/user/user-settings-profile.tsx +10 -6
  337. package/src/pages/user/user-settings-tokens.tsx +15 -6
@@ -0,0 +1,90 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React, { createContext, useContext, useReducer, useMemo, useRef } from 'react';
14
+ import { initialScanState } from './scan-types';
15
+ import { scanReducer } from './scan-reducer';
16
+ import { useFilterOptionsEffect, useScansEffect, useScanCountsEffect, useFilesEffect, useFileCountsEffect, useAutoRefreshEffect, } from './scan-api-effects';
17
+ import { useConfirmAction, useFileAction } from './scan-api-actions';
18
+ import { useScanActions } from './scan-actions';
19
+ // ============================================================================
20
+ // Context Creation
21
+ // ============================================================================
22
+ const ScanContext = createContext(null);
23
+ // ============================================================================
24
+ // Provider Component
25
+ // ============================================================================
26
+ export const ScanProvider = ({ children, service, handleError }) => {
27
+ const [state, dispatch] = useReducer(scanReducer, initialScanState);
28
+ // Use a ref for handleError to avoid re-running effects when parent re-renders
29
+ // This prevents infinite loops when errors trigger parent state changes
30
+ const handleErrorRef = useRef(handleError);
31
+ handleErrorRef.current = handleError;
32
+ // ========================================================================
33
+ // API Effects
34
+ // ========================================================================
35
+ useFilterOptionsEffect(service, state, dispatch, handleErrorRef);
36
+ useScansEffect(service, state, dispatch, handleErrorRef);
37
+ useScanCountsEffect(service, state, dispatch, handleErrorRef);
38
+ useFilesEffect(service, state, dispatch, handleErrorRef);
39
+ useFileCountsEffect(service, state, dispatch, handleErrorRef);
40
+ useAutoRefreshEffect(state, dispatch);
41
+ // ========================================================================
42
+ // Async API Actions
43
+ // ========================================================================
44
+ const executeConfirmAction = useConfirmAction(service, state, dispatch, handleErrorRef);
45
+ const executeFileAction = useFileAction(service, state, dispatch, handleErrorRef);
46
+ // ========================================================================
47
+ // Actions
48
+ // ========================================================================
49
+ const actions = useScanActions(dispatch, executeConfirmAction, executeFileAction);
50
+ // ========================================================================
51
+ // Derived Data (memoized)
52
+ // ========================================================================
53
+ const selectedExtensions = useMemo(() => {
54
+ return state.scans.filter(scan => state.quarantinedChecked[scan.id]);
55
+ }, [state.scans, state.quarantinedChecked]);
56
+ const selectedFiles = useMemo(() => {
57
+ return state.files.filter(file => state.filesChecked.has(file.id));
58
+ }, [state.files, state.filesChecked]);
59
+ const totalPages = useMemo(() => {
60
+ // For tabs 0-2 (scans), use totalScans; for tabs 3-4 (files), use totalFiles
61
+ const total = state.selectedTab >= 3 ? state.totalFiles : state.totalScans;
62
+ return Math.ceil(total / state.pageSize);
63
+ }, [state.selectedTab, state.totalScans, state.totalFiles, state.pageSize]);
64
+ const derived = useMemo(() => ({
65
+ selectedExtensions,
66
+ selectedFiles,
67
+ totalPages,
68
+ }), [selectedExtensions, selectedFiles, totalPages]);
69
+ // ========================================================================
70
+ // Context Value
71
+ // ========================================================================
72
+ const contextValue = useMemo(() => ({
73
+ state,
74
+ dispatch,
75
+ actions,
76
+ derived,
77
+ }), [state, actions, derived]);
78
+ return (React.createElement(ScanContext.Provider, { value: contextValue }, children));
79
+ };
80
+ // ============================================================================
81
+ // Custom Hook
82
+ // ============================================================================
83
+ export const useScanContext = () => {
84
+ const context = useContext(ScanContext);
85
+ if (!context) {
86
+ throw new Error('useScanContext must be used within a ScanProvider');
87
+ }
88
+ return context;
89
+ };
90
+ //# sourceMappingURL=scan-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-context.js","sourceRoot":"","sources":["../../../src/context/scan-admin/scan-context.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import { DateRangeType } from './scan-types';
14
+ /**
15
+ * Converts a date range string to API date parameters for scans
16
+ */
17
+ export declare const getDateRangeParams: (dateRange: DateRangeType) => {
18
+ dateStartedFrom: string | undefined;
19
+ dateStartedTo: string | undefined;
20
+ };
21
+ /**
22
+ * Converts a date range string to API date parameters for file decisions
23
+ */
24
+ export declare const getFileDateRange: (dateRange: DateRangeType) => {
25
+ dateDecidedFrom: string | undefined;
26
+ dateDecidedTo: string | undefined;
27
+ };
28
+ //# sourceMappingURL=scan-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-helpers.d.ts","sourceRoot":"","sources":["../../../src/context/scan-admin/scan-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAmC7C;;GAEG;AACH,eAAO,MAAM,kBAAkB,cAAe,aAAa;;;CAG1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,cAAe,aAAa;;;CAGxD,CAAC"}
@@ -0,0 +1,56 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ /**
14
+ * Calculates date range boundaries based on the date range type
15
+ * @returns { from, to } ISO date strings, or { from: undefined, to: undefined } for 'all'
16
+ */
17
+ const calculateDateRange = (dateRange) => {
18
+ if (dateRange === 'all') {
19
+ return { from: undefined, to: undefined };
20
+ }
21
+ const now = new Date();
22
+ const to = now.toISOString();
23
+ let from;
24
+ switch (dateRange) {
25
+ case 'today':
26
+ from = new Date(now.getFullYear(), now.getMonth(), now.getDate()).toISOString();
27
+ break;
28
+ case 'last7days':
29
+ from = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString();
30
+ break;
31
+ case 'last30days':
32
+ from = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000).toISOString();
33
+ break;
34
+ case 'last90days':
35
+ from = new Date(now.getTime() - 90 * 24 * 60 * 60 * 1000).toISOString();
36
+ break;
37
+ default:
38
+ from = new Date(0).toISOString();
39
+ }
40
+ return { from, to };
41
+ };
42
+ /**
43
+ * Converts a date range string to API date parameters for scans
44
+ */
45
+ export const getDateRangeParams = (dateRange) => {
46
+ const { from, to } = calculateDateRange(dateRange);
47
+ return { dateStartedFrom: from, dateStartedTo: to };
48
+ };
49
+ /**
50
+ * Converts a date range string to API date parameters for file decisions
51
+ */
52
+ export const getFileDateRange = (dateRange) => {
53
+ const { from, to } = calculateDateRange(dateRange);
54
+ return { dateDecidedFrom: from, dateDecidedTo: to };
55
+ };
56
+ //# sourceMappingURL=scan-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-helpers.js","sourceRoot":"","sources":["../../../src/context/scan-admin/scan-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAIlF;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,SAAwB,EAAwD,EAAE;IAC1G,IAAI,SAAS,KAAK,KAAK,EAAE;QACrB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;KAC7C;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC7B,IAAI,IAAY,CAAC;IAEjB,QAAQ,SAAS,EAAE;QACf,KAAK,OAAO;YACR,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAChF,MAAM;QACV,KAAK,WAAW;YACZ,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvE,MAAM;QACV,KAAK,YAAY;YACb,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM;QACV,KAAK,YAAY;YACb,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM;QACV;YACI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KACxC;IAED,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAwB,EAAE,EAAE;IAC3D,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACnD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAwB,EAAE,EAAE;IACzD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACnD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AACxD,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import { ScanState, ScanAction } from './scan-types';
14
+ /**
15
+ * Reducer for scan state management
16
+ */
17
+ export declare const scanReducer: (state: ScanState, action: ScanAction) => ScanState;
18
+ //# sourceMappingURL=scan-reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-reducer.d.ts","sourceRoot":"","sources":["../../../src/context/scan-admin/scan-reducer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAElF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAerD;;GAEG;AACH,eAAO,MAAM,WAAW,UAAW,SAAS,UAAU,UAAU,KAAG,SAiSlE,CAAC"}
@@ -0,0 +1,194 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ /**
14
+ * Helper function to toggle a value in a Set
15
+ */
16
+ const toggleSetValue = (set, value) => {
17
+ const newSet = new Set(set);
18
+ if (newSet.has(value)) {
19
+ newSet.delete(value);
20
+ }
21
+ else {
22
+ newSet.add(value);
23
+ }
24
+ return newSet;
25
+ };
26
+ /**
27
+ * Reducer for scan state management
28
+ */
29
+ export const scanReducer = (state, action) => {
30
+ switch (action.type) {
31
+ // ============================================================
32
+ // Tab actions
33
+ // ============================================================
34
+ case 'SET_TAB': {
35
+ const tab = action.payload;
36
+ // Tab-specific default enforcement:
37
+ // - Tabs 1 (Quarantined) and 2 (Auto Rejected): default to 'enforced'
38
+ // - Other tabs: default to 'all'
39
+ const defaultEnforcement = (tab === 1 || tab === 2) ? 'enforced' : 'all';
40
+ return Object.assign(Object.assign({}, state), { selectedTab: tab,
41
+ // Clear search when switching tabs
42
+ publisherQuery: '', namespaceQuery: '', nameQuery: '',
43
+ // Reset page
44
+ currentPage: 0,
45
+ // Reset to tab-specific default filters
46
+ dateRange: 'all', enforcement: defaultEnforcement, quarantineFilters: new Set(), statusFilters: new Set(),
47
+ // Clear scans and show loading state to prevent stale data flash
48
+ scans: [], isLoadingScans: true,
49
+ // Clear files and show loading state to prevent stale data flash
50
+ files: [], isLoadingFiles: tab >= 3,
51
+ // Clear counts to prevent stale counts from showing
52
+ scanCounts: null, fileCounts: null,
53
+ // Clear selection state to prevent stale counts
54
+ quarantinedChecked: {}, filesChecked: new Set() });
55
+ }
56
+ // ============================================================
57
+ // Search actions
58
+ // ============================================================
59
+ case 'SET_PUBLISHER_QUERY':
60
+ return Object.assign(Object.assign({}, state), { publisherQuery: action.payload, currentPage: 0, quarantinedChecked: {}, filesChecked: new Set() });
61
+ case 'SET_NAMESPACE_QUERY':
62
+ return Object.assign(Object.assign({}, state), { namespaceQuery: action.payload, currentPage: 0, quarantinedChecked: {}, filesChecked: new Set() });
63
+ case 'SET_NAME_QUERY':
64
+ return Object.assign(Object.assign({}, state), { nameQuery: action.payload, currentPage: 0, quarantinedChecked: {}, filesChecked: new Set() });
65
+ case 'CLEAR_SEARCH':
66
+ return Object.assign(Object.assign({}, state), { publisherQuery: '', namespaceQuery: '', nameQuery: '', filesChecked: new Set() });
67
+ // ============================================================
68
+ // Pagination actions
69
+ // ============================================================
70
+ case 'SET_PAGE':
71
+ return Object.assign(Object.assign({}, state), { currentPage: action.payload, quarantinedChecked: {}, filesChecked: new Set() });
72
+ case 'RESET_PAGE':
73
+ return Object.assign(Object.assign({}, state), { currentPage: 0 });
74
+ // ============================================================
75
+ // Global filter actions
76
+ // ============================================================
77
+ case 'SET_DATE_RANGE':
78
+ return Object.assign(Object.assign({}, state), { dateRange: action.payload, currentPage: 0, quarantinedChecked: {}, filesChecked: new Set() });
79
+ case 'SET_ENFORCEMENT':
80
+ return Object.assign(Object.assign({}, state), { enforcement: action.payload, currentPage: 0, quarantinedChecked: {} });
81
+ case 'SET_FILE_DATE_RANGE':
82
+ return Object.assign(Object.assign({}, state), { fileDateRange: action.payload, currentPage: 0, filesChecked: new Set() });
83
+ // ============================================================
84
+ // Tab-specific filter actions
85
+ // ============================================================
86
+ case 'TOGGLE_STATUS_FILTER':
87
+ return Object.assign(Object.assign({}, state), { statusFilters: toggleSetValue(state.statusFilters, action.payload), currentPage: 0 });
88
+ case 'SET_STATUS_FILTERS':
89
+ return Object.assign(Object.assign({}, state), { statusFilters: action.payload, currentPage: 0 });
90
+ case 'TOGGLE_QUARANTINE_FILTER':
91
+ return Object.assign(Object.assign({}, state), { quarantineFilters: toggleSetValue(state.quarantineFilters, action.payload), currentPage: 0, quarantinedChecked: {} });
92
+ case 'SET_QUARANTINE_FILTERS':
93
+ return Object.assign(Object.assign({}, state), { quarantineFilters: action.payload, currentPage: 0, quarantinedChecked: {} });
94
+ case 'TOGGLE_THREAT_SCANNER_FILTER':
95
+ return Object.assign(Object.assign({}, state), { threatScannerFilters: toggleSetValue(state.threatScannerFilters, action.payload), currentPage: 0, quarantinedChecked: {} });
96
+ case 'SET_THREAT_SCANNER_FILTERS':
97
+ return Object.assign(Object.assign({}, state), { threatScannerFilters: action.payload, currentPage: 0, quarantinedChecked: {} });
98
+ case 'TOGGLE_VALIDATION_TYPE_FILTER':
99
+ return Object.assign(Object.assign({}, state), { validationTypeFilters: toggleSetValue(state.validationTypeFilters, action.payload), currentPage: 0 });
100
+ case 'SET_VALIDATION_TYPE_FILTERS':
101
+ return Object.assign(Object.assign({}, state), { validationTypeFilters: action.payload, currentPage: 0 });
102
+ // ============================================================
103
+ // Filter options actions (from API)
104
+ // ============================================================
105
+ case 'SET_FILTER_OPTIONS_LOADED':
106
+ return Object.assign(Object.assign({}, state), { filterOptionsLoaded: action.payload });
107
+ case 'SET_AVAILABLE_VALIDATION_TYPES':
108
+ return Object.assign(Object.assign({}, state), { availableValidationTypes: action.payload });
109
+ case 'SET_AVAILABLE_THREAT_SCANNERS':
110
+ return Object.assign(Object.assign({}, state), { availableThreatScanners: action.payload });
111
+ // ============================================================
112
+ // Menu anchor actions
113
+ // ============================================================
114
+ case 'SET_FILTER_MENU_ANCHOR':
115
+ return Object.assign(Object.assign({}, state), { filterMenuAnchor: action.payload });
116
+ case 'SET_QUARANTINE_FILTER_MENU_ANCHOR':
117
+ return Object.assign(Object.assign({}, state), { quarantineFilterMenuAnchor: action.payload });
118
+ case 'SET_AUTO_REJECTED_FILTER_MENU_ANCHOR':
119
+ return Object.assign(Object.assign({}, state), { autoRejectedFilterMenuAnchor: action.payload });
120
+ // ============================================================
121
+ // Selection actions
122
+ // ============================================================
123
+ case 'SET_QUARANTINED_CHECKED':
124
+ return Object.assign(Object.assign({}, state), { quarantinedChecked: action.payload });
125
+ case 'TOGGLE_QUARANTINED_CHECKED':
126
+ return Object.assign(Object.assign({}, state), { quarantinedChecked: Object.assign(Object.assign({}, state.quarantinedChecked), { [action.payload.id]: action.payload.checked }) });
127
+ case 'SELECT_ALL_QUARANTINED': {
128
+ const newChecked = {};
129
+ action.payload.forEach(scan => {
130
+ newChecked[scan.id] = true;
131
+ });
132
+ return Object.assign(Object.assign({}, state), { quarantinedChecked: newChecked });
133
+ }
134
+ case 'DESELECT_ALL_QUARANTINED':
135
+ return Object.assign(Object.assign({}, state), { quarantinedChecked: {} });
136
+ case 'SET_SCAN_DECISIONS':
137
+ return Object.assign(Object.assign({}, state), { scanDecisions: action.payload });
138
+ case 'SET_FILES_CHECKED':
139
+ return Object.assign(Object.assign({}, state), { filesChecked: action.payload });
140
+ // ============================================================
141
+ // Dialog actions
142
+ // ============================================================
143
+ case 'OPEN_CONFIRM_DIALOG':
144
+ return Object.assign(Object.assign({}, state), { confirmDialogOpen: true, confirmAction: action.payload });
145
+ case 'CLOSE_CONFIRM_DIALOG':
146
+ return Object.assign(Object.assign({}, state), { confirmDialogOpen: false, confirmAction: null });
147
+ case 'OPEN_FILE_DIALOG':
148
+ return Object.assign(Object.assign({}, state), { fileDialogOpen: true, fileActionType: action.payload });
149
+ case 'CLOSE_FILE_DIALOG':
150
+ return Object.assign(Object.assign({}, state), { fileDialogOpen: false, fileActionType: null });
151
+ // ============================================================
152
+ // Data actions (from API)
153
+ // ============================================================
154
+ case 'SET_SCANS':
155
+ return Object.assign(Object.assign({}, state), { scans: action.payload.scans, totalScans: action.payload.totalScans });
156
+ case 'SET_LOADING_SCANS':
157
+ return Object.assign(Object.assign({}, state), { isLoadingScans: action.payload });
158
+ case 'SET_SCAN_COUNTS':
159
+ return Object.assign(Object.assign({}, state), { scanCounts: action.payload });
160
+ case 'TRIGGER_REFRESH':
161
+ return Object.assign(Object.assign({}, state), { refreshTrigger: state.refreshTrigger + 1 });
162
+ case 'SET_LAST_REFRESHED':
163
+ return Object.assign(Object.assign({}, state), { lastRefreshed: action.payload });
164
+ case 'SET_AUTO_REFRESH':
165
+ return Object.assign(Object.assign({}, state), { autoRefresh: action.payload });
166
+ // ============================================================
167
+ // File data actions (from /files API)
168
+ // ============================================================
169
+ case 'SET_FILES':
170
+ return Object.assign(Object.assign({}, state), { files: action.payload.files, totalFiles: action.payload.totalFiles });
171
+ case 'SET_LOADING_FILES':
172
+ return Object.assign(Object.assign({}, state), { isLoadingFiles: action.payload });
173
+ case 'SET_FILE_COUNTS':
174
+ return Object.assign(Object.assign({}, state), { fileCounts: action.payload });
175
+ // ============================================================
176
+ // Confirm action execution
177
+ // ============================================================
178
+ case 'EXECUTE_CONFIRM_ACTION': {
179
+ if (state.confirmAction === 'allow' || state.confirmAction === 'block') {
180
+ const newDecisions = Object.assign({}, state.scanDecisions);
181
+ for (const id in state.quarantinedChecked) {
182
+ if (state.quarantinedChecked[id]) {
183
+ newDecisions[id] = state.confirmAction === 'allow' ? 'allowed' : 'blocked';
184
+ }
185
+ }
186
+ return Object.assign(Object.assign({}, state), { scanDecisions: newDecisions, quarantinedChecked: {}, confirmDialogOpen: false, confirmAction: null });
187
+ }
188
+ return Object.assign(Object.assign({}, state), { confirmDialogOpen: false, confirmAction: null });
189
+ }
190
+ default:
191
+ return state;
192
+ }
193
+ };
194
+ //# sourceMappingURL=scan-reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-reducer.js","sourceRoot":"","sources":["../../../src/context/scan-admin/scan-reducer.ts"],"names":[],"mappings":"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"}