@open-mercato/core 0.6.3-develop.3901.1.ddad60693a → 0.6.3

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 (98) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/global.d.js +1 -0
  3. package/dist/global.d.js.map +7 -0
  4. package/dist/modules/catalog/commands/variants.js +11 -5
  5. package/dist/modules/catalog/commands/variants.js.map +2 -2
  6. package/dist/modules/customers/backend/customers/deals/create/page.js +3 -61
  7. package/dist/modules/customers/backend/customers/deals/create/page.js.map +2 -2
  8. package/dist/modules/customers/components/detail/DealForm.js +2 -0
  9. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  10. package/dist/modules/customers/components/detail/create/CreateDealForm.js +233 -0
  11. package/dist/modules/customers/components/detail/create/CreateDealForm.js.map +7 -0
  12. package/dist/modules/customers/components/detail/create/DealAssociationsField.js +209 -0
  13. package/dist/modules/customers/components/detail/create/DealAssociationsField.js.map +7 -0
  14. package/dist/modules/customers/components/detail/create/DealAssociationsSection.js +67 -0
  15. package/dist/modules/customers/components/detail/create/DealAssociationsSection.js.map +7 -0
  16. package/dist/modules/customers/components/detail/create/DealCreateSidebar.js +73 -0
  17. package/dist/modules/customers/components/detail/create/DealCreateSidebar.js.map +7 -0
  18. package/dist/modules/customers/components/detail/create/DealCurrencyField.js +92 -0
  19. package/dist/modules/customers/components/detail/create/DealCurrencyField.js.map +7 -0
  20. package/dist/modules/customers/components/detail/create/DealCustomAttributes.js +81 -0
  21. package/dist/modules/customers/components/detail/create/DealCustomAttributes.js.map +7 -0
  22. package/dist/modules/customers/components/detail/create/DealDetailsFields.js +171 -0
  23. package/dist/modules/customers/components/detail/create/DealDetailsFields.js.map +7 -0
  24. package/dist/modules/customers/components/detail/create/DealFormField.js +24 -0
  25. package/dist/modules/customers/components/detail/create/DealFormField.js.map +7 -0
  26. package/dist/modules/customers/components/detail/create/DealSectionCard.js +29 -0
  27. package/dist/modules/customers/components/detail/create/DealSectionCard.js.map +7 -0
  28. package/dist/modules/customers/components/detail/create/DealTipsCard.js +19 -0
  29. package/dist/modules/customers/components/detail/create/DealTipsCard.js.map +7 -0
  30. package/dist/modules/customers/components/detail/create/PipelineSelect.js +41 -0
  31. package/dist/modules/customers/components/detail/create/PipelineSelect.js.map +7 -0
  32. package/dist/modules/customers/components/detail/create/PipelineStageSelect.js +49 -0
  33. package/dist/modules/customers/components/detail/create/PipelineStageSelect.js.map +7 -0
  34. package/dist/modules/customers/components/detail/create/SuffixInput.js +21 -0
  35. package/dist/modules/customers/components/detail/create/SuffixInput.js.map +7 -0
  36. package/dist/modules/customers/components/detail/create/dealCustomFieldControl.js +270 -0
  37. package/dist/modules/customers/components/detail/create/dealCustomFieldControl.js.map +7 -0
  38. package/dist/modules/customers/components/detail/create/dealFormTypes.js +17 -0
  39. package/dist/modules/customers/components/detail/create/dealFormTypes.js.map +7 -0
  40. package/dist/modules/customers/components/detail/create/dealNumericInput.js +16 -0
  41. package/dist/modules/customers/components/detail/create/dealNumericInput.js.map +7 -0
  42. package/dist/modules/customers/components/detail/create/useDealCustomFields.js +93 -0
  43. package/dist/modules/customers/components/detail/create/useDealCustomFields.js.map +7 -0
  44. package/dist/modules/customers/components/detail/create/useDealPipelines.js +59 -0
  45. package/dist/modules/customers/components/detail/create/useDealPipelines.js.map +7 -0
  46. package/dist/modules/customers/components/formConfig.js +4 -2
  47. package/dist/modules/customers/components/formConfig.js.map +2 -2
  48. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +5 -2
  49. package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
  50. package/dist/modules/feature_toggles/lib/feature-flag-check.js +13 -5
  51. package/dist/modules/feature_toggles/lib/feature-flag-check.js.map +2 -2
  52. package/dist/modules/query_index/subscribers/coverage_refresh.js +6 -1
  53. package/dist/modules/query_index/subscribers/coverage_refresh.js.map +2 -2
  54. package/dist/modules/workflows/components/WorkflowGraph.js +29 -186
  55. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  56. package/dist/modules/workflows/components/WorkflowGraphImpl.js +196 -0
  57. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +7 -0
  58. package/package.json +8 -9
  59. package/src/global.d.ts +9 -0
  60. package/src/modules/catalog/commands/variants.ts +14 -5
  61. package/src/modules/customers/backend/customers/deals/create/page.tsx +3 -64
  62. package/src/modules/customers/components/detail/DealForm.tsx +2 -0
  63. package/src/modules/customers/components/detail/create/CreateDealForm.tsx +254 -0
  64. package/src/modules/customers/components/detail/create/DealAssociationsField.tsx +253 -0
  65. package/src/modules/customers/components/detail/create/DealAssociationsSection.tsx +72 -0
  66. package/src/modules/customers/components/detail/create/DealCreateSidebar.tsx +79 -0
  67. package/src/modules/customers/components/detail/create/DealCurrencyField.tsx +108 -0
  68. package/src/modules/customers/components/detail/create/DealCustomAttributes.tsx +118 -0
  69. package/src/modules/customers/components/detail/create/DealDetailsFields.tsx +171 -0
  70. package/src/modules/customers/components/detail/create/DealFormField.tsx +39 -0
  71. package/src/modules/customers/components/detail/create/DealSectionCard.tsx +40 -0
  72. package/src/modules/customers/components/detail/create/DealTipsCard.tsx +26 -0
  73. package/src/modules/customers/components/detail/create/PipelineSelect.tsx +55 -0
  74. package/src/modules/customers/components/detail/create/PipelineStageSelect.tsx +70 -0
  75. package/src/modules/customers/components/detail/create/SuffixInput.tsx +20 -0
  76. package/src/modules/customers/components/detail/create/dealCustomFieldControl.tsx +310 -0
  77. package/src/modules/customers/components/detail/create/dealFormTypes.ts +29 -0
  78. package/src/modules/customers/components/detail/create/dealNumericInput.ts +20 -0
  79. package/src/modules/customers/components/detail/create/useDealCustomFields.ts +118 -0
  80. package/src/modules/customers/components/detail/create/useDealPipelines.ts +80 -0
  81. package/src/modules/customers/components/formConfig.tsx +3 -0
  82. package/src/modules/customers/i18n/de.json +26 -0
  83. package/src/modules/customers/i18n/en.json +26 -0
  84. package/src/modules/customers/i18n/es.json +26 -0
  85. package/src/modules/customers/i18n/pl.json +26 -0
  86. package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +12 -1
  87. package/src/modules/feature_toggles/lib/feature-flag-check.ts +14 -4
  88. package/src/modules/query_index/subscribers/coverage_refresh.ts +7 -1
  89. package/src/modules/resources/i18n/de.json +1 -0
  90. package/src/modules/resources/i18n/en.json +1 -0
  91. package/src/modules/resources/i18n/es.json +1 -0
  92. package/src/modules/resources/i18n/pl.json +1 -0
  93. package/src/modules/sales/i18n/de.json +2 -0
  94. package/src/modules/sales/i18n/en.json +2 -0
  95. package/src/modules/sales/i18n/es.json +2 -0
  96. package/src/modules/sales/i18n/pl.json +2 -0
  97. package/src/modules/workflows/components/WorkflowGraph.tsx +39 -235
  98. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +233 -0
@@ -0,0 +1,233 @@
1
+ 'use client'
2
+
3
+ import '@xyflow/react/dist/style.css'
4
+
5
+ import { useCallback, useMemo, useEffect, useState } from 'react'
6
+ import {
7
+ ReactFlow,
8
+ Node,
9
+ Edge,
10
+ Controls,
11
+ Background,
12
+ BackgroundVariant,
13
+ MiniMap,
14
+ Panel,
15
+ useNodesState,
16
+ useEdgesState,
17
+ addEdge,
18
+ Connection,
19
+ ConnectionMode,
20
+ MarkerType,
21
+ } from '@xyflow/react'
22
+ import {StartNode, EndNode, UserTaskNode, AutomatedNode, SubWorkflowNode, WaitForSignalNode, WaitForTimerNode} from './nodes'
23
+ import { WorkflowTransitionEdge } from './WorkflowTransitionEdge'
24
+ import { STATUS_COLORS } from '../lib/status-colors'
25
+ import { Alert, AlertDescription } from '@open-mercato/ui/primitives/alert'
26
+ import { Edit3 } from 'lucide-react'
27
+ import { useTheme } from '@open-mercato/ui/theme'
28
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
29
+
30
+ export interface WorkflowGraphImplProps {
31
+ initialNodes?: Node[]
32
+ initialEdges?: Edge[]
33
+ onNodesChange?: (changes: any[]) => void
34
+ onEdgesChange?: (changes: any[]) => void
35
+ onNodeClick?: (event: React.MouseEvent, node: Node) => void
36
+ onEdgeClick?: (event: React.MouseEvent, edge: Edge) => void
37
+ onConnect?: (connection: Connection) => void
38
+ editable?: boolean
39
+ className?: string
40
+ height?: string
41
+ }
42
+
43
+ export default function WorkflowGraphImpl({
44
+ initialNodes = [],
45
+ initialEdges = [],
46
+ onNodesChange: onNodesChangeProp,
47
+ onEdgesChange: onEdgesChangeProp,
48
+ onNodeClick: onNodeClickProp,
49
+ onEdgeClick: onEdgeClickProp,
50
+ onConnect: onConnectProp,
51
+ editable = false,
52
+ className = '',
53
+ height = '600px',
54
+ }: WorkflowGraphImplProps) {
55
+ const t = useT()
56
+ const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes)
57
+ const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges)
58
+
59
+ const { resolvedTheme } = useTheme()
60
+ const isDark = resolvedTheme === 'dark'
61
+ const backgroundDotColor = isDark ? '#374151' : '#e5e7eb'
62
+ const [isCompactViewport, setIsCompactViewport] = useState(false)
63
+
64
+ useEffect(() => {
65
+ if (typeof window === 'undefined') return
66
+ const mediaQuery = window.matchMedia('(max-width: 1279px)')
67
+ const updateViewportMode = () => setIsCompactViewport(mediaQuery.matches)
68
+
69
+ updateViewportMode()
70
+ mediaQuery.addEventListener('change', updateViewportMode)
71
+
72
+ return () => {
73
+ mediaQuery.removeEventListener('change', updateViewportMode)
74
+ }
75
+ }, [])
76
+
77
+ useEffect(() => {
78
+ setNodes(initialNodes)
79
+ }, [initialNodes, setNodes])
80
+
81
+ useEffect(() => {
82
+ setEdges(initialEdges)
83
+ }, [initialEdges, setEdges])
84
+
85
+ const onConnect = useCallback(
86
+ (connection: Connection) => {
87
+ if (onConnectProp) {
88
+ onConnectProp(connection)
89
+ } else {
90
+ const newEdge = {
91
+ ...connection,
92
+ type: 'workflowTransition',
93
+ animated: false,
94
+ markerEnd: {
95
+ type: MarkerType.ArrowClosed,
96
+ width: 16,
97
+ height: 16,
98
+ color: '#9ca3af',
99
+ },
100
+ }
101
+ setEdges((eds) => addEdge(newEdge, eds))
102
+ }
103
+ },
104
+ [setEdges, onConnectProp]
105
+ )
106
+
107
+ const handleNodesChange = useCallback(
108
+ (changes: any) => {
109
+ onNodesChange(changes)
110
+ if (onNodesChangeProp) {
111
+ onNodesChangeProp(changes)
112
+ }
113
+ },
114
+ [onNodesChange, onNodesChangeProp]
115
+ )
116
+
117
+ const handleEdgesChange = useCallback(
118
+ (changes: any) => {
119
+ onEdgesChange(changes)
120
+ if (onEdgesChangeProp) {
121
+ onEdgesChangeProp(changes)
122
+ }
123
+ },
124
+ [onEdgesChange, onEdgesChangeProp]
125
+ )
126
+
127
+ const nodeTypes = useMemo(
128
+ () => ({
129
+ start: StartNode,
130
+ end: EndNode,
131
+ userTask: UserTaskNode,
132
+ automated: AutomatedNode,
133
+ subWorkflow: SubWorkflowNode,
134
+ waitForSignal: WaitForSignalNode,
135
+ waitForTimer: WaitForTimerNode,
136
+ }),
137
+ []
138
+ )
139
+
140
+ const edgeTypes = useMemo(
141
+ () => ({
142
+ workflowTransition: WorkflowTransitionEdge,
143
+ }),
144
+ []
145
+ )
146
+
147
+ return (
148
+ <div className={`workflow-graph-container ${className}`} style={{ height }}>
149
+ <ReactFlow
150
+ nodes={nodes}
151
+ edges={edges}
152
+ nodeTypes={nodeTypes}
153
+ edgeTypes={edgeTypes}
154
+ onNodesChange={handleNodesChange}
155
+ onEdgesChange={handleEdgesChange}
156
+ onConnect={editable ? onConnect : undefined}
157
+ onNodeClick={onNodeClickProp}
158
+ onEdgeClick={onEdgeClickProp}
159
+ connectionMode={ConnectionMode.Loose}
160
+ fitView
161
+ fitViewOptions={{
162
+ padding: 0.2,
163
+ maxZoom: isCompactViewport ? 0.9 : 1,
164
+ }}
165
+ minZoom={0.1}
166
+ maxZoom={2}
167
+ defaultEdgeOptions={{
168
+ type: 'workflowTransition',
169
+ animated: false,
170
+ markerEnd: {
171
+ type: MarkerType.ArrowClosed,
172
+ width: 16,
173
+ height: 16,
174
+ color: '#9ca3af',
175
+ },
176
+ }}
177
+ nodesDraggable={editable}
178
+ nodesConnectable={editable}
179
+ elementsSelectable={editable}
180
+ proOptions={{ hideAttribution: true }}
181
+ >
182
+ <Background
183
+ variant={BackgroundVariant.Dots}
184
+ gap={16}
185
+ size={1}
186
+ color={backgroundDotColor}
187
+ />
188
+
189
+ <Controls
190
+ showZoom={true}
191
+ showFitView={true}
192
+ showInteractive={false}
193
+ position={isCompactViewport ? 'bottom-right' : 'top-right'}
194
+ className={`!bg-card !border-border !shadow-md [&>button]:!bg-card [&>button]:!border-border [&>button]:!fill-foreground [&>button:hover]:!bg-muted ${isCompactViewport ? 'scale-90 origin-bottom-right' : ''}`}
195
+ />
196
+
197
+ {!isCompactViewport && (
198
+ <MiniMap
199
+ nodeStrokeWidth={3}
200
+ nodeColor={(node) => {
201
+ const status = (node.data?.status || 'not_started') as keyof typeof STATUS_COLORS
202
+ return STATUS_COLORS[status]?.hex || STATUS_COLORS.not_started.hex
203
+ }}
204
+ maskColor="rgba(0, 0, 0, 0.1)"
205
+ position="bottom-left"
206
+ className="!bg-card !border !border-border !rounded-lg"
207
+ />
208
+ )}
209
+
210
+ {!editable && !isCompactViewport && (
211
+ <Panel position="top-left" style={{ margin: 10 }}>
212
+ <div className="bg-card rounded-lg shadow-sm border border-border px-4 py-2">
213
+ <p className="text-sm text-muted-foreground font-medium">
214
+ {t('workflows.graph.visualization')}
215
+ </p>
216
+ </div>
217
+ </Panel>
218
+ )}
219
+
220
+ {editable && !isCompactViewport && (
221
+ <Panel position="top-left" style={{ margin: 10 }}>
222
+ <Alert variant="info" className="max-w-sm">
223
+ <Edit3 className="size-4" />
224
+ <AlertDescription className="font-medium">
225
+ {t('workflows.graph.editModeInfo')}
226
+ </AlertDescription>
227
+ </Alert>
228
+ </Panel>
229
+ )}
230
+ </ReactFlow>
231
+ </div>
232
+ )
233
+ }