@solidxai/core-ui 0.1.7-beta.8 → 0.1.7

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 (131) hide show
  1. package/README.md +215 -0
  2. package/dist/components/auth/SolidLogin.js +1 -1
  3. package/dist/components/auth/SolidLogin.js.map +1 -1
  4. package/dist/components/auth/SolidLogin.tsx +2 -2
  5. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  6. package/dist/components/common/GeneralSettings.js +79 -45
  7. package/dist/components/common/GeneralSettings.js.map +1 -1
  8. package/dist/components/common/GeneralSettings.tsx +94 -45
  9. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts +33 -7
  10. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
  11. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +132 -40
  12. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
  13. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +373 -55
  14. package/dist/components/core/chatter/SolidChatter.d.ts +2 -1
  15. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  16. package/dist/components/core/chatter/SolidChatter.js +2 -2
  17. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  18. package/dist/components/core/chatter/SolidChatter.tsx +2 -1
  19. package/dist/components/core/chatter/SolidChatterHeader.d.ts +1 -0
  20. package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
  21. package/dist/components/core/chatter/SolidChatterHeader.js +3 -3
  22. package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
  23. package/dist/components/core/chatter/SolidChatterHeader.tsx +4 -3
  24. package/dist/components/core/chatter/SolidMessageComposer.d.ts +2 -1
  25. package/dist/components/core/chatter/SolidMessageComposer.d.ts.map +1 -1
  26. package/dist/components/core/chatter/SolidMessageComposer.js +3 -1
  27. package/dist/components/core/chatter/SolidMessageComposer.js.map +1 -1
  28. package/dist/components/core/chatter/SolidMessageComposer.tsx +3 -1
  29. package/dist/components/core/common/SolidViewLayoutManager.d.ts +17 -0
  30. package/dist/components/core/common/SolidViewLayoutManager.d.ts.map +1 -1
  31. package/dist/components/core/common/SolidViewLayoutManager.js +58 -1
  32. package/dist/components/core/common/SolidViewLayoutManager.js.map +1 -1
  33. package/dist/components/core/common/SolidViewLayoutManager.ts +43 -2
  34. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts +3 -0
  35. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts.map +1 -0
  36. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js +92 -0
  37. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -0
  38. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +68 -0
  39. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts +3 -0
  40. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.d.ts.map +1 -0
  41. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js +87 -0
  42. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -0
  43. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +70 -0
  44. package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts +3 -0
  45. package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.d.ts.map +1 -0
  46. package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js +111 -0
  47. package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.js.map +1 -0
  48. package/dist/components/core/extension/solid-core/listOfValues/form/SolidLovTypeChangeFormEditWidget.tsx +122 -0
  49. package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts +3 -0
  50. package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.d.ts.map +1 -0
  51. package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js +10 -0
  52. package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.js.map +1 -0
  53. package/dist/components/core/extension/solid-core/mqMessage/form/SolidMqMessageStageFormViewWIdget.tsx +21 -0
  54. package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts +8 -0
  55. package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.d.ts.map +1 -0
  56. package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js +62 -0
  57. package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.js.map +1 -0
  58. package/dist/components/core/extension/solid-core/mqMessage/form/mqMessageOnFormLoadHandler.tsx +27 -0
  59. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts +3 -0
  60. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.d.ts.map +1 -0
  61. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js +8 -0
  62. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.js.map +1 -0
  63. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessageStageListViewWidget.tsx +15 -0
  64. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts +3 -0
  65. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.d.ts.map +1 -0
  66. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js +158 -0
  67. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js.map +1 -0
  68. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.tsx +185 -0
  69. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts +17 -0
  70. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.d.ts.map +1 -0
  71. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js +52 -0
  72. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js.map +1 -0
  73. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.tsx +83 -0
  74. package/dist/components/core/locales/SolidChatterLocaleTabView.d.ts.map +1 -1
  75. package/dist/components/core/locales/SolidChatterLocaleTabView.js +7 -5
  76. package/dist/components/core/locales/SolidChatterLocaleTabView.js.map +1 -1
  77. package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +3 -0
  78. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.css +38 -0
  79. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts +1 -0
  80. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts.map +1 -1
  81. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js +4 -3
  82. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js.map +1 -1
  83. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.tsx +13 -3
  84. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts +2 -1
  85. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
  86. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +6 -5
  87. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
  88. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +6 -7
  89. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  90. package/dist/components/core/users/CreateUser.js +89 -35
  91. package/dist/components/core/users/CreateUser.js.map +1 -1
  92. package/dist/components/core/users/CreateUser.tsx +291 -165
  93. package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -1
  94. package/dist/components/layout/SolidAiStudioLayout.js +123 -8
  95. package/dist/components/layout/SolidAiStudioLayout.js.map +1 -1
  96. package/dist/components/layout/SolidAiStudioLayout.tsx +70 -6
  97. package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
  98. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  99. package/dist/components/shad-cn-ui/SolidTabs.js +5 -5
  100. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  101. package/dist/components/shad-cn-ui/SolidTabs.tsx +6 -0
  102. package/dist/helpers/registry.d.ts.map +1 -1
  103. package/dist/helpers/registry.js +10 -6
  104. package/dist/helpers/registry.js.map +1 -1
  105. package/dist/helpers/registry.ts +11 -7
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +3 -0
  109. package/dist/index.js.map +1 -1
  110. package/dist/index.ts +11 -0
  111. package/dist/redux/api/apiKeyApi.d.ts +8 -1
  112. package/dist/redux/api/apiKeyApi.d.ts.map +1 -1
  113. package/dist/redux/api/apiKeyApi.js +12 -1
  114. package/dist/redux/api/apiKeyApi.js.map +1 -1
  115. package/dist/redux/api/apiKeyApi.ts +9 -0
  116. package/dist/redux/store/defaultStoreConfig.d.ts +16 -1
  117. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  118. package/dist/redux/store/defaultStoreConfig.js +3 -1
  119. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  120. package/dist/redux/store/defaultStoreConfig.ts +3 -1
  121. package/dist/routes/guards/GuestGuard.d.ts +2 -0
  122. package/dist/routes/guards/GuestGuard.d.ts.map +1 -0
  123. package/dist/routes/guards/GuestGuard.js +18 -0
  124. package/dist/routes/guards/GuestGuard.js.map +1 -0
  125. package/dist/routes/guards/GuestGuard.tsx +20 -0
  126. package/dist/routes/solidRoutes.d.ts.map +1 -1
  127. package/dist/routes/solidRoutes.js +2 -1
  128. package/dist/routes/solidRoutes.js.map +1 -1
  129. package/dist/routes/solidRoutes.tsx +2 -1
  130. package/dist/types/solid-core.d.ts +1 -0
  131. package/package.json +1 -1
@@ -55,7 +55,7 @@ import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogClose, SolidDialo
55
55
  import { Filter, RefreshCw, Edit } from 'lucide-react';
56
56
  export var SolidChatterHeader = function (props) {
57
57
  var _a, _b;
58
- var activeTab = props.activeTab, visibleBox = props.visibleBox, handleTabClick = props.handleTabClick, modelSingularName = props.modelSingularName, refetch = props.refetch, id = props.id, onFilterChange = props.onFilterChange, onComposerCancel = props.onComposerCancel, title = props.title;
58
+ var activeTab = props.activeTab, visibleBox = props.visibleBox, handleTabClick = props.handleTabClick, modelSingularName = props.modelSingularName, refetch = props.refetch, id = props.id, onFilterChange = props.onFilterChange, onComposerCancel = props.onComposerCancel, title = props.title, modelUserKey = props.modelUserKey;
59
59
  var _c = useState(false), showFilterDialog = _c[0], setShowFilterDialog = _c[1];
60
60
  var _d = useState({
61
61
  name: '',
@@ -135,7 +135,7 @@ export var SolidChatterHeader = function (props) {
135
135
  };
136
136
  return (_jsxs("div", { className: "".concat(styles.chatterTitle, " ").concat(title ? styles.chatterTitleWithLabel : '', " solid-list-toolbar"), children: [_jsxs("div", { className: 'flex justify-content-between align-items-center solid-list-toolbar-row', children: [_jsx("p", { className: "m-0 view-title solid-text-wrapper form-wrapper-title", children: title || '' }), _jsxs("div", { className: 'flex align-items-center solid-header-buttons-wrapper', children: [_jsx(SolidButton, { size: "sm", type: "button", "aria-label": "Log Note", variant: hasActiveFilters ? 'primary' : 'outline', className: "solid-icon-button", style: { gap: 0 }, leftIcon: _jsx(Edit, { size: 14 }), onClick: function () { return handleTabClick('log'); } }), _jsx(SolidButton, { size: "sm", type: "button", "aria-label": "Filter", variant: hasActiveFilters ? 'primary' : 'outline', className: "solid-icon-button", style: { gap: 0 }, leftIcon: _jsx(Filter, { size: 14 }), onClick: handleFilterClick }), _jsx(SolidButton, { size: "sm", type: "button", "aria-label": "Refresh", variant: "outline", className: "solid-icon-button", style: { gap: 0 }, leftIcon: _jsx(RefreshCw, { size: 14 }), onClick: refetch })] })] }), visibleBox &&
137
137
  _jsxs("div", { className: 'mt-2', children: [visibleBox === "email-message" &&
138
- _jsx(SolidMessageComposer, { id: id, refetch: refetch, modelSingularName: modelSingularName, type: "email", onCancel: onComposerCancel }), visibleBox === "log" &&
139
- _jsx(SolidMessageComposer, { id: id, refetch: refetch, modelSingularName: modelSingularName, onCancel: onComposerCancel })] }), _jsxs(SolidDialog, { open: showFilterDialog, onOpenChange: setShowFilterDialog, className: 'solid-filter-dialog-shell solid-chatter-filter-main', style: { width: 500 }, showHeader: false, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsx("div", { children: _jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Filter Messages" }) }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: _jsxs("div", { className: "flex flex-column gap-3", children: [_jsxs("div", { className: "flex flex-column gap-2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "User" }), _jsx(SolidAutocomplete, { id: "fullName", value: filters.name, suggestions: suggestions, field: "fullName", completeMethod: searchUsers, onChange: function (e) { return handleUserChange(e.value); }, placeholder: "Filter by user", className: "w-full", inputClassName: "w-full" })] }), _jsxs("div", { className: "flex flex-column gap-2", children: [_jsx("label", { htmlFor: "dateRange", className: "form-field-label", children: "Date Range" }), _jsxs("div", { className: "flex gap-2 flex-column md:flex-row", children: [_jsx("div", { className: "flex-1", children: _jsx(SolidDatePicker, { selected: (_a = filters.startDate) !== null && _a !== void 0 ? _a : undefined, onChange: function (date) { return setFilters(function (prev) { return (__assign(__assign({}, prev), { startDate: date !== null && date !== void 0 ? date : null })); }); }, placeholderText: "Start Date", className: "w-full", wrapperClassName: "w-full", inputClassName: "w-full" }) }), _jsx("div", { className: "flex-1", children: _jsx(SolidDatePicker, { selected: (_b = filters.endDate) !== null && _b !== void 0 ? _b : undefined, onChange: function (date) { return setFilters(function (prev) { return (__assign(__assign({}, prev), { endDate: date !== null && date !== void 0 ? date : null })); }); }, placeholderText: "End Date", className: "w-full", wrapperClassName: "w-full", inputClassName: "w-full" }) })] })] })] }) }), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { label: "Clear", size: "sm", variant: "outline", onClick: handleClearFilters }), _jsx(SolidButton, { label: "Apply", size: "sm", className: "solid-purple-button", onClick: handleApplyFilters })] })] })] }));
138
+ _jsx(SolidMessageComposer, { id: id, refetch: refetch, modelSingularName: modelSingularName, type: "email", onCancel: onComposerCancel, modelUserKey: modelUserKey }), visibleBox === "log" &&
139
+ _jsx(SolidMessageComposer, { id: id, refetch: refetch, modelSingularName: modelSingularName, onCancel: onComposerCancel, modelUserKey: modelUserKey })] }), _jsxs(SolidDialog, { open: showFilterDialog, onOpenChange: setShowFilterDialog, className: 'solid-filter-dialog-shell solid-chatter-filter-main', style: { width: 500 }, showHeader: false, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsx("div", { children: _jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Filter Messages" }) }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: _jsxs("div", { className: "flex flex-column gap-3", children: [_jsxs("div", { className: "flex flex-column gap-2", children: [_jsx("label", { htmlFor: "fullName", className: "form-field-label", children: "User" }), _jsx(SolidAutocomplete, { id: "fullName", value: filters.name, suggestions: suggestions, field: "fullName", completeMethod: searchUsers, onChange: function (e) { return handleUserChange(e.value); }, placeholder: "Filter by user", className: "w-full", inputClassName: "w-full" })] }), _jsxs("div", { className: "flex flex-column gap-2", children: [_jsx("label", { htmlFor: "dateRange", className: "form-field-label", children: "Date Range" }), _jsxs("div", { className: "flex gap-2 flex-column md:flex-row", children: [_jsx("div", { className: "flex-1", children: _jsx(SolidDatePicker, { selected: (_a = filters.startDate) !== null && _a !== void 0 ? _a : undefined, onChange: function (date) { return setFilters(function (prev) { return (__assign(__assign({}, prev), { startDate: date !== null && date !== void 0 ? date : null })); }); }, placeholderText: "Start Date", className: "w-full", wrapperClassName: "w-full", inputClassName: "w-full" }) }), _jsx("div", { className: "flex-1", children: _jsx(SolidDatePicker, { selected: (_b = filters.endDate) !== null && _b !== void 0 ? _b : undefined, onChange: function (date) { return setFilters(function (prev) { return (__assign(__assign({}, prev), { endDate: date !== null && date !== void 0 ? date : null })); }); }, placeholderText: "End Date", className: "w-full", wrapperClassName: "w-full", inputClassName: "w-full" }) })] })] })] }) }), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { label: "Clear", size: "sm", variant: "outline", onClick: handleClearFilters }), _jsx(SolidButton, { label: "Apply", size: "sm", className: "solid-purple-button", onClick: handleApplyFilters })] })] })] }));
140
140
  };
141
141
  //# sourceMappingURL=SolidChatterHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidChatterHeader.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react'\nimport styles from './chatter.module.css'\nimport { SolidMessageComposer } from './SolidMessageComposer'\nimport { useLazyGetusersQuery } from '../../../redux/api/userApi'\nimport { ERROR_MESSAGES } from '../../../constants/error-messages'\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogClose,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidAutocomplete,\n SolidDatePicker\n} from '../../shad-cn-ui'\nimport { Filter, RefreshCw,Edit } from 'lucide-react'\ninterface FilterState {\n name: string;\n startDate: Date | null;\n endDate: Date | null;\n}\n\ninterface Props {\n activeTab: any,\n handleTabClick: any,\n visibleBox: any,\n modelSingularName: any,\n refetch: any,\n id: any,\n onFilterChange?: (filters: FilterState) => void;\n onComposerCancel?: () => void;\n title?: string;\n}\n\nexport const SolidChatterHeader = (props: Props) => {\n const { activeTab, visibleBox, handleTabClick, modelSingularName, refetch, id, onFilterChange, onComposerCancel, title } = props;\n const [showFilterDialog, setShowFilterDialog] = useState(false);\n const [filters, setFilters] = useState<FilterState>({\n name: '',\n startDate: null,\n endDate: null\n });\n const [hasActiveFilters, setHasActiveFilters] = useState(false);\n const [suggestions, setSuggestions] = useState<any[]>([]);\n const [getUsers] = useLazyGetusersQuery();\n\n useEffect(() => {\n const isActive = filters.name !== '' || filters.startDate !== null || filters.endDate !== null;\n setHasActiveFilters(isActive);\n }, [filters]);\n\n const handleFilterClick = () => {\n setShowFilterDialog(true);\n };\n\n const handleApplyFilters = () => {\n if (onFilterChange) {\n onFilterChange(filters);\n }\n setShowFilterDialog(false);\n };\n\n const handleClearFilters = () => {\n const clearedFilters = {\n name: '',\n startDate: null,\n endDate: null\n };\n setFilters(clearedFilters);\n if (onFilterChange) {\n onFilterChange(clearedFilters);\n }\n setShowFilterDialog(false);\n };\n\n const updateNameFilter = (value: string) => {\n setFilters(prev => {\n if (prev.name === value) {\n return prev;\n }\n return {\n ...prev,\n name: value\n };\n });\n };\n\n const searchUsers = async (event: { query: string }) => {\n updateNameFilter(event.query || '');\n try {\n const response = await getUsers(`filters[fullName][$containsi]=${event.query}`).unwrap();\n setSuggestions(response?.data?.records || []);\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_USER, error);\n setSuggestions([]);\n }\n };\n\n const handleUserChange = (value: any) => {\n if (!value) {\n updateNameFilter('');\n return;\n }\n if (typeof value === 'object') {\n updateNameFilter(value.fullName || '');\n return;\n }\n updateNameFilter(value);\n };\n\n return (\n <div className={`${styles.chatterTitle} ${title ? styles.chatterTitleWithLabel : ''} solid-list-toolbar`}>\n <div className='flex justify-content-between align-items-center solid-list-toolbar-row'>\n <p className=\"m-0 view-title solid-text-wrapper form-wrapper-title\">\n {title || ''}\n </p>\n <div className='flex align-items-center solid-header-buttons-wrapper'>\n {/* <Button\n label=\"Send Message\"\n size=\"small\"\n type=\"button\"\n onClick={() => handleTabClick('email-message')}\n {...(activeTab !== 'email-message' && {\n severity: 'secondary',\n outlined: true,\n })}\n /> */}\n {/* <SolidButton\n label=\"Log Note\"\n size=\"sm\"\n type=\"button\"\n variant=\"primary\"\n className=\"solid-purple-button\"\n onClick={() => handleTabClick('log')}\n /> */}\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Log Note\"\n variant={hasActiveFilters ? 'primary' : 'outline'}\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<Edit size={14} />}\n onClick={() => handleTabClick('log')}\n />\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Filter\"\n variant={hasActiveFilters ? 'primary' : 'outline'}\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<Filter size={14} />}\n onClick={handleFilterClick}\n />\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Refresh\"\n variant=\"outline\"\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<RefreshCw size={14} />}\n onClick={refetch}\n />\n </div>\n </div>\n {visibleBox &&\n <div className='mt-2'>\n {visibleBox === \"email-message\" &&\n <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} type={\"email\"} onCancel={onComposerCancel} />\n }\n\n {visibleBox === \"log\" &&\n <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} onCancel={onComposerCancel} />\n }\n </div>\n }\n <SolidDialog\n open={showFilterDialog}\n onOpenChange={setShowFilterDialog}\n className='solid-filter-dialog-shell solid-chatter-filter-main'\n style={{ width: 500 }}\n showHeader={false}\n >\n <SolidDialogHeader className=\"solid-filter-dialog-head\">\n <div>\n <SolidDialogTitle className=\"solid-filter-dialog-title m-0\">Filter Messages</SolidDialogTitle>\n </div>\n <SolidDialogClose className=\"solid-filter-dialog-close\" />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-filter-dialog-sep\" />\n <SolidDialogBody className=\"solid-filter-dialog-body\">\n <div className=\"flex flex-column gap-3\">\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">User</label>\n <SolidAutocomplete\n id=\"fullName\"\n value={filters.name}\n suggestions={suggestions}\n field=\"fullName\"\n completeMethod={searchUsers}\n onChange={(e) => handleUserChange(e.value)}\n placeholder=\"Filter by user\"\n className=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"dateRange\" className=\"form-field-label\">Date Range</label>\n <div className=\"flex gap-2 flex-column md:flex-row\">\n <div className=\"flex-1\">\n <SolidDatePicker\n selected={filters.startDate ?? undefined}\n onChange={(date: Date | null) => setFilters(prev => ({ ...prev, startDate: date ?? null }))}\n placeholderText=\"Start Date\"\n className=\"w-full\"\n wrapperClassName=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n <div className=\"flex-1\">\n <SolidDatePicker\n selected={filters.endDate ?? undefined}\n onChange={(date: Date | null) => setFilters(prev => ({ ...prev, endDate: date ?? null }))}\n placeholderText=\"End Date\"\n className=\"w-full\"\n wrapperClassName=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n </div>\n </div>\n </div>\n </SolidDialogBody>\n <SolidDialogFooter>\n <SolidButton \n label=\"Clear\" \n size=\"sm\"\n variant=\"outline\"\n onClick={handleClearFilters}\n />\n <SolidButton \n label=\"Apply\" \n size=\"sm\"\n className=\"solid-purple-button\"\n onClick={handleApplyFilters}\n />\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n )\n}\n"]}
1
+ {"version":3,"file":"SolidChatterHeader.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react'\nimport styles from './chatter.module.css'\nimport { SolidMessageComposer } from './SolidMessageComposer'\nimport { useLazyGetusersQuery } from '../../../redux/api/userApi'\nimport { ERROR_MESSAGES } from '../../../constants/error-messages'\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogClose,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidAutocomplete,\n SolidDatePicker\n} from '../../shad-cn-ui'\nimport { Filter, RefreshCw,Edit } from 'lucide-react'\ninterface FilterState {\n name: string;\n startDate: Date | null;\n endDate: Date | null;\n}\n\ninterface Props {\n activeTab: any,\n handleTabClick: any,\n visibleBox: any,\n modelSingularName: any,\n refetch: any,\n id: any,\n onFilterChange?: (filters: FilterState) => void;\n onComposerCancel?: () => void;\n title?: string;\n modelUserKey?: string;\n}\n\nexport const SolidChatterHeader = (props: Props) => {\n const { activeTab, visibleBox, handleTabClick, modelSingularName, refetch, id, onFilterChange, onComposerCancel, title, modelUserKey } = props;\n const [showFilterDialog, setShowFilterDialog] = useState(false);\n const [filters, setFilters] = useState<FilterState>({\n name: '',\n startDate: null,\n endDate: null\n });\n const [hasActiveFilters, setHasActiveFilters] = useState(false);\n const [suggestions, setSuggestions] = useState<any[]>([]);\n const [getUsers] = useLazyGetusersQuery();\n\n useEffect(() => {\n const isActive = filters.name !== '' || filters.startDate !== null || filters.endDate !== null;\n setHasActiveFilters(isActive);\n }, [filters]);\n\n const handleFilterClick = () => {\n setShowFilterDialog(true);\n };\n\n const handleApplyFilters = () => {\n if (onFilterChange) {\n onFilterChange(filters);\n }\n setShowFilterDialog(false);\n };\n\n const handleClearFilters = () => {\n const clearedFilters = {\n name: '',\n startDate: null,\n endDate: null\n };\n setFilters(clearedFilters);\n if (onFilterChange) {\n onFilterChange(clearedFilters);\n }\n setShowFilterDialog(false);\n };\n\n const updateNameFilter = (value: string) => {\n setFilters(prev => {\n if (prev.name === value) {\n return prev;\n }\n return {\n ...prev,\n name: value\n };\n });\n };\n\n const searchUsers = async (event: { query: string }) => {\n updateNameFilter(event.query || '');\n try {\n const response = await getUsers(`filters[fullName][$containsi]=${event.query}`).unwrap();\n setSuggestions(response?.data?.records || []);\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_USER, error);\n setSuggestions([]);\n }\n };\n\n const handleUserChange = (value: any) => {\n if (!value) {\n updateNameFilter('');\n return;\n }\n if (typeof value === 'object') {\n updateNameFilter(value.fullName || '');\n return;\n }\n updateNameFilter(value);\n };\n\n return (\n <div className={`${styles.chatterTitle} ${title ? styles.chatterTitleWithLabel : ''} solid-list-toolbar`}>\n <div className='flex justify-content-between align-items-center solid-list-toolbar-row'>\n <p className=\"m-0 view-title solid-text-wrapper form-wrapper-title\">\n {title || ''}\n </p>\n <div className='flex align-items-center solid-header-buttons-wrapper'>\n {/* <Button\n label=\"Send Message\"\n size=\"small\"\n type=\"button\"\n onClick={() => handleTabClick('email-message')}\n {...(activeTab !== 'email-message' && {\n severity: 'secondary',\n outlined: true,\n })}\n /> */}\n {/* <SolidButton\n label=\"Log Note\"\n size=\"sm\"\n type=\"button\"\n variant=\"primary\"\n className=\"solid-purple-button\"\n onClick={() => handleTabClick('log')}\n /> */}\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Log Note\"\n variant={hasActiveFilters ? 'primary' : 'outline'}\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<Edit size={14} />}\n onClick={() => handleTabClick('log')}\n />\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Filter\"\n variant={hasActiveFilters ? 'primary' : 'outline'}\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<Filter size={14} />}\n onClick={handleFilterClick}\n />\n <SolidButton\n size=\"sm\"\n type=\"button\"\n aria-label=\"Refresh\"\n variant=\"outline\"\n className=\"solid-icon-button\"\n style={{ gap: 0 }}\n leftIcon={<RefreshCw size={14} />}\n onClick={refetch}\n />\n </div>\n </div>\n {visibleBox &&\n <div className='mt-2'>\n {visibleBox === \"email-message\" &&\n <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} type={\"email\"} onCancel={onComposerCancel} modelUserKey={modelUserKey} />\n }\n\n {visibleBox === \"log\" &&\n <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} onCancel={onComposerCancel} modelUserKey={modelUserKey} />\n }\n </div>\n }\n <SolidDialog\n open={showFilterDialog}\n onOpenChange={setShowFilterDialog}\n className='solid-filter-dialog-shell solid-chatter-filter-main'\n style={{ width: 500 }}\n showHeader={false}\n >\n <SolidDialogHeader className=\"solid-filter-dialog-head\">\n <div>\n <SolidDialogTitle className=\"solid-filter-dialog-title m-0\">Filter Messages</SolidDialogTitle>\n </div>\n <SolidDialogClose className=\"solid-filter-dialog-close\" />\n </SolidDialogHeader>\n <SolidDialogSeparator className=\"solid-filter-dialog-sep\" />\n <SolidDialogBody className=\"solid-filter-dialog-body\">\n <div className=\"flex flex-column gap-3\">\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"fullName\" className=\"form-field-label\">User</label>\n <SolidAutocomplete\n id=\"fullName\"\n value={filters.name}\n suggestions={suggestions}\n field=\"fullName\"\n completeMethod={searchUsers}\n onChange={(e) => handleUserChange(e.value)}\n placeholder=\"Filter by user\"\n className=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"dateRange\" className=\"form-field-label\">Date Range</label>\n <div className=\"flex gap-2 flex-column md:flex-row\">\n <div className=\"flex-1\">\n <SolidDatePicker\n selected={filters.startDate ?? undefined}\n onChange={(date: Date | null) => setFilters(prev => ({ ...prev, startDate: date ?? null }))}\n placeholderText=\"Start Date\"\n className=\"w-full\"\n wrapperClassName=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n <div className=\"flex-1\">\n <SolidDatePicker\n selected={filters.endDate ?? undefined}\n onChange={(date: Date | null) => setFilters(prev => ({ ...prev, endDate: date ?? null }))}\n placeholderText=\"End Date\"\n className=\"w-full\"\n wrapperClassName=\"w-full\"\n inputClassName=\"w-full\"\n />\n </div>\n </div>\n </div>\n </div>\n </SolidDialogBody>\n <SolidDialogFooter>\n <SolidButton \n label=\"Clear\" \n size=\"sm\"\n variant=\"outline\"\n onClick={handleClearFilters}\n />\n <SolidButton \n label=\"Apply\" \n size=\"sm\"\n className=\"solid-purple-button\"\n onClick={handleApplyFilters}\n />\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n )\n}\n"]}
@@ -32,10 +32,11 @@ interface Props {
32
32
  onFilterChange?: (filters: FilterState) => void;
33
33
  onComposerCancel?: () => void;
34
34
  title?: string;
35
+ modelUserKey?: string;
35
36
  }
36
37
 
37
38
  export const SolidChatterHeader = (props: Props) => {
38
- const { activeTab, visibleBox, handleTabClick, modelSingularName, refetch, id, onFilterChange, onComposerCancel, title } = props;
39
+ const { activeTab, visibleBox, handleTabClick, modelSingularName, refetch, id, onFilterChange, onComposerCancel, title, modelUserKey } = props;
39
40
  const [showFilterDialog, setShowFilterDialog] = useState(false);
40
41
  const [filters, setFilters] = useState<FilterState>({
41
42
  name: '',
@@ -170,11 +171,11 @@ export const SolidChatterHeader = (props: Props) => {
170
171
  {visibleBox &&
171
172
  <div className='mt-2'>
172
173
  {visibleBox === "email-message" &&
173
- <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} type={"email"} onCancel={onComposerCancel} />
174
+ <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} type={"email"} onCancel={onComposerCancel} modelUserKey={modelUserKey} />
174
175
  }
175
176
 
176
177
  {visibleBox === "log" &&
177
- <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} onCancel={onComposerCancel} />
178
+ <SolidMessageComposer id={id} refetch={refetch} modelSingularName={modelSingularName} onCancel={onComposerCancel} modelUserKey={modelUserKey} />
178
179
  }
179
180
  </div>
180
181
  }
@@ -4,7 +4,8 @@ interface SolidMessageComposerProps {
4
4
  refetch?: any;
5
5
  id?: any;
6
6
  onCancel?: () => void;
7
+ modelUserKey?: string;
7
8
  }
8
- export declare const SolidMessageComposer: ({ type, modelSingularName, refetch, id, onCancel }: SolidMessageComposerProps) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const SolidMessageComposer: ({ type, modelSingularName, refetch, id, onCancel, modelUserKey }: SolidMessageComposerProps) => import("react/jsx-runtime").JSX.Element;
9
10
  export {};
10
11
  //# sourceMappingURL=SolidMessageComposer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidMessageComposer.d.ts","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidMessageComposer.tsx"],"names":[],"mappings":"AAQA,UAAU,yBAAyB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,uDAAwD,yBAAyB,4CA0KjH,CAAA"}
1
+ {"version":3,"file":"SolidMessageComposer.d.ts","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidMessageComposer.tsx"],"names":[],"mappings":"AAQA,UAAU,yBAAyB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,qEAAsE,yBAAyB,4CA2K/H,CAAA"}
@@ -52,7 +52,7 @@ import { useSession } from '../../../hooks/useSession';
52
52
  import { SolidButton, SolidTextarea } from '../../shad-cn-ui';
53
53
  import { FileText, Paperclip, X } from 'lucide-react';
54
54
  export var SolidMessageComposer = function (_a) {
55
- var type = _a.type, modelSingularName = _a.modelSingularName, refetch = _a.refetch, id = _a.id, onCancel = _a.onCancel;
55
+ var type = _a.type, modelSingularName = _a.modelSingularName, refetch = _a.refetch, id = _a.id, onCancel = _a.onCancel, modelUserKey = _a.modelUserKey;
56
56
  var _b = useState(''), message = _b[0], setMessage = _b[1];
57
57
  var _c = useState([]), selectedFiles = _c[0], setSelectedFiles = _c[1];
58
58
  var _d = useSession(), session = _d.data, status = _d.status;
@@ -89,6 +89,8 @@ export var SolidMessageComposer = function (_a) {
89
89
  formData_1.append('coModelEntityId', id);
90
90
  formData_1.append('coModelName', modelSingularName);
91
91
  formData_1.append('userId', (user === null || user === void 0 ? void 0 : user.id) || 1);
92
+ if (modelUserKey)
93
+ formData_1.append('modelUserKey', modelUserKey);
92
94
  selectedFiles.forEach(function (file, index) {
93
95
  formData_1.append("messageAttachments", file);
94
96
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SolidMessageComposer.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidMessageComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import styles from './chatter.module.css'\nimport { useCreateChatterMessageMutation } from '../../../redux/api/solidChatterMessageApi'\nimport { useEffect, useState, useRef } from 'react'\nimport { ERROR_MESSAGES } from '../../../constants/error-messages'\nimport { useSession } from '../../../hooks/useSession'\nimport { SolidButton, SolidTextarea } from '../../shad-cn-ui'\nimport { FileText, Paperclip, X } from 'lucide-react'\n\ninterface SolidMessageComposerProps {\n type?: string;\n modelSingularName?: any;\n refetch?: any;\n id?: any;\n onCancel?: () => void;\n}\n\nexport const SolidMessageComposer = ({ type, modelSingularName, refetch, id, onCancel }: SolidMessageComposerProps) => {\n const [message, setMessage] = useState('');\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const { data: session, status } = useSession();\n const user = session?.user;\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // const { data: viewLayoutData } = useGetSolidViewLayoutQuery(null);\n const [createChatterMessage, { isLoading, isSuccess, isError }] = useCreateChatterMessageMutation();\n\n const tempEmails = [\n \"johndoe@gmal.com\",\n \"tempmail@gmail.com\",\n \"example@mail.com\"\n ]\n\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) {\n const files = Array.from(event.target.files);\n setSelectedFiles(prev => [...prev, ...files]);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!message.trim() && selectedFiles.length === 0) return;\n\n try {\n const formData = new FormData();\n formData.append('messageType', \"custom\");\n formData.append('messageSubType', \"custom\");\n formData.append('messageBody', message);\n formData.append('coModelEntityId', id);\n formData.append('coModelName', modelSingularName);\n formData.append('userId', user?.id || 1);\n\n selectedFiles.forEach((file, index) => {\n formData.append(`messageAttachments`, file);\n });\n\n await createChatterMessage(formData).unwrap();\n setMessage('');\n setSelectedFiles([]);\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_MESSAGE, error);\n }\n };\n\n useEffect(() => {\n if (isSuccess) {\n refetch()\n }\n }, [isSuccess]);\n\n const formatFileSize = (size: number) => {\n if (!size) return \"\";\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n return (\n <form className={styles.chatterMessageComposer} onSubmit={handleSubmit}>\n {/* {type === 'email' &&\n <div className='flex align-items-center gap-1 text-sm mb-2'>\n <span className='font-bold'>To:</span>\n <div className={styles.chatterEmails}>\n {tempEmails.map((mail, index) => (\n <span key={index}>\n {mail}\n </span>\n ))}\n </div>\n <div className={`si si-sort-down-fill text-primary ${styles.emailTooltipIcon}`} style={{ fontSize: 8 }}>\n <div className={styles.emailsTooltip}>\n {tempEmails.map((mail, index) => (\n <span key={index} className='text-color text-sm'>\n {mail}\n </span>\n ))}\n </div>\n </div>\n </div>\n } */}\n <div className={`${styles.solidMessageWrapper} flex flex-column gap-2 w-full`}>\n <div className='flex align-items-center justify-content-between'>\n <p className='form-field-label m-0'>\n {type === 'email' ? 'Email Message' : 'Internal Note'}\n </p>\n </div>\n <SolidTextarea\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder={type === 'email' ? 'Send a message to followers' : 'Log an internal note.'}\n className=\"w-full p-1\"\n rows={4}\n />\n <div className='flex align-items-center justify-content-between flex-wrap gap-2'>\n <div className='flex align-items-center gap-2'>\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n multiple\n style={{ display: 'none' }}\n />\n <SolidButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"solid-icon-button\"\n leftIcon={<Paperclip size={14} />}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n title=\"Attach files\"\n />\n <span className='text-xs text-color-secondary'>Attach file</span>\n </div>\n <div className='flex align-items-center gap-2'>\n <SolidButton\n type='submit'\n size='sm'\n className='gap-2 solid-purple-button'\n variant='primary'\n loading={isLoading}\n >\n {type === 'email' ? 'Send' : 'Log'}\n </SolidButton>\n <SolidButton\n type='button'\n size='sm'\n variant='ghost'\n onClick={() => {\n setMessage('');\n setSelectedFiles([]);\n onCancel?.();\n }}\n >\n Cancel\n </SolidButton>\n </div>\n </div>\n </div>\n {selectedFiles.length > 0 && (\n <div className={styles.chatterSelectedFiles}>\n {selectedFiles.map((file, index) => (\n <div key={index} className={styles.chatterSelectedFileCard}>\n <div className={styles.chatterSelectedFileIcon}>\n <FileText size={16} />\n </div>\n <div className={styles.chatterSelectedFileMeta}>\n <p className={styles.chatterSelectedFileName}>{file.name}</p>\n <span className={styles.chatterSelectedFileSize}>{formatFileSize(file.size)}</span>\n </div>\n <SolidButton\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n leftIcon={<X size={12} />}\n onClick={() => setSelectedFiles(prev => prev.filter((_, i) => i !== index))}\n aria-label={`Remove ${file.name}`}\n />\n </div>\n ))}\n </div>\n )}\n </form>\n )\n}\n"]}
1
+ {"version":3,"file":"SolidMessageComposer.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidMessageComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import styles from './chatter.module.css'\nimport { useCreateChatterMessageMutation } from '../../../redux/api/solidChatterMessageApi'\nimport { useEffect, useState, useRef } from 'react'\nimport { ERROR_MESSAGES } from '../../../constants/error-messages'\nimport { useSession } from '../../../hooks/useSession'\nimport { SolidButton, SolidTextarea } from '../../shad-cn-ui'\nimport { FileText, Paperclip, X } from 'lucide-react'\n\ninterface SolidMessageComposerProps {\n type?: string;\n modelSingularName?: any;\n refetch?: any;\n id?: any;\n onCancel?: () => void;\n modelUserKey?: string;\n}\n\nexport const SolidMessageComposer = ({ type, modelSingularName, refetch, id, onCancel, modelUserKey }: SolidMessageComposerProps) => {\n const [message, setMessage] = useState('');\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n\n const { data: session, status } = useSession();\n const user = session?.user;\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // const { data: viewLayoutData } = useGetSolidViewLayoutQuery(null);\n const [createChatterMessage, { isLoading, isSuccess, isError }] = useCreateChatterMessageMutation();\n\n const tempEmails = [\n \"johndoe@gmal.com\",\n \"tempmail@gmail.com\",\n \"example@mail.com\"\n ]\n\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) {\n const files = Array.from(event.target.files);\n setSelectedFiles(prev => [...prev, ...files]);\n }\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!message.trim() && selectedFiles.length === 0) return;\n\n try {\n const formData = new FormData();\n formData.append('messageType', \"custom\");\n formData.append('messageSubType', \"custom\");\n formData.append('messageBody', message);\n formData.append('coModelEntityId', id);\n formData.append('coModelName', modelSingularName);\n formData.append('userId', user?.id || 1);\n\n if (modelUserKey) formData.append('modelUserKey', modelUserKey);\n selectedFiles.forEach((file, index) => {\n formData.append(`messageAttachments`, file);\n });\n\n await createChatterMessage(formData).unwrap();\n setMessage('');\n setSelectedFiles([]);\n } catch (error) {\n console.error(ERROR_MESSAGES.FETCHING_MESSAGE, error);\n }\n };\n\n useEffect(() => {\n if (isSuccess) {\n refetch()\n }\n }, [isSuccess]);\n\n const formatFileSize = (size: number) => {\n if (!size) return \"\";\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n return (\n <form className={styles.chatterMessageComposer} onSubmit={handleSubmit}>\n {/* {type === 'email' &&\n <div className='flex align-items-center gap-1 text-sm mb-2'>\n <span className='font-bold'>To:</span>\n <div className={styles.chatterEmails}>\n {tempEmails.map((mail, index) => (\n <span key={index}>\n {mail}\n </span>\n ))}\n </div>\n <div className={`si si-sort-down-fill text-primary ${styles.emailTooltipIcon}`} style={{ fontSize: 8 }}>\n <div className={styles.emailsTooltip}>\n {tempEmails.map((mail, index) => (\n <span key={index} className='text-color text-sm'>\n {mail}\n </span>\n ))}\n </div>\n </div>\n </div>\n } */}\n <div className={`${styles.solidMessageWrapper} flex flex-column gap-2 w-full`}>\n <div className='flex align-items-center justify-content-between'>\n <p className='form-field-label m-0'>\n {type === 'email' ? 'Email Message' : 'Internal Note'}\n </p>\n </div>\n <SolidTextarea\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder={type === 'email' ? 'Send a message to followers' : 'Log an internal note.'}\n className=\"w-full p-1\"\n rows={4}\n />\n <div className='flex align-items-center justify-content-between flex-wrap gap-2'>\n <div className='flex align-items-center gap-2'>\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n multiple\n style={{ display: 'none' }}\n />\n <SolidButton\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"solid-icon-button\"\n leftIcon={<Paperclip size={14} />}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n title=\"Attach files\"\n />\n <span className='text-xs text-color-secondary'>Attach file</span>\n </div>\n <div className='flex align-items-center gap-2'>\n <SolidButton\n type='submit'\n size='sm'\n className='gap-2 solid-purple-button'\n variant='primary'\n loading={isLoading}\n >\n {type === 'email' ? 'Send' : 'Log'}\n </SolidButton>\n <SolidButton\n type='button'\n size='sm'\n variant='ghost'\n onClick={() => {\n setMessage('');\n setSelectedFiles([]);\n onCancel?.();\n }}\n >\n Cancel\n </SolidButton>\n </div>\n </div>\n </div>\n {selectedFiles.length > 0 && (\n <div className={styles.chatterSelectedFiles}>\n {selectedFiles.map((file, index) => (\n <div key={index} className={styles.chatterSelectedFileCard}>\n <div className={styles.chatterSelectedFileIcon}>\n <FileText size={16} />\n </div>\n <div className={styles.chatterSelectedFileMeta}>\n <p className={styles.chatterSelectedFileName}>{file.name}</p>\n <span className={styles.chatterSelectedFileSize}>{formatFileSize(file.size)}</span>\n </div>\n <SolidButton\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n leftIcon={<X size={12} />}\n onClick={() => setSelectedFiles(prev => prev.filter((_, i) => i !== index))}\n aria-label={`Remove ${file.name}`}\n />\n </div>\n ))}\n </div>\n )}\n </form>\n )\n}\n"]}
@@ -12,9 +12,10 @@ interface SolidMessageComposerProps {
12
12
  refetch?: any;
13
13
  id?: any;
14
14
  onCancel?: () => void;
15
+ modelUserKey?: string;
15
16
  }
16
17
 
17
- export const SolidMessageComposer = ({ type, modelSingularName, refetch, id, onCancel }: SolidMessageComposerProps) => {
18
+ export const SolidMessageComposer = ({ type, modelSingularName, refetch, id, onCancel, modelUserKey }: SolidMessageComposerProps) => {
18
19
  const [message, setMessage] = useState('');
19
20
  const [selectedFiles, setSelectedFiles] = useState<File[]>([]);
20
21
 
@@ -51,6 +52,7 @@ export const SolidMessageComposer = ({ type, modelSingularName, refetch, id, onC
51
52
  formData.append('coModelName', modelSingularName);
52
53
  formData.append('userId', user?.id || 1);
53
54
 
55
+ if (modelUserKey) formData.append('modelUserKey', modelUserKey);
54
56
  selectedFiles.forEach((file, index) => {
55
57
  formData.append(`messageAttachments`, file);
56
58
  });
@@ -9,6 +9,7 @@ import { LayoutAttribute, LayoutNode } from "../../../types/solid-core";
9
9
  export declare class SolidViewLayoutManager {
10
10
  /** Internal mutable layout copy */
11
11
  private layout;
12
+ private clone;
12
13
  /**
13
14
  * Creates a new layout manager instance.
14
15
  * A deep copy of the provided layout is created to avoid side effects.
@@ -34,6 +35,7 @@ export declare class SolidViewLayoutManager {
34
35
  * @returns true if the node was removed
35
36
  */
36
37
  private removeNodeRecursive;
38
+ private insertNodeBeforeRecursive;
37
39
  /**
38
40
  * Returns the managed layout instance.
39
41
  *
@@ -49,6 +51,21 @@ export declare class SolidViewLayoutManager {
49
51
  * @returns true if node was found and updated
50
52
  */
51
53
  updateNodeAttributes(name: string, newAttributes: Partial<LayoutAttribute>): boolean;
54
+ /**
55
+ * Checks whether a node exists by name.
56
+ *
57
+ * @param name - Node name
58
+ * @returns true if found
59
+ */
60
+ hasNode(name: string): boolean;
61
+ /**
62
+ * Inserts a node before the first matching target node.
63
+ *
64
+ * @param targetName - Target node name
65
+ * @param newNode - Node to insert
66
+ * @returns true if insertion was successful
67
+ */
68
+ insertNodeBefore(targetName: string, newNode: LayoutNode): boolean;
52
69
  /**
53
70
  * Adds a child node to a parent node.
54
71
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SolidViewLayoutManager.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidViewLayoutManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;;GAMG;AACH,qBAAa,sBAAsB;IAC/B,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;;OAKG;gBACS,MAAM,EAAE,UAAU;IAK9B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,SAAS;IAkBjB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;QAII;IACJ,SAAS,IAAI,UAAU;IAKvB;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IASpF;;;;;;;OAOG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,GAAE,OAAe,GAAG,OAAO;IA2BjG;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,EAAE,IAAI,GAAE,UAAwB;IAS7E;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAoB3D;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAiB3D;;;;;;OAMG;IACH,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAkB9D;;;;;OAKG;IACH,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,GAAG,OAAO;IAiB9D;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKvC;;;;;;OAMG;IACH,wBAAwB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO;IAWV;;;;;OAKG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYjD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK1C;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKvC;;;;;;OAMG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;IASnE;;;;;;;OAOG;IACH,uBAAuB,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO;IAeV;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CActE"}
1
+ {"version":3,"file":"SolidViewLayoutManager.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidViewLayoutManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;;GAMG;AACH,qBAAa,sBAAsB;IAC/B,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,KAAK;IAMb;;;;;OAKG;gBACS,MAAM,EAAE,UAAU;IAK9B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,SAAS;IAkBjB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,yBAAyB;IAejC;;;;QAII;IACJ,SAAS,IAAI,UAAU;IAKvB;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IASpF;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO;IAIlE;;;;;;;OAOG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,GAAE,OAAe,GAAG,OAAO;IA2BjG;;;;;;OAMG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,EAAE,IAAI,GAAE,UAAwB;IAS7E;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAoB3D;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAiB3D;;;;;;OAMG;IACH,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO;IAkB9D;;;;;OAKG;IACH,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,eAAe,CAAC,EAAE,GAAG,OAAO;IAiB9D;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKvC;;;;;;OAMG;IACH,wBAAwB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO;IAWV;;;;;OAKG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYjD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK1C;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKvC;;;;;;OAMG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;IASnE;;;;;;;OAOG;IACH,uBAAuB,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO;IAeV;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CActE"}
@@ -33,8 +33,18 @@ var SolidViewLayoutManager = /** @class */ (function () {
33
33
  value: void 0
34
34
  });
35
35
  // Create a deep copy to prevent modifying the original object
36
- this.layout = structuredClone ? structuredClone(layout) : JSON.parse(JSON.stringify(layout));
36
+ this.layout = this.clone(layout);
37
37
  }
38
+ Object.defineProperty(SolidViewLayoutManager.prototype, "clone", {
39
+ enumerable: false,
40
+ configurable: true,
41
+ writable: true,
42
+ value: function (value) {
43
+ return typeof structuredClone === "function"
44
+ ? structuredClone(value)
45
+ : JSON.parse(JSON.stringify(value));
46
+ }
47
+ });
38
48
  /**
39
49
  * Recursively finds a layout node by its `attrs.name`.
40
50
  * Searches children and formButtons.
@@ -120,6 +130,24 @@ var SolidViewLayoutManager = /** @class */ (function () {
120
130
  return parent.children.some(function (child) { return _this.removeNodeRecursive(child, name); });
121
131
  }
122
132
  });
133
+ Object.defineProperty(SolidViewLayoutManager.prototype, "insertNodeBeforeRecursive", {
134
+ enumerable: false,
135
+ configurable: true,
136
+ writable: true,
137
+ value: function (parent, targetName, newNode) {
138
+ var _this = this;
139
+ if (!parent.children || parent.children.length === 0)
140
+ return false;
141
+ var targetIndex = parent.children.findIndex(function (child) { return child.attrs.name === targetName; });
142
+ if (targetIndex !== -1) {
143
+ parent.children.splice(targetIndex, 0, this.clone(newNode));
144
+ return true;
145
+ }
146
+ return parent.children.some(function (child) {
147
+ return _this.insertNodeBeforeRecursive(child, targetName, newNode);
148
+ });
149
+ }
150
+ });
123
151
  /**
124
152
  * Returns the managed layout instance.
125
153
  *
@@ -155,6 +183,35 @@ var SolidViewLayoutManager = /** @class */ (function () {
155
183
  return false;
156
184
  }
157
185
  });
186
+ /**
187
+ * Checks whether a node exists by name.
188
+ *
189
+ * @param name - Node name
190
+ * @returns true if found
191
+ */
192
+ Object.defineProperty(SolidViewLayoutManager.prototype, "hasNode", {
193
+ enumerable: false,
194
+ configurable: true,
195
+ writable: true,
196
+ value: function (name) {
197
+ return !!this.findNode(this.layout, name);
198
+ }
199
+ });
200
+ /**
201
+ * Inserts a node before the first matching target node.
202
+ *
203
+ * @param targetName - Target node name
204
+ * @param newNode - Node to insert
205
+ * @returns true if insertion was successful
206
+ */
207
+ Object.defineProperty(SolidViewLayoutManager.prototype, "insertNodeBefore", {
208
+ enumerable: false,
209
+ configurable: true,
210
+ writable: true,
211
+ value: function (targetName, newNode) {
212
+ return this.insertNodeBeforeRecursive(this.layout, targetName, newNode);
213
+ }
214
+ });
158
215
  /**
159
216
  * Adds a child node to a parent node.
160
217
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SolidViewLayoutManager.js","sourceRoot":"","sources":["../../../../src/components/core/common/SolidViewLayoutManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { LayoutAttribute, LayoutNode } from \"../../../types/solid-core\";\n\n/**\n * SolidViewLayoutManager\n *\n * Central manager for mutating Solid View layout trees.\n * Provides low-level tree operations and domain-specific helpers\n * for view attributes, form buttons, and row buttons.\n */\nexport class SolidViewLayoutManager {\n /** Internal mutable layout copy */\n private layout: LayoutNode;\n\n /**\n * Creates a new layout manager instance.\n * A deep copy of the provided layout is created to avoid side effects.\n *\n * @param layout - Original layout definition\n */\n constructor(layout: LayoutNode) {\n // Create a deep copy to prevent modifying the original object\n this.layout = structuredClone ? structuredClone(layout) : JSON.parse(JSON.stringify(layout));\n }\n\n /**\n * Recursively finds a layout node by its `attrs.name`.\n * Searches children and formButtons.\n *\n * @param node - Node to start searching from\n * @param name - Name of the node to find\n * @returns The matching LayoutNode or null\n */\n private findNode(node: LayoutNode, name: string): LayoutNode | null {\n if (node.attrs.name === name) {\n return node;\n }\n\n if (node.children) {\n for (let child of node.children) {\n const found = this.findNode(child, name);\n if (found) return found;\n }\n }\n\n // search in formButtons\n if (node.attrs?.formButtons) {\n for (const btn of node.attrs.formButtons) {\n const found = this.findNode(btn, name);\n if (found) return found;\n }\n }\n\n return null;\n }\n\n private findNodes(node: LayoutNode, name: string): LayoutNode[] {\n const nodes: LayoutNode[] = [];\n if (node.attrs.name === name) {\n nodes.push(node);\n }\n if (node.children) {\n for (let child of node.children) {\n nodes.push(...this.findNodes(child, name));\n }\n }\n if (node.attrs?.formButtons) {\n for (const btn of node.attrs.formButtons) {\n nodes.push(...this.findNodes(btn, name));\n }\n }\n return nodes;\n }\n\n /**\n * Recursively removes a node from the layout tree.\n *\n * @param parent - Parent node to search within\n * @param name - Name of the node to remove\n * @returns true if the node was removed\n */\n private removeNodeRecursive(parent: LayoutNode, name: string): boolean {\n if (!parent.children) return false;\n\n const index = parent.children.findIndex((child) => child.attrs.name === name);\n if (index !== -1) {\n parent.children.splice(index, 1); // Remove the node\n return true;\n }\n\n return parent.children.some((child) => this.removeNodeRecursive(child, name));\n }\n\n\n /**\n * Returns the managed layout instance.\n *\n * @returns Current layout tree\n */\n getLayout(): LayoutNode {\n // return structuredClone ? structuredClone(this.layout) : JSON.parse(JSON.stringify(this.layout));\n return this.layout;\n }\n\n /**\n * Updates attributes of a specific node.\n * This method adds or overrides attributes.\n *\n * @param name - Node name\n * @param newAttributes - Attributes to merge\n * @returns true if node was found and updated\n */\n updateNodeAttributes(name: string, newAttributes: Partial<LayoutAttribute>): boolean {\n const node = this.findNode(this.layout, name);\n if (node) {\n node.attrs = { ...node.attrs, ...newAttributes };\n return true;\n }\n return false;\n }\n\n /**\n * Adds a child node to a parent node.\n *\n * @param parentName - Name of the parent node\n * @param newNode - Child layout node to add\n * @param addChildrenToAll - If true, adds the child node to all nodes with the given parent name\n * @returns true if parent exists and child was added\n */\n addChildNode(parentName: string, newNode: LayoutNode, addChildrenToAll: boolean = false): boolean {\n console.log(`timepass....`);\n \n if (addChildrenToAll) {\n const parentNodes = this.findNodes(this.layout, parentName);\n parentNodes.forEach((node) => {\n if (!node.children) {\n node.children = [];\n }\n node.children.push(newNode);\n });\n return true;\n }\n else {\n const parentNode = this.findNode(this.layout, parentName);\n if (parentNode) {\n if (!parentNode.children) {\n parentNode.children = [];\n }\n parentNode.children.push(newNode);\n return true;\n }\n return false;\n }\n }\n\n\n /**\n * Removes a node and its subtree.\n * Root node removal is prevented.\n *\n * @param name - Name of the node to remove\n * @returns true if node was removed\n */\n removeNode(name: string): boolean {\n if (this.layout.attrs.name === name) {\n console.warn(ERROR_MESSAGES.REMOVE_ROOT_NODE);\n return false;\n }\n\n return this.removeNodeRecursive(this.layout, name);\n }\n\n /**\n * Traverses the entire layout tree and executes a callback for each node.\n *\n * @param callback - Function executed for each node\n * @param node - Starting node (defaults to root)\n */\n traverse(callback: (node: LayoutNode) => void, node: LayoutNode = this.layout) {\n callback(node);\n if (node.children) {\n node.children.forEach((child) => this.traverse(callback, child));\n }\n }\n\n\n\n /**\n * Adds or updates view-level attributes.\n * Existing attributes are updated, missing attributes are added.\n *\n * @param attrs - Attributes to set on the view\n * @returns true if at least one attribute was applied\n */\n setViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let changed = false;\n\n for (const key of Object.keys(attrs) as (keyof LayoutAttribute)[]) {\n const newValue = attrs[key];\n\n if (viewNode.attrs[key] !== newValue) {\n viewNode.attrs[key] = newValue;\n changed = true;\n }\n }\n\n return changed;\n }\n\n\n\n /**\n * Adds view-level attributes only if they do not already exist.\n *\n * @param attrs - Attributes to add\n * @returns true if at least one attribute was added\n */\n addViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let added = false;\n\n for (const key in attrs) {\n if (!(key in viewNode.attrs)) {\n // @ts-ignore – layout attributes are dynamic\n viewNode.attrs[key] = attrs[key];\n added = true;\n }\n }\n\n return added;\n }\n\n /**\n * Updates existing view-level attributes.\n * Attributes that do not exist are ignored.\n *\n * @param attrs - Attributes to update\n * @returns true if at least one attribute was updated\n */\n updateViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let updated = false;\n\n for (const key in attrs) {\n if (key in viewNode.attrs) {\n // @ts-ignore\n viewNode.attrs[key] = attrs[key];\n updated = true;\n }\n }\n\n return updated;\n }\n\n\n /**\n * Removes specific view-level attributes.\n *\n * @param keys - Attribute keys to remove\n * @returns true if at least one attribute was removed\n */\n removeViewAttributes(keys: (keyof LayoutAttribute)[]): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let removed = false;\n\n for (const key of keys) {\n if (key in viewNode.attrs) {\n // @ts-ignore\n delete viewNode.attrs[key];\n removed = true;\n }\n }\n\n return removed;\n }\n\n /**\n * Adds a new form-level button.\n *\n * @param button - Button layout node\n */\n addFormButton(button: LayoutNode): void {\n this.layout.attrs.formButtons ??= [];\n this.layout.attrs.formButtons.push(button);\n }\n\n /**\n * Updates a form button identified by its action.\n *\n * @param action - Button action identifier\n * @param attrs - Attributes to update\n * @returns true if button was found and updated\n */\n updateFormButtonByAction(\n action: string,\n attrs: Partial<LayoutAttribute>\n ): boolean {\n const button = this.layout.attrs.formButtons?.find(\n (b: any) => b.attrs.action === action\n );\n\n if (!button) return false;\n\n button.attrs = { ...button.attrs, ...attrs };\n return true;\n }\n\n /**\n * Removes a form button by its action.\n *\n * @param action - Button action identifier\n * @returns true if button was removed\n */\n removeFormButtonByAction(action: string): boolean {\n if (!this.layout.attrs.formButtons) return false;\n\n const initialLength = this.layout.attrs.formButtons.length;\n\n this.layout.attrs.formButtons = this.layout.attrs.formButtons.filter(\n (b: any) => b.attrs.action !== action\n );\n\n return this.layout.attrs.formButtons.length !== initialLength;\n }\n\n /**\n * Disables a form-level button.\n *\n * @param action - Button action identifier\n * @returns true if button was disabled\n */\n disableFormButton(action: string): boolean {\n return this.updateFormButtonByAction(action, { disabled: true });\n }\n\n\n /**\n * Hides a form-level button.\n *\n * @param action - Button action identifier\n * @returns true if button was hidden\n */\n hideFormButton(action: string): boolean {\n return this.updateFormButtonByAction(action, { visible: false });\n }\n\n\n /**\n * Adds a row-level button to a field.\n *\n * @param fieldName - Target field name\n * @param button - Button definition\n * @returns true if field exists and button was added\n */\n addRowButtonToField(fieldName: string, button: LayoutNode): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode) return false;\n\n fieldNode.attrs.rowButtons ??= [];\n fieldNode.attrs.rowButtons.push(button);\n return true;\n }\n\n /**\n * Updates a row-level button for a field.\n *\n * @param fieldName - Field name\n * @param action - Button action identifier\n * @param attrs - Attributes to update\n * @returns true if button was updated\n */\n updateRowButtonByAction(\n fieldName: string,\n action: string,\n attrs: Partial<LayoutAttribute>\n ): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode?.attrs?.rowButtons) return false;\n\n const button = fieldNode.attrs.rowButtons.find(\n (b: any) => b.action === action\n );\n\n if (!button) return false;\n\n Object.assign(button, attrs);\n return true;\n }\n\n\n /**\n * Removes a row-level button from a field.\n *\n * @param fieldName - Field name\n * @param action - Button action identifier\n * @returns true if button was removed\n */\n removeRowButtonByAction(fieldName: string, action: string): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode?.attrs?.rowButtons) return false;\n\n const initialLength = fieldNode.attrs.rowButtons.length;\n\n fieldNode.attrs.rowButtons = fieldNode.attrs.rowButtons.filter(\n (b: any) => b.action !== action\n );\n\n return fieldNode.attrs.rowButtons.length !== initialLength;\n }\n\n\n}"]}
1
+ {"version":3,"file":"SolidViewLayoutManager.js","sourceRoot":"","sources":["../../../../src/components/core/common/SolidViewLayoutManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { LayoutAttribute, LayoutNode } from \"../../../types/solid-core\";\n\n/**\n * SolidViewLayoutManager\n *\n * Central manager for mutating Solid View layout trees.\n * Provides low-level tree operations and domain-specific helpers\n * for view attributes, form buttons, and row buttons.\n */\nexport class SolidViewLayoutManager {\n /** Internal mutable layout copy */\n private layout: LayoutNode;\n\n private clone<T>(value: T): T {\n return typeof structuredClone === \"function\"\n ? structuredClone(value)\n : JSON.parse(JSON.stringify(value));\n }\n\n /**\n * Creates a new layout manager instance.\n * A deep copy of the provided layout is created to avoid side effects.\n *\n * @param layout - Original layout definition\n */\n constructor(layout: LayoutNode) {\n // Create a deep copy to prevent modifying the original object\n this.layout = this.clone(layout);\n }\n\n /**\n * Recursively finds a layout node by its `attrs.name`.\n * Searches children and formButtons.\n *\n * @param node - Node to start searching from\n * @param name - Name of the node to find\n * @returns The matching LayoutNode or null\n */\n private findNode(node: LayoutNode, name: string): LayoutNode | null {\n if (node.attrs.name === name) {\n return node;\n }\n\n if (node.children) {\n for (let child of node.children) {\n const found = this.findNode(child, name);\n if (found) return found;\n }\n }\n\n // search in formButtons\n if (node.attrs?.formButtons) {\n for (const btn of node.attrs.formButtons) {\n const found = this.findNode(btn, name);\n if (found) return found;\n }\n }\n\n return null;\n }\n\n private findNodes(node: LayoutNode, name: string): LayoutNode[] {\n const nodes: LayoutNode[] = [];\n if (node.attrs.name === name) {\n nodes.push(node);\n }\n if (node.children) {\n for (let child of node.children) {\n nodes.push(...this.findNodes(child, name));\n }\n }\n if (node.attrs?.formButtons) {\n for (const btn of node.attrs.formButtons) {\n nodes.push(...this.findNodes(btn, name));\n }\n }\n return nodes;\n }\n\n /**\n * Recursively removes a node from the layout tree.\n *\n * @param parent - Parent node to search within\n * @param name - Name of the node to remove\n * @returns true if the node was removed\n */\n private removeNodeRecursive(parent: LayoutNode, name: string): boolean {\n if (!parent.children) return false;\n\n const index = parent.children.findIndex((child) => child.attrs.name === name);\n if (index !== -1) {\n parent.children.splice(index, 1); // Remove the node\n return true;\n }\n\n return parent.children.some((child) => this.removeNodeRecursive(child, name));\n }\n\n private insertNodeBeforeRecursive(parent: LayoutNode, targetName: string, newNode: LayoutNode): boolean {\n if (!parent.children || parent.children.length === 0) return false;\n\n const targetIndex = parent.children.findIndex((child) => child.attrs.name === targetName);\n if (targetIndex !== -1) {\n parent.children.splice(targetIndex, 0, this.clone(newNode));\n return true;\n }\n\n return parent.children.some((child) =>\n this.insertNodeBeforeRecursive(child, targetName, newNode)\n );\n }\n\n\n /**\n * Returns the managed layout instance.\n *\n * @returns Current layout tree\n */\n getLayout(): LayoutNode {\n // return structuredClone ? structuredClone(this.layout) : JSON.parse(JSON.stringify(this.layout));\n return this.layout;\n }\n\n /**\n * Updates attributes of a specific node.\n * This method adds or overrides attributes.\n *\n * @param name - Node name\n * @param newAttributes - Attributes to merge\n * @returns true if node was found and updated\n */\n updateNodeAttributes(name: string, newAttributes: Partial<LayoutAttribute>): boolean {\n const node = this.findNode(this.layout, name);\n if (node) {\n node.attrs = { ...node.attrs, ...newAttributes };\n return true;\n }\n return false;\n }\n\n /**\n * Checks whether a node exists by name.\n *\n * @param name - Node name\n * @returns true if found\n */\n hasNode(name: string): boolean {\n return !!this.findNode(this.layout, name);\n }\n\n /**\n * Inserts a node before the first matching target node.\n *\n * @param targetName - Target node name\n * @param newNode - Node to insert\n * @returns true if insertion was successful\n */\n insertNodeBefore(targetName: string, newNode: LayoutNode): boolean {\n return this.insertNodeBeforeRecursive(this.layout, targetName, newNode);\n }\n\n /**\n * Adds a child node to a parent node.\n *\n * @param parentName - Name of the parent node\n * @param newNode - Child layout node to add\n * @param addChildrenToAll - If true, adds the child node to all nodes with the given parent name\n * @returns true if parent exists and child was added\n */\n addChildNode(parentName: string, newNode: LayoutNode, addChildrenToAll: boolean = false): boolean {\n console.log(`timepass....`);\n \n if (addChildrenToAll) {\n const parentNodes = this.findNodes(this.layout, parentName);\n parentNodes.forEach((node) => {\n if (!node.children) {\n node.children = [];\n }\n node.children.push(newNode);\n });\n return true;\n }\n else {\n const parentNode = this.findNode(this.layout, parentName);\n if (parentNode) {\n if (!parentNode.children) {\n parentNode.children = [];\n }\n parentNode.children.push(newNode);\n return true;\n }\n return false;\n }\n }\n\n\n /**\n * Removes a node and its subtree.\n * Root node removal is prevented.\n *\n * @param name - Name of the node to remove\n * @returns true if node was removed\n */\n removeNode(name: string): boolean {\n if (this.layout.attrs.name === name) {\n console.warn(ERROR_MESSAGES.REMOVE_ROOT_NODE);\n return false;\n }\n\n return this.removeNodeRecursive(this.layout, name);\n }\n\n /**\n * Traverses the entire layout tree and executes a callback for each node.\n *\n * @param callback - Function executed for each node\n * @param node - Starting node (defaults to root)\n */\n traverse(callback: (node: LayoutNode) => void, node: LayoutNode = this.layout) {\n callback(node);\n if (node.children) {\n node.children.forEach((child) => this.traverse(callback, child));\n }\n }\n\n\n\n /**\n * Adds or updates view-level attributes.\n * Existing attributes are updated, missing attributes are added.\n *\n * @param attrs - Attributes to set on the view\n * @returns true if at least one attribute was applied\n */\n setViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let changed = false;\n\n for (const key of Object.keys(attrs) as (keyof LayoutAttribute)[]) {\n const newValue = attrs[key];\n\n if (viewNode.attrs[key] !== newValue) {\n viewNode.attrs[key] = newValue;\n changed = true;\n }\n }\n\n return changed;\n }\n\n\n\n /**\n * Adds view-level attributes only if they do not already exist.\n *\n * @param attrs - Attributes to add\n * @returns true if at least one attribute was added\n */\n addViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let added = false;\n\n for (const key in attrs) {\n if (!(key in viewNode.attrs)) {\n // @ts-ignore – layout attributes are dynamic\n viewNode.attrs[key] = attrs[key];\n added = true;\n }\n }\n\n return added;\n }\n\n /**\n * Updates existing view-level attributes.\n * Attributes that do not exist are ignored.\n *\n * @param attrs - Attributes to update\n * @returns true if at least one attribute was updated\n */\n updateViewAttributes(attrs: Partial<LayoutAttribute>): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let updated = false;\n\n for (const key in attrs) {\n if (key in viewNode.attrs) {\n // @ts-ignore\n viewNode.attrs[key] = attrs[key];\n updated = true;\n }\n }\n\n return updated;\n }\n\n\n /**\n * Removes specific view-level attributes.\n *\n * @param keys - Attribute keys to remove\n * @returns true if at least one attribute was removed\n */\n removeViewAttributes(keys: (keyof LayoutAttribute)[]): boolean {\n const viewNode = this.findNode(this.layout, this.layout.attrs.name);\n if (!viewNode) return false;\n\n let removed = false;\n\n for (const key of keys) {\n if (key in viewNode.attrs) {\n // @ts-ignore\n delete viewNode.attrs[key];\n removed = true;\n }\n }\n\n return removed;\n }\n\n /**\n * Adds a new form-level button.\n *\n * @param button - Button layout node\n */\n addFormButton(button: LayoutNode): void {\n this.layout.attrs.formButtons ??= [];\n this.layout.attrs.formButtons.push(button);\n }\n\n /**\n * Updates a form button identified by its action.\n *\n * @param action - Button action identifier\n * @param attrs - Attributes to update\n * @returns true if button was found and updated\n */\n updateFormButtonByAction(\n action: string,\n attrs: Partial<LayoutAttribute>\n ): boolean {\n const button = this.layout.attrs.formButtons?.find(\n (b: any) => b.attrs.action === action\n );\n\n if (!button) return false;\n\n button.attrs = { ...button.attrs, ...attrs };\n return true;\n }\n\n /**\n * Removes a form button by its action.\n *\n * @param action - Button action identifier\n * @returns true if button was removed\n */\n removeFormButtonByAction(action: string): boolean {\n if (!this.layout.attrs.formButtons) return false;\n\n const initialLength = this.layout.attrs.formButtons.length;\n\n this.layout.attrs.formButtons = this.layout.attrs.formButtons.filter(\n (b: any) => b.attrs.action !== action\n );\n\n return this.layout.attrs.formButtons.length !== initialLength;\n }\n\n /**\n * Disables a form-level button.\n *\n * @param action - Button action identifier\n * @returns true if button was disabled\n */\n disableFormButton(action: string): boolean {\n return this.updateFormButtonByAction(action, { disabled: true });\n }\n\n\n /**\n * Hides a form-level button.\n *\n * @param action - Button action identifier\n * @returns true if button was hidden\n */\n hideFormButton(action: string): boolean {\n return this.updateFormButtonByAction(action, { visible: false });\n }\n\n\n /**\n * Adds a row-level button to a field.\n *\n * @param fieldName - Target field name\n * @param button - Button definition\n * @returns true if field exists and button was added\n */\n addRowButtonToField(fieldName: string, button: LayoutNode): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode) return false;\n\n fieldNode.attrs.rowButtons ??= [];\n fieldNode.attrs.rowButtons.push(button);\n return true;\n }\n\n /**\n * Updates a row-level button for a field.\n *\n * @param fieldName - Field name\n * @param action - Button action identifier\n * @param attrs - Attributes to update\n * @returns true if button was updated\n */\n updateRowButtonByAction(\n fieldName: string,\n action: string,\n attrs: Partial<LayoutAttribute>\n ): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode?.attrs?.rowButtons) return false;\n\n const button = fieldNode.attrs.rowButtons.find(\n (b: any) => b.action === action\n );\n\n if (!button) return false;\n\n Object.assign(button, attrs);\n return true;\n }\n\n\n /**\n * Removes a row-level button from a field.\n *\n * @param fieldName - Field name\n * @param action - Button action identifier\n * @returns true if button was removed\n */\n removeRowButtonByAction(fieldName: string, action: string): boolean {\n const fieldNode = this.findNode(this.layout, fieldName);\n if (!fieldNode?.attrs?.rowButtons) return false;\n\n const initialLength = fieldNode.attrs.rowButtons.length;\n\n fieldNode.attrs.rowButtons = fieldNode.attrs.rowButtons.filter(\n (b: any) => b.action !== action\n );\n\n return fieldNode.attrs.rowButtons.length !== initialLength;\n }\n\n\n}\n"]}
@@ -12,6 +12,12 @@ export class SolidViewLayoutManager {
12
12
  /** Internal mutable layout copy */
13
13
  private layout: LayoutNode;
14
14
 
15
+ private clone<T>(value: T): T {
16
+ return typeof structuredClone === "function"
17
+ ? structuredClone(value)
18
+ : JSON.parse(JSON.stringify(value));
19
+ }
20
+
15
21
  /**
16
22
  * Creates a new layout manager instance.
17
23
  * A deep copy of the provided layout is created to avoid side effects.
@@ -20,7 +26,7 @@ export class SolidViewLayoutManager {
20
26
  */
21
27
  constructor(layout: LayoutNode) {
22
28
  // Create a deep copy to prevent modifying the original object
23
- this.layout = structuredClone ? structuredClone(layout) : JSON.parse(JSON.stringify(layout));
29
+ this.layout = this.clone(layout);
24
30
  }
25
31
 
26
32
  /**
@@ -91,6 +97,20 @@ export class SolidViewLayoutManager {
91
97
  return parent.children.some((child) => this.removeNodeRecursive(child, name));
92
98
  }
93
99
 
100
+ private insertNodeBeforeRecursive(parent: LayoutNode, targetName: string, newNode: LayoutNode): boolean {
101
+ if (!parent.children || parent.children.length === 0) return false;
102
+
103
+ const targetIndex = parent.children.findIndex((child) => child.attrs.name === targetName);
104
+ if (targetIndex !== -1) {
105
+ parent.children.splice(targetIndex, 0, this.clone(newNode));
106
+ return true;
107
+ }
108
+
109
+ return parent.children.some((child) =>
110
+ this.insertNodeBeforeRecursive(child, targetName, newNode)
111
+ );
112
+ }
113
+
94
114
 
95
115
  /**
96
116
  * Returns the managed layout instance.
@@ -119,6 +139,27 @@ export class SolidViewLayoutManager {
119
139
  return false;
120
140
  }
121
141
 
142
+ /**
143
+ * Checks whether a node exists by name.
144
+ *
145
+ * @param name - Node name
146
+ * @returns true if found
147
+ */
148
+ hasNode(name: string): boolean {
149
+ return !!this.findNode(this.layout, name);
150
+ }
151
+
152
+ /**
153
+ * Inserts a node before the first matching target node.
154
+ *
155
+ * @param targetName - Target node name
156
+ * @param newNode - Node to insert
157
+ * @returns true if insertion was successful
158
+ */
159
+ insertNodeBefore(targetName: string, newNode: LayoutNode): boolean {
160
+ return this.insertNodeBeforeRecursive(this.layout, targetName, newNode);
161
+ }
162
+
122
163
  /**
123
164
  * Adds a child node to a parent node.
124
165
  *
@@ -418,4 +459,4 @@ export class SolidViewLayoutManager {
418
459
  }
419
460
 
420
461
 
421
- }
462
+ }
@@ -0,0 +1,3 @@
1
+ import { SolidFormFieldWidgetProps } from "../../../../../../types/solid-core";
2
+ export declare const SolidChatterMessageCoModelEntityIdFormViewWidget: ({ formik, fieldContext }: SolidFormFieldWidgetProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidChatterMessageCoModelEntityIdFormViewWidget.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAK/E,eAAO,MAAM,gDAAgD,6BAA8B,yBAAyB,4CA6DnH,CAAC"}