@open-mercato/core 0.5.1-develop.2953.6647bb2c43 → 0.5.1-develop.2964.d5ac4a6ebb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/integration/salesUi.js +25 -23
- package/dist/helpers/integration/salesUi.js.map +2 -2
- package/dist/modules/api_docs/frontend/docs/api/Explorer.js +24 -24
- package/dist/modules/api_docs/frontend/docs/api/Explorer.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +15 -7
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/attachments/fields/attachment.js +4 -6
- package/dist/modules/attachments/fields/attachment.js.map +2 -2
- package/dist/modules/auth/backend/users/create/page.js +26 -26
- package/dist/modules/auth/backend/users/create/page.js.map +2 -2
- package/dist/modules/business_rules/components/ActionRow.js +36 -25
- package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
- package/dist/modules/business_rules/components/ConditionGroup.js +14 -5
- package/dist/modules/business_rules/components/ConditionGroup.js.map +2 -2
- package/dist/modules/business_rules/components/ConditionRow.js +19 -10
- package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
- package/dist/modules/business_rules/components/RuleSetMembers.js +16 -10
- package/dist/modules/business_rules/components/RuleSetMembers.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +30 -34
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/create/page.js +220 -223
- package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +20 -19
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductUomSection.js +42 -37
- package/dist/modules/catalog/components/products/ProductUomSection.js.map +2 -2
- package/dist/modules/catalog/components/products/VariantBuilder.js +22 -18
- package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +18 -26
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +4 -6
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +5 -4
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +19 -7
- package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js +24 -21
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
- package/dist/modules/customers/components/AddressEditor.js +24 -7
- package/dist/modules/customers/components/AddressEditor.js.map +2 -2
- package/dist/modules/customers/components/AddressFormatSettings.js +35 -25
- package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivityForm.js +20 -12
- package/dist/modules/customers/components/detail/ActivityForm.js.map +2 -2
- package/dist/modules/customers/components/detail/AnnualRevenueField.js +2 -2
- package/dist/modules/customers/components/detail/AnnualRevenueField.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +19 -14
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/formConfig.js +16 -12
- package/dist/modules/customers/components/formConfig.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js +3 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js +18 -10
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js +3 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.client.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js +3 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.client.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +27 -28
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js +14 -6
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +14 -6
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +3 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +3 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +17 -8
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +40 -23
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js +15 -6
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
- package/dist/modules/dictionaries/components/AppearanceSelector.js +4 -4
- package/dist/modules/dictionaries/components/AppearanceSelector.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +4 -5
- package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +22 -14
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
- package/dist/modules/dictionaries/fields/dictionary.js +18 -13
- package/dist/modules/dictionaries/fields/dictionary.js.map +2 -2
- package/dist/modules/entities/components/EncryptionManager.js +23 -19
- package/dist/modules/entities/components/EncryptionManager.js.map +2 -2
- package/dist/modules/feature_toggles/components/formConfig.js +17 -9
- package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
- package/dist/modules/feature_toggles/components/overrideFormConfig.js +17 -9
- package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +15 -8
- package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +37 -22
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +22 -17
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +12 -6
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js +19 -12
- package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
- package/dist/modules/resources/components/ResourceCrudForm.js +15 -10
- package/dist/modules/resources/components/ResourceCrudForm.js.map +3 -3
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +15 -18
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/components/ProviderFieldInput.js +23 -20
- package/dist/modules/sales/components/ProviderFieldInput.js.map +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js +25 -17
- package/dist/modules/sales/components/ShippingMethodsSettings.js.map +3 -3
- package/dist/modules/sales/components/channels/ChannelOfferForm.js +35 -42
- package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
- package/dist/modules/sales/components/documents/AddressesSection.js +87 -90
- package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentDialog.js +17 -6
- package/dist/modules/sales/components/documents/AdjustmentDialog.js.map +3 -3
- package/dist/modules/sales/components/documents/LineItemDialog.js +42 -25
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentForm.js +96 -87
- package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js +20 -11
- package/dist/modules/sales/widgets/dashboard/new-orders/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js +20 -11
- package/dist/modules/sales/widgets/dashboard/new-quotes/widget.client.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js +36 -22
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.js.map +2 -2
- package/dist/modules/staff/components/TeamMemberForm.js +14 -9
- package/dist/modules/staff/components/TeamMemberForm.js.map +3 -3
- package/dist/modules/workflows/backend/tasks/[id]/page.js +42 -21
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/components/ActivitiesEditor.js +14 -6
- package/dist/modules/workflows/components/ActivitiesEditor.js.map +3 -3
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +25 -17
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +3 -3
- package/dist/modules/workflows/components/EdgeEditDialog.js +48 -45
- package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialog.js +90 -90
- package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/StepsEditor.js +14 -6
- package/dist/modules/workflows/components/StepsEditor.js.map +3 -3
- package/dist/modules/workflows/components/TransitionsEditor.js +31 -26
- package/dist/modules/workflows/components/TransitionsEditor.js.map +3 -3
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +19 -11
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +3 -3
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +12 -14
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +24 -16
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +3 -3
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +12 -13
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js +12 -8
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
- package/dist/modules/workflows/frontend/checkout-demo/page.js +43 -46
- package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
- package/package.json +3 -3
- package/src/helpers/integration/salesUi.ts +40 -30
- package/src/modules/api_docs/frontend/docs/api/Explorer.tsx +25 -19
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +21 -11
- package/src/modules/attachments/fields/attachment.tsx +4 -6
- package/src/modules/auth/backend/users/create/page.tsx +16 -20
- package/src/modules/business_rules/components/ActionRow.tsx +51 -32
- package/src/modules/business_rules/components/ConditionGroup.tsx +20 -9
- package/src/modules/business_rules/components/ConditionRow.tsx +24 -15
- package/src/modules/business_rules/components/RuleSetMembers.tsx +23 -13
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +47 -53
- package/src/modules/catalog/backend/catalog/products/create/page.tsx +84 -87
- package/src/modules/catalog/components/PriceKindSettings.tsx +9 -9
- package/src/modules/catalog/components/products/ProductUomSection.tsx +85 -83
- package/src/modules/catalog/components/products/VariantBuilder.tsx +49 -33
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +12 -27
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -6
- package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +5 -4
- package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +28 -15
- package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +37 -26
- package/src/modules/customers/components/AddressEditor.tsx +30 -16
- package/src/modules/customers/components/AddressFormatSettings.tsx +25 -19
- package/src/modules/customers/components/detail/ActivityForm.tsx +35 -23
- package/src/modules/customers/components/detail/AnnualRevenueField.tsx +2 -2
- package/src/modules/customers/components/detail/DealForm.tsx +33 -20
- package/src/modules/customers/components/formConfig.tsx +25 -17
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.client.tsx +3 -2
- package/src/modules/customers/widgets/dashboard/new-customers/widget.client.tsx +21 -11
- package/src/modules/customers/widgets/dashboard/new-deals/widget.client.tsx +3 -2
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.client.tsx +3 -2
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +17 -22
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.client.tsx +17 -7
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +20 -10
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +3 -2
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +3 -2
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +20 -9
- package/src/modules/data_sync/backend/data-sync/page.tsx +64 -38
- package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +18 -7
- package/src/modules/dictionaries/components/AppearanceSelector.tsx +4 -4
- package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +3 -4
- package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +27 -21
- package/src/modules/dictionaries/fields/dictionary.tsx +36 -23
- package/src/modules/entities/components/EncryptionManager.tsx +49 -33
- package/src/modules/feature_toggles/components/formConfig.tsx +20 -10
- package/src/modules/feature_toggles/components/overrideFormConfig.tsx +20 -10
- package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +19 -10
- package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +49 -26
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +20 -11
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +19 -9
- package/src/modules/planner/components/AvailabilityRulesEditor.tsx +34 -21
- package/src/modules/resources/components/ResourceCrudForm.tsx +24 -15
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +12 -15
- package/src/modules/sales/components/ProviderFieldInput.tsx +26 -17
- package/src/modules/sales/components/ShippingMethodsSettings.tsx +28 -20
- package/src/modules/sales/components/channels/ChannelOfferForm.tsx +51 -46
- package/src/modules/sales/components/documents/AddressesSection.tsx +78 -76
- package/src/modules/sales/components/documents/AdjustmentDialog.tsx +27 -15
- package/src/modules/sales/components/documents/LineItemDialog.tsx +69 -51
- package/src/modules/sales/components/documents/SalesDocumentForm.tsx +98 -87
- package/src/modules/sales/widgets/dashboard/new-orders/widget.client.tsx +23 -12
- package/src/modules/sales/widgets/dashboard/new-quotes/widget.client.tsx +23 -12
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/ConfigureStep.tsx +35 -19
- package/src/modules/staff/components/TeamMemberForm.tsx +23 -14
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +51 -23
- package/src/modules/workflows/components/ActivitiesEditor.tsx +20 -10
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +28 -18
- package/src/modules/workflows/components/EdgeEditDialog.tsx +51 -40
- package/src/modules/workflows/components/NodeEditDialog.tsx +81 -77
- package/src/modules/workflows/components/StepsEditor.tsx +20 -10
- package/src/modules/workflows/components/TransitionsEditor.tsx +61 -44
- package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +22 -12
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +9 -13
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +27 -17
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +9 -12
- package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +19 -11
- package/src/modules/workflows/frontend/checkout-demo/page.tsx +71 -60
|
@@ -4,6 +4,13 @@ import * as React from 'react'
|
|
|
4
4
|
import Link from 'next/link'
|
|
5
5
|
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
|
6
6
|
import { Page, PageBody } from '@open-mercato/ui/backend/Page'
|
|
7
|
+
import {
|
|
8
|
+
Select,
|
|
9
|
+
SelectContent,
|
|
10
|
+
SelectItem,
|
|
11
|
+
SelectTrigger,
|
|
12
|
+
SelectValue,
|
|
13
|
+
} from '@open-mercato/ui/primitives/select'
|
|
7
14
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
8
15
|
import { ErrorNotice } from '@open-mercato/ui/primitives/ErrorNotice'
|
|
9
16
|
import { apiCallOrThrow, readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
|
|
@@ -399,9 +406,8 @@ export default function SalesPipelinePage(): React.ReactElement {
|
|
|
399
406
|
event.stopPropagation()
|
|
400
407
|
}, [])
|
|
401
408
|
|
|
402
|
-
const handleSortChange = React.useCallback((
|
|
403
|
-
|
|
404
|
-
if (sortOptions.includes(value)) setSortBy(value)
|
|
409
|
+
const handleSortChange = React.useCallback((value: string) => {
|
|
410
|
+
if (sortOptions.includes(value as SortOption)) setSortBy(value as SortOption)
|
|
405
411
|
}, [])
|
|
406
412
|
|
|
407
413
|
const handleDragStart = React.useCallback((dealId: string) => {
|
|
@@ -478,15 +484,19 @@ export default function SalesPipelinePage(): React.ReactElement {
|
|
|
478
484
|
{pipelinesQuery.data && pipelinesQuery.data.length > 0 ? (
|
|
479
485
|
<label className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
|
|
480
486
|
<span>{translate('customers.deals.pipeline.switch.label', 'Pipeline')}</span>
|
|
481
|
-
<
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
onChange={(e) => setSelectedPipelineId(e.target.value || null)}
|
|
487
|
+
<Select
|
|
488
|
+
value={selectedPipelineId || undefined}
|
|
489
|
+
onValueChange={(value) => setSelectedPipelineId(value || null)}
|
|
485
490
|
>
|
|
486
|
-
|
|
487
|
-
<
|
|
488
|
-
|
|
489
|
-
|
|
491
|
+
<SelectTrigger className="w-auto min-w-[12rem]">
|
|
492
|
+
<SelectValue />
|
|
493
|
+
</SelectTrigger>
|
|
494
|
+
<SelectContent>
|
|
495
|
+
{pipelinesQuery.data.map((p) => (
|
|
496
|
+
<SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>
|
|
497
|
+
))}
|
|
498
|
+
</SelectContent>
|
|
499
|
+
</Select>
|
|
490
500
|
</label>
|
|
491
501
|
) : null}
|
|
492
502
|
<Link
|
|
@@ -497,21 +507,22 @@ export default function SalesPipelinePage(): React.ReactElement {
|
|
|
497
507
|
</Link>
|
|
498
508
|
<label className="flex items-center gap-2 text-sm font-medium text-muted-foreground">
|
|
499
509
|
<span>{translate('customers.deals.pipeline.sort.label', 'Sort by')}</span>
|
|
500
|
-
<
|
|
501
|
-
className="
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
510
|
+
<Select value={sortBy} onValueChange={handleSortChange}>
|
|
511
|
+
<SelectTrigger className="w-auto min-w-[14rem]">
|
|
512
|
+
<SelectValue />
|
|
513
|
+
</SelectTrigger>
|
|
514
|
+
<SelectContent>
|
|
515
|
+
<SelectItem value="probability">
|
|
516
|
+
{translate('customers.deals.pipeline.sort.probability', 'Probability (high to low)')}
|
|
517
|
+
</SelectItem>
|
|
518
|
+
<SelectItem value="createdAt">
|
|
519
|
+
{translate('customers.deals.pipeline.sort.createdAt', 'Created (newest first)')}
|
|
520
|
+
</SelectItem>
|
|
521
|
+
<SelectItem value="expectedCloseAt">
|
|
522
|
+
{translate('customers.deals.pipeline.sort.expectedCloseAt', 'Expected close (soonest first)')}
|
|
523
|
+
</SelectItem>
|
|
524
|
+
</SelectContent>
|
|
525
|
+
</Select>
|
|
515
526
|
</label>
|
|
516
527
|
</div>
|
|
517
528
|
</div>
|
|
@@ -6,6 +6,13 @@ import { usePathname, useSearchParams } from 'next/navigation'
|
|
|
6
6
|
import { Plus, Settings } from 'lucide-react'
|
|
7
7
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
8
8
|
import { Input } from '@open-mercato/ui/primitives/input'
|
|
9
|
+
import {
|
|
10
|
+
Select,
|
|
11
|
+
SelectContent,
|
|
12
|
+
SelectItem,
|
|
13
|
+
SelectTrigger,
|
|
14
|
+
SelectValue,
|
|
15
|
+
} from '@open-mercato/ui/primitives/select'
|
|
9
16
|
import {
|
|
10
17
|
Dialog,
|
|
11
18
|
DialogContent,
|
|
@@ -168,24 +175,31 @@ export function AddressEditor({
|
|
|
168
175
|
aria-invalid={errors.name ? 'true' : undefined}
|
|
169
176
|
/>
|
|
170
177
|
<div className="flex gap-2">
|
|
171
|
-
<
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
onChange={(evt) => update('purpose', evt.target.value)}
|
|
178
|
+
<Select
|
|
179
|
+
value={current.purpose || undefined}
|
|
180
|
+
onValueChange={(next) => update('purpose', next ?? '')}
|
|
175
181
|
disabled={disabled}
|
|
176
|
-
aria-invalid={errors.purpose ? 'true' : undefined}
|
|
177
182
|
>
|
|
178
|
-
<
|
|
179
|
-
{
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
183
|
+
<SelectTrigger
|
|
184
|
+
className={errors.purpose ? 'border-destructive' : undefined}
|
|
185
|
+
aria-invalid={errors.purpose ? 'true' : undefined}
|
|
186
|
+
>
|
|
187
|
+
<SelectValue
|
|
188
|
+
placeholder={
|
|
189
|
+
addressTypesLoading
|
|
190
|
+
? t('customers.people.detail.addresses.types.loading', 'Loading…')
|
|
191
|
+
: t('customers.people.detail.addresses.types.placeholder', 'Address type')
|
|
192
|
+
}
|
|
193
|
+
/>
|
|
194
|
+
</SelectTrigger>
|
|
195
|
+
<SelectContent>
|
|
196
|
+
{addressTypes.map((entry) => (
|
|
197
|
+
<SelectItem key={entry.value} value={entry.value}>
|
|
198
|
+
{entry.label}
|
|
199
|
+
</SelectItem>
|
|
200
|
+
))}
|
|
201
|
+
</SelectContent>
|
|
202
|
+
</Select>
|
|
189
203
|
<Dialog open={typeDialogOpen} onOpenChange={setTypeDialogOpen}>
|
|
190
204
|
<DialogTrigger asChild>
|
|
191
205
|
<Button type="button" variant="outline" size="icon" className="shrink-0" disabled={disabled}>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
4
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
5
|
+
import { RadioGroup, Radio } from '@open-mercato/ui/primitives/radio'
|
|
5
6
|
import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
6
7
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
7
8
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
@@ -139,24 +140,29 @@ export function AddressFormatSettings() {
|
|
|
139
140
|
{t('customers.config.addressFormat.loading', 'Loading current preference…')}
|
|
140
141
|
</div>
|
|
141
142
|
) : (
|
|
142
|
-
<
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
143
|
+
<RadioGroup
|
|
144
|
+
className="space-y-3"
|
|
145
|
+
value={format}
|
|
146
|
+
onValueChange={(next) => handleChange(next as AddressFormatStrategy)}
|
|
147
|
+
name="address-format"
|
|
148
|
+
>
|
|
149
|
+
{options.map((option) => {
|
|
150
|
+
const inputId = `address-format-${option.id}`
|
|
151
|
+
return (
|
|
152
|
+
<label key={option.id} htmlFor={inputId} className="flex cursor-pointer items-start gap-3 rounded border p-3">
|
|
153
|
+
<Radio
|
|
154
|
+
id={inputId}
|
|
155
|
+
className="mt-1"
|
|
156
|
+
value={option.id}
|
|
157
|
+
disabled={pending !== null && pending !== option.id}
|
|
158
|
+
/>
|
|
159
|
+
<span className="space-y-1">
|
|
160
|
+
<span className="block text-sm font-medium">{option.title}</span>
|
|
161
|
+
<span className="block text-xs text-muted-foreground">{option.description}</span>
|
|
162
|
+
</span>
|
|
163
|
+
</label>
|
|
164
|
+
)
|
|
165
|
+
})}
|
|
160
166
|
{error ? <p className="text-sm text-status-error-text">{error}</p> : null}
|
|
161
167
|
{pending ? (
|
|
162
168
|
<div className="inline-flex items-center gap-2 rounded border border-dashed px-3 py-1 text-xs text-muted-foreground">
|
|
@@ -164,7 +170,7 @@ export function AddressFormatSettings() {
|
|
|
164
170
|
{t('customers.config.addressFormat.updating', 'Saving preference…')}
|
|
165
171
|
</div>
|
|
166
172
|
) : null}
|
|
167
|
-
</
|
|
173
|
+
</RadioGroup>
|
|
168
174
|
)}
|
|
169
175
|
</section>
|
|
170
176
|
)
|
|
@@ -5,6 +5,13 @@ import { z } from 'zod'
|
|
|
5
5
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
6
6
|
import { CrudForm, type CrudField, type CrudFormGroup } from '@open-mercato/ui/backend/CrudForm'
|
|
7
7
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
8
|
+
import {
|
|
9
|
+
Select,
|
|
10
|
+
SelectContent,
|
|
11
|
+
SelectItem,
|
|
12
|
+
SelectTrigger,
|
|
13
|
+
SelectValue,
|
|
14
|
+
} from '@open-mercato/ui/primitives/select'
|
|
8
15
|
import { collectCustomFieldValues } from '@open-mercato/ui/backend/utils/customFieldValues'
|
|
9
16
|
import { createCrudFormError } from '@open-mercato/ui/backend/utils/serverErrors'
|
|
10
17
|
import { DictionaryEntrySelect, type DictionarySelectLabels } from '@open-mercato/core/modules/dictionaries/components/DictionaryEntrySelect'
|
|
@@ -150,17 +157,21 @@ export function ActivityForm({
|
|
|
150
157
|
const currentValue =
|
|
151
158
|
typeof value === 'string' && value.length ? value : normalizedEntityOptions[0]?.id ?? ''
|
|
152
159
|
return (
|
|
153
|
-
<
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
onChange={(event) => setValue(event.target.value)}
|
|
160
|
+
<Select
|
|
161
|
+
value={currentValue || undefined}
|
|
162
|
+
onValueChange={(next) => setValue(next ?? '')}
|
|
157
163
|
>
|
|
158
|
-
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
+
<SelectTrigger>
|
|
165
|
+
<SelectValue />
|
|
166
|
+
</SelectTrigger>
|
|
167
|
+
<SelectContent>
|
|
168
|
+
{normalizedEntityOptions.map((option) => (
|
|
169
|
+
<SelectItem key={option.id} value={option.id}>
|
|
170
|
+
{option.label}
|
|
171
|
+
</SelectItem>
|
|
172
|
+
))}
|
|
173
|
+
</SelectContent>
|
|
174
|
+
</Select>
|
|
164
175
|
)
|
|
165
176
|
},
|
|
166
177
|
} as CrudField)
|
|
@@ -175,20 +186,21 @@ export function ActivityForm({
|
|
|
175
186
|
component: ({ value, setValue }) => {
|
|
176
187
|
const currentValue = typeof value === 'string' ? value : ''
|
|
177
188
|
return (
|
|
178
|
-
<
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
onChange={(event) => setValue(event.target.value)}
|
|
189
|
+
<Select
|
|
190
|
+
value={currentValue || undefined}
|
|
191
|
+
onValueChange={(next) => setValue(next ?? '')}
|
|
182
192
|
>
|
|
183
|
-
<
|
|
184
|
-
{t('customers.people.detail.activities.fields.dealPlaceholder', 'No linked deal')}
|
|
185
|
-
</
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
{option.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
193
|
+
<SelectTrigger>
|
|
194
|
+
<SelectValue placeholder={t('customers.people.detail.activities.fields.dealPlaceholder', 'No linked deal')} />
|
|
195
|
+
</SelectTrigger>
|
|
196
|
+
<SelectContent>
|
|
197
|
+
{normalizedDealOptions.map((option) => (
|
|
198
|
+
<SelectItem key={option.id} value={option.id}>
|
|
199
|
+
{option.label}
|
|
200
|
+
</SelectItem>
|
|
201
|
+
))}
|
|
202
|
+
</SelectContent>
|
|
203
|
+
</Select>
|
|
192
204
|
)
|
|
193
205
|
},
|
|
194
206
|
} as CrudField)
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import * as React from 'react'
|
|
4
4
|
import { Loader2, Pencil, X } from 'lucide-react'
|
|
5
5
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
6
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
6
7
|
import { DictionaryEntrySelect } from '@open-mercato/core/modules/dictionaries/components/DictionaryEntrySelect'
|
|
7
8
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
8
9
|
import { cn } from '@open-mercato/shared/lib/utils'
|
|
@@ -223,8 +224,7 @@ export function AnnualRevenueField({
|
|
|
223
224
|
<label className="text-xs font-medium uppercase tracking-wide text-muted-foreground">
|
|
224
225
|
{t('customers.companies.detail.fields.annualRevenuePlaceholder', 'Enter amount')}
|
|
225
226
|
</label>
|
|
226
|
-
<
|
|
227
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
227
|
+
<Input
|
|
228
228
|
value={draftAmount}
|
|
229
229
|
onChange={(event) => {
|
|
230
230
|
setDraftAmount(event.target.value)
|
|
@@ -6,6 +6,13 @@ import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
|
6
6
|
import { CrudForm, type CrudField, type CrudFormGroup } from '@open-mercato/ui/backend/CrudForm'
|
|
7
7
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
8
8
|
import { IconButton } from '@open-mercato/ui/primitives/icon-button'
|
|
9
|
+
import {
|
|
10
|
+
Select,
|
|
11
|
+
SelectContent,
|
|
12
|
+
SelectItem,
|
|
13
|
+
SelectTrigger,
|
|
14
|
+
SelectValue,
|
|
15
|
+
} from '@open-mercato/ui/primitives/select'
|
|
9
16
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
10
17
|
import { createCrudFormError } from '@open-mercato/ui/backend/utils/serverErrors'
|
|
11
18
|
import { DictionarySelectField } from '../formConfig'
|
|
@@ -797,20 +804,23 @@ export function DealForm({
|
|
|
797
804
|
type: 'custom',
|
|
798
805
|
layout: 'half',
|
|
799
806
|
component: ({ value, setValue }) => (
|
|
800
|
-
<
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
loadStagesForPipeline(e.target.value).catch(() => {})
|
|
807
|
+
<Select
|
|
808
|
+
value={typeof value === 'string' && value ? value : undefined}
|
|
809
|
+
onValueChange={(next) => {
|
|
810
|
+
setValue(next ?? '')
|
|
811
|
+
loadStagesForPipeline(next ?? '').catch(() => {})
|
|
806
812
|
}}
|
|
807
813
|
disabled={disabled}
|
|
808
814
|
>
|
|
809
|
-
<
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
815
|
+
<SelectTrigger>
|
|
816
|
+
<SelectValue placeholder={t('customers.deals.form.pipeline.placeholder', 'Select pipeline…')} />
|
|
817
|
+
</SelectTrigger>
|
|
818
|
+
<SelectContent>
|
|
819
|
+
{pipelines.map((p) => (
|
|
820
|
+
<SelectItem key={p.id} value={p.id}>{p.name}</SelectItem>
|
|
821
|
+
))}
|
|
822
|
+
</SelectContent>
|
|
823
|
+
</Select>
|
|
814
824
|
),
|
|
815
825
|
} as CrudField,
|
|
816
826
|
{
|
|
@@ -819,17 +829,20 @@ export function DealForm({
|
|
|
819
829
|
type: 'custom',
|
|
820
830
|
layout: 'half',
|
|
821
831
|
component: ({ value, setValue }) => (
|
|
822
|
-
<
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
onChange={(e) => setValue(e.target.value)}
|
|
832
|
+
<Select
|
|
833
|
+
value={typeof value === 'string' && value ? value : undefined}
|
|
834
|
+
onValueChange={(next) => setValue(next ?? '')}
|
|
826
835
|
disabled={disabled || !pipelineStages.length}
|
|
827
836
|
>
|
|
828
|
-
<
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
837
|
+
<SelectTrigger>
|
|
838
|
+
<SelectValue placeholder={t('customers.deals.form.pipelineStage.placeholder', 'Select stage…')} />
|
|
839
|
+
</SelectTrigger>
|
|
840
|
+
<SelectContent>
|
|
841
|
+
{pipelineStages.map((s) => (
|
|
842
|
+
<SelectItem key={s.id} value={s.id}>{s.label}</SelectItem>
|
|
843
|
+
))}
|
|
844
|
+
</SelectContent>
|
|
845
|
+
</Select>
|
|
833
846
|
),
|
|
834
847
|
} as CrudField,
|
|
835
848
|
{
|
|
@@ -7,6 +7,14 @@ import { Check, Pencil, Plus, Settings } from 'lucide-react'
|
|
|
7
7
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
8
8
|
import { useOrganizationScopeVersion } from '@open-mercato/shared/lib/frontend/useOrganizationScope'
|
|
9
9
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
10
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
11
|
+
import {
|
|
12
|
+
Select,
|
|
13
|
+
SelectContent,
|
|
14
|
+
SelectItem,
|
|
15
|
+
SelectTrigger,
|
|
16
|
+
SelectValue,
|
|
17
|
+
} from '@open-mercato/ui/primitives/select'
|
|
10
18
|
import { deriveDisplayName, isDerivedDisplayName } from '../lib/displayName'
|
|
11
19
|
import {
|
|
12
20
|
Dialog,
|
|
@@ -255,9 +263,8 @@ const createPrimaryEmailField = (t: Translator): CrudField => ({
|
|
|
255
263
|
|
|
256
264
|
return (
|
|
257
265
|
<div className="space-y-2">
|
|
258
|
-
<
|
|
266
|
+
<Input
|
|
259
267
|
type="email"
|
|
260
|
-
className="w-full h-9 rounded border px-2 text-sm"
|
|
261
268
|
value={inputValue}
|
|
262
269
|
onChange={(event) => {
|
|
263
270
|
const nextValue = event.target.value
|
|
@@ -561,19 +568,22 @@ export function CompanySelectField({ value, onChange, labels }: CompanySelectFie
|
|
|
561
568
|
return (
|
|
562
569
|
<div className="space-y-2">
|
|
563
570
|
<div className="flex items-center gap-2">
|
|
564
|
-
<
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
onChange={(event) => onChange(event.target.value ? event.target.value : undefined)}
|
|
571
|
+
<Select
|
|
572
|
+
value={value || undefined}
|
|
573
|
+
onValueChange={(next) => onChange(next || undefined)}
|
|
568
574
|
disabled={loading}
|
|
569
575
|
>
|
|
570
|
-
<
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
576
|
+
<SelectTrigger>
|
|
577
|
+
<SelectValue placeholder={labels.placeholder} />
|
|
578
|
+
</SelectTrigger>
|
|
579
|
+
<SelectContent>
|
|
580
|
+
{options.map((option) => (
|
|
581
|
+
<SelectItem key={option.value} value={option.value}>
|
|
582
|
+
{option.label}
|
|
583
|
+
</SelectItem>
|
|
584
|
+
))}
|
|
585
|
+
</SelectContent>
|
|
586
|
+
</Select>
|
|
577
587
|
<Dialog open={dialogOpen} onOpenChange={handleDialogChange}>
|
|
578
588
|
<DialogTrigger asChild>
|
|
579
589
|
<Button
|
|
@@ -595,8 +605,7 @@ export function CompanySelectField({ value, onChange, labels }: CompanySelectFie
|
|
|
595
605
|
<div className="space-y-4">
|
|
596
606
|
<div className="space-y-1">
|
|
597
607
|
<label className="text-sm font-medium">{labels.inputLabel}</label>
|
|
598
|
-
<
|
|
599
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
608
|
+
<Input
|
|
600
609
|
placeholder={labels.inputPlaceholder}
|
|
601
610
|
value={newCompany}
|
|
602
611
|
onChange={(event) => {
|
|
@@ -760,8 +769,7 @@ export const createDisplayNameSection = (t: Translator) =>
|
|
|
760
769
|
</div>
|
|
761
770
|
{editing ? (
|
|
762
771
|
<div className="mt-2 space-y-2">
|
|
763
|
-
<
|
|
764
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
772
|
+
<Input
|
|
765
773
|
value={currentValue}
|
|
766
774
|
onChange={handleChange}
|
|
767
775
|
placeholder={t('customers.people.form.displayName.placeholder')}
|
|
@@ -4,6 +4,7 @@ import * as React from 'react'
|
|
|
4
4
|
import Link from 'next/link'
|
|
5
5
|
import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
6
6
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
7
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
7
8
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
8
9
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
9
10
|
import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'
|
|
@@ -132,12 +133,12 @@ const CustomerTodosWidget: React.FC<DashboardWidgetComponentProps<CustomerTodoWi
|
|
|
132
133
|
<label htmlFor="customer-todos-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
|
|
133
134
|
{t('customers.widgets.todos.settings.pageSize')}
|
|
134
135
|
</label>
|
|
135
|
-
<
|
|
136
|
+
<Input
|
|
136
137
|
id="customer-todos-page-size"
|
|
137
138
|
type="number"
|
|
138
139
|
min={1}
|
|
139
140
|
max={20}
|
|
140
|
-
className="w-24
|
|
141
|
+
className="w-24"
|
|
141
142
|
value={hydrated.pageSize}
|
|
142
143
|
onChange={(event) => {
|
|
143
144
|
const next = Number(event.target.value)
|
|
@@ -4,6 +4,14 @@ import * as React from 'react'
|
|
|
4
4
|
import Link from 'next/link'
|
|
5
5
|
import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
6
6
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
7
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
8
|
+
import {
|
|
9
|
+
Select,
|
|
10
|
+
SelectContent,
|
|
11
|
+
SelectItem,
|
|
12
|
+
SelectTrigger,
|
|
13
|
+
SelectValue,
|
|
14
|
+
} from '@open-mercato/ui/primitives/select'
|
|
7
15
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
8
16
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
9
17
|
import {
|
|
@@ -121,12 +129,12 @@ const CustomerNewCustomersWidget: React.FC<DashboardWidgetComponentProps<Custome
|
|
|
121
129
|
<label htmlFor="customer-new-customers-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
|
|
122
130
|
{t('customers.widgets.newCustomers.settings.pageSize')}
|
|
123
131
|
</label>
|
|
124
|
-
<
|
|
132
|
+
<Input
|
|
125
133
|
id="customer-new-customers-page-size"
|
|
126
134
|
type="number"
|
|
127
135
|
min={1}
|
|
128
136
|
max={20}
|
|
129
|
-
className="w-24
|
|
137
|
+
className="w-24"
|
|
130
138
|
value={hydrated.pageSize}
|
|
131
139
|
onChange={(event) => {
|
|
132
140
|
const next = Number(event.target.value)
|
|
@@ -138,21 +146,23 @@ const CustomerNewCustomersWidget: React.FC<DashboardWidgetComponentProps<Custome
|
|
|
138
146
|
<label htmlFor="customer-new-customers-kind" className="text-xs font-semibold uppercase text-muted-foreground">
|
|
139
147
|
{t('customers.widgets.newCustomers.settings.kind')}
|
|
140
148
|
</label>
|
|
141
|
-
<
|
|
142
|
-
id="customer-new-customers-kind"
|
|
143
|
-
className="w-full rounded-md border px-2 py-1 text-sm focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
|
149
|
+
<Select
|
|
144
150
|
value={hydrated.kind}
|
|
145
|
-
|
|
146
|
-
const value = event.target.value
|
|
151
|
+
onValueChange={(value) => {
|
|
147
152
|
if (value === 'person' || value === 'company' || value === 'all') {
|
|
148
153
|
onSettingsChange({ ...hydrated, kind: value })
|
|
149
154
|
}
|
|
150
155
|
}}
|
|
151
156
|
>
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
157
|
+
<SelectTrigger id="customer-new-customers-kind" size="sm">
|
|
158
|
+
<SelectValue />
|
|
159
|
+
</SelectTrigger>
|
|
160
|
+
<SelectContent>
|
|
161
|
+
<SelectItem value="all">{t('customers.widgets.newCustomers.filters.all')}</SelectItem>
|
|
162
|
+
<SelectItem value="person">{t('customers.widgets.newCustomers.filters.person')}</SelectItem>
|
|
163
|
+
<SelectItem value="company">{t('customers.widgets.newCustomers.filters.company')}</SelectItem>
|
|
164
|
+
</SelectContent>
|
|
165
|
+
</Select>
|
|
156
166
|
</div>
|
|
157
167
|
</div>
|
|
158
168
|
)
|
|
@@ -4,6 +4,7 @@ import * as React from 'react'
|
|
|
4
4
|
import Link from 'next/link'
|
|
5
5
|
import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
6
6
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
7
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
7
8
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
8
9
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
9
10
|
import { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'
|
|
@@ -104,12 +105,12 @@ const CustomerNewDealsWidget: React.FC<DashboardWidgetComponentProps<CustomerNew
|
|
|
104
105
|
<label htmlFor="customer-new-deals-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
|
|
105
106
|
{t('customers.widgets.newDeals.settings.pageSize')}
|
|
106
107
|
</label>
|
|
107
|
-
<
|
|
108
|
+
<Input
|
|
108
109
|
id="customer-new-deals-page-size"
|
|
109
110
|
type="number"
|
|
110
111
|
min={1}
|
|
111
112
|
max={20}
|
|
112
|
-
className="w-24
|
|
113
|
+
className="w-24"
|
|
113
114
|
value={hydrated.pageSize}
|
|
114
115
|
onChange={(event) => {
|
|
115
116
|
const next = Number(event.target.value)
|
|
@@ -5,6 +5,7 @@ import Link from 'next/link'
|
|
|
5
5
|
import type { DashboardWidgetComponentProps } from '@open-mercato/shared/modules/dashboard/widgets'
|
|
6
6
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
7
7
|
import { formatRelativeTime } from '@open-mercato/shared/lib/time'
|
|
8
|
+
import { Input } from '@open-mercato/ui/primitives/input'
|
|
8
9
|
import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
9
10
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
10
11
|
import {
|
|
@@ -136,12 +137,12 @@ const CustomerNextInteractionsWidget: React.FC<DashboardWidgetComponentProps<Cus
|
|
|
136
137
|
<label htmlFor="customer-next-interactions-page-size" className="text-xs font-semibold uppercase text-muted-foreground">
|
|
137
138
|
{t('customers.widgets.nextInteractions.settings.pageSize')}
|
|
138
139
|
</label>
|
|
139
|
-
<
|
|
140
|
+
<Input
|
|
140
141
|
id="customer-next-interactions-page-size"
|
|
141
142
|
type="number"
|
|
142
143
|
min={1}
|
|
143
144
|
max={20}
|
|
144
|
-
className="w-24
|
|
145
|
+
className="w-24"
|
|
145
146
|
value={hydrated.pageSize}
|
|
146
147
|
onChange={(event) => {
|
|
147
148
|
const next = Number(event.target.value)
|