@quillsql/admin 1.6.1 → 1.6.2

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 (678) hide show
  1. package/dist/cjs/Admin.d.ts +41 -87
  2. package/dist/cjs/Admin.d.ts.map +1 -1
  3. package/dist/cjs/Admin.js +358 -456
  4. package/dist/cjs/AdminProvider.d.ts +108 -50
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +390 -208
  7. package/dist/cjs/api/ConnectionClient.d.ts +20 -38
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +291 -321
  10. package/dist/cjs/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  11. package/dist/cjs/components/Banner/index.d.ts +0 -1
  12. package/dist/cjs/components/Banner/index.d.ts.map +1 -1
  13. package/dist/cjs/components/Banner/index.js +1 -1
  14. package/dist/cjs/components/CardSection.js +1 -1
  15. package/dist/cjs/components/CardTitle.js +1 -1
  16. package/dist/cjs/components/ClipboardButton.d.ts +8 -0
  17. package/dist/cjs/components/ClipboardButton.d.ts.map +1 -0
  18. package/dist/cjs/components/ClipboardButton.js +74 -0
  19. package/dist/cjs/components/DashboardSelectPopover.d.ts +8 -5
  20. package/dist/cjs/components/DashboardSelectPopover.d.ts.map +1 -1
  21. package/dist/cjs/components/DashboardSelectPopover.js +74 -185
  22. package/dist/cjs/components/DatabaseMismatchCard.d.ts +3 -3
  23. package/dist/cjs/components/DatabaseMismatchCard.d.ts.map +1 -1
  24. package/dist/cjs/components/DatabaseMismatchCard.js +3 -3
  25. package/dist/cjs/components/DatabaseSelector.d.ts.map +1 -1
  26. package/dist/cjs/components/DatabaseSelector.js +10 -2
  27. package/dist/cjs/components/DateRangePicker/SingleDatePicker.d.ts +10 -0
  28. package/dist/cjs/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -0
  29. package/dist/cjs/components/DateRangePicker/SingleDatePicker.js +263 -0
  30. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.d.ts +18 -0
  31. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -0
  32. package/dist/cjs/components/DateRangePicker/YearlessDateRangePicker.js +288 -0
  33. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts +91 -0
  34. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  35. package/dist/cjs/components/DateRangePicker/dateRangePickerUtils.js +898 -0
  36. package/dist/cjs/components/DeleteButton.d.ts +0 -1
  37. package/dist/cjs/components/DeleteButton.d.ts.map +1 -1
  38. package/dist/cjs/components/DeleteButton.js +1 -1
  39. package/dist/cjs/components/DropDownMenu.js +1 -1
  40. package/dist/cjs/components/DropDownMenuWithLabel.d.ts +4 -3
  41. package/dist/cjs/components/DropDownMenuWithLabel.d.ts.map +1 -1
  42. package/dist/cjs/components/DropDownMenuWithLabel.js +56 -29
  43. package/dist/cjs/components/DynamicBanner.d.ts +2 -5
  44. package/dist/cjs/components/DynamicBanner.d.ts.map +1 -1
  45. package/dist/cjs/components/DynamicBanner.js +3 -3
  46. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts +0 -1
  47. package/dist/cjs/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  48. package/dist/cjs/components/EmptyDashboardComponent/index.js +6 -5
  49. package/dist/cjs/components/EmptyVirtualTablesComponent.d.ts +4 -0
  50. package/dist/cjs/components/EmptyVirtualTablesComponent.d.ts.map +1 -0
  51. package/dist/cjs/components/EmptyVirtualTablesComponent.js +41 -0
  52. package/dist/cjs/components/ExternalLink.d.ts +4 -0
  53. package/dist/cjs/components/ExternalLink.d.ts.map +1 -0
  54. package/dist/cjs/components/ExternalLink.js +15 -0
  55. package/dist/cjs/components/FormTooltip.d.ts +8 -0
  56. package/dist/cjs/components/FormTooltip.d.ts.map +1 -0
  57. package/dist/cjs/components/FormTooltip.js +89 -0
  58. package/dist/cjs/components/InputLabel.d.ts +4 -1
  59. package/dist/cjs/components/InputLabel.d.ts.map +1 -1
  60. package/dist/cjs/components/InputLabel.js +13 -8
  61. package/dist/cjs/components/InternalDashboard/ChartSkeleton.d.ts +11 -0
  62. package/dist/cjs/components/InternalDashboard/ChartSkeleton.d.ts.map +1 -0
  63. package/dist/cjs/components/InternalDashboard/ChartSkeleton.js +21 -0
  64. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts +20 -0
  65. package/dist/cjs/components/InternalDashboard/DashboardFilter.d.ts.map +1 -0
  66. package/dist/cjs/components/InternalDashboard/DashboardFilter.js +104 -0
  67. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts +7 -0
  68. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -0
  69. package/dist/cjs/components/InternalDashboard/DashboardLoadingComponent.js +22 -0
  70. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts +37 -0
  71. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  72. package/dist/cjs/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +275 -0
  73. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts +85 -0
  74. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  75. package/dist/cjs/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.js +534 -0
  76. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts +17 -0
  77. package/dist/cjs/components/InternalDashboard/InternalDashboard.d.ts.map +1 -0
  78. package/dist/cjs/components/InternalDashboard/InternalDashboard.js +1947 -0
  79. package/dist/cjs/components/OrgSelect.d.ts +9 -13
  80. package/dist/cjs/components/OrgSelect.d.ts.map +1 -1
  81. package/dist/cjs/components/OrgSelect.js +136 -119
  82. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts +30 -0
  83. package/dist/cjs/components/QuillMultiSelectWithCombo.d.ts.map +1 -0
  84. package/dist/cjs/components/QuillMultiSelectWithCombo.js +504 -0
  85. package/dist/cjs/components/QuillPopover.d.ts +11 -0
  86. package/dist/cjs/components/QuillPopover.d.ts.map +1 -0
  87. package/dist/cjs/components/QuillPopover.js +180 -0
  88. package/dist/cjs/components/QuillSelect.d.ts +1 -1
  89. package/dist/cjs/components/QuillSelect.d.ts.map +1 -1
  90. package/dist/cjs/components/QuillSelect.js +38 -16
  91. package/dist/cjs/components/QuillSelectWithCombo.d.ts +22 -0
  92. package/dist/cjs/components/QuillSelectWithCombo.d.ts.map +1 -0
  93. package/dist/cjs/components/QuillSelectWithCombo.js +327 -0
  94. package/dist/cjs/components/QuillTab.d.ts +12 -0
  95. package/dist/cjs/components/QuillTab.d.ts.map +1 -0
  96. package/dist/cjs/components/QuillTab.js +84 -0
  97. package/dist/cjs/components/QuillToolTipPortal.d.ts +11 -0
  98. package/dist/cjs/components/QuillToolTipPortal.d.ts.map +1 -0
  99. package/dist/cjs/components/QuillToolTipPortal.js +108 -0
  100. package/dist/cjs/components/SegmentedControl.d.ts +8 -2
  101. package/dist/cjs/components/SegmentedControl.d.ts.map +1 -1
  102. package/dist/cjs/components/SegmentedControl.js +11 -12
  103. package/dist/cjs/components/SqlTextEditor.d.ts +2 -5
  104. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  105. package/dist/cjs/components/SqlTextEditor.js +20 -19
  106. package/dist/cjs/components/StepDisplay.d.ts.map +1 -1
  107. package/dist/cjs/components/StepDisplay.js +2 -2
  108. package/dist/cjs/components/Tenants/EditTenant.d.ts +41 -0
  109. package/dist/cjs/components/Tenants/EditTenant.d.ts.map +1 -0
  110. package/dist/cjs/components/Tenants/EditTenant.js +760 -0
  111. package/dist/cjs/components/UiComponents.d.ts +35 -6
  112. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  113. package/dist/cjs/components/UiComponents.js +226 -28
  114. package/dist/cjs/components/VirtualTableTile.d.ts +7 -0
  115. package/dist/cjs/components/VirtualTableTile.d.ts.map +1 -0
  116. package/dist/cjs/components/VirtualTableTile.js +51 -0
  117. package/dist/cjs/components/index.d.ts +5 -5
  118. package/dist/cjs/components/index.d.ts.map +1 -1
  119. package/dist/cjs/components/index.js +1 -1
  120. package/dist/cjs/constants/dataTypes.d.ts.map +1 -1
  121. package/dist/cjs/constants/dataTypes.js +2 -0
  122. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts +15 -6
  123. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  124. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +209 -96
  125. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts +13 -9
  126. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  127. package/dist/cjs/forms/client_onboard/ConnectSchema.js +158 -236
  128. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +47 -0
  129. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -0
  130. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +396 -0
  131. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts +2 -0
  132. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts.map +1 -0
  133. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.js +571 -0
  134. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.d.ts +2 -0
  135. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.d.ts.map +1 -0
  136. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +459 -0
  137. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts +2 -0
  138. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts.map +1 -0
  139. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +385 -0
  140. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts +20 -0
  141. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -0
  142. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +294 -0
  143. package/dist/cjs/hooks/useDashboardManager.d.ts +16 -0
  144. package/dist/cjs/hooks/useDashboardManager.d.ts.map +1 -0
  145. package/dist/cjs/hooks/useDashboardManager.js +113 -0
  146. package/dist/cjs/hooks/useDatabaseSchema.d.ts +5 -0
  147. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -0
  148. package/dist/cjs/hooks/useDatabaseSchema.js +54 -0
  149. package/dist/cjs/hooks/useItemBeingEdited.d.ts +1 -2
  150. package/dist/cjs/hooks/useItemBeingEdited.d.ts.map +1 -1
  151. package/dist/cjs/hooks/useItemBeingEdited.js +2 -14
  152. package/dist/cjs/hooks/useOnClickOutside.d.ts +4 -1
  153. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  154. package/dist/cjs/hooks/useOnClickOutside.js +50 -7
  155. package/dist/cjs/hooks/useTenants.d.ts +13 -0
  156. package/dist/cjs/hooks/useTenants.d.ts.map +1 -0
  157. package/dist/cjs/hooks/useTenants.js +174 -0
  158. package/dist/cjs/hooks/useThrottle.d.ts +2 -0
  159. package/dist/cjs/hooks/useThrottle.d.ts.map +1 -0
  160. package/dist/cjs/hooks/useThrottle.js +14 -0
  161. package/dist/cjs/icons/CheckCircleIcon.d.ts +5 -0
  162. package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -0
  163. package/dist/cjs/icons/CheckCircleIcon.js +5 -0
  164. package/dist/cjs/icons/DownChevronIcon.d.ts +2 -0
  165. package/dist/cjs/icons/DownChevronIcon.d.ts.map +1 -0
  166. package/dist/cjs/icons/DownChevronIcon.js +7 -0
  167. package/dist/cjs/icons/ExclamationFilledIcon.d.ts +5 -0
  168. package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -0
  169. package/dist/cjs/icons/ExclamationFilledIcon.js +5 -0
  170. package/dist/cjs/icons/ExteriorLinkIcon.d.ts +5 -0
  171. package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -0
  172. package/dist/cjs/icons/ExteriorLinkIcon.js +5 -0
  173. package/dist/cjs/icons/GlobeIcon.d.ts +5 -0
  174. package/dist/cjs/icons/GlobeIcon.d.ts.map +1 -0
  175. package/dist/cjs/icons/GlobeIcon.js +15 -0
  176. package/dist/cjs/icons/InformationCircleIcon.d.ts +4 -0
  177. package/dist/cjs/icons/InformationCircleIcon.d.ts.map +1 -0
  178. package/dist/cjs/icons/InformationCircleIcon.js +7 -0
  179. package/dist/cjs/icons/LeftChevronIcon.d.ts +2 -0
  180. package/dist/cjs/icons/LeftChevronIcon.d.ts.map +1 -0
  181. package/dist/cjs/icons/LeftChevronIcon.js +7 -0
  182. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts +5 -0
  183. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -0
  184. package/dist/cjs/icons/QuestionMarkCircleIcon.js +5 -0
  185. package/dist/cjs/icons/RightChevronIcon.d.ts +2 -0
  186. package/dist/cjs/icons/RightChevronIcon.d.ts.map +1 -0
  187. package/dist/cjs/icons/RightChevronIcon.js +7 -0
  188. package/dist/cjs/icons/XMarkIcon.d.ts +0 -1
  189. package/dist/cjs/icons/XMarkIcon.d.ts.map +1 -1
  190. package/dist/cjs/icons/XMarkIcon.js +1 -1
  191. package/dist/cjs/index.d.ts +2 -3
  192. package/dist/cjs/index.d.ts.map +1 -1
  193. package/dist/cjs/index.js +6 -7
  194. package/dist/cjs/modals/CodePreview.d.ts +6 -0
  195. package/dist/cjs/modals/CodePreview.d.ts.map +1 -0
  196. package/dist/cjs/modals/CodePreview.js +151 -0
  197. package/dist/cjs/modals/EditEnvironmentModal.d.ts +15 -0
  198. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -0
  199. package/dist/cjs/modals/EditEnvironmentModal.js +551 -0
  200. package/dist/cjs/modals/EditFiltersModal.d.ts +14 -10
  201. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  202. package/dist/cjs/modals/EditFiltersModal.js +1219 -263
  203. package/dist/cjs/modals/NewDashboardModal.d.ts +6 -8
  204. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  205. package/dist/cjs/modals/NewDashboardModal.js +147 -146
  206. package/dist/cjs/modals/PromoteDashboardModal.d.ts +16 -0
  207. package/dist/cjs/modals/PromoteDashboardModal.d.ts.map +1 -0
  208. package/dist/cjs/modals/PromoteDashboardModal.js +56 -0
  209. package/dist/cjs/modals/PromoteReportModal.d.ts +15 -0
  210. package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -0
  211. package/dist/cjs/modals/PromoteReportModal.js +128 -0
  212. package/dist/cjs/modals/PromoteViewModal.d.ts +5 -5
  213. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  214. package/dist/cjs/modals/PromoteViewModal.js +58 -94
  215. package/dist/cjs/modals/ReorderDashboardModal.d.ts +1 -2
  216. package/dist/cjs/modals/ReorderDashboardModal.d.ts.map +1 -1
  217. package/dist/cjs/modals/ReorderDashboardModal.js +34 -20
  218. package/dist/cjs/modals/SavedQueriesModal.d.ts +7 -0
  219. package/dist/cjs/modals/SavedQueriesModal.d.ts.map +1 -0
  220. package/dist/cjs/modals/SavedQueriesModal.js +128 -0
  221. package/dist/cjs/modals/index.d.ts +0 -1
  222. package/dist/cjs/modals/index.d.ts.map +1 -1
  223. package/dist/cjs/modals/index.js +1 -3
  224. package/dist/cjs/primitives/ButtonPrimitive.d.ts +3 -1
  225. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  226. package/dist/cjs/primitives/ButtonPrimitive.js +24 -16
  227. package/dist/cjs/primitives/CheckboxPrimitive.d.ts +12 -0
  228. package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -0
  229. package/dist/cjs/primitives/CheckboxPrimitive.js +29 -0
  230. package/dist/cjs/primitives/HeaderPrimitive.d.ts.map +1 -1
  231. package/dist/cjs/primitives/HeaderPrimitive.js +1 -1
  232. package/dist/cjs/primitives/MiniButtonPrimitive.d.ts +7 -0
  233. package/dist/cjs/primitives/MiniButtonPrimitive.d.ts.map +1 -0
  234. package/dist/cjs/primitives/MiniButtonPrimitive.js +56 -0
  235. package/dist/cjs/primitives/ModalPrimitive.d.ts +2 -10
  236. package/dist/cjs/primitives/ModalPrimitive.d.ts.map +1 -1
  237. package/dist/cjs/primitives/ModalPrimitive.js +6 -6
  238. package/dist/cjs/primitives/PlaceholderPrimitive.d.ts +5 -0
  239. package/dist/cjs/primitives/PlaceholderPrimitive.d.ts.map +1 -0
  240. package/dist/cjs/primitives/PlaceholderPrimitive.js +18 -0
  241. package/dist/cjs/primitives/PopoverPrimitive.d.ts +8 -0
  242. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -0
  243. package/dist/cjs/primitives/PopoverPrimitive.js +53 -0
  244. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts +3 -1
  245. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  246. package/dist/cjs/primitives/SecondaryButtonPrimitive.js +13 -10
  247. package/dist/cjs/primitives/TextInputPrimitive.d.ts +7 -2
  248. package/dist/cjs/primitives/TextInputPrimitive.d.ts.map +1 -1
  249. package/dist/cjs/primitives/TextInputPrimitive.js +109 -14
  250. package/dist/cjs/primitives/TogglePrimitive.d.ts +6 -3
  251. package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
  252. package/dist/cjs/primitives/TogglePrimitive.js +10 -7
  253. package/dist/cjs/primitives/index.d.ts +1 -1
  254. package/dist/cjs/primitives/index.d.ts.map +1 -1
  255. package/dist/cjs/primitives/index.js +3 -3
  256. package/dist/cjs/public_components/ChartQueryBuilder.d.ts +9 -0
  257. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -0
  258. package/dist/cjs/public_components/ChartQueryBuilder.js +131 -0
  259. package/dist/cjs/public_components/CreateEnvironment.d.ts +1 -1
  260. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  261. package/dist/cjs/public_components/CreateEnvironment.js +168 -81
  262. package/dist/cjs/public_components/DashboardManager.d.ts +2 -2
  263. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  264. package/dist/cjs/public_components/DashboardManager.js +346 -187
  265. package/dist/cjs/public_components/EnvSelectPopover.d.ts +12 -0
  266. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -0
  267. package/dist/cjs/public_components/EnvSelectPopover.js +144 -0
  268. package/dist/cjs/public_components/{SQLViewManager.d.ts → VirtualTableManager.d.ts} +3 -2
  269. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -0
  270. package/dist/cjs/public_components/VirtualTableManager.js +731 -0
  271. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.d.ts +2 -0
  272. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.d.ts.map +1 -0
  273. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +685 -0
  274. package/dist/cjs/utils/astProcessing.d.ts +14 -1
  275. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  276. package/dist/cjs/utils/astProcessing.js +72 -8
  277. package/dist/cjs/utils/astProcessing.uspec.js +7 -3
  278. package/dist/cjs/utils/columnProcessing.d.ts +12 -0
  279. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -1
  280. package/dist/cjs/utils/columnProcessing.js +173 -7
  281. package/dist/cjs/utils/constants.d.ts +4 -21
  282. package/dist/cjs/utils/constants.d.ts.map +1 -1
  283. package/dist/cjs/utils/constants.js +20 -11
  284. package/dist/cjs/utils/dataEditor.d.ts +4 -3
  285. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  286. package/dist/cjs/utils/dataEditor.js +69 -121
  287. package/dist/cjs/utils/dataFetcher.d.ts +20 -2
  288. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  289. package/dist/cjs/utils/dataFetcher.js +46 -56
  290. package/dist/cjs/utils/databases.d.ts +20 -8
  291. package/dist/cjs/utils/databases.d.ts.map +1 -1
  292. package/dist/cjs/utils/databases.js +63 -24
  293. package/dist/cjs/utils/filter.d.ts +222 -0
  294. package/dist/cjs/utils/filter.d.ts.map +1 -0
  295. package/dist/cjs/utils/filter.js +347 -0
  296. package/dist/cjs/utils/monacoAutocomplete.d.ts +2 -1
  297. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -1
  298. package/dist/cjs/utils/monacoAutocomplete.js +149 -44
  299. package/dist/cjs/utils/report.d.ts +120 -0
  300. package/dist/cjs/utils/report.d.ts.map +1 -0
  301. package/dist/cjs/utils/report.js +109 -0
  302. package/dist/cjs/utils/schema.d.ts +41 -29
  303. package/dist/cjs/utils/schema.d.ts.map +1 -1
  304. package/dist/cjs/utils/schema.js +137 -91
  305. package/dist/cjs/utils/table.d.ts +70 -4
  306. package/dist/cjs/utils/table.d.ts.map +1 -1
  307. package/dist/cjs/utils/tenants.d.ts +48 -0
  308. package/dist/cjs/utils/tenants.d.ts.map +1 -0
  309. package/dist/cjs/utils/tenants.js +37 -0
  310. package/dist/cjs/utils/textProcessing.js +1 -2
  311. package/dist/cjs/utils/ui.d.ts +2 -0
  312. package/dist/cjs/utils/ui.d.ts.map +1 -0
  313. package/dist/cjs/utils/ui.js +18 -0
  314. package/dist/cjs/utils/validation.d.ts +2 -0
  315. package/dist/cjs/utils/validation.d.ts.map +1 -0
  316. package/dist/cjs/utils/validation.js +77 -0
  317. package/dist/cjs/utils/validation.uspec.d.ts +2 -0
  318. package/dist/cjs/utils/validation.uspec.d.ts.map +1 -0
  319. package/dist/cjs/utils/validation.uspec.js +53 -0
  320. package/dist/esm/Admin.d.ts +41 -87
  321. package/dist/esm/Admin.d.ts.map +1 -1
  322. package/dist/esm/Admin.js +355 -422
  323. package/dist/esm/AdminProvider.d.ts +108 -50
  324. package/dist/esm/AdminProvider.d.ts.map +1 -1
  325. package/dist/esm/AdminProvider.js +390 -209
  326. package/dist/esm/api/ConnectionClient.d.ts +20 -38
  327. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  328. package/dist/esm/api/ConnectionClient.js +280 -306
  329. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  330. package/dist/esm/components/Banner/index.d.ts +0 -1
  331. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  332. package/dist/esm/components/ClipboardButton.d.ts +8 -0
  333. package/dist/esm/components/ClipboardButton.d.ts.map +1 -0
  334. package/dist/esm/components/ClipboardButton.js +69 -0
  335. package/dist/esm/components/DashboardSelectPopover.d.ts +8 -5
  336. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  337. package/dist/esm/components/DashboardSelectPopover.js +72 -186
  338. package/dist/esm/components/DatabaseMismatchCard.d.ts +3 -3
  339. package/dist/esm/components/DatabaseMismatchCard.d.ts.map +1 -1
  340. package/dist/esm/components/DatabaseMismatchCard.js +2 -2
  341. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  342. package/dist/esm/components/DatabaseSelector.js +9 -1
  343. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts +10 -0
  344. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -0
  345. package/dist/esm/components/DateRangePicker/SingleDatePicker.js +227 -0
  346. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts +18 -0
  347. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -0
  348. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.js +282 -0
  349. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts +91 -0
  350. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  351. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.js +883 -0
  352. package/dist/esm/components/DeleteButton.d.ts +0 -1
  353. package/dist/esm/components/DeleteButton.d.ts.map +1 -1
  354. package/dist/esm/components/DropDownMenuWithLabel.d.ts +4 -3
  355. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  356. package/dist/esm/components/DropDownMenuWithLabel.js +37 -23
  357. package/dist/esm/components/DynamicBanner.d.ts +2 -5
  358. package/dist/esm/components/DynamicBanner.d.ts.map +1 -1
  359. package/dist/esm/components/DynamicBanner.js +2 -2
  360. package/dist/esm/components/EmptyDashboardComponent/index.d.ts +0 -1
  361. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  362. package/dist/esm/components/EmptyDashboardComponent/index.js +5 -4
  363. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts +4 -0
  364. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts.map +1 -0
  365. package/dist/esm/components/EmptyVirtualTablesComponent.js +38 -0
  366. package/dist/esm/components/ExternalLink.d.ts +4 -0
  367. package/dist/esm/components/ExternalLink.d.ts.map +1 -0
  368. package/dist/esm/components/ExternalLink.js +9 -0
  369. package/dist/esm/components/FormTooltip.d.ts +8 -0
  370. package/dist/esm/components/FormTooltip.d.ts.map +1 -0
  371. package/dist/esm/components/FormTooltip.js +84 -0
  372. package/dist/esm/components/InputLabel.d.ts +4 -1
  373. package/dist/esm/components/InputLabel.d.ts.map +1 -1
  374. package/dist/esm/components/InputLabel.js +10 -8
  375. package/dist/esm/components/InternalDashboard/ChartSkeleton.d.ts +11 -0
  376. package/dist/esm/components/InternalDashboard/ChartSkeleton.d.ts.map +1 -0
  377. package/dist/esm/components/InternalDashboard/ChartSkeleton.js +16 -0
  378. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +20 -0
  379. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -0
  380. package/dist/esm/components/InternalDashboard/DashboardFilter.js +101 -0
  381. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts +7 -0
  382. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -0
  383. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.js +15 -0
  384. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts +37 -0
  385. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  386. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +269 -0
  387. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts +85 -0
  388. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  389. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.js +520 -0
  390. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts +17 -0
  391. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -0
  392. package/dist/esm/components/InternalDashboard/InternalDashboard.js +1940 -0
  393. package/dist/esm/components/OrgSelect.d.ts +9 -13
  394. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  395. package/dist/esm/components/OrgSelect.js +134 -117
  396. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +30 -0
  397. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -0
  398. package/dist/esm/components/QuillMultiSelectWithCombo.js +466 -0
  399. package/dist/esm/components/QuillPopover.d.ts +11 -0
  400. package/dist/esm/components/QuillPopover.d.ts.map +1 -0
  401. package/dist/esm/components/QuillPopover.js +144 -0
  402. package/dist/esm/components/QuillSelect.d.ts +1 -1
  403. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  404. package/dist/esm/components/QuillSelect.js +39 -16
  405. package/dist/esm/components/QuillSelectWithCombo.d.ts +22 -0
  406. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -0
  407. package/dist/esm/components/QuillSelectWithCombo.js +291 -0
  408. package/dist/esm/components/QuillTab.d.ts +12 -0
  409. package/dist/esm/components/QuillTab.d.ts.map +1 -0
  410. package/dist/esm/components/QuillTab.js +81 -0
  411. package/dist/esm/components/QuillToolTipPortal.d.ts +11 -0
  412. package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -0
  413. package/dist/esm/components/QuillToolTipPortal.js +104 -0
  414. package/dist/esm/components/SegmentedControl.d.ts +8 -2
  415. package/dist/esm/components/SegmentedControl.d.ts.map +1 -1
  416. package/dist/esm/components/SegmentedControl.js +10 -10
  417. package/dist/esm/components/SqlTextEditor.d.ts +2 -5
  418. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  419. package/dist/esm/components/SqlTextEditor.js +21 -20
  420. package/dist/esm/components/StepDisplay.d.ts.map +1 -1
  421. package/dist/esm/components/StepDisplay.js +1 -1
  422. package/dist/esm/components/Tenants/EditTenant.d.ts +41 -0
  423. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -0
  424. package/dist/esm/components/Tenants/EditTenant.js +754 -0
  425. package/dist/esm/components/UiComponents.d.ts +35 -6
  426. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  427. package/dist/esm/components/UiComponents.js +220 -26
  428. package/dist/esm/components/VirtualTableTile.d.ts +7 -0
  429. package/dist/esm/components/VirtualTableTile.d.ts.map +1 -0
  430. package/dist/esm/components/VirtualTableTile.js +48 -0
  431. package/dist/esm/components/index.d.ts +5 -5
  432. package/dist/esm/components/index.d.ts.map +1 -1
  433. package/dist/esm/components/index.js +5 -5
  434. package/dist/esm/constants/dataTypes.d.ts.map +1 -1
  435. package/dist/esm/constants/dataTypes.js +2 -0
  436. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts +15 -6
  437. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  438. package/dist/esm/forms/client_onboard/ConnectDatabase.js +211 -98
  439. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts +13 -9
  440. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  441. package/dist/esm/forms/client_onboard/ConnectSchema.js +160 -238
  442. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +47 -0
  443. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -0
  444. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +388 -0
  445. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts +2 -0
  446. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts.map +1 -0
  447. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.js +566 -0
  448. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.d.ts +2 -0
  449. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.d.ts.map +1 -0
  450. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +454 -0
  451. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts +2 -0
  452. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts.map +1 -0
  453. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +380 -0
  454. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts +20 -0
  455. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -0
  456. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +288 -0
  457. package/dist/esm/hooks/useDashboardManager.d.ts +16 -0
  458. package/dist/esm/hooks/useDashboardManager.d.ts.map +1 -0
  459. package/dist/esm/hooks/useDashboardManager.js +109 -0
  460. package/dist/esm/hooks/useDatabaseSchema.d.ts +5 -0
  461. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -0
  462. package/dist/esm/hooks/useDatabaseSchema.js +50 -0
  463. package/dist/esm/hooks/useItemBeingEdited.d.ts +1 -2
  464. package/dist/esm/hooks/useItemBeingEdited.d.ts.map +1 -1
  465. package/dist/esm/hooks/useItemBeingEdited.js +3 -15
  466. package/dist/esm/hooks/useOnClickOutside.d.ts +4 -1
  467. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  468. package/dist/esm/hooks/useOnClickOutside.js +49 -8
  469. package/dist/esm/hooks/useTenants.d.ts +13 -0
  470. package/dist/esm/hooks/useTenants.d.ts.map +1 -0
  471. package/dist/esm/hooks/useTenants.js +170 -0
  472. package/dist/esm/hooks/useThrottle.d.ts +2 -0
  473. package/dist/esm/hooks/useThrottle.d.ts.map +1 -0
  474. package/dist/esm/hooks/useThrottle.js +11 -0
  475. package/dist/esm/icons/CheckCircleIcon.d.ts +5 -0
  476. package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -0
  477. package/dist/esm/icons/CheckCircleIcon.js +3 -0
  478. package/dist/esm/icons/DownChevronIcon.d.ts +2 -0
  479. package/dist/esm/icons/DownChevronIcon.d.ts.map +1 -0
  480. package/dist/esm/icons/DownChevronIcon.js +4 -0
  481. package/dist/esm/icons/ExclamationFilledIcon.d.ts +5 -0
  482. package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -0
  483. package/dist/esm/icons/ExclamationFilledIcon.js +3 -0
  484. package/dist/esm/icons/ExteriorLinkIcon.d.ts +5 -0
  485. package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -0
  486. package/dist/esm/icons/ExteriorLinkIcon.js +3 -0
  487. package/dist/esm/icons/GlobeIcon.d.ts +5 -0
  488. package/dist/esm/icons/GlobeIcon.d.ts.map +1 -0
  489. package/dist/esm/icons/GlobeIcon.js +12 -0
  490. package/dist/esm/icons/InformationCircleIcon.d.ts +4 -0
  491. package/dist/esm/icons/InformationCircleIcon.d.ts.map +1 -0
  492. package/dist/esm/icons/InformationCircleIcon.js +4 -0
  493. package/dist/esm/icons/LeftChevronIcon.d.ts +2 -0
  494. package/dist/esm/icons/LeftChevronIcon.d.ts.map +1 -0
  495. package/dist/esm/icons/LeftChevronIcon.js +4 -0
  496. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts +5 -0
  497. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -0
  498. package/dist/esm/icons/QuestionMarkCircleIcon.js +3 -0
  499. package/dist/esm/icons/RightChevronIcon.d.ts +2 -0
  500. package/dist/esm/icons/RightChevronIcon.d.ts.map +1 -0
  501. package/dist/esm/icons/RightChevronIcon.js +4 -0
  502. package/dist/esm/icons/XMarkIcon.d.ts +0 -1
  503. package/dist/esm/icons/XMarkIcon.d.ts.map +1 -1
  504. package/dist/esm/index.d.ts +2 -3
  505. package/dist/esm/index.d.ts.map +1 -1
  506. package/dist/esm/index.js +3 -3
  507. package/dist/esm/modals/CodePreview.d.ts +6 -0
  508. package/dist/esm/modals/CodePreview.d.ts.map +1 -0
  509. package/dist/esm/modals/CodePreview.js +145 -0
  510. package/dist/esm/modals/EditEnvironmentModal.d.ts +15 -0
  511. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -0
  512. package/dist/esm/modals/EditEnvironmentModal.js +545 -0
  513. package/dist/esm/modals/EditFiltersModal.d.ts +14 -10
  514. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  515. package/dist/esm/modals/EditFiltersModal.js +1226 -264
  516. package/dist/esm/modals/NewDashboardModal.d.ts +6 -8
  517. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  518. package/dist/esm/modals/NewDashboardModal.js +148 -146
  519. package/dist/esm/modals/PromoteDashboardModal.d.ts +16 -0
  520. package/dist/esm/modals/PromoteDashboardModal.d.ts.map +1 -0
  521. package/dist/esm/modals/PromoteDashboardModal.js +53 -0
  522. package/dist/esm/modals/PromoteReportModal.d.ts +15 -0
  523. package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -0
  524. package/dist/esm/modals/PromoteReportModal.js +125 -0
  525. package/dist/esm/modals/PromoteViewModal.d.ts +5 -5
  526. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  527. package/dist/esm/modals/PromoteViewModal.js +58 -94
  528. package/dist/esm/modals/ReorderDashboardModal.d.ts +1 -2
  529. package/dist/esm/modals/ReorderDashboardModal.d.ts.map +1 -1
  530. package/dist/esm/modals/ReorderDashboardModal.js +34 -20
  531. package/dist/esm/modals/SavedQueriesModal.d.ts +7 -0
  532. package/dist/esm/modals/SavedQueriesModal.d.ts.map +1 -0
  533. package/dist/esm/modals/SavedQueriesModal.js +125 -0
  534. package/dist/esm/modals/index.d.ts +0 -1
  535. package/dist/esm/modals/index.d.ts.map +1 -1
  536. package/dist/esm/modals/index.js +0 -1
  537. package/dist/esm/primitives/ButtonPrimitive.d.ts +3 -1
  538. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  539. package/dist/esm/primitives/ButtonPrimitive.js +25 -17
  540. package/dist/esm/primitives/CheckboxPrimitive.d.ts +12 -0
  541. package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -0
  542. package/dist/esm/primitives/CheckboxPrimitive.js +27 -0
  543. package/dist/esm/primitives/HeaderPrimitive.d.ts.map +1 -1
  544. package/dist/esm/primitives/HeaderPrimitive.js +1 -1
  545. package/dist/esm/primitives/MiniButtonPrimitive.d.ts +7 -0
  546. package/dist/esm/primitives/MiniButtonPrimitive.d.ts.map +1 -0
  547. package/dist/esm/primitives/MiniButtonPrimitive.js +54 -0
  548. package/dist/esm/primitives/ModalPrimitive.d.ts +2 -10
  549. package/dist/esm/primitives/ModalPrimitive.d.ts.map +1 -1
  550. package/dist/esm/primitives/ModalPrimitive.js +7 -7
  551. package/dist/esm/primitives/PlaceholderPrimitive.d.ts +5 -0
  552. package/dist/esm/primitives/PlaceholderPrimitive.d.ts.map +1 -0
  553. package/dist/esm/primitives/PlaceholderPrimitive.js +15 -0
  554. package/dist/esm/primitives/PopoverPrimitive.d.ts +8 -0
  555. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -0
  556. package/dist/esm/primitives/PopoverPrimitive.js +49 -0
  557. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts +3 -1
  558. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  559. package/dist/esm/primitives/SecondaryButtonPrimitive.js +14 -11
  560. package/dist/esm/primitives/TextInputPrimitive.d.ts +7 -2
  561. package/dist/esm/primitives/TextInputPrimitive.d.ts.map +1 -1
  562. package/dist/esm/primitives/TextInputPrimitive.js +77 -12
  563. package/dist/esm/primitives/TogglePrimitive.d.ts +6 -3
  564. package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
  565. package/dist/esm/primitives/TogglePrimitive.js +10 -7
  566. package/dist/esm/primitives/index.d.ts +1 -1
  567. package/dist/esm/primitives/index.d.ts.map +1 -1
  568. package/dist/esm/primitives/index.js +1 -1
  569. package/dist/esm/public_components/ChartQueryBuilder.d.ts +9 -0
  570. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -0
  571. package/dist/esm/public_components/ChartQueryBuilder.js +125 -0
  572. package/dist/esm/public_components/CreateEnvironment.d.ts +1 -1
  573. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  574. package/dist/esm/public_components/CreateEnvironment.js +152 -75
  575. package/dist/esm/public_components/DashboardManager.d.ts +2 -2
  576. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  577. package/dist/esm/public_components/DashboardManager.js +350 -191
  578. package/dist/esm/public_components/EnvSelectPopover.d.ts +12 -0
  579. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -0
  580. package/dist/esm/public_components/EnvSelectPopover.js +138 -0
  581. package/dist/esm/public_components/{SQLViewManager.d.ts → VirtualTableManager.d.ts} +3 -2
  582. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -0
  583. package/dist/esm/public_components/VirtualTableManager.js +723 -0
  584. package/dist/esm/public_components/__tests__/CreateEnvironment.test.d.ts +2 -0
  585. package/dist/esm/public_components/__tests__/CreateEnvironment.test.d.ts.map +1 -0
  586. package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +680 -0
  587. package/dist/esm/utils/astProcessing.d.ts +14 -1
  588. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  589. package/dist/esm/utils/astProcessing.js +67 -6
  590. package/dist/esm/utils/astProcessing.uspec.js +8 -4
  591. package/dist/esm/utils/columnProcessing.d.ts +12 -0
  592. package/dist/esm/utils/columnProcessing.d.ts.map +1 -1
  593. package/dist/esm/utils/columnProcessing.js +167 -4
  594. package/dist/esm/utils/constants.d.ts +4 -21
  595. package/dist/esm/utils/constants.d.ts.map +1 -1
  596. package/dist/esm/utils/constants.js +18 -9
  597. package/dist/esm/utils/dataEditor.d.ts +4 -3
  598. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  599. package/dist/esm/utils/dataEditor.js +65 -117
  600. package/dist/esm/utils/dataFetcher.d.ts +20 -2
  601. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  602. package/dist/esm/utils/dataFetcher.js +44 -53
  603. package/dist/esm/utils/databases.d.ts +20 -8
  604. package/dist/esm/utils/databases.d.ts.map +1 -1
  605. package/dist/esm/utils/databases.js +60 -21
  606. package/dist/esm/utils/filter.d.ts +222 -0
  607. package/dist/esm/utils/filter.d.ts.map +1 -0
  608. package/dist/esm/utils/filter.js +343 -0
  609. package/dist/esm/utils/monacoAutocomplete.d.ts +2 -1
  610. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -1
  611. package/dist/esm/utils/monacoAutocomplete.js +146 -41
  612. package/dist/esm/utils/report.d.ts +120 -0
  613. package/dist/esm/utils/report.d.ts.map +1 -0
  614. package/dist/esm/utils/report.js +106 -0
  615. package/dist/esm/utils/schema.d.ts +41 -29
  616. package/dist/esm/utils/schema.d.ts.map +1 -1
  617. package/dist/esm/utils/schema.js +133 -88
  618. package/dist/esm/utils/table.d.ts +70 -4
  619. package/dist/esm/utils/table.d.ts.map +1 -1
  620. package/dist/esm/utils/tenants.d.ts +48 -0
  621. package/dist/esm/utils/tenants.d.ts.map +1 -0
  622. package/dist/esm/utils/tenants.js +31 -0
  623. package/dist/esm/utils/ui.d.ts +2 -0
  624. package/dist/esm/utils/ui.d.ts.map +1 -0
  625. package/dist/esm/utils/ui.js +14 -0
  626. package/dist/esm/utils/validation.d.ts +2 -0
  627. package/dist/esm/utils/validation.d.ts.map +1 -0
  628. package/dist/esm/utils/validation.js +74 -0
  629. package/dist/esm/utils/validation.uspec.d.ts +2 -0
  630. package/dist/esm/utils/validation.uspec.d.ts.map +1 -0
  631. package/dist/esm/utils/validation.uspec.js +51 -0
  632. package/package.json +21 -8
  633. package/dist/cjs/components/EnvSelectPopover.d.ts +0 -13
  634. package/dist/cjs/components/EnvSelectPopover.d.ts.map +0 -1
  635. package/dist/cjs/components/EnvSelectPopover.js +0 -224
  636. package/dist/cjs/components/SqlViewTile.d.ts +0 -8
  637. package/dist/cjs/components/SqlViewTile.d.ts.map +0 -1
  638. package/dist/cjs/components/SqlViewTile.js +0 -69
  639. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts +0 -24
  640. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +0 -1
  641. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +0 -250
  642. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +0 -29
  643. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +0 -1
  644. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +0 -228
  645. package/dist/cjs/modals/PromoteDashModal.d.ts +0 -17
  646. package/dist/cjs/modals/PromoteDashModal.d.ts.map +0 -1
  647. package/dist/cjs/modals/PromoteDashModal.js +0 -133
  648. package/dist/cjs/primitives/SelectPrimitive.d.ts +0 -16
  649. package/dist/cjs/primitives/SelectPrimitive.d.ts.map +0 -1
  650. package/dist/cjs/primitives/SelectPrimitive.js +0 -43
  651. package/dist/cjs/public_components/DashboardBuilder.d.ts +0 -7
  652. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +0 -1
  653. package/dist/cjs/public_components/DashboardBuilder.js +0 -220
  654. package/dist/cjs/public_components/SQLViewManager.d.ts.map +0 -1
  655. package/dist/cjs/public_components/SQLViewManager.js +0 -563
  656. package/dist/esm/components/EnvSelectPopover.d.ts +0 -13
  657. package/dist/esm/components/EnvSelectPopover.d.ts.map +0 -1
  658. package/dist/esm/components/EnvSelectPopover.js +0 -221
  659. package/dist/esm/components/SqlViewTile.d.ts +0 -8
  660. package/dist/esm/components/SqlViewTile.d.ts.map +0 -1
  661. package/dist/esm/components/SqlViewTile.js +0 -40
  662. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts +0 -24
  663. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +0 -1
  664. package/dist/esm/forms/client_onboard/CreateSqlViews.js +0 -242
  665. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +0 -29
  666. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +0 -1
  667. package/dist/esm/forms/sql_views/CreateEditSqlView.js +0 -222
  668. package/dist/esm/modals/PromoteDashModal.d.ts +0 -17
  669. package/dist/esm/modals/PromoteDashModal.d.ts.map +0 -1
  670. package/dist/esm/modals/PromoteDashModal.js +0 -130
  671. package/dist/esm/primitives/SelectPrimitive.d.ts +0 -16
  672. package/dist/esm/primitives/SelectPrimitive.d.ts.map +0 -1
  673. package/dist/esm/primitives/SelectPrimitive.js +0 -41
  674. package/dist/esm/public_components/DashboardBuilder.d.ts +0 -7
  675. package/dist/esm/public_components/DashboardBuilder.d.ts.map +0 -1
  676. package/dist/esm/public_components/DashboardBuilder.js +0 -214
  677. package/dist/esm/public_components/SQLViewManager.d.ts.map +0 -1
  678. package/dist/esm/public_components/SQLViewManager.js +0 -555
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.EditFiltersModal = void 0;
6
+ exports.EditFiltersModal = EditFiltersModal;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = require("react");
9
9
  const AdminProvider_1 = require("../AdminProvider");
@@ -12,344 +12,1300 @@ const constants_1 = require("../utils/constants");
12
12
  const Admin_1 = require("../Admin");
13
13
  const InputLabel_1 = __importDefault(require("../components/InputLabel"));
14
14
  const CardSection_1 = __importDefault(require("../components/CardSection"));
15
- const TogglePrimitive_1 = __importDefault(require("../primitives/TogglePrimitive"));
16
15
  const SegmentedControl_1 = require("../components/SegmentedControl");
17
16
  const columnProcessing_1 = require("../utils/columnProcessing");
18
- function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }) {
19
- const { state, dispatch } = (0, AdminProvider_1.useAdmin)();
20
- const [selectedDashboardName, setSelectedDashboardName] = (0, react_1.useState)('');
21
- const { data } = (0, react_2.useDashboard)(selectedDashboard.name);
17
+ const validation_1 = require("../utils/validation");
18
+ const UiComponents_1 = require("../components/UiComponents");
19
+ const QuillSelectWithCombo_1 = require("../components/QuillSelectWithCombo");
20
+ const DownChevronIcon_1 = __importDefault(require("../icons/DownChevronIcon"));
21
+ const RightChevronIcon_1 = __importDefault(require("../icons/RightChevronIcon"));
22
+ const TextInputPrimitive_1 = __importDefault(require("../primitives/TextInputPrimitive"));
23
+ const SingleDatePicker_1 = require("../components/DateRangePicker/SingleDatePicker");
24
+ const date_fns_1 = require("date-fns");
25
+ const YearlessDateRangePicker_1 = require("../components/DateRangePicker/YearlessDateRangePicker");
26
+ const ExclamationFilledIcon_1 = __importDefault(require("../icons/ExclamationFilledIcon"));
27
+ const QuillToolTipPortal_1 = require("../components/QuillToolTipPortal");
28
+ const dateRangePickerUtils_1 = require("../components/DateRangePicker/dateRangePickerUtils");
29
+ const QuillPopover_1 = require("../components/QuillPopover");
30
+ const intervalTypeOptions = [
31
+ // {
32
+ // label: 'Week',
33
+ // value: 'week'
34
+ // },
35
+ {
36
+ label: 'Last',
37
+ value: 'relative',
38
+ },
39
+ {
40
+ label: 'Custom Term',
41
+ value: 'repeating',
42
+ },
43
+ {
44
+ label: 'Static',
45
+ value: 'static',
46
+ },
47
+ ];
48
+ function EditFiltersModal({ isOpen, selectedDashboardName, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, ErrorComponent, openPromoteModal, }) {
49
+ const { state } = (0, AdminProvider_1.useAdmin)();
50
+ const { dashboards, deleteDashboard, updateDashboard } = (0, react_2.useDashboards)();
51
+ const { data: selectedDashboard } = (0, react_2.useDashboard)(selectedDashboardName);
22
52
  const [isDateComparison, setIsDateComparison] = (0, react_1.useState)(false);
53
+ const [currentDashboardName, setCurrentDashboardName] = (0, react_1.useState)(selectedDashboardName);
23
54
  const [newFilters, setNewFilters] = (0, react_1.useState)([]);
24
- const [initialRange, setInitialRange] = (0, react_1.useState)(constants_1.defaultDateRange);
55
+ const [initialRange, setInitialRange] = (0, react_1.useState)(selectedDashboard?.dateFilter?.primaryRange ?? {
56
+ label: 'Last 30 days',
57
+ value: 'LAST_30_DAYS',
58
+ });
25
59
  const [showDateFilter, setShowDateFilter] = (0, react_1.useState)(false);
26
- const [newDateFilter, setNewDateFilter] = (0, react_1.useState)(null);
60
+ const [newDateFilter, setNewDateFilter] = (0, react_1.useState)();
61
+ const [validationError, setValidationError] = (0, react_1.useState)([]);
62
+ const [filterNameMap, setFilterNameMap] = (0, react_1.useState)({});
63
+ const [showCustomIntervals, setShowCustomIntervals] = (0, react_1.useState)(false);
64
+ const [displaySubIntervals, setDisplaySubIntervals] = (0, react_1.useState)([]);
65
+ const assignDefaultInterval = (label, set, loopStart, loopEnd) => {
66
+ if (!newDateFilter)
67
+ return;
68
+ if (set) {
69
+ setNewDateFilter({
70
+ ...newDateFilter,
71
+ defaultPresetRanges: [
72
+ ...(newDateFilter?.defaultPresetRanges ?? []).filter((r) => r?.label !== label),
73
+ { label, loopStart, loopEnd },
74
+ ],
75
+ });
76
+ }
77
+ else {
78
+ setNewDateFilter({
79
+ ...newDateFilter,
80
+ defaultPresetRanges: newDateFilter?.defaultPresetRanges?.filter((r) => r?.label !== label) ?? [],
81
+ });
82
+ }
83
+ };
84
+ const getDefaultInterval = (label) => {
85
+ return newDateFilter?.defaultPresetRanges?.find((r) => r?.label === label);
86
+ };
87
+ const emptyInterval = {
88
+ week: { type: 'week' },
89
+ relative: { type: 'relative', value: 1, unit: 'days' },
90
+ repeating: {
91
+ type: 'repeating',
92
+ label: 'Quarter',
93
+ loopDate: { day: 1, month: 1 },
94
+ subIntervals: [
95
+ {
96
+ type: 'static',
97
+ startDate: { day: 1, month: 1 },
98
+ endDate: { day: 31, month: 3 },
99
+ },
100
+ {
101
+ type: 'static',
102
+ startDate: { day: 1, month: 4 },
103
+ endDate: { day: 30, month: 6 },
104
+ },
105
+ {
106
+ type: 'static',
107
+ startDate: { day: 1, month: 7 },
108
+ endDate: { day: 30, month: 9 },
109
+ },
110
+ {
111
+ type: 'static',
112
+ startDate: { day: 1, month: 10 },
113
+ endDate: { day: 31, month: 12 },
114
+ },
115
+ ],
116
+ },
117
+ static: {
118
+ type: 'static',
119
+ label: 'January',
120
+ startDate: { day: 1, month: 1 },
121
+ endDate: { day: 31, month: 1 },
122
+ },
123
+ };
124
+ const subIntervalIssues = (0, react_1.useMemo)(() => {
125
+ // Helper to check if two days are adjacent (the second follows the first)
126
+ const areAdjacent = (day1, day2) => {
127
+ // Create dates in leap year 2024 for proper handling
128
+ const date1 = new Date(2024, day1.month - 1, day1.day);
129
+ const date2 = new Date(2024, day2.month - 1, day2.day);
130
+ // Add one day to first date and check if it equals the second date
131
+ const nextDay = new Date(date1);
132
+ nextDay.setDate(nextDay.getDate() + 1);
133
+ // Compare the dates ignoring time
134
+ return (nextDay.getDate() === date2.getDate() &&
135
+ nextDay.getMonth() === date2.getMonth());
136
+ };
137
+ return (newDateFilter?.presetOptions?.reduce((acc, interval, index) => {
138
+ if (interval?.type !== 'repeating' || !interval.subIntervals?.length)
139
+ return acc;
140
+ acc[index] = interval.subIntervals?.map((subInterval) => {
141
+ if (!subInterval)
142
+ return 'Sub-interval is empty';
143
+ // if (!subInterval.label) return "Sub-interval must have a label";
144
+ if (!subInterval.startDate ||
145
+ !subInterval.startDate.day ||
146
+ !subInterval.startDate.month)
147
+ return 'Sub-interval must have a start date';
148
+ if (!subInterval.endDate ||
149
+ !subInterval.endDate.day ||
150
+ !subInterval.endDate.month)
151
+ return 'Sub-interval must have an end date';
152
+ // Verify sub-interval doesn't overlap with other sub-intervals
153
+ // Use 2024 (leap year) for proper date handling
154
+ const subIntervalStart = new Date(2024, subInterval.startDate.month - 1, subInterval.startDate.day);
155
+ const subIntervalEnd = new Date(2024, subInterval.endDate.month - 1, subInterval.endDate.day);
156
+ const overlappingSubIntervals = interval.subIntervals?.filter((otherSubInterval) => {
157
+ if (!otherSubInterval || otherSubInterval === subInterval)
158
+ return false;
159
+ // Check for proper adjacency with February end transitions
160
+ if (subInterval.endDate.month === 2 &&
161
+ (subInterval.endDate.day === 28 ||
162
+ subInterval.endDate.day === 29) &&
163
+ otherSubInterval.startDate?.month === 3 &&
164
+ otherSubInterval.startDate?.day === 1) {
165
+ if (areAdjacent(subInterval.endDate, otherSubInterval.startDate)) {
166
+ return false; // They're adjacent, not overlapping
167
+ }
168
+ }
169
+ // Otherwise do normal overlap check
170
+ const otherSubIntervalStart = new Date(2024, (otherSubInterval.startDate?.month ?? 1) - 1, otherSubInterval.startDate?.day ?? 1);
171
+ const otherSubIntervalEnd = new Date(2024, (otherSubInterval.endDate?.month ?? 1) - 1, otherSubInterval.endDate?.day ?? 1);
172
+ // Check for overlap - intervals overlap if one starts before the other ends
173
+ return (subIntervalStart <= otherSubIntervalEnd &&
174
+ subIntervalEnd >= otherSubIntervalStart);
175
+ }) ?? [];
176
+ if (overlappingSubIntervals.length)
177
+ return 'Sub-intervals overlap';
178
+ return undefined;
179
+ });
180
+ return acc;
181
+ }, {}) ?? {});
182
+ }, [newDateFilter]);
183
+ const intervalIssues = (0, react_1.useMemo)(() => {
184
+ const ucFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);
185
+ // Helper function to get the next day in month/day format
186
+ const getNextDay = (month, day) => {
187
+ const date = new Date(2024, month - 1, day + 1); // Use leap year to handle Feb correctly
188
+ return {
189
+ month: date.getMonth() + 1,
190
+ day: date.getDate(),
191
+ };
192
+ };
193
+ // Helper to compare if two date objects are the same day
194
+ const isSameDay = (date1, date2) => {
195
+ return date1.month === date2.month && date1.day === date2.day;
196
+ };
197
+ // Helper to check if two days are adjacent (the second follows the first)
198
+ const areAdjacent = (day1, day2) => {
199
+ // Normal case: check if next day of day1 is day2
200
+ const nextDay = getNextDay(day1.month, day1.day);
201
+ if (isSameDay(nextDay, day2))
202
+ return true;
203
+ // Special case for February to March transition
204
+ // This handles both leap years (Feb 29 -> Mar 1) and non-leap years (Feb 28 -> Mar 1)
205
+ if (day1.month === 2 &&
206
+ (day1.day === 28 || day1.day === 29) &&
207
+ day2.month === 3 &&
208
+ day2.day === 1) {
209
+ return true;
210
+ }
211
+ // Handle month transitions for months with 30 days
212
+ if ([4, 6, 9, 11].includes(day1.month) &&
213
+ day1.day === 30 &&
214
+ day2.day === 1 &&
215
+ day2.month === day1.month + 1) {
216
+ return true;
217
+ }
218
+ // Handle month transitions for months with 31 days
219
+ if ([1, 3, 5, 7, 8, 10, 12].includes(day1.month) &&
220
+ day1.day === 31 &&
221
+ day2.day === 1 &&
222
+ (day2.month === day1.month + 1 ||
223
+ (day1.month === 12 && day2.month === 1))) {
224
+ return true;
225
+ }
226
+ return false;
227
+ };
228
+ return newDateFilter?.presetOptions?.map((interval, index) => {
229
+ if (!interval)
230
+ return 'Option is empty';
231
+ if (!interval.type)
232
+ return 'Option must have a type';
233
+ if ((interval.type === 'repeating' || interval.type === 'static') &&
234
+ !interval.label)
235
+ return `${ucFirst(interval.type)} intervals must have a label`;
236
+ // If interval label matches one of the default intervals, it must not
237
+ if ([
238
+ 'Week',
239
+ 'Month',
240
+ 'Year',
241
+ 'Last 7 days',
242
+ 'Last 30 days',
243
+ 'Last 90 days',
244
+ 'Last 6 months',
245
+ ].includes(interval.label ?? '')) {
246
+ return 'Cannot use a default interval label';
247
+ }
248
+ if (interval.type === 'repeating' || interval.type === 'static')
249
+ if (newDateFilter?.presetOptions?.filter((o, i) => o?.label === interval.label && i !== index).length)
250
+ return 'Duplicate label';
251
+ if (interval.type === 'week' &&
252
+ newDateFilter?.presetOptions?.filter((o, i) => o?.type === 'week' && i !== index).length)
253
+ return 'Only one week interval allowed';
254
+ if (interval.type === 'relative' &&
255
+ (newDateFilter?.presetOptions?.filter((o) => o?.type === 'relative' &&
256
+ o.unit === interval.unit &&
257
+ o.value === interval.value)?.length ?? 0) > 1)
258
+ return 'Duplicate relative interval';
259
+ if (interval.type === 'static') {
260
+ if (!interval.startDate ||
261
+ !interval.startDate.day ||
262
+ !interval.startDate.month)
263
+ return 'Must have a start date';
264
+ if (!interval.endDate ||
265
+ !interval.endDate.day ||
266
+ !interval.endDate.month)
267
+ return 'Must have an end date';
268
+ }
269
+ if (interval.type === 'relative') {
270
+ if (!interval.value)
271
+ return 'Must have a value';
272
+ if (typeof interval.value !== 'number' &&
273
+ isNaN(parseInt(interval.value)))
274
+ return 'Value must be an integer';
275
+ if (typeof interval.value !== 'number' && parseInt(interval.value) <= 0)
276
+ return 'Value must be positive';
277
+ if (!interval.unit)
278
+ return 'Must have a unit';
279
+ }
280
+ if (interval.type === 'repeating') {
281
+ if (!interval.loopDate ||
282
+ !interval.loopDate.day ||
283
+ !interval.loopDate.month)
284
+ return 'Must have a loop date';
285
+ if (!interval.subIntervals?.length)
286
+ return 'Must have sub-intervals';
287
+ if (subIntervalIssues[index]?.some((issue) => !!issue))
288
+ return 'Sub-intervals have issues';
289
+ // Verify subintervals don't overlap with each other
290
+ const subIntervals = interval.subIntervals?.filter((si) => !!si) || [];
291
+ // First, sort them by start date for validation
292
+ const sortedIntervals = [...subIntervals].sort((a, b) => {
293
+ const aDate = new Date(2024, a.startDate.month - 1, a.startDate.day);
294
+ const bDate = new Date(2024, b.startDate.month - 1, b.startDate.day);
295
+ return aDate.getTime() - bDate.getTime();
296
+ });
297
+ // Find the interval that starts on the loop date
298
+ const loopDate = interval.loopDate;
299
+ const startingIntervalIndex = sortedIntervals.findIndex((si) => si?.startDate?.month === loopDate.month &&
300
+ si?.startDate?.day === loopDate.day);
301
+ if (startingIntervalIndex === -1)
302
+ return 'No sub-interval starts on the loop date';
303
+ // Reorder the array to start with the loop date interval
304
+ const orderedIntervals = [
305
+ ...sortedIntervals.slice(startingIntervalIndex),
306
+ ...sortedIntervals.slice(0, startingIntervalIndex),
307
+ ];
308
+ // Check for contiguity and completeness
309
+ for (let i = 0; i < orderedIntervals.length - 1; i++) {
310
+ const current = orderedIntervals[i];
311
+ const next = orderedIntervals[i + 1];
312
+ if (!areAdjacent(current.endDate, next.startDate)) {
313
+ return `Gap between ${current.label} and ${next.label}`;
314
+ }
315
+ }
316
+ // Check if the last interval connects back to the first one
317
+ const last = orderedIntervals[orderedIntervals.length - 1];
318
+ const first = orderedIntervals[0];
319
+ if (!areAdjacent(last.endDate, first.startDate)) {
320
+ if (!(areAdjacent({ month: 12, day: 31 }, first.startDate) &&
321
+ areAdjacent(last.endDate, { month: 1, day: 1 }))) {
322
+ return `Gap between ${last.label} and ${first.label}`;
323
+ }
324
+ }
325
+ }
326
+ });
327
+ }, [newDateFilter, subIntervalIssues]);
328
+ const filteredTables = (0, react_1.useMemo)(() => {
329
+ return state.tables.filter((table) => {
330
+ return (selectedDashboard?.tenantKeys?.[0] === constants_1.SINGLE_TENANT ||
331
+ table.ownerTenantFields?.length === 0 ||
332
+ table.ownerTenantFields?.includes(selectedDashboard?.tenantKeys?.[0] ?? ''));
333
+ });
334
+ }, [state.tables, selectedDashboard?.tenantKeys]);
335
+ const months = (0, react_1.useRef)([
336
+ 'January',
337
+ 'February',
338
+ 'March',
339
+ 'April',
340
+ 'May',
341
+ 'June',
342
+ 'July',
343
+ 'August',
344
+ 'September',
345
+ 'October',
346
+ 'November',
347
+ 'December',
348
+ ]);
349
+ const monthlyInterval = (0, react_1.useMemo)(() => getDefaultInterval('Monthly'), [newDateFilter?.defaultPresetRanges]);
350
+ const yearlyInterval = (0, react_1.useMemo)(() => getDefaultInterval('Yearly'), [newDateFilter?.defaultPresetRanges]);
27
351
  (0, react_1.useEffect)(() => {
28
352
  if (!selectedDashboard) {
29
353
  return;
30
354
  }
31
- setSelectedDashboardName(selectedDashboard);
32
- setIsDateComparison(selectedDashboard.dateFilter?.comparison);
33
- setNewFilters(selectedDashboard.filters || []);
355
+ setValidationError([]);
356
+ setCurrentDashboardName(selectedDashboard.name);
357
+ setIsDateComparison(selectedDashboard?.dateFilter?.comparison ?? false);
358
+ setNewFilters(selectedDashboard?.filters ?? []);
34
359
  setNewDateFilter(selectedDashboard.dateFilter);
35
- setSelectedDashboardName(selectedDashboard.name);
360
+ setDisplaySubIntervals(selectedDashboard.dateFilter?.presetOptions?.map(() => false) ?? []);
36
361
  setShowDateFilter(!!selectedDashboard.dateFilter);
362
+ setInitialRange(selectedDashboard.dateFilter?.primaryRange ?? {
363
+ label: 'Last 30 days',
364
+ value: 'LAST_30_DAYS',
365
+ });
366
+ setFilterNameMap(selectedDashboard.filters.reduce((acc, filter) => {
367
+ acc[filter.label] = filter.label;
368
+ return acc;
369
+ }, {}));
37
370
  }, [selectedDashboard]);
371
+ const selectablePresetOptions = (0, react_1.useMemo)(() => {
372
+ return (0, dateRangePickerUtils_1.convertPresetOptionsToSelectableList)((newDateFilter?.presetOptions?.filter((option, index) => !!option && !intervalIssues?.[index]) ?? []), newDateFilter?.defaultPresetRanges ?? []);
373
+ }, [
374
+ newDateFilter?.presetOptions,
375
+ newDateFilter?.defaultPresetRanges,
376
+ intervalIssues,
377
+ ]);
378
+ const dashboardValidationError = (0, react_1.useMemo)(() => {
379
+ if (!currentDashboardName)
380
+ return 'Dashboard name cannot be empty';
381
+ if (newFilters?.some((f) => !f.label || !f.table || !f.field))
382
+ return 'Filters must have a label, table, and field';
383
+ if (newFilters
384
+ ?.map((f) => f.label)
385
+ .filter((label, index, self) => self.indexOf(label) !== index).length)
386
+ return 'Filters must have unique labels';
387
+ if (newDateFilter && (!newDateFilter?.label || !initialRange))
388
+ return 'Date filter must have a label and range';
389
+ if (intervalIssues?.some((i) => i))
390
+ return 'Date filter presets have issues';
391
+ if (!selectablePresetOptions?.find((option) => option.value === initialRange.value))
392
+ return 'Date filter must have a valid initial range';
393
+ if (newDateFilter?.defaultPresetRanges?.some((range) => range?.label === 'Yearly' && !range.loopStart))
394
+ return 'Yearly intervals must have a backwards cutoff date';
395
+ if (newDateFilter?.defaultPresetRanges?.some((range) => range?.label === 'Monthly' && !range.loopStart))
396
+ return 'Monthly intervals must have a backwards cutoff date';
397
+ // Ensure loopEnd is after loopStart
398
+ if (newDateFilter?.defaultPresetRanges?.some((range) => range?.label === 'Yearly' &&
399
+ range?.loopEnd &&
400
+ range?.loopStart &&
401
+ range.loopEnd <= range.loopStart))
402
+ return 'Yearly intervals must have an end date that occurs after the start date';
403
+ if (newDateFilter?.defaultPresetRanges?.some((range) => range?.label === 'Monthly' &&
404
+ range?.loopEnd &&
405
+ range?.loopStart &&
406
+ range.loopEnd <= range.loopStart))
407
+ return 'Monthly intervals must have an end date that occurs after the start date';
408
+ }, [
409
+ currentDashboardName,
410
+ newFilters,
411
+ newDateFilter,
412
+ initialRange,
413
+ intervalIssues,
414
+ selectablePresetOptions,
415
+ ]);
38
416
  const handleAddFilter = async () => {
39
417
  setNewFilters([...newFilters, { label: '' }]);
40
418
  };
419
+ const normalizeFieldName = (fieldName) => {
420
+ return (fieldName
421
+ ?.split('_')
422
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
423
+ .join(' ') ?? '');
424
+ };
41
425
  const handleSubmitDashboardChanges = async () => {
42
- if (!selectedDashboardName ||
43
- newFilters.some((filter) => !filter.label) ||
44
- (newDateFilter &&
45
- Object.keys(newDateFilter).length &&
46
- !newDateFilter.label)) {
47
- alert('Empty fields');
48
- return;
49
- }
50
- if (newFilters.filter((elem) => !elem.field).length) {
51
- alert(`no filter field for: ${newFilters.filter((elem) => !elem.field)[0].label}`);
426
+ const validationErrorMessages = (0, validation_1.validateDashboard)(newFilters, dashNames, currentDashboardName, newDateFilter ? { ...newDateFilter, comparison: isDateComparison } : null, { ...selectedDashboard, name: currentDashboardName });
427
+ if (validationErrorMessages.length !== 0) {
428
+ setValidationError(validationErrorMessages);
52
429
  return;
53
430
  }
54
431
  const updatedFilters = newFilters.map((filter) => {
55
- const table = state.tables.find((table) => table.name === filter.table);
56
- const filterType = (0, Admin_1.getPostgresBasicType)(table.columns.find((col) => col.name === filter.field));
432
+ const table = filteredTables.find((table) => table?.name === filter?.table);
433
+ const filterType = (0, Admin_1.getPostgresBasicType)(table.columns.find((col) => col?.name === filter?.field));
57
434
  return {
58
435
  table: filter.table,
59
436
  field: filter.field,
60
437
  labelField: filter.field,
61
438
  label: filter.label,
439
+ oldLabel: Object.entries(filterNameMap).find(([oldLabel, newLabel]) => newLabel === filter.label && oldLabel !== filter.label)?.[0],
62
440
  filterType,
63
441
  stringFilterType: filter.stringFilterType,
64
442
  };
65
443
  });
66
- if (dashNames &&
67
- dashNames.length > 0 &&
68
- dashNames.some((dashName) => dashName.name === selectedDashboardName &&
69
- selectedDashboardName !== selectedDashboard.name)) {
70
- alert('Dashboard name already taken!');
71
- return;
72
- }
73
- const fieldsSet = new Set();
74
- const hasDuplicateField = updatedFilters.some((filter) => {
75
- if (fieldsSet.has(filter.field)) {
76
- return true;
77
- }
78
- else {
79
- fieldsSet.add(filter.field);
80
- return false;
81
- }
82
- });
83
- if (hasDuplicateField ||
84
- (newDateFilter &&
85
- Object.keys(newDateFilter).length > 0 &&
86
- updatedFilters.some((filter) => filter.filterType === 'date'))) {
87
- alert('Maximum of one filter per field');
88
- return;
89
- }
90
- let allValid = true;
91
- updatedFilters.forEach((filter) => {
92
- if (filter.filterType !== 'string' && filter.filterType !== 'date') {
93
- allValid = false;
94
- console.error(`Invalid filterType found: ${filter.filterType}`);
95
- }
96
- });
97
- if (!allValid) {
98
- alert('We only support string and date filters.');
99
- return;
100
- }
101
- const filterProblems = [];
102
- if (newDateFilter) {
103
- data.newQueries.forEach((chart) => {
104
- if (!chart.dateField ||
105
- !chart.dateField.table ||
106
- !chart.dateField.field) {
107
- filterProblems.push({
108
- chart: chart.name,
109
- filter: `${newDateFilter.label} (Date filter)`,
110
- });
111
- }
112
- if (chart.chartType === 'pie' && isDateComparison) {
113
- filterProblems.push({
114
- chart: chart.name,
115
- filter: `${newDateFilter.label} (Date comparison)`,
116
- });
117
- }
118
- });
119
- }
120
- updatedFilters.forEach((filter) => {
121
- data.newQueries.forEach((chart) => {
122
- const chartTable = chart.referencedTables.find((table) => table === filter.table);
123
- if (!chartTable) {
124
- filterProblems.push({ chart: chart.name, filter: filter.label });
125
- }
126
- });
127
- });
128
- if (filterProblems.length > 0) {
129
- alert(`The following filters are not applicable to the following charts:\n\n${filterProblems.map((problem) => `${problem.filter} - ${problem.chart}`).join('\n')}\n\nPlease update the charts or remove the filters.`);
130
- return;
131
- }
132
- const url = `${constants_1.QUILL_SERVER}/dashfilter/${client._id}/`;
133
- const body = {
134
- newDashboardName: selectedDashboardName.trim(),
135
- filters: updatedFilters,
444
+ await updateDashboard(selectedDashboardName, {
445
+ newName: currentDashboardName,
446
+ filters: updatedFilters.map((filter) => {
447
+ return {
448
+ ...filter,
449
+ filterType: filter.filterType,
450
+ dashboardName: currentDashboardName,
451
+ options: [],
452
+ };
453
+ }),
136
454
  dateFilter: newDateFilter
137
455
  ? {
138
456
  ...newDateFilter,
139
457
  comparison: isDateComparison,
140
458
  primaryRange: initialRange,
459
+ presetOptions: newDateFilter.presetOptions
460
+ ?.map((interval) => {
461
+ if (!interval)
462
+ return undefined;
463
+ if (interval.type === 'repeating') {
464
+ return {
465
+ ...interval,
466
+ subIntervals: interval.subIntervals?.map((subInterval) => {
467
+ if (!subInterval)
468
+ return undefined;
469
+ return {
470
+ ...subInterval,
471
+ startDate: subInterval.startDate,
472
+ endDate: subInterval.endDate,
473
+ };
474
+ }),
475
+ };
476
+ }
477
+ if (interval.type === 'static') {
478
+ return {
479
+ ...interval,
480
+ startDate: interval.startDate,
481
+ endDate: interval.endDate,
482
+ };
483
+ }
484
+ if (interval.type === 'relative') {
485
+ return {
486
+ ...interval,
487
+ value: typeof interval.value === 'string'
488
+ ? parseInt(interval.value)
489
+ : interval.value,
490
+ };
491
+ }
492
+ return interval;
493
+ })
494
+ .filter((interval) => !!interval),
141
495
  }
142
- : null,
143
- name: selectedDashboard.name
144
- ? selectedDashboard.name.trim()
145
- : selectedDashboardName.trim(),
146
- databaseType: state.client.databaseType,
147
- };
148
- const headers = {
149
- 'Content-Type': 'application/json',
150
- Authorization: `Bearer `,
151
- };
152
- try {
153
- const response = await fetch(url, {
154
- method: 'POST',
155
- headers: headers,
156
- body: JSON.stringify(body),
157
- });
158
- await onSave(selectedDashboardName);
159
- setIsOpen(false);
160
- }
161
- catch (e) {
162
- console.log('error');
163
- }
496
+ : undefined,
497
+ // sectionOrder,
498
+ });
499
+ await onSave(currentDashboardName);
500
+ setIsOpen(false);
164
501
  };
165
502
  const handleDeleteFilter = (filter) => {
503
+ // When a filter is deleted, we don't have any easy method of removing its entry in
504
+ // the filterMap on the actual dashboard item. We'll just leave it there for now.
505
+ delete filterNameMap[filter.label];
166
506
  setNewFilters(newFilters.filter((f) => f !== filter));
167
507
  };
168
- const handleDeleteDateFilter = async () => {
508
+ const handleDeleteDateFilter = () => {
169
509
  setShowDateFilter(false);
170
- setNewDateFilter(null);
510
+ setNewDateFilter(undefined);
171
511
  };
172
- const handleAddDateFilter = async () => {
512
+ const handleAddDateFilter = () => {
173
513
  setShowDateFilter(true);
174
- setNewDateFilter({ label: null });
514
+ setNewDateFilter({
515
+ label: 'Date',
516
+ defaultPresetRanges: [
517
+ { label: 'This week' },
518
+ { label: 'This month' },
519
+ { label: 'This year' },
520
+ { label: 'Last 7 days' },
521
+ { label: 'Last 30 days' },
522
+ { label: 'Last 90 days' },
523
+ { label: 'Last 6 months' },
524
+ ],
525
+ });
526
+ };
527
+ const handleAddInterval = () => {
528
+ setNewDateFilter({
529
+ ...newDateFilter,
530
+ presetOptions: [
531
+ ...(newDateFilter?.presetOptions ?? []),
532
+ emptyInterval['static'],
533
+ ],
534
+ });
535
+ setDisplaySubIntervals([...displaySubIntervals, false]);
536
+ };
537
+ const handleDeleteInterval = (index) => {
538
+ const updatedOptions = newDateFilter?.presetOptions?.filter((_, i) => i !== index) ?? [];
539
+ setNewDateFilter({
540
+ ...newDateFilter,
541
+ presetOptions: updatedOptions,
542
+ });
543
+ setDisplaySubIntervals(displaySubIntervals.filter((_, i) => i !== index));
544
+ };
545
+ const handleAddSubInterval = (index) => {
546
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => index === i
547
+ ? {
548
+ ...o,
549
+ subIntervals: [
550
+ ...(o.subIntervals ?? []),
551
+ emptyInterval['static'],
552
+ ],
553
+ }
554
+ : o) ?? [];
555
+ setNewDateFilter({
556
+ ...newDateFilter,
557
+ presetOptions: updatedOptions,
558
+ });
559
+ };
560
+ const handleDeleteSubInterval = (index, subIndex) => {
561
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => index === i
562
+ ? {
563
+ ...o,
564
+ subIntervals: o.subIntervals?.filter((_, j) => j !== subIndex),
565
+ }
566
+ : o) ?? [];
567
+ setNewDateFilter({
568
+ ...newDateFilter,
569
+ presetOptions: updatedOptions,
570
+ });
175
571
  };
176
572
  const handleDeleteDashboard = async () => {
177
573
  if (confirm('Are you sure? This action cannot be undone.')) {
178
- const URL = `${constants_1.QUILL_SERVER}/dashboard/${selectedDashboard.name}`;
179
- await fetch(URL, {
180
- method: 'DELETE',
181
- headers: { 'Content-Type': 'application/json' },
182
- body: JSON.stringify({
183
- clientId: client._id,
184
- databaseType: state.client.databaseType,
185
- dashboardName: selectedDashboard.name,
186
- }),
187
- });
574
+ await deleteDashboard(selectedDashboardName);
575
+ onSave((dashboards?.filter((d) => d.name !== constants_1.SAVED_QUERIES_DASHBOARD &&
576
+ d.name !== selectedDashboardName)?.[0]?.name ??
577
+ (state.client?.defaultDashboard?.name &&
578
+ state.client?.defaultDashboard?.name !== selectedDashboardName))
579
+ ? state.client?.defaultDashboard?.name
580
+ : null);
188
581
  setIsOpen(false);
189
582
  setNewFilters([]);
190
- await onSave();
191
583
  }
192
584
  };
193
- return ((0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, close: () => {
585
+ return ((0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, onClose: () => {
586
+ setValidationError([]);
194
587
  setIsOpen(false);
195
- setSelectedDashboardName(selectedDashboard);
196
- setIsDateComparison(selectedDashboard.dateFilter?.comparison);
197
- setNewFilters(selectedDashboard.filters || []);
198
- setNewDateFilter(selectedDashboard.dateFilter);
199
- setSelectedDashboardName(selectedDashboard.name);
200
- setShowDateFilter(!!selectedDashboard.dateFilter);
588
+ setIsDateComparison(selectedDashboard?.dateFilter?.comparison ?? false);
589
+ setNewFilters(selectedDashboard?.filters ?? []);
590
+ setNewDateFilter(selectedDashboard?.dateFilter ?? undefined);
591
+ setCurrentDashboardName(selectedDashboardName);
592
+ setShowDateFilter(!!selectedDashboard?.dateFilter);
201
593
  }, style: {
202
594
  minWidth: '814px',
203
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
204
- display: 'flex',
205
- gap: 16,
206
- flexDirection: 'column',
207
- width: '100%',
208
- height: '100%',
209
- maxHeight: '100%',
210
- overflowY: 'auto',
211
- }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Manage dashboard" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Name" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { value: selectedDashboardName, onChange: (e) => setSelectedDashboardName(e.target.value) }) })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
212
- display: 'flex',
213
- flexDirection: 'column',
214
- gap: '10px',
215
- }, children: [(0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Date Filter" }), showDateFilter && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", { style: {
216
- display: 'flex',
217
- flexDirection: 'row',
218
- gap: '10px',
219
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)("div", { style: {
595
+ }, children: (0, jsx_runtime_1.jsx)(UiComponents_1.OverflowContainer, { children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("div", { style: {
596
+ display: 'flex',
597
+ gap: 16,
598
+ flexDirection: 'column',
599
+ width: '100%',
600
+ height: '100%',
601
+ maxHeight: '100%',
602
+ // overflowY: 'auto',
603
+ }, children: [(0, jsx_runtime_1.jsx)(HeaderComponent, { label: "Manage dashboard" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Name" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { width: "230px", value: currentDashboardName, onChange: (e) => setCurrentDashboardName(e.target.value) }) })] }), (state.client?.allTenantTypes?.length ?? 1) <= 1 ? null : ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { tooltip: "Data coming into this dashboard is filtered by this singular tenant. Reports may only reference virtual tables owned by this tenant (or owned by no tenants). This is only selectable while creating a new dashboard", children: "Dashboard Owner" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SelectComponent, { onChange: () => { }, value: selectedDashboard?.tenantKeys?.[0] ?? '', options: state.client?.allTenantTypes?.map((tenant) => {
604
+ return {
605
+ label: tenant.name,
606
+ value: tenant.tenantField,
607
+ };
608
+ }), disabled: true }) })] })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
609
+ display: 'flex',
610
+ flexDirection: 'column',
611
+ gap: '10px',
612
+ }, children: [(0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Date Filter" }), showDateFilter && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: {
613
+ display: 'flex',
614
+ flexDirection: 'row',
615
+ gap: '10px',
616
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)("div", { style: {
617
+ display: 'flex',
618
+ flexDirection: 'row',
619
+ alignItems: 'center',
620
+ }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { value: newDateFilter?.label || '', width: "230px", onChange: (e) => {
621
+ setNewDateFilter({
622
+ ...newDateFilter,
623
+ label: e.target.value,
624
+ });
625
+ } }) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
626
+ display: 'flex',
627
+ flexDirection: 'row',
628
+ gap: '10px',
629
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Initial Range" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: initialRange.value, onChange: (e) => {
630
+ setInitialRange(
631
+ // InitialDateRangeOptions.find(
632
+ // (table) => table.value === e,
633
+ // ) ?? initialRange,
634
+ selectablePresetOptions.find((option) => option.value === e) ??
635
+ initialRange);
636
+ }, options: selectablePresetOptions, theme: Admin_1.defaultTheme, hideEmptyOption: true })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
637
+ display: 'flex',
638
+ flexDirection: 'row',
639
+ gap: '10px',
640
+ width: '100%',
641
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
642
+ display: 'flex',
643
+ flexDirection: 'column',
644
+ width: '100%',
645
+ justifyContent: 'flex-end',
646
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
647
+ display: 'flex',
648
+ flexDirection: 'row',
649
+ gap: 10,
650
+ width: '100%',
651
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
652
+ display: 'flex',
653
+ flexDirection: 'column',
654
+ justifyContent: 'center',
655
+ height: '100%',
656
+ minWidth: 200,
657
+ maxWidth: 200,
658
+ width: 200,
659
+ } }), (0, jsx_runtime_1.jsx)("div", { style: {
660
+ width: '100%',
661
+ display: 'flex',
662
+ justifyContent: 'flex-end',
663
+ }, children: (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteDateFilter(), style: {
664
+ height: 38,
665
+ width: 38,
666
+ alignItems: 'center',
667
+ justifyContent: 'flex-end',
668
+ display: 'flex',
669
+ cursor: 'pointer',
670
+ }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) }) })] }) }) })] }), (0, jsx_runtime_1.jsx)(QuillPopover_1.QuillPopover, { style: {
671
+ width: 230,
672
+ marginTop: -8,
673
+ display: 'none',
674
+ }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
220
675
  display: 'flex',
221
- flexDirection: 'row',
222
- alignItems: 'center',
223
- }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { value: newDateFilter?.label || '', onChange: (e) => {
224
- setNewDateFilter({
225
- ...newDateFilter,
226
- label: e.target.value,
227
- });
228
- } }) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
229
- display: 'flex',
230
- flexDirection: 'row',
231
- gap: '10px',
232
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column' }, children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Initial Range" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: initialRange.label, onChange: (e) => {
233
- setInitialRange(constants_1.InitialDateRangeOptions.find((table) => table.label === e) ?? initialRange);
234
- }, options: constants_1.InitialDateRangeOptions.map((table) => {
235
- return { label: table.label, value: table.label };
236
- }), theme: Admin_1.defaultTheme })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
237
- display: 'flex',
676
+ flexDirection: 'column',
677
+ fontFamily: Admin_1.defaultTheme.fontFamily,
678
+ gap: 8,
679
+ }, children: [(0, jsx_runtime_1.jsx)("h3", { style: {
680
+ fontSize: 14,
681
+ fontWeight: 600,
682
+ color: Admin_1.defaultTheme.primaryTextColor,
683
+ }, children: "Recurring" }), (0, jsx_runtime_1.jsxs)("div", { style: {
684
+ display: 'flex',
685
+ flexDirection: 'row',
686
+ gap: 8,
687
+ alignItems: 'center',
688
+ // justifyContent: 'space-between',
689
+ marginTop: yearlyInterval ? -9.5 : 0,
690
+ marginBottom: yearlyInterval ? 0 : 9.5,
691
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
692
+ display: 'flex',
693
+ alignItems: 'center',
694
+ gap: 8,
695
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!yearlyInterval, onChange: (e) => {
696
+ assignDefaultInterval('Yearly', e.target.checked, new Date(new Date().getFullYear() - 1, 0, 1), new Date(new Date().getFullYear(), 11, 31));
697
+ } }), (0, jsx_runtime_1.jsx)("div", { children: "Yearly (2023, 2024, 2025, ...)" })] }), !!yearlyInterval && ((0, jsx_runtime_1.jsxs)("div", { style: {
698
+ display: 'flex',
699
+ flexDirection: 'row',
700
+ gap: 2,
701
+ alignItems: 'center',
702
+ marginLeft: 26,
703
+ }, children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { value: yearlyInterval?.loopStart
704
+ ?.getFullYear()
705
+ .toString() ?? '', placeholder: "Start Year", onChange: (e) => {
706
+ const year = parseInt(e.target.value);
707
+ assignDefaultInterval('Yearly', true, new Date(year, 0, 1), yearlyInterval?.loopEnd);
708
+ }, width: "78px", number: true, max: 9999, min: 0, step: 1 }), (0, jsx_runtime_1.jsx)("div", { children: "-" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { value: yearlyInterval?.loopEnd
709
+ ?.getFullYear()
710
+ .toString() ?? '', placeholder: "End Year", onChange: (e) => {
711
+ const year = parseInt(e.target.value);
712
+ assignDefaultInterval('Yearly', true, yearlyInterval?.loopStart, new Date(year, 11, 31));
713
+ }, width: "78px", number: true, max: 9999, min: 0, step: 1 })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
714
+ display: 'flex',
715
+ flexDirection: 'row',
716
+ gap: 8,
717
+ alignItems: 'center',
718
+ justifyContent: 'space-between',
719
+ marginTop: monthlyInterval ? -6.5 : 3,
720
+ marginBottom: monthlyInterval ? 0 : 9.5,
721
+ width: '100%',
722
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
723
+ display: 'flex',
724
+ alignItems: 'center',
725
+ gap: 8,
726
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!monthlyInterval, onChange: (e) => {
727
+ // Set date to current month - 12 months
728
+ assignDefaultInterval('Monthly', e.target.checked, new Date(new Date().getFullYear() - 1, new Date().getMonth(), 1), new Date(new Date().getFullYear(), new Date().getMonth(), 1));
729
+ } }), (0, jsx_runtime_1.jsx)("div", { children: "Monthly (Jan 2025, Feb 2025, ...)" })] }), monthlyInterval && ((0, jsx_runtime_1.jsxs)("div", { style: {
730
+ display: 'flex',
731
+ flexDirection: 'row',
732
+ gap: 2,
733
+ alignItems: 'center',
734
+ }, children: [(0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { value: monthlyInterval?.loopStart
735
+ ?.getMonth()
736
+ .toString() ?? '', onChange: (e) => {
737
+ const month = parseInt(e.target.value);
738
+ assignDefaultInterval('Monthly', true, new Date(monthlyInterval?.loopStart?.getFullYear() ??
739
+ 2025, month, 1), monthlyInterval?.loopEnd);
740
+ }, options: Array.from({ length: 12 }, (_, i) => ({
741
+ label: months.current[i],
742
+ value: i.toString(),
743
+ })), width: 120, hideEmptyOption: true }), (0, jsx_runtime_1.jsx)(TextInputPrimitive_1.default, { value: monthlyInterval?.loopStart
744
+ ?.getFullYear()
745
+ .toString() ?? '', placeholder: "Start Year", onChange: (e) => {
746
+ const year = parseInt(e.target.value);
747
+ assignDefaultInterval('Monthly', true, new Date(year, monthlyInterval?.loopStart?.getMonth() ??
748
+ 0, 1), monthlyInterval?.loopEnd);
749
+ }, width: "78px", number: true, max: 9999, min: 0, step: 1 }), (0, jsx_runtime_1.jsx)("div", { children: "-" }), (0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { value: monthlyInterval?.loopEnd
750
+ ?.getMonth()
751
+ .toString() ?? '', onChange: (e) => {
752
+ const month = parseInt(e.target.value);
753
+ assignDefaultInterval('Monthly', true, monthlyInterval?.loopStart, new Date(monthlyInterval?.loopEnd?.getFullYear() ??
754
+ 2025, month, 1));
755
+ }, options: Array.from({ length: 12 }, (_, i) => ({
756
+ label: months.current[i],
757
+ value: i.toString(),
758
+ })), width: 120, hideEmptyOption: true }), (0, jsx_runtime_1.jsx)(TextInputPrimitive_1.default, { value: monthlyInterval?.loopEnd
759
+ ?.getFullYear()
760
+ .toString() ?? '', placeholder: "End Year", onChange: (e) => {
761
+ const year = parseInt(e.target.value);
762
+ assignDefaultInterval('Monthly', true, monthlyInterval?.loopStart, new Date(year, monthlyInterval?.loopEnd?.getMonth() ?? 0, 1));
763
+ }, width: "78px", number: true, max: 9999, min: 0, step: 1 })] }))] }), (0, jsx_runtime_1.jsx)("h3", { style: {
764
+ fontSize: 14,
765
+ fontWeight: 600,
766
+ color: Admin_1.defaultTheme.primaryTextColor,
767
+ }, children: "Standard" }), (0, jsx_runtime_1.jsxs)("div", { style: {
768
+ display: 'flex',
769
+ flexDirection: 'row',
770
+ gap: 8,
771
+ alignItems: 'center',
772
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('This week'), onChange: (e) => {
773
+ assignDefaultInterval('This week', e.target.checked);
774
+ } }), "This week"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
775
+ display: 'flex',
776
+ flexDirection: 'row',
777
+ gap: 8,
778
+ alignItems: 'center',
779
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('This month'), onChange: (e) => {
780
+ assignDefaultInterval('This month', e.target.checked);
781
+ } }), "This month"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
782
+ display: 'flex',
783
+ flexDirection: 'row',
784
+ gap: 8,
785
+ alignItems: 'center',
786
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('This year'), onChange: (e) => {
787
+ assignDefaultInterval('This year', e.target.checked);
788
+ } }), "This year"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
789
+ display: 'flex',
790
+ flexDirection: 'row',
791
+ gap: 8,
792
+ alignItems: 'center',
793
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('Last 7 days'), onChange: (e) => {
794
+ assignDefaultInterval('Last 7 days', e.target.checked);
795
+ } }), "Last 7 days"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
796
+ display: 'flex',
797
+ flexDirection: 'row',
798
+ gap: 8,
799
+ alignItems: 'center',
800
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('Last 30 days'), onChange: (e) => {
801
+ assignDefaultInterval('Last 30 days', e.target.checked);
802
+ } }), "Last 30 days"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
803
+ display: 'flex',
804
+ flexDirection: 'row',
805
+ gap: 8,
806
+ alignItems: 'center',
807
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('Last 90 days'), onChange: (e) => {
808
+ assignDefaultInterval('Last 90 days', e.target.checked);
809
+ } }), "Last 90 days"] }), (0, jsx_runtime_1.jsxs)("div", { style: {
810
+ display: 'flex',
811
+ flexDirection: 'row',
812
+ gap: 8,
813
+ alignItems: 'center',
814
+ }, children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", style: { width: 16, height: 16 }, checked: !!getDefaultInterval('Last 6 months'), onChange: (e) => {
815
+ assignDefaultInterval('Last 6 months', e.target.checked);
816
+ } }), "Last 6 months"] })] }) })] })), !showDateFilter && ((0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddDateFilter, label: "Add date filter +" }) })), newDateFilter && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", { style: {
817
+ // display: 'flex',
818
+ display: 'none',
238
819
  flexDirection: 'row',
239
- gap: '10px',
240
- width: '100%',
241
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
820
+ gap: '4px',
821
+ userSelect: 'none',
822
+ cursor: 'pointer',
823
+ width: 'fit-content',
824
+ }, onClick: () => setShowCustomIntervals(!showCustomIntervals), children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Custom Date Filter Presets" }), showCustomIntervals ? ((0, jsx_runtime_1.jsx)(DownChevronIcon_1.default, { style: {
825
+ color: '#4C5462',
826
+ marginBottom: -2,
827
+ marginTop: 2,
828
+ } })) : ((0, jsx_runtime_1.jsx)(RightChevronIcon_1.default, { style: {
829
+ color: '#4C5462',
830
+ marginBottom: -2,
831
+ marginTop: 2,
832
+ } }))] }) })), showCustomIntervals && newDateFilter && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [newDateFilter?.presetOptions?.map((interval, index) => !interval ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
242
833
  display: 'flex',
243
834
  flexDirection: 'column',
244
- width: '100%',
245
- }, children: [(0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Date Comparison" }), (0, jsx_runtime_1.jsxs)("div", { style: {
835
+ gap: '10px',
836
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
246
837
  display: 'flex',
247
838
  flexDirection: 'row',
248
- gap: 10,
249
- width: '100%',
250
- }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
839
+ gap: '10px',
840
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
841
+ display: 'flex',
842
+ flexDirection: 'column',
843
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { value: interval.label ?? '', placeholder: interval.type === 'week'
844
+ ? 'Week'
845
+ : interval.type === 'relative'
846
+ ? 'Last ' +
847
+ (interval.value === 1
848
+ ? ''
849
+ : interval.value + ' ') +
850
+ (interval.value === 1
851
+ ? interval.unit.substring(0, interval.unit.length - 1)
852
+ : interval.unit)
853
+ : 'Label', width: "230px", onChange: (e) => {
854
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
855
+ return index === i
856
+ ? { ...o, label: e.target.value }
857
+ : o;
858
+ }) ?? [];
859
+ setNewDateFilter({
860
+ ...newDateFilter,
861
+ presetOptions: updatedOptions,
862
+ });
863
+ } })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
864
+ display: 'flex',
865
+ flexDirection: 'column',
866
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Type" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: interval.type, options: intervalTypeOptions, onChange: (e) => {
867
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
868
+ return index === i
869
+ ? emptyInterval[e]
870
+ : o;
871
+ }) ?? [];
872
+ setNewDateFilter({
873
+ ...newDateFilter,
874
+ presetOptions: updatedOptions,
875
+ });
876
+ }, theme: Admin_1.defaultTheme, hideEmptyOption: true })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
877
+ display: 'flex',
878
+ flexDirection: 'column',
879
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Value" }), interval.type === 'week' && ((0, jsx_runtime_1.jsx)("div", { style: { width: 200, visibility: 'hidden' } })), interval.type === 'relative' && ((0, jsx_runtime_1.jsxs)("div", { style: {
880
+ display: 'flex',
881
+ flexDirection: 'row',
882
+ gap: 10,
883
+ }, children: [(0, jsx_runtime_1.jsx)(TextInputComponent, { value: interval.value?.toString() ?? '0', width: "70px", onChange: (e) => {
884
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
885
+ return index === i
886
+ ? { ...o, value: e.target.value }
887
+ : o;
888
+ }) ?? [];
889
+ setNewDateFilter({
890
+ ...newDateFilter,
891
+ presetOptions: updatedOptions,
892
+ });
893
+ }, style: {
894
+ zIndex: 1,
895
+ } }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: interval.unit ?? 'days', options: [
896
+ {
897
+ label: interval.value?.toString() === '1'
898
+ ? 'day'
899
+ : 'days',
900
+ value: 'days',
901
+ },
902
+ {
903
+ label: interval.value?.toString() === '1'
904
+ ? 'week'
905
+ : 'weeks',
906
+ value: 'weeks',
907
+ },
908
+ {
909
+ label: interval.value?.toString() === '1'
910
+ ? 'month'
911
+ : 'months',
912
+ value: 'months',
913
+ },
914
+ {
915
+ label: interval.value?.toString() === '1'
916
+ ? 'year'
917
+ : 'years',
918
+ value: 'years',
919
+ },
920
+ ], onChange: (e) => {
921
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
922
+ return index === i
923
+ ? { ...o, unit: e }
924
+ : o;
925
+ }) ?? [];
926
+ setNewDateFilter({
927
+ ...newDateFilter,
928
+ presetOptions: updatedOptions,
929
+ });
930
+ }, theme: Admin_1.defaultTheme, hideEmptyOption: true, style: {
931
+ width: 120,
932
+ maxWidth: 120,
933
+ minWidth: 120,
934
+ } })] })), interval.type === 'repeating' && ((0, jsx_runtime_1.jsx)(SingleDatePicker_1.SingleDatePicker, { selectedDate: interval.loopDate
935
+ ? (0, date_fns_1.set)(new Date(), {
936
+ date: interval.loopDate.day,
937
+ month: (interval.loopDate.month ?? 1) - 1,
938
+ year: 2024,
939
+ })
940
+ : undefined, onChangeDate: (date) => {
941
+ if (!date)
942
+ return;
943
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
944
+ return index === i
945
+ ? {
946
+ ...o,
947
+ loopDate: {
948
+ day: date.getDate(),
949
+ month: date.getMonth() + 1,
950
+ },
951
+ }
952
+ : o;
953
+ }) ?? [];
954
+ setNewDateFilter({
955
+ ...newDateFilter,
956
+ presetOptions: updatedOptions,
957
+ });
958
+ }, disabled: false, style: {
959
+ width: 200,
960
+ minWidth: 200,
961
+ } })), interval.type === 'static' && ((0, jsx_runtime_1.jsx)(YearlessDateRangePicker_1.QuillYearlessDateRangePicker, { dateRange: {
962
+ startDate: interval.startDate
963
+ ? (0, date_fns_1.set)(new Date(), {
964
+ date: interval.startDate.day,
965
+ month: (interval.startDate.month ?? 1) - 1,
966
+ year: 2024,
967
+ })
968
+ : undefined,
969
+ endDate: interval.endDate
970
+ ? (0, date_fns_1.set)(new Date(), {
971
+ date: interval.endDate.day,
972
+ month: (interval.endDate.month ?? 1) - 1,
973
+ year: 2024,
974
+ })
975
+ : undefined,
976
+ }, onChangeDateRange: (value) => {
977
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
978
+ return index === i
979
+ ? {
980
+ ...o,
981
+ startDate: value.startDate
982
+ ? {
983
+ day: value.startDate.getDate(),
984
+ month: value.startDate.getMonth() +
985
+ 1,
986
+ }
987
+ : undefined,
988
+ endDate: value.endDate
989
+ ? {
990
+ day: value.endDate.getDate(),
991
+ month: value.endDate.getMonth() +
992
+ 1,
993
+ }
994
+ : undefined,
995
+ }
996
+ : o;
997
+ }) ?? [];
998
+ setNewDateFilter({
999
+ ...newDateFilter,
1000
+ presetOptions: updatedOptions,
1001
+ });
1002
+ } }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
251
1003
  display: 'flex',
252
1004
  flexDirection: 'column',
253
- justifyContent: 'center',
254
1005
  height: '100%',
255
- minWidth: 200,
256
- maxWidth: 200,
257
- width: 200,
258
- }, children: (0, jsx_runtime_1.jsx)(TogglePrimitive_1.default, { value: isDateComparison, onClick: () => {
259
- setIsDateComparison((isDateComparison) => !isDateComparison);
260
- } }) }), (0, jsx_runtime_1.jsx)("div", { style: {
1006
+ }, children: [index === 0 && ((0, jsx_runtime_1.jsx)("div", { style: { visibility: 'hidden' }, children: (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Inter" }) })), interval.type !==
1007
+ 'repeating' ? null : displaySubIntervals[index] ? ((0, jsx_runtime_1.jsx)(DownChevronIcon_1.default, { style: {
1008
+ color: '#4C5462',
1009
+ // center vertically
1010
+ alignItems: 'center',
1011
+ display: 'flex',
1012
+ marginTop: 10,
1013
+ }, onClick: () => {
1014
+ const updatedDisplay = displaySubIntervals.map((d, i) => index === i ? !d : d);
1015
+ setDisplaySubIntervals(updatedDisplay);
1016
+ } })) : ((0, jsx_runtime_1.jsx)(RightChevronIcon_1.default, { style: {
1017
+ color: '#4C5462',
1018
+ // center vertically
1019
+ alignItems: 'center',
1020
+ display: 'flex',
1021
+ marginTop: 10,
1022
+ }, onClick: () => {
1023
+ const updatedDisplay = displaySubIntervals.map((d, i) => index === i ? !d : d);
1024
+ setDisplaySubIntervals(updatedDisplay);
1025
+ } }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1026
+ flexGrow: 1,
1027
+ display: 'flex',
1028
+ flexDirection: 'row',
1029
+ justifyContent: 'flex-end',
1030
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1031
+ display: 'flex',
1032
+ flexDirection: 'column',
1033
+ marginLeft: 'auto',
1034
+ justifySelf: 'flex-end',
1035
+ }, children: [index === 0 && ((0, jsx_runtime_1.jsx)("div", { style: { visibility: 'hidden' }, children: (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Inter" }) })), (0, jsx_runtime_1.jsx)(QuillToolTipPortal_1.QuillToolTipPortal, { containerStyle: {
1036
+ visibility: intervalIssues?.[index]
1037
+ ? 'visible'
1038
+ : 'hidden',
1039
+ }, text: intervalIssues?.[index], children: (0, jsx_runtime_1.jsx)(ExclamationFilledIcon_1.default, { height: 28, width: 28, style: {
1040
+ color: '#dc143c',
1041
+ marginTop: 6,
1042
+ marginLeft: 'auto',
1043
+ // Push to end of row
1044
+ display: 'flex',
1045
+ } }) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
1046
+ display: 'flex',
1047
+ justifyContent: 'flex-end',
1048
+ }, children: (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteInterval(index), style: {
1049
+ height: 38,
1050
+ width: 38,
1051
+ alignItems: 'center',
1052
+ justifyContent: 'flex-end',
1053
+ display: 'flex',
1054
+ cursor: 'pointer',
1055
+ marginTop: index === 0 ? 25 : 2,
1056
+ }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) }) })] })] }), displaySubIntervals[index] &&
1057
+ interval.type === 'repeating' && ((0, jsx_runtime_1.jsxs)("div", { style: {
1058
+ display: 'flex',
1059
+ flexDirection: 'column',
1060
+ gap: '10px',
1061
+ marginLeft: 30,
1062
+ width: 'calc(100% - 30px)',
1063
+ }, children: [interval.subIntervals?.map((subInterval, subIndex) => !subInterval ? null : ((0, jsx_runtime_1.jsxs)("div", { style: {
1064
+ display: 'flex',
1065
+ flexDirection: 'row',
1066
+ gap: '10px',
261
1067
  width: '100%',
1068
+ }, children: [(0, jsx_runtime_1.jsx)(YearlessDateRangePicker_1.QuillYearlessDateRangePicker, { dateRange: {
1069
+ startDate: subInterval.startDate
1070
+ ? (0, date_fns_1.set)(new Date(), {
1071
+ date: subInterval.startDate
1072
+ .day,
1073
+ month: (subInterval.startDate
1074
+ .month ?? 1) - 1,
1075
+ year: 2024,
1076
+ })
1077
+ : undefined,
1078
+ endDate: subInterval.endDate
1079
+ ? (0, date_fns_1.set)(new Date(), {
1080
+ date: subInterval.endDate.day,
1081
+ month: (subInterval.endDate
1082
+ .month ?? 1) - 1,
1083
+ year: 2024,
1084
+ })
1085
+ : undefined,
1086
+ }, onChangeDateRange: (value) => {
1087
+ const updatedOptions = newDateFilter?.presetOptions?.map((o, i) => {
1088
+ return index === i
1089
+ ? {
1090
+ ...o,
1091
+ subIntervals: o.subIntervals?.map((s, j) => subIndex === j
1092
+ ? {
1093
+ ...s,
1094
+ startDate: value.startDate
1095
+ ? {
1096
+ day: value.startDate.getDate(),
1097
+ month: value.startDate.getMonth() +
1098
+ 1,
1099
+ }
1100
+ : undefined,
1101
+ endDate: value.endDate
1102
+ ? {
1103
+ day: value.endDate.getDate(),
1104
+ month: value.endDate.getMonth() +
1105
+ 1,
1106
+ }
1107
+ : undefined,
1108
+ }
1109
+ : s),
1110
+ }
1111
+ : o;
1112
+ }) ?? [];
1113
+ setNewDateFilter({
1114
+ ...newDateFilter,
1115
+ presetOptions: updatedOptions,
1116
+ });
1117
+ }, style: {
1118
+ marginLeft: 420,
1119
+ } }), (0, jsx_runtime_1.jsxs)("div", { style: {
1120
+ flexGrow: 1,
1121
+ display: 'flex',
1122
+ flexDirection: 'row',
1123
+ justifyContent: 'flex-end',
1124
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
1125
+ display: 'flex',
1126
+ flexDirection: 'column',
1127
+ height: '100%',
1128
+ marginLeft: 'auto',
1129
+ justifySelf: 'flex-end',
1130
+ }, children: (0, jsx_runtime_1.jsx)(QuillToolTipPortal_1.QuillToolTipPortal, { containerStyle: {
1131
+ visibility: intervalIssues?.[index]
1132
+ ? 'visible'
1133
+ : 'hidden',
1134
+ }, text: subIntervalIssues[index]?.[subIndex], children: (0, jsx_runtime_1.jsx)(ExclamationFilledIcon_1.default, { height: 28, width: 28, style: {
1135
+ color: '#dc143c',
1136
+ marginTop: 6,
1137
+ marginLeft: 'auto',
1138
+ // Push to end of row
1139
+ display: 'flex',
1140
+ visibility: subIntervalIssues[index]?.[subIndex]
1141
+ ? 'visible'
1142
+ : 'hidden',
1143
+ } }) }) }), (0, jsx_runtime_1.jsx)("div", { style: {
1144
+ display: 'flex',
1145
+ justifyContent: 'flex-end',
1146
+ }, children: (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteSubInterval(index, subIndex), style: {
1147
+ height: 38,
1148
+ width: 38,
1149
+ alignItems: 'center',
1150
+ justifyContent: 'flex-end',
1151
+ display: 'flex',
1152
+ cursor: 'pointer',
1153
+ marginTop: 2,
1154
+ }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) }) })] })] }, `sub-interval-${subIndex}`))), (0, jsx_runtime_1.jsx)("div", { style: {
262
1155
  display: 'flex',
1156
+ flexDirection: 'row',
1157
+ gap: '10px',
263
1158
  justifyContent: 'flex-end',
264
- }, children: (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteDateFilter(), style: {
265
- height: 38,
266
- width: 38,
267
- alignItems: 'center',
268
- justifyContent: 'flex-end',
1159
+ width: 620,
1160
+ borderTop: '1px solid #d7d7d7',
1161
+ paddingTop: 10,
1162
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
269
1163
  display: 'flex',
270
- cursor: 'pointer',
271
- }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) }) })] })] }) })] }) })), !showDateFilter && ((0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddDateFilter, label: "Add date filter +" }) }))] }), (0, jsx_runtime_1.jsx)("div", { style: {
272
- display: 'flex',
273
- flexDirection: 'row',
274
- alignItems: 'center',
275
- justifyContent: 'space-between',
276
- marginTop: 20,
277
- }, children: (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Filters" }) }), newFilters.length > 0 && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: '6px' }, children: newFilters.map((filter, index) => {
278
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
1164
+ flexDirection: 'column',
1165
+ }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => handleAddSubInterval(index), label: "Add Sub-Interval +", style: {
1166
+ width: 200,
1167
+ } }) }) })] }))] }, `preset-option-${index}`))), (0, jsx_runtime_1.jsx)("div", { style: {
1168
+ display: 'flex',
1169
+ flexDirection: 'row',
1170
+ gap: '10px',
1171
+ justifyContent: 'flex-end',
1172
+ width: '100%',
1173
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
1174
+ display: 'flex',
1175
+ flexDirection: 'column',
1176
+ }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddInterval, label: "Add Interval +" }) }) })] }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
279
1177
  display: 'flex',
280
- flexDirection: 'row',
1178
+ flexDirection: 'column',
281
1179
  gap: '10px',
282
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
283
- display: 'flex',
284
- flexDirection: 'column',
285
- // maxWidth: 300,
286
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { value: filter?.label || '', onChange: (e) => {
287
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
288
- ? { ...otherFilter, label: e.target.value }
289
- : otherFilter);
290
- setNewFilters(updatedFilters);
291
- } })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1180
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
292
1181
  display: 'flex',
293
- flexDirection: 'column',
294
- maxWidth: 300,
295
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Table" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: filter.table || '', onChange: (e) => {
296
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
297
- ? { ...otherFilter, table: e }
298
- : otherFilter);
299
- setNewFilters(updatedFilters);
300
- }, options: state.tables.map((table) => {
301
- return { label: table.name, value: table.name };
302
- }), theme: Admin_1.defaultTheme })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
303
- display: 'flex',
304
- flexDirection: 'column',
305
- maxWidth: 300,
306
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Field" }), (0, jsx_runtime_1.jsx)(SelectComponent, { defaultValue: "", value: filter && filter.field ? filter.field : '', options: filter.table
307
- ? state.tables
308
- .find((table) => table.name === filter.table)
309
- ?.columns.filter((column) => {
310
- return ((0, columnProcessing_1.convertFieldTypeToJSType)(column.fieldType) === 'string');
311
- })
312
- .map((column) => {
313
- return {
314
- label: column.name,
315
- value: column.name,
316
- };
317
- })
318
- : [], onChange: (e) => {
319
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
320
- ? { ...otherFilter, field: e }
321
- : otherFilter);
322
- setNewFilters(updatedFilters);
323
- } })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1182
+ flexDirection: 'row',
1183
+ alignItems: 'center',
1184
+ justifyContent: 'space-between',
1185
+ marginTop: 20,
1186
+ }, children: (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Filters" }) }), newFilters.length > 0 && ((0, jsx_runtime_1.jsx)("div", { style: {
324
1187
  display: 'flex',
325
1188
  flexDirection: 'column',
326
- width: '100%',
327
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Filter Type" }), (0, jsx_runtime_1.jsx)("div", { style: {
328
- display: 'flex',
329
- flexDirection: 'column',
330
- alignItems: 'center',
331
- width: '100%',
332
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
1189
+ gap: '6px',
1190
+ }, children: newFilters.map((filter, index) => ((0, jsx_runtime_1.jsxs)("div", { style: {
1191
+ display: 'flex',
1192
+ flexDirection: 'row',
1193
+ gap: '10px',
1194
+ }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
333
1195
  display: 'flex',
334
- flexDirection: 'row',
335
- alignItems: 'center',
336
- width: '100%',
337
- gap: 10,
338
- }, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: Admin_1.defaultTheme, value: filter && filter.stringFilterType
339
- ? filter.stringFilterType
340
- : 'default', onChange: (e) => {
1196
+ flexDirection: 'column',
1197
+ // maxWidth: 300,
1198
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { value: filter?.label || '', width: "230px", onChange: (e) => {
1199
+ const currentLabel = filter.label;
341
1200
  const updatedFilters = newFilters.map((otherFilter, i) => index === i
342
- ? { ...otherFilter, stringFilterType: e }
1201
+ ? {
1202
+ ...otherFilter,
1203
+ label: e.target.value,
1204
+ }
343
1205
  : otherFilter);
344
1206
  setNewFilters(updatedFilters);
345
- } }), (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteFilter(filter), style: {
1207
+ // Find the value in the map that matches the current label
1208
+ const oldLabel = Object.entries(filterNameMap).find(([, newLabel]) => newLabel === currentLabel)?.[0];
1209
+ if (oldLabel) {
1210
+ // Update the map to reflect the new label
1211
+ setFilterNameMap({
1212
+ ...filterNameMap,
1213
+ [oldLabel]: e.target.value,
1214
+ });
1215
+ }
1216
+ } })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1217
+ display: 'flex',
1218
+ flexDirection: 'column',
1219
+ // maxWidth: 250,
1220
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Table" }), (0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { width: 200, value: filter.table || '', onChange: (event) => {
1221
+ const e = event.target.value;
1222
+ const updatedFilters = newFilters.map((otherFilter, i) => index === i
1223
+ ? { ...otherFilter, table: e }
1224
+ : otherFilter);
1225
+ setNewFilters(updatedFilters);
1226
+ }, options: filteredTables.map((table) => {
1227
+ return { label: table.name, value: table.name };
1228
+ }), hideEmptyOption: true })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1229
+ display: 'flex',
1230
+ flexDirection: 'column',
1231
+ maxWidth: 300,
1232
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Field" }), (0, jsx_runtime_1.jsx)(QuillSelectWithCombo_1.QuillSelectComponentWithCombo, { width: 200, value: filter && filter.field ? filter.field : '', options: filter.table
1233
+ ? filteredTables
1234
+ .find((table) => table.name === filter.table)
1235
+ ?.columns.filter((column) => {
1236
+ return ((0, columnProcessing_1.convertFieldTypeToJSType)(column.fieldType) === 'string');
1237
+ })
1238
+ .map((column) => {
1239
+ return {
1240
+ label: column.name,
1241
+ value: column.name,
1242
+ };
1243
+ })
1244
+ : [], onChange: (event) => {
1245
+ // Capitalize the label
1246
+ const e = event.target.value;
1247
+ const updatedFilters = newFilters.map((otherFilter, i) => index === i
1248
+ ? {
1249
+ ...otherFilter,
1250
+ field: e,
1251
+ label: filter.label === '' ||
1252
+ filter.label ===
1253
+ normalizeFieldName(filter.field)
1254
+ ? normalizeFieldName(e)
1255
+ : filter.label,
1256
+ }
1257
+ : otherFilter);
1258
+ setNewFilters(updatedFilters);
1259
+ }, hideEmptyOption: true, disabled: !filter.table })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1260
+ display: 'flex',
1261
+ flexDirection: 'column',
1262
+ width: '100%',
1263
+ }, children: [index === 0 && ((0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Filter Type" })), (0, jsx_runtime_1.jsx)("div", { style: {
1264
+ display: 'flex',
1265
+ flexDirection: 'column',
1266
+ alignItems: 'center',
1267
+ width: '100%',
1268
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
1269
+ display: 'flex',
1270
+ flexDirection: 'row',
1271
+ alignItems: 'center',
1272
+ width: '100%',
1273
+ gap: 10,
1274
+ }, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: Admin_1.defaultTheme, value: filter && filter.stringFilterType
1275
+ ? filter.stringFilterType
1276
+ : 'default', onChange: (e) => {
1277
+ const updatedFilters = newFilters.map((otherFilter, i) => index === i
1278
+ ? {
1279
+ ...otherFilter,
1280
+ stringFilterType: e,
1281
+ }
1282
+ : otherFilter);
1283
+ setNewFilters(updatedFilters);
1284
+ } }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1285
+ display: 'flex',
1286
+ flexDirection: 'column',
1287
+ width: '100%',
1288
+ justifyContent: 'flex-end',
1289
+ }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, {}), (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteFilter(filter), style: {
346
1290
  height: 38,
347
1291
  alignItems: 'center',
348
- justifyContent: 'flex-end',
349
1292
  display: 'flex',
350
1293
  cursor: 'pointer',
351
1294
  width: '100%',
352
- }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) })] }) })] })] }, index));
353
- }) })), (0, jsx_runtime_1.jsx)("div", { style: { height: 12 } }), (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddFilter, label: "Add filter +" })] }), (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Chart order" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => openEditOrderModal(selectedDashboardName), label: "Edit chart order" }) }), (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Danger Zone" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleDeleteDashboard, label: "Delete Dashboard" }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 18 } }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: "Save changes" }) })] }) }));
1295
+ }, children: (0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#4C5462", width: "20", height: "20", children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", d: "M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z", clipRule: "evenodd" }) }) })] })] }, index))) })), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleAddFilter, label: "Add filter +" }) })] })] }), (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Promote Dashboard" }), (0, jsx_runtime_1.jsx)("div", { style: {
1296
+ marginTop: -4,
1297
+ display: 'flex',
1298
+ flexDirection: 'row',
1299
+ marginRight: 'auto',
1300
+ }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: () => {
1301
+ openPromoteModal();
1302
+ }, label: "Choose Destination", style: {
1303
+ width: 'fit-content',
1304
+ } }) }), (0, jsx_runtime_1.jsx)(CardSection_1.default, { children: "Danger Zone" }), (0, jsx_runtime_1.jsx)("div", { style: { maxWidth: 230 }, children: (0, jsx_runtime_1.jsx)(SecondaryButtonComponent, { onClick: handleDeleteDashboard, label: "Delete Dashboard" }) }), (0, jsx_runtime_1.jsx)("div", { style: { height: 18 } }), (0, jsx_runtime_1.jsxs)("div", { style: {
1305
+ width: '100%',
1306
+ display: 'flex',
1307
+ flexDirection: 'row',
1308
+ justifyContent: 'space-between',
1309
+ alignItems: 'center',
1310
+ }, children: [(0, jsx_runtime_1.jsx)(ButtonComponent, { onClick: handleSubmitDashboardChanges, label: "Save changes", disabled: !!dashboardValidationError, tooltipText: dashboardValidationError }), validationError.length !== 0 && ((0, jsx_runtime_1.jsx)(ErrorComponent, { errorMessage: validationError && validationError[0] }))] })] }) }) }) }));
354
1311
  }
355
- exports.EditFiltersModal = EditFiltersModal;