@solidstarters/solid-core-ui 1.1.211 → 1.1.212

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 (373) hide show
  1. package/dist/components/Svg/DevDocs.tsx +9 -0
  2. package/dist/components/Svg/DocsSvg.tsx +9 -0
  3. package/dist/components/Svg/ExcelSvg.tsx +15 -0
  4. package/dist/components/Svg/FieldSvg.tsx +9 -0
  5. package/dist/components/Svg/FileSvg.tsx +18 -0
  6. package/dist/components/Svg/HomePageModuleSvg.tsx +179 -0
  7. package/dist/components/Svg/ModelSvg.tsx +9 -0
  8. package/dist/components/Svg/ModuleSvg.tsx +9 -0
  9. package/dist/components/Svg/PDFSvg.tsx +15 -0
  10. package/dist/components/Svg/RightArrowSvg.tsx +9 -0
  11. package/dist/components/Svg/SettingsSvg.tsx +9 -0
  12. package/dist/components/auth/AuthLayout.tsx +223 -0
  13. package/dist/components/auth/ForgotPasswordThankYou.tsx +33 -0
  14. package/dist/components/auth/GoogleAuthChecking.tsx +63 -0
  15. package/dist/components/auth/SolidChangeForcePassword.tsx +222 -0
  16. package/dist/components/auth/SolidForgotPassword.tsx +127 -0
  17. package/dist/components/auth/SolidInitialLoginOtp.tsx +271 -0
  18. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +218 -0
  19. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  20. package/dist/components/auth/SolidLogin.js +14 -8
  21. package/dist/components/auth/SolidLogin.js.map +1 -1
  22. package/dist/components/auth/SolidLogin.tsx +428 -0
  23. package/dist/components/auth/SolidOTPVerify.tsx +133 -0
  24. package/dist/components/auth/SolidRegister.tsx +454 -0
  25. package/dist/components/auth/SolidResetPassword.tsx +194 -0
  26. package/dist/components/common/AuthBanner.tsx +41 -0
  27. package/dist/components/common/AutoCompleteField.tsx +79 -0
  28. package/dist/components/common/BackButton.tsx +72 -0
  29. package/dist/components/common/CancelButton.tsx +61 -0
  30. package/dist/components/common/CodeEditor.tsx +38 -0
  31. package/dist/components/common/CreateButton.tsx +17 -0
  32. package/dist/components/common/DownloadProgressToast.tsx +55 -0
  33. package/dist/components/common/DropzonePlaceholder.tsx +31 -0
  34. package/dist/components/common/DropzoneUpload.tsx +11 -0
  35. package/dist/components/common/FileReaderExt.tsx +20 -0
  36. package/dist/components/common/GeneralSettings.tsx +1225 -0
  37. package/dist/components/common/HeaderDynamicTitles.tsx +13 -0
  38. package/dist/components/common/MarkdownViewer.tsx +84 -0
  39. package/dist/components/common/MultipleSelectAutoCompleteField.tsx +64 -0
  40. package/dist/components/common/NotFound.tsx +22 -0
  41. package/dist/components/common/SingleSelectAutoCompleteField.tsx +73 -0
  42. package/dist/components/common/SocialMediaLogin.tsx +53 -0
  43. package/dist/components/common/SolidAdmin.tsx +6 -0
  44. package/dist/components/common/SolidBreadcrumb.tsx +129 -0
  45. package/dist/components/common/SolidExport.tsx +563 -0
  46. package/dist/components/common/SolidExportStepper.tsx +135 -0
  47. package/dist/components/common/SolidFieldTooltip.tsx +23 -0
  48. package/dist/components/common/SolidFormHeader.tsx +25 -0
  49. package/dist/components/common/SolidFormStepper.tsx +350 -0
  50. package/dist/components/common/SolidModuleHome.tsx +128 -0
  51. package/dist/components/common/SolidPopupContainer.tsx +37 -0
  52. package/dist/components/common/SolidSettings/LlmSettings/AnthropicProviderComponent.tsx +45 -0
  53. package/dist/components/common/SolidSettings/LlmSettings/OpenAiProviderComponent.tsx +45 -0
  54. package/dist/components/common/SolidSettings/SettingDropzoneActivePlaceholder.tsx +20 -0
  55. package/dist/components/common/SolidSettings/SettingsImageRemoveButton.tsx +15 -0
  56. package/dist/components/common/SolidSettings/SolidUploadedImage.tsx +16 -0
  57. package/dist/components/common/SolidThemeLink.tsx +6 -0
  58. package/dist/components/common/SolidThemeProvider.tsx +44 -0
  59. package/dist/components/common/StepperArrows/ActiveArrowStep.tsx +18 -0
  60. package/dist/components/common/StepperArrows/ActiveBeforeStepArrow.tsx +18 -0
  61. package/dist/components/common/StepperArrows/InactiveStepArrow.tsx +19 -0
  62. package/dist/components/common/error.tsx +30 -0
  63. package/dist/components/common/useHandleFormCustomButtonClick.ts +40 -0
  64. package/dist/components/common/useHandleListCustomButtonClick.ts +42 -0
  65. package/dist/components/core/chatter/SolidChatter.tsx +248 -0
  66. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +35 -0
  67. package/dist/components/core/chatter/SolidChatterCustomMessage.tsx +46 -0
  68. package/dist/components/core/chatter/SolidChatterDateDivider.tsx +16 -0
  69. package/dist/components/core/chatter/SolidChatterHeader.tsx +218 -0
  70. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +163 -0
  71. package/dist/components/core/chatter/SolidMessageComposer.tsx +146 -0
  72. package/dist/components/core/common/AvatarWidget.tsx +55 -0
  73. package/dist/components/core/common/DateFieldViewComponent.tsx +36 -0
  74. package/dist/components/core/common/FilterComponent.tsx +458 -0
  75. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +70 -0
  76. package/dist/components/core/common/PDFViewer.tsx +117 -0
  77. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +89 -0
  78. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +188 -0
  79. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +139 -0
  80. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +311 -0
  81. package/dist/components/core/common/SolidCreateButton.tsx +48 -0
  82. package/dist/components/core/common/SolidGenericImport/DocumentSvg.tsx +15 -0
  83. package/dist/components/core/common/SolidGenericImport/SolidGenericImport.tsx +64 -0
  84. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +125 -0
  85. package/dist/components/core/common/SolidGenericImport/SolidImportInstructions.tsx +122 -0
  86. package/dist/components/core/common/SolidGenericImport/SolidImportStepper.tsx +217 -0
  87. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +205 -0
  88. package/dist/components/core/common/SolidGenericImport/SolidImportTransactionStatus.tsx +158 -0
  89. package/dist/components/core/common/SolidGenericImport/SolidImportWrapper.tsx +29 -0
  90. package/dist/components/core/common/SolidGlobalSearchElement.tsx +1470 -0
  91. package/dist/components/core/common/SolidLayoutViews.tsx +87 -0
  92. package/dist/components/core/common/SolidListViewOptions.tsx +31 -0
  93. package/dist/components/core/common/SolidLoaders/SolidCircularLoader.tsx +7 -0
  94. package/dist/components/core/common/SolidPasswordHelperText.tsx +34 -0
  95. package/dist/components/core/common/SolidSaveCustomFilterForm.tsx +75 -0
  96. package/dist/components/core/common/SolidSearchBox.tsx +17 -0
  97. package/dist/components/core/common/SolidViewLayoutManager.ts +421 -0
  98. package/dist/components/core/common/SolidXAiIframe.tsx +77 -0
  99. package/dist/components/core/dashboard/SolidDashboard.tsx +332 -0
  100. package/dist/components/core/dashboard/SolidDashboardBody.tsx +117 -0
  101. package/dist/components/core/dashboard/SolidDashboardFilterRequired.tsx +28 -0
  102. package/dist/components/core/dashboard/SolidDashboardHeader.tsx +10 -0
  103. package/dist/components/core/dashboard/SolidDashboardLoading.tsx +55 -0
  104. package/dist/components/core/dashboard/SolidDashboardNotAvailable.tsx +32 -0
  105. package/dist/components/core/dashboard/SolidDashboardRenderError.tsx +29 -0
  106. package/dist/components/core/dashboard/SolidDashboardVariable.tsx +256 -0
  107. package/dist/components/core/dashboard/SolidQuestionRenderer.tsx +78 -0
  108. package/dist/components/core/dashboard/chart-renderers/ChartJsRenderer.tsx +18 -0
  109. package/dist/components/core/dashboard/chart-renderers/PrimeReactDatatableRenderer.tsx +54 -0
  110. package/dist/components/core/dashboard/chart-renderers/init-chartjs.ts +25 -0
  111. package/dist/components/core/dashboard/dashboard-utils.ts +39 -0
  112. package/dist/components/core/extension/solid-core/CustomIcon/StatusIcon.tsx +17 -0
  113. package/dist/components/core/extension/solid-core/dashboardQuestion/ChartFormPreviewWidget.tsx +36 -0
  114. package/dist/components/core/extension/solid-core/emailTemplate/emailFormTypeChangeHandler.ts +18 -0
  115. package/dist/components/core/extension/solid-core/emailTemplate/emailFormTypeLoad.ts +18 -0
  116. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +114 -0
  117. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +213 -0
  118. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +138 -0
  119. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +209 -0
  120. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +131 -0
  121. package/dist/components/core/field/FieldListViewData.tsx +313 -0
  122. package/dist/components/core/filter/SolidBooleanFilterElement.tsx +30 -0
  123. package/dist/components/core/filter/SolidFilterFields.tsx +131 -0
  124. package/dist/components/core/filter/SolidManyToManyFilterElement.tsx +64 -0
  125. package/dist/components/core/filter/SolidManyToOneFilterElement.tsx +61 -0
  126. package/dist/components/core/filter/SolidSelectionDynamicFilterElement.tsx +50 -0
  127. package/dist/components/core/filter/SolidSelectionStaticFilterElement.tsx +32 -0
  128. package/dist/components/core/filter/SolidVarInputsFilterElement.tsx +209 -0
  129. package/dist/components/core/filter/fields/SolidBigintField.tsx +9 -0
  130. package/dist/components/core/filter/fields/SolidBooleanField.tsx +68 -0
  131. package/dist/components/core/filter/fields/SolidComputedField.tsx +23 -0
  132. package/dist/components/core/filter/fields/SolidDateField.tsx +63 -0
  133. package/dist/components/core/filter/fields/SolidDatetimeField.tsx +54 -0
  134. package/dist/components/core/filter/fields/SolidDecimalField.tsx +9 -0
  135. package/dist/components/core/filter/fields/SolidExternalIdField.tsx +52 -0
  136. package/dist/components/core/filter/fields/SolidFloatField.tsx +9 -0
  137. package/dist/components/core/filter/fields/SolidIdField.tsx +46 -0
  138. package/dist/components/core/filter/fields/SolidIntField.tsx +61 -0
  139. package/dist/components/core/filter/fields/SolidLongTextField.tsx +9 -0
  140. package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +60 -0
  141. package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +62 -0
  142. package/dist/components/core/filter/fields/SolidRelationField.tsx +17 -0
  143. package/dist/components/core/filter/fields/SolidRichTextField.tsx +9 -0
  144. package/dist/components/core/filter/fields/SolidSelectionDynamicField.tsx +52 -0
  145. package/dist/components/core/filter/fields/SolidSelectionStaticField.tsx +54 -0
  146. package/dist/components/core/filter/fields/SolidShortTextField.tsx +60 -0
  147. package/dist/components/core/filter/fields/SolidTimeField.tsx +48 -0
  148. package/dist/components/core/filter/fields/SolidUuidField.tsx +51 -0
  149. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.tsx +62 -0
  150. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.tsx +84 -0
  151. package/dist/components/core/form/SolidFormActionHeader.tsx +497 -0
  152. package/dist/components/core/form/SolidFormFieldRender.tsx +53 -0
  153. package/dist/components/core/form/SolidFormFieldRenderExtension.tsx +26 -0
  154. package/dist/components/core/form/SolidFormFooter.tsx +162 -0
  155. package/dist/components/core/form/SolidFormLayouts.tsx +104 -0
  156. package/dist/components/core/form/SolidFormUserViewLayout.tsx +84 -0
  157. package/dist/components/core/form/SolidFormView.tsx +1856 -0
  158. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.tsx +52 -0
  159. package/dist/components/core/form/SolidFormViewNormalHeaderButton.tsx +52 -0
  160. package/dist/components/core/form/SolidFormViewShimmerLoading.tsx +109 -0
  161. package/dist/components/core/form/fields/ISolidField.tsx +71 -0
  162. package/dist/components/core/form/fields/SolidBooleanField.tsx +434 -0
  163. package/dist/components/core/form/fields/SolidDateField.tsx +247 -0
  164. package/dist/components/core/form/fields/SolidDateTimeField.tsx +229 -0
  165. package/dist/components/core/form/fields/SolidDecimalField.tsx +171 -0
  166. package/dist/components/core/form/fields/SolidEmailField.tsx +176 -0
  167. package/dist/components/core/form/fields/SolidIntegerField.tsx +282 -0
  168. package/dist/components/core/form/fields/SolidJsonField.tsx +185 -0
  169. package/dist/components/core/form/fields/SolidLongTextField.tsx +618 -0
  170. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +663 -0
  171. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +547 -0
  172. package/dist/components/core/form/fields/SolidPasswordField.tsx +390 -0
  173. package/dist/components/core/form/fields/SolidRelationField.tsx +56 -0
  174. package/dist/components/core/form/fields/SolidRichTextField.tsx +188 -0
  175. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +340 -0
  176. package/dist/components/core/form/fields/SolidSelectionStaticField.tsx +462 -0
  177. package/dist/components/core/form/fields/SolidShortTextField.tsx +399 -0
  178. package/dist/components/core/form/fields/SolidTimeField.tsx +245 -0
  179. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +453 -0
  180. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +1036 -0
  181. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +627 -0
  182. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +38 -0
  183. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +64 -0
  184. package/dist/components/core/form/fields/widgets/SolidAiInteractionMessageFieldFormWidget.tsx +135 -0
  185. package/dist/components/core/form/fields/widgets/SolidAiInteractionMetadataFieldFormWidget.tsx +144 -0
  186. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +265 -0
  187. package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +32 -0
  188. package/dist/components/core/form/fields/widgets/SolidRelationFieldAvatarFormWidget.tsx +50 -0
  189. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +222 -0
  190. package/dist/components/core/form/fields/widgets/SolidShortTextFieldAvatarWidget.tsx +70 -0
  191. package/dist/components/core/form/widgets/CustomHtml.tsx +20 -0
  192. package/dist/components/core/kanban/KanbanBoard.tsx +150 -0
  193. package/dist/components/core/kanban/KanbanCard.tsx +279 -0
  194. package/dist/components/core/kanban/KanbanColumn.tsx +139 -0
  195. package/dist/components/core/kanban/KanbanUserViewLayout.tsx +84 -0
  196. package/dist/components/core/kanban/SolidKanbanView.tsx +894 -0
  197. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +154 -0
  198. package/dist/components/core/kanban/SolidKanbanViewFields.tsx +164 -0
  199. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +59 -0
  200. package/dist/components/core/kanban/SolidSelectionDynamicFilterElement.tsx +50 -0
  201. package/dist/components/core/kanban/SolidSelectionStaticFilterElement.tsx +32 -0
  202. package/dist/components/core/kanban/SolidVarInputsFilterElement.tsx +184 -0
  203. package/dist/components/core/kanban/kanban-fields/SolidBigintKanbanField.tsx +9 -0
  204. package/dist/components/core/kanban/kanban-fields/SolidBooleanKanbanField.tsx +16 -0
  205. package/dist/components/core/kanban/kanban-fields/SolidComputedKanbanField.tsx +23 -0
  206. package/dist/components/core/kanban/kanban-fields/SolidDateKanbanField.tsx +14 -0
  207. package/dist/components/core/kanban/kanban-fields/SolidDatetimeKanbanField.tsx +13 -0
  208. package/dist/components/core/kanban/kanban-fields/SolidDecimalKanbanField.tsx +9 -0
  209. package/dist/components/core/kanban/kanban-fields/SolidExternalIdKanbanField.tsx +12 -0
  210. package/dist/components/core/kanban/kanban-fields/SolidFloatKanbanField.tsx +9 -0
  211. package/dist/components/core/kanban/kanban-fields/SolidIdKanbanField.tsx +14 -0
  212. package/dist/components/core/kanban/kanban-fields/SolidIntKanbanField.tsx +20 -0
  213. package/dist/components/core/kanban/kanban-fields/SolidLongTextKanbanField.tsx +9 -0
  214. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +140 -0
  215. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +164 -0
  216. package/dist/components/core/kanban/kanban-fields/SolidRelationKanbanField.tsx +13 -0
  217. package/dist/components/core/kanban/kanban-fields/SolidRichTextKanbanField.tsx +9 -0
  218. package/dist/components/core/kanban/kanban-fields/SolidSelectionDynamicKanbanField.tsx +14 -0
  219. package/dist/components/core/kanban/kanban-fields/SolidSelectionStaticKanbanField.tsx +14 -0
  220. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +121 -0
  221. package/dist/components/core/kanban/kanban-fields/SolidTimeKanbanField.tsx +12 -0
  222. package/dist/components/core/kanban/kanban-fields/SolidUuidKanbanField.tsx +13 -0
  223. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +16 -0
  224. package/dist/components/core/list/ListViewRowActionPopup.tsx +41 -0
  225. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +242 -0
  226. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +111 -0
  227. package/dist/components/core/list/SolidListView.tsx +2007 -0
  228. package/dist/components/core/list/SolidListViewColumn.tsx +165 -0
  229. package/dist/components/core/list/SolidListViewConfigure.tsx +339 -0
  230. package/dist/components/core/list/SolidListViewHeaderButton.tsx +31 -0
  231. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +30 -0
  232. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +41 -0
  233. package/dist/components/core/list/SolidListViewShimmerLoading.tsx +78 -0
  234. package/dist/components/core/list/SolidListingHeader.tsx +42 -0
  235. package/dist/components/core/list/SolidManyToOneFilterElement.tsx +60 -0
  236. package/dist/components/core/list/SolidSelectionDynamicFilterElement.tsx +50 -0
  237. package/dist/components/core/list/SolidSelectionStaticFilterElement.tsx +32 -0
  238. package/dist/components/core/list/SolidTableRowCell.tsx +35 -0
  239. package/dist/components/core/list/SolidVarInputsFilterElement.tsx +184 -0
  240. package/dist/components/core/list/columns/SolidBigintColumn.tsx +9 -0
  241. package/dist/components/core/list/columns/SolidBooleanColumn.tsx +90 -0
  242. package/dist/components/core/list/columns/SolidComputedColumn.tsx +27 -0
  243. package/dist/components/core/list/columns/SolidDateColumn.tsx +90 -0
  244. package/dist/components/core/list/columns/SolidDatetimeColumn.tsx +79 -0
  245. package/dist/components/core/list/columns/SolidDecimalColumn.tsx +9 -0
  246. package/dist/components/core/list/columns/SolidExternalIdColumn.tsx +80 -0
  247. package/dist/components/core/list/columns/SolidFloatColumn.tsx +9 -0
  248. package/dist/components/core/list/columns/SolidIdColumn.tsx +79 -0
  249. package/dist/components/core/list/columns/SolidIntColumn.tsx +87 -0
  250. package/dist/components/core/list/columns/SolidLongTextColumn.tsx +9 -0
  251. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +301 -0
  252. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +170 -0
  253. package/dist/components/core/list/columns/SolidRelationColumn.tsx +21 -0
  254. package/dist/components/core/list/columns/SolidRichTextColumn.tsx +9 -0
  255. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.tsx +80 -0
  256. package/dist/components/core/list/columns/SolidSelectionStaticColumn.tsx +81 -0
  257. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +160 -0
  258. package/dist/components/core/list/columns/SolidTimeColumn.tsx +78 -0
  259. package/dist/components/core/list/columns/SolidUuidColumn.tsx +79 -0
  260. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +106 -0
  261. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +117 -0
  262. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +110 -0
  263. package/dist/components/core/list/widgets/SolidManyToManyRelationAvatarListWidget.tsx +30 -0
  264. package/dist/components/core/list/widgets/SolidManyToOneRelationAvatarListWidget.tsx +30 -0
  265. package/dist/components/core/list/widgets/SolidShortTextAvatarWidget.tsx +70 -0
  266. package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +21 -0
  267. package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +91 -0
  268. package/dist/components/core/locales/SolidLocale.tsx +127 -0
  269. package/dist/components/core/model/CreateModel.tsx +495 -0
  270. package/dist/components/core/model/FieldMetaData.tsx +263 -0
  271. package/dist/components/core/model/FieldMetaDataForm.tsx +3509 -0
  272. package/dist/components/core/model/FieldSelector.tsx +62 -0
  273. package/dist/components/core/model/ModelListViewData.tsx +384 -0
  274. package/dist/components/core/model/ModelMetaData.tsx +921 -0
  275. package/dist/components/core/module/CreateModule.tsx +617 -0
  276. package/dist/components/core/module/ModuleListViewData.tsx +431 -0
  277. package/dist/components/core/solid-ai/SolidAiMainWrapper.tsx +8 -0
  278. package/dist/components/core/solid-ai/SolidXAIIcon.tsx +37 -0
  279. package/dist/components/core/users/CreateUser.tsx +467 -0
  280. package/dist/components/core/users/CreateUserRole.tsx +212 -0
  281. package/dist/components/core/users/UserListView.tsx +376 -0
  282. package/dist/components/layout/AdminLayout.tsx +57 -0
  283. package/dist/components/layout/AdminSidebar.tsx +65 -0
  284. package/dist/components/layout/AppConfig.tsx +104 -0
  285. package/dist/components/layout/AppSidebar.tsx +232 -0
  286. package/dist/components/layout/ButtonLoader.tsx +7 -0
  287. package/dist/components/layout/CustomPagination.tsx +55 -0
  288. package/dist/components/layout/DashboardHeader.tsx +89 -0
  289. package/dist/components/layout/FilterMenu.tsx +122 -0
  290. package/dist/components/layout/Footer.tsx +13 -0
  291. package/dist/components/layout/GlobalSearch.tsx +37 -0
  292. package/dist/components/layout/Header.tsx +8 -0
  293. package/dist/components/layout/Layout.tsx +205 -0
  294. package/dist/components/layout/ListingHeader.tsx +204 -0
  295. package/dist/components/layout/Loader.tsx +16 -0
  296. package/dist/components/layout/UserSidebar.tsx +53 -0
  297. package/dist/components/layout/context/layoutcontext.tsx +52 -0
  298. package/dist/components/layout/navbar-one.tsx +258 -0
  299. package/dist/components/layout/navbar-two-menu.tsx +72 -0
  300. package/dist/components/layout/navbar-two.tsx +37 -0
  301. package/dist/components/layout/user-profile-menu.tsx +213 -0
  302. package/dist/components/layout/user-profile.tsx +7 -0
  303. package/dist/components/modelsComponents/filterIcon.tsx +9 -0
  304. package/dist/constants/error-messages.ts +238 -0
  305. package/dist/declarations.d.ts +22 -0
  306. package/dist/helpers/AppTitle.tsx +12 -0
  307. package/dist/helpers/ToastContainer.tsx +94 -0
  308. package/dist/helpers/autoCompleteVirtualScroll.ts +41 -0
  309. package/dist/helpers/countries.tsx +260 -0
  310. package/dist/helpers/downloadFileWithProgress.ts +91 -0
  311. package/dist/helpers/downloadMediaFile.tsx +21 -0
  312. package/dist/helpers/getAcceptedFileTypes.tsx +22 -0
  313. package/dist/helpers/getRandomColors.tsx +68 -0
  314. package/dist/helpers/helpers.ts +61 -0
  315. package/dist/helpers/hydrateRelationRules.ts +120 -0
  316. package/dist/helpers/permissions.ts +7 -0
  317. package/dist/helpers/registry.ts +337 -0
  318. package/dist/helpers/resendOtpHelper.tsx +5 -0
  319. package/dist/helpers/revalidate.ts +7 -0
  320. package/dist/helpers/rolesHelper.ts +17 -0
  321. package/dist/helpers/solidIcons.tsx +1831 -0
  322. package/dist/helpers/updatePasswordField.ts +41 -0
  323. package/dist/index.ts +421 -0
  324. package/dist/nextAuth/authProviders.d.ts.map +1 -1
  325. package/dist/nextAuth/authProviders.js +6 -5
  326. package/dist/nextAuth/authProviders.js.map +1 -1
  327. package/dist/nextAuth/authProviders.tsx +232 -0
  328. package/dist/nextAuth/handleLogout.tsx +39 -0
  329. package/dist/nextAuth/refreshAccessToken.tsx +28 -0
  330. package/dist/redux/api/aiInteractionApi.ts +59 -0
  331. package/dist/redux/api/authApi.ts +131 -0
  332. package/dist/redux/api/dashboardApi.ts +56 -0
  333. package/dist/redux/api/dashboardQuestionApi.ts +17 -0
  334. package/dist/redux/api/exportTemplateApi.tsx +59 -0
  335. package/dist/redux/api/fetchBaseQuery.tsx +118 -0
  336. package/dist/redux/api/fieldApi.ts +86 -0
  337. package/dist/redux/api/importTransactionApi.tsx +69 -0
  338. package/dist/redux/api/mediaApi.ts +55 -0
  339. package/dist/redux/api/mediaStorageProviderApi.ts +55 -0
  340. package/dist/redux/api/modelApi.ts +80 -0
  341. package/dist/redux/api/moduleApi.ts +72 -0
  342. package/dist/redux/api/permissionApi.ts +32 -0
  343. package/dist/redux/api/pincodeApi.tsx +56 -0
  344. package/dist/redux/api/roleApi.ts +58 -0
  345. package/dist/redux/api/solidActionApi.ts +66 -0
  346. package/dist/redux/api/solidChatterMessageApi.ts +25 -0
  347. package/dist/redux/api/solidEntityApi.tsx +164 -0
  348. package/dist/redux/api/solidMenuApi.ts +71 -0
  349. package/dist/redux/api/solidServiceApi.ts +31 -0
  350. package/dist/redux/api/solidSettingsApi.tsx +83 -0
  351. package/dist/redux/api/solidViewApi.ts +73 -0
  352. package/dist/redux/api/stateApi.tsx +56 -0
  353. package/dist/redux/api/testApi.ts +21 -0
  354. package/dist/redux/api/userApi.ts +135 -0
  355. package/dist/redux/features/authSlice.ts +19 -0
  356. package/dist/redux/features/dataViewSlice.ts +26 -0
  357. package/dist/redux/features/navbarSlice.ts +21 -0
  358. package/dist/redux/features/popupSlice.ts +37 -0
  359. package/dist/redux/features/settingsSlice.ts +60 -0
  360. package/dist/redux/features/themeSlice.ts +17 -0
  361. package/dist/redux/features/userSlice.ts +28 -0
  362. package/dist/redux/hooks/useSolidPopup.ts +20 -0
  363. package/dist/redux/store/defaultStoreConfig.ts +62 -0
  364. package/dist/styles.ts +4 -0
  365. package/dist/types/handlebars.d.ts +4 -0
  366. package/dist/types/index.d.ts +76 -0
  367. package/dist/types/layout.d.ts +94 -0
  368. package/dist/types/next-auth.d.ts +0 -0
  369. package/dist/types/next.d.ts +46 -0
  370. package/dist/types/solid-core.d.ts +320 -0
  371. package/package.json +1 -1
  372. package/src/components/auth/SolidLogin.tsx +26 -13
  373. package/src/nextAuth/authProviders.tsx +9 -5
@@ -0,0 +1,311 @@
1
+ "use client"
2
+
3
+ import { useDeleteMediaMutation } from "../../../../redux/api/mediaApi";
4
+ import { useGetUserQuery, useUpdateUserProfileMutation } from "../../../../redux/api/userApi";
5
+ import { useFormik } from "formik";
6
+ import { AutoComplete } from "primereact/autocomplete";
7
+ import { Avatar } from "primereact/avatar";
8
+ import { Button } from "primereact/button";
9
+ import { Dialog } from "primereact/dialog";
10
+ import { InputText } from "primereact/inputtext";
11
+ import { Toast } from "primereact/toast";
12
+ import { useRef, useState } from "react";
13
+ import { useSelector } from "react-redux";
14
+ import styles from './SolidAccountSettings.module.css'
15
+ import { ERROR_MESSAGES } from "../../../../constants/error-messages";
16
+
17
+ export const SolidPersonalInfo = () => {
18
+ const fileInputRef = useRef<HTMLInputElement>(null);
19
+ const toast = useRef<Toast>(null);
20
+
21
+ const [previewImage, setPreviewImage] = useState<string | null>(null);
22
+ const [deleteDialogVisible, setDeleteDialogVisible] = useState(false);
23
+ const [replaceDialogVisible, setReplaceDialogVisible] = useState(false);
24
+ const [pendingFile, setPendingFile] = useState<File | null>(null);
25
+
26
+ const userId = useSelector((state: any) => state.auth?.user?.user?.id);
27
+ const { data: userData, refetch } = useGetUserQuery(userId);
28
+
29
+ const [
30
+ deleteMedia,
31
+ ] = useDeleteMediaMutation();
32
+ const [updateUser] = useUpdateUserProfileMutation();
33
+
34
+ const showToast = (severity: "success" | "error" | "info", summary: string, detail: string) => {
35
+ toast.current?.show({
36
+ severity,
37
+ summary,
38
+ detail,
39
+ ...(severity === "error"
40
+ ? { sticky: true } // stays until user closes
41
+ : { life: 3000 }),
42
+ });
43
+ };
44
+
45
+ const initialValues = {
46
+ fullName: userData?.data?.fullName ?? "",
47
+ profilePicture: userData?.data?._media?.profilePicture[0]?._full_url ?? null,
48
+ };
49
+
50
+ const formik = useFormik({
51
+ initialValues,
52
+ enableReinitialize: true,
53
+ onSubmit: async (values) => {
54
+ try {
55
+ const formData = new FormData();
56
+ if (values.fullName !== initialValues.fullName) {
57
+ formData.append("fullName", values.fullName);
58
+ }
59
+
60
+ if (values.profilePicture && values.profilePicture instanceof File) {
61
+ formData.append("profilePicture", values.profilePicture);
62
+ }
63
+
64
+ if (!formData.has("fullName") && !formData.has("profilePicture")) {
65
+ showToast("info", ERROR_MESSAGES.NO_CHANGE, ERROR_MESSAGES.NO_UPDATE_MADE);
66
+ return;
67
+ }
68
+
69
+ const response = await updateUser({ data: formData }).unwrap();
70
+ if (response?.statusCode === 200) {
71
+ showToast("success", ERROR_MESSAGES.PROFILE_SAVED, ERROR_MESSAGES.PROFILE_SAVED_SUCCESSFULLY);
72
+ refetch();
73
+ formik.resetForm();
74
+ setPreviewImage(null);
75
+ } else {
76
+ showToast("error", ERROR_MESSAGES.FAILED, ERROR_MESSAGES.FAILED_UPDATED_PROFILE);
77
+ }
78
+ } catch (error) {
79
+ showToast("error", ERROR_MESSAGES.FAILED, ERROR_MESSAGES.SOMETHING_WRONG);
80
+ }
81
+ },
82
+ });
83
+
84
+ const getInitials = (value: string) => {
85
+ if (!value) return "";
86
+
87
+ const email = value.includes('@') ? value.split('@')[0] : value;
88
+ return email[0]?.toUpperCase() || "";
89
+ };
90
+
91
+ const getColorFromInitials = (initials: string) => {
92
+ let hash = 0;
93
+ for (let i = 0; i < initials.length; i++) {
94
+ hash = initials.charCodeAt(i) + ((hash << 5) - hash);
95
+ }
96
+ const hue = Math.abs(hash) % 360;
97
+ return `hsl(${hue}, 60%, 60%)`;
98
+ };
99
+ const value = userData?.data?.email;
100
+ const initials = getInitials(value);
101
+ const bgColor = getColorFromInitials(initials);
102
+
103
+ const handleFileChange = (file: File) => {
104
+ const existing = userData?.data?._media?.profilePicture?.[0];
105
+ if (existing) {
106
+ setPendingFile(file);
107
+ setReplaceDialogVisible(true);
108
+ } else {
109
+ formik.setFieldValue("profilePicture", file);
110
+ setPreviewImage(URL.createObjectURL(file));
111
+ }
112
+ };
113
+
114
+
115
+ const handleDeleteAvatar = () => {
116
+ const existing = userData?.data?._media?.profilePicture?.[0];
117
+ if (existing) {
118
+ setDeleteDialogVisible(true);
119
+ } else {
120
+ formik.setFieldValue("profilePicture", null);
121
+ setPreviewImage(null);
122
+ }
123
+ };
124
+
125
+ const confirmReplace = async () => {
126
+ const existing = userData?.data?._media?.profilePicture?.[0];
127
+ try {
128
+ if (existing?.id) {
129
+ await deleteMedia(existing.id).unwrap();
130
+ }
131
+
132
+ if (pendingFile) {
133
+ formik.setFieldValue("profilePicture", pendingFile);
134
+ setTimeout(() => {
135
+ formik.submitForm();
136
+ }, 0);
137
+ }
138
+
139
+ } catch (error) {
140
+ showToast("error", ERROR_MESSAGES.FAILED, ERROR_MESSAGES.FAILED_DELETED_IMAGE);
141
+ }
142
+
143
+ setReplaceDialogVisible(false);
144
+ setPendingFile(null);
145
+ };
146
+
147
+ const confirmDelete = async () => {
148
+ const existing = userData?.data?._media?.profilePicture?.[0];
149
+ if (existing?.id) {
150
+ try {
151
+ await deleteMedia(existing.id).unwrap();
152
+ showToast("success", ERROR_MESSAGES.DELETED, ERROR_MESSAGES.PROFILE_PICTURE_REMOVE);
153
+ refetch();
154
+ } catch {
155
+ showToast("error", ERROR_MESSAGES.ERROR, ERROR_MESSAGES.FAILED_DELETED_IMAGE);
156
+ }
157
+ }
158
+
159
+ formik.setFieldValue("profilePicture", null);
160
+ setPreviewImage(null);
161
+ setDeleteDialogVisible(false);
162
+ };
163
+
164
+ return (
165
+ <form onSubmit={formik.handleSubmit} className="h-full flex flex-column justify-content-between">
166
+ <Toast ref={toast} />
167
+ <div>
168
+ <div>
169
+ <label className="form-field-label mb-2 font-bold">Profile Picture</label>
170
+ <div className="flex align-items-center gap-3">
171
+ {previewImage ? (
172
+ <Avatar image={previewImage} shape="circle"
173
+ style={{
174
+ height: '5rem',
175
+ width: '5rem'
176
+ }}
177
+ />
178
+ ) : userData?.data?._media?.profilePicture?.[0]?._full_url ? (
179
+ <div className="relative">
180
+ <Avatar
181
+ image={userData?.data?._media?.profilePicture?.[0]?._full_url}
182
+ shape="circle"
183
+ style={{
184
+ height: '5rem',
185
+ width: '5rem'
186
+ }}
187
+ />
188
+ <div className={styles.SolidRemoveProfile} onClick={handleDeleteAvatar}>
189
+ <span className="pi pi-times" />
190
+ </div>
191
+ </div>
192
+ ) : (
193
+ <Avatar
194
+ label={initials}
195
+ size="xlarge"
196
+ shape="circle"
197
+ style={{
198
+ backgroundColor: bgColor,
199
+ color: '#ffffff',
200
+ height: '5rem',
201
+ width: '5rem'
202
+ }}
203
+ />
204
+ )}
205
+
206
+ <div className="flex gap-2">
207
+ <Button
208
+ type="button"
209
+ size="small"
210
+ severity="secondary"
211
+ label="Upload Avatar"
212
+ outlined
213
+ className="small-button"
214
+ onClick={() => fileInputRef.current?.click()}
215
+ />
216
+ <input
217
+ ref={fileInputRef}
218
+ type="file"
219
+ accept=".jpg,.jpeg,.png,.svg"
220
+ hidden
221
+ onChange={(e) => {
222
+ const file = e.target.files?.[0];
223
+ if (file) handleFileChange(file);
224
+ }}
225
+ />
226
+ </div>
227
+ </div>
228
+ </div>
229
+ <div className='mt-4 mb-2 sm:mb-0' style={{ borderBottom: '1px dashed #D8E2EA' }}></div>
230
+ <div className="mt-4">
231
+ <label className="form-field-label mb-2 font-bold">Details</label>
232
+ <div className="grid">
233
+ <div className="col-12 md:col-8 lg:col-5">
234
+ <label className="form-field-label mb-2">Name</label>
235
+ <InputText
236
+ name="fullName"
237
+ value={formik.values.fullName}
238
+ onChange={formik.handleChange}
239
+ className="w-full"
240
+ />
241
+ </div>
242
+ <div className="col-12 md:col-8 lg:col-5">
243
+ <label className="form-field-label mb-2">Email</label>
244
+ <InputText disabled placeholder={userData?.data?.email} value={userData?.data?.email}
245
+ className="w-full" />
246
+ </div>
247
+ <div className="col-12 md:col-8 lg:col-5">
248
+ <label className="form-field-label mb-2">Contact Number</label>
249
+ <InputText disabled placeholder={userData?.data?.mobile} value={userData?.data?.mobile}
250
+ className="w-full" />
251
+ </div>
252
+ <div className="col-12 md:col-8 lg:col-5">
253
+ <label className="form-field-label mb-2">Role</label>
254
+ <AutoComplete
255
+ multiple
256
+ disabled
257
+ value={userData?.data?.roles?.map((role: any) => role.name) || []}
258
+ />
259
+
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ <div>
265
+ <Button
266
+ type="submit"
267
+ size="small"
268
+ label="Save"
269
+ />
270
+ </div>
271
+ <Dialog
272
+ header={<h5 className='m-0 font-bold'>Replace Profile Picture</h5>}
273
+ visible={replaceDialogVisible}
274
+ headerClassName="px-4 py-3 secondary-border-bottom"
275
+ contentClassName="p-0"
276
+ style={{ width: '25vw' }}
277
+ className="solid-confirm-dialog "
278
+ modal
279
+ onHide={() => setReplaceDialogVisible(false)}
280
+ >
281
+ <div className="p-4">
282
+ Do you want to replace the existing profile picture?
283
+ <div className="flex justify-content-start mt-4 gap-2">
284
+ <Button size="small" label="Confirm" severity="danger" onClick={confirmReplace} />
285
+ <Button size="small" outlined label="Cancel" onClick={() => setReplaceDialogVisible(false)} />
286
+ </div>
287
+ </div>
288
+ </Dialog>
289
+
290
+ <Dialog
291
+ header={<h5 className='m-0 font-bold'>Delete Profile Picture</h5>}
292
+ visible={deleteDialogVisible}
293
+ headerClassName="px-4 py-3 secondary-border-bottom"
294
+ contentClassName="p-0"
295
+ style={{ width: '25vw' }}
296
+ modal
297
+ className="solid-confirm-dialog "
298
+ onHide={() => setDeleteDialogVisible(false)}
299
+ >
300
+ <div className="p-4">
301
+ Do you want to delete your profile picture?
302
+ <div className="flex justify-content-start mt-4 gap-2">
303
+ <Button size="small" label="Confirm" severity="danger" onClick={confirmDelete} />
304
+ <Button size="small" outlined label="Cancel" onClick={() => setDeleteDialogVisible(false)} />
305
+ </div>
306
+ </div>
307
+ </Dialog>
308
+
309
+ </form>
310
+ )
311
+ }
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import Link from 'next/link';
3
+ import { usePathname } from 'next/navigation';
4
+ import { Button } from 'primereact/button';
5
+
6
+ export const SolidCreateButton = ({ createButtonUrl, createActionQueryParams, solidListViewLayout, responsiveIconOnly = false }: any) => {
7
+ const pathName = usePathname();
8
+ const createPath = createButtonUrl ? `${createButtonUrl}?${new URLSearchParams(createActionQueryParams).toString()}` : pathName.split('/').slice(0, -1).join('/') + '/form/new?viewMode=edit';
9
+
10
+ const icon = solidListViewLayout?.attrs?.addButtonIcon || "pi pi-plus";
11
+ const label = solidListViewLayout?.attrs?.addButtonTitle || "Add";
12
+ const className = solidListViewLayout?.attrs?.addButtonClassName || "";
13
+
14
+ return (
15
+ <div>
16
+ <Link href={createPath}>
17
+ {responsiveIconOnly ? (
18
+ <>
19
+ <Button
20
+ type="button"
21
+ icon={icon}
22
+ className={`${className} p-button-sm lg:hidden solid-icon-button `}
23
+ size='small'
24
+ />
25
+
26
+ <Button
27
+ type="button"
28
+ icon={icon}
29
+ label={label}
30
+ className={`${className} hidden lg:inline-flex`}
31
+ size='small'
32
+
33
+ />
34
+ </>
35
+ ) : (
36
+ <Button
37
+ type="button"
38
+ icon={icon}
39
+ label={label}
40
+ className={`${className}`}
41
+ size='small'
42
+ />
43
+ )}
44
+
45
+ </Link>
46
+ </div>
47
+ );
48
+ };
@@ -0,0 +1,15 @@
1
+ import React from 'react'
2
+
3
+ export const DocumentSvg = () => {
4
+ return (
5
+ <svg width="250" height="200" viewBox="0 0 250 200" fill="none" xmlns="http://www.w3.org/2000/svg">
6
+ <path fillRule="evenodd" clipRule="evenodd" d="M207 65C210.866 65 214 68.134 214 72C214 75.866 210.866 79 207 79H167C170.866 79 174 82.134 174 86C174 89.866 170.866 93 167 93H189C192.866 93 196 96.134 196 100C196 103.866 192.866 107 189 107H178.826C173.952 107 170 110.134 170 114C170 116.577 172 118.911 176 121C179.866 121 183 124.134 183 128C183 131.866 179.866 135 176 135H93C89.134 135 86 131.866 86 128C86 124.134 89.134 121 93 121H54C50.134 121 47 117.866 47 114C47 110.134 50.134 107 54 107H94C97.866 107 101 103.866 101 100C101 96.134 97.866 93 94 93H69C65.134 93 62 89.866 62 86C62 82.134 65.134 79 69 79H109C105.134 79 102 75.866 102 72C102 68.134 105.134 65 109 65H207ZM207 93C210.866 93 214 96.134 214 100C214 103.866 210.866 107 207 107C203.134 107 200 103.866 200 100C200 96.134 203.134 93 207 93Z" fill="#F9F0FF" />
7
+ <path fillRule="evenodd" clipRule="evenodd" d="M153.672 63.9997L162.974 131.842L163.809 138.649C164.079 140.841 162.519 142.837 160.327 143.106L101.766 150.297C99.5738 150.566 97.578 149.007 97.3088 146.814L88.2931 73.3865C88.1584 72.2901 88.9381 71.2922 90.0344 71.1576C90.0413 71.1568 90.0483 71.156 90.0552 71.1552L94.9136 70.6102M98.8421 70.1695L103.429 69.655L98.8421 70.1695Z" fill="white" />
8
+ <path d="M154.91 63.8299C154.816 63.1459 154.186 62.6675 153.502 62.7613C152.818 62.8551 152.34 63.4855 152.433 64.1695L154.91 63.8299ZM162.974 131.842L164.214 131.69C164.214 131.684 164.213 131.678 164.212 131.673L162.974 131.842ZM163.809 138.649L165.05 138.496L163.809 138.649ZM160.327 143.106L160.479 144.347L160.327 143.106ZM101.766 150.297L101.919 151.537L101.766 150.297ZM97.3088 146.814L98.5495 146.662L97.3088 146.814ZM90.0552 71.1552L90.1945 72.3974L90.0552 71.1552ZM95.0529 71.8524C95.739 71.7755 96.2327 71.1569 96.1558 70.4709C96.0788 69.7848 95.4603 69.291 94.7742 69.368L95.0529 71.8524ZM98.7028 68.9273C98.0167 69.0043 97.5229 69.6228 97.5999 70.3089C97.6768 70.9949 98.2954 71.4887 98.9814 71.4117L98.7028 68.9273ZM103.568 70.8972C104.255 70.8202 104.748 70.2017 104.671 69.5156C104.594 68.8296 103.976 68.3358 103.29 68.4128L103.568 70.8972ZM152.433 64.1695L161.735 132.012L164.212 131.673L154.91 63.8299L152.433 64.1695ZM161.733 131.995L162.569 138.801L165.05 138.496L164.214 131.69L161.733 131.995ZM162.569 138.801C162.754 140.309 161.682 141.681 160.174 141.866L160.479 144.347C163.357 143.994 165.403 141.374 165.05 138.496L162.569 138.801ZM160.174 141.866L101.614 149.056L101.919 151.537L160.479 144.347L160.174 141.866ZM101.614 149.056C100.107 149.241 98.7346 148.169 98.5495 146.662L96.0681 146.966C96.4215 149.844 99.0409 151.891 101.919 151.537L101.614 149.056ZM98.5495 146.662L89.5337 73.2341L87.0524 73.5388L96.0681 146.966L98.5495 146.662ZM89.5337 73.2341C89.4833 72.823 89.7756 72.4488 90.1867 72.3983L89.8821 69.9169C88.1005 70.1357 86.8336 71.7572 87.0524 73.5388L89.5337 73.2341ZM90.1867 72.3983C90.1893 72.398 90.1919 72.3977 90.1945 72.3974L89.9159 69.913C89.9046 69.9142 89.8933 69.9156 89.8821 69.9169L90.1867 72.3983ZM90.1945 72.3974L95.0529 71.8524L94.7742 69.368L89.9159 69.913L90.1945 72.3974ZM98.9814 71.4117L103.568 70.8972L103.29 68.4128L98.7028 68.9273L98.9814 71.4117Z" fill="var(--primary-color)" />
9
+ <path fillRule="evenodd" clipRule="evenodd" d="M151.14 68.2696L159.56 129.753L160.317 135.922C160.561 137.909 159.167 139.715 157.203 139.956L104.761 146.395C102.798 146.636 101.008 145.221 100.764 143.234L92.6141 76.8572C92.4795 75.7608 93.2591 74.7629 94.3555 74.6283L100.843 73.8318" fill="#F9F0FF" />
10
+ <path d="M110.672 51.25H156.229C156.866 51.25 157.481 51.4715 157.971 51.8721L158.173 52.0547L171.616 65.4902C172.132 66.0059 172.422 66.7053 172.422 67.4346V130C172.422 131.519 171.191 132.75 169.672 132.75H110.672C109.153 132.75 107.922 131.519 107.922 130V54C107.922 52.4812 109.153 51.25 110.672 51.25Z" fill="white" stroke="var(--primary-color)" strokeWidth="2.5" />
11
+ <path d="M156.672 52.4023V63.9995C156.672 65.6564 158.015 66.9995 159.672 66.9995H167.605" stroke="var(--primary-color)" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" />
12
+ <path d="M118 118H144M118 67H144H118ZM118 79H161H118ZM118 92H161H118ZM118 105H161H118Z" stroke="var(--primary-400)" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" />
13
+ </svg>
14
+ )
15
+ }
@@ -0,0 +1,64 @@
1
+ "use client"
2
+ import { Dialog } from 'primereact/dialog';
3
+ import React, { useState } from 'react'
4
+ import { SolidImportStepper } from './SolidImportStepper';
5
+ import { SolidImportInstructions } from './SolidImportInstructions';
6
+ // import { SolidImportWrapper } from './SolidImportWrapper';
7
+ import { SolidImportDropzone } from './SolidImportDropzone';
8
+ import { SolidImportTransaction } from './SolidImportTransaction';
9
+ import { SolidImportTransactionStatus } from './SolidImportTransactionStatus';
10
+
11
+ export const SolidGenericImport = ({
12
+ openImportDialog,
13
+ setOpenImportDialog,
14
+ listViewMetaData,
15
+ handleFetchUpdatedRecords
16
+ }: any) => {
17
+ const [importStep, setImportStep] = useState<number>(1)
18
+ const [transactionId, setTransactionId] = useState(null);
19
+ const [importStatusResult, setImportStatusResult] = useState<any>(null)
20
+ const modelMetadataId = listViewMetaData?.data?.solidView?.model?.id;
21
+ return (
22
+ <Dialog
23
+ header={<h5 className='m-0'>Import Data</h5>}
24
+ visible={openImportDialog}
25
+ style={{ width: '60vw' }}
26
+ onHide={() => { if (!openImportDialog) return; setOpenImportDialog(false); }}
27
+ headerClassName="px-4 py-2 secondary-border-bottom solid-import-dialog-header"
28
+ contentClassName="p-0"
29
+ className='solid-import-dialog'
30
+ >
31
+ <SolidImportStepper importStep={importStep} setImportStep={setImportStep} />
32
+ <div className='px-3 md:px-4 py-3'>
33
+ {importStep === 1 &&
34
+ <SolidImportInstructions setImportStep={setImportStep} listViewMetaData={listViewMetaData} />
35
+ }
36
+ {/* {importStep === 2 &&
37
+ <SolidImportWrapper handleFetchUpdatedRecords={handleFetchUpdatedRecords} setImportStep={setImportStep} listViewMetaData={listViewMetaData} setOpenImportDialog={setOpenImportDialog} />
38
+ } */}
39
+ {importStep === 2 &&
40
+ <SolidImportDropzone
41
+ setImportStep={setImportStep}
42
+ setTransactionId={setTransactionId}
43
+ modelMetadataId={modelMetadataId}
44
+ />
45
+ }
46
+ {importStep === 3 &&
47
+ <SolidImportTransaction
48
+ transactionId={transactionId}
49
+ setImportStatusResult={setImportStatusResult}
50
+ setImportStep={setImportStep}
51
+ />
52
+ }
53
+ {importStep === 4 &&
54
+ <SolidImportTransactionStatus
55
+ importStatusResult={importStatusResult}
56
+ transactionId={transactionId}
57
+ setOpenImportDialog={setOpenImportDialog}
58
+ handleFetchUpdatedRecords={handleFetchUpdatedRecords}
59
+ />
60
+ }
61
+ </div>
62
+ </Dialog>
63
+ )
64
+ }
@@ -0,0 +1,125 @@
1
+ "use client"
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import { useDropzone } from 'react-dropzone';
4
+ import { Button } from 'primereact/button'
5
+ import styles from './SolidImport.module.css'
6
+ import { DocumentSvg } from './DocumentSvg';
7
+ import { useCreateImportTransactionMutation } from '../../../../redux/api/importTransactionApi';
8
+ import { Toast } from 'primereact/toast';
9
+ import { ERROR_MESSAGES } from '../../../../constants/error-messages';
10
+ export const SolidImportDropzone = ({ setImportStep, setTransactionId, modelMetadataId }: any) => {
11
+ const toast = useRef<Toast>(null);
12
+ const showToast = (severity: "success" | "error", summary: string, detail: string) => {
13
+ toast.current?.show({
14
+ severity,
15
+ summary,
16
+ detail,
17
+ ...(severity === "error"
18
+ ? { sticky: true } // stays until user closes
19
+ : { life: 3000 }),
20
+ });
21
+ };
22
+
23
+ const [file, setFile] = useState<File | null>(null);
24
+ const [createImportTransaction, { isLoading }] = useCreateImportTransactionMutation();
25
+
26
+
27
+ const uploadFile = async (uploadFile: File) => {
28
+ const formData = new FormData();
29
+ formData.append('fileLocation', uploadFile);
30
+ formData.append('modelMetadataId', modelMetadataId);
31
+
32
+ try {
33
+ const response = await createImportTransaction(formData).unwrap();
34
+ console.log('Upload success:', response);
35
+ if (response?.statusCode === 200) {
36
+ setFile(uploadFile);
37
+ showToast("success", ERROR_MESSAGES.FILE_UPLOAD, ERROR_MESSAGES.FILE_UPLOAD_SUCCESSFULLY);
38
+ setTransactionId?.(response?.data?.id);
39
+ } else {
40
+ showToast("error", ERROR_MESSAGES.FAILED, ERROR_MESSAGES.FAILED_UPLOAD_FILE)
41
+ }
42
+ } catch (error) {
43
+ console.error(ERROR_MESSAGES.FAILED_UPLOAD_FILE, error);
44
+ showToast("error", ERROR_MESSAGES.FAILED, ERROR_MESSAGES.FAILED_UPLOAD_FILE)
45
+ }
46
+ };
47
+
48
+ const onDrop = useCallback((acceptedFiles: File[]) => {
49
+ if (acceptedFiles.length > 0) {
50
+ const selectedFile = acceptedFiles[0];
51
+ uploadFile(selectedFile); // 👈 Auto upload on drop
52
+ }
53
+ }, []);
54
+
55
+ const { getRootProps, getInputProps, open } = useDropzone({
56
+ onDrop,
57
+ accept: {
58
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx'],
59
+ 'text/csv': ['.csv']
60
+ },
61
+ multiple: false,
62
+ });
63
+
64
+ const removeFile = () => {
65
+ setFile(null);
66
+ };
67
+
68
+ const formatBytes = (bytes: number) => {
69
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
70
+ if (bytes === 0) return '0 Byte';
71
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
72
+ return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`;
73
+ };
74
+
75
+ return (
76
+ <div>
77
+ <Toast ref={toast} />
78
+ <div className={styles.SolidImportContextWrapper}>
79
+ <div {...getRootProps({ className: styles.dropzone })} className='h-full flex flex-column align-items-center justify-content-center'>
80
+ <input {...getInputProps()} />
81
+ {/* {!file ? ( */}
82
+ <div className={""}>
83
+ <div className='flex justify-content-center'>
84
+ <DocumentSvg />
85
+ </div>
86
+ <h5 className='text-center solid-primary-black-text'>Drop or upload a file to import</h5>
87
+ <p className='text-center m-0'>Excel files are recommended as formatting is automatic.<br />
88
+ But, you can also use .csv files</p>
89
+ <div className='flex justify-content-center mt-3'>
90
+ <Button label="Click to browse" size="small" severity='secondary' outlined />
91
+ </div>
92
+ </div>
93
+ {/* ) : ( */}
94
+ {file &&
95
+ <div className="flex align-items-start justify-content-between gap-3 p-3 mt-4 w-full md:w-8" style={{ border: '1px solid var(--primary-light-color)', borderRadius: 6 }} onClick={(e) => e.stopPropagation()}>
96
+ <div>
97
+ <p className='m-0'><strong>File:</strong> {file.name}</p>
98
+ <p className='m-0'><strong>Type:</strong> {file.type || 'Unknown'}</p>
99
+ <p className='m-0'><strong>Size:</strong> {formatBytes(file.size)}</p>
100
+ </div>
101
+ <div>
102
+ <Button size="small" icon="pi pi-trash" text onClick={removeFile} />
103
+ </div>
104
+ </div>
105
+ }
106
+ {/* )} */}
107
+ </div>
108
+ </div>
109
+ <div className='mt-3 flex align-items-center gap-3'>
110
+ <Button
111
+ label='Continue'
112
+ size='small'
113
+ onClick={() => {
114
+ if (!file) {
115
+ showToast("error", ERROR_MESSAGES.MISSING_FILE, ERROR_MESSAGES.FAILED_UPLOAD_FILE);
116
+ return;
117
+ }
118
+ setImportStep(3);
119
+ }}
120
+ disabled={!file}
121
+ />
122
+ </div>
123
+ </div>
124
+ )
125
+ }