@solidxai/core-ui 0.1.8-beta.19 → 0.1.8-beta.20
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.
- package/dist/adapters/auth/getSession.d.ts.map +1 -1
- package/dist/adapters/auth/getSession.js +1 -1
- package/dist/adapters/auth/getSession.js.map +1 -1
- package/dist/adapters/auth/getSession.ts +1 -0
- package/dist/adapters/auth/helper.d.ts.map +1 -1
- package/dist/adapters/auth/helper.js +1 -0
- package/dist/adapters/auth/helper.js.map +1 -1
- package/dist/adapters/auth/helper.ts +3 -1
- package/dist/adapters/auth/signIn.d.ts.map +1 -1
- package/dist/adapters/auth/signIn.js +1 -0
- package/dist/adapters/auth/signIn.js.map +1 -1
- package/dist/adapters/auth/signIn.ts +3 -1
- package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts +1 -0
- package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts.map +1 -1
- package/dist/adapters/auth/signInWithOAuthAccessCode.js +10 -9
- package/dist/adapters/auth/signInWithOAuthAccessCode.js.map +1 -1
- package/dist/adapters/auth/signInWithOAuthAccessCode.ts +6 -3
- package/dist/adapters/auth/signOut.d.ts.map +1 -1
- package/dist/adapters/auth/signOut.js +7 -1
- package/dist/adapters/auth/signOut.js.map +1 -1
- package/dist/adapters/auth/signOut.ts +7 -1
- package/dist/adapters/auth/types.d.ts +1 -0
- package/dist/adapters/auth/types.d.ts.map +1 -1
- package/dist/adapters/auth/types.js.map +1 -1
- package/dist/adapters/auth/types.ts +1 -0
- package/dist/components/auth/AuthLayout.d.ts.map +1 -1
- package/dist/components/auth/AuthLayout.js +2 -1
- package/dist/components/auth/AuthLayout.js.map +1 -1
- package/dist/components/auth/AuthLayout.tsx +2 -1
- package/dist/components/auth/FacebookAuthChecking.d.ts +2 -0
- package/dist/components/auth/FacebookAuthChecking.d.ts.map +1 -0
- package/dist/components/auth/FacebookAuthChecking.js +103 -0
- package/dist/components/auth/FacebookAuthChecking.js.map +1 -0
- package/dist/components/auth/FacebookAuthChecking.tsx +64 -0
- package/dist/components/auth/GoogleAuthChecking.js +0 -1
- package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
- package/dist/components/auth/GoogleAuthChecking.tsx +1 -1
- package/dist/components/auth/MicrosoftAuthChecking.d.ts +2 -0
- package/dist/components/auth/MicrosoftAuthChecking.d.ts.map +1 -0
- package/dist/components/auth/MicrosoftAuthChecking.js +103 -0
- package/dist/components/auth/MicrosoftAuthChecking.js.map +1 -0
- package/dist/components/auth/MicrosoftAuthChecking.tsx +64 -0
- package/dist/components/auth/SolidInitialLoginOtp.js +0 -1
- package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
- package/dist/components/auth/SolidInitialLoginOtp.tsx +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.js +28 -12
- package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
- package/dist/components/auth/SolidInitiateRegisterOtp.tsx +26 -11
- package/dist/components/auth/SolidLogin.d.ts.map +1 -1
- package/dist/components/auth/SolidLogin.js +7 -4
- package/dist/components/auth/SolidLogin.js.map +1 -1
- package/dist/components/auth/SolidLogin.tsx +15 -3
- package/dist/components/auth/SolidRegister.d.ts.map +1 -1
- package/dist/components/auth/SolidRegister.js +48 -17
- package/dist/components/auth/SolidRegister.js.map +1 -1
- package/dist/components/auth/SolidRegister.tsx +87 -30
- package/dist/components/common/AuthBanner.js.map +1 -1
- package/dist/components/common/GeneralSettings.d.ts.map +1 -1
- package/dist/components/common/GeneralSettings.js +228 -146
- package/dist/components/common/GeneralSettings.js.map +1 -1
- package/dist/components/common/GeneralSettings.tsx +1103 -772
- package/dist/components/common/SettingsComponent.d.ts +2 -0
- package/dist/components/common/SettingsComponent.d.ts.map +1 -0
- package/dist/components/common/SettingsComponent.js +351 -0
- package/dist/components/common/SettingsComponent.js.map +1 -0
- package/dist/components/common/SettingsComponent.module.css +421 -0
- package/dist/components/common/SettingsComponent.tsx +582 -0
- package/dist/components/common/SocialMediaLogin.d.ts +8 -1
- package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
- package/dist/components/common/SocialMediaLogin.js +6 -13
- package/dist/components/common/SocialMediaLogin.js.map +1 -1
- package/dist/components/common/SocialMediaLogin.tsx +120 -58
- package/dist/components/common/SolidExport.d.ts.map +1 -1
- package/dist/components/common/SolidExport.js +1 -1
- package/dist/components/common/SolidExport.js.map +1 -1
- package/dist/components/common/SolidExport.tsx +2 -1
- package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
- package/dist/components/common/SolidFormStepper.js +2 -1
- package/dist/components/common/SolidFormStepper.js.map +1 -1
- package/dist/components/common/SolidFormStepper.tsx +2 -1
- package/dist/components/common/solid-export.css +26 -0
- package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardView.js +24 -25
- package/dist/components/core/card/SolidCardView.js.map +1 -1
- package/dist/components/core/card/SolidCardView.tsx +22 -27
- package/dist/components/core/card/SolidCardViewConfigure.js +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.tsx +1 -1
- package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatter.js +39 -9
- package/dist/components/core/chatter/SolidChatter.js.map +1 -1
- package/dist/components/core/chatter/SolidChatter.tsx +42 -7
- package/dist/components/core/chatter/SolidChatterAuditMessage.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterAuditMessage.js +19 -1
- package/dist/components/core/chatter/SolidChatterAuditMessage.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +22 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +3 -0
- package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.js +68 -4
- package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.tsx +45 -3
- package/dist/components/core/chatter/chatter.module.css +0 -3
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +3 -1
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +3 -1
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +9 -8
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +4 -2
- package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts +3 -0
- package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts.map +1 -0
- package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js +81 -0
- package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js.map +1 -0
- package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.tsx +114 -0
- package/dist/components/core/form/SolidFormActionHeader.d.ts +1 -1
- package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormActionHeader.js +5 -3
- package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
- package/dist/components/core/form/SolidFormActionHeader.tsx +27 -1
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +67 -27
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +54 -7
- package/dist/components/core/form/fields/SolidComputedField.d.ts +25 -0
- package/dist/components/core/form/fields/SolidComputedField.d.ts.map +1 -0
- package/dist/components/core/form/fields/SolidComputedField.js +128 -0
- package/dist/components/core/form/fields/SolidComputedField.js.map +1 -0
- package/dist/components/core/form/fields/SolidComputedField.tsx +134 -0
- package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionDynamicField.js +11 -3
- package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
- package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +13 -4
- package/dist/components/core/kanban/KanbanBoard.js +1 -1
- package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.tsx +1 -1
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +216 -102
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +204 -72
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +1 -1
- package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
- package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
- package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
- package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
- package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
- package/dist/components/core/list/SolidDataTablePagination.js +22 -0
- package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
- package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +58 -61
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +42 -46
- package/dist/components/core/list/SolidListViewConfigure.js +1 -1
- package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
- package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
- package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
- package/dist/components/layout/user-profile-menu.js +15 -14
- package/dist/components/layout/user-profile-menu.js.map +1 -1
- package/dist/components/layout/user-profile-menu.tsx +8 -6
- package/dist/components/shad-cn-ui/SolidDialog.d.ts +1 -1
- package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidDialog.tsx +1 -1
- package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -2
- package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidIcon.js +3 -4
- package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidIcon.tsx +12 -15
- package/dist/components/shad-cn-ui/SolidRichTextEditor.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidRichTextEditor.js +9 -1
- package/dist/components/shad-cn-ui/SolidRichTextEditor.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidRichTextEditor.tsx +8 -1
- package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.js +2 -2
- package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTabs.tsx +12 -1
- package/dist/components/solid-ui/SolidButton.d.ts +14 -0
- package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
- package/dist/components/solid-ui/SolidButton.js +36 -0
- package/dist/components/solid-ui/SolidButton.js.map +1 -0
- package/dist/components/solid-ui/SolidButton.tsx +54 -0
- package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
- package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
- package/dist/components/solid-ui/SolidTabs.js +22 -0
- package/dist/components/solid-ui/SolidTabs.js.map +1 -0
- package/dist/components/solid-ui/SolidTabs.tsx +73 -0
- package/dist/components/solid-ui/index.d.ts +3 -0
- package/dist/components/solid-ui/index.d.ts.map +1 -0
- package/dist/components/solid-ui/index.js +3 -0
- package/dist/components/solid-ui/index.js.map +1 -0
- package/dist/components/solid-ui/index.ts +2 -0
- package/dist/helpers/registry.d.ts +2 -2
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +4 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +5 -3
- package/dist/helpers/settingsPayload.d.ts +32 -0
- package/dist/helpers/settingsPayload.d.ts.map +1 -0
- package/dist/helpers/settingsPayload.js +72 -0
- package/dist/helpers/settingsPayload.js.map +1 -0
- package/dist/helpers/settingsPayload.ts +125 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/index.ts +4 -0
- package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
- package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
- package/dist/redux/api/solidChatterMessageApi.js +11 -1
- package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
- package/dist/redux/api/solidChatterMessageApi.ts +10 -1
- package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
- package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
- package/dist/resources/globals.css +5 -1
- package/dist/resources/shadcn-base.css +242 -81
- package/dist/resources/solid-responsive.css +22 -4
- package/dist/routes/AppEventListener.js +1 -1
- package/dist/routes/AppEventListener.js.map +1 -1
- package/dist/routes/AppEventListener.tsx +1 -1
- package/dist/routes/pages/admin/core/SettingsPage.js +2 -2
- package/dist/routes/pages/admin/core/SettingsPage.js.map +1 -1
- package/dist/routes/pages/admin/core/SettingsPage.tsx +2 -2
- package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts +2 -0
- package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts.map +1 -0
- package/dist/routes/pages/auth/InitiateFacebookOauthPage.js +6 -0
- package/dist/routes/pages/auth/InitiateFacebookOauthPage.js.map +1 -0
- package/dist/routes/pages/auth/InitiateFacebookOauthPage.tsx +5 -0
- package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts +2 -0
- package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts.map +1 -0
- package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js +6 -0
- package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js.map +1 -0
- package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.tsx +5 -0
- package/dist/routes/solidRoutes.d.ts.map +1 -1
- package/dist/routes/solidRoutes.js +5 -1
- package/dist/routes/solidRoutes.js.map +1 -1
- package/dist/routes/solidRoutes.tsx +5 -1
- package/dist/routes/types.d.ts +1 -1
- package/dist/routes/types.d.ts.map +1 -1
- package/dist/routes/types.js.map +1 -1
- package/dist/routes/types.ts +2 -0
- package/dist/types/extension-registry.d.ts +1 -0
- package/dist/types/extension-registry.d.ts.map +1 -1
- package/dist/types/extension-registry.js +1 -0
- package/dist/types/extension-registry.js.map +1 -1
- package/dist/types/extension-registry.ts +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/solid-core.d.ts +10 -0
- package/package.json +1 -1
- package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
- package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
- package/dist/components/auth/SolidOTPVerify.js +0 -67
- package/dist/components/auth/SolidOTPVerify.js.map +0 -1
- package/dist/components/auth/SolidOTPVerify.tsx +0 -133
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
- package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
- package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
- package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
- package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
- package/dist/nextAuth/authProviders.d.ts +0 -4
- package/dist/nextAuth/authProviders.d.ts.map +0 -1
- package/dist/nextAuth/authProviders.js +0 -198
- package/dist/nextAuth/authProviders.js.map +0 -1
- package/dist/nextAuth/authProviders.tsx +0 -232
- package/dist/nextAuth/handleLogout.d.ts +0 -2
- package/dist/nextAuth/handleLogout.d.ts.map +0 -1
- package/dist/nextAuth/handleLogout.js +0 -36
- package/dist/nextAuth/handleLogout.js.map +0 -1
- package/dist/nextAuth/handleLogout.tsx +0 -39
- package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
- package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
- package/dist/nextAuth/refreshAccessToken.js +0 -24
- package/dist/nextAuth/refreshAccessToken.js.map +0 -1
- package/dist/nextAuth/refreshAccessToken.tsx +0 -28
- package/dist/redux/features/settingsSlice.d.ts +0 -20
- package/dist/redux/features/settingsSlice.d.ts.map +0 -1
- package/dist/redux/features/settingsSlice.js +0 -39
- package/dist/redux/features/settingsSlice.js.map +0 -1
- package/dist/redux/features/settingsSlice.ts +0 -60
|
@@ -28,6 +28,7 @@ import { SolidSelectionDynamicField } from "./fields/SolidSelectionDynamicField"
|
|
|
28
28
|
import { SolidSelectionStaticField } from "./fields/SolidSelectionStaticField";
|
|
29
29
|
import { SolidShortTextField } from "./fields/SolidShortTextField";
|
|
30
30
|
import { SolidTimeField } from "./fields/SolidTimeField";
|
|
31
|
+
import { SolidComputedField } from "./fields/SolidComputedField";
|
|
31
32
|
import { SolidUiEvent } from "../../../types";
|
|
32
33
|
import { getExtensionComponent, getExtensionFunction } from "../../../helpers/registry";
|
|
33
34
|
import { SolidFormWidgetProps, SolidUiEventResponse } from "../../../types/solid-core";
|
|
@@ -41,6 +42,7 @@ import { hasAnyRole } from "../../../helpers/rolesHelper";
|
|
|
41
42
|
import SolidChatterLocaleTabView from "../locales/SolidChatterLocaleTabView";
|
|
42
43
|
import { ERROR_MESSAGES } from "../../../constants/error-messages";
|
|
43
44
|
import { useLazyGetMcpUrlQuery, useLazyGetSolidSettingsQuery } from "../../../redux/api/solidSettingsApi";
|
|
45
|
+
import { getSettingsMap } from "../../../helpers/settingsPayload";
|
|
44
46
|
import { SolidFormFooter } from "./SolidFormFooter";
|
|
45
47
|
import { normalizeSolidFormActionPath } from "../../../helpers/routePaths";
|
|
46
48
|
import { showToast } from "../../../redux/features/toastSlice";
|
|
@@ -171,6 +173,9 @@ const fieldFactory = (type: string, fieldContext: SolidFieldProps, setLightboxUr
|
|
|
171
173
|
if (type === 'email') {
|
|
172
174
|
return new SolidEmailField(fieldContext);
|
|
173
175
|
}
|
|
176
|
+
if (type === 'computed') {
|
|
177
|
+
return new SolidComputedField(fieldContext);
|
|
178
|
+
}
|
|
174
179
|
return null;
|
|
175
180
|
}
|
|
176
181
|
|
|
@@ -469,6 +474,8 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
469
474
|
const [chatterLocaleWidth, setChatterLocaleWidth] = useState(360);
|
|
470
475
|
const [isResizingChatterLocale, setIsResizingChatterLocale] = useState(false);
|
|
471
476
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
477
|
+
const [isMobileViewport, setIsMobileViewport] = useState(false);
|
|
478
|
+
const solidFormWrapperRef = useRef<HTMLDivElement | null>(null);
|
|
472
479
|
|
|
473
480
|
const tabFieldsRef = useRef<Array<{ tabKey: string; fields: string[] }>>([]);
|
|
474
481
|
const [requestedTab, setRequestedTab] = useState<string | null>(null);
|
|
@@ -490,15 +497,16 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
490
497
|
const actionContext = searchParams.get('actionContext');
|
|
491
498
|
|
|
492
499
|
const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();
|
|
500
|
+
const solidSettingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);
|
|
493
501
|
useEffect(() => {
|
|
494
502
|
trigger("") // Fetch settings on mount
|
|
495
503
|
}, [])
|
|
496
504
|
|
|
497
505
|
useEffect(() => {
|
|
498
|
-
if (
|
|
506
|
+
if (solidSettingsMap?.mcpEnabled && solidSettingsMap?.mcpServerUrl) {
|
|
499
507
|
enableSolidXAiPanel();
|
|
500
508
|
}
|
|
501
|
-
}, [
|
|
509
|
+
}, [solidSettingsMap]);
|
|
502
510
|
|
|
503
511
|
|
|
504
512
|
const enableSolidXAiPanel = async () => {
|
|
@@ -519,19 +527,34 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
519
527
|
}
|
|
520
528
|
|
|
521
529
|
const op = useRef(null);
|
|
530
|
+
const MIN_CHATTER_WIDTH = 320;
|
|
531
|
+
const MIN_FORM_SECTION_WIDTH = 420;
|
|
532
|
+
|
|
533
|
+
const getMaxChatterWidth = () => {
|
|
534
|
+
const wrapperWidth = solidFormWrapperRef.current?.getBoundingClientRect().width ?? window.innerWidth;
|
|
535
|
+
return Math.max(MIN_CHATTER_WIDTH, wrapperWidth - MIN_FORM_SECTION_WIDTH);
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
const clampChatterWidth = (width: number) => {
|
|
539
|
+
const maxWidth = getMaxChatterWidth();
|
|
540
|
+
return Math.max(MIN_CHATTER_WIDTH, Math.min(width, maxWidth));
|
|
541
|
+
};
|
|
542
|
+
|
|
522
543
|
useEffect(() => {
|
|
523
544
|
const stored = localStorage.getItem('chatter_locale_width');
|
|
524
545
|
if (stored) {
|
|
525
546
|
const parsed = parseInt(stored, 10);
|
|
526
|
-
const clampedWidth =
|
|
547
|
+
const clampedWidth = clampChatterWidth(parsed);
|
|
527
548
|
setChatterLocaleWidth(clampedWidth);
|
|
528
549
|
}
|
|
529
550
|
}, []);
|
|
530
551
|
useEffect(() => {
|
|
531
552
|
const handleMouseMove = (e: MouseEvent) => {
|
|
532
553
|
if (!isResizingChatterLocale) return;
|
|
533
|
-
const
|
|
534
|
-
const
|
|
554
|
+
const wrapperRect = solidFormWrapperRef.current?.getBoundingClientRect();
|
|
555
|
+
const rightEdge = wrapperRect?.right ?? window.innerWidth;
|
|
556
|
+
const newWidth = rightEdge - e.clientX;
|
|
557
|
+
const clampedWidth = clampChatterWidth(newWidth);
|
|
535
558
|
setChatterLocaleWidth(clampedWidth);
|
|
536
559
|
localStorage.setItem('chatter_locale_width', clampedWidth.toString());
|
|
537
560
|
};
|
|
@@ -551,6 +574,28 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
551
574
|
};
|
|
552
575
|
}, [isResizingChatterLocale]);
|
|
553
576
|
|
|
577
|
+
useEffect(() => {
|
|
578
|
+
const updateViewportFlag = () => setIsMobileViewport(window.innerWidth <= 1199);
|
|
579
|
+
updateViewportFlag();
|
|
580
|
+
window.addEventListener('resize', updateViewportFlag);
|
|
581
|
+
return () => window.removeEventListener('resize', updateViewportFlag);
|
|
582
|
+
}, []);
|
|
583
|
+
|
|
584
|
+
useEffect(() => {
|
|
585
|
+
const handleWindowResize = () => {
|
|
586
|
+
setChatterLocaleWidth((currentWidth) => {
|
|
587
|
+
const clamped = clampChatterWidth(currentWidth);
|
|
588
|
+
if (clamped !== currentWidth) {
|
|
589
|
+
localStorage.setItem('chatter_locale_width', clamped.toString());
|
|
590
|
+
}
|
|
591
|
+
return clamped;
|
|
592
|
+
});
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
window.addEventListener('resize', handleWindowResize);
|
|
596
|
+
return () => window.removeEventListener('resize', handleWindowResize);
|
|
597
|
+
}, []);
|
|
598
|
+
|
|
554
599
|
|
|
555
600
|
useEffect(() => {
|
|
556
601
|
const mode = searchParams.get('viewMode');
|
|
@@ -1242,7 +1287,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1242
1287
|
});
|
|
1243
1288
|
|
|
1244
1289
|
return (
|
|
1245
|
-
<div className="solid-form-wrapper">
|
|
1290
|
+
<div className="solid-form-wrapper" ref={solidFormWrapperRef}>
|
|
1246
1291
|
<div className="solid-form-section">
|
|
1247
1292
|
<div className="page-header solid-list-toolbar flex-column lg:flex-row">
|
|
1248
1293
|
<div className="flex justify-content-between w-full solid-form-toolbar-row">
|
|
@@ -1679,7 +1724,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1679
1724
|
|
|
1680
1725
|
|
|
1681
1726
|
return (
|
|
1682
|
-
<div className="solid-form-wrapper">
|
|
1727
|
+
<div className="solid-form-wrapper" ref={solidFormWrapperRef}>
|
|
1683
1728
|
<div className="solid-form-section">
|
|
1684
1729
|
<form style={{ width: '100%' }} onSubmit={formik.handleSubmit}>
|
|
1685
1730
|
<FormikSubmitWatcher
|
|
@@ -1713,6 +1758,8 @@ const SolidFormView = (params: SolidFormViewProps) => {
|
|
|
1713
1758
|
onStepperUpdate={() => setRefreshChatterMessage(true)}
|
|
1714
1759
|
isSubmitting={isSubmitting}
|
|
1715
1760
|
headerRequestStatusLabel={isSubmitting ? "Saving..." : null}
|
|
1761
|
+
showMobileOpenChatter={isMobileViewport && !isShowChatter && params.embeded !== true}
|
|
1762
|
+
onMobileOpenChatter={() => setShowChatter(true)}
|
|
1716
1763
|
/>
|
|
1717
1764
|
<div className={`px-4 py-3 md:p-4 solid-form-content md:pt-1 ${createMode ? 'solid-create-mode-form-content' : ''} ${params.embeded === true ? 'h-auto' : ''}`} style={{ maxHeight: params.embeded === true ? '80vh' : '', overflowY: 'auto' }}>
|
|
1718
1765
|
{DynamicHeaderComponent && <DynamicHeaderComponent />}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Yup from 'yup';
|
|
2
|
+
import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
|
|
3
|
+
import { SolidFormFieldWidgetProps } from "../../../../types/solid-core";
|
|
4
|
+
/**
|
|
5
|
+
* SolidComputedField
|
|
6
|
+
*
|
|
7
|
+
* Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
|
|
8
|
+
* They are always read-only in the UI and are only shown when a record already exists
|
|
9
|
+
* (i.e., the form is in view or edit mode for an existing record, NOT during creation).
|
|
10
|
+
*/
|
|
11
|
+
export declare class SolidComputedField implements ISolidField {
|
|
12
|
+
private fieldContext;
|
|
13
|
+
constructor(fieldContext: SolidFieldProps);
|
|
14
|
+
updateFormData(_value: any, _formData: FormData): any;
|
|
15
|
+
initialValue(): any;
|
|
16
|
+
validationSchema(): Yup.Schema;
|
|
17
|
+
render(formik: FormikObject): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
renderExtensionRenderMode(widget: string, formik: FormikObject): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Default widget for computed fields — renders as a read-only input in edit mode.
|
|
22
|
+
* Uses the same layout as the short-text view widget for consistency.
|
|
23
|
+
*/
|
|
24
|
+
export declare const DefaultComputedFormWidget: ({ formik, fieldContext }: SolidFormFieldWidgetProps) => import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=SolidComputedField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidComputedField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidComputedField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAIzE;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IAElD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,GAAG;IAIrD,YAAY,IAAI,GAAG;IAMnB,gBAAgB,IAAI,GAAG,CAAC,MAAM;IAK9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,6BAA8B,yBAAyB,4CAwC5F,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import * as Yup from 'yup';
|
|
14
|
+
import styles from './solidFields.module.css';
|
|
15
|
+
import { getExtensionComponent } from "../../../../helpers/registry";
|
|
16
|
+
import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
|
|
17
|
+
import { SolidInput } from "../../../shad-cn-ui";
|
|
18
|
+
/**
|
|
19
|
+
* SolidComputedField
|
|
20
|
+
*
|
|
21
|
+
* Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
|
|
22
|
+
* They are always read-only in the UI and are only shown when a record already exists
|
|
23
|
+
* (i.e., the form is in view or edit mode for an existing record, NOT during creation).
|
|
24
|
+
*/
|
|
25
|
+
var SolidComputedField = /** @class */ (function () {
|
|
26
|
+
function SolidComputedField(fieldContext) {
|
|
27
|
+
Object.defineProperty(this, "fieldContext", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: void 0
|
|
32
|
+
});
|
|
33
|
+
this.fieldContext = fieldContext;
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(SolidComputedField.prototype, "updateFormData", {
|
|
36
|
+
enumerable: false,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: function (_value, _formData) {
|
|
40
|
+
// Computed fields are never submitted — the server calculates them.
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(SolidComputedField.prototype, "initialValue", {
|
|
44
|
+
enumerable: false,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: function () {
|
|
48
|
+
var _a;
|
|
49
|
+
var fieldName = this.fieldContext.field.attrs.name;
|
|
50
|
+
var existingValue = (_a = this.fieldContext.data) === null || _a === void 0 ? void 0 : _a[fieldName];
|
|
51
|
+
return existingValue !== undefined && existingValue !== null ? existingValue : '';
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(SolidComputedField.prototype, "validationSchema", {
|
|
55
|
+
enumerable: false,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true,
|
|
58
|
+
value: function () {
|
|
59
|
+
// Computed fields are always optional; they are never set by the user.
|
|
60
|
+
return Yup.mixed().nullable();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(SolidComputedField.prototype, "render", {
|
|
64
|
+
enumerable: false,
|
|
65
|
+
configurable: true,
|
|
66
|
+
writable: true,
|
|
67
|
+
value: function (formik) {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
var fieldLayoutInfo = this.fieldContext.field;
|
|
70
|
+
var className = ((_a = fieldLayoutInfo.attrs) === null || _a === void 0 ? void 0 : _a.className) || 'field col-12';
|
|
71
|
+
// Computed fields are only relevant for existing records.
|
|
72
|
+
// Check by whether the underlying data has an `id` (record exists).
|
|
73
|
+
var recordExists = !!((_b = this.fieldContext.data) === null || _b === void 0 ? void 0 : _b.id);
|
|
74
|
+
if (!recordExists) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
var viewWidget = fieldLayoutInfo.attrs.viewWidget;
|
|
78
|
+
var editWidget = fieldLayoutInfo.attrs.editWidget;
|
|
79
|
+
if (!editWidget) {
|
|
80
|
+
editWidget = 'DefaultComputedFormWidget';
|
|
81
|
+
}
|
|
82
|
+
if (!viewWidget) {
|
|
83
|
+
viewWidget = 'DefaultComputedFormWidget';
|
|
84
|
+
}
|
|
85
|
+
var viewMode = this.fieldContext.viewMode;
|
|
86
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { className: className, children: [viewMode === "view" &&
|
|
87
|
+
this.renderExtensionRenderMode(viewWidget, formik), viewMode === "edit" &&
|
|
88
|
+
this.renderExtensionRenderMode(editWidget, formik)] }) }));
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(SolidComputedField.prototype, "renderExtensionRenderMode", {
|
|
92
|
+
enumerable: false,
|
|
93
|
+
configurable: true,
|
|
94
|
+
writable: true,
|
|
95
|
+
value: function (widget, formik) {
|
|
96
|
+
var DynamicWidget = getExtensionComponent(widget);
|
|
97
|
+
var widgetProps = {
|
|
98
|
+
formik: formik,
|
|
99
|
+
fieldContext: this.fieldContext,
|
|
100
|
+
};
|
|
101
|
+
return (_jsx(_Fragment, { children: DynamicWidget && _jsx(DynamicWidget, __assign({}, widgetProps)) }));
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return SolidComputedField;
|
|
105
|
+
}());
|
|
106
|
+
export { SolidComputedField };
|
|
107
|
+
/**
|
|
108
|
+
* Default widget for computed fields — renders as a read-only input in edit mode.
|
|
109
|
+
* Uses the same layout as the short-text view widget for consistency.
|
|
110
|
+
*/
|
|
111
|
+
export var DefaultComputedFormWidget = function (_a) {
|
|
112
|
+
var _b, _c;
|
|
113
|
+
var formik = _a.formik, fieldContext = _a.fieldContext;
|
|
114
|
+
var fieldMetadata = fieldContext.fieldMetadata;
|
|
115
|
+
var fieldLayoutInfo = fieldContext.field;
|
|
116
|
+
var fieldLabel = (_b = fieldLayoutInfo.attrs.label) !== null && _b !== void 0 ? _b : fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.displayName;
|
|
117
|
+
var showFieldLabel = (_c = fieldLayoutInfo === null || fieldLayoutInfo === void 0 ? void 0 : fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.showLabel;
|
|
118
|
+
var viewMode = fieldContext.viewMode;
|
|
119
|
+
var value = formik.values[fieldLayoutInfo.attrs.name];
|
|
120
|
+
if (viewMode === 'view') {
|
|
121
|
+
// View mode: display as plain text (same as DefaultShortTextFormViewWidget)
|
|
122
|
+
return (_jsxs("div", { className: styles.fieldViewWrapper, children: [showFieldLabel !== false && (_jsx("p", { className: "".concat(styles.fieldViewLabel, " form-field-label"), children: fieldLabel })), _jsx("p", { className: styles.fieldViewValue, children: value && typeof value === 'string' ? value : '' })] }));
|
|
123
|
+
}
|
|
124
|
+
// Edit mode: read-only input to make it clear this is a server-computed value
|
|
125
|
+
return (_jsxs("div", { className: styles.fieldWrapper, children: [showFieldLabel != false &&
|
|
126
|
+
_jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsx(SolidInput, { type: "text", id: fieldLayoutInfo.attrs.name, name: fieldLayoutInfo.attrs.name, value: value || '', readOnly: true, disabled: true, className: styles.fieldInput })] }));
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=SolidComputedField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidComputedField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidComputedField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport * as Yup from 'yup';\nimport styles from './solidFields.module.css';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { SolidInput } from \"../../../shad-cn-ui\";\n\n/**\n * SolidComputedField\n *\n * Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).\n * They are always read-only in the UI and are only shown when a record already exists\n * (i.e., the form is in view or edit mode for an existing record, NOT during creation).\n */\nexport class SolidComputedField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n updateFormData(_value: any, _formData: FormData): any {\n // Computed fields are never submitted — the server calculates them.\n }\n\n initialValue(): any {\n const fieldName = this.fieldContext.field.attrs.name;\n const existingValue = this.fieldContext.data?.[fieldName];\n return existingValue !== undefined && existingValue !== null ? existingValue : '';\n }\n\n validationSchema(): Yup.Schema {\n // Computed fields are always optional; they are never set by the user.\n return Yup.mixed().nullable();\n }\n\n render(formik: FormikObject) {\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // Computed fields are only relevant for existing records.\n // Check by whether the underlying data has an `id` (record exists).\n const recordExists = !!this.fieldContext.data?.id;\n if (!recordExists) {\n return null;\n }\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultComputedFormWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultComputedFormWidget';\n }\n\n const viewMode: string = this.fieldContext.viewMode;\n\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n/**\n * Default widget for computed fields — renders as a read-only input in edit mode.\n * Uses the same layout as the short-text view widget for consistency.\n */\nexport const DefaultComputedFormWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata?.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const viewMode: string = fieldContext.viewMode;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n\n if (viewMode === 'view') {\n // View mode: display as plain text (same as DefaultShortTextFormViewWidget)\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>{value && typeof value === 'string' ? value : ''}</p>\n </div>\n );\n }\n\n // Edit mode: read-only input to make it clear this is a server-computed value\n return (\n <div className={styles.fieldWrapper}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidInput\n type=\"text\"\n id={fieldLayoutInfo.attrs.name}\n name={fieldLayoutInfo.attrs.name}\n value={value || ''}\n readOnly\n disabled\n className={styles.fieldInput}\n />\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
|
|
2
|
+
import * as Yup from 'yup';
|
|
3
|
+
import styles from './solidFields.module.css';
|
|
4
|
+
import { FormikObject, ISolidField, SolidFieldProps } from "./ISolidField";
|
|
5
|
+
import { getExtensionComponent } from "../../../../helpers/registry";
|
|
6
|
+
import { SolidFormFieldWidgetProps } from "../../../../types/solid-core";
|
|
7
|
+
import { SolidFieldTooltip } from "../../../../components/common/SolidFieldTooltip";
|
|
8
|
+
import { SolidInput } from "../../../shad-cn-ui";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* SolidComputedField
|
|
12
|
+
*
|
|
13
|
+
* Computed fields are server-generated values (e.g. auto-calculated totals, slugs, codes).
|
|
14
|
+
* They are always read-only in the UI and are only shown when a record already exists
|
|
15
|
+
* (i.e., the form is in view or edit mode for an existing record, NOT during creation).
|
|
16
|
+
*/
|
|
17
|
+
export class SolidComputedField implements ISolidField {
|
|
18
|
+
|
|
19
|
+
private fieldContext: SolidFieldProps;
|
|
20
|
+
|
|
21
|
+
constructor(fieldContext: SolidFieldProps) {
|
|
22
|
+
this.fieldContext = fieldContext;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
updateFormData(_value: any, _formData: FormData): any {
|
|
26
|
+
// Computed fields are never submitted — the server calculates them.
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
initialValue(): any {
|
|
30
|
+
const fieldName = this.fieldContext.field.attrs.name;
|
|
31
|
+
const existingValue = this.fieldContext.data?.[fieldName];
|
|
32
|
+
return existingValue !== undefined && existingValue !== null ? existingValue : '';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
validationSchema(): Yup.Schema {
|
|
36
|
+
// Computed fields are always optional; they are never set by the user.
|
|
37
|
+
return Yup.mixed().nullable();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
render(formik: FormikObject) {
|
|
41
|
+
const fieldLayoutInfo = this.fieldContext.field;
|
|
42
|
+
const className = fieldLayoutInfo.attrs?.className || 'field col-12';
|
|
43
|
+
|
|
44
|
+
// Computed fields are only relevant for existing records.
|
|
45
|
+
// Check by whether the underlying data has an `id` (record exists).
|
|
46
|
+
const recordExists = !!this.fieldContext.data?.id;
|
|
47
|
+
if (!recordExists) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
let viewWidget = fieldLayoutInfo.attrs.viewWidget;
|
|
52
|
+
let editWidget = fieldLayoutInfo.attrs.editWidget;
|
|
53
|
+
if (!editWidget) {
|
|
54
|
+
editWidget = 'DefaultComputedFormWidget';
|
|
55
|
+
}
|
|
56
|
+
if (!viewWidget) {
|
|
57
|
+
viewWidget = 'DefaultComputedFormWidget';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const viewMode: string = this.fieldContext.viewMode;
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<>
|
|
64
|
+
<div className={className}>
|
|
65
|
+
{viewMode === "view" &&
|
|
66
|
+
this.renderExtensionRenderMode(viewWidget, formik)
|
|
67
|
+
}
|
|
68
|
+
{viewMode === "edit" &&
|
|
69
|
+
this.renderExtensionRenderMode(editWidget, formik)
|
|
70
|
+
}
|
|
71
|
+
</div>
|
|
72
|
+
</>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
renderExtensionRenderMode(widget: string, formik: FormikObject) {
|
|
77
|
+
let DynamicWidget = getExtensionComponent(widget);
|
|
78
|
+
const widgetProps: SolidFormFieldWidgetProps = {
|
|
79
|
+
formik: formik,
|
|
80
|
+
fieldContext: this.fieldContext,
|
|
81
|
+
}
|
|
82
|
+
return (
|
|
83
|
+
<>
|
|
84
|
+
{DynamicWidget && <DynamicWidget {...widgetProps} />}
|
|
85
|
+
</>
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Default widget for computed fields — renders as a read-only input in edit mode.
|
|
92
|
+
* Uses the same layout as the short-text view widget for consistency.
|
|
93
|
+
*/
|
|
94
|
+
export const DefaultComputedFormWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
|
|
95
|
+
const fieldMetadata = fieldContext.fieldMetadata;
|
|
96
|
+
const fieldLayoutInfo = fieldContext.field;
|
|
97
|
+
const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata?.displayName;
|
|
98
|
+
const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;
|
|
99
|
+
const viewMode: string = fieldContext.viewMode;
|
|
100
|
+
const value = formik.values[fieldLayoutInfo.attrs.name];
|
|
101
|
+
|
|
102
|
+
if (viewMode === 'view') {
|
|
103
|
+
// View mode: display as plain text (same as DefaultShortTextFormViewWidget)
|
|
104
|
+
return (
|
|
105
|
+
<div className={styles.fieldViewWrapper}>
|
|
106
|
+
{showFieldLabel !== false && (
|
|
107
|
+
<p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>
|
|
108
|
+
)}
|
|
109
|
+
<p className={styles.fieldViewValue}>{value && typeof value === 'string' ? value : ''}</p>
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Edit mode: read-only input to make it clear this is a server-computed value
|
|
115
|
+
return (
|
|
116
|
+
<div className={styles.fieldWrapper}>
|
|
117
|
+
{showFieldLabel != false &&
|
|
118
|
+
<label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>
|
|
119
|
+
{fieldLabel}
|
|
120
|
+
<SolidFieldTooltip fieldContext={fieldContext} />
|
|
121
|
+
</label>
|
|
122
|
+
}
|
|
123
|
+
<SolidInput
|
|
124
|
+
type="text"
|
|
125
|
+
id={fieldLayoutInfo.attrs.name}
|
|
126
|
+
name={fieldLayoutInfo.attrs.name}
|
|
127
|
+
value={value || ''}
|
|
128
|
+
readOnly
|
|
129
|
+
disabled
|
|
130
|
+
className={styles.fieldInput}
|
|
131
|
+
/>
|
|
132
|
+
</div>
|
|
133
|
+
);
|
|
134
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidSelectionDynamicField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AASzE,qBAAa,0BAA2B,YAAW,WAAW;IAE1D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAoDnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAwBnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"SolidSelectionDynamicField.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AASzE,qBAAa,0BAA2B,YAAW,WAAW;IAE1D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAoDnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAwBnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA2C9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAmC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAKD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CAuGxG,CAAA;AAGD,eAAO,MAAM,qCAAqC,6BAA8B,yBAAyB,4CA+CxG,CAAA"}
|
|
@@ -182,14 +182,22 @@ var SolidSelectionDynamicField = /** @class */ (function () {
|
|
|
182
182
|
// return schema;
|
|
183
183
|
var isMultiSelect = (_b = fieldLayoutInfo.attrs.multiSelect) !== null && _b !== void 0 ? _b : fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.isMultiSelect;
|
|
184
184
|
var isRequired = (_d = (_c = fieldLayoutInfo.attrs) === null || _c === void 0 ? void 0 : _c.required) !== null && _d !== void 0 ? _d : fieldMetadata.required;
|
|
185
|
-
if (!isRequired) {
|
|
186
|
-
return Yup.mixed();
|
|
187
|
-
}
|
|
188
185
|
if (isMultiSelect) {
|
|
186
|
+
if (!isRequired) {
|
|
187
|
+
return Yup.array()
|
|
188
|
+
.of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }))
|
|
189
|
+
.nullable();
|
|
190
|
+
}
|
|
189
191
|
return Yup.array()
|
|
190
192
|
.min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))
|
|
191
193
|
.of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));
|
|
192
194
|
}
|
|
195
|
+
if (!isRequired) {
|
|
196
|
+
return Yup.object().shape({
|
|
197
|
+
label: Yup.string(),
|
|
198
|
+
value: Yup.string(),
|
|
199
|
+
}).nullable();
|
|
200
|
+
}
|
|
193
201
|
return Yup.object().shape({
|
|
194
202
|
label: Yup.string(),
|
|
195
203
|
value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidSelectionDynamicField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useLazyGetSelectionDynamicValuesQuery } from \"../../../../redux/api/fieldApi\";\nimport { SolidAutocomplete } from \"../../../shad-cn-ui/SolidAutocomplete\";\nimport { buildSyntheticChangeEvent } from \"./fieldEventUtils\";\nimport qs from \"qs\";\nimport { useState } from \"react\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { formikValuestoQueryString } from \"../../../../helpers/helpers\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\ntype AutoCompleteCompleteEvent = { query: string };\n\n\nexport class SolidSelectionDynamicField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n initialValue(): any {\n // TODO: Use the field metadata to re-create the object in the valid format \n // {label: '', value: ''}\n const fieldLayoutInfo = this.fieldContext.field;\n const optionValue = this.fieldContext.data[fieldLayoutInfo.attrs.name];\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n // isMultiSelect: fieldMetaData ? fieldMetaData?.isMultiSelect : false,\n\n // return { label: optionValue || '', value: optionValue || '' };\n const stripBracketsAndQuotes = (str: string) =>\n str.replace(/^\\[?\"?/, '').replace(/\"?\\]?$/, '').trim();\n\n const cleanValue = (val: any) => {\n if (typeof val === 'string') {\n const cleaned = stripBracketsAndQuotes(val);\n return { label: cleaned, value: cleaned };\n } else if (val && typeof val === 'object') {\n const label = stripBracketsAndQuotes(String(val.label ?? val));\n const value = stripBracketsAndQuotes(String(val.value ?? val));\n return { label, value };\n } else {\n const strVal = stripBracketsAndQuotes(String(val));\n return { label: strVal, value: strVal };\n }\n };\n\n if (optionValue === '' || optionValue === null || optionValue === undefined || (Array.isArray(optionValue) && optionValue.length === 0)) {\n return null;\n }\n\n if (isMultiSelect) {\n if (Array.isArray(optionValue)) {\n return optionValue.map(cleanValue);\n } else if (typeof optionValue === 'string') {\n try {\n const parsed = JSON.parse(optionValue); // try to parse as JSON array\n if (Array.isArray(parsed)) {\n return parsed.map(cleanValue);\n }\n } catch {\n // fallback to comma-split only if not valid JSON\n const splitValues = optionValue.split(',').map(v => v.trim()).filter(Boolean);\n return splitValues.map(cleanValue);\n }\n }\n return [];\n } else {\n return cleanValue(optionValue || '');\n }\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n const stripQuotes = (str: string) => str.replace(/^\"+|\"+$/g, '').replace(/^'+|'+$/g, '');\n\n if (value) {\n if (isMultiSelect) {\n const selectedValues = value.map((v: any) => {\n const cleanedValue = stripQuotes(v.value); // still fine\n return cleanedValue;\n });\n const jsonString = JSON.stringify(selectedValues); // ✅ Proper JSON array\n formData.append(fieldLayoutInfo.attrs.name, jsonString);\n } else {\n const cleanedValue = stripQuotes(value.value);\n formData.append(fieldLayoutInfo.attrs.name, cleanedValue);\n }\n }\n // if (value) {\n // formData.append(fieldLayoutInfo.attrs.name, value.value);\n // }\n }\n\n validationSchema(): Yup.Schema {\n let schema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n // if (fieldMetadata.required) {\n // schema = schema.required(`${fieldLabel} is required.`);\n // }\n\n // return schema;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n \n if (!isRequired) {\n return Yup.mixed();\n }\n\n if (isMultiSelect) {\n return Yup.array()\n .min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));\n }\n\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),\n });\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const isFormFieldValid = (formik: any, fieldName: string) => formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultSelectionDynamicFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultSelectionDynamicFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\nexport const DefaultSelectionDynamicFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const whereClause = fieldLayoutInfo.attrs.whereClause;\n\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n // selection dynamic specific code. \n const [triggerGetSelectionDynamicValues] = useLazyGetSelectionDynamicValuesQuery();\n const [selectionDynamicItems, setSelectionDynamicItems] = useState([]);\n const isFormFieldValid = (formik: any, fieldName: string) =>\n (formik.touched[fieldName] || formik.submitCount > 0) && !!formik.errors[fieldName];\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n\n const selectionDynamicSearch = async (event: AutoCompleteCompleteEvent) => {\n try {\n // const query = event.query ?? \"\";\n const queryData = {\n offset: 0,\n limit: 10,\n query: event.query,\n fieldId: fieldMetadata.id,\n formValues: formikValuestoQueryString(formik.values),\n };\n if (whereClause) {\n queryData.query = whereClause;\n }\n let sdQs = qs.stringify(queryData, {\n encodeValuesOnly: true,\n // encoder: (str, defaultEncoder, charset, type) => {\n // if (type === 'key' || type === 'value') {\n // if (str === queryData.query) return str;\n // }\n // return defaultEncoder(str);\n // }\n });\n // TODO: do error handling here, possible errors like modelname is incorrect etc...\n const sdResponse = await triggerGetSelectionDynamicValues(sdQs).unwrap();\n const items = Array.isArray(sdResponse?.data) ? sdResponse.data : [];\n\n // TODO: if no data found then can we show no matching \"entities\", where entities can be replaced with the model plural name,\n // const sdData = sdResponse.data.data;\n\n // @ts-ignore\n setSelectionDynamicItems([...items]);\n } catch (err) {\n setSelectionDynamicItems([]);\n }\n }\n\n\n return (\n <div className={`${styles.fieldWrapper} ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalid : \"\"}`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {isRequired && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidAutocomplete\n multiple={isMultiSelect}\n field=\"label\"\n className={`solid-standard-autocomplete ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalidControl : \"\"}`}\n value={formik.values[fieldLayoutInfo.attrs.name] || (isMultiSelect ? [] : null)}\n dropdown\n suggestions={selectionDynamicItems}\n completeMethod={(e) => selectionDynamicSearch(e)}\n emptyMessage=\"No records found\"\n onChange={({ value }) => {\n if (formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled) return;\n const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onChange`, syntheticEvent);\n fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n }}\n // onSelect={({ value }) => {\n // const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onSelect`, syntheticEvent);\n // fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n // }}\n />\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <p className={styles.fieldError}>\n {typeof formik.errors[fieldLayoutInfo?.attrs?.name] === 'object'\n ? formik.errors[fieldLayoutInfo?.attrs?.name]?.value?.toString()\n : formik.errors[fieldLayoutInfo?.attrs?.name]?.toString()}\n </p>\n )}\n </div>\n );\n}\n\n\nexport const DefaultSelectionDynamicFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n const toLabel = (val: any) => {\n if (!val) return '';\n if (typeof val === 'string' || typeof val === 'number') return String(val);\n if (typeof val === 'object') return val.label ?? val.value ?? '';\n return '';\n };\n\n let values: string[] = [];\n if (isMultiSelect) {\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n values = parsed.map(toLabel);\n }\n } catch {\n values = value.split(',').map(v => v.trim()).map(toLabel);\n }\n } else if (Array.isArray(value)) {\n values = value.map(toLabel);\n }\n }\n\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>\n {isMultiSelect\n ? (values.length > 0 ? values.join(', ') : 'No selection')\n : (() => {\n const single = toLabel(value);\n return single ? single : 'No selection';\n })()}\n </p>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidSelectionDynamicField.js","sourceRoot":"","sources":["../../../../../src/components/core/form/fields/SolidSelectionDynamicField.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { useLazyGetSelectionDynamicValuesQuery } from \"../../../../redux/api/fieldApi\";\nimport { SolidAutocomplete } from \"../../../shad-cn-ui/SolidAutocomplete\";\nimport { buildSyntheticChangeEvent } from \"./fieldEventUtils\";\nimport qs from \"qs\";\nimport { useState } from \"react\";\nimport * as Yup from 'yup';\nimport { FormikObject, ISolidField, SolidFieldProps } from \"./ISolidField\";\nimport { getExtensionComponent } from \"../../../../helpers/registry\";\nimport { SolidFormFieldWidgetProps } from \"../../../../types/solid-core\";\nimport { SolidFieldTooltip } from \"../../../../components/common/SolidFieldTooltip\";\nimport { formikValuestoQueryString } from \"../../../../helpers/helpers\";\nimport { ERROR_MESSAGES } from \"../../../../constants/error-messages\";\nimport styles from \"./solidFields.module.css\";\n\ntype AutoCompleteCompleteEvent = { query: string };\n\n\nexport class SolidSelectionDynamicField implements ISolidField {\n\n private fieldContext: SolidFieldProps;\n\n constructor(fieldContext: SolidFieldProps) {\n this.fieldContext = fieldContext;\n }\n\n initialValue(): any {\n // TODO: Use the field metadata to re-create the object in the valid format \n // {label: '', value: ''}\n const fieldLayoutInfo = this.fieldContext.field;\n const optionValue = this.fieldContext.data[fieldLayoutInfo.attrs.name];\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n // isMultiSelect: fieldMetaData ? fieldMetaData?.isMultiSelect : false,\n\n // return { label: optionValue || '', value: optionValue || '' };\n const stripBracketsAndQuotes = (str: string) =>\n str.replace(/^\\[?\"?/, '').replace(/\"?\\]?$/, '').trim();\n\n const cleanValue = (val: any) => {\n if (typeof val === 'string') {\n const cleaned = stripBracketsAndQuotes(val);\n return { label: cleaned, value: cleaned };\n } else if (val && typeof val === 'object') {\n const label = stripBracketsAndQuotes(String(val.label ?? val));\n const value = stripBracketsAndQuotes(String(val.value ?? val));\n return { label, value };\n } else {\n const strVal = stripBracketsAndQuotes(String(val));\n return { label: strVal, value: strVal };\n }\n };\n\n if (optionValue === '' || optionValue === null || optionValue === undefined || (Array.isArray(optionValue) && optionValue.length === 0)) {\n return null;\n }\n\n if (isMultiSelect) {\n if (Array.isArray(optionValue)) {\n return optionValue.map(cleanValue);\n } else if (typeof optionValue === 'string') {\n try {\n const parsed = JSON.parse(optionValue); // try to parse as JSON array\n if (Array.isArray(parsed)) {\n return parsed.map(cleanValue);\n }\n } catch {\n // fallback to comma-split only if not valid JSON\n const splitValues = optionValue.split(',').map(v => v.trim()).filter(Boolean);\n return splitValues.map(cleanValue);\n }\n }\n return [];\n } else {\n return cleanValue(optionValue || '');\n }\n }\n\n updateFormData(value: any, formData: FormData): any {\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n const stripQuotes = (str: string) => str.replace(/^\"+|\"+$/g, '').replace(/^'+|'+$/g, '');\n\n if (value) {\n if (isMultiSelect) {\n const selectedValues = value.map((v: any) => {\n const cleanedValue = stripQuotes(v.value); // still fine\n return cleanedValue;\n });\n const jsonString = JSON.stringify(selectedValues); // ✅ Proper JSON array\n formData.append(fieldLayoutInfo.attrs.name, jsonString);\n } else {\n const cleanedValue = stripQuotes(value.value);\n formData.append(fieldLayoutInfo.attrs.name, cleanedValue);\n }\n }\n // if (value) {\n // formData.append(fieldLayoutInfo.attrs.name, value.value);\n // }\n }\n\n validationSchema(): Yup.Schema {\n let schema = Yup.object();\n\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n\n // 1. required \n // if (fieldMetadata.required) {\n // schema = schema.required(`${fieldLabel} is required.`);\n // }\n\n // return schema;\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n \n if (isMultiSelect) {\n if (!isRequired) {\n return Yup.array()\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }))\n .nullable();\n }\n\n return Yup.array()\n .min(1, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel))\n .of(Yup.object().shape({ label: Yup.string(), value: Yup.string() }));\n }\n\n if (!isRequired) {\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string(),\n }).nullable();\n }\n\n return Yup.object().shape({\n label: Yup.string(),\n value: Yup.string().required(ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel)),\n });\n }\n\n render(formik: FormikObject) {\n const fieldMetadata = this.fieldContext.fieldMetadata;\n const fieldLayoutInfo = this.fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n\n // const isFormFieldValid = (formik: any, fieldName: string) => formik.touched[fieldName] && formik.errors[fieldName];\n const isFormFieldValid = (formik: any, fieldName: string) => formik.errors[fieldName];\n\n let viewWidget = fieldLayoutInfo.attrs.viewWidget;\n let editWidget = fieldLayoutInfo.attrs.editWidget;\n if (!editWidget) {\n editWidget = 'DefaultSelectionDynamicFormEditWidget';\n }\n if (!viewWidget) {\n viewWidget = 'DefaultSelectionDynamicFormViewWidget';\n }\n const viewMode: string = this.fieldContext.viewMode;\n return (\n <>\n <div className={className}>\n {viewMode === \"view\" &&\n this.renderExtensionRenderMode(viewWidget, formik)\n }\n {viewMode === \"edit\" &&\n <>\n {editWidget &&\n this.renderExtensionRenderMode(editWidget, formik)\n }\n </>\n }\n </div>\n </>\n );\n }\n\n renderExtensionRenderMode(widget: string, formik: FormikObject) {\n let DynamicWidget = getExtensionComponent(widget);\n const widgetProps: SolidFormFieldWidgetProps = {\n formik: formik,\n fieldContext: this.fieldContext,\n }\n return (\n <>\n {DynamicWidget && <DynamicWidget {...widgetProps} />}\n </>\n )\n }\n}\n\n\n\n\nexport const DefaultSelectionDynamicFormEditWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const className = fieldLayoutInfo.attrs?.className || 'field col-12';\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const fieldDescription = fieldLayoutInfo.attrs.description ?? fieldMetadata.description;\n const solidFormViewMetaData = fieldContext.solidFormViewMetaData;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const readOnlyPermission = fieldContext.readOnly;\n\n const fieldDisabled = fieldLayoutInfo.attrs?.disabled;\n const fieldReadonly = fieldLayoutInfo.attrs?.readonly;\n\n const formDisabled = solidFormViewMetaData.data.solidView?.layout?.attrs?.disabled;\n const formReadonly = solidFormViewMetaData.data.solidView?.layout?.attrs?.readonly;\n const whereClause = fieldLayoutInfo.attrs.whereClause;\n\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n // selection dynamic specific code. \n const [triggerGetSelectionDynamicValues] = useLazyGetSelectionDynamicValuesQuery();\n const [selectionDynamicItems, setSelectionDynamicItems] = useState([]);\n const isFormFieldValid = (formik: any, fieldName: string) =>\n (formik.touched[fieldName] || formik.submitCount > 0) && !!formik.errors[fieldName];\n\n const isRequired = fieldLayoutInfo.attrs?.required ?? fieldMetadata.required;\n\n const selectionDynamicSearch = async (event: AutoCompleteCompleteEvent) => {\n try {\n // const query = event.query ?? \"\";\n const queryData = {\n offset: 0,\n limit: 10,\n query: event.query,\n fieldId: fieldMetadata.id,\n formValues: formikValuestoQueryString(formik.values),\n };\n if (whereClause) {\n queryData.query = whereClause;\n }\n let sdQs = qs.stringify(queryData, {\n encodeValuesOnly: true,\n // encoder: (str, defaultEncoder, charset, type) => {\n // if (type === 'key' || type === 'value') {\n // if (str === queryData.query) return str;\n // }\n // return defaultEncoder(str);\n // }\n });\n // TODO: do error handling here, possible errors like modelname is incorrect etc...\n const sdResponse = await triggerGetSelectionDynamicValues(sdQs).unwrap();\n const items = Array.isArray(sdResponse?.data) ? sdResponse.data : [];\n\n // TODO: if no data found then can we show no matching \"entities\", where entities can be replaced with the model plural name,\n // const sdData = sdResponse.data.data;\n\n // @ts-ignore\n setSelectionDynamicItems([...items]);\n } catch (err) {\n setSelectionDynamicItems([]);\n }\n }\n\n\n return (\n <div className={`${styles.fieldWrapper} ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalid : \"\"}`}>\n {showFieldLabel != false &&\n <label htmlFor={fieldLayoutInfo.attrs.name} className={`${styles.fieldLabel} form-field-label`}>\n {fieldLabel}\n {isRequired && <span className=\"text-red-500\"> *</span>}\n <SolidFieldTooltip fieldContext={fieldContext} />\n </label>\n }\n <SolidAutocomplete\n multiple={isMultiSelect}\n field=\"label\"\n className={`solid-standard-autocomplete ${isFormFieldValid(formik, fieldLayoutInfo.attrs.name) ? styles.fieldInvalidControl : \"\"}`}\n value={formik.values[fieldLayoutInfo.attrs.name] || (isMultiSelect ? [] : null)}\n dropdown\n suggestions={selectionDynamicItems}\n completeMethod={(e) => selectionDynamicSearch(e)}\n emptyMessage=\"No records found\"\n onChange={({ value }) => {\n if (formReadonly || fieldReadonly || readOnlyPermission || formDisabled || fieldDisabled) return;\n const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onChange`, syntheticEvent);\n fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n }}\n // onSelect={({ value }) => {\n // const syntheticEvent = buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, \"text\");\n // console.log(`SolidSelectionDynamicField > SolidAutocomplete > onSelect`, syntheticEvent);\n // fieldContext.onChange(syntheticEvent, \"onFieldChange\");\n // }}\n />\n {isFormFieldValid(formik, fieldLayoutInfo.attrs.name) && (\n <p className={styles.fieldError}>\n {typeof formik.errors[fieldLayoutInfo?.attrs?.name] === 'object'\n ? formik.errors[fieldLayoutInfo?.attrs?.name]?.value?.toString()\n : formik.errors[fieldLayoutInfo?.attrs?.name]?.toString()}\n </p>\n )}\n </div>\n );\n}\n\n\nexport const DefaultSelectionDynamicFormViewWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n\n const fieldMetadata = fieldContext.fieldMetadata;\n const fieldLayoutInfo = fieldContext.field;\n const fieldLabel = fieldLayoutInfo.attrs.label ?? fieldMetadata.displayName;\n const showFieldLabel = fieldLayoutInfo?.attrs?.showLabel;\n const value = formik.values[fieldLayoutInfo.attrs.name];\n const isMultiSelect = fieldLayoutInfo.attrs.multiSelect ?? fieldMetadata?.isMultiSelect;\n\n const toLabel = (val: any) => {\n if (!val) return '';\n if (typeof val === 'string' || typeof val === 'number') return String(val);\n if (typeof val === 'object') return val.label ?? val.value ?? '';\n return '';\n };\n\n let values: string[] = [];\n if (isMultiSelect) {\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n values = parsed.map(toLabel);\n }\n } catch {\n values = value.split(',').map(v => v.trim()).map(toLabel);\n }\n } else if (Array.isArray(value)) {\n values = value.map(toLabel);\n }\n }\n\n return (\n <div className={styles.fieldViewWrapper}>\n {showFieldLabel !== false && (\n <p className={`${styles.fieldViewLabel} form-field-label`}>{fieldLabel}</p>\n )}\n <p className={styles.fieldViewValue}>\n {isMultiSelect\n ? (values.length > 0 ? values.join(', ') : 'No selection')\n : (() => {\n const single = toLabel(value);\n return single ? single : 'No selection';\n })()}\n </p>\n </div>\n );\n}\n"]}
|