@aglyn/plugins-crm 1.0.0-beta.218 → 1.0.0-beta.220
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/README.md +2 -0
- package/package.json +14 -14
- package/src/index.d.ts +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/components/companies-bulk-bar.js +12 -4
- package/src/lib/components/companies-bulk-bar.js.map +1 -1
- package/src/lib/components/company-detail-page.js +11 -0
- package/src/lib/components/company-detail-page.js.map +1 -1
- package/src/lib/components/company-edit-drawer.js +12 -2
- package/src/lib/components/company-edit-drawer.js.map +1 -1
- package/src/lib/components/company-import-drawer.d.ts +1 -1
- package/src/lib/components/company-picker.js +10 -3
- package/src/lib/components/company-picker.js.map +1 -1
- package/src/lib/components/contact-associations-card.js +4 -3
- package/src/lib/components/contact-associations-card.js.map +1 -1
- package/src/lib/components/contact-detail-page.d.ts +4 -4
- package/src/lib/components/contact-detail-page.js +50 -53
- package/src/lib/components/contact-detail-page.js.map +1 -1
- package/src/lib/components/contact-list-columns.d.ts +3 -0
- package/src/lib/components/contact-list-columns.js +21 -5
- package/src/lib/components/contact-list-columns.js.map +1 -1
- package/src/lib/components/contact-merge-dialog.js +2 -1
- package/src/lib/components/contact-merge-dialog.js.map +1 -1
- package/src/lib/components/contact-timeline-card.js +4 -3
- package/src/lib/components/contact-timeline-card.js.map +1 -1
- package/src/lib/components/contacts-bulk-bar.d.ts +3 -3
- package/src/lib/components/contacts-bulk-bar.js +24 -51
- package/src/lib/components/contacts-bulk-bar.js.map +1 -1
- package/src/lib/components/contacts-section.js +9 -3
- package/src/lib/components/contacts-section.js.map +1 -1
- package/src/lib/components/crm-booking-zone.d.ts +8 -2
- package/src/lib/components/crm-booking-zone.js.map +1 -1
- package/src/lib/components/crm-export-all-button.d.ts +1 -1
- package/src/lib/components/crm-export-all-button.js.map +1 -1
- package/src/lib/components/crm-glance-card.js +2 -1
- package/src/lib/components/crm-glance-card.js.map +1 -1
- package/src/lib/components/crm-send-email-dialog.js +9 -6
- package/src/lib/components/crm-send-email-dialog.js.map +1 -1
- package/src/lib/components/csv-import-drawer.js +2 -2
- package/src/lib/components/csv-import-drawer.js.map +1 -1
- package/src/lib/components/deal-detail-page.js +18 -2
- package/src/lib/components/deal-detail-page.js.map +1 -1
- package/src/lib/components/deal-edit-drawer.js +10 -0
- package/src/lib/components/deal-edit-drawer.js.map +1 -1
- package/src/lib/components/deal-products-card.js +27 -16
- package/src/lib/components/deal-products-card.js.map +1 -1
- package/src/lib/components/deals-bulk-bar.js +13 -5
- package/src/lib/components/deals-bulk-bar.js.map +1 -1
- package/src/lib/components/lead-campaigns-card.d.ts +4 -4
- package/src/lib/components/lead-campaigns-card.js +15 -8
- package/src/lib/components/lead-campaigns-card.js.map +1 -1
- package/src/lib/components/lead-detail-page.js +25 -5
- package/src/lib/components/lead-detail-page.js.map +1 -1
- package/src/lib/components/lead-properties-card.js +10 -0
- package/src/lib/components/lead-properties-card.js.map +1 -1
- package/src/lib/components/lead-status-chip.js +3 -1
- package/src/lib/components/lead-status-chip.js.map +1 -1
- package/src/lib/components/lead-surfaces-note.js +4 -5
- package/src/lib/components/lead-surfaces-note.js.map +1 -1
- package/src/lib/components/lead-unqualify-dialog.js +6 -0
- package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
- package/src/lib/components/leads-bulk-bar.js +34 -11
- package/src/lib/components/leads-bulk-bar.js.map +1 -1
- package/src/lib/components/leads-section.js +41 -8
- package/src/lib/components/leads-section.js.map +1 -1
- package/src/lib/components/new-lead-drawer.js +5 -4
- package/src/lib/components/new-lead-drawer.js.map +1 -1
- package/src/lib/components/org-lead-surfaces-note.js +6 -2
- package/src/lib/components/org-lead-surfaces-note.js.map +1 -1
- package/src/lib/components/recipes-card.js +9 -4
- package/src/lib/components/recipes-card.js.map +1 -1
- package/src/lib/components/record-sharing-card.d.ts +57 -0
- package/src/lib/components/record-sharing-card.js +244 -0
- package/src/lib/components/record-sharing-card.js.map +1 -0
- package/src/lib/components/reports/activity-card.js +4 -3
- package/src/lib/components/reports/activity-card.js.map +1 -1
- package/src/lib/components/reports/closed-deals-card.js +4 -3
- package/src/lib/components/reports/closed-deals-card.js.map +1 -1
- package/src/lib/components/reports/contacts-mix-card.js +3 -2
- package/src/lib/components/reports/contacts-mix-card.js.map +1 -1
- package/src/lib/components/reports/contacts-trend-card.js +2 -1
- package/src/lib/components/reports/contacts-trend-card.js.map +1 -1
- package/src/lib/components/reports/forecast-card.js +3 -2
- package/src/lib/components/reports/forecast-card.js.map +1 -1
- package/src/lib/components/reports/lead-funnel-card.js +8 -6
- package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
- package/src/lib/components/reports/pipeline-card.js +4 -3
- package/src/lib/components/reports/pipeline-card.js.map +1 -1
- package/src/lib/components/reports/report-format.d.ts +1 -1
- package/src/lib/components/reports/report-format.js.map +1 -1
- package/src/lib/components/reports/report-scope.d.ts +1 -1
- package/src/lib/components/reports/report-scope.js.map +1 -1
- package/src/lib/components/reports/source-conversion-card.js +2 -1
- package/src/lib/components/reports/source-conversion-card.js.map +1 -1
- package/src/lib/components/reports/tasks-card.js +2 -1
- package/src/lib/components/reports/tasks-card.js.map +1 -1
- package/src/lib/components/reports/won-lost-by-owner-card.js +3 -2
- package/src/lib/components/reports/won-lost-by-owner-card.js.map +1 -1
- package/src/lib/components/reports-section.js +4 -4
- package/src/lib/components/reports-section.js.map +1 -1
- package/src/lib/components/settings-section.js +7 -0
- package/src/lib/components/settings-section.js.map +1 -1
- package/src/lib/components/share-records-dialog.d.ts +28 -0
- package/src/lib/components/share-records-dialog.js +184 -0
- package/src/lib/components/share-records-dialog.js.map +1 -0
- package/src/lib/components/sharing-rule-drawer.d.ts +37 -0
- package/src/lib/components/sharing-rule-drawer.js +374 -0
- package/src/lib/components/sharing-rule-drawer.js.map +1 -0
- package/src/lib/components/sharing-rules-card.d.ts +24 -0
- package/src/lib/components/sharing-rules-card.js +287 -0
- package/src/lib/components/sharing-rules-card.js.map +1 -0
- package/src/lib/components/use-crm-api.d.ts +1 -1
- package/src/lib/components/use-crm-api.js.map +1 -1
- package/src/lib/components/use-site-route-context.d.ts +25 -0
- package/src/lib/components/use-site-route-context.js +58 -0
- package/src/lib/components/use-site-route-context.js.map +1 -0
- package/src/lib/constants/api-routes.d.ts +31 -0
- package/src/lib/constants/api-routes.js +27 -1
- package/src/lib/constants/api-routes.js.map +1 -1
- package/src/lib/constants/bundle-common.d.ts +2 -0
- package/src/lib/constants/bundle-common.js +1 -0
- package/src/lib/constants/bundle-common.js.map +1 -1
- package/src/lib/declarations.console-server.d.ts +41 -0
- package/src/lib/declarations.console-server.js +115 -0
- package/src/lib/declarations.console-server.js.map +1 -0
- package/src/lib/declarations.server.d.ts +12 -0
- package/src/lib/declarations.server.js +84 -1
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/hooks/use-contact-remove.d.ts +35 -0
- package/src/lib/hooks/use-contact-remove.js +77 -0
- package/src/lib/hooks/use-contact-remove.js.map +1 -0
- package/src/lib/hooks/use-crm-campaigns.d.ts +2 -2
- package/src/lib/hooks/use-crm-campaigns.js +3 -3
- package/src/lib/hooks/use-crm-campaigns.js.map +1 -1
- package/src/lib/hooks/use-crm-sharing.d.ts +30 -0
- package/src/lib/hooks/use-crm-sharing.js +109 -0
- package/src/lib/hooks/use-crm-sharing.js.map +1 -0
- package/src/lib/model/campaign-filing-activity.d.ts +1 -1
- package/src/lib/model/campaign-filing-activity.js +1 -1
- package/src/lib/model/campaign-filing-activity.js.map +1 -1
- package/src/lib/model/companies-csv.d.ts +1 -1
- package/src/lib/model/companies-csv.js +2 -2
- package/src/lib/model/companies-csv.js.map +1 -1
- package/src/lib/model/contact-holder.d.ts +68 -0
- package/src/lib/model/contact-holder.js +129 -0
- package/src/lib/model/contact-holder.js.map +1 -0
- package/src/lib/model/contact-interaction-links.d.ts +46 -0
- package/src/lib/model/contact-interaction-links.js +65 -0
- package/src/lib/model/contact-interaction-links.js.map +1 -0
- package/src/lib/model/contact-merge.d.ts +136 -0
- package/src/lib/model/contact-merge.js +412 -0
- package/src/lib/model/contact-merge.js.map +1 -0
- package/src/lib/model/contact-record.d.ts +7 -1
- package/src/lib/model/contact-record.js +7 -6
- package/src/lib/model/contact-record.js.map +1 -1
- package/src/lib/model/contact-remove.d.ts +48 -0
- package/src/lib/model/contact-remove.js +22 -0
- package/src/lib/model/contact-remove.js.map +1 -0
- package/src/lib/model/contacts-bulk-writes.d.ts +2 -71
- package/src/lib/model/contacts-bulk-writes.js +2 -82
- package/src/lib/model/contacts-bulk-writes.js.map +1 -1
- package/src/lib/model/contacts-csv.d.ts +2 -2
- package/src/lib/model/contacts-csv.js +2 -2
- package/src/lib/model/contacts-csv.js.map +1 -1
- package/src/lib/model/crm-csv.d.ts +239 -0
- package/src/lib/model/crm-csv.js +467 -0
- package/src/lib/model/crm-csv.js.map +1 -0
- package/src/lib/model/crm-digest.d.ts +227 -0
- package/src/lib/model/crm-digest.js +336 -0
- package/src/lib/model/crm-digest.js.map +1 -0
- package/src/lib/model/crm-import.d.ts +7 -1
- package/src/lib/model/crm-import.js +2 -1
- package/src/lib/model/crm-import.js.map +1 -1
- package/src/lib/model/crm-inbound.d.ts +162 -0
- package/src/lib/model/crm-inbound.js +208 -0
- package/src/lib/model/crm-inbound.js.map +1 -0
- package/src/lib/model/crm-lead-import.d.ts +1 -1
- package/src/lib/model/crm-lead-import.js +4 -4
- package/src/lib/model/crm-lead-import.js.map +1 -1
- package/src/lib/model/crm-record-routes.d.ts +5 -0
- package/src/lib/model/crm-record-routes.js +7 -0
- package/src/lib/model/crm-record-routes.js.map +1 -1
- package/src/lib/model/crm-reports.d.ts +467 -0
- package/src/lib/model/crm-reports.js +667 -0
- package/src/lib/model/crm-reports.js.map +1 -0
- package/src/lib/model/crm-routes.d.ts +6 -5
- package/src/lib/model/crm-routes.js +7 -7
- package/src/lib/model/crm-routes.js.map +1 -1
- package/src/lib/model/crm-search-sources.d.ts +15 -0
- package/src/lib/model/crm-search-sources.js +162 -0
- package/src/lib/model/crm-search-sources.js.map +1 -0
- package/src/lib/model/crm-sharing-api.d.ts +32 -0
- package/src/lib/model/crm-sharing-api.js +59 -0
- package/src/lib/model/crm-sharing-api.js.map +1 -0
- package/src/lib/model/crm-sharing.d.ts +333 -0
- package/src/lib/model/crm-sharing.js +603 -0
- package/src/lib/model/crm-sharing.js.map +1 -0
- package/src/lib/model/deals-csv.d.ts +1 -1
- package/src/lib/model/deals-csv.js +4 -5
- package/src/lib/model/deals-csv.js.map +1 -1
- package/src/lib/model/lead-filters.d.ts +5 -4
- package/src/lib/model/lead-filters.js +7 -5
- package/src/lib/model/lead-filters.js.map +1 -1
- package/src/lib/model/leads-csv.d.ts +1 -1
- package/src/lib/model/leads-csv.js +1 -1
- package/src/lib/model/leads-csv.js.map +1 -1
- package/src/lib/model/tasks-csv.d.ts +1 -1
- package/src/lib/model/tasks-csv.js +1 -1
- package/src/lib/model/tasks-csv.js.map +1 -1
- package/src/lib/plan-entitlements.d.ts +75 -0
- package/src/lib/plan-entitlements.js +56 -0
- package/src/lib/plan-entitlements.js.map +1 -0
- package/src/lib/plugin.js +39 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/server/api-v1/contacts-merge.d.ts +20 -0
- package/src/lib/server/api-v1/contacts-merge.js +120 -0
- package/src/lib/server/api-v1/contacts-merge.js.map +1 -0
- package/src/lib/server/api-v1/contacts.d.ts +18 -0
- package/src/lib/server/api-v1/contacts.js +1076 -0
- package/src/lib/server/api-v1/contacts.js.map +1 -0
- package/src/lib/server/api-v1/crm-activities.d.ts +18 -0
- package/src/lib/server/api-v1/crm-activities.js +269 -0
- package/src/lib/server/api-v1/crm-activities.js.map +1 -0
- package/src/lib/server/api-v1/crm-companies.d.ts +18 -0
- package/src/lib/server/api-v1/crm-companies.js +391 -0
- package/src/lib/server/api-v1/crm-companies.js.map +1 -0
- package/src/lib/server/api-v1/crm-deals.d.ts +18 -0
- package/src/lib/server/api-v1/crm-deals.js +631 -0
- package/src/lib/server/api-v1/crm-deals.js.map +1 -0
- package/src/lib/server/api-v1/crm-email-templates.d.ts +18 -0
- package/src/lib/server/api-v1/crm-email-templates.js +336 -0
- package/src/lib/server/api-v1/crm-email-templates.js.map +1 -0
- package/src/lib/server/api-v1/crm-leads.d.ts +18 -0
- package/src/lib/server/api-v1/crm-leads.js +833 -0
- package/src/lib/server/api-v1/crm-leads.js.map +1 -0
- package/src/lib/server/api-v1/crm-pipelines.d.ts +76 -0
- package/src/lib/server/api-v1/crm-pipelines.js +146 -0
- package/src/lib/server/api-v1/crm-pipelines.js.map +1 -0
- package/src/lib/server/api-v1/crm-shared.d.ts +271 -0
- package/src/lib/server/api-v1/crm-shared.js +436 -0
- package/src/lib/server/api-v1/crm-shared.js.map +1 -0
- package/src/lib/server/api-v1/crm-tasks.d.ts +18 -0
- package/src/lib/server/api-v1/crm-tasks.js +398 -0
- package/src/lib/server/api-v1/crm-tasks.js.map +1 -0
- package/src/lib/server/api-v1/openapi.d.ts +29 -0
- package/src/lib/server/api-v1/openapi.js +985 -0
- package/src/lib/server/api-v1/openapi.js.map +1 -0
- package/src/lib/server/api-v1/usage.d.ts +26 -0
- package/src/lib/server/api-v1/usage.js +73 -0
- package/src/lib/server/api-v1/usage.js.map +1 -0
- package/src/lib/server/campaign-filing-activity.d.ts +1 -1
- package/src/lib/server/campaign-filing-activity.js +7 -11
- package/src/lib/server/campaign-filing-activity.js.map +1 -1
- package/src/lib/server/capture-contact.js +15 -4
- package/src/lib/server/capture-contact.js.map +1 -1
- package/src/lib/server/consent-group-participant.js +1 -1
- package/src/lib/server/consent-group-participant.js.map +1 -1
- package/src/lib/server/contact-email-engagement.d.ts +33 -0
- package/src/lib/server/contact-email-engagement.js +146 -0
- package/src/lib/server/contact-email-engagement.js.map +1 -0
- package/src/lib/server/contact-lifecycle-floor.d.ts +89 -0
- package/src/lib/server/contact-lifecycle-floor.js +91 -0
- package/src/lib/server/contact-lifecycle-floor.js.map +1 -0
- package/src/lib/server/contact-remove.d.ts +75 -0
- package/src/lib/server/contact-remove.js +244 -0
- package/src/lib/server/contact-remove.js.map +1 -0
- package/src/lib/server/contact-update.js +4 -3
- package/src/lib/server/contact-update.js.map +1 -1
- package/src/lib/server/contacts-import.d.ts +47 -11
- package/src/lib/server/contacts-import.js +171 -71
- package/src/lib/server/contacts-import.js.map +1 -1
- package/src/lib/server/contacts-merge.d.ts +1 -1
- package/src/lib/server/contacts-merge.js +3 -2
- package/src/lib/server/contacts-merge.js.map +1 -1
- package/src/lib/server/container-detach.d.ts +31 -0
- package/src/lib/server/container-detach.js +115 -0
- package/src/lib/server/container-detach.js.map +1 -0
- package/src/lib/server/convert-host-lead.d.ts +189 -0
- package/src/lib/server/convert-host-lead.js +518 -0
- package/src/lib/server/convert-host-lead.js.map +1 -0
- package/src/lib/server/crm-inbound-email.d.ts +162 -0
- package/src/lib/server/crm-inbound-email.js +259 -0
- package/src/lib/server/crm-inbound-email.js.map +1 -0
- package/src/lib/server/crm-records-meter.d.ts +50 -0
- package/src/lib/server/crm-records-meter.js +126 -0
- package/src/lib/server/crm-records-meter.js.map +1 -0
- package/src/lib/server/crm-sharing.d.ts +108 -0
- package/src/lib/server/crm-sharing.js +790 -0
- package/src/lib/server/crm-sharing.js.map +1 -0
- package/src/lib/server/daily-digest-route.d.ts +101 -0
- package/src/lib/server/daily-digest-route.js +578 -0
- package/src/lib/server/daily-digest-route.js.map +1 -0
- package/src/lib/server/export-route.d.ts +60 -0
- package/src/lib/server/export-route.js +447 -0
- package/src/lib/server/export-route.js.map +1 -0
- package/src/lib/server/inbound-address.js +5 -3
- package/src/lib/server/inbound-address.js.map +1 -1
- package/src/lib/server/inbound-route.d.ts +74 -0
- package/src/lib/server/inbound-route.js +260 -0
- package/src/lib/server/inbound-route.js.map +1 -0
- package/src/lib/server/lead-campaign-carry.js +3 -3
- package/src/lib/server/lead-campaign-carry.js.map +1 -1
- package/src/lib/server/lead-convert.d.ts +1 -1
- package/src/lib/server/lead-convert.js +2 -2
- package/src/lib/server/lead-convert.js.map +1 -1
- package/src/lib/server/lead-create.d.ts +1 -1
- package/src/lib/server/lead-create.js +10 -15
- package/src/lib/server/lead-create.js.map +1 -1
- package/src/lib/server/lead-nurturing.d.ts +23 -0
- package/src/lib/server/lead-nurturing.js +82 -0
- package/src/lib/server/lead-nurturing.js.map +1 -0
- package/src/lib/server/leads-import.js +7 -7
- package/src/lib/server/leads-import.js.map +1 -1
- package/src/lib/server/merge-contacts.d.ts +55 -0
- package/src/lib/server/merge-contacts.js +274 -0
- package/src/lib/server/merge-contacts.js.map +1 -0
- package/src/lib/server/pipeline-record-index.d.ts +36 -0
- package/src/lib/server/pipeline-record-index.js +87 -0
- package/src/lib/server/pipeline-record-index.js.map +1 -0
- package/src/lib/server/record-email-state.js +23 -0
- package/src/lib/server/record-email-state.js.map +1 -1
- package/src/lib/server/record-facts.js +2 -1
- package/src/lib/server/record-facts.js.map +1 -1
- package/src/lib/server/record-timeline.d.ts +12 -0
- package/src/lib/server/record-timeline.js +127 -15
- package/src/lib/server/record-timeline.js.map +1 -1
- package/src/lib/server/task-reminders-route.d.ts +82 -0
- package/src/lib/server/task-reminders-route.js +499 -0
- package/src/lib/server/task-reminders-route.js.map +1 -0
- package/src/lib/server/task-routes.d.ts +2 -0
- package/src/lib/server/task-routes.js +22 -3
- package/src/lib/server/task-routes.js.map +1 -1
- package/src/lib/server-deal-stage.js +2 -1
- package/src/lib/server-deal-stage.js.map +1 -1
- package/src/lib/server.d.ts +5 -2
- package/src/lib/server.js +47 -2
- package/src/lib/server.js.map +1 -1
- package/src/lib/testing/stand-in-site-record-routes.d.ts +26 -0
- package/src/lib/testing/stand-in-site-record-routes.js +55 -0
- package/src/lib/testing/stand-in-site-record-routes.js.map +1 -0
- package/src/lib/usage-axes.d.ts +35 -0
- package/src/lib/usage-axes.js +75 -0
- package/src/lib/usage-axes.js.map +1 -0
- package/src/lib/components/use-emails-hub-path.d.ts +0 -24
- package/src/lib/components/use-emails-hub-path.js +0 -59
- package/src/lib/components/use-emails-hub-path.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { OrgMemberOption } from '../hooks/use-org-member-directory';
|
|
2
|
+
import { type CrmShareAccess, type CrmSharingCriteria, type CrmSharingObject, type CrmSharingRule, type CrmSharingSite } from '../model/crm-sharing';
|
|
3
|
+
/** What the drawer hands back: the rule as `crm/sharing` `rule-save` reads it. */
|
|
4
|
+
export interface SharingRuleDraft {
|
|
5
|
+
id?: string;
|
|
6
|
+
name: string;
|
|
7
|
+
object: CrmSharingObject;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
sourceHostIds: string[];
|
|
10
|
+
criteria: CrmSharingCriteria;
|
|
11
|
+
targets: 'all' | string[];
|
|
12
|
+
access: CrmShareAccess;
|
|
13
|
+
}
|
|
14
|
+
export interface SharingRuleDrawerProps {
|
|
15
|
+
open: boolean;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
/** The rule being edited, or `null` for a new one. */
|
|
18
|
+
rule: CrmSharingRule | null;
|
|
19
|
+
sites: readonly CrmSharingSite[];
|
|
20
|
+
members: readonly OrgMemberOption[];
|
|
21
|
+
campaigns: readonly {
|
|
22
|
+
value: string;
|
|
23
|
+
label: string;
|
|
24
|
+
}[];
|
|
25
|
+
busy: boolean;
|
|
26
|
+
onSubmit: (draft: SharingRuleDraft) => void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A sharing rule, three parts (AGL-3336): WHICH RECORDS (an object, the
|
|
30
|
+
* sites that captured them, optional criteria), SHARED WITH (sites, or all
|
|
31
|
+
* sites), and ACCESS (read-only unless edit is chosen).
|
|
32
|
+
*/
|
|
33
|
+
export declare function SharingRuleDrawer(props: SharingRuleDrawerProps): import("react").JSX.Element;
|
|
34
|
+
export declare namespace SharingRuleDrawer {
|
|
35
|
+
var displayName: string;
|
|
36
|
+
}
|
|
37
|
+
export default SharingRuleDrawer;
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ 'use client';
|
|
17
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
+
import { CONTACT_LIFECYCLE_STAGE_LABELS, CONTACT_LIFECYCLE_STAGES, CRM_LEAD_STATUS_LABELS, CRM_LEAD_STATUSES, crmMemberPickerLabel } from "@aglyn/aglyn";
|
|
20
|
+
import { hostIdsFromScope, ORG_SCOPE_TOKEN } from "@aglyn/aglyn/app-utils/scope-tokens";
|
|
21
|
+
import { Button, Checkbox, Drawer, FormControl, FormControlLabel, FormGroup, FormHelperText, FormLabel, MenuItem, Radio, RadioGroup, Stack, Switch, TextField, Typography } from "@mui/material";
|
|
22
|
+
import { useEffect, useState } from "react";
|
|
23
|
+
import { CRM_SHARING_CRITERIA_FOR, CRM_SHARING_OBJECT_LABELS, CRM_SHARING_OBJECTS } from "../model/crm-sharing.js";
|
|
24
|
+
const splitList = (text)=>[
|
|
25
|
+
...new Set(text.split(',').map((entry)=>entry.trim()).filter(Boolean))
|
|
26
|
+
].slice(0, 20);
|
|
27
|
+
/**
|
|
28
|
+
* A sharing rule, three parts (AGL-3336): WHICH RECORDS (an object, the
|
|
29
|
+
* sites that captured them, optional criteria), SHARED WITH (sites, or all
|
|
30
|
+
* sites), and ACCESS (read-only unless edit is chosen).
|
|
31
|
+
*/ export function SharingRuleDrawer(props) {
|
|
32
|
+
const { open, onClose, rule, sites, members, campaigns, busy, onSubmit } = props;
|
|
33
|
+
const [name, setName] = useState('');
|
|
34
|
+
const [object, setObject] = useState('leads');
|
|
35
|
+
const [enabled, setEnabled] = useState(true);
|
|
36
|
+
const [sourceHostIds, setSourceHostIds] = useState([]);
|
|
37
|
+
const [leadSources, setLeadSources] = useState('');
|
|
38
|
+
const [tags, setTags] = useState('');
|
|
39
|
+
const [stages, setStages] = useState([]);
|
|
40
|
+
const [ownerUids, setOwnerUids] = useState([]);
|
|
41
|
+
const [campaignIds, setCampaignIds] = useState([]);
|
|
42
|
+
const [allSites, setAllSites] = useState(true);
|
|
43
|
+
const [targets, setTargets] = useState([]);
|
|
44
|
+
const [access, setAccess] = useState('read');
|
|
45
|
+
useEffect(()=>{
|
|
46
|
+
var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
|
|
47
|
+
if (!open) return;
|
|
48
|
+
setName((_ref = rule == null ? void 0 : rule.name) != null ? _ref : '');
|
|
49
|
+
setObject((_ref1 = rule == null ? void 0 : rule.object) != null ? _ref1 : 'leads');
|
|
50
|
+
setEnabled((_ref2 = rule == null ? void 0 : rule.enabled) != null ? _ref2 : true);
|
|
51
|
+
setSourceHostIds((_ref3 = rule == null ? void 0 : rule.sourceHostIds) != null ? _ref3 : []);
|
|
52
|
+
setLeadSources(((_ref4 = rule == null ? void 0 : rule.criteria.leadSources) != null ? _ref4 : []).join(', '));
|
|
53
|
+
setTags(((_ref5 = rule == null ? void 0 : rule.criteria.tags) != null ? _ref5 : []).join(', '));
|
|
54
|
+
setStages((_ref6 = rule == null ? void 0 : rule.criteria.stages) != null ? _ref6 : []);
|
|
55
|
+
setOwnerUids((_ref7 = rule == null ? void 0 : rule.criteria.ownerUids) != null ? _ref7 : []);
|
|
56
|
+
setCampaignIds((_ref8 = rule == null ? void 0 : rule.criteria.campaignIds) != null ? _ref8 : []);
|
|
57
|
+
setAllSites(rule ? rule.targets.includes(ORG_SCOPE_TOKEN) : true);
|
|
58
|
+
setTargets(rule ? hostIdsFromScope(rule.targets) : []);
|
|
59
|
+
setAccess((_ref9 = rule == null ? void 0 : rule.access) != null ? _ref9 : 'read');
|
|
60
|
+
}, [
|
|
61
|
+
open,
|
|
62
|
+
rule
|
|
63
|
+
]);
|
|
64
|
+
const offers = CRM_SHARING_CRITERIA_FOR[object];
|
|
65
|
+
const stageOptions = object === 'leads' ? CRM_LEAD_STATUSES.map((value)=>({
|
|
66
|
+
value,
|
|
67
|
+
label: CRM_LEAD_STATUS_LABELS[value]
|
|
68
|
+
})) : object === 'contacts' ? CONTACT_LIFECYCLE_STAGES.map((value)=>({
|
|
69
|
+
value,
|
|
70
|
+
label: CONTACT_LIFECYCLE_STAGE_LABELS[value]
|
|
71
|
+
})) : [];
|
|
72
|
+
const canSubmit = !busy && name.trim().length > 0 && (allSites || targets.length > 0);
|
|
73
|
+
const submit = ()=>{
|
|
74
|
+
if (!canSubmit) return;
|
|
75
|
+
const criteria = {};
|
|
76
|
+
if (offers.includes('leadSources') && splitList(leadSources).length) {
|
|
77
|
+
criteria.leadSources = splitList(leadSources);
|
|
78
|
+
}
|
|
79
|
+
if (offers.includes('tags') && splitList(tags).length) {
|
|
80
|
+
criteria.tags = splitList(tags).map((tag)=>tag.toLowerCase());
|
|
81
|
+
}
|
|
82
|
+
if (stageOptions.length && stages.length) criteria.stages = stages;
|
|
83
|
+
if (offers.includes('ownerUids') && ownerUids.length) criteria.ownerUids = ownerUids;
|
|
84
|
+
if (offers.includes('campaignIds') && campaignIds.length) criteria.campaignIds = campaignIds;
|
|
85
|
+
onSubmit(_extends({}, rule ? {
|
|
86
|
+
id: rule.id
|
|
87
|
+
} : {}, {
|
|
88
|
+
name: name.trim(),
|
|
89
|
+
object,
|
|
90
|
+
enabled,
|
|
91
|
+
sourceHostIds,
|
|
92
|
+
criteria,
|
|
93
|
+
targets: allSites ? 'all' : targets,
|
|
94
|
+
access
|
|
95
|
+
}));
|
|
96
|
+
};
|
|
97
|
+
const siteName = (id)=>{
|
|
98
|
+
var _ref;
|
|
99
|
+
var _sites_find;
|
|
100
|
+
return (_ref = (_sites_find = sites.find((site)=>site.id === id)) == null ? void 0 : _sites_find.name) != null ? _ref : id;
|
|
101
|
+
};
|
|
102
|
+
return /*#__PURE__*/ _jsx(Drawer, {
|
|
103
|
+
anchor: "right",
|
|
104
|
+
open: open,
|
|
105
|
+
onClose: busy ? undefined : onClose,
|
|
106
|
+
children: /*#__PURE__*/ _jsxs(Stack, {
|
|
107
|
+
spacing: 2,
|
|
108
|
+
sx: {
|
|
109
|
+
width: 400,
|
|
110
|
+
maxWidth: '100vw',
|
|
111
|
+
p: 3
|
|
112
|
+
},
|
|
113
|
+
children: [
|
|
114
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
115
|
+
variant: "h6",
|
|
116
|
+
children: rule ? 'Edit sharing rule' : 'New sharing rule'
|
|
117
|
+
}),
|
|
118
|
+
/*#__PURE__*/ _jsx(Typography, {
|
|
119
|
+
variant: "body2",
|
|
120
|
+
color: "text.secondary",
|
|
121
|
+
children: 'Shares every record the rule matches — the ones you already have, and every one ' + 'captured or changed from now on. Sharing lets a site see and work a record; it ' + 'never shares the person’s consent.'
|
|
122
|
+
}),
|
|
123
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
124
|
+
size: "small",
|
|
125
|
+
label: "Name",
|
|
126
|
+
value: name,
|
|
127
|
+
onChange: (event)=>setName(event.target.value),
|
|
128
|
+
slotProps: {
|
|
129
|
+
htmlInput: {
|
|
130
|
+
maxLength: 120
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
required: true,
|
|
134
|
+
fullWidth: true
|
|
135
|
+
}),
|
|
136
|
+
/*#__PURE__*/ _jsx(FormLabel, {
|
|
137
|
+
children: 'Which records'
|
|
138
|
+
}),
|
|
139
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
140
|
+
select: true,
|
|
141
|
+
size: "small",
|
|
142
|
+
label: "Records",
|
|
143
|
+
value: object,
|
|
144
|
+
onChange: (event)=>{
|
|
145
|
+
setObject(event.target.value);
|
|
146
|
+
setStages([]);
|
|
147
|
+
},
|
|
148
|
+
disabled: Boolean(rule),
|
|
149
|
+
helperText: rule ? 'A rule keeps the kind of record it was made for.' : undefined,
|
|
150
|
+
fullWidth: true,
|
|
151
|
+
children: CRM_SHARING_OBJECTS.map((option)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
152
|
+
value: option,
|
|
153
|
+
children: CRM_SHARING_OBJECT_LABELS[option].many
|
|
154
|
+
}, option))
|
|
155
|
+
}),
|
|
156
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
157
|
+
select: true,
|
|
158
|
+
size: "small",
|
|
159
|
+
label: "Captured on",
|
|
160
|
+
value: sourceHostIds,
|
|
161
|
+
onChange: (event)=>{
|
|
162
|
+
const value = event.target.value;
|
|
163
|
+
setSourceHostIds(Array.isArray(value) ? value : String(value).split(','));
|
|
164
|
+
},
|
|
165
|
+
slotProps: {
|
|
166
|
+
select: {
|
|
167
|
+
multiple: true,
|
|
168
|
+
displayEmpty: true,
|
|
169
|
+
renderValue: (value)=>value.length ? value.map(siteName).join(', ') : 'Any site'
|
|
170
|
+
},
|
|
171
|
+
inputLabel: {
|
|
172
|
+
shrink: true
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
helperText: "The sites the record was captured or created on.",
|
|
176
|
+
fullWidth: true,
|
|
177
|
+
children: sites.map((site)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
178
|
+
value: site.id,
|
|
179
|
+
children: site.name
|
|
180
|
+
}, site.id))
|
|
181
|
+
}),
|
|
182
|
+
offers.includes('leadSources') ? /*#__PURE__*/ _jsx(TextField, {
|
|
183
|
+
size: "small",
|
|
184
|
+
label: "Lead source",
|
|
185
|
+
value: leadSources,
|
|
186
|
+
onChange: (event)=>setLeadSources(event.target.value),
|
|
187
|
+
helperText: "Any of these, separated by commas. Blank for any source.",
|
|
188
|
+
fullWidth: true
|
|
189
|
+
}) : null,
|
|
190
|
+
offers.includes('tags') ? /*#__PURE__*/ _jsx(TextField, {
|
|
191
|
+
size: "small",
|
|
192
|
+
label: "Tags",
|
|
193
|
+
value: tags,
|
|
194
|
+
onChange: (event)=>setTags(event.target.value),
|
|
195
|
+
helperText: "Any of these, separated by commas. Blank for any tags.",
|
|
196
|
+
fullWidth: true
|
|
197
|
+
}) : null,
|
|
198
|
+
stageOptions.length ? /*#__PURE__*/ _jsx(TextField, {
|
|
199
|
+
select: true,
|
|
200
|
+
size: "small",
|
|
201
|
+
label: object === 'leads' ? 'Status' : 'Lifecycle stage',
|
|
202
|
+
value: stages,
|
|
203
|
+
onChange: (event)=>{
|
|
204
|
+
const value = event.target.value;
|
|
205
|
+
setStages(Array.isArray(value) ? value : String(value).split(','));
|
|
206
|
+
},
|
|
207
|
+
slotProps: {
|
|
208
|
+
select: {
|
|
209
|
+
multiple: true,
|
|
210
|
+
displayEmpty: true,
|
|
211
|
+
renderValue: (value)=>value.length ? value.map((id)=>{
|
|
212
|
+
var _ref;
|
|
213
|
+
var _stageOptions_find;
|
|
214
|
+
return (_ref = (_stageOptions_find = stageOptions.find((option)=>option.value === id)) == null ? void 0 : _stageOptions_find.label) != null ? _ref : id;
|
|
215
|
+
}).join(', ') : 'Any'
|
|
216
|
+
},
|
|
217
|
+
inputLabel: {
|
|
218
|
+
shrink: true
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
fullWidth: true,
|
|
222
|
+
children: stageOptions.map((option)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
223
|
+
value: option.value,
|
|
224
|
+
children: option.label
|
|
225
|
+
}, option.value))
|
|
226
|
+
}) : null,
|
|
227
|
+
offers.includes('campaignIds') && campaigns.length ? /*#__PURE__*/ _jsx(TextField, {
|
|
228
|
+
select: true,
|
|
229
|
+
size: "small",
|
|
230
|
+
label: "Campaign",
|
|
231
|
+
value: campaignIds,
|
|
232
|
+
onChange: (event)=>{
|
|
233
|
+
const value = event.target.value;
|
|
234
|
+
setCampaignIds(Array.isArray(value) ? value : String(value).split(','));
|
|
235
|
+
},
|
|
236
|
+
slotProps: {
|
|
237
|
+
select: {
|
|
238
|
+
multiple: true,
|
|
239
|
+
displayEmpty: true,
|
|
240
|
+
renderValue: (value)=>value.length ? value.map((id)=>{
|
|
241
|
+
var _ref;
|
|
242
|
+
var _campaigns_find;
|
|
243
|
+
return (_ref = (_campaigns_find = campaigns.find((option)=>option.value === id)) == null ? void 0 : _campaigns_find.label) != null ? _ref : id;
|
|
244
|
+
}).join(', ') : 'Any'
|
|
245
|
+
},
|
|
246
|
+
inputLabel: {
|
|
247
|
+
shrink: true
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
fullWidth: true,
|
|
251
|
+
children: campaigns.map((option)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
252
|
+
value: option.value,
|
|
253
|
+
children: option.label
|
|
254
|
+
}, option.value))
|
|
255
|
+
}) : null,
|
|
256
|
+
/*#__PURE__*/ _jsx(TextField, {
|
|
257
|
+
select: true,
|
|
258
|
+
size: "small",
|
|
259
|
+
label: "Owner",
|
|
260
|
+
value: ownerUids,
|
|
261
|
+
onChange: (event)=>{
|
|
262
|
+
const value = event.target.value;
|
|
263
|
+
setOwnerUids(Array.isArray(value) ? value : String(value).split(','));
|
|
264
|
+
},
|
|
265
|
+
slotProps: {
|
|
266
|
+
select: {
|
|
267
|
+
multiple: true,
|
|
268
|
+
displayEmpty: true,
|
|
269
|
+
renderValue: (value)=>value.length ? value.map((uid)=>{
|
|
270
|
+
const member = members.find((entry)=>entry.uid === uid);
|
|
271
|
+
return member ? crmMemberPickerLabel(member) : uid;
|
|
272
|
+
}).join(', ') : 'Anyone'
|
|
273
|
+
},
|
|
274
|
+
inputLabel: {
|
|
275
|
+
shrink: true
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
fullWidth: true,
|
|
279
|
+
children: members.map((member)=>/*#__PURE__*/ _jsx(MenuItem, {
|
|
280
|
+
value: member.uid,
|
|
281
|
+
children: crmMemberPickerLabel(member)
|
|
282
|
+
}, member.uid))
|
|
283
|
+
}),
|
|
284
|
+
/*#__PURE__*/ _jsxs(FormControl, {
|
|
285
|
+
children: [
|
|
286
|
+
/*#__PURE__*/ _jsx(FormLabel, {
|
|
287
|
+
children: 'Shared with'
|
|
288
|
+
}),
|
|
289
|
+
/*#__PURE__*/ _jsxs(FormGroup, {
|
|
290
|
+
children: [
|
|
291
|
+
/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
292
|
+
control: /*#__PURE__*/ _jsx(Checkbox, {
|
|
293
|
+
checked: allSites,
|
|
294
|
+
onChange: (event)=>setAllSites(event.target.checked)
|
|
295
|
+
}),
|
|
296
|
+
label: "All sites, including sites added later"
|
|
297
|
+
}),
|
|
298
|
+
sites.map((site)=>/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
299
|
+
control: /*#__PURE__*/ _jsx(Checkbox, {
|
|
300
|
+
checked: allSites || targets.includes(site.id),
|
|
301
|
+
disabled: allSites,
|
|
302
|
+
onChange: (event)=>setTargets((current)=>event.target.checked ? [
|
|
303
|
+
...current,
|
|
304
|
+
site.id
|
|
305
|
+
] : current.filter((id)=>id !== site.id))
|
|
306
|
+
}),
|
|
307
|
+
label: site.name
|
|
308
|
+
}, site.id))
|
|
309
|
+
]
|
|
310
|
+
})
|
|
311
|
+
]
|
|
312
|
+
}),
|
|
313
|
+
/*#__PURE__*/ _jsxs(FormControl, {
|
|
314
|
+
children: [
|
|
315
|
+
/*#__PURE__*/ _jsx(FormLabel, {
|
|
316
|
+
children: 'Access'
|
|
317
|
+
}),
|
|
318
|
+
/*#__PURE__*/ _jsxs(RadioGroup, {
|
|
319
|
+
value: access,
|
|
320
|
+
onChange: (event)=>setAccess(event.target.value === 'edit' ? 'edit' : 'read'),
|
|
321
|
+
children: [
|
|
322
|
+
/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
323
|
+
value: "read",
|
|
324
|
+
control: /*#__PURE__*/ _jsx(Radio, {
|
|
325
|
+
size: "small"
|
|
326
|
+
}),
|
|
327
|
+
label: "Read-only"
|
|
328
|
+
}),
|
|
329
|
+
/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
330
|
+
value: "edit",
|
|
331
|
+
control: /*#__PURE__*/ _jsx(Radio, {
|
|
332
|
+
size: "small"
|
|
333
|
+
}),
|
|
334
|
+
label: "Read and edit"
|
|
335
|
+
})
|
|
336
|
+
]
|
|
337
|
+
})
|
|
338
|
+
]
|
|
339
|
+
}),
|
|
340
|
+
/*#__PURE__*/ _jsx(FormControlLabel, {
|
|
341
|
+
control: /*#__PURE__*/ _jsx(Switch, {
|
|
342
|
+
checked: enabled,
|
|
343
|
+
onChange: (event)=>setEnabled(event.target.checked)
|
|
344
|
+
}),
|
|
345
|
+
label: "On"
|
|
346
|
+
}),
|
|
347
|
+
!enabled ? /*#__PURE__*/ _jsx(FormHelperText, {
|
|
348
|
+
children: 'Off keeps the rule and takes away what it shared.'
|
|
349
|
+
}) : null,
|
|
350
|
+
/*#__PURE__*/ _jsxs(Stack, {
|
|
351
|
+
direction: "row",
|
|
352
|
+
spacing: 1,
|
|
353
|
+
children: [
|
|
354
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
355
|
+
variant: "contained",
|
|
356
|
+
disabled: !canSubmit,
|
|
357
|
+
onClick: submit,
|
|
358
|
+
children: rule ? 'Save rule' : 'Add rule'
|
|
359
|
+
}),
|
|
360
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
361
|
+
onClick: onClose,
|
|
362
|
+
disabled: busy,
|
|
363
|
+
children: 'Cancel'
|
|
364
|
+
})
|
|
365
|
+
]
|
|
366
|
+
})
|
|
367
|
+
]
|
|
368
|
+
})
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
SharingRuleDrawer.displayName = 'SharingRuleDrawer';
|
|
372
|
+
export default SharingRuleDrawer;
|
|
373
|
+
|
|
374
|
+
//# sourceMappingURL=sharing-rule-drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/components/sharing-rule-drawer.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport {\n CONTACT_LIFECYCLE_STAGE_LABELS,\n CONTACT_LIFECYCLE_STAGES,\n CRM_LEAD_STATUS_LABELS,\n CRM_LEAD_STATUSES,\n crmMemberPickerLabel,\n} from '@aglyn/aglyn'\nimport { hostIdsFromScope, ORG_SCOPE_TOKEN } from '@aglyn/aglyn/app-utils/scope-tokens'\nimport {\n Button,\n Checkbox,\n Drawer,\n FormControl,\n FormControlLabel,\n FormGroup,\n FormHelperText,\n FormLabel,\n MenuItem,\n Radio,\n RadioGroup,\n Stack,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useEffect, useState } from 'react'\nimport type { OrgMemberOption } from '../hooks/use-org-member-directory'\nimport {\n CRM_SHARING_CRITERIA_FOR,\n CRM_SHARING_OBJECT_LABELS,\n CRM_SHARING_OBJECTS,\n type CrmShareAccess,\n type CrmSharingCriteria,\n type CrmSharingObject,\n type CrmSharingRule,\n type CrmSharingSite,\n} from '../model/crm-sharing'\n\n/** What the drawer hands back: the rule as `crm/sharing` `rule-save` reads it. */\nexport interface SharingRuleDraft {\n id?: string\n name: string\n object: CrmSharingObject\n enabled: boolean\n sourceHostIds: string[]\n criteria: CrmSharingCriteria\n targets: 'all' | string[]\n access: CrmShareAccess\n}\n\nexport interface SharingRuleDrawerProps {\n open: boolean\n onClose: () => void\n /** The rule being edited, or `null` for a new one. */\n rule: CrmSharingRule | null\n sites: readonly CrmSharingSite[]\n members: readonly OrgMemberOption[]\n campaigns: readonly { value: string; label: string }[]\n busy: boolean\n onSubmit: (draft: SharingRuleDraft) => void\n}\n\nconst splitList = (text: string) =>\n [...new Set(text.split(',').map((entry) => entry.trim()).filter(Boolean))].slice(0, 20)\n\n/**\n * A sharing rule, three parts (AGL-3336): WHICH RECORDS (an object, the\n * sites that captured them, optional criteria), SHARED WITH (sites, or all\n * sites), and ACCESS (read-only unless edit is chosen).\n */\nexport function SharingRuleDrawer(props: SharingRuleDrawerProps) {\n const { open, onClose, rule, sites, members, campaigns, busy, onSubmit } = props\n const [name, setName] = useState('')\n const [object, setObject] = useState<CrmSharingObject>('leads')\n const [enabled, setEnabled] = useState(true)\n const [sourceHostIds, setSourceHostIds] = useState<string[]>([])\n const [leadSources, setLeadSources] = useState('')\n const [tags, setTags] = useState('')\n const [stages, setStages] = useState<string[]>([])\n const [ownerUids, setOwnerUids] = useState<string[]>([])\n const [campaignIds, setCampaignIds] = useState<string[]>([])\n const [allSites, setAllSites] = useState(true)\n const [targets, setTargets] = useState<string[]>([])\n const [access, setAccess] = useState<CrmShareAccess>('read')\n\n useEffect(() => {\n if (!open) return\n setName(rule?.name ?? '')\n setObject(rule?.object ?? 'leads')\n setEnabled(rule?.enabled ?? true)\n setSourceHostIds(rule?.sourceHostIds ?? [])\n setLeadSources((rule?.criteria.leadSources ?? []).join(', '))\n setTags((rule?.criteria.tags ?? []).join(', '))\n setStages(rule?.criteria.stages ?? [])\n setOwnerUids(rule?.criteria.ownerUids ?? [])\n setCampaignIds(rule?.criteria.campaignIds ?? [])\n setAllSites(rule ? rule.targets.includes(ORG_SCOPE_TOKEN) : true)\n setTargets(rule ? hostIdsFromScope(rule.targets) : [])\n setAccess(rule?.access ?? 'read')\n }, [open, rule])\n\n const offers = CRM_SHARING_CRITERIA_FOR[object]\n const stageOptions: { value: string; label: string }[] =\n object === 'leads'\n ? CRM_LEAD_STATUSES.map((value) => ({ value, label: CRM_LEAD_STATUS_LABELS[value] }))\n : object === 'contacts'\n ? CONTACT_LIFECYCLE_STAGES.map((value) => ({\n value,\n label: CONTACT_LIFECYCLE_STAGE_LABELS[value],\n }))\n : []\n const canSubmit =\n !busy && name.trim().length > 0 && (allSites || targets.length > 0)\n\n const submit = () => {\n if (!canSubmit) return\n const criteria: CrmSharingCriteria = {}\n if (offers.includes('leadSources') && splitList(leadSources).length) {\n criteria.leadSources = splitList(leadSources)\n }\n if (offers.includes('tags') && splitList(tags).length) {\n criteria.tags = splitList(tags).map((tag) => tag.toLowerCase())\n }\n if (stageOptions.length && stages.length) criteria.stages = stages\n if (offers.includes('ownerUids') && ownerUids.length) criteria.ownerUids = ownerUids\n if (offers.includes('campaignIds') && campaignIds.length) criteria.campaignIds = campaignIds\n onSubmit({\n ...(rule ? { id: rule.id } : {}),\n name: name.trim(),\n object,\n enabled,\n sourceHostIds,\n criteria,\n targets: allSites ? 'all' : targets,\n access,\n })\n }\n\n const siteName = (id: string) => sites.find((site) => site.id === id)?.name ?? id\n return (\n <Drawer anchor=\"right\" open={open} onClose={busy ? undefined : onClose}>\n <Stack spacing={2} sx={{ width: 400, maxWidth: '100vw', p: 3 }}>\n <Typography variant=\"h6\">{rule ? 'Edit sharing rule' : 'New sharing rule'}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Shares every record the rule matches — the ones you already have, and every one ' +\n 'captured or changed from now on. Sharing lets a site see and work a record; it ' +\n 'never shares the person’s consent.'}\n </Typography>\n <TextField\n size=\"small\"\n label=\"Name\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n slotProps={{ htmlInput: { maxLength: 120 } }}\n required\n fullWidth\n />\n <FormLabel>{'Which records'}</FormLabel>\n <TextField\n select\n size=\"small\"\n label=\"Records\"\n value={object}\n onChange={(event) => {\n setObject(event.target.value as CrmSharingObject)\n setStages([])\n }}\n disabled={Boolean(rule)}\n helperText={rule ? 'A rule keeps the kind of record it was made for.' : undefined}\n fullWidth\n >\n {CRM_SHARING_OBJECTS.map((option) => (\n <MenuItem key={option} value={option}>\n {CRM_SHARING_OBJECT_LABELS[option].many}\n </MenuItem>\n ))}\n </TextField>\n <TextField\n select\n size=\"small\"\n label=\"Captured on\"\n value={sourceHostIds}\n onChange={(event) => {\n const value = event.target.value as unknown\n setSourceHostIds(Array.isArray(value) ? (value as string[]) : String(value).split(','))\n }}\n slotProps={{\n select: {\n multiple: true,\n displayEmpty: true,\n renderValue: (value) =>\n (value as string[]).length ? (value as string[]).map(siteName).join(', ') : 'Any site',\n },\n inputLabel: { shrink: true },\n }}\n helperText=\"The sites the record was captured or created on.\"\n fullWidth\n >\n {sites.map((site) => (\n <MenuItem key={site.id} value={site.id}>\n {site.name}\n </MenuItem>\n ))}\n </TextField>\n {offers.includes('leadSources') ? (\n <TextField\n size=\"small\"\n label=\"Lead source\"\n value={leadSources}\n onChange={(event) => setLeadSources(event.target.value)}\n helperText=\"Any of these, separated by commas. Blank for any source.\"\n fullWidth\n />\n ) : null}\n {offers.includes('tags') ? (\n <TextField\n size=\"small\"\n label=\"Tags\"\n value={tags}\n onChange={(event) => setTags(event.target.value)}\n helperText=\"Any of these, separated by commas. Blank for any tags.\"\n fullWidth\n />\n ) : null}\n {stageOptions.length ? (\n <TextField\n select\n size=\"small\"\n label={object === 'leads' ? 'Status' : 'Lifecycle stage'}\n value={stages}\n onChange={(event) => {\n const value = event.target.value as unknown\n setStages(Array.isArray(value) ? (value as string[]) : String(value).split(','))\n }}\n slotProps={{\n select: {\n multiple: true,\n displayEmpty: true,\n renderValue: (value) =>\n (value as string[]).length\n ? (value as string[])\n .map((id) => stageOptions.find((option) => option.value === id)?.label ?? id)\n .join(', ')\n : 'Any',\n },\n inputLabel: { shrink: true },\n }}\n fullWidth\n >\n {stageOptions.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n ) : null}\n {offers.includes('campaignIds') && campaigns.length ? (\n <TextField\n select\n size=\"small\"\n label=\"Campaign\"\n value={campaignIds}\n onChange={(event) => {\n const value = event.target.value as unknown\n setCampaignIds(Array.isArray(value) ? (value as string[]) : String(value).split(','))\n }}\n slotProps={{\n select: {\n multiple: true,\n displayEmpty: true,\n renderValue: (value) =>\n (value as string[]).length\n ? (value as string[])\n .map((id) => campaigns.find((option) => option.value === id)?.label ?? id)\n .join(', ')\n : 'Any',\n },\n inputLabel: { shrink: true },\n }}\n fullWidth\n >\n {campaigns.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n ) : null}\n <TextField\n select\n size=\"small\"\n label=\"Owner\"\n value={ownerUids}\n onChange={(event) => {\n const value = event.target.value as unknown\n setOwnerUids(Array.isArray(value) ? (value as string[]) : String(value).split(','))\n }}\n slotProps={{\n select: {\n multiple: true,\n displayEmpty: true,\n renderValue: (value) =>\n (value as string[]).length\n ? (value as string[])\n .map((uid) => {\n const member = members.find((entry) => entry.uid === uid)\n return member ? crmMemberPickerLabel(member) : uid\n })\n .join(', ')\n : 'Anyone',\n },\n inputLabel: { shrink: true },\n }}\n fullWidth\n >\n {members.map((member) => (\n <MenuItem key={member.uid} value={member.uid}>\n {crmMemberPickerLabel(member)}\n </MenuItem>\n ))}\n </TextField>\n <FormControl>\n <FormLabel>{'Shared with'}</FormLabel>\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox checked={allSites} onChange={(event) => setAllSites(event.target.checked)} />\n }\n label=\"All sites, including sites added later\"\n />\n {sites.map((site) => (\n <FormControlLabel\n key={site.id}\n control={\n <Checkbox\n checked={allSites || targets.includes(site.id)}\n disabled={allSites}\n onChange={(event) =>\n setTargets((current) =>\n event.target.checked\n ? [...current, site.id]\n : current.filter((id) => id !== site.id),\n )\n }\n />\n }\n label={site.name}\n />\n ))}\n </FormGroup>\n </FormControl>\n <FormControl>\n <FormLabel>{'Access'}</FormLabel>\n <RadioGroup\n value={access}\n onChange={(event) => setAccess(event.target.value === 'edit' ? 'edit' : 'read')}\n >\n <FormControlLabel value=\"read\" control={<Radio size=\"small\" />} label=\"Read-only\" />\n <FormControlLabel value=\"edit\" control={<Radio size=\"small\" />} label=\"Read and edit\" />\n </RadioGroup>\n </FormControl>\n <FormControlLabel\n control={<Switch checked={enabled} onChange={(event) => setEnabled(event.target.checked)} />}\n label=\"On\"\n />\n {!enabled ? (\n <FormHelperText>{'Off keeps the rule and takes away what it shared.'}</FormHelperText>\n ) : null}\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"contained\" disabled={!canSubmit} onClick={submit}>\n {rule ? 'Save rule' : 'Add rule'}\n </Button>\n <Button onClick={onClose} disabled={busy}>\n {'Cancel'}\n </Button>\n </Stack>\n </Stack>\n </Drawer>\n )\n}\nSharingRuleDrawer.displayName = 'SharingRuleDrawer'\n\nexport default SharingRuleDrawer\n"],"names":["CONTACT_LIFECYCLE_STAGE_LABELS","CONTACT_LIFECYCLE_STAGES","CRM_LEAD_STATUS_LABELS","CRM_LEAD_STATUSES","crmMemberPickerLabel","hostIdsFromScope","ORG_SCOPE_TOKEN","Button","Checkbox","Drawer","FormControl","FormControlLabel","FormGroup","FormHelperText","FormLabel","MenuItem","Radio","RadioGroup","Stack","Switch","TextField","Typography","useEffect","useState","CRM_SHARING_CRITERIA_FOR","CRM_SHARING_OBJECT_LABELS","CRM_SHARING_OBJECTS","splitList","text","Set","split","map","entry","trim","filter","Boolean","slice","SharingRuleDrawer","props","open","onClose","rule","sites","members","campaigns","busy","onSubmit","name","setName","object","setObject","enabled","setEnabled","sourceHostIds","setSourceHostIds","leadSources","setLeadSources","tags","setTags","stages","setStages","ownerUids","setOwnerUids","campaignIds","setCampaignIds","allSites","setAllSites","targets","setTargets","access","setAccess","criteria","join","includes","offers","stageOptions","value","label","canSubmit","length","submit","tag","toLowerCase","id","siteName","find","site","anchor","undefined","spacing","sx","width","maxWidth","p","variant","color","size","onChange","event","target","slotProps","htmlInput","maxLength","required","fullWidth","select","disabled","helperText","option","many","Array","isArray","String","multiple","displayEmpty","renderValue","inputLabel","shrink","uid","member","control","checked","current","direction","onClick","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CrmOrgDoc } from '../hooks/use-crm-scope';
|
|
2
|
+
export interface SharingRulesCardProps {
|
|
3
|
+
orgId: string | null;
|
|
4
|
+
org: CrmOrgDoc;
|
|
5
|
+
canManage: boolean;
|
|
6
|
+
ready: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* SHARING RULES — the organization's automated sharing (AGL-3336).
|
|
10
|
+
*
|
|
11
|
+
* A rule shares every record it matches with other sites: the existing ones
|
|
12
|
+
* through a recompute that runs when the rule is saved, with its progress
|
|
13
|
+
* on the row, and every later capture or change through the record-written
|
|
14
|
+
* seam. The recompute runs in passes; the card keeps asking while the page
|
|
15
|
+
* is open, and a rule whose run stopped offers Resume.
|
|
16
|
+
*
|
|
17
|
+
* Mounted at the organization level only: a rule is a fact about the org,
|
|
18
|
+
* and its targets are the org's sites.
|
|
19
|
+
*/
|
|
20
|
+
export declare function SharingRulesCard(props: SharingRulesCardProps): import("react").JSX.Element;
|
|
21
|
+
export declare namespace SharingRulesCard {
|
|
22
|
+
var displayName: string;
|
|
23
|
+
}
|
|
24
|
+
export default SharingRulesCard;
|