@quillsql/admin 1.6.0 → 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 (686) 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 -443
  4. package/dist/cjs/AdminProvider.d.ts +108 -49
  5. package/dist/cjs/AdminProvider.d.ts.map +1 -1
  6. package/dist/cjs/AdminProvider.js +391 -220
  7. package/dist/cjs/api/ConnectionClient.d.ts +20 -30
  8. package/dist/cjs/api/ConnectionClient.d.ts.map +1 -1
  9. package/dist/cjs/api/ConnectionClient.js +314 -310
  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 -168
  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 +55 -59
  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 +14 -11
  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 +10 -2
  101. package/dist/cjs/components/SegmentedControl.d.ts.map +1 -1
  102. package/dist/cjs/components/SegmentedControl.js +27 -22
  103. package/dist/cjs/components/SqlTextEditor.d.ts +6 -1
  104. package/dist/cjs/components/SqlTextEditor.d.ts.map +1 -1
  105. package/dist/cjs/components/SqlTextEditor.js +62 -13
  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 +237 -30
  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 +2 -0
  121. package/dist/cjs/constants/dataTypes.d.ts.map +1 -0
  122. package/dist/cjs/constants/dataTypes.js +23 -0
  123. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts +15 -6
  124. package/dist/cjs/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  125. package/dist/cjs/forms/client_onboard/ConnectDatabase.js +214 -109
  126. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts +13 -9
  127. package/dist/cjs/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  128. package/dist/cjs/forms/client_onboard/ConnectSchema.js +158 -236
  129. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts +47 -0
  130. package/dist/cjs/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -0
  131. package/dist/cjs/forms/client_onboard/CreateVirtualTables.js +396 -0
  132. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts +2 -0
  133. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts.map +1 -0
  134. package/dist/cjs/forms/client_onboard/__tests__/ConnectDatabase.test.js +571 -0
  135. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.d.ts +2 -0
  136. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.d.ts.map +1 -0
  137. package/dist/cjs/forms/client_onboard/__tests__/ConnectSchema.test.js +459 -0
  138. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts +2 -0
  139. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts.map +1 -0
  140. package/dist/cjs/forms/client_onboard/__tests__/CreateVirtualTables.test.js +385 -0
  141. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts +20 -0
  142. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -0
  143. package/dist/cjs/forms/virtual_tables/CreateEditVirtualTable.js +294 -0
  144. package/dist/cjs/hooks/useDashboardManager.d.ts +16 -0
  145. package/dist/cjs/hooks/useDashboardManager.d.ts.map +1 -0
  146. package/dist/cjs/hooks/useDashboardManager.js +113 -0
  147. package/dist/cjs/hooks/useDatabaseSchema.d.ts +5 -0
  148. package/dist/cjs/hooks/useDatabaseSchema.d.ts.map +1 -0
  149. package/dist/cjs/hooks/useDatabaseSchema.js +54 -0
  150. package/dist/cjs/hooks/useItemBeingEdited.d.ts +1 -2
  151. package/dist/cjs/hooks/useItemBeingEdited.d.ts.map +1 -1
  152. package/dist/cjs/hooks/useItemBeingEdited.js +2 -14
  153. package/dist/cjs/hooks/useOnClickOutside.d.ts +4 -1
  154. package/dist/cjs/hooks/useOnClickOutside.d.ts.map +1 -1
  155. package/dist/cjs/hooks/useOnClickOutside.js +50 -7
  156. package/dist/cjs/hooks/useTenants.d.ts +13 -0
  157. package/dist/cjs/hooks/useTenants.d.ts.map +1 -0
  158. package/dist/cjs/hooks/useTenants.js +174 -0
  159. package/dist/cjs/hooks/useThrottle.d.ts +2 -0
  160. package/dist/cjs/hooks/useThrottle.d.ts.map +1 -0
  161. package/dist/cjs/hooks/useThrottle.js +14 -0
  162. package/dist/cjs/icons/CheckCircleIcon.d.ts +5 -0
  163. package/dist/cjs/icons/CheckCircleIcon.d.ts.map +1 -0
  164. package/dist/cjs/icons/CheckCircleIcon.js +5 -0
  165. package/dist/cjs/icons/DownChevronIcon.d.ts +2 -0
  166. package/dist/cjs/icons/DownChevronIcon.d.ts.map +1 -0
  167. package/dist/cjs/icons/DownChevronIcon.js +7 -0
  168. package/dist/cjs/icons/ExclamationFilledIcon.d.ts +5 -0
  169. package/dist/cjs/icons/ExclamationFilledIcon.d.ts.map +1 -0
  170. package/dist/cjs/icons/ExclamationFilledIcon.js +5 -0
  171. package/dist/cjs/icons/ExteriorLinkIcon.d.ts +5 -0
  172. package/dist/cjs/icons/ExteriorLinkIcon.d.ts.map +1 -0
  173. package/dist/cjs/icons/ExteriorLinkIcon.js +5 -0
  174. package/dist/cjs/icons/GlobeIcon.d.ts +5 -0
  175. package/dist/cjs/icons/GlobeIcon.d.ts.map +1 -0
  176. package/dist/cjs/icons/GlobeIcon.js +15 -0
  177. package/dist/cjs/icons/InformationCircleIcon.d.ts +4 -0
  178. package/dist/cjs/icons/InformationCircleIcon.d.ts.map +1 -0
  179. package/dist/cjs/icons/InformationCircleIcon.js +7 -0
  180. package/dist/cjs/icons/LeftChevronIcon.d.ts +2 -0
  181. package/dist/cjs/icons/LeftChevronIcon.d.ts.map +1 -0
  182. package/dist/cjs/icons/LeftChevronIcon.js +7 -0
  183. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts +5 -0
  184. package/dist/cjs/icons/QuestionMarkCircleIcon.d.ts.map +1 -0
  185. package/dist/cjs/icons/QuestionMarkCircleIcon.js +5 -0
  186. package/dist/cjs/icons/RightChevronIcon.d.ts +2 -0
  187. package/dist/cjs/icons/RightChevronIcon.d.ts.map +1 -0
  188. package/dist/cjs/icons/RightChevronIcon.js +7 -0
  189. package/dist/cjs/icons/XMarkIcon.d.ts +0 -1
  190. package/dist/cjs/icons/XMarkIcon.d.ts.map +1 -1
  191. package/dist/cjs/icons/XMarkIcon.js +1 -1
  192. package/dist/cjs/index.d.ts +2 -3
  193. package/dist/cjs/index.d.ts.map +1 -1
  194. package/dist/cjs/index.js +6 -7
  195. package/dist/cjs/modals/CodePreview.d.ts +6 -0
  196. package/dist/cjs/modals/CodePreview.d.ts.map +1 -0
  197. package/dist/cjs/modals/CodePreview.js +151 -0
  198. package/dist/cjs/modals/EditEnvironmentModal.d.ts +15 -0
  199. package/dist/cjs/modals/EditEnvironmentModal.d.ts.map +1 -0
  200. package/dist/cjs/modals/EditEnvironmentModal.js +551 -0
  201. package/dist/cjs/modals/EditFiltersModal.d.ts +14 -10
  202. package/dist/cjs/modals/EditFiltersModal.d.ts.map +1 -1
  203. package/dist/cjs/modals/EditFiltersModal.js +1220 -254
  204. package/dist/cjs/modals/NewDashboardModal.d.ts +6 -8
  205. package/dist/cjs/modals/NewDashboardModal.d.ts.map +1 -1
  206. package/dist/cjs/modals/NewDashboardModal.js +147 -146
  207. package/dist/cjs/modals/PromoteDashboardModal.d.ts +16 -0
  208. package/dist/cjs/modals/PromoteDashboardModal.d.ts.map +1 -0
  209. package/dist/cjs/modals/PromoteDashboardModal.js +56 -0
  210. package/dist/cjs/modals/PromoteReportModal.d.ts +15 -0
  211. package/dist/cjs/modals/PromoteReportModal.d.ts.map +1 -0
  212. package/dist/cjs/modals/PromoteReportModal.js +128 -0
  213. package/dist/cjs/modals/PromoteViewModal.d.ts +5 -4
  214. package/dist/cjs/modals/PromoteViewModal.d.ts.map +1 -1
  215. package/dist/cjs/modals/PromoteViewModal.js +65 -91
  216. package/dist/cjs/modals/ReorderDashboardModal.d.ts +1 -2
  217. package/dist/cjs/modals/ReorderDashboardModal.d.ts.map +1 -1
  218. package/dist/cjs/modals/ReorderDashboardModal.js +34 -20
  219. package/dist/cjs/modals/SavedQueriesModal.d.ts +7 -0
  220. package/dist/cjs/modals/SavedQueriesModal.d.ts.map +1 -0
  221. package/dist/cjs/modals/SavedQueriesModal.js +128 -0
  222. package/dist/cjs/modals/index.d.ts +0 -1
  223. package/dist/cjs/modals/index.d.ts.map +1 -1
  224. package/dist/cjs/modals/index.js +1 -3
  225. package/dist/cjs/primitives/ButtonPrimitive.d.ts +3 -1
  226. package/dist/cjs/primitives/ButtonPrimitive.d.ts.map +1 -1
  227. package/dist/cjs/primitives/ButtonPrimitive.js +24 -16
  228. package/dist/cjs/primitives/CheckboxPrimitive.d.ts +12 -0
  229. package/dist/cjs/primitives/CheckboxPrimitive.d.ts.map +1 -0
  230. package/dist/cjs/primitives/CheckboxPrimitive.js +29 -0
  231. package/dist/cjs/primitives/HeaderPrimitive.d.ts.map +1 -1
  232. package/dist/cjs/primitives/HeaderPrimitive.js +1 -1
  233. package/dist/cjs/primitives/MiniButtonPrimitive.d.ts +7 -0
  234. package/dist/cjs/primitives/MiniButtonPrimitive.d.ts.map +1 -0
  235. package/dist/cjs/primitives/MiniButtonPrimitive.js +56 -0
  236. package/dist/cjs/primitives/ModalPrimitive.d.ts +2 -10
  237. package/dist/cjs/primitives/ModalPrimitive.d.ts.map +1 -1
  238. package/dist/cjs/primitives/ModalPrimitive.js +6 -6
  239. package/dist/cjs/primitives/PlaceholderPrimitive.d.ts +5 -0
  240. package/dist/cjs/primitives/PlaceholderPrimitive.d.ts.map +1 -0
  241. package/dist/cjs/primitives/PlaceholderPrimitive.js +18 -0
  242. package/dist/cjs/primitives/PopoverPrimitive.d.ts +8 -0
  243. package/dist/cjs/primitives/PopoverPrimitive.d.ts.map +1 -0
  244. package/dist/cjs/primitives/PopoverPrimitive.js +53 -0
  245. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts +3 -1
  246. package/dist/cjs/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  247. package/dist/cjs/primitives/SecondaryButtonPrimitive.js +13 -10
  248. package/dist/cjs/primitives/TextInputPrimitive.d.ts +8 -2
  249. package/dist/cjs/primitives/TextInputPrimitive.d.ts.map +1 -1
  250. package/dist/cjs/primitives/TextInputPrimitive.js +131 -21
  251. package/dist/cjs/primitives/TogglePrimitive.d.ts +6 -3
  252. package/dist/cjs/primitives/TogglePrimitive.d.ts.map +1 -1
  253. package/dist/cjs/primitives/TogglePrimitive.js +10 -7
  254. package/dist/cjs/primitives/index.d.ts +1 -1
  255. package/dist/cjs/primitives/index.d.ts.map +1 -1
  256. package/dist/cjs/primitives/index.js +3 -3
  257. package/dist/cjs/public_components/ChartQueryBuilder.d.ts +9 -0
  258. package/dist/cjs/public_components/ChartQueryBuilder.d.ts.map +1 -0
  259. package/dist/cjs/public_components/ChartQueryBuilder.js +131 -0
  260. package/dist/cjs/public_components/CreateEnvironment.d.ts +2 -1
  261. package/dist/cjs/public_components/CreateEnvironment.d.ts.map +1 -1
  262. package/dist/cjs/public_components/CreateEnvironment.js +168 -78
  263. package/dist/cjs/public_components/DashboardManager.d.ts +2 -2
  264. package/dist/cjs/public_components/DashboardManager.d.ts.map +1 -1
  265. package/dist/cjs/public_components/DashboardManager.js +354 -196
  266. package/dist/cjs/public_components/EnvSelectPopover.d.ts +12 -0
  267. package/dist/cjs/public_components/EnvSelectPopover.d.ts.map +1 -0
  268. package/dist/cjs/public_components/EnvSelectPopover.js +144 -0
  269. package/dist/cjs/public_components/VirtualTableManager.d.ts +7 -0
  270. package/dist/cjs/public_components/VirtualTableManager.d.ts.map +1 -0
  271. package/dist/cjs/public_components/VirtualTableManager.js +731 -0
  272. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.d.ts +2 -0
  273. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.d.ts.map +1 -0
  274. package/dist/cjs/public_components/__tests__/CreateEnvironment.test.js +685 -0
  275. package/dist/cjs/utils/astProcessing.d.ts +15 -0
  276. package/dist/cjs/utils/astProcessing.d.ts.map +1 -0
  277. package/dist/cjs/utils/astProcessing.js +105 -0
  278. package/dist/cjs/utils/astProcessing.uspec.d.ts +2 -0
  279. package/dist/cjs/utils/astProcessing.uspec.d.ts.map +1 -0
  280. package/dist/cjs/utils/astProcessing.uspec.js +30 -0
  281. package/dist/cjs/utils/columnProcessing.d.ts +15 -0
  282. package/dist/cjs/utils/columnProcessing.d.ts.map +1 -0
  283. package/dist/cjs/utils/columnProcessing.js +208 -0
  284. package/dist/cjs/utils/constants.d.ts +4 -21
  285. package/dist/cjs/utils/constants.d.ts.map +1 -1
  286. package/dist/cjs/utils/constants.js +20 -11
  287. package/dist/cjs/utils/dataEditor.d.ts +4 -3
  288. package/dist/cjs/utils/dataEditor.d.ts.map +1 -1
  289. package/dist/cjs/utils/dataEditor.js +69 -119
  290. package/dist/cjs/utils/dataFetcher.d.ts +20 -2
  291. package/dist/cjs/utils/dataFetcher.d.ts.map +1 -1
  292. package/dist/cjs/utils/dataFetcher.js +46 -56
  293. package/dist/cjs/utils/databases.d.ts +20 -9
  294. package/dist/cjs/utils/databases.d.ts.map +1 -1
  295. package/dist/cjs/utils/databases.js +66 -28
  296. package/dist/cjs/utils/filter.d.ts +222 -0
  297. package/dist/cjs/utils/filter.d.ts.map +1 -0
  298. package/dist/cjs/utils/filter.js +347 -0
  299. package/dist/cjs/utils/monacoAutocomplete.d.ts +22 -0
  300. package/dist/cjs/utils/monacoAutocomplete.d.ts.map +1 -0
  301. package/dist/cjs/utils/monacoAutocomplete.js +355 -0
  302. package/dist/cjs/utils/report.d.ts +120 -0
  303. package/dist/cjs/utils/report.d.ts.map +1 -0
  304. package/dist/cjs/utils/report.js +109 -0
  305. package/dist/cjs/utils/schema.d.ts +43 -26
  306. package/dist/cjs/utils/schema.d.ts.map +1 -1
  307. package/dist/cjs/utils/schema.js +175 -0
  308. package/dist/cjs/utils/table.d.ts +70 -4
  309. package/dist/cjs/utils/table.d.ts.map +1 -1
  310. package/dist/cjs/utils/tenants.d.ts +48 -0
  311. package/dist/cjs/utils/tenants.d.ts.map +1 -0
  312. package/dist/cjs/utils/tenants.js +37 -0
  313. package/dist/cjs/utils/textProcessing.js +1 -2
  314. package/dist/cjs/utils/ui.d.ts +2 -0
  315. package/dist/cjs/utils/ui.d.ts.map +1 -0
  316. package/dist/cjs/utils/ui.js +18 -0
  317. package/dist/cjs/utils/validation.d.ts +2 -0
  318. package/dist/cjs/utils/validation.d.ts.map +1 -0
  319. package/dist/cjs/utils/validation.js +77 -0
  320. package/dist/cjs/utils/validation.uspec.d.ts +2 -0
  321. package/dist/cjs/utils/validation.uspec.d.ts.map +1 -0
  322. package/dist/cjs/utils/validation.uspec.js +53 -0
  323. package/dist/esm/Admin.d.ts +41 -87
  324. package/dist/esm/Admin.d.ts.map +1 -1
  325. package/dist/esm/Admin.js +355 -409
  326. package/dist/esm/AdminProvider.d.ts +108 -49
  327. package/dist/esm/AdminProvider.d.ts.map +1 -1
  328. package/dist/esm/AdminProvider.js +391 -221
  329. package/dist/esm/api/ConnectionClient.d.ts +20 -30
  330. package/dist/esm/api/ConnectionClient.d.ts.map +1 -1
  331. package/dist/esm/api/ConnectionClient.js +303 -295
  332. package/dist/esm/assets/ArrowDownHeadIcon.d.ts.map +1 -1
  333. package/dist/esm/components/Banner/index.d.ts +0 -1
  334. package/dist/esm/components/Banner/index.d.ts.map +1 -1
  335. package/dist/esm/components/ClipboardButton.d.ts +8 -0
  336. package/dist/esm/components/ClipboardButton.d.ts.map +1 -0
  337. package/dist/esm/components/ClipboardButton.js +69 -0
  338. package/dist/esm/components/DashboardSelectPopover.d.ts +8 -5
  339. package/dist/esm/components/DashboardSelectPopover.d.ts.map +1 -1
  340. package/dist/esm/components/DashboardSelectPopover.js +72 -169
  341. package/dist/esm/components/DatabaseMismatchCard.d.ts +3 -3
  342. package/dist/esm/components/DatabaseMismatchCard.d.ts.map +1 -1
  343. package/dist/esm/components/DatabaseMismatchCard.js +2 -2
  344. package/dist/esm/components/DatabaseSelector.d.ts.map +1 -1
  345. package/dist/esm/components/DatabaseSelector.js +9 -1
  346. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts +10 -0
  347. package/dist/esm/components/DateRangePicker/SingleDatePicker.d.ts.map +1 -0
  348. package/dist/esm/components/DateRangePicker/SingleDatePicker.js +227 -0
  349. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts +18 -0
  350. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.d.ts.map +1 -0
  351. package/dist/esm/components/DateRangePicker/YearlessDateRangePicker.js +282 -0
  352. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts +91 -0
  353. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  354. package/dist/esm/components/DateRangePicker/dateRangePickerUtils.js +883 -0
  355. package/dist/esm/components/DeleteButton.d.ts +0 -1
  356. package/dist/esm/components/DeleteButton.d.ts.map +1 -1
  357. package/dist/esm/components/DropDownMenuWithLabel.d.ts +4 -3
  358. package/dist/esm/components/DropDownMenuWithLabel.d.ts.map +1 -1
  359. package/dist/esm/components/DropDownMenuWithLabel.js +36 -53
  360. package/dist/esm/components/DynamicBanner.d.ts +2 -5
  361. package/dist/esm/components/DynamicBanner.d.ts.map +1 -1
  362. package/dist/esm/components/DynamicBanner.js +2 -2
  363. package/dist/esm/components/EmptyDashboardComponent/index.d.ts +0 -1
  364. package/dist/esm/components/EmptyDashboardComponent/index.d.ts.map +1 -1
  365. package/dist/esm/components/EmptyDashboardComponent/index.js +13 -10
  366. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts +4 -0
  367. package/dist/esm/components/EmptyVirtualTablesComponent.d.ts.map +1 -0
  368. package/dist/esm/components/EmptyVirtualTablesComponent.js +38 -0
  369. package/dist/esm/components/ExternalLink.d.ts +4 -0
  370. package/dist/esm/components/ExternalLink.d.ts.map +1 -0
  371. package/dist/esm/components/ExternalLink.js +9 -0
  372. package/dist/esm/components/FormTooltip.d.ts +8 -0
  373. package/dist/esm/components/FormTooltip.d.ts.map +1 -0
  374. package/dist/esm/components/FormTooltip.js +84 -0
  375. package/dist/esm/components/InputLabel.d.ts +4 -1
  376. package/dist/esm/components/InputLabel.d.ts.map +1 -1
  377. package/dist/esm/components/InputLabel.js +10 -8
  378. package/dist/esm/components/InternalDashboard/ChartSkeleton.d.ts +11 -0
  379. package/dist/esm/components/InternalDashboard/ChartSkeleton.d.ts.map +1 -0
  380. package/dist/esm/components/InternalDashboard/ChartSkeleton.js +16 -0
  381. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts +20 -0
  382. package/dist/esm/components/InternalDashboard/DashboardFilter.d.ts.map +1 -0
  383. package/dist/esm/components/InternalDashboard/DashboardFilter.js +101 -0
  384. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts +7 -0
  385. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.d.ts.map +1 -0
  386. package/dist/esm/components/InternalDashboard/DashboardLoadingComponent.js +15 -0
  387. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts +37 -0
  388. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.d.ts.map +1 -0
  389. package/dist/esm/components/InternalDashboard/DateRangePicker/QuillDateRangePicker.js +269 -0
  390. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts +85 -0
  391. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -0
  392. package/dist/esm/components/InternalDashboard/DateRangePicker/dateRangePickerUtils.js +520 -0
  393. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts +17 -0
  394. package/dist/esm/components/InternalDashboard/InternalDashboard.d.ts.map +1 -0
  395. package/dist/esm/components/InternalDashboard/InternalDashboard.js +1940 -0
  396. package/dist/esm/components/OrgSelect.d.ts +9 -13
  397. package/dist/esm/components/OrgSelect.d.ts.map +1 -1
  398. package/dist/esm/components/OrgSelect.js +134 -117
  399. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts +30 -0
  400. package/dist/esm/components/QuillMultiSelectWithCombo.d.ts.map +1 -0
  401. package/dist/esm/components/QuillMultiSelectWithCombo.js +466 -0
  402. package/dist/esm/components/QuillPopover.d.ts +11 -0
  403. package/dist/esm/components/QuillPopover.d.ts.map +1 -0
  404. package/dist/esm/components/QuillPopover.js +144 -0
  405. package/dist/esm/components/QuillSelect.d.ts +1 -1
  406. package/dist/esm/components/QuillSelect.d.ts.map +1 -1
  407. package/dist/esm/components/QuillSelect.js +39 -16
  408. package/dist/esm/components/QuillSelectWithCombo.d.ts +22 -0
  409. package/dist/esm/components/QuillSelectWithCombo.d.ts.map +1 -0
  410. package/dist/esm/components/QuillSelectWithCombo.js +291 -0
  411. package/dist/esm/components/QuillTab.d.ts +12 -0
  412. package/dist/esm/components/QuillTab.d.ts.map +1 -0
  413. package/dist/esm/components/QuillTab.js +81 -0
  414. package/dist/esm/components/QuillToolTipPortal.d.ts +11 -0
  415. package/dist/esm/components/QuillToolTipPortal.d.ts.map +1 -0
  416. package/dist/esm/components/QuillToolTipPortal.js +104 -0
  417. package/dist/esm/components/SegmentedControl.d.ts +10 -2
  418. package/dist/esm/components/SegmentedControl.d.ts.map +1 -1
  419. package/dist/esm/components/SegmentedControl.js +26 -20
  420. package/dist/esm/components/SqlTextEditor.d.ts +6 -1
  421. package/dist/esm/components/SqlTextEditor.d.ts.map +1 -1
  422. package/dist/esm/components/SqlTextEditor.js +60 -11
  423. package/dist/esm/components/StepDisplay.d.ts.map +1 -1
  424. package/dist/esm/components/StepDisplay.js +1 -1
  425. package/dist/esm/components/Tenants/EditTenant.d.ts +41 -0
  426. package/dist/esm/components/Tenants/EditTenant.d.ts.map +1 -0
  427. package/dist/esm/components/Tenants/EditTenant.js +754 -0
  428. package/dist/esm/components/UiComponents.d.ts +35 -6
  429. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  430. package/dist/esm/components/UiComponents.js +231 -28
  431. package/dist/esm/components/VirtualTableTile.d.ts +7 -0
  432. package/dist/esm/components/VirtualTableTile.d.ts.map +1 -0
  433. package/dist/esm/components/VirtualTableTile.js +48 -0
  434. package/dist/esm/components/index.d.ts +5 -5
  435. package/dist/esm/components/index.d.ts.map +1 -1
  436. package/dist/esm/components/index.js +5 -5
  437. package/dist/esm/constants/dataTypes.d.ts +2 -0
  438. package/dist/esm/constants/dataTypes.d.ts.map +1 -0
  439. package/dist/esm/constants/dataTypes.js +20 -0
  440. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts +15 -6
  441. package/dist/esm/forms/client_onboard/ConnectDatabase.d.ts.map +1 -1
  442. package/dist/esm/forms/client_onboard/ConnectDatabase.js +216 -111
  443. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts +13 -9
  444. package/dist/esm/forms/client_onboard/ConnectSchema.d.ts.map +1 -1
  445. package/dist/esm/forms/client_onboard/ConnectSchema.js +160 -238
  446. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts +47 -0
  447. package/dist/esm/forms/client_onboard/CreateVirtualTables.d.ts.map +1 -0
  448. package/dist/esm/forms/client_onboard/CreateVirtualTables.js +388 -0
  449. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts +2 -0
  450. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.d.ts.map +1 -0
  451. package/dist/esm/forms/client_onboard/__tests__/ConnectDatabase.test.js +566 -0
  452. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.d.ts +2 -0
  453. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.d.ts.map +1 -0
  454. package/dist/esm/forms/client_onboard/__tests__/ConnectSchema.test.js +454 -0
  455. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts +2 -0
  456. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.d.ts.map +1 -0
  457. package/dist/esm/forms/client_onboard/__tests__/CreateVirtualTables.test.js +380 -0
  458. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts +20 -0
  459. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.d.ts.map +1 -0
  460. package/dist/esm/forms/virtual_tables/CreateEditVirtualTable.js +288 -0
  461. package/dist/esm/hooks/useDashboardManager.d.ts +16 -0
  462. package/dist/esm/hooks/useDashboardManager.d.ts.map +1 -0
  463. package/dist/esm/hooks/useDashboardManager.js +109 -0
  464. package/dist/esm/hooks/useDatabaseSchema.d.ts +5 -0
  465. package/dist/esm/hooks/useDatabaseSchema.d.ts.map +1 -0
  466. package/dist/esm/hooks/useDatabaseSchema.js +50 -0
  467. package/dist/esm/hooks/useItemBeingEdited.d.ts +1 -2
  468. package/dist/esm/hooks/useItemBeingEdited.d.ts.map +1 -1
  469. package/dist/esm/hooks/useItemBeingEdited.js +3 -15
  470. package/dist/esm/hooks/useOnClickOutside.d.ts +4 -1
  471. package/dist/esm/hooks/useOnClickOutside.d.ts.map +1 -1
  472. package/dist/esm/hooks/useOnClickOutside.js +49 -8
  473. package/dist/esm/hooks/useTenants.d.ts +13 -0
  474. package/dist/esm/hooks/useTenants.d.ts.map +1 -0
  475. package/dist/esm/hooks/useTenants.js +170 -0
  476. package/dist/esm/hooks/useThrottle.d.ts +2 -0
  477. package/dist/esm/hooks/useThrottle.d.ts.map +1 -0
  478. package/dist/esm/hooks/useThrottle.js +11 -0
  479. package/dist/esm/icons/CheckCircleIcon.d.ts +5 -0
  480. package/dist/esm/icons/CheckCircleIcon.d.ts.map +1 -0
  481. package/dist/esm/icons/CheckCircleIcon.js +3 -0
  482. package/dist/esm/icons/DownChevronIcon.d.ts +2 -0
  483. package/dist/esm/icons/DownChevronIcon.d.ts.map +1 -0
  484. package/dist/esm/icons/DownChevronIcon.js +4 -0
  485. package/dist/esm/icons/ExclamationFilledIcon.d.ts +5 -0
  486. package/dist/esm/icons/ExclamationFilledIcon.d.ts.map +1 -0
  487. package/dist/esm/icons/ExclamationFilledIcon.js +3 -0
  488. package/dist/esm/icons/ExteriorLinkIcon.d.ts +5 -0
  489. package/dist/esm/icons/ExteriorLinkIcon.d.ts.map +1 -0
  490. package/dist/esm/icons/ExteriorLinkIcon.js +3 -0
  491. package/dist/esm/icons/GlobeIcon.d.ts +5 -0
  492. package/dist/esm/icons/GlobeIcon.d.ts.map +1 -0
  493. package/dist/esm/icons/GlobeIcon.js +12 -0
  494. package/dist/esm/icons/InformationCircleIcon.d.ts +4 -0
  495. package/dist/esm/icons/InformationCircleIcon.d.ts.map +1 -0
  496. package/dist/esm/icons/InformationCircleIcon.js +4 -0
  497. package/dist/esm/icons/LeftChevronIcon.d.ts +2 -0
  498. package/dist/esm/icons/LeftChevronIcon.d.ts.map +1 -0
  499. package/dist/esm/icons/LeftChevronIcon.js +4 -0
  500. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts +5 -0
  501. package/dist/esm/icons/QuestionMarkCircleIcon.d.ts.map +1 -0
  502. package/dist/esm/icons/QuestionMarkCircleIcon.js +3 -0
  503. package/dist/esm/icons/RightChevronIcon.d.ts +2 -0
  504. package/dist/esm/icons/RightChevronIcon.d.ts.map +1 -0
  505. package/dist/esm/icons/RightChevronIcon.js +4 -0
  506. package/dist/esm/icons/XMarkIcon.d.ts +0 -1
  507. package/dist/esm/icons/XMarkIcon.d.ts.map +1 -1
  508. package/dist/esm/index.d.ts +2 -3
  509. package/dist/esm/index.d.ts.map +1 -1
  510. package/dist/esm/index.js +3 -3
  511. package/dist/esm/modals/CodePreview.d.ts +6 -0
  512. package/dist/esm/modals/CodePreview.d.ts.map +1 -0
  513. package/dist/esm/modals/CodePreview.js +145 -0
  514. package/dist/esm/modals/EditEnvironmentModal.d.ts +15 -0
  515. package/dist/esm/modals/EditEnvironmentModal.d.ts.map +1 -0
  516. package/dist/esm/modals/EditEnvironmentModal.js +545 -0
  517. package/dist/esm/modals/EditFiltersModal.d.ts +14 -10
  518. package/dist/esm/modals/EditFiltersModal.d.ts.map +1 -1
  519. package/dist/esm/modals/EditFiltersModal.js +1227 -255
  520. package/dist/esm/modals/NewDashboardModal.d.ts +6 -8
  521. package/dist/esm/modals/NewDashboardModal.d.ts.map +1 -1
  522. package/dist/esm/modals/NewDashboardModal.js +148 -146
  523. package/dist/esm/modals/PromoteDashboardModal.d.ts +16 -0
  524. package/dist/esm/modals/PromoteDashboardModal.d.ts.map +1 -0
  525. package/dist/esm/modals/PromoteDashboardModal.js +53 -0
  526. package/dist/esm/modals/PromoteReportModal.d.ts +15 -0
  527. package/dist/esm/modals/PromoteReportModal.d.ts.map +1 -0
  528. package/dist/esm/modals/PromoteReportModal.js +125 -0
  529. package/dist/esm/modals/PromoteViewModal.d.ts +5 -4
  530. package/dist/esm/modals/PromoteViewModal.d.ts.map +1 -1
  531. package/dist/esm/modals/PromoteViewModal.js +65 -91
  532. package/dist/esm/modals/ReorderDashboardModal.d.ts +1 -2
  533. package/dist/esm/modals/ReorderDashboardModal.d.ts.map +1 -1
  534. package/dist/esm/modals/ReorderDashboardModal.js +34 -20
  535. package/dist/esm/modals/SavedQueriesModal.d.ts +7 -0
  536. package/dist/esm/modals/SavedQueriesModal.d.ts.map +1 -0
  537. package/dist/esm/modals/SavedQueriesModal.js +125 -0
  538. package/dist/esm/modals/index.d.ts +0 -1
  539. package/dist/esm/modals/index.d.ts.map +1 -1
  540. package/dist/esm/modals/index.js +0 -1
  541. package/dist/esm/primitives/ButtonPrimitive.d.ts +3 -1
  542. package/dist/esm/primitives/ButtonPrimitive.d.ts.map +1 -1
  543. package/dist/esm/primitives/ButtonPrimitive.js +25 -17
  544. package/dist/esm/primitives/CheckboxPrimitive.d.ts +12 -0
  545. package/dist/esm/primitives/CheckboxPrimitive.d.ts.map +1 -0
  546. package/dist/esm/primitives/CheckboxPrimitive.js +27 -0
  547. package/dist/esm/primitives/HeaderPrimitive.d.ts.map +1 -1
  548. package/dist/esm/primitives/HeaderPrimitive.js +1 -1
  549. package/dist/esm/primitives/MiniButtonPrimitive.d.ts +7 -0
  550. package/dist/esm/primitives/MiniButtonPrimitive.d.ts.map +1 -0
  551. package/dist/esm/primitives/MiniButtonPrimitive.js +54 -0
  552. package/dist/esm/primitives/ModalPrimitive.d.ts +2 -10
  553. package/dist/esm/primitives/ModalPrimitive.d.ts.map +1 -1
  554. package/dist/esm/primitives/ModalPrimitive.js +7 -7
  555. package/dist/esm/primitives/PlaceholderPrimitive.d.ts +5 -0
  556. package/dist/esm/primitives/PlaceholderPrimitive.d.ts.map +1 -0
  557. package/dist/esm/primitives/PlaceholderPrimitive.js +15 -0
  558. package/dist/esm/primitives/PopoverPrimitive.d.ts +8 -0
  559. package/dist/esm/primitives/PopoverPrimitive.d.ts.map +1 -0
  560. package/dist/esm/primitives/PopoverPrimitive.js +49 -0
  561. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts +3 -1
  562. package/dist/esm/primitives/SecondaryButtonPrimitive.d.ts.map +1 -1
  563. package/dist/esm/primitives/SecondaryButtonPrimitive.js +14 -11
  564. package/dist/esm/primitives/TextInputPrimitive.d.ts +8 -2
  565. package/dist/esm/primitives/TextInputPrimitive.d.ts.map +1 -1
  566. package/dist/esm/primitives/TextInputPrimitive.js +100 -23
  567. package/dist/esm/primitives/TogglePrimitive.d.ts +6 -3
  568. package/dist/esm/primitives/TogglePrimitive.d.ts.map +1 -1
  569. package/dist/esm/primitives/TogglePrimitive.js +10 -7
  570. package/dist/esm/primitives/index.d.ts +1 -1
  571. package/dist/esm/primitives/index.d.ts.map +1 -1
  572. package/dist/esm/primitives/index.js +1 -1
  573. package/dist/esm/public_components/ChartQueryBuilder.d.ts +9 -0
  574. package/dist/esm/public_components/ChartQueryBuilder.d.ts.map +1 -0
  575. package/dist/esm/public_components/ChartQueryBuilder.js +125 -0
  576. package/dist/esm/public_components/CreateEnvironment.d.ts +2 -1
  577. package/dist/esm/public_components/CreateEnvironment.d.ts.map +1 -1
  578. package/dist/esm/public_components/CreateEnvironment.js +152 -72
  579. package/dist/esm/public_components/DashboardManager.d.ts +2 -2
  580. package/dist/esm/public_components/DashboardManager.d.ts.map +1 -1
  581. package/dist/esm/public_components/DashboardManager.js +358 -200
  582. package/dist/esm/public_components/EnvSelectPopover.d.ts +12 -0
  583. package/dist/esm/public_components/EnvSelectPopover.d.ts.map +1 -0
  584. package/dist/esm/public_components/EnvSelectPopover.js +138 -0
  585. package/dist/esm/public_components/VirtualTableManager.d.ts +7 -0
  586. package/dist/esm/public_components/VirtualTableManager.d.ts.map +1 -0
  587. package/dist/esm/public_components/VirtualTableManager.js +723 -0
  588. package/dist/esm/public_components/__tests__/CreateEnvironment.test.d.ts +2 -0
  589. package/dist/esm/public_components/__tests__/CreateEnvironment.test.d.ts.map +1 -0
  590. package/dist/esm/public_components/__tests__/CreateEnvironment.test.js +680 -0
  591. package/dist/esm/utils/astProcessing.d.ts +15 -0
  592. package/dist/esm/utils/astProcessing.d.ts.map +1 -0
  593. package/dist/esm/utils/astProcessing.js +98 -0
  594. package/dist/esm/utils/astProcessing.uspec.d.ts +2 -0
  595. package/dist/esm/utils/astProcessing.uspec.d.ts.map +1 -0
  596. package/dist/esm/utils/astProcessing.uspec.js +28 -0
  597. package/dist/esm/utils/columnProcessing.d.ts +15 -0
  598. package/dist/esm/utils/columnProcessing.d.ts.map +1 -0
  599. package/dist/esm/utils/columnProcessing.js +200 -0
  600. package/dist/esm/utils/constants.d.ts +4 -21
  601. package/dist/esm/utils/constants.d.ts.map +1 -1
  602. package/dist/esm/utils/constants.js +18 -9
  603. package/dist/esm/utils/dataEditor.d.ts +4 -3
  604. package/dist/esm/utils/dataEditor.d.ts.map +1 -1
  605. package/dist/esm/utils/dataEditor.js +65 -115
  606. package/dist/esm/utils/dataFetcher.d.ts +20 -2
  607. package/dist/esm/utils/dataFetcher.d.ts.map +1 -1
  608. package/dist/esm/utils/dataFetcher.js +44 -53
  609. package/dist/esm/utils/databases.d.ts +20 -9
  610. package/dist/esm/utils/databases.d.ts.map +1 -1
  611. package/dist/esm/utils/databases.js +63 -25
  612. package/dist/esm/utils/filter.d.ts +222 -0
  613. package/dist/esm/utils/filter.d.ts.map +1 -0
  614. package/dist/esm/utils/filter.js +343 -0
  615. package/dist/esm/utils/monacoAutocomplete.d.ts +22 -0
  616. package/dist/esm/utils/monacoAutocomplete.d.ts.map +1 -0
  617. package/dist/esm/utils/monacoAutocomplete.js +350 -0
  618. package/dist/esm/utils/report.d.ts +120 -0
  619. package/dist/esm/utils/report.d.ts.map +1 -0
  620. package/dist/esm/utils/report.js +106 -0
  621. package/dist/esm/utils/schema.d.ts +43 -26
  622. package/dist/esm/utils/schema.d.ts.map +1 -1
  623. package/dist/esm/utils/schema.js +171 -1
  624. package/dist/esm/utils/table.d.ts +70 -4
  625. package/dist/esm/utils/table.d.ts.map +1 -1
  626. package/dist/esm/utils/tenants.d.ts +48 -0
  627. package/dist/esm/utils/tenants.d.ts.map +1 -0
  628. package/dist/esm/utils/tenants.js +31 -0
  629. package/dist/esm/utils/ui.d.ts +2 -0
  630. package/dist/esm/utils/ui.d.ts.map +1 -0
  631. package/dist/esm/utils/ui.js +14 -0
  632. package/dist/esm/utils/validation.d.ts +2 -0
  633. package/dist/esm/utils/validation.d.ts.map +1 -0
  634. package/dist/esm/utils/validation.js +74 -0
  635. package/dist/esm/utils/validation.uspec.d.ts +2 -0
  636. package/dist/esm/utils/validation.uspec.d.ts.map +1 -0
  637. package/dist/esm/utils/validation.uspec.js +51 -0
  638. package/package.json +22 -8
  639. package/dist/cjs/components/EnvSelectPopover.d.ts +0 -13
  640. package/dist/cjs/components/EnvSelectPopover.d.ts.map +0 -1
  641. package/dist/cjs/components/EnvSelectPopover.js +0 -224
  642. package/dist/cjs/components/SqlViewTile.d.ts +0 -8
  643. package/dist/cjs/components/SqlViewTile.d.ts.map +0 -1
  644. package/dist/cjs/components/SqlViewTile.js +0 -69
  645. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts +0 -24
  646. package/dist/cjs/forms/client_onboard/CreateSqlViews.d.ts.map +0 -1
  647. package/dist/cjs/forms/client_onboard/CreateSqlViews.js +0 -237
  648. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts +0 -26
  649. package/dist/cjs/forms/sql_views/CreateEditSqlView.d.ts.map +0 -1
  650. package/dist/cjs/forms/sql_views/CreateEditSqlView.js +0 -177
  651. package/dist/cjs/modals/PromoteDashModal.d.ts +0 -17
  652. package/dist/cjs/modals/PromoteDashModal.d.ts.map +0 -1
  653. package/dist/cjs/modals/PromoteDashModal.js +0 -133
  654. package/dist/cjs/primitives/SelectPrimitive.d.ts +0 -16
  655. package/dist/cjs/primitives/SelectPrimitive.d.ts.map +0 -1
  656. package/dist/cjs/primitives/SelectPrimitive.js +0 -43
  657. package/dist/cjs/public_components/DashboardBuilder.d.ts +0 -7
  658. package/dist/cjs/public_components/DashboardBuilder.d.ts.map +0 -1
  659. package/dist/cjs/public_components/DashboardBuilder.js +0 -309
  660. package/dist/cjs/public_components/SQLViewManager.d.ts +0 -5
  661. package/dist/cjs/public_components/SQLViewManager.d.ts.map +0 -1
  662. package/dist/cjs/public_components/SQLViewManager.js +0 -387
  663. package/dist/esm/components/EnvSelectPopover.d.ts +0 -13
  664. package/dist/esm/components/EnvSelectPopover.d.ts.map +0 -1
  665. package/dist/esm/components/EnvSelectPopover.js +0 -221
  666. package/dist/esm/components/SqlViewTile.d.ts +0 -8
  667. package/dist/esm/components/SqlViewTile.d.ts.map +0 -1
  668. package/dist/esm/components/SqlViewTile.js +0 -40
  669. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts +0 -24
  670. package/dist/esm/forms/client_onboard/CreateSqlViews.d.ts.map +0 -1
  671. package/dist/esm/forms/client_onboard/CreateSqlViews.js +0 -229
  672. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts +0 -26
  673. package/dist/esm/forms/sql_views/CreateEditSqlView.d.ts.map +0 -1
  674. package/dist/esm/forms/sql_views/CreateEditSqlView.js +0 -171
  675. package/dist/esm/modals/PromoteDashModal.d.ts +0 -17
  676. package/dist/esm/modals/PromoteDashModal.d.ts.map +0 -1
  677. package/dist/esm/modals/PromoteDashModal.js +0 -130
  678. package/dist/esm/primitives/SelectPrimitive.d.ts +0 -16
  679. package/dist/esm/primitives/SelectPrimitive.d.ts.map +0 -1
  680. package/dist/esm/primitives/SelectPrimitive.js +0 -41
  681. package/dist/esm/public_components/DashboardBuilder.d.ts +0 -7
  682. package/dist/esm/public_components/DashboardBuilder.d.ts.map +0 -1
  683. package/dist/esm/public_components/DashboardBuilder.js +0 -303
  684. package/dist/esm/public_components/SQLViewManager.d.ts +0 -5
  685. package/dist/esm/public_components/SQLViewManager.d.ts.map +0 -1
  686. package/dist/esm/public_components/SQLViewManager.js +0 -381
@@ -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,334 +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
- function EditFiltersModal({ isOpen, dashboardData, selectedDashboard, client, setIsOpen, onSave, ModalComponent, TextInputComponent, ButtonComponent, HeaderComponent, SelectComponent, dashNames, SecondaryButtonComponent, openEditOrderModal, }) {
18
- const { state, dispatch } = (0, AdminProvider_1.useAdmin)();
19
- const [selectedDashboardName, setSelectedDashboardName] = (0, react_1.useState)('');
20
- const { data } = (0, react_2.useDashboard)(selectedDashboard.name);
16
+ const columnProcessing_1 = require("../utils/columnProcessing");
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);
21
52
  const [isDateComparison, setIsDateComparison] = (0, react_1.useState)(false);
53
+ const [currentDashboardName, setCurrentDashboardName] = (0, react_1.useState)(selectedDashboardName);
22
54
  const [newFilters, setNewFilters] = (0, react_1.useState)([]);
23
- 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
+ });
24
59
  const [showDateFilter, setShowDateFilter] = (0, react_1.useState)(false);
25
- 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]);
26
351
  (0, react_1.useEffect)(() => {
27
352
  if (!selectedDashboard) {
28
353
  return;
29
354
  }
30
- setSelectedDashboardName(selectedDashboard);
31
- setIsDateComparison(selectedDashboard.dateFilter?.comparison);
32
- setNewFilters(selectedDashboard.filters || []);
355
+ setValidationError([]);
356
+ setCurrentDashboardName(selectedDashboard.name);
357
+ setIsDateComparison(selectedDashboard?.dateFilter?.comparison ?? false);
358
+ setNewFilters(selectedDashboard?.filters ?? []);
33
359
  setNewDateFilter(selectedDashboard.dateFilter);
34
- setSelectedDashboardName(selectedDashboard.name);
360
+ setDisplaySubIntervals(selectedDashboard.dateFilter?.presetOptions?.map(() => false) ?? []);
35
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
+ }, {}));
36
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
+ ]);
37
416
  const handleAddFilter = async () => {
38
417
  setNewFilters([...newFilters, { label: '' }]);
39
418
  };
419
+ const normalizeFieldName = (fieldName) => {
420
+ return (fieldName
421
+ ?.split('_')
422
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
423
+ .join(' ') ?? '');
424
+ };
40
425
  const handleSubmitDashboardChanges = async () => {
41
- if (!selectedDashboardName ||
42
- newFilters.some((filter) => !filter.label) ||
43
- (newDateFilter &&
44
- Object.keys(newDateFilter).length &&
45
- !newDateFilter.label)) {
46
- alert('Empty fields');
47
- return;
48
- }
49
- if (newFilters.filter((elem) => !elem.field).length) {
50
- 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);
51
429
  return;
52
430
  }
53
431
  const updatedFilters = newFilters.map((filter) => {
54
- const table = state.tables.find((table) => table.name === filter.table);
55
- 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));
56
434
  return {
57
435
  table: filter.table,
58
436
  field: filter.field,
59
437
  labelField: filter.field,
60
438
  label: filter.label,
439
+ oldLabel: Object.entries(filterNameMap).find(([oldLabel, newLabel]) => newLabel === filter.label && oldLabel !== filter.label)?.[0],
61
440
  filterType,
62
441
  stringFilterType: filter.stringFilterType,
63
442
  };
64
443
  });
65
- if (dashNames &&
66
- dashNames.length > 0 &&
67
- dashNames.some((dashName) => dashName.name === selectedDashboardName &&
68
- selectedDashboardName !== selectedDashboard.name)) {
69
- alert('Dashboard name already taken!');
70
- return;
71
- }
72
- const fieldsSet = new Set();
73
- const hasDuplicateField = updatedFilters.some((filter) => {
74
- if (fieldsSet.has(filter.field)) {
75
- return true;
76
- }
77
- else {
78
- fieldsSet.add(filter.field);
79
- return false;
80
- }
81
- });
82
- if (hasDuplicateField ||
83
- (newDateFilter &&
84
- Object.keys(newDateFilter).length > 0 &&
85
- updatedFilters.some((filter) => filter.filterType === 'date'))) {
86
- alert('Maximum of one filter per field');
87
- return;
88
- }
89
- let allValid = true;
90
- updatedFilters.forEach((filter) => {
91
- if (filter.filterType !== 'string' && filter.filterType !== 'date') {
92
- allValid = false;
93
- console.error(`Invalid filterType found: ${filter.filterType}`);
94
- }
95
- });
96
- if (!allValid) {
97
- alert('We only support string and date filters.');
98
- return;
99
- }
100
- const filterProblems = [];
101
- if (newDateFilter) {
102
- data.newQueries.forEach((chart) => {
103
- if (!chart.dateField ||
104
- !chart.dateField.table ||
105
- !chart.dateField.field) {
106
- filterProblems.push({
107
- chart: chart.name,
108
- filter: `${newDateFilter.label} (Date filter)`,
109
- });
110
- }
111
- });
112
- }
113
- updatedFilters.forEach((filter) => {
114
- data.newQueries.forEach((chart) => {
115
- const chartTable = chart.referencedTables.find((table) => table === filter.table);
116
- if (!chartTable) {
117
- filterProblems.push({ chart: chart.name, filter: filter.label });
118
- }
119
- });
120
- });
121
- if (filterProblems.length > 0) {
122
- 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.`);
123
- return;
124
- }
125
- const url = `${constants_1.QUILL_SERVER}/dashfilter/${client._id}/`;
126
- const body = {
127
- newDashboardName: selectedDashboardName,
128
- 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
+ }),
129
454
  dateFilter: newDateFilter
130
455
  ? {
131
456
  ...newDateFilter,
132
457
  comparison: isDateComparison,
133
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),
134
495
  }
135
- : null,
136
- name: selectedDashboard.name,
137
- databaseType: state.client.databaseType,
138
- };
139
- const headers = {
140
- 'Content-Type': 'application/json',
141
- Authorization: `Bearer `,
142
- };
143
- try {
144
- const response = await fetch(url, {
145
- method: 'POST',
146
- headers: headers,
147
- body: JSON.stringify(body),
148
- });
149
- await onSave(selectedDashboardName);
150
- setIsOpen(false);
151
- }
152
- catch (e) {
153
- console.log('error');
154
- }
496
+ : undefined,
497
+ // sectionOrder,
498
+ });
499
+ await onSave(currentDashboardName);
500
+ setIsOpen(false);
155
501
  };
156
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];
157
506
  setNewFilters(newFilters.filter((f) => f !== filter));
158
507
  };
159
- const handleDeleteDateFilter = async () => {
508
+ const handleDeleteDateFilter = () => {
160
509
  setShowDateFilter(false);
161
- setNewDateFilter(null);
510
+ setNewDateFilter(undefined);
162
511
  };
163
- const handleAddDateFilter = async () => {
512
+ const handleAddDateFilter = () => {
164
513
  setShowDateFilter(true);
165
- 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
+ });
166
571
  };
167
572
  const handleDeleteDashboard = async () => {
168
573
  if (confirm('Are you sure? This action cannot be undone.')) {
169
- const URL = `${constants_1.QUILL_SERVER}/dashboard/${selectedDashboard.name}`;
170
- await fetch(URL, {
171
- method: 'DELETE',
172
- headers: { 'Content-Type': 'application/json' },
173
- body: JSON.stringify({
174
- clientId: client._id,
175
- databaseType: state.client.databaseType,
176
- }),
177
- });
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);
178
581
  setIsOpen(false);
179
582
  setNewFilters([]);
180
- await onSave();
181
583
  }
182
584
  };
183
- return ((0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, close: () => {
585
+ return ((0, jsx_runtime_1.jsx)(ModalComponent, { isOpen: isOpen, onClose: () => {
586
+ setValidationError([]);
184
587
  setIsOpen(false);
185
- setSelectedDashboardName(selectedDashboard);
186
- setIsDateComparison(selectedDashboard.dateFilter?.comparison);
187
- setNewFilters(selectedDashboard.filters || []);
188
- setNewDateFilter(selectedDashboard.dateFilter);
189
- setSelectedDashboardName(selectedDashboard.name);
190
- 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);
191
593
  }, style: {
192
594
  minWidth: '814px',
193
- }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
194
- display: 'flex',
195
- gap: 16,
196
- flexDirection: 'column',
197
- width: '100%',
198
- height: '100%',
199
- maxHeight: '100%',
200
- overflowY: 'auto',
201
- }, 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: {
202
- display: 'flex',
203
- flexDirection: 'column',
204
- gap: '10px',
205
- }, 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: {
206
- display: 'flex',
207
- flexDirection: 'row',
208
- gap: '10px',
209
- }, 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: {
210
675
  display: 'flex',
211
- flexDirection: 'row',
212
- alignItems: 'center',
213
- }, children: (0, jsx_runtime_1.jsx)(TextInputComponent, { value: newDateFilter?.label || '', onChange: (e) => {
214
- setNewDateFilter({
215
- ...newDateFilter,
216
- label: e.target.value,
217
- });
218
- } }) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
219
- display: 'flex',
220
- flexDirection: 'row',
221
- gap: '10px',
222
- }, 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) => {
223
- setInitialRange(constants_1.InitialDateRangeOptions.find((table) => table.label === e) ?? initialRange);
224
- }, options: constants_1.InitialDateRangeOptions.map((table) => {
225
- return { label: table.label, value: table.label };
226
- }), theme: Admin_1.defaultTheme })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
227
- 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',
228
819
  flexDirection: 'row',
229
- gap: '10px',
230
- width: '100%',
231
- }, 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: {
232
833
  display: 'flex',
233
834
  flexDirection: 'column',
234
- width: '100%',
235
- }, 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: {
236
837
  display: 'flex',
237
838
  flexDirection: 'row',
238
- gap: 10,
239
- width: '100%',
240
- }, 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: {
241
1003
  display: 'flex',
242
1004
  flexDirection: 'column',
243
- justifyContent: 'center',
244
1005
  height: '100%',
245
- minWidth: 200,
246
- maxWidth: 200,
247
- width: 200,
248
- }, children: (0, jsx_runtime_1.jsx)(TogglePrimitive_1.default, { value: isDateComparison, onClick: () => {
249
- setIsDateComparison((isDateComparison) => !isDateComparison);
250
- } }) }), (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',
251
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: {
252
1155
  display: 'flex',
1156
+ flexDirection: 'row',
1157
+ gap: '10px',
253
1158
  justifyContent: 'flex-end',
254
- }, children: (0, jsx_runtime_1.jsx)("div", { onClick: () => handleDeleteDateFilter(), style: {
255
- height: 38,
256
- width: 38,
257
- alignItems: 'center',
258
- justifyContent: 'flex-end',
1159
+ width: 620,
1160
+ borderTop: '1px solid #d7d7d7',
1161
+ paddingTop: 10,
1162
+ }, children: (0, jsx_runtime_1.jsx)("div", { style: {
259
1163
  display: 'flex',
260
- cursor: 'pointer',
261
- }, 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: {
262
- display: 'flex',
263
- flexDirection: 'row',
264
- alignItems: 'center',
265
- justifyContent: 'space-between',
266
- marginTop: 20,
267
- }, 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) => {
268
- 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: {
269
1177
  display: 'flex',
270
- flexDirection: 'row',
1178
+ flexDirection: 'column',
271
1179
  gap: '10px',
272
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
273
- display: 'flex',
274
- flexDirection: 'column',
275
- // maxWidth: 300,
276
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Label" }), (0, jsx_runtime_1.jsx)(TextInputComponent, { value: filter?.label || '', onChange: (e) => {
277
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
278
- ? { ...otherFilter, label: e.target.value }
279
- : otherFilter);
280
- setNewFilters(updatedFilters);
281
- } })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
1180
+ }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
282
1181
  display: 'flex',
283
- flexDirection: 'column',
284
- maxWidth: 300,
285
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Table" }), (0, jsx_runtime_1.jsx)(SelectComponent, { value: filter.table || '', onChange: (e) => {
286
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
287
- ? { ...otherFilter, table: e }
288
- : otherFilter);
289
- setNewFilters(updatedFilters);
290
- }, options: state.tables.map((table) => {
291
- return { label: table.name, value: table.name };
292
- }), theme: Admin_1.defaultTheme })] }), (0, jsx_runtime_1.jsxs)("div", { style: {
293
- display: 'flex',
294
- flexDirection: 'column',
295
- maxWidth: 300,
296
- }, 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
297
- ? state.tables
298
- .find((table) => table.name === filter.table)
299
- ?.columns.filter((column) => {
300
- return column.fieldType === 'varchar';
301
- })
302
- .map((column) => {
303
- return {
304
- label: column.name,
305
- value: column.name,
306
- };
307
- })
308
- : [], onChange: (e) => {
309
- const updatedFilters = newFilters.map((otherFilter, i) => index === i
310
- ? { ...otherFilter, field: e }
311
- : otherFilter);
312
- setNewFilters(updatedFilters);
313
- } })] }), (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: {
314
1187
  display: 'flex',
315
1188
  flexDirection: 'column',
316
- width: '100%',
317
- }, children: [index === 0 && (0, jsx_runtime_1.jsx)(InputLabel_1.default, { children: "Filter Type" }), (0, jsx_runtime_1.jsx)("div", { style: {
318
- display: 'flex',
319
- flexDirection: 'column',
320
- alignItems: 'center',
321
- width: '100%',
322
- }, 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: {
323
1195
  display: 'flex',
324
- flexDirection: 'row',
325
- alignItems: 'center',
326
- width: '100%',
327
- gap: 10,
328
- }, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { theme: Admin_1.defaultTheme, value: filter && filter.stringFilterType
329
- ? filter.stringFilterType
330
- : '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;
331
1200
  const updatedFilters = newFilters.map((otherFilter, i) => index === i
332
- ? { ...otherFilter, stringFilterType: e }
1201
+ ? {
1202
+ ...otherFilter,
1203
+ label: e.target.value,
1204
+ }
333
1205
  : otherFilter);
334
1206
  setNewFilters(updatedFilters);
335
- } }), (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: {
336
1290
  height: 38,
337
1291
  alignItems: 'center',
338
- justifyContent: 'flex-end',
339
1292
  display: 'flex',
340
1293
  cursor: 'pointer',
341
1294
  width: '100%',
342
- }, 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));
343
- }) })), (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] }))] })] }) }) }) }));
344
1311
  }
345
- exports.EditFiltersModal = EditFiltersModal;